Akıllı sözleşmelerdeki potansiyel güvenlik açıkları

Çığır açıcı olmasına rağmen akıllı sözleşmeler, kötü niyetli tarafların yararlanabileceği kusurlara karşı dayanıklı değildir.

Yetersiz girdi doğrulama, saldırganların beklenmedik girdiler sağlayarak sözleşmenin yürütülmesini etkilemesine olanak tanıyan yaygın bir zayıflıktır. Ayrıca iş mantığının yanlış uygulanması, sözleşmede beklenmeyen davranışlar veya mantıksal boşluklar yaratarak güvenlik açıklarına neden olabilir. Ayrıca, uygunsuz şekilde ele alınırsa, harici veri kaynakları veya diğer sözleşmelerle arayüzleri içeren güvenli olmayan harici çağrılar güvenlik açıklarına neden olabilir.

Yeniden giriş saldırıları, bir sözleşmenin kendi durum değişikliklerini tamamlamadan önce başka bir sözleşmeyi dışarıdan çağırması durumunda ortaya çıkan zayıflıklardır. Bu, aranan sözleşmenin çağıran sözleşmeye yeniden girmesine ve belki de bazı işlemlerini yeniden gerçekleştirmesine olanak tanır. Bu, beklenmedik eylemlere neden olabilir ve saldırganların sözleşmenin durumunu değiştirmesine, dolayısıyla fonların tükenmesine veya başka olumsuz etkilere yol açmasına neden olabilir.

Bu tür saldırıların olasılığı göz önüne alındığında, geliştiricilerin harici sözleşmeler veya veri kaynaklarıyla çalışırken de dikkatli davranması, beklenmedik davranışlardan ve güvenlik açıklarından kaçınmak için harici çağrıların doğru şekilde ele alındığından emin olması gerekir. Akıllı sözleşme testi gibi güvenlik prosedürlerine yakından dikkat ederek akıllı sözleşmelerin gelişen tehditlerden korunmasına yardımcı olabilirler.

Akıllı sözleşmelerde yeniden giriş saldırıları nelerdir?

Akıllı sözleşmelerde yeniden giriş saldırıları, bir sözleşmenin kendi durum değişikliklerini tamamlamadan önce başka bir sözleşmeyi veya işlevi dışarıdan çağırması durumunda gerçekleşir.

Bu, aranan sözleşmenin çağrı sözleşmesine yeniden girmesine ve muhtemelen operasyonlarının bir kısmını yeniden gerçekleştirmesine olanak tanır; bu da öngörülemeyen ve sıklıkla kötü niyetli davranışlarla sonuçlanabilir. Örneğin, A sözleşmesinin B sözleşmesini fon göndermeye çağırdığı ve ardından kendi durumunu değiştirdiği bir durum.

Sözleşme B'nin kodu, A sözleşmesine yeniden girmesine ve muhtemelen A sözleşmesi durum değişikliklerini tamamlamadan önce transfer işlevini yeniden yürütmesine olanak tanıyan bir geri çağırma işlevi içerebilir. Bu, saldırganın ilk işlemi tamamlamadan önce A sözleşmesinden birkaç kez para almasına olanak tanır.

2016 yılında Ethereum blok zincirindeki kötü şöhretli merkezi olmayan özerk organizasyon (DAO) hack'i, iyi bilinen bir başka örnektir. Bir saldırgan, akıllı sözleşme kodundaki bir yeniden giriş kusurundan yararlanarak yinelemeli olarak DAO'dan fonları kaldırdı ve bu da sonuçta milyonlarca dolar değerinde Ether'in (ETH) çalınmasına neden oldu.

Üstelik Uniswap, Lendf.Me, BurgerSwap, SURGEBNB, Cream Finance ve Siren Protokolü dahil olmak üzere birçok merkezi olmayan finans (DeFi) protokolü, yeniden giriş istismarları nedeniyle önemli mali kayıplara uğradı. Bu ihlaller, 3,5 milyon ila 25 milyon dolar arasında değişen kayıplarla sonuçlandı ve bu durum, DeFi alanındaki yeniden giriş güvenlik açıklarının oluşturduğu kalıcı tehdidin altını çizdi.

Yeniden giriş saldırıları nasıl çalışır?

Yeniden giriş saldırıları, saldırganların belirli işlevleri bitirmeden önce birden çok kez yürütebileceği bir döngü oluşturmak için akıllı sözleşme işlevlerinin harici çağrılarla birlikte sıralı yürütülmesini kullanır; bu, kötü niyetli davranışlara ve onaylanmamış fon çekilmelerine neden olabilir.

Kurban durum değişikliklerini tamamlamadan önce, saldırganın sözleşmesi kurbanın sözleşmesini saldırganın sözleşmesini geri çağıracak şekilde etkili bir şekilde "kandırır". Bu eylemin sonucunda yinelenen para çekme işlemleri veya diğer ihmalkar davranışlar ortaya çıkabilir.

Yukarıdaki görüntü akıllı bir sözleşmeye yeniden giriş saldırısını göstermektedir. Saldırganın sözleşmesi, kurbanın bakiyeyi güncellemeden önce Ether gönderen "geri çekme()" işlevini çağırır. Saldırganın geri dönüş işlevi tetiklenir ve kurbanın sözleşmesinden fonları boşaltmak için tekrar tekrar pull() çağrısı yapılır. Bu saldırı, kurbanın para göndermeden önce bakiyeyi güncelleyememesinden yararlanıyor.

Basitleştirilmiş bir örnek kullanarak yeniden giriş saldırılarının nasıl çalıştığını inceleyelim:

"Para çekme" işlevine sahip akıllı sözleşme

Kullanıcıların para çekmesine izin veren bir dijital cüzdan akıllı sözleşmesinin olduğunu varsayalım. Bu sözleşme, kullanıcı bakiyelerini takip etmenin yanı sıra para çekmeyi kolaylaştıran bir para çekme işlevine de sahiptir. Çekme işlevi genellikle kullanıcıların tokenlarını veya Ether'lerini akıllı sözleşmeden kişisel cüzdanlarına çekmelerine olanak tanır.

Kullanıcı etkileşimi ve işlev yürütme

Kullanıcı kendi başına cüzdanından para çekme talebinde bulunur. İstenilen para çekme tutarını girmek için para çekme özelliğini kullanırlar.

Para çekme işlevi, arandığında kullanıcının para çekme işlemi için yeterli parası olup olmadığını doğrular. Gereksinimlerin karşılanması durumunda gerekli parayı kullanıcının seçtiği adrese aktarır.

Harici arama

Zayıflığın ortaya çıktığı yer burasıdır. Para çekme işlemi kullanıcının bakiyesine yansımadan önce, sözleşme başka bir sözleşmeye veya hesaba harici çağrı yapar.

Yinelenen çağrı

Harici sözleşmenin kodu orijinal sözleşmeyi tekrar çağırabilecek bir işlev içeriyorsa (başka bir geri çekme işlevi gibi), o zaman bir özyinelemeli döngü oluşturulur. Bu, çekilme yönteminin bitmeden tekrar çağrılmasını mümkün kılar.

Yeniden giriş istismarı

Saldırgan daha sonra bu döngüden yararlanmak için kötü amaçlı bir sözleşme kullanır. Saldırganın sözleşmesi, cüzdan sözleşmesinin harici sözleşmeyi çağırması sırasında bakiye güncellemesinden önce hızlı bir şekilde cüzdanın para çekme işlevini bir kez daha çağırır.

Geri dönüş işlevi

Belirli durumlarda, akıllı sözleşmenin geri dönüş işlevi (sözleşme herhangi bir veri veya Ether olmadan bir çağrı aldığında devreye giren benzersiz bir özellik) saldırgan tarafından kullanılabilir. Yeniden giriş saldırıları, fonlar hâlâ işlenirken geri dönüş işlevinin tekrar tekrar çağrılması yoluyla gerçekleştirilebilir.

Devlet manipülasyonu ve tekrarlanan geri çekilmeler

Cüzdan sözleşmesi bakiyelerin güncellenmesini harici çağrılar alınana kadar geciktirdiğinden, saldırganın sözleşmesi aynı işlem içinde para çekme işlevini tekrar tekrar kullanabilir. Sonuç olarak bu, fonların izinsiz olarak alınmasını kolaylaştırarak saldırganın yasal olarak hak ettiğinden daha fazlasını çalmasına olanak tanır. Daha sonra cüzdan sözleşmesinin kullanıcılarına önemli mali kayıplar verir.

Yeniden giriş saldırılarının sonuçları

Yeniden giriş saldırıları, önemli mali kayıplara neden olma potansiyelleri nedeniyle akıllı sözleşme kullanıcıları için ciddi sonuçlar doğurmaktadır.

Yeniden giriş saldırısının en acil sonuçlarından biri, duyarlı bir akıllı sözleşmede tutulan nakdin yetkisiz olarak çekilmesi veya manipülasyonudur. Saldırganlar bu güvenlik açığından yararlanarak sözleşmeden sürekli olarak para çeker, bakiyeyi tüketir ve etkilenen sözleşmeye varlık yatıran veya varlık depolayan kullanıcılar için potansiyel olarak önemli mali kayıplara neden olur.

Ayrıca, kullanıcıların akıllı sözleşmelerin ve genel olarak blockchain teknolojisinin güvenliğine ve bütünlüğüne olan inancı, yeniden giriş saldırıları tarafından zayıflatılabilir. Yeniden giriş güvenlik açıkları, Ethereum blok zincirindeki 2016 DAO saldırısı gibi yüksek profilli olayların da gösterdiği gibi, çok büyük mali kayıplara ve topluluğun itibarına zarar vermeye yol açan feci etkilere sahip olabilir.

Kısa vadeli mali sonuçların ötesinde, yeniden giriş saldırılarının düzenleyici ve yasal dikkat, yatırımcı güveninin azalması ve blockchain platformlarının ve projelerinin itibarına zarar vermesi gibi daha uzun vadeli etkileri olabilir. Saldırılara karşı güvenlik açığı algısı, kullanıcıların akıllı sözleşmelerle etkileşimde bulunurken veya merkezi olmayan uygulamalara (DApp'ler) yatırım yaparken dikkatli olmasına neden olabilir ve böylece blockchain teknolojisinin benimsenmesini ve genişletilmesini engelleyebilir.

Yeniden giriş saldırıları nasıl azaltılır

Yeniden giriş tehditlerini azaltmak için akıllı sözleşme oluşturma ve denetiminde en iyi uygulamaları uygulamak gerekir.

Buna, güvenlik geçmişi olan iyi bilinen kod kitaplıklarının kullanılması da dahildir; bu da bunu yapmanın bir yoludur. Bu kütüphaneler, güvenlik açıklarının ortaya çıkma olasılığını azaltan kapsamlı testlerden ve meslektaş incelemesinden geçmiştir.

Geliştiriciler ayrıca durum değişikliklerinin atomik olarak gerçekleşmesini sağlayarak yeniden giriş saldırıları olasılığını en aza indiren "kontroller-etkiler-etkileşim" tasarımı gibi güvenlik kontrollerini de kullanmalıdır. Bu tür güvenlik açıklarına karşı ek bir savunma hattı, eğer mevcutsa, yeniden giriş korumalı akıllı sözleşme geliştirme çerçeveleri kullanılarak eklenebilir.

Geliştiricilerin güvenlik korumalarını manuel olarak eklemek zorunda kalma olasılığı daha düşüktür çünkü bu çerçeveler sıklıkla yeniden giriş saldırılarını önlemek için açıkça tasarlanmış yerleşik yöntemler ve korumalar içerir. Ancak blockchain güvenliği hâlâ gelişmekte olduğundan geliştiricilerin yeni tehditler ve zayıf noktalara karşı tetikte olmaya devam etmesi gerekiyor.