区块链小白入门_区块链技术学习_区块链挣钱原理_链博网

网站地图产业

区块链小白入门_区块链技术学习_区块链挣钱原理_链博网

当前位置: 链博网 > 文库 >

慢雾:Decentralised Finance论坛Lendf.Me被黑细则解析及防御提议

时间:2021-08-24 10:00人气:来源: www.ygxyzx.com

通过解析买卖步骤,小编不难发现攻击者对 Lendf.Me 进行了两次 supply() 函数的调用,但是属于这两次调用都属于独立的,并不代表在前一笔 supply() 函数中第三调用 supply() 函数。

第二名:在 withdraw() 函数的末尾,存在同样的逻辑对 market 使用者的余额信息 (supplyBalance) 进行了更新,更新值为扣除使用者的提现金额后的余额。

据慢雾科学技术反洗钱(AML)系统软件初步统计解析,Lendf.Me 被攻击累计的损失约 24,696,616 USD,具体盗取的币种及数额为:

WEther: 55159.02134,
WBTC: 9.01152,
CHAI: 77930.93433,
HBTC: 320.27714,
H美元: 432162.90569,
B美元: 480787.88767,
PAX: 587014.60367,
T美元: 459794.38763,
美元C: 698916.40348,
泰达币: 7180525.08156,
美元x: 510868.16067,
imBTC: 291.3471

紧接着,在其次次 supply() 函数的调用过程中,攻击者在他一个人的合约中对 Lendf.Me 的 withdraw() 函数发起调用,最后提现

慢雾慢雾

慢雾

在如此的操作下,使用者的余额虽然在提现后虽然已经扣除去,但是属于下面的 supply() 函数的逻辑会第三将使用者未扣除提现金额时的值覆盖回去,造成攻击者虽然实行了提现操作,但是属于余额不仅不存在扣除,反而造成余额增加了。通过如此的方式,攻击者能以指数级别的数目提现,直至把 Lendf.Me 提空。

防御提议

按正常的提现逻辑而言,在 withdraw() 单独实行的时候,使用者的余额会被扣除并正常更新,但是属于因为攻击者将 withdraw() 嵌入在 supply() 中,在 withdraw() 函数更新了使用者余额 (supplyBalance) 后,下面在 supply() 函数要实行的代码,也就在于 1590 行之后,使用者的余额会再被更新一次,而用于更新的值会属于先前 supply() 函数开头的保存在localResults 中的使用者原先的存款加上攻击者首次调用 supply() 函数存款的值。

小编发现,攻击者第一属于存入了 0.00021593 枚 imBTC,但是属于却从 Lendf.Me 中成功提现了 0.00043188 枚 imBTC,提现的数目几乎属于存入数目的翻倍。那样攻击者属于怎样从短短的一笔买卖中拿到翻倍的余额的呢?这要求小编深入解析买卖中的每个动作,看看到底发生了哪个。

慢雾

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

OpenZeppelin ReentrancyGuard: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/ReentrancyGuard.sol

通过在 ETHscan 上查询攻击者的其中一笔买卖:https://etherscan.io/tx/0xae7d664bdfcc54220df4f18d339005c6faf6e62c9ca79c56387bc0389274363b

通过赋值给 localResults 变量的方式,使用者的转入信息会先暂时保存在这个变量内,然后此时攻击者实行 withdraw() 函数,小编看下 withdraw() 函数的代码:

针对本次攻击事件慢雾安全团队提议:

在关键的生意操作手段中加入锁机制,如:OpenZeppelin 的 ReentrancyGuard开发合约的时候采用先更改本合约的变量,再进行外部调用的编写风格项目上线前请出色的再次方安全团队进行全方位的安全审计,尽量的发现潜在的安全毛病多个合约进行对接的时候也要求对多方合约进行代码安全和生意安全的把关,全方位思考各种生意场景相结合下的安全毛病合约尽量的设置中止开关,在涌现出“黑天鹅”事件的时候可以准时发现并止损安全属于动态的,各个项目方也要求准时捕获说不定以及自己项目有关的威胁情报,准时排查潜在的安全危害

据慢雾区情报,Ethereum Decentralised Finance 论坛 Lendf.Me 遭受重入漏洞攻击。慢雾安全团队在收到情报后随即对此次攻击事件展开解析,并快速定位了毛病所在。

第一名:在函数的开头,合约第一获得了 storage 的 market 及 supplyBalance 变量。

慢雾

慢雾

之后攻击者不断通过 1inch.exchange、ParaSwap、Tokenlon 等 DEX 论坛将盗取的币兑换成 Ether 及其他代币。

附:

依照上图,能够看到,在 supply() 函数的末尾,会对 market 和使用者的余额进行更新,在这前段时间,使用者的余额会在函数的开头预先获得良好并保存在 localResults.userSupplyCurrent,如下:

在这里,小编不难解析出,攻击者的 withdraw() 调用属于发生在 transferFrom 函数中,也就在于在 Lendf.Me 通过 transferFrom 调用使用者的 tokensToSend() 钩子函数的时候调用的。非常的明显,攻击者通过 supply() 函数重入了 Lendf.Me 合约,导致了重入攻击,那样具体的攻击细则属于如何的呢?小编下面跟进 Lendf.Me 的合约代码。

代码解析

小编深入解析下 supply() 函数

慢雾

这里到底有俩关键的位置:

以下属于详细解析过程。

攻击细则前言

Lendf.Me 的 supply() 函数在进行了一系列的处置后,会调用一个 doTransferIn 函数,用于把使用者供应的币存进合约,然后下面会对 market 变量的一些信息进行赋值。回顾刚刚说的攻击步骤,攻击者属于在其次次 supply() 函数中通过重入的方式调用了 withdraw() 函数提现,也就在于说在其次次的 supply() 函数中,1590 行后的操作在 withdraw() 前段时间并不懂得实行,在 withdraw() 实行完之后,1590 行后的代码才会继续实行。这里的操作造成了攻击者可提现余额变多。

通过把该笔买卖放到 bloxy.info 上查询,小编能知晓完整的买卖步骤

上一篇:灰度LTC和BCH信托推出后,再现高溢价

网站首页

下一篇:没有了



网站导航

热门推荐

点击排行

热门标签