BHO:bHOME重入攻击事件分析

1、前言

北京时间3月5日,知道创宇区块链安全实验室?监测到?BaconProtocol?遭受黑客攻击损失约958,166美元,本次攻击利用重入漏洞,并凭借闪电贷扩大收益额。目前攻击者地址还没有被加入USDC的黑名单中。

2、分析

攻击事件如下图所示,该次攻击事件的问题点在于lend()函数,攻击者利用该函数进行重入攻击。

2.1基础信息

攻击合约:0x580cac65c2620d194371ef29eb887a7d8dcc91bf

攻击者地址:0x7c42f2a7d9ad01294ecef9be1e38272c84607593

区块链Bholdus推出测试网Cygnus,并推出价值1万美元的漏洞赏金计划:12月3日消息,Bholdus团队分享了其备受期待的测试网Cygnus已启动并运行。它的机制对所有爱好者和开发人员开放,用于研究、交互和压力测试。Cygnus允许Bholdus用户试验其核心功能,例如创建和交换加密货币代币、NFT 等。此外,Cygnus适合以安全和匿名的方式构建GameFi产品和去中心化金融协议。Bholdus (BHO) 漏洞赏金活动将于2021年12月1日至12月15日期间组织,奖金池为10,000美元。所有奖品将以美元Tether (USDT) 等值转移给获奖者。[2021/12/3 12:49:31]

攻击tx:0x7d2296bcb936aa5e2397ddf8ccba59f54a178c3901666b49291d880369dbcf31

BHEX即将上线SIGNA:据官方公告,BHEX将于7月2日16:00 (UTC+8) 上线SIGNA(Signum),并开通SIGNA/USDT交易对,充值现已开启。

SIGNA (Signum)是一个可持续区块链项目。Signum使得用户和开发者可以用创新性的区块链解决方案。Signum由原Burstcoin品牌升级而来。Burstcoin是PoC共识算法的先驱,成立于2014年,自2019年以来,Burst Apps团队一直在为下一个十年准备Burst区块链。[2021/7/2 0:22:44]

漏洞合约:0x781ad73f140815763d9A4D4752DAf9203361D07D

2.2流程

比特硬币BHD正式上线虎符交易所:据BHD Community消息,BHD于2020年6月11日14:00 (UTC+8)正式上线虎符交易所BHD/USDT 交易对,同时开启BHD的定期理财产品和挂单理财、净收入排名瓜分300BHD(1BHD=9USDT)活动。[2020/6/11]

1.攻击者通过UniswapV2闪电贷借出6,360,000USDC。

2.用闪电贷借出的6,360,000USDC分成3份,去bHOME中进行2次重入攻击调用了3次lend()函数铸造共8,465,943.180104bHOME。

3.将刚才重入获得的bHOME拿去销毁赎回获得7,336,924.998USDC。

比特硬币BHD将于4月22日18:00上线火币矿池合作挖矿:据火币矿池公告,比特硬币BHD将于新加坡时间2020年4月22日18:00上线火币矿池HPT锁仓挖矿。火币矿池可以实现一键双挖获得双重收益,用户参与锁仓挖矿不仅可以获得HPT收益,同时还能够享有HPT权益奖励。BHD是新一代基于POC容量证明挖矿的加密货币。[2020/4/21]

4、归还闪电贷借出的6,360,000USDC,并支付19,716的手续费,最后将剩余的957,208.998USDC转入自己的账户。

2.3细节

该次攻击事件重点在于lend()函数,由于合约https://etherscan.io/address/0x781ad73f140815763d9a4d4752daf9203361d07d#code并未验证开源,所以我们只能从交易的Debugger中寻找线索。

1、攻击者通过UniswapV2闪电贷借出6,360,000USDC。

2、用闪电贷借出的6,360,000USDC分成3份,去bHOME中进行重入攻击2次调用?lend()函数铸造共8,465,943.180104bHOME。

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中寻找线索。

分析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修饰器来防止重入攻击的发生。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

XMRILV:2022/3/11 天天交易空投中奖名单

尊敬的WEEX用户您好!早春活动百万交易员征集令 活动四:天天空投 活动方式: 活动期间每天抽出10位有完成合约交易的用户随机送8、18、38、68、88USDT,周一至周五不限币种.

世界币STR:支付巨头Stripe重返加密领域

本文来自CryptoBriefing,原文作者:BrooksButlerOdaily星球日报译者|念银思唐Stripe再燃加密雄心这家市值950亿美元的私人支付巨头重新进入了加密领域.

NEARDAO:HistoryDAO以Web3作为主要的意识形态,让历史上链

虽然从人类文明开始,诸多历史事件通过记录的形式被保存下来,并不断的流传至今,被我们所熟知。但还有很大一部分历史事实,仅能通过民间不断的流传,这些野史也因没有具体的记录难以考证,这也使得很多历史学.

[0:15ms0-1:143ms