Reentrancy Attack nedir?
Reentrancy Attack, bir sözleşme çağrı sırasında kontrolü başka bir sözleşmeye verdiğinde ve dış kod ilk sözleşmeye kayıtları güncellemeyi bitirmeden geri döndüğünde gerçekleşir. Bu zamanlama hilesi saldırgana çekimler gibi hassas işlemleri tekrar tekrar yapma imkanı verir. İade talep edip kasiyer kasayı kilitlemeden önce tezgaha geri dönmeye benzetebilirsiniz.
“Sadece eski kodlar Reentrancy Attack'e hedef olur.” Bu doğru değil. Kendi durumunu kilitlemeden önce dış çağrı yapan her sözleşme, mantık dikkatsizse savunmasız olabilir.
Reentrancy Attack nasıl çalışır
Kısa hikaye. Tipik bir akıllı sözleşmenin çağırana fon gönderen bir çekme fonksiyonu vardır. Önce fonu gönderip sonra bakiyeyi temizlerse, saldırgan bir geri çağrı yapıp bakiye sıfırlanmadan önce daha fazla talep edebilir.
- Başlangıç: Saldırgan meşru görünmek için biraz fon yatırır.
- Çağrı: Saldırgan hedef sözleşmede çekme işlemini tetikler.
- Geri çağrı: Hedef fonları gönderir ve bu, saldırganın fallback fonksiyonunu çalıştırır.
- Tekrar: O fallback, bakiye güncellenmeden önce tekrar çekme çağrısı yapar.
- Boşaltma: Döngü, sözleşme fonu veya gas bitene kadar devam eder. Evet, işte hile bu.
Küçük bir sıralama hatası, büyük bir sorun yaratır.
Reentrancy Attack neden önemli
Bunun önemini anlamalısınız çünkü zamanlama hataları gerçek parayı hızla hareket ettirebilir. Ayrıca, bu klasik saldırı türünü her geliştirici ve meraklı kullanıcının görür görmez tanıması gerekir.
- Fayda: Deseni bilmek riskli kodu tespit etmenize ve fonları güvende tutmanıza yardımcı olur.
- Bakış: Her şey bir blok zinciri üzerinde görünür ve çağrılabilir olduğundan bu saldırı kamuya açık şeffaflıktan beslenir.
- Görüldüğü yerler: DeFi, köprüler, hazineler ve hatta yönetim ödemeleri için DAO'larda karşılaşabilirsiniz.
Önce kontroller, sonra etkiler, sonra etkileşimler kuralını izleyin. Önce bakiyeleri güncelleyin, sonra dış çağrılar yapın. Ek güvenlik için basit bir reentrancy koruması ekleyin.
Reentrancy Attack'in Temel Özellikleri
İşte işleyişini sağlayan unsurlar:
- Yineleme: Dış kod, tamamlamadan önce aynı sözleşmeye geri çağrı yapar.
- Sıralama: Hata, fon gönderme veya dış çağrıların durum güncellemelerinden önce gerçekleştiği durumda ortaya çıkar.
- Çapraz: Sadece tek bir fonksiyonla sınırlı kalmaz; birden fazla sözleşme arasında sıçrayabilir.
- Varlıklar: ETH, tokenler ve hatalı kodlanmış muhasebe kredileriyle bile çalışabilir.
Varyasyonlar
Farklı türler, gevşek kod için aynı sorun:
- Tekil: Aynı fonksiyona defalarca yeniden girme.
- Çapraz: Aynı sözleşme içinde farklı bir fonksiyon aracılığıyla yeniden girme.
- Çoklu: İki veya daha fazla sözleşme arasında döngü ile yeniden girme.
- Salt Okunur: Görünümleri veya fiyat oracle'larını etkileyerek sonraki yazmaları yanıltma.
Reentrancy Attack'i düzeltmek sadece tek bir fonksiyonla ilgili değildir. Her dış çağrıyı gözden geçirin, sıra dışı çağrı zincirleri için testler ekleyin ve düzenli denetimler planlayın.
Örnek
2016'da The DAO açığı, bakiyeler temizlenmeden önce çekme işlemi üzerinde bir reentrancy döngüsü kullanmış ve birkaç dakika içinde büyük bir hazineyi boşaltmıştır.
Eğlenceli Bilgi
Topluluğun "önce kontroller, sonra etkiler, sonra etkileşimler" sloganı erken güvenlik rehberlerinden gelir; kısa, akılda kalıcı ve işe yaradığından yerleşmiştir.
Özet
Cebinizde taşıyabileceğiniz kısa sürüm: dışarıdaki kod kendi kayıtlarınızı bitirmeden sizi çağırabiliyorsa, bunun olacağını varsayın; aksi halde ona bedava para vermiş olabilirsiniz. Buna Reentrancy Attack denir.
