Korumalı Alan — ASSET Akıllı Sözleşme Güvenlik Güncellemesi

The Sandbox Türkiye
4 min readFeb 4, 2021

--

Bu sorun SAND veya LAND’ı etkilemez; sadece VARLIKLARI etkiler.

GÜNCELLEME 16 Ocak 2021: Geçiş tamamlandı! Tüm VARLIKLAR taşındı ve pazar yerlerinde alım satım yeniden etkinleştirildi.

Yeni doğrulanmış ASSET akıllı sözleşme adresi:0xa342f5D851E866E18ff98F351f2c6637f4478dB5

Topluluğumuza, Sandbox topluluğunun bir parçası olduğunuz için teşekkür ederiz.

Lütfen hiçbir paranın kaybolmadığını ve sizin tarafınızdan herhangi bir işlem yapılmasına gerek olmadığını unutmayın.

Sorularınız, yorumlarınız ve endişeleriniz için lütfen Discord veya Telegramımıza katılın

  • Sandbox ASSET akıllı sözleşmesi, bir yineleme sorununa açıktı;
    Diğer tüm akıllı sözleşmeler etkilenmez; ne SAND ne de LAND akıllı sözleşmeleri risk altında değildir;
  • Bu sorun herhangi bir kötü niyetli kullanıcı tarafından istismar edilmemiştir;
  • Sandbox VARLIKLARI ticareti yapan tüm büyük pazar yerleri 13 Ocak 2021'de bildirildi ve VARLIK transferleri 16 Ocak 2021'de 00.01 UTC’de durduruldu;
  • VARLIKLARI, 87 benzersiz VARLIK’ın 115,926 kopyasına sahip 2.684 benzersiz kullanıcıya yeniden dağıttık (hiçbir kullanıcı maliyeti tahakkuk etmedi veya tahakkuk etmeyecek)
  • Dağıtım 16 Ocak 18:00 UTC’de tamamlandı.

Son olarak, Sandbox’ın sürekli gelişimine olan güvenleri ve destekleri için tüm ortaklarımıza ve topluma teşekkür ederiz.

Genel Bakış

Sandbox akıllı sözleşmeleri, en iyi iki güvenlik firması tarafından kapsamlı bir şekilde denetlendi: Certik ve Solidified ve yüksek güvenlik puanları aldı. Bu denetimlere Github depomuzdan herkese açık olarak erişilebilir. ASSET akıllı sözleşmesi ilk olarak 4 Eylül 2019'da Solidified tarafından denetlendi ve 2 haftalık bir denetim görevinde üç denetçiyi içeriyordu.

Bu nedenle, aşağıdaki zaman çizelgesinin de gösterdiği gibi, derhal harekete geçmeye ve sorunu gidermeye karar verdik.

Zaman çizelgesi

  • 4 Ocak’ta, Optimism (Medium https://medium.com/@maurelian / Twitter @maurelian_) güvenlik araştırmacısı Maurelian bize güvenlik açığı konusunda bilgi verdi
  • 5 Ocak’ta dahili testler gerçekleştirdik ve sorunun% 100 tekrarlanabilirliğini doğruladık
  • 5–14 Ocak arasında, düzeltme üzerinde çalıştık ve düzeltmenin yeni güvenlik açıkları getirmediğini onaylamak için Solidified güvenlik denetçileri tarafından denetime tekrar gönderdik.
  • 13 Ocak’ta, Varlık ticaretini durdurmaları için pazar yerlerine (OpenSea, Arkane Marketplace, Lootex, Playdapp, iNFT) bildirimde bulunduk
    15 Ocak’ta yeni sözleşmeli sözleşmeli koyduk
  • 16 Ocak, 12:00 UTC, blockchain’in anlık hali aldık
    Şimdi ASSET kopyalarını tüm sahiplere yeniden dağıtıyoruz

Sonuç olarak neler oldu?

  • Hata https://bzx.network/blog/incident'e benzer ve diğer birkaç projede de keşfedildi, ancak yalnızca ikisinde yaşıyor.
  • Birinin token bakiyesini aynı miktarda yapay olarak artırmak için kendilerine token göndermesine izin verir.
  • Bu yalnızca kullanıcılar, optimizasyon amacıyla, transferin sonucunu geçici bellek değişkenlerinde biriktiren batchTransfer işlevini kullandığında olur.
    Depoya yazma zamanı geldiğinde aşağıdakiler oldu:

_packedTokenBalance[from][bin] = balFrom;

_packedTokenBalance[to][bin] = balTo;

buraya bakın: https://github.com/thesandboxgame/sandbox-smart-contracts/blob/88615d4c9cdde260b7157537eedadb4c7e0aa8f5/old_src/Asset/ERC1155ERC721.sol#L452-L453 and https://github.com/thesandboxgame/sandbox-smart-contracts/blob/88615d4c9cdde260b7157537eedadb4c7e0aa8f5/old_src/Asset/ERC1155ERC721.sol#L471-L472

  • balFrom, temelde ilk bakiye eksi aktarılan miktar olan gönderici için yeni bellek içi birikmiş bakiyedir. balTo, temelde ilk bakiye artı aktarılan miktar olan alıcı için yeni bellek içi biriktirilmiş bakiyedir.
  • == ile arasında olduğunda, ilk satır balFrom’u depolamaya kaydederek kullanıcının bakiyesini azaltır. Ancak daha sonra ikinci satır, bunun yerine kullanıcının bakiyesini temelde bu miktar artıran balTo ile yazar.
  • Hatların sırası tersine çevrilmiş olsaydı, tersi doğru olurdu ve kullanıcılar kendilerine token gönderirken temelde kayıp yaşarlardı.

Neleri düzelttik :

Bulabileceğimiz en basit ve en güvenli çözüm, `from == to` olduğunda depolama işlemlerini atlamaktı. Ancak TransferBatch’in, sahibinin sahip olmadığı bakiye transferini basitçe yayınlamamasını da sağlamalıydık.

değişikliklere bakın: https://github.com/thesandboxgame/assetbug/compare/0e8428debf30cec3f2f575da9d8255daf71992f9...c5dd53e9475e795ad2a5325c61a91c45e3b343bf#diff-ef9a3adf44471d1ae2da4fcc6e72f5337855709851272cb9640274c77eb7b94f

Düzeltme, Solidified tarafından gözden geçirildi ve denetim Github depomuzda bulunabilir. UZANTI SEÇENEKLERI— https://github.com/thesandboxgame/assetbug/raw/asset_bug/documentation/audits/Audit%20Report%20-%20Sandbox%20Asset%20Bug%20Fix%20%5B15.01.2020%5D.pdf

Ayrıca, ASSET sözleşmesini Open Zeppelin sözleşmelerini kullanarak yükseltilebilir hale getirme fırsatını yakaladık.

Bu karar hafife alınmadı; ancak The Sandbox’ın üst düzey yöneticisinin (multisig sahibi) tüm kullanıcıların jetonlarının sahipliğini kaldırmasını sağlayacak yönetici işlevlerine zaten sahip olduğumuzdan, yeni sözleşmeyi yükseltilebilir hale getirmeye karar verdik:

  • Bir güvenlik açığı tespit edildiğinde daha hızlı kurtarmayı etkinleştirmek için (Varlık sözleşmesinde herhangi bir kalıntı olduğuna inanmıyoruz)
  • Kod değişiklikleri yapma yeteneği gibi gelecekteki iyileştirmeleri mümkün kılmak ve bir yeniden dağıtımı yeniden yapmak zorunda kalmamak için

Etkilenen ASSET sahipleri için kullanıcı verilerini bakiyeleriyle birlikte toplamak ve bu bilgilerle yeni ASSET sözleşmesini yeniden dağıtmak zorunda kaldık. Şu anda tüm verileri taşıyoruz ve yukarıda belirtildiği gibi, tüm kullanıcı VARLIKLARININ geri yüklemesini 16 Ocak 18:00 UTC tarihine kadar tamamladık.

Yeni doğrulanmış ASSET smart-contract address is 0xa342f5D851E866E18ff98F351f2c6637f4478dB5

Eğitimler / Gelecekte ne yapacağız?

ASSET akıllı sözleşme başlangıçta uygulandığından beri takımlarımızı önemli ölçüde geliştirdik. Şimdi HardHat (http://hardhat.org) ve eklenti ekosistemini kullanıyoruz, bu da testlerimizi geliştirmemize ve iyi bir kapsam sağlamamıza yardımcı oluyor. Kısa süre önce bir test kapsamı raporu oluşturduk ve yakında tamamen etkinleştirilecek.

Hatanın test edilerek yakalanmış olabileceğini ve bu uç için bir testimiz olsa da gerekli kontrolü yapmadığını belirtmekte fayda var. Gerçekten de, test kapsam araçları, testlerin tüm güvenlik açıklarını gerçekten yakaladığını garanti etmez. Kapsam istatistiklerine sahip olmak hiç yoktan çok daha iyi olsa da, testlerimizin gelecekte benzer sorunları yakalamak için gerçekten optimize edilip edilmediğini kontrol etmemizi sağlayacak başka araçlar da var. Özellikle bir araç: https://github.com/JoranHonig/vertigo, sözleşme kodunu değiştirerek ve bu tür bir mutasyon meydana geldiğinde testlerin gerçekten başarısız olup olmadığını kontrol ederek bunu başarmaya yardımcı olacaktır. Bu projenin takımlarımızla uyumlu hale gelmesine yardımcı olmak istiyoruz.

Son olarak

Sandbox topluluğunun bir parçası olduğunuz ve okuduğunuz için bir kez daha teşekkür ederiz.

Devam eden desteğinizi dört gözle bekliyoruz ve bu hassas tavırla uğraşırken sabrınız için teşekkür ederiz. Teşekkür ederim, güvende kalın!

Sandbox Ekibi

Topluluğumuza katılın…

Twitter Türkiye: twitter.com/sandboxturkey

Twitter Global: twitter.com/TheSandboxGame

Telegram Türkiye: t.me/SandboxgameTurkey

Telegram Global: t.me/sandboxgame

Daha fazlası için lütfen TAKİPTE KALIN….

--

--

The Sandbox Türkiye
The Sandbox Türkiye

Written by The Sandbox Türkiye

The Sandbox, oyuncular tarafından yaratılan merkeziyetsiz bir oyun ekosistemi (https://t.me/SandboxgameTurkeyhttps://twitter.com/sandboxturkey)

No responses yet