Reentrancy Atak Nedir?

Reentrancy Atak Nedir?

Akıllı sözleşmelerde reentrancy atak saldırganların blok zincir ağına kötü niyetli (malicious) sözleşme konuşlandırmaları ile gerçekleşir. Konuşlandırılan kötü niyetli bu sözleşmenin amacı hedef sözleşmeyi manipüle ederek kendilerine varlık göndermelerini sağlamaktır. Bu atak öz yinelemeli(recursive) olarak çekim(withdraw) fonksiyonunu çağırmaları ile meydana gelir. Sözleşmedeki bakiye güncelleme işlemi tamamlanamadığından saldırgan birçok defa çekim işlemi yapabilir. 2016 yılında gerçeklesen Ethereum saldırısı bu yöntem ile yapılmıştır.

Reentrancy atağına karşı korumasız bir sözleşme örneği

Şekil 1.1. Reentrancy atağına karşı korumasız bir sözleşme örneği.

Solidity’ de sözleşmelerin diğer sözleşmeler veya kullanıcılardan gelen varlık transferlerini kabul edebilmesi için kullanılan Fallback adlı bir fonksiyon vardır. Fallback fonksiyonları yazılmış oldukları sözleşmelere herhangi bir transfer işlemi yapıldığında tetiklenir. Kötü niyetli kimseler reentracy atağı gerçekleştirebilmek için kendi akıllı sözleşmelerindeki fallback fonksiyonunu her çalıştığında karşı sözleşmedeki çekim fonksiyonunu çağıracak şekilde düzenlerler. Çekim fonksiyonu öncelikle isteği gönderenin sözleşmede bakiyesi olup olmadığını kontrol eder eğer var ise istenen miktarı gönderir ancak bu işlem ile atak sözleşmesindeki fallback fonksiyonumuz tetiklenir. Çekim işlemi yapan kullanıcının bakiyesi güncellenemeden tekrardan çekim fonksiyonu çağrılır bu işlem sözleşmedeki tüm varlıklar boşaltılana kadar devam eder.

reentrancy atak şema gösterimi

Şekil 1.2. Reentrancy atak şema gösterimi.

Reentrancy atağına çözüm olarak bakiye güncelleme ile çekim işlemi yapan kod komutlarının yerleri değiştirilebilir veya modifier yapıları kullanılabilir. Modifierlar fonksiyonları çağırıldıkları fonksiyonlar içerisindeki bir işlemin kontrolünün otomatik olarak yapılabilmesi için kullanılır.

solidity modifier kullanım örneği

Şekil 1.3. Modifier kullanım örneği.

Şekilde oluşturulan modifier, belirli bir fonksiyonun yürütülmesi sırasında birden fazla çağırılmasını engelleyecek şekilde tasarlanmıştır. Böylece “nonReentrant” adlı modifier yapısını fonksiyon tanımlamalarında bulunduran fonksiyonlar reentrancy atağına karsı korumalı olacaktır.

Reentrancy atak saldırılarına örnek vermek gerekilirse akla ilk olarak The DAO adındaki merkeziyetsiz uygulama verilebilir. İlk merkeziyetsiz uygulama olarak kabul edilen 2016 yılının Nisan ayında kurulan The DAO’nun hedefi yatırımcıların tüm kararları akıllı sözleşmeler yoluyla vermelerine olanak tanımak ve insansız bir risk sermayesi şirketi kurmaktı. The DAO haziran ayına kadar 150 milyon dolar yatırıma ve 11 bin yatırımcıya ulaştı. Ancak 17 Haziran’da kötü niyetli birisi The Dao’ nun akıllı sözleşmesinde bulunan çekim fonksiyonunu rekürsif olarak çağırmaya başladı ve 60 milyon dolar (3,2 milyon ETH) değerinde Ether saldırgan hesaba aktarıldı. Atağın ardından Ethereum topluluğu Hard-fork denilen çatallanma işleminin yapılmasında karar kıldı. Atağın yapıldığı ana kadar olan blok zincirine atağın yapıldığı bloklar yerine farklı bloklar eklenerek Ethereum blok zinciri ikiye ayrıldı. Atağın ardından devam eden zincirin para birimi Ethereum Classic, çatallanma sonrası devam eden zincirin para birimi ise Ethereum olarak kaldı.



Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir