//前言
北京时间3月5日,知道创宇区块链安全实验室监测到BaconProtocol遭受黑客攻击损失约958,166美元,本次攻击利用重入漏洞,并凭借闪电贷扩大收益额。目前攻击者地址还没有被加入USDC的黑名单中。
//分析
攻击事件如下图所示,该次攻击事件的问题点在于lend()函数,攻击者利用该函数进行重入攻击。
2.1基础信息
攻击合约:0x580cac65c2620d194371ef29eb887a7d8dcc91bf
攻击者地址:0x7c42f2a7d9ad01294ecef9be1e38272c84607593
攻击tx:0x7d2296bcb936aa5e2397ddf8ccba59f54a178c3901666b49291d880369dbcf31
Bluehelix VP:BHEX Chain 跨链桥定位DeFi生态工具 可促进各公链间跨链资产流通:8月13日消息,Bluehelix全球商务VP Elsa Qiu在社群AMA解答用户相关问题中提到,BHEX Chain BBS跨链桥不是简单的双链跨链桥,而是可以兼容多条异构链和同构链的多链跨链桥,目前可支持市面上所有公链的跨链桥。
BHEX Chain目前已经支持BTC、ETH、HECO、BSC、DOGE、TRON等多条公链,且即将接入Polygon、xDai、Fantom、Cosmos、FIL、NEAR、Solana等公链。任意的项目方、公链、钱包都可基于BHEX Chain的多链映射功能进行资产跨链,实现不同生态间的去中心化流通。BBS跨链桥基于已在欧美获得专利的Bluehelix私钥分片技术搭建,用户生成的充值地址都是独立的,且充值地址的私钥完全以分片的形式存在不同的节点上,用户的任意一笔资产跨链流程完全透明、清晰可见。[2021/8/13 1:53:55]
漏洞合约:0x781ad73f140815763d9A4D4752DAf9203361D07D
Clubhouse Media计划推出代币化数字艺术品和NFT内容之家:Clubhouse Media Group新闻稿称,该公司打算建立一个新的内容之家,聚集顶尖的艺术家、加密理财专家、行业影响者、加密投资者和NFT爱好者。Clubhouse Media计划对创作者制作的内容进行代币化,在平台上销售,同时对数字艺术品进行代币化,以备出售。(U.Today)[2021/4/21 20:44:54]
2.2流程
1.攻击者通过UniswapV2闪电贷借出6,360,000USDC。
2.用闪电贷借出的6,360,000USDC分成3份,去bHOME中进行2次重入攻击调用了3次lend()函数铸造共8,465,943.180104bHOME。
火币将于12月23日10:00关闭BHT充提业务:火币官方公告称, 根据HBTC官方计划,前BHEX交易平台通证BHT将升级为HBC,并已开启兑换。具体安排如下:1,12月23日10:00关闭BHT的充币和提币业务;2,12月23日11:00关闭BHT所有现货交易对并撤销所有BHT挂单(BHT/USDT、BHT/BTC、BHT/HT)。关闭交易对后,将按照“1 HBC = 23.887 BHT”的比例将用户持有的BHT置换为HBC。[2020/12/22 16:09:16]
3.将刚才重入获得的bHOME拿去销毁赎回获得7,336,924.998USDC。
BHEX永续合约实盘王者赛圆满收官:据官方消息,BHEX携手合约帝联合举办的永续合约实盘王者赛,于3月7日20:00正式收官。经过6天的比赛,最终“JUN GE”、“firewa*008”、“清”分别以409.65%、187.91%、139.41%的收益率获得了此次大赛的冠、亚、季军,并分别获得1500USDT、800USDT、400USDT的奖励。此外,总榜前十、日榜前三,也均获得了相应排名奖励。
BHEX交易平台主营现货、永续合约和OTC业务,其中永续合约业务上线以来无宕机、无卡顿,交易深度、盘口价差、挂单量以及API稳定性等方面获得用户认可。[2020/3/7]
4、归还闪电贷借出的6,360,000USDC,并支付19,716的手续费,最后将剩余的957,208.998USDC转入自己的账户。
动态 | BHB Network CEO:比特币存在一个灾难性的漏洞:BHB Network首席执行官Giacomo Zucco连发10条推称:我意识到一个灾难性的漏洞,它肯定会在几个小时内“杀死”比特币。我正在抛售我所有的比特币去购买XRP、 BSV、ETH和DCN,它们对这个漏洞免疫,比特币已死。[2019/1/14]
2.3细节
该次攻击事件重点在于lend()函数,由于合约https://etherscan.io/address/0x781ad73f140815763d9a4d4752daf9203361d07d#code并未验证开源,所以我们只能从交易的Debugger中寻找线索。
1、攻击者通过UniswapV2闪电贷借出6,360,000USDC。
2.3细节
该次攻击事件重点在于lend()函数,由于合约https://etherscan.io/address/0x781ad73f140815763d9a4d4752daf9203361d07d#code并未验证开源,所以我们只能从交易的Debugger中寻找线索。
分析Debugger可以看到下图是第一次调用函数,接着进行了2次重入。
从重入攻击中可以找到INPUT中调用函数的字节码为0xa6aa57ce。
通过字节签名可以知道重入攻击调用的是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修饰器来防止重入攻击的发生。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。