//前言
北京时间3月5日,知道创宇区块链安全实验室监测到BaconProtocol遭受黑客攻击损失约958,166美元,本次攻击利用重入漏洞,并凭借闪电贷扩大收益额。目前攻击者地址还没有被加入USDC的黑名单中。
//分析
攻击事件如下图所示,该次攻击事件的问题点在于lend()函数,攻击者利用该函数进行重入攻击。
2.1基础信息
攻击合约:0x580cac65c2620d194371ef29eb887a7d8dcc91bf
攻击者地址:0x7c42f2a7d9ad01294ecef9be1e38272c84607593
攻击tx:0x7d2296bcb936aa5e2397ddf8ccba59f54a178c3901666b49291d880369dbcf31
漏洞合约:0x781ad73f140815763d9A4D4752DAf9203361D07D
BHEX即将上线NMT:据官方公告,BHEX将于6月3日16:00 (UTC+8) 上线NMT(NFTMart Token),并开通NMT/USDT交易对,充值现已开启。
NFTMart 是致力于成为最专业的NFT去中心化交易市场。其分为两大部份,第一部分 NFTMart.network 是一条开放的去中心化的NFT垂直公链,主要用于NFT产品的发行以及交易数据上链,第二部份为 NFTMart.io 网站提供友好的交易场景,供用户方便快捷的上传或者交易NFT。[2021/6/3 23:07:43]
2.2流程
1.攻击者通过UniswapV2闪电贷借出6,360,000USDC。
2.用闪电贷借出的6,360,000USDC分成3份,去bHOME中进行2次重入攻击调用了3次lend()函数铸造共8,465,943.180104bHOME。
金色热搜榜:BHD居于榜首:根据金色财经排行榜数据显示,过去24小时内,BHD搜索量高居榜首。具体前五名单如下:BHD、KCASH、OMG、QTUM、UTK。[2020/9/16]
3.将刚才重入获得的bHOME拿去销毁赎回获得7,336,924.998USDC。
4、归还闪电贷借出的6,360,000USDC,并支付19,716的手续费,最后将剩余的957,208.998USDC转入自己的账户。
2.3细节
该次攻击事件重点在于lend()函数,由于合约https://etherscan.io/address/0x781ad73f140815763d9a4d4752daf9203361d07d#code并未验证开源,所以我们只能从交易的Debugger中寻找线索。
美国证券委员会SEC审核并通过比特硬币BHD 的STO申请:据海外纳斯达克媒体报道,近期美国证券委员会(SEC)审核并通过了加密货币比特硬币BHD关于证券型通证发行(STO)的申请。BHD是一种新型基于CPOC共识算法的加密货币,采用硬盘挖矿的方式,使得挖矿更加安全,更加去中心化。相对于比特币的POW挖矿,CPOC挖矿方式更加节能环保、低噪音、抗ASIC,且更容易实现中本聪一人一票的梦想。[2020/5/4]
1、攻击者通过UniswapV2闪电贷借出6,360,000USDC。
2.3细节
该次攻击事件重点在于lend()函数,由于合约https://etherscan.io/address/0x781ad73f140815763d9a4d4752daf9203361d07d#code并未验证开源,所以我们只能从交易的Debugger中寻找线索。
声音 | BHEX副总裁白洋:将尽快推出BSV等其他相对小众但适应市场需求的合约对:今日,BHEX副总裁在做客合约交易社区合约帝时表示,BHEX会在保障主流品种正反向合约深度和体验的基础上,尽快推出如BSV等其他相对小众但适应市场需求的合约对。
同时,白洋指出,目前合约市场白热化阶段,BHEX除了具备API系统稳定、不犯错、合约深度等硬性要求外,高速度、强稳定、丰富的功能、齐全的订单类型也能完全满足用户大量采用高频高换手策略。[2020/2/21]
分析Debugger可以看到下图是第一次调用函数,接着进行了2次重入。
从重入攻击中可以找到INPUT中调用函数的字节码为0xa6aa57ce。
动态 | BHC将在两周内进行网络压力测试:据bitcoin.com报道,BHC生态系统的参与者计划于两周内的9月1日进行网络压力测试,个人和团体将在一天内发送数百万笔交易。随着BCH压力测试日即将来临,BCH的支持者一直在测试同时发送大量小额交易,并建立了可以同时扇出数百个微交易的工具。[2018/8/21]
通过字节签名可以知道重入攻击调用的是lend()函数。
从Debugger中我们可以发现攻击合约的地址0x781ad73f140815763d9a4d4752daf9203361d07d。
通过反编译合约0x781ad73f140815763d9a4d4752daf9203361d07d得到合约伪代码内容,可以找到lend()函数。
我们在反编译的代码中可以看到该合约使用的ERC777协议,会查询recipient的回调合约并回调tokensReceived()函数用以重入攻击。
通过分析可以发现_index就是传入的USDC数量。
totalSupply和balanceOf的增量都和_index是正比关系,和stor104是反比关系,并且这两个变量的更新发生在重入攻击之前,每次都会更新。
stor104记录的是用户存入的USDC总量,该变量的更新发生在重入之后,那么在重入的过程中stor104的值是不变的,而上面的totalSupply是在变大,所以最后return的值也会相应的增大,从而使得攻击者通过重入攻击铸造得到比正常逻辑更多的bHOME代币。
除了该次攻击事件,BlockSecTeam还阻断了后面发生的攻击并将金额返还给了项目方。交易hash:0xf3bd801f5a75ec8177af654374f2901b5ad928abcc0a99432fb5a20981e7bbd1
3.总结
此次攻击事件是由于项目方使用了ERC777协议但没有对回调合约的安全性进行考虑从而导致了重入攻击的发生,当项目合约有涉及资产的转移时,建议使用「检查-生效-交互」模式来保证逻辑代码的安全,当然我们也可以使用OpenZeppelin官方提供的ReentrancyGuard修饰器来防止重入攻击的发生。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。