Blockchain güvenlik şirketinin PeckShield güvenlik kalkanı risk kontrol platformundan gelen DAppShield izleme bilgilerine göre, 10 Nisan 23: 02'de bilgisayar korsanları, toplam 2.167.377 TRX (yaklaşık 57.148 $) karla TRON sınav oyunu TronWow'a 1.203 saldırı başlattı. PeckShield güvenlik personeli hemen bir analiz başlattı ve her 20 TRX bahsi için bilgisayar korsanlarının karşılığında 1.940 TRX alabileceğini buldu. 97 defaya kadar iade oranı . Sonunda hacker, bu saldırı sayesinde toplam 23.004 TRX bahis yaptı ve 2.167.377 TRX kar elde etti.
O zamandan beri, PeckShield güvenlik personeli daha ayrıntılı analiz etti ve TronWow sözleşmesinin bahis aralığını kontrol etmede kusurları olduğunu, kullanıcıların sayfalara bahis koyarken kötü niyetli girdiler oluşturmasına ve böylece istikrarlı kazanan oyun sonuçları elde etmesine izin verdiğini buldu.
Aşağıdaki şekilde gösterildiği gibi, bir kullanıcı TronWow oyun sayfasındaki oyuna katıldığında, Alt modu veya Üst modu seçili olsun, bahis sayılarının aralığı ve kazanma oranı sınırlıdır. onların arasında
Alt ve Üstün kazanma oranları hem de ödül çarpanı [97 / kazanma yüzdesi].
PeckShield güvenlik personeli, TronWow sözleşmesinin derinlemesine ters analizi yapıldığında, TronWow sözleşmesinin bahis aralığını kontrol etmede kusurlu olduğunu ve kullanıcıların sayfalara bahis koyarken kötü niyetli girdiler oluşturmasına izin verdiğini gördü. Diğer bir deyişle, kullanıcı oyun sayfasından kaçındığında ve doğrudan oyun sözleşmesinin bahis işlevini çağırdığında, sözleşmedeki bahis aralığı kontrol koşulunu atlamaya çalışabilir ve% 100 kazanma oranı ve en yüksek getiriyi (97 kez) elde edebilir.
Aşağıda, normal bahis işlemleri ve kötü niyetli bahis işlemleri ile sözleşme güvenlik açıkları açıklanmaktadır.
TronWow sözleşme kodunda, placeBet işlevi (uint24 _betMask, uint256 _commit, bytes32 _r, bytes32 _s) bahis işlevidir ve uint24 _betMask parametresi oyuncunun bahis bilgisidir.
Normal bir bahis işleminde placeBet işlevini çağırırken giriş aşağıdaki gibidir:
Bu, Under modunun seçildiği ve bahis numarasının 95 olduğu normal bir işlemdir. Diğer bir deyişle, oyun tarafından üretilen rastgele sayı 95'e eşit veya daha az olduğunda oyuncu kazanır.
Bu işlemde, _betMask parametresinin 24321 değeri 0x005F01 olarak onaltılık tabana dönüştürülür ve aşağıdaki gibi üç bayta böleriz:
onların arasında:
İlk kısım 0x00, oyunun oluşturduğu rastgele sayının hesaplama sonucunun arada olması durumunda oyuncunun kazanması anlamına gelir; aksine, ilk iki rakam 0x00 olmadığında oyun tarafından üretilen rastgele sayının hesaplama sonucunun dışarıda olması anlamına gelir. Kazanın.
Ters işlemde, bahis fonksiyonunun montaj talimatlarının bir kısmını aşağıdaki şekilde gösterildiği gibi sözde koda geri yükleriz:
Yukarıdaki bahis işlevinin sözde kodunu okurken, sözleşmenin oyuncunun bahis bilgilerindeki kazanma yüzdesini yalnızca 95'ten küçük veya ona eşit olmasını gerektirecek şekilde kontrol ettiğini, ancak bahis sayısında sayısal bir sınır bulunmadığını görebilirsiniz. Bu nedenle, oyuncular bahis numaraları oluşturarak bu kontrolü atlayabilirler.
Aşağıdaki resim, saldırgan tarafından başlatılan birçok saldırı işleminden birini göstermektedir:
_BetMask parametresi 130971 olarak oluşturulur ve onaltılık 0x01FF9B'dir. Bunlar arasında, ilk iki basamak 0x01, oyun tarafından oluşturulan rastgele sayı hesaplama sonucunun dışında ise oyuncunun kazandığını gösterir. 0x9B ve 0xFF'ye karşılık gelen ondalık sayılar sırasıyla 155 ve 255'tir.Sözleşme tarafından yazılan kazanma yüzdesi hesaplama kurallarına göre, 1'e eşit olan winRate = 100- (0xFF-0x9B) + 1, dolayısıyla bahis aralığı kontrol işlevini başarıyla atlayarak ve Bu işlemin ödül katını 97 olarak ayarlayın. Sayfa bahislerinde maksimum ödül katının sadece 48,5 katı olduğu vurgulanmalıdır.
Daha sonra, sahte koda oyun kazandığını veya kaybettiğini belirlemek için yerleşmek bahis (uint256 _reveal, bytes32 _txHash) piyango fonksiyonunun montaj talimatlarının bir kısmını geri yükleriz:
Bunların arasında, rollResult oyunun bu turunun rastgele sayı hesaplama sonucudur ve değer aralığı. Saldırgan tarafından belirlenen kötü niyetli parametreler arasında, rollResult aralığın dışında olmalı, oyunun mevcut turunu kazanma koşullarını karşılamalı ve böylece saldırganın oyun sonucunun istikrarlı olmasını sağlamalıdır.
Burada, PeckShield güvenlik personeli, proje taraflarının ve kullanıcıların varlıklarının güvenli ve güvenilir olmasını sağlamak için proje taraflarının ve borsaların çoğuna blok zinciri dünyasındaki herhangi bir güvenlik sorununa dikkat etmelerini hatırlatır. Güvenlik küçük bir mesele değildir ve hacker saldırılarına direnmek için kaynak kodu yayınlamama eylemi bilgisayar korsanlarının önünde faydasızdır. DApp geliştiricileri, sözleşme çevrimiçi olmadan önce tesadüfe son vermeli, gerekli güvenlik önlemlerini almalı ve bilinen saldırı özelliklerini kontrol etmeli ve gerekirse, dijital varlıkların gereksiz kayıplarını önlemek için güvenlik açığı incelemesi için bir üçüncü taraf güvenlik şirketi ile iletişime geçmelidir.