Geçtiğimiz birkaç haftadır EOS blockchain kullanıcıları ağ erişiminde periyodik sorunlar yaşamakta. Dexaran takma ismini kullanan akıllı sözleşme geliştiricisi ve güvenlik mühendisi, yazdığı yeni bir makalede sorunun sebebinin açık olduğunu anlattı: bilgisayar korsanlarının ağı “tıkanmaya” yani düşük verimli bir moda sokmasına olanak tanıyan sadece birkaç dolarlık EOS'la yapılan ucuz bir teknik.
Bu güvenlik açığının Eylül ayında saldırganın kumar uygulaması EOSPlay'den 110.000 dolar çalmasına olanak sağladığı söyleniyor. Ancak EOS'un ana şirketi Block.one yöneticileri, ağın “doğru” şekilde çalıştığı konusunda ısrarcı.
EOS'un temelleri: Yönetişim, hisseleme ve tıkanıklık modu
EOS.io, merkezi olmayan uygulamaların (DApps) geliştirilmesi ve sunuculuğunun yapılması için blockchain özellikli bir akıllı sözleşme protokolü. Temsilcili hisse ispatı (DPoS) adı verilen mutabakat modelini kullanıyor ve EOS Kullanıcı Sözleşmesine (EUA) uygun olarak yönetiliyor.
Anlaşma uyarınca ağdaki değişiklikler, EOS blockchain'indeki blokların işlenmesinden sorumlu bağımsız kuruluşlar olan 21 Blok Üreticisinin en az 15'i arasında fikir birliği sağlandığında yapılabiliyor.
Protokol, şu anda toplam piyasa değeri sıralamasında 7. olan ve aynı adı taşıyan kendi tokeni EOS ile destekleniyor. Bu tokenler, EOS'un ayırt edici özelliklerinden biri olan yerleşik kaynak hisseleme mekanizmasının merkezinde yer almakta. EOS ağına bir işlem gönderildiğinde, Blok Üreticileri tarafından işlenmelidir.
Bir Blok Üreticisinin işlemi onaylamak için ihtiyaç duyduğu süre (mikrosaniye cinsinden ölçülür) CPU olarak adlandırılır. Basitçe anlatmak gerekirse, EOS kullanıcıları ve geliştiricileri, tokenlerini hisseleyerek zincir çapındaki CPU ve bant genişliği kaynaklarına erişebilirler. Bloklar her 500 milisaniyede bir üretilir. Her Blok Üreticisi'nin bloğu doğrulamak için 200 milisaniyesi vardır. Kalan 300 milisaniye, ağ üzerindeki dağıtım için ayrılır.
Ayrıca 200 milisaniyelik sınır içinde ağda hız sınırlandırmanın başladığı bir yüzde eşiği de bulunur. Başka bir deyişle bir blok, blok başına izin verilen toplam 200 milisaniye CPU'nun yüzde 10'luk sınırına ulaştığında, CPU ayırma algoritmasını "tıkanıklık" moduna sokar.
Makalenin yazarı, “Bu sınıra ulaşılmadan önce, tüm kullanıcılar 'tıkanıklık modunda' olmadığı için ağ üzerinde serbestçe işlem yapabilir. Bu limit aşıldıktan sonra, kullanıcılar toplam hisselenen EOS başına CPU paylarına düşürülüyor.” şeklinde açıklıyor.
EOS ağının önde gelen Blok Üreticilerinden EOS Canada'nın kaleme aldığı bir başka makaleye göre, eğer belirli bir anda CPU’ya hisselenen 1000 token varsa ve bir hesapta 20 token hisselenmişse, bu hesaba ağın toplam CPU kapasitesinin yüzde 2'si veriliyor.
Ancak eğer ağ hız sınırlandırmanın aktifleştiği eşiğe ulaşmadıysa ("tıkanıklık" modunda değilken), ağ hesaba sağlanan yüzde 2'lik miktarın üzerinde işlem yapma olanağı sağlıyor. Bu eşik geçildikten sonra, hesap kendi payını aşamaz. Ek olarak "tıkanıklık" aşaması sırasında, tıkanıklığın yaşandığı tarafların CPU gücü tükenene ve CPU tüketen eylemleri almayı kesene kadar her kullanıcının sahip olduğu CPU oranı düşmeye başlar.
EOS'un kurucu ortağı ve Block.one'ın CTO'su Daniel Larimer, bu mekanizmayı ağın “ücretsiz bir yararı” olarak nitelendiriyor:
“#Eos sahibi olmak ve bunları hisselemek, kullanıcılara mevcut bant genişliğinden oran üzerine bir pay veriyor. İnsanlar paylarını kullanmadığında, oran üzerinden başkalarına yönlendiriliyor. Yoğun kullanım sırasında kullanıcılar bu ücretsiz avantajdan faydalanmıyor.”
Sorun: Tıkanıklık modunu tetiklemek fazla kolay
Dexaran tıkanıklık modunu tetiklemenin fazla kolay olmasının sorun olduğunu savundu. Akıllı sözleşme geliştiricisi analizden sonra her saat başında ciddi CPU kullanım artışları tespit etti, bu artışların ise EOSBetDice adlı bir bahis DApp'ten kaynaklı olduğu iddia ediliyor. Bunun ardından Dexaran, ağı tıkanıklık moduna sokmak için ne kadar CPU gerektiğini bulmaya karar verdi.
Geliştirici deney için, CPU'ya 7.156 EOS hisseledi. Dexaran bu miktarın, ayda iki EOS maliyetiyle (6 doların altında) kaynak borsalarından borç olarak alınabileceğinin de altını çizdi. Güvenlik mühendisi denemenin ortalama EOS ağı kullanıcılarını nasıl etkileyeceğini görmek için oturum başlamadan hemen önce EOSKnights DApp'ı online olarak oynayan üç kullanıcı hesabı belirledi.
Geliştirici daha sonra bir saniyelik gecikmeyle birçok ertelenen işlem başlatan bir sözleşme yaptı ve her işlem “25 - 27 ms CPU” kullandı. CPU kullanımını bir dakika boyunca tekelleştiren sözleşme EOS ağını tıkanıklık moduna soktu. Sonuç olarak, her üç örnek hesabın da CPU'su tamamen tükendi ve bu nedenle “tamamen dondular.” Yani genel EOS kullanıcılarının hiç biri ağdaki DApp'leri kullanamaz hale geldi.
İki dakika sonra, daha önce bahsedilen ve deneyden bağımsız olarak saat başı CPU artışına sebep olan EOSBetDice DApp yine çalışmaya başladı. Ağın zaten aşırı yüklendiği sırada daha fazla CPU tüketerek, istemeden Dexaran'ın başlattığı tıkanıklığa katkıda bulundu. Geliştirici, “Arka arkaya ne kadar fazla CPU harcarsanız o kadar 'derin' bir tıkanıklık modu olacaktır ve ağın normal moduna dönmesi de o kadar uzun sürecektir” şeklinde açıkladı.
Sonuç olarak, EOS ağı “daha derin” bir tıkanıklığa girdi ve CPU kullanılabilirliğini tüm EOS kullanıcıları için 35 kat azaldı. Dexaran, “CPU için ne kadar EOS hisselediğinizin önemi yok, yüzde 3'ün üzerinde kullanıyorsanız donmuşsunuzdur." dedi.
Dexaran'ın sözleşmesi ve EOSBetDice'ın ağa yüklenmesinden sonra, ağ sonraki 10 dakika boyunca kilitlendi. Altı dakika daha geçtikten sonra, büyük ölçüde düzeldi, ancak EOS'un kaynak borsalarındaki borç fiyatı normalin üç kat üzerindeydi; yani stres testi nedeniyle CPU'da tahsis edilen tokenler oldukça yüksek seviyedeydi.
Ağ bu "kötü amaçlı" işlemden ancak 30 dakika sonra tamamen normale dönebildi. Geliştiricinin tahminlerine göre saldırı her saat başı gerçekleştirilebildiğinden, Dexaran bunun kullanıcılara “sonraki tıkanıklık başlayana kadar 25 dakikalık bir pencere verdiğini” belirtti. Araştırmacı, “EOS ağını ciddi bir süre boyunca tıkanıklık moduna sokmak için 7000 EOS yeterli” dedi ve ekledi:
“Açıklanan tıkanıklık modu yalnızca (1) CPU bant genişliğinin belli bir payını kullanan ve (2) çok düşük CPU bant genişliğine sahip kullanıcılar için sorun yaratacaktır. Açıklanan tıkanıklık modu, (1) çok fazla CPU'ya sahip DApp'leri, (2) herhangi bir faaliyette bulunmayan ve CPU'larını tamamen hazır tutan kullanıcıları etkilemiyor.”
Dexaran ağa kasten aşırı yüklenme yaptığı nedeniyle kendisine bazı EOS kullanıcılarının “hacker” diyebileceğini vurgulayarak, “ben tam tersini yapıyorum: Hem kendi hem de sizin yatırımlarınızı koruyorum.” dedi.
Dexaran'ın EOS tıkanıklığı hakkındaki yazısından birkaç gün önce, geliştirici Christoph Michel en son yaşanan EOSPlay casino saldırısını ağ tıkanıklığına bağlayan bir blog yazısı yazdı ve ağdaki bu sorunun nasıl kötüye kullanılabileceğini gösterdi.
Michel'in açıklamasına göre, saldırgan CPU ve NET kaynak kiralama piyasası olan REX'ten EOS tokeni kiraladı ve kumarhanenin işlevsel kalması ve bahislerinin ödemesini sağlayabilmesi için hem kendi hem de EOSPlay'in CPU'sunu artırmak için bu tokenleri hisseledi. Saldırgan daha sonra ağı Dexaran'ınkine benzer işlemlerle doldurdu ve EOSPlay'de 50/50 sonuç ihtimaliyle bahis oynadı. EOSPlay sonuç bloğunun blok hash'ine baktığından ve sağdan başlayarak sıfır dokuz arasında ilk iki karakteri aldığından, oyunu kazanmak için sonuç bloğunun blok hash'ini tahmin etmek gerekiyor.
Michel, “Tahmindeki tek bilinmeyen bloklara dahil edilen işlemler. Peki ya başka biri işlem gönderemesin diye biri ağı tamamen doldurup tıkayabilirse ne olur?” şeklinde açıkladı.
Geliştiriciye göre saldırgan tam olarak bu nedenle EOS borç alarak ağı doldurdu: ağ üzerinde kontrol sahibi olarak blok hash'lerini tahmin edebilmek ve bahislerinin çoğunu kazanmak için. Yanlış bir tahmin durumunda, saldırgan bloğa başka bir işlem daha gönderebilir ve bu şekilde fazladan bir "yazı tura atışı" yapabilir ve şansını büyük ölçüde iyileştirir.
Sonuç olarak saldırgan 1000 doların biraz üzerinde değere sahip 300 EOS kullandı, bunu da birkaç dolar karşılığında kiralamış olabilir. Buna karşılık, hileli kazanımıyla 30.000'den fazla EOS yani yaklaşık 110.000 dolar kazandı.
EOS geliştiricileri ağın “doğru şekilde çalıştığına” emin
Dexaran'ın tıkanıklık deneyleri fark edildi, bazı kullanıcılar Twitter ve Reddit üzerinden “CPU sorunları” yaşadıklarını bildirdiler. Akıllı sözleşme geliştiricilerinden oluşan bir ekip olan Graphene Lab'in CEO'su Denis Bredikhin, Cointelegraph'a poker tabanlı EOS bahis DApp kullanıcılarının da geçtiğimiz haftalarda uygulamayla sorun yaşadığını doğruladı ancak uygulamada bir sorun olmadığını söyledi. Bredikhin'in açıklaması şu şekilde:
“Tıkanıklığın en yoğun olduğu noktada, CPU’ya tahsis edilen 8-10 bin EOS’a sahip kullanıcılar bile hiçbir işlem yapamadı.”
Bredikhin'e göre 1 Ekim’den itibaren oyuncuların CPU’ya “10.000 EOS’a kadar” tahsis etmeleri gerekiyor, böylece tıkanıklık durumunda onlar için oyun etkilenmeyecek. Block.one'dan Larimer ise EOS'un “doğru şekilde çalıştığını” söyleyerek Twitter üzerinden kullanıcıları yatıştırdı. Tweet şu şekilde:
“Bu, saldırganların yüksek ücretli işlemlerle eth veya bitcoin'i doldurmasından farklı değil. Token sahipleri için ağ donmadı, sadece serbest kullanım için fazladan bant genişliği yoktu.”
Ancak bazı topluluk üyeleri katılmıyor. ABD merkezli EOS Blok Üretici CypherGlass CEO'su Rob Finch, “EOS’a yapılan bu saldırı ile BTC’ye veya ETH’ye yapılan yüksek ücretli işlem akışı arasındaki fark, BTC veya ETH’ye bir işlem göndermek için fazladan ödeme ödeyebilirsiniz.” dedi ve ekledi:
“Çoğu EOS kullanıcısının daha fazla CPU kiralamak için yeterli CPU'su yoktu, bu yüzden onlar için ağ gerçekten dondu. 'Doğru şekilde çalışması' bence iyi bir yanıt değil.”
Bir diğer EOS kullanıcısı olan blockchain girişimcisi Jared Moore, ağın DApp'ler veya cüzdanı için kullanılamaz olduğunu belirtti. Block.one'un “EOS topluluğuna yardım edip etmeyeceğini ve REX saldırılarını nasıl önleyebileceğine ilişkin kılavuz yayıp yayınlamayacağını” da merak ediyor.
Cointelegraph yorum için Block.one'a ulaştı ve daha fazla bilgi alındıktan sonra makale güncellenecektir.