2016’dan kalma Ethereum akıllı sözleşmesinden 1.003 ETH kurtarıldı

Google News Icon Takip Et

Beyaz şapkalı bir araştırmacının, başarısız bir 2016 Ethereum ICO’sundan 1.003,62 ETH’yi kurtarması, eski bir akıllı sözleşme açığını Ethereum’un ilk teknik kararlarının neredeyse on yıl boyunca etkili kalabileceğine dair bir hatırlatmaya dönüştürdü.

0xFlorent takma adıyla bilinen araştırmacı, dokuz yıl boyunca kilitli kalan ETH’leri HongCoin sözleşmesinden çıkarmayı başardığını açıkladı. 1 Haziran’daki yaklaşık 1.983 dolarlık Ethereum fiyatı baz alındığında, kurtarılan miktarın değeri yaklaşık 1,99 milyon dolara ulaşıyor.

Bu kurtarma işlemi, orijinal HongCoin multisig yapısına bağlıydı. Sözleşme, ilgili yönetici işlemleri için hâlâ bu yönetim yolundan onay gerektiriyordu.

Bu durum, süreci geleneksel bir saldırıdan ziyade sözleşme arkeolojisine yaklaştırdı: Geri ödeme hatasını koruyan değiştirilemez kod, aynı zamanda bu hatanın etrafından dolaşmayı sağlayan unutulmuş bir yolu da saklı tutuyordu.

HongCoin’in durumu çarpıcı bir tezat oluşturuyor. Ethereum’un temel katmanı değişmeden kaldı. Hâlâ geçerli olan izin yolu ve orijinal multisig’in koordineli imzaları sayesinde, 48 orijinal yatırımcı, yıllardır çalışmayan bir geri ödeme mekanizması üzerinden fon talep edebilecek duruma geldi.

Geri ödeme yolunun nasıl bozulduğu

HongCoin, 2016 yılında Ethereum üzerinde başlatılan ve halka açık deposunda merkeziyetsiz bir girişim fonu olarak tanımlanan bir projeydi. Token satışı hedeflenen fonu toplayamadı ve katılımcıların, sözleşmenin geri ödeme fonksiyonu aracılığıyla ETH’lerini geri alabilmeleri gerekiyordu.

Sorun, sözleşmenin muhasebe yapısında ortaya çıktı. HongCoin kaynak kodunda refundMyIcoInvestment() fonksiyonu, çağrıyı yapanın token bakiyesinin tokensCreated değerinden büyük olup olmadığını kontrol ediyor. Eğer bu koşul sağlanırsa, geri ödeme işlemi başarısız oluyor.

Koşul sağlanmazsa, fonksiyon çağrıyı yapanın token bakiyesini sıfırlıyor, ilgili muhasebe kayıtlarını temizliyor, tokensCreated değerini bu miktar kadar azaltıyor ve ardından geri ödemeyi gerçekleştiriyor.

Zamanla, önceki geri ödemeler global tokensCreated sayacını azalttı. Bu da büyük yatırımcıları tuhaf bir duruma soktu: Orijinal taleplerine bağlı bakiyeleri hâlâ duruyordu, ancak bu bakiyeler sözleşmede kalan sayaçtan daha büyük olabiliyordu.

Geri ödeme fonksiyonu, bu durumda onları geçersiz sayarak, aslında geri ödeme alması gereken kullanıcıların işlemlerini engelledi.

Kaçış yolu ise başka bir eski kod parçasıydı. Multisig ile kısıtlanmış mgmtIssueBountyToken() yönetici fonksiyonu, alıcının bakiyesine ve bountyTokensCreated değerine belirli bir miktar ekleyebiliyordu.

Bu yol, sözleşmenin yönetim tarafına aitti ve bu nedenle orijinal multisig’in katılımı gerekiyordu. Modern Solidity sürümlerinde taşma (overflow) durumunda işlemler varsayılan olarak iptal ediliyor.

Ancak Solidity 0.8.0 öncesinde, taşma durumunda aritmetik işlemler kendi kendine sıfırlanıyordu; geliştiriciler ekstra kontrol eklemedikçe bu davranış değişmiyordu. Eski davranış, kaçış yolunun temelini oluşturdu.

0xFlorent, yönetici fonksiyonunun aritmetik davranışını kullanarak bir yatırımcının bakiyesini geri ödeme kontrolünden geçecek kadar düşürebileceğini tespit etti. Sonuç olarak, eski bir hata, başka bir eski hatanın yol açtığı zararı telafi etmeye yardımcı oldu.

2016’daki token satışı sırasında HongCoin, girişim fonu tarzında bir Ethereum projesi için ETH topladı ancak hedefe ulaşamadı. Geri ödeme fonksiyonu, global token sayacı yatırımcı bakiyelerinin altına düştüğünde büyük yatırımcıların taleplerini reddetti. Multisig ile kısıtlanmış bir yönetici fonksiyonu, eski Solidity aritmetiğiyle bakiyeleri değiştirebiliyordu. 0xFlorent, orijinal HongCoin multisig ile koordinasyon sağlayarak engellenen yatırımcıların fon talep edebilmesini mümkün kıldı. 29 Mayıs tarihli zincir üstü bir işlem, refundMyIcoInvestment() çağrısıyla 96 ETH’lik başarılı bir iç transferi gösteriyor.

Multisig, kurtarmayı koordineli hale getirdi

HongCoin kurtarmasında multisig gerekliliği önemli bir sınır çizdi. Hassas yol, HongCoin’in orijinal yönetim adresinin ilgili işlemleri gerçekleştirmesini gerektiriyordu. Bu nedenle, pratikte kurtarma işlemi araştırmacı ile eski yönetim arasında iş birliğiyle mümkün oldu.

Kod kadar koordinasyon da belirleyici oldu. Kurtarma sürecinde, engellenen yatırımcılar için 41 imzalı işlem gerçekleştirildi. Yedi küçük yatırımcı ise ek bir işleme gerek kalmadan doğrudan geri ödeme alabildi.

ICO, 29 Ağustos 2016’da başladı, 28 Ekim 2016’da sona erdi ve fonlama hedefine ulaşamadı.

Zincir üstü kayıtlar, geri ödeme işlemlerinin başladığını gösteriyor. 29 Mayıs tarihli bir işlemde refundMyIcoInvestment() fonksiyonu çağrıldı ve HongCoin sözleşmesinden bir yatırımcı adresine 96 ETH’lik iç transfer gerçekleşti.

Üst düzey işlemde 0 ETH hareketi görülse de, asıl transfer sözleşme çağrısı içinde yapıldı.

Fon hareketini takip edenler için, uygunluk ile tamamlanmış dağıtımın ayrılması gerekiyor. Sözleşme durumu ve multisig işlemleri, yıllardır erişilemeyen fonlar için yeniden talep yolunu açtı.

Gözlemlenebilen zincir üstü örnekler, tüm uygun yatırımcıların taleplerinin tam muhasebesini değil, yalnızca geri ödeme faaliyetini gösteriyor.

HongCoin örneği, eski kilitli fonların genellenmesinden önce dikkatle incelenmeli. Buradaki koşullar olağanüstü derecede özeldi: Tanımlanabilir sözleşme mantığı, hâlâ kullanılabilir bir yönetici fonksiyonu, iş birliğine açık bir beyaz şapkalı araştırmacı ve çabayı anlamlı kılacak kadar zincir üstünde kalan değer.

Pratikte belirleyici olan, sahiplik ve izinler. Eski fonksiyon bakiyeleri değiştirebiliyordu, ancak yalnızca yönetim yolu bu işlemi başlatabiliyordu.

Bu durum, kurtarmaya etik ve operasyonel bir sınır getiriyor: Dışarıdan bir araştırmacı yolu buldu, orijinal imzacılar işlemi gerçekleştirdi ve yatırımcılar için talep yolu yeniden açıldı.

Aynı gerçekler, bu örneğin genellenmesini de zorlaştırıyor. Birçok atıl sözleşmede aktif bir yönetim anahtarı, net bir hak sahibi listesi veya sorumlu kurtarmayı mümkün kılacak şeffaf bir iz bulunmuyor.

Bu sınır, yaşanan olayı geniş çaplı bir istismar şablonu olarak görme eğilimini de azaltıyor. Teknik mekanizma, geri ödeme kapısının neden yeniden açıldığını açıklasa da, olayın sonucu eski kod, geçerli izinler ve kamuya açık çözümün birleşiminden kaynaklanıyor.

Benzer arkeolojik girişimler, sözleşmede bu unsurlardan biri eksikse daha riskli hale geliyor; çünkü keşif, kullanılabilir bir kurtarma yolu oluşmadan önce bir zafiyeti açığa çıkarabilir.

Ethereum, hatayı ve çözümü birlikte saklıyor

Ethereum’un genel tarihi, HongCoin kurtarmasını sıradan bir olaydan öteye taşıyor. Coinbase’den Conor Grogan’ın analizine göre, kalıcı olarak kaybolan ETH miktarı 913.111’in üzerinde ve bu rakam, kullanıcı ve sözleşme kaynaklı hatalar dahil olmak üzere temkinli bir tahmin olarak öne çıkıyor.

Bu kategoriye, yakım adreslerine gönderilen fonlar, sözleşme hataları ve büyük tarihsel olaylar dahil.

Ethereum’un en kritik erken dönemlerinde de kurtarma tartışmaları yaşandı. 2016’da, DAO hard fork’u, ağın yönetişim krizinin ardından yaklaşık 12 milyon ETH’yi DAO ile ilişkili sözleşmelerden kurtarma sözleşmesine taşıdı.

2017’de Parity Technologies’in multisig kütüphanesinin kendi kendini yok etmesi, 587 cüzdanda toplam 513.774,16 ETH’nin kilitlenmesine yol açtı.

Bu olaylar, HongCoin’den çok daha büyük ve politik açıdan daha ağırdı. Yine de, bu küçük ölçekli kurtarmanın neden dikkat çektiğini anlamaya yardımcı oluyorlar.

Ethereum’un kod ve durumun kalıcılığı vaadi, hem bir güvenlik özelliği hem de bir hafıza sistemi işlevi görüyor. Hataları, yarı unutulmuş varsayımları, eski izinleri ve dağıtım sırasında gelecekteki önemi öngörülemeyen nadir çözümleri saklıyor.

Bu uzun hafıza, artık olgunlaşan bir güvenlik kültürünün yanında yer alıyor. Ocak ayında, Ethereum ekosisteminin deneyimli isimleri, TheDAO kurtarma fonlarından kalan yaklaşık 75.000 ETH’yi Ethereum güvenliği için stake edilmiş bir fona dönüştürme planlarını açıkladı.

HongCoin örneği çok daha küçük ölçekte olsa da, erken dönem Ethereum kararlarının uzun vadeli etkilerine işaret ediyor.

Bir sonraki test, kurtarılabilirlik olacak: Eski sözleşmelerde sorumlu şekilde kullanılabilecek yollar bulunup bulunmadığı. Beyaz şapkalı bir kurtarma için yalnızca bir hata yetmiyor; doğru bir yönetim yolu, kamuya açık zincir üstü kanıt, dikkatli bir açıklama ve sözleşme arkeolojisini fırsatçı saldırılar için bir rehbere dönüştürmeyecek bir yöntem gerekiyor.

HongCoin, bazı kilitli fonların eski mantık içinde askıda kalabileceğini ve hem açığı hem de izin yapısını anlayan birini bekleyebileceğini gösteriyor. Bu, şu anda fon talep edebilecek 48 yatırımcı için umut verici bir sonuç.

Aynı zamanda ekosistemin geri kalanı için bir uyarı niteliğinde: Ethereum, kötü kodu da hatırlıyor ve bazen kaçış yolunu da saklıyor.

Bu içerik hazırlanırken faydalanılan kaynaklar: cryptorank.io