tek bir gerçek var!

Vakanın tekrarı

22 Ağustos öğlen saatlerinde, blockchain oyunu God.Game, oyundaki tüm tokenların saldırgan tarafından alındığını duyurdu.Proje ekibi iki ay boyunca hazırlandı ve oyun operasyondan hemen sonra hızla öldü.

Bu haberi öğrendikten sonra, Chengdu Lian'an Teknoloji Ekibi, hacker saldırı adresinin duyurulmasını beklemedi ve kod mantığı ve işlevsel doğruluk gibi temel neden sorunlarından başlayarak, saldırgan tarafından kullanılan güvenlik açıklarını bulup kurtararak sözleşme kaynak kodunun denetimini hemen başlattı. "Suç mahalli."

Güvenlik açığı konumu

Kaynak kodunu kontrol ettikten sonra, Chengdu Lian'an Technology'nin sözleşme denetim ekibi, güvenlik açığının nedeninin anormal temettüler olduğunu buldu: İlk önce temettü hesaplama mantığına bakın: getiri (uint256) ((int256) (karPerShare_ * tokenBalanceLedger _) - payoutsTo_) / büyüklük; her biri Bir adres belirteci artırıldığında veya azaldığında, adresin payoutsTo değişkeni çalıştırılır.

Token satın almak için payoutsTo değişkenini ekleyin:

Ödemeleri azaltmak için jeton satmak veya transfer etmek için değişken:

Bunların anlaşılması kolaydır.

Ancak transfer mantığında, sözleşme adresi için ödeme olmadığını gördük.Bu şüpheli nokta ilk olarak küçük deftere kaydedilir.

Bu, kaynak kodun aktarım kısmıdır.

Para çekme işlevine daha yakından bakalım:

Para çekme fonksiyonunda payoutsTo'ya bir değer atandığını ve değerin temettü * büyüklük olduğunu; burada büyüklük = 2 ** 64 olduğunu; yukarıdaki temettü mantığının (snowPerShare_ * tokenBalanceLedger_) kısmından, bir hesap olduğu sürece görülebileceğini görünce şaşırdık. Token varsa, temettülerin bir değeri olmalı ve temettülerin bir değeri olduğunda, çekilme işlemini gerçekleştirebiliriz.

Saldırı süreci muhakemesi

1. Önce bir saldırı sözleşmesi oluşturun ve belirli bir jetona aktarın, bir kez para çekme çağrısı yaptıktan sonra, saldırı sözleşmesi adresine karşılık gelen payoutsTo değeri, temettü * büyüklüğü olur;

2. Ardından, jetonu 0 yapmak için saldırı sözleşmesindeki jetonu aktarın. Orijinal sözleşme aktarım mantığı ödemelerle ilgilenmediğinden, sözleşme türü adresine karşılık gelen ödeme sözleşmesi adresine karşılık gelen değer orijinal sözleşmede azalmadı. ; Şimdi temettü hesaplamasına payoutsTo getirin: (uint256) ((int256) (snowPerShare_ * tokenBalanceLedger _) - payoutsTo_) / magnitude Tüm sözleşme jetonları aktarıldığından, tokenBalanceLedger = 0, yani şu anda (karPerShare_ * tokenBalanceLedger _) = 0 ; PayoutTo da int256

Formülü basitleştirdikten sonra, yukarıdaki karmaşık formül uint256 (int256 (0-payoutsTo)) / magnitude;

(uint256) ((int256) şu anlama gelir: uint256, int negatif bir sayıyı uint işaretsiz bir sayıya zorla dönüştürür, bu da değerin çok büyük bir pozitif sayı olmasına neden olur.Sonunda, temettüler anormal şekilde artar.

3. Son olarak, yeniden yatırım işlevini çağırarak çok sayıda token satın almak için temettüleri kullanın ve token alımındaki artış, token fiyatını artıracaktır. Son olarak oyun sözleşmesindeki Ethereum, token satılarak aktarılır. Saldırı sürecinin özeti (1) Tanrı sözleşmesini çağırabilen ve sözleşmeye birkaç Tanrı jetonunu aktarabilen bir saldırı sözleşmesi oluşturun (2) Saldırı sözleşmesi, ödeme değerindeki artışı tetiklemek için Tanrı sözleşmesinin geri çekilmesi işlevini çağırır (3) Sözleşmeye saldırmak için saldırı sözleşmesini çağırın Tüm Tanrı jetonları, sözleşme jetonunu = 0 yapar ve saldıran sözleşme adresinin temettüleri anormaldir; (4) Yeniden yatırım çağrısı, çok sayıda jeton satın almak için anormal yatırımları kullanabilir, çünkü sözleşme jetonlarının toplam miktarı artar, temettü artar ve jeton fiyatı artar. Şu anda, herkes büyük miktarda eth elde etmek için az miktarda token satabilir.

İpuçları

Anormal oyun sözleşmesinin temettü kanıtlarını kontrol ediyoruz:

Kırmızı kutudaki benzer "00000000ffffffffff" yapısı, negatif bir sayı olduğu anlamına gelir

Bu, temettülerin bir tür dönüştürme istisnası olduğunu kanıtlar.

Saldırgan, Tanrı sözleşmesinin yeniden yatırım işlevini çağırmak için saldırı sözleşmesini kullandı ve toplamda yaklaşık 30 milyar olan çok sayıda Tanrı jetonu satın almak için anormal temettüler kullandı. Madeni paranın fiyatı bu dönemde hızla yükseldi. Son olarak, saldırgan yalnızca 0,9 jeton sattı. Sözleşmede 200'den fazla Ethereum transfer edin.

Saldırı süreci tekrarı

Yeniden üretim ortamı: Ropsten test zinciri çoğaltma adımları: 1. Test zincirine Tanrı sözleşmesi dağıtın, Tanrı adresi: 0x92cbCBc31f6bb209f2C4F6cbd0596ba22D71979d 2. Sıradan kullanıcılar jeton satın almak için 1 ETH öder 3. Saldırgan jeton satın almak için 0,1 ETH öder 4. Saldırgan dağıtımı Saldırı sözleşmesi PWN, PWN sözleşme adresi: 0x88DF1483Db9d3720378d2CB6859c8487e4412ac7 Saldırı sözleşmesi kodu adresi: https://ropsten.etherscan.io/address/0x88DF1483Db9d3720378d2CB6859c8487e4412ac7#WN sözleşmesi 6.4 token saldırısı çağrısı Para çekme işlevi, PWN sözleşmesinin payoutsTo_'unu

7. Saldırgan, tokenBalanceLedger_ sıfır olacak şekilde PWN sözleşmesi kapsamında God jetonlarını aktarır. Şu anda, PWN sözleşmesinin temettü değerini hesaplamak için gereken parametrenin değeri: snowPerShare_ = 8997439772575371 tokenBalanceLedger_ = 0 payoutsTo_ = 0x2541972003700 Exute the PW000072003700 Sözleşme adresinin temettü dağıtımı temettülerOf = uint (-0x25419723794), burada int'ten uint'e dönüşümde bir hata oluştu:

8. Saldırgan, PWN sözleşmesi aracılığıyla GOD sözleşmesinin yeniden yatırım işlevini çağırır, jeton satın almak için büyük temettü değerini kullanır ve çok sayıda jeton elde eder, bu da kar Payını maksimum değere yükseltir ve böylece Tanrı ile ETH arasındaki döviz kurunu bozar.

Anormal kar Pay başına değer

PWN tarafından satın alınan Tanrı jetonlarının sayısı

9. Tanrı sözleşmesindeki jeton sayısı, ana zincirdeki sayıya benzerdir ve tekrar başarılı olur

Test edilen Tanrı sözleşme tokenlerinin toplam miktarı 30 milyar

Gerçek Tanrı sözleşme jetonlarının toplam miktarı 33 milyar

sonuç olarak

Yukarıdaki muhakeme ve kanıtların teorik olarak doğrulanmasının yanı sıra yineleme ve gerçek verilerin doğrulanmasından sonra, bu saldırı yönteminin bir tür dönüştürme güvenlik açığı saldırısı olarak tanımlandığını belirledik. Saldırgan, Tanrı sözleşmesindeki tasarım boşluklarını akıllıca kullandı ve temettüleri hesaplarken, int türünün negatif değerinin uint'e dönüştürüldüğü ve sözleşmenin saldırıya uğramasına neden olduğu durumu dikkate almadılar. Etherscan'da bulunan bilgilere göre, dağıtım saldırısı sözleşmesi 20 Ağustos'ta 04:42:27 ve ETH kaldırma işlemi 04:57:26 PM idi. Bilgisayar korsanının yukarıdaki tüm işlemleri tamamlaması yalnızca 15 dakika sürdü.

Bu güvenlik açığına ek olarak, sözleşmede aşağıdaki iki "arka kapı" da bulduk: Tanrı sözleşmesinin sahibi (aşağıdaki kodda Yönetici olarak gösterilir), tüm ETH'yi sözleşme adresi altında aktarmak için bu iki işlevi kullanabilir.

Burada Yönetici, herhangi bir hesaptaki token sayısını belirleyebilir ve ardından tokenlerin bu kısmı ETH ile değiştirilebilir.

Burada, Yönetici proje ödülünü aldığında, zaten alınmış olan değer çıkarılmadı ve bu da Yöneticinin ETH'yi defalarca geri çekmesine neden oldu. Sonuç olarak, mevcut oyun sözleşmelerinde, özellikle daha ağır ticaret niteliklerine sahip olanlar, güvenlik açıklarına sahiptir Chengdu Lianan Teknolojisi, oyuncuların ve yatırımcıların çoğuna, bazı "bir gecede sıcak" oyunlara girmeden önce, onu silmeleri gerektiğini hatırlatır. Gözlerinizi açık tutun ve akıllıca yatırım yapın.Denetleme raporları sağlayan blockchain oyunlarına katılmak en iyisidir.Sözleşme güvenliği tarafından doğrulanmamış oyunları körü körüne takip etmeyin. Aynı zamanda, her oyun proje tarafı, kendi proje işlemlerini ve oyuncuların varlıklarının güvenliğini korumak için oyun çevrimiçi olmadan önce akıllı sözleşmenin güvenlik denetimini de yapmalıdır.

Koyun ayakkabılarıyla sarkan ceket, süper model He Sui, birbiri ardına iki parça şeytan giydi, doğrudan güzel
önceki
Kömür endüstrisinin derinlemesine incelenmesi: Kömür fiyatlarının ve kömür stoklarının yükselip düşmesine neden olan nedir?
Sonraki
Guguk kuşu ile çarpışmaya cesaret edin, 11 cm yükseklik farkı Yu Kewei'nin nazik mizacıyla kaplıdır, ikisi güzellikte aynı değildir
42 yaşındaki Liu Mintao için tamamen güzeldi! Degrade bir elbise içinde taze ve zarif olan peri kız kardeşi
Otostop, kişisel bilgiler, büyük veri ... Bunlar 2018'de tüketici haklarını koruma konusunda en önemli on sıcak nokta!
Blockchain: kurumsal organizasyon ve yönetimde bir devrim
Haberlere Hızlı YorumlarDaha yüksek düzeyde bir dışa açılma, daha güçlü bir gelişme sağlar
Liu Xijun'un parlak turuncusu çok kaprisli! Rüzgarlık karıştır ve eşleştir tulum çok güçlü, en az 10 cm boyunda
Bilge Domuz Oyunu: "Serbest sürüşü" öğrenmek bir tür bilgeliktir
5G Endüstri Zinciri-İletişim Test Endüstrisi Araştırması-Küresel Test Endüstrisi Çok Boyutlu Bir Büyüme Çağına Giriyor
Gelin adayı Gillian çok güzel! Pembe bir elbise giymek yeterince taze değil ve kız gibi bir top kafam var
Bitcoin ETF defalarca reddedildi, piyasa paniği arttı
Tencent Videonun ücretli üyeliği 82 milyona ulaştı
Reba sonunda duvara çarptı! Beyaz giysiler ve mavi etek COS ciro ürünleri açıkça çok taze, ancak çoraplar arka ayaklarını çekiyor
To Top