本文来自:安比实验室&AnChain
用户唯一可以操纵的就是msg.sender字段,我们是否可以将msg.sender作为Nonce来挖矿呢?答案显然是可以的,智能合约的地址是根据发起者账户+nonce决定的,于是有了第1代方法:创建合约用户-------------------->新合约用户-------------------->新合约用户-------------------->新合约用户-------------------->新合约但是这种方式需要用户持续部署合约,消耗的矿工费代价非常大,且成功率极低,每次都是以1/1000的中奖概率在尝试。由于第1代惊人的失败率,显然无法利用,于是有了第2代攻击方法:这种方法的主要思想是,合约创建的新合约地址由合约地址+nonce确定:部署合约|------------------|hash(caddr,nonce)用户---------->|循环创建合约,|------->新合约|直到攻击成功或到达终|------->新合约|止条件才停止,可能需|------->新合约|要部署大量合约。|------->新合约|-----------------|这种方式类似于挖矿,固定区块头部,不断修改nonce来试探能否成功获得奖励,但是问题在于,如果在循环第1000次才发现合法的nonce,那么意味着之前部署的999个合约都属于浪费Gas的操作。那么如何更高效地寻找合法的nonce呢?我们回想比特币挖矿,一个挖矿任务中,不仅有nonce,还有extraNonce。在比特币区块的Coinbase字段中,有一个自由修改的区域,修改这个区域会导致MerkleRoot被修改,从而实现Header被修改,具有nonce的效果,因此被称作extraNonce。为什么需要引入extraNonce呢?原因在于nonce为32bit数字,搜索范围只有2^32,矿机几乎一瞬间就遍历完了,通过不断修改extraNonce来扩大本地搜索范围,我们甚至可以不修改nonce只修改extraNonce来挖矿。也许黑客也想到了这一点,他们通过提前部署1000个代理合约来实现有1000个extraNonce的效果。至此,攻击方法升级到了第3代:部署合约用户-------------------------------------->管理合约C调用合约C,预先创建代理合约(extraNonce)用户-------------------------------------->1000个代理合约调用合约C,循环尝试可以成功攻击的代理合约用户-------------------------------------->部署合约(尝试攻击)显而易见,这种攻击方式同时实现了2个效果:提升了攻击成功率减少了攻击合约部署数量,大大减少了Gas消耗。彩蛋2黑客预先创建的合约数量与中奖概率
前文提到黑客预先部署1000个代理合约,这个数字有什么讲究呢?if((seed-((seed/1000)*1000))<airDropTracker_)seed经由一系列以太坊链上环境以及多次Hash运算得出。Hash结果对1000取余数,可以得到0~999的伪随机数。我们假设哈希输出结果是均匀的,并且哈希是抗碰撞的,那么平均每次中奖的概率为1/1000。模拟结果:
公式运算结果:尽管更多合约能够提供更高的中奖概率,但是需要考虑到Gas消耗与GasLimit等因素,不宜过大。安比实验室认为黑客选择部署1000个合约,是根据概率代码1/1000想当然做出的判断。彩蛋3黑客可能利用了空投概率计算的另一个bug
黑客仍然需要更高效地攫取利润,他们甚至“发现”了Fomo3D空投规则在这种攻击方式下暴露出的缺陷。攻击合约需要在最开始获取空投奖励信息,作为后续操作的依据。因此,攻击合约会先依次调用游戏合约的两个查询接口,分别是0xd87574e0airDropPot_()和0x11a09ae7airDropTracker_()。Fomo3D空投奖励的airDropTracker_计算方式为如下方法:if(_eth>=100000000000000000){airDropTracker_++;if(airdrop()==true){...}}Fomo3D判断是否能中空投奖励使用了如下方法:if((seed-((seed/1000)*1000))<airDropTracker_)return(true);根据我们分析,0x820d后期更新的攻击合约直接去除了对airDropTracker_的判断,但这样做其实有利有弊。如果你了解细节,猜出了黑客的用意,或者知晓这种做法的优缺点,欢迎添加小安同学微信,她会把你加入到「SECBIT智能合约安全技术讨论」的群里。尾声下一个是谁?
8月14日,BAPT-LW20黑客团队的0x820d再次部署了两个新版攻击合约,这一次他们将炮筒又对准了另一款一天前新部署的不知名合约。望着大屏幕上AnChain.ai态势感知态势感知平台不断闪烁的红点,安比实验室和AnChain.ai都很清楚,区块链世界里的战役还远远没有结束。2009年,中本聪创造了一个虚拟的去中心化新世界。这仿佛是一片流着奶和蜜糖的应许之地,人们欢呼雀跃,蜂拥而至。但与所有的生态系统一样,新世界有生命,就有捕食者。有交易者,就有黑客。区块链上的应用在进化,攻击者也同样,我们给大家展示的是区块链世界不为人知的另一面,暗流涌动。意料之外,也在意料之中。BAPT-LW20&BAPT-F3D大事件时间表:
2018/07/06Fomo3D游戏合约上线2018/07/08Zethr核心开发者Etherguy发现并利用空投漏洞2018/07/20Fomo3D游戏在国内走红2018/07/20BAPT-LW20黑客团队地址开始活跃2018/07/21BAPT-LW20团队第一次成功利用Fomo3D空投漏洞2018/07/23BAPT-LW20团队攻击山寨游戏?鼠会RatScam2018/07/23Pe?ter在Reddit爆料Fomo3D空投漏洞2018/07/24安比实验室发布Fomo3D及山寨版游戏空投漏洞预警2018/07/24BAPT-LW20黑客团队攻击FoMoGame2018/07/26BAPT-LW20黑客团队部署新版攻击合约0x54832018/08/06类Fomo3D游戏LastWinner上线2018/08/07LW游戏开始火爆2018/08/07BAPT-LW20黑客团队开始攻击LW游戏2018/08/09以太坊未确认交易数创年内新高2018/08/10凌晨AnChain.ai态势感知系统发出预警2018/08/10安比实验室与AnChain.ai联手开展调查2018/08/10BAPT-LW20黑客团队转移旧合约中资金,使用新版合约继续开展攻击2018/08/11完成BAPT-LW20攻击时间线复原2018/08/12完成BAPT-LW20攻击手法复原2018/08/13针对更多攻击源分析2018/08/13完成BAPT-F3D和BAPT-LW20攻击数据全景分析,黑客获利超5000Ether2018/08/14BAPT-LW20黑客团队再次部署新版攻击合约,开始攻击一个不知名合约2018/08/17BAPT-LW20黑客团队夺取LW最终大奖7754Ether2018/08/17安比实验室完成BAPT-LW20攻击事件报告
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。