前言
据慢雾区情报,以太坊DeFi平台Lendf.Me遭受重入漏洞攻击。慢雾安全团队在收到情报后随即对此次攻击事件展开分析,并快速定位了问题所在。
据慢雾科技反(AML)系统初步统计分析,Lendf.Me被攻击累计的损失约24,696,616美元,具体盗取的币种及数额为:
WETH:55159.02134,
WBTC:9.01152,
CHAI:77930.93433,
HBTC:320.27714,
HUSD:432162.90569,
BUSD:480787.88767,
PAX:587014.60367,
TUSD:459794.38763,
USDC:698916.40348,
USDT:7180525.08156,
USDx:510868.16067,
imBTC:291.3471
之后攻击者不断通过1inch.exchange、ParaSwap、Tokenlon等DEX平台将盗取的币兑换成ETH及其他代币。
DeFi协议Injective宣布Cosm Wasm主网正式上线:7月6日消息,DeFi协议Injective宣布Injective CosmWasm主网升级正式上线,智能合约现在可以通过InjectiveCanonical1006-rc1(或InjectiveCosmWasm主网升级)部署至该网络。本次升级还包括二元期权支持、回扣费用、通过IBCV3支持跨链账户以及其他一些重大改进。
CosmWasm将支持任何开发人员利用Injective提供的现有核心模块在Injective上构建多样化的应用程序。一个核心示例是Injective的订单簿模块,它允许构建者利用唯一开箱即用的去中心化订单簿来创建dApp,例如交易所、预测市场、借贷协议等。[2022/7/6 1:54:01]
以下是详细分析过程。
攻击细节
本次对Lendf.Me实施攻击的攻击者地址为?0xa9bf70a420d364e923c74448d9d817d3f2a77822,攻击者通过部署合约?0x538359785a8d5ab1a741a0ba94f26a800759d91d对Lendf.Me进行攻击。
DeFi借贷协议Teller完成685万美元战略融资,BlockchainCapital领投:2月24日消息,DeFi借贷协议Teller完成685万美元战略融资,BlockchainCapital领投,FranklinTempleton、ToyotaVentures、BessemerVenturePartners、Upstart、SignumCapital等参投。融资用于建立一个开放的订单簿协议,允许第三方建立无担保DeFi借贷市场。(雅虎财经)[2022/2/24 10:12:03]
通过在Etherscan上查看攻击者的其中一笔交易:https://etherscan.io/tx/0xae7d664bdfcc54220df4f18d339005c6faf6e62c9ca79c56387bc0389274363b
DeFi 概念板块今日平均涨幅为5.62%:金色财经行情显示,DeFi 概念板块今日平均涨幅为5.62%。47个币种中42个上涨,5个下跌,其中领涨币种为:BZRX(+33.12%)、COMP(+18.05%)、SWFTC(+15.44%)。领跌币种为:NEST(-36.31%)、HDAO(-7.26%)、MLN(-3.50%)。[2021/8/5 1:35:44]
我们发现,攻击者首先是存入了0.00021593枚imBTC,但是却从Lendf.Me中成功提现了0.00043188枚imBTC,提现的数量几乎是存入数量的翻倍。那么攻击者是如何从短短的一笔交易中拿到翻倍的余额的呢?这需要我们深入分析交易中的每一个动作,看看究竟发生了什么。
通过把该笔交易放到bloxy.info上查看,我们能知道完整的交易流程
DeFi 概念板块今日平均跌幅为2.95%:金色财经行情显示,DeFi 概念板块今日平均跌幅为2.95%。47个币种中11个上涨,36个下跌,其中领涨币种为:CRV(+6.64%)、AMPL(+5.43%)、WICC(+3.89%)。领跌币种为:DMG(-11.51%)、MLN(-11.23%)、YFV(-8.30%)。[2021/6/9 23:23:12]
通过分析交易流程,我们不难发现攻击者对Lendf.Me进行了两次supply()函数的调用,但是这两次调用都是独立的,并不是在前一笔supply()函数中再次调用supply()函数。
紧接着,在第二次supply()函数的调用过程中,攻击者在他自己的合约中对Lendf.Me的withdraw()函数发起调用,最终提现
MakerDao超越Uniswap成为市值最高的DeFi协议:据 CoinMarketCap 数据显示,DeFi 协议 MakerDAO 代币MKR 大幅上涨,24小时涨幅达 54.53%。
截至目前 MakerDAO 锁仓量已突破46亿美元。正式超越了Uniswap 成为市值最高的DeFi协议。[2021/1/10 15:47:13]
在这里,我们不难分析出,攻击者的withdraw()调用是发生在transferFrom函数中,也就是在Lendf.Me通过transferFrom调用用户的tokensToSend()钩子函数的时候调用的。很明显,攻击者通过supply()函数重入了Lendf.Me合约,造成了重入攻击,那么具体的攻击细节是怎样的呢?我们接下来跟进Lendf.Me的合约代码。
代码分析
Lendf.Me的supply()函数在进行了一系列的处理后,会调用一个doTransferIn函数,用于把用户提供的币存进合约,然后接下来会对market变量的一些信息进行赋值。回顾刚才说的攻击流程,攻击者是在第二次supply()函数中通过重入的方式调用了withdraw()函数提现,也就是说在第二次的supply()函数中,1590行后的操作在withdraw()之前并不会执行,在withdraw()执行完之后,1590行后的代码才会继续执行。这里的操作导致了攻击者可提现余额变多。
我们深入分析下supply()函数
根据上图,可以看到,在supply()函数的末尾,会对market和用户的余额进行更新,在这之前,用户的余额会在函数的开头预先获取好并保存在?localResults.userSupplyCurrent,如下:
通过赋值给?localResults?变量的方式,用户的转入信息会先暂时保存在这个变量内,然后此时攻击者执行withdraw()函数,我们看下withdraw()函数的代码:
这里有两个关键的地方:
1、在函数的开头,合约首先获取了storage的?market?及?supplyBalance?变量。
2、在withdraw()函数的末尾,存在同样的逻辑对?market?用户的余额信息(supplyBalance)进行了更新,更新值为扣除用户的提现金额后的余额。
按正常的提现逻辑而言,在withdraw()单独执行的时候,用户的余额会被扣除并正常更新,但是由于攻击者将withdraw()嵌入在supply()中,在withdraw()函数更新了用户余额(supplyBalance)后,接下来在supply()函数要执行的代码,也就是1590行之后,用户的余额会再被更新一次,而用于更新的值会是先前supply()函数开头的保存在localResults?中的用户原先的存款加上攻击者第一次调用supply()函数存款的值。
在这样的操作下,用户的余额虽然在提现后虽然已经扣除了,但是接下来的supply()函数的逻辑会再次将用户未扣除提现金额时的值覆盖回去,导致攻击者虽然执行了提现操作,但是余额不但没有扣除,反而导致余额增加了。通过这样的方式,攻击者能以指数级别的数量提现,直至把Lendf.Me提空。
防御建议
针对本次攻击事件慢雾安全团队建议:
在关键的业务操作方法中加入锁机制,如:OpenZeppelin的ReentrancyGuard
开发合约的时候采用先更改本合约的变量,再进行外部调用的编写风格
项目上线前请优秀的第三方安全团队进行全面的安全审计,尽可能的发现潜在的安全问题
多个合约进行对接的时候也需要对多方合约进行代码安全和业务安全的把关,全面考虑各种业务场景相结合下的安全问题
合约尽可能的设置暂停开关,在出现“黑天鹅”事件的时候能够及时发现并止损
安全是动态的,各个项目方也需要及时捕获可能与自身项目相关的威胁情报,及时排查潜在的安全风险
附:
OpenZeppelinReentrancyGuard:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/ReentrancyGuard.sol
在区块链领域,我们说“codeislaw”。那在分析一个项目的基本面时,我们有没有一些比较确定的,理性的参考标准呢?这篇文章就和大家聊聊分析项目基本面的三种基本数据: 代码开发数据 项目开发数据.
在印度最高法院撤销了印度央行的加密货币禁令之后,该国的数字资产交易所正要求监管部门明确它们的纳税义务.
作者:LiangChe 来源:比推bitpush.news据比推数据,市值最高的加密货币比特币在连续上涨七周之后本周一小幅回落,现在距离比特币的区块奖励减半只有8天的时间,在最后的一周里.
摘要:若美联储被迫祭出负利率,短期来看,对比特币价格会有一个不错支撑。长期来看,对于比特币等去中心化金融有间接促进作用.
3月12日“黑色星期四”因许多事情而被铭记。但对于加密货币投资者来说,3月12日的崩盘已经极大地改变了比特币衍生品市场的前景.
在一个包含闪电网络和比特币开发者邮件列表的主题帖中,Blockstream的联合创始人MattCorallo——近期受雇于SquareCrypto——公布了一个潜在的闪电网络攻击向量.