Ethereum Üzerinde Smart Contract Honeypotları

Ethereum Nedir?

Ethereum, blockchain tabanlı, akıllı kontrat işlevi olan açık kaynak kodlu platformdur.

Smart Contract Nedir?

Smart contract (Akıllı kontrat), direkt olarak kodlarla kendi kendini yürüten alıcı ve satıcı arasındaki sözleşmedir.

Ethereum Virtual Machine (EVM) üzerinde akıllı kontrat geliştirmek mümkündür. Bunun için “Solidity” programlama dili kullanılmaktadır. Yeni yeni gelişiyor olmasından kaynaklı bu sistemler üzerinde ciddi problemler bulunmaktadır. Problemleri kendi lehine çevirmek isteyen kötü niyetli kişiler, dikkatsiz ve biraz aç gözlü insanları kendi ağına düşürmek için uygulamalar geliştirmektedir. Buradaki asıl sıkıntı problemlerin oluşu değil, koda yüzeysel olarak bakıldığında yapılan kurnazlıkların dikkat çekmemesidir. Bu yazıda geliştirilen birkaç uygulamadan ve kullanılan yöntemlerden bahsedeceğim.

Kelime Oyunları

Bu linkteki kod, mevcut jackpot değerinden daha fazlasını gönderirseniz ve 5 gün içinde daha fazla miktarda transfer yapılmazsa tüm bakiyeyi size aktaracağını söylüyor.


Koda baktığımızda “owner” değişkenini gönderici ile değiştirdiğini ve 5 günün sonrasında şartlar uygun olursa bir transfer işlemi gerçekleştirildiğini görüyoruz. Burada “Owned” içerisindeki “owner” ı değil de diğer “owner” üzerinde değişiklik yapıldığı için kontratın gerçek sahibi değişmiyor ve transfer kontratı oluşturan kişiye yapılıyor.

Kontratın transfer detaylarına bakıldığında buraya ether transferi yapanların olduğu gözüküyor.

Integer Overflow

Buradaki uygulama, aktarılan parayı 2ye katlayarak geri ödeyeceğini iddia ediyor. Kaynak koda hızlıca bakış atıldığında bir problem yokmuş gibi gözüküyor.

Buradaki sıkıntı “for” döngüsü içerisindeki “i” değişkeninden kaynaklanıyor. Soruna geçmeden önce ufak bir not düşmek gerekiyor:

“msg.value” birim olarak “wei” kullanır ve 1 ether 1000000000000000000 wei ye eşittir.

“var i = 0”  şeklinde bir tanımlama yapıldığında otomatik olarak 8 bitlik tanımlama sağlanır. Yani alabileceği maksimum değer 255tir. 

(Solidity dökümantasyonu)

Bu problemden dolayı i değeri 255 e ulaştığında başa dönecek ve 0 dan tekrar artmaya başlayacak. Bu durumu geçmişteki blog yazımda ele almıştım, buradaki linkten detaylara ulaşabilirsiniz

Böylece kaç ether gönderirse göndersin kurbanın geri alacağı en fazla miktar 255*2 den 510 wei, yani 0.00000000000000051 etherdir.

IF ELSE

Bana ethereum gönder ve ben sana gönderdiğinden daha fazlasını göndereceğim diyen bir smart contract tuzağına ait kaynak kod:

https://etherscan.io/address/0x5aa88d2901c68fda244f1d0584400368d2c8e739#code

Aşağıdaki koda bakıldığında gerçekten söylendiği gibi transfer gerçekleşecekmiş gibi duruyor.

Fakat “if” koşulu sağlanmayacağından belirtilen transfer gerçekleşmeyecektir. Parayı gönderen gönderdiği ile kalacak ve parasını katlayamayacak.

Bir dönemler ünlü isimlerin sahte hesapları açılarak ethereum dağıttıklarına dair tweetler sıkça atılıyordu.

Bu ve buna benzer yöntemler o kadar sık kullanılıyordu ki, ünlü isimler bu tarz dağıtımlar yapmadıklarına dair tweetler atıyordu.

Böylece görünüyor ki blockchain, merkezi olmayan güvenli bir teknoloji gibi görünse de yine kendi içinde farklı sorunları barındırıyor.

Kaynaklar

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir