火星链 火星链
Ctrl+D收藏火星链

PPL:DeFi平台Lendf.Me被黑细节分析及防御建议

作者:

时间:1900/1/1 0:00:00

前言

据慢雾区情报,以太坊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及其他代币。

以下是详细分析过程。

攻击细节

本次对Lendf.Me实施攻击的攻击者地址为?0xa9bf70a420d364e923c74448d9d817d3f2a77822,攻击者通过部署合约?0x538359785a8d5ab1a741a0ba94f26a800759d91d对Lendf.Me进行攻击。

Cobo推出机构级DeFi投资管理平台Cobo Argus V2版本:6月21日消息,Cobo正式推出机构级DeFi投资管理平台Cobo Argus V2版本,在DeFi策略机器人、团队角色授权、风险管理等方面进行了功能优化。Cobo Argus V2能够提供一键自动收取流动性挖矿奖励等便捷功能,并可以按照用户设置的间隔时间、Gas费用条件等进行操作,帮助DeFi挖矿节省时间和人力。[2023/6/21 21:52:42]

通过在Etherscan上查看攻击者的其中一笔交易:https://etherscan.io/tx/0xae7d664bdfcc54220df4f18d339005c6faf6e62c9ca79c56387bc0389274363b

我们发现,攻击者首先是存入了0.00021593枚imBTC,但是却从Lendf.Me中成功提现了0.00043188枚imBTC,提现的数量几乎是存入数量的翻倍。那么攻击者是如何从短短的一笔交易中拿到翻倍的余额的呢?这需要我们深入分析交易中的每一个动作,看看究竟发生了什么。

DeFi保险协议InsurAce宣布与Fantom流动性聚合器LiquidDriver达成合作:2月18日消息,DeFi保险协议InsurAce宣布与Fantom流动性聚合器LiquidDriver达成合作,InsurAce将会上线LiquidDriver的保险产品,以避免LiquidDriver用户因合约攻击而产生资产损失。[2022/2/18 10:01:31]

通过把该笔交易放到bloxy.info上查看,我们能知道完整的交易流程

通过分析交易流程,我们不难发现攻击者对Lendf.Me进行了两次supply()函数的调用,但是这两次调用都是独立的,并不是在前一笔supply()函数中再次调用supply()函数。

紧接着,在第二次supply()函数的调用过程中,攻击者在他自己的合约中对Lendf.Me的withdraw()函数发起调用,最终提现

数据:DeFi锁仓量为1686亿美元:金色财经报道,据Debank数据,当前DeFi全网锁仓量(TVL)达1686亿美元。目前锁仓量最多的三个协议分别是:1.Maker(183亿美元)、2.Curve(176亿美元)、3.PancakeSwap(150亿美元)。[2021/11/15 6:51:58]

在这里,我们不难分析出,攻击者的withdraw()调用是发生在transferFrom函数中,也就是在Lendf.Me通过transferFrom调用用户的tokensToSend()钩子函数的时候调用的。很明显,攻击者通过supply()函数重入了Lendf.Me合约,造成了重入攻击,那么具体的攻击细节是怎样的呢?我们接下来跟进Lendf.Me的合约代码。

聚币Jubi DeFi板块治理代币 JFI流动性挖矿上线:据官方消息,聚币Jubi DeFi在质押JT借贷挖矿JFI后,已于2020年9月30日19:00(UTC+8)正式推出JFI的流动性挖矿。用户在Uniswap上链接钱包,搜索JFI合约地址,授权并向JFI/USDT交易对注入流动性,即可获得挖矿JFI代币奖励。

JFI总发行量21,000,000枚,其中10万枚已空投给符合要求的JT持有者,90万枚已全额销毁,其余2000万枚中一半通过质押JT挖矿产生,另一半通过去中心化流动性挖矿产生。JFI作为Jubi DeFi板块的治理代币,将以聚币金融业务为价值依托,该板块业务的利润将实际为JFI价格赋能。[2020/9/30]

代码分析

Lendf.Me的supply()函数在进行了一系列的处理后,会调用一个doTransferIn函数,用于把用户提供的币存进合约,然后接下来会对market变量的一些信息进行赋值。回顾刚才说的攻击流程,攻击者是在第二次supply()函数中通过重入的方式调用了withdraw()函数提现,也就是说在第二次的supply()函数中,1590行后的操作在withdraw()之前并不会执行,在withdraw()执行完之后,1590行后的代码才会继续执行。这里的操作导致了攻击者可提现余额变多。

我们深入分析下supply()函数

BB:EOS有潜力成为本地和非本地资产完全兼容的DeFi平台:Block.one首席执行官Brendan Blumer(BB)发推称:“锚定于EOS区块链上的资产可以为BTC、ETH和其他受技术限制的资产带来速度、可扩展性和直观的可编程性,随着IBC的发展,EOS有潜力成为本地和非本地资产完全兼容的DeFi平台。”[2020/7/24]

根据上图,可以看到,在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

标签:SUPUPPPLYPPLSuper miner token DecimalsUPP价格PLY价格sugarapple

币安交易所app下载热门资讯
WEB3:这些 Web 2.5 的前浪正涌向 Web 3.0 的后浪:社区、金融和数据产品

撰文:WendyXiaoSchadeck,就职于风险投资公司Northzone编译:孤鸟「Web3.0」这个词曾一度让我非常困惑,因为它暗示着我们全力在构建一个「升级版」的网络.

1900/1/1 0:00:00
比特币:这可能是后浪们逆袭的唯一机会

有一次,亚马逊创始人贝佐斯问巴菲特:“你的投资原则网络上都有,好像也不是很难,为什么没有几个人能学会,并且赚到钱?”巴菲特回答:“因为没有人希望自己慢慢变得富有啊.

1900/1/1 0:00:00
LIBRA:中金:从Libra 2.0及央行数字货币看全球发展新格局

作者:黄乐平、韦昕来源:中金点睛2020年4月16日,Librav2.0版本白皮书发布,这是继2019年6月18日第一版Libra白皮书发布后的首次正式更新.

1900/1/1 0:00:00
区块链:用大脑备份比特币助记词 ?这并不是玩笑

在保管比特币、以太币等区块链资产时,我们会遇到该使用什么钱包的问题,而常用的有手机钱包、硬件钱包、纸钱包、脑钱包、在线钱包等,对于多数人来说,硬件钱包可能会是最好的选择,但在一些特殊情况下.

1900/1/1 0:00:00
ASH:区别于BCH和BSV,BTC哈希率在减半后保持强劲

来源:LongHashUTC时间5月11日晚7点23分,当第630000个BTC区块被挖出时,比特币经历了第三次区块奖励减半。减半是指加密货币矿工验证区块或“挖矿”获得的奖励减少50%的事件.

1900/1/1 0:00:00
加密货币:散户FOMO情绪出现,未平仓总量再创历史新高 | CFTC COT比特币持仓周报

5月16日,CFTC公布了最新一期的CME比特币期货周报,统计周期中后段行情出现了非常大幅度的涨幅回吐表现,而这轮回调也是3·12以来强度最大的一波短时回调.

1900/1/1 0:00:00