Yeniden Giriş Saldırısı (Reentrancy Attack) Nedir?
Yeniden giriş saldırısı, bir akıllı sözleşmenin dışarıdan çağırdığı başka bir sözleşme ya da cüzdan adresi üzerinden beklenmedik şekilde tekrar tekrar çağrılarak kandırılmasıyla gerçekleşen bir güvenlik açığıdır. Bu saldırı türü, özellikle Ethereum gibi akıllı sözleşme tabanlı blok zincirlerde büyük zararlara yol açabilir.

Saldırgan, normalde yalnızca bir kez gerçekleşmesi gereken bir işlemi tekrar tekrar tetikleyerek sözleşmeden fazladan fon çekebilir. En bilinen örneklerden biri, 2016’daki DAO saldırısıdır ve bu olay Ethereum’un tarihindeki en kritik kırılma noktalarından biridir.
Yeniden Giriş Saldırısı Nasıl Çalışır?
Yeniden giriş saldırısı, bir akıllı sözleşmenin ödeme yaptığı kullanıcıya, işlem tamamlanmadan tekrar aynı fonksiyonu çağırma imkanı tanımasıyla ortaya çıkar.
Diyelim ki bir akıllı sözleşme, kullanıcıların yatırdığı parayı diledikleri zaman çekmesine izin veriyor. Ancak bu süreçte işlem sırası şu şekilde:
- Kullanıcının çekmek istediği bakiye kontrol edilir.
- Bu miktar kullanıcıya gönderilir (call veya transfer ile).
- Ardından kullanıcının bakiyesi sıfırlanır.
Saldırgan ise şu şekilde davranır:
- Para gönderme adımında, aslında bir cüzdan değil, kendi hazırladığı bir akıllı sözleşme ile ödeme alır.
- Bu sözleşme, ödeme aldığı anda tekrar withdraw() fonksiyonunu çağırır.
- Ana sözleşme, kullanıcının bakiyesi hala sıfırlanmadığı için bir kez daha ödeme yapar.
- Bu işlem defalarca tekrarlanabilir ve tüm fonlar çekilebilir.
Daha Net Anlamak İçin: Bir Örnek
Bir bağış akıllı sözleşmesi düşünelim. Kullanıcılar istedikleri zaman yatırdıkları bağışları geri çekebiliyor olsunlar. Ancak sözleşme önce kullanıcıya parayı gönderiyor, sonra bakiyesini sıfırlıyor.
Saldırgan şöyle davranabilir:
- Sahte bir sözleşme ile bağış yapar.
- Para çekme fonksiyonunu çağırır.
- Fonksiyon, sahte sözleşmeye para gönderirken onun içinde tekrar “withdraw” çağrısı yapılır.
- Bu işlem, bakiyeyi sıfırlamadan defalarca tekrar eder ve saldırgan kasadaki tüm fonları boşaltır.
Neden Bu Kadar Önemli?
Yeniden giriş saldırıları, çok sayıda DeFi ve NFT projesinde ciddi fon kayıplarına neden olmuştur. DAO saldırısında yaklaşık $60 milyon değerinde ETH çalınmış, bu olay Ethereum'un çatallanmasına (Ethereum ve Ethereum Classic) yol açmıştır.
Bu tür saldırılar, yalnızca para kaybına değil, protokollerin güven kaybına ve kullanıcıların endişelerine de neden olur.
Yeniden Giriş Saldırısı Nasıl Önlenir?
Biraz teknik ve geliştirici odaklı bir başlık olsa da değinmemiz gerekiyor. İşte geliştiriciler için bazı temel güvenlik önlemleri:
- Checks-Effects-Interactions Modeli: Önce gerekli kontroller yapılır, sonra durum güncellenir, en son dış çağrı yapılır.
- Reentrancy Guard: OpenZeppelin gibi kütüphanelerde bulunan “nonReentrant” koruması ile aynı fonksiyonun yeniden çağrılması engellenebilir.
- Dış çağrıları en aza indirme: Özellikle kullanıcı kontrollü adreslere “call” veya “transfer” yaparken dikkatli olunmalı.
- Akıllı sözleşme denetimleri: Kodlar bağımsız güvenlik firmaları tarafından denetlenmeli.
Sonuç
Yeniden giriş saldırısı, basit gibi görünen bir işlem sıralaması hatasının, nasıl büyük güvenlik açıklarına ve maddi kayıplara yol açabileceğini gösteren kritik bir örnektir. Ethereum ekosisteminin en eski ve pahalı derslerinden biridir.
Bugünün DeFi projeleri bu tehlikeye karşı daha bilinçli olsa da, her geliştirici ve yatırımcının bu riski anlaması, sözleşme tasarımında dikkatli davranması şarttır.



