前言
据慢雾区情报,以太坊 DeFi 平台 Lendf.Me 遭受重入漏洞攻击。慢雾安全团队在收到情报后随即对此次攻击事件展开分析,并快速定位了问题所在。
据慢雾科技反(AML)系统初步统计分析,Lendf.Me 被攻击累计的损失约 24,696,616 美元,具体盗取的币种及数额为:
之后攻击者不断通过 1inch.exchange、ParaSwap、Tokenlon 等 DEX 平台将盗取的币兑换成 ETH 及其他代币。
以下是详细分析过程。
攻击细节
本次对 Lendf.Me 实施攻击的攻击者地址为 0xa9bf70a420d364e923c74448d9d817d3f2a77822,攻击者通过部署合约 0x538359785a8d5ab1a741a0ba94f26a800759d91d 对 Lendf.Me 进行攻击。
SBF:若数字商品消费者保护法案会扼杀DeFi,我将强烈反对:10月20日消息,FTX创始人SBF针对Yearn核心开发者banteg转发观点:“SBF悄悄游说,以让数字商品消费者保护法 (DCCPA) 法案获得通过,该法案赋予美国商品期货交易委员会(CFTC)杀死 DeFi,但却有利于 FTX”的回应表示,如果数字商品消费者保护法(DCCPA)法案会扼杀 DeFi,我会强烈反对该法案,仍在等待最终文本。
今早报道,SBF表示将支持使用黑名单方式对加密货币行业进行监管。[2022/10/20 16:31:46]
通过在 Etherscan 上查看攻击者的其中一笔交易:https://etherscan.io/tx/0xae7d664bdfcc54220df4f18d339005c6faf6e62c9ca79c56387bc0389274363b
Avalanche链上DeFi协议总锁仓量为86.3亿美元:金色财经报道,据DefiLlama数据显示,目前Avalanche链上DeFi协议总锁仓量为86.3亿美元,24小时减少9.72%。锁仓资产排名前五分别为AAVE(23.5亿美元)、TraderJoe(12.2亿美元)、Benqi(10.2亿美元)、Curve(9.76亿美元)、multichan(8.12亿美元)。[2022/1/30 9:22:32]
我们发现,攻击者首先是存入了 0.00021593 枚 imBTC,但是却从 Lendf.Me 中成功提现了 0.00043188 枚 imBTC,提现的数量几乎是存入数量的翻倍。那么攻击者是如何从短短的一笔交易中拿到翻倍的余额的呢?这需要我们深入分析交易中的每一个动作,看看究竟发生了什么。
Dedaub已通过一次白帽攻击将DeFi Saver客户的资金安全转移:智能合约安全公司Dedaub发文称,已通过一次白帽攻击将DeFi Saver客户的资金安全转移。该文称,在DeFi Saver部署的智能合约中发现一个关键漏洞后,Dedaub利用了该漏洞,并于1月5日与团队取得联系。DeFi Saver团队立即作出回应,不到20小时,客户资金已通过一次白帽攻击恢复安全。
Dedaub称,该漏洞将会影响DeFi Saver服务的主要用户,过去2个月有200多名客户将存款存入这个易受攻击的合约中;该漏洞最初是通过复杂的静态分析而非人工检查来标记的,在涉及金融资产时,自动化分析通常是一种低价值的警告;通过使用DeFi Saver的闪电贷和代理授权功能可抢救用户资产。[2021/1/11 15:51:17]
通过把该笔交易放到 bloxy.info 上查看,我们能知道完整的交易流程
DeFi 概念板块今日平均跌幅为3.22%:金色财经行情显示,DeFi 概念板块今日平均跌幅为3.22%。47个币种中12个上涨,35个下跌,其中领涨币种为:WAVES(+10.44%)、TRB(+5.94%)、BAND(+2.72%)。领跌币种为:KCASH(-24.55%)、LBA(-12.22%)、BZRX(-12.09%)。[2020/11/10 12:09:58]
通过分析交易流程,我们不难发现攻击者对 Lendf.Me 进行了两次 supply() 函数的调用,但是这两次调用都是独立的,并不是在前一笔 supply() 函数中再次调用 supply() 函数。
紧接着,在第二次 supply() 函数的调用过程中,攻击者在他自己的合约中对 Lendf.Me 的 withdraw() 函数发起调用,最终提现
EthHub联合创始人:希望以太坊DeFi项目能建立生态系统并为ETH做贡献:7月28日晚间,EthHub联合创始人Eric Conner发推称,人们喜欢抨击2017年的ICO,但其中很多团队基于此建立了生态系统基金,并为eth1和eth2研发做出了贡献。真的希望那些非常依赖未来的以太坊、现在在做代币的DeFi项目,做同样的事情。[2020/7/29]
在这里,我们不难分析出,攻击者的 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 提空。
防御建议
针对本次攻击事件慢雾安全团队建议:
1、在关键的业务操作方法中加入锁机制,如:OpenZeppelin 的 ReentrancyGuard
2、开发合约的时候采用先更改本合约的变量,再进行外部调用的编写风格
3、项目上线前请优秀的第三方安全团队进行全面的安全审计,尽可能的发现潜在的安全问题
4、多个合约进行对接的时候也需要对多方合约进行代码安全和业务安全的把关,全面考虑各种业务场景相结合下的安全问题
5、合约尽可能的设置暂停开关,在出现“黑天鹅”事件的时候能够及时发现并止损
6、安全是动态的,各个项目方也需要及时捕获可能与自身项目相关的威胁情报,及时排查潜在的安全风险
附OpenZeppelin ReentrancyGuard:
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/ReentrancyGuard.sol
标签:UPPSUPPLYPPLSupplyConSupremacyPLY价格blockchainresearchandapplication
上期回顾 BTC:短期 BTC 以做多为主,止损点位为 $6,900,关注利好是否能持续发酵,目标赢利点可以放在 $7,400。在 4 月 18 日上涨至 $7,300 受阻后,最低下跌至 $6,750,目前已突破 $7,500.
1900/1/1 0:00:004月23日,数据分析网站Glassnode发推文称,自3月底以来,比特币持有者净头寸每天都在增加,目前正触及年度高点。长期持有者正在增加头寸,他们每天都在积累更多的BTC.
1900/1/1 0:00:00312暴跌和最近的暴涨,发现一个奇怪的现象,踏空远比套牢的挫败感更强烈。套牢后,心理上反而更轻松,大不了再熬一熬。踏空则完全不一样,好比你饿了三天三夜,突然在你面前摆一桌满汉全席,只准看不准吃.
1900/1/1 0:00:00原文标题:《央行法定数字货币现身农业银行内测?农行人士:在央行统一安排下有序进行》昨晚,一则央行法定数字货币DCEP钱包已在农业银行内测的消息不胫而走。今日,这一消息引爆数字货币概念股行情,汇金股份涨停、四方精创大涨.
1900/1/1 0:00:00超跌反弹还是重返牛市? 4月13日(周一)晚上7:30,FTX携手币coin,特邀FTX区社群合伙人:BensonAlameda地址今日累计向FTX交易所转入超9900万枚USDC:7月12日消息,据欧科云链链上天眼监测.
1900/1/1 0:00:00《富爸爸,穷爸爸》作者、日裔美国人罗伯特·清崎再一次在推特上力荐比特币、黄金和白银,他的理由很简单:美联储一直在采取越来越惊人的行动,以避免全球经济崩溃.
1900/1/1 0:00:00