火星链 火星链
Ctrl+D收藏火星链
首页 > Pol币 > 正文

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

作者:

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

前言

据慢雾区情报,以太坊 DeFi 平台 Lendf.Me 遭受重入漏洞攻击。慢雾安全团队在收到情报后随即对此次攻击事件展开分析,并快速定位了问题所在。

据慢雾科技反(AML)系统初步统计分析,Lendf.Me 被攻击累计的损失约 24,696,616 美元,具体盗取的币种及数额为:

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

以下是详细分析过程。

攻击细节

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

DeFi资产管理公司MEV Capital提供Uniswap对冲策略:金色财经报道,DeFi资产管理公司MEV Capital使用由加密货币衍生品专家 OrBit Markets 发行的期权合约来对冲流动性提供者的头寸并防止Uniswap (v3) 流动性池中的损失。到期时,期权合约在场外结算,如果流动性提供者 (LP) 的头寸价值增加,则由 MEV Capital 支付余额,或者如果 LP 头寸的价值减少,则期权柜台与 MEV 结算差额。[2023/3/15 13:06:15]

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

新加坡金管局和BIS等探索使用DeFi批发型CBDC跨境交易和结算:金色财经报道,瑞士国家银行、法兰西银行、新加坡金融管理局和国际清算银行创新中心探索使用DeFi(去中心化金融)协议的批发型央行数字货币的跨境交易和结算。[2022/11/2 12:09:36]

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

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

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

DeFi保险协议InsurAce为Planet用户提供保险产品:4月9日消息,DeFi保险协议InsurAce.io集成DeFi协议Planet,允许Planet质押用户购买智能合约漏洞保险产品。[2022/4/9 14:14:59]

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

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

Cadano基金会IOHK将在2022年在非洲推出DeFi贷款服务:12月27日消息,Cadano基金会IOHK创始人查尔斯·霍斯金森 (Charles Hoskinson) 表示,他将在2022年第二季度“建立一个金融操作系统”,使非洲人获得DeFi等贷款服务。据悉,IOHK在8月与卢森堡欧洲商业大学达成合作,为非洲国家的学生扩大教育机会。(nairametrics)[2021/12/27 8:07:32]

代码分析

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

不法分子假冒知名DeFi投资者Sisyphus发送附带恶意软件的电子邮件:10月30日消息,据多为DeFi投资者透露,他们收到了带有PDF文件的欺诈性电子邮件。不幸的是,已经有人打开了附件。昨天(2021年10月29日),推特用户@cryptofan777披露,自己收到了一封电子邮件,来自一个假冒知名NFT产品Pebble DAO的DeFi投资者Sisyphus的地址。根据邮件的主题,它包含了一个来自Parallel DAO项目的未来代币SAFT的简单协议。同时,这封邮件没有文字内容,也没有签名。收信人承认自己打开了这个PDF文件,“这似乎就是问题所在。”因为这似乎是一种危险的恶意软件。据了解,至少有三家专注于区块链的风投巨头成为此次攻击的目标,同样的邮件发给了Sino Global Capital、Sneaky Ventures和County Capital。而真正的Sisyphus立即声明,这些邮件并非是自己发出的,并提醒收到此类邮件的用户不要打开邮件或点击任何链接。(U.Today)[2021/10/31 6:22:18]

我们深入分析下 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

标签:PLYUPPSUPPPLrealmedicinesupplychainUPP价格SUPM价格ripple币可以在中国交易吗

Pol币热门资讯
区块链:金色前哨 | 荷兰央行:希望在CBDC发展中发挥领导作用

荷兰中央银行(DNB)今天发布了一份报告,表示CBDC将为其公民带来巨大利益,并希望在其发展中发挥领导作用.

1900/1/1 0:00:00
GENS:利好变利空?BTC注意这个多空分水岭

大帝怎么看?BTC:大饼变盘如期进行:昨晚BTC30分钟受到原油暴跌影响,回踩一波。之后黄金上拉又反弹一波,但受到三角整理趋势线反压,K线未过去。短线开始偏空回踩.

1900/1/1 0:00:00
比特币:央行:2020年3月份金融市场运行情况

俄罗斯央行:数字卢布或帮助减少俄罗斯经济对美元的依赖:10月19日消息,俄罗斯央行表示,避开经济制裁将是推出由卢布支持的央行数字货币(CBDC)的原因之一.

1900/1/1 0:00:00
INB:不懂期货 如何投资?

上周发生的 WTI 原油期货穿仓事件吸引了很多人的注意。作为衍生品的一种,我们今天借此机会谈论一下期货的历史和发展。期货交易在美国和世界各地都有着悠久的历史.

1900/1/1 0:00:00
区块链:密码密钥傻傻分不清?认识密码学中的最高机密

密码学为何称之为密码学?密码和密钥究竟有何区别?隐私保护方案中,密钥的角色是否可以被替代?密钥在使用过程中存在哪些风险?这里,我们将以密码学中的密码为起点.

1900/1/1 0:00:00
EOS:注意 今晚BTC有大事儿要发生

文章开始前,先吹波牛,走一波关注!你懂的。前期大饼崩盘前,本人在03月04日参加金色沙龙、即BTC血崩前,就看空2020减半!以及早在大半年之前,2019.09.03比特币还是一万刀以上的时候,

1900/1/1 0:00:00