Solidity ile Güvenli Akıllı Kontrat Yazımı: Reentrancy Saldırılarından Korunma
Ethereum Ağında Kendi Tokenınızı (ERC-20) Yaratırken Dikkat Etmeniz Gerekenler
Blockchain üzerinde çalışan ve şartlar sağlandığında otomatik tetiklenen kod parçacıklarına Akıllı Kontrat (Smart Contract) denir. Genellikle Solidity diliyle yazılırlar. Ancak web programlamadan farklı olarak, akıllı kontrata yazdığınız kodu blokzincire yükledikten (Deploy) sonra bir daha değiştiremezsiniz! Kodda bir güvenlik açığı varsa, milyonlarca dolar saniyeler içinde çalınabilir.
En Ölümcül Açık: Reentrancy (Yeniden Giriş) Saldırısı
Tarihteki meşhur DAO Hack olayına sebep olan bu zafiyet, kontratın "Çekim (Withdraw)" fonksiyonlarındaki mantık hatasından kaynaklanır.
Hatalı Mantık:
Kullanıcının bakiyesi kontrol edilir.
Para kullanıcıya gönderilir (`user.transfer(amount)`).
Kullanıcının bakiyesi veritabanında (State) sıfırlanır.
Saldırgan, para gönderimi anında tetiklenen özel bir zararlı kontrat (Fallback function) yazar. Bu kontrat parayı alır almaz, işlemi bitirmeden (bakiye sıfırlanma adımına geçmeden) tekrar "Çekim" fonksiyonunu çağırır. Sistem bakiyenin henüz sıfırlanmadığını gördüğü için kasadaki tüm para bitene kadar saldırgana para göndermeye devam eder (Sonsuz döngü).
Checks-Effects-Interactions Prensibi
Bu saldırıyı önlemenin tek yolu işlem sırasını değiştirmektir. Önce şartları kontrol et (Checks), sonra bakiyeyi sıfırla (Effects) ve en son parayı transfer et (Interactions). Ayrıca OpenZeppelin kütüphanesinin sağladığı ReentrancyGuard ve nonReentrant değiştiricilerini (Modifier) kullanmak sektör standardıdır.
Solidity'de Reentrancy saldırılarından korunmak için Checks-Effects-Interactions prensibini uygulamak ve bakiyeyi anında sıfırlamak hayati önem taşır.
Cevap yazmak için giriş yapmalısınız.
Giriş Yap