小浣熊下载站:值得大家信赖的下载站!
发布时间:2024-03-14 02:22:09来源:小浣熊下载站作者:
踏入以太坊的幽深领域,那些伺机而动的攻击者与套利者也得小心成为别人瞄准的靶子。在区块链生态炙手可热的去中心化金融(DeFi)世界里,安全性显得尤为关键。仅在过去的一年中,就发生了几十起安全事故。
BlockSec团队作为长期关注并研究DeFi安全的专业团队,独立发现了多起重大安全事件,并在多个顶级安全会议如USENIX Security, CCS和Blackhat上发布了研究成果。接下来,我们将系统性梳理这些DeFi安全事件,深度剖析背后的根本原因。
时光回溯到北京时间2021年3月9日凌晨,以太坊上的某去中心化交易平台V2众筹池遭遇了一场巧妙的攻击。攻击者小A利用了众筹池智能合约中的漏洞,用自己创造的假代币成功地换取了池内的真代币,上演了一场现实版的“狸猫换太子”。然而,后续事态的发展却并未按小A的设计剧本走……
对以太坊不太了解又爱听故事的朋友可以直接从【0x1 事件回顾】开始阅读;偏好直接了解攻击分析的朋友则可以跳至【0x2 攻击分析】部分。
“攻击成功了吗?好像成功了,却又不尽然。” 这或许就是当时小A内心的写照。
代码的世界,无码即有洞。尽管智能合约头顶着“智能”的光环,但它本质上还是一串串等待执行的指令,总有人能找出其中的漏洞进行牟利。这次故事的主角——DODO V2众筹池智能合约,正是被小A发现并利用了其漏洞。
这DODO V2众筹池究竟是何方神圣?简单来说,它就是一个资金池,只不过这里的“资金”指的是以太坊上的ERC20代币。这个池子初始化时会设定两种有价值的代币作为交易对,用户可以通过使用该池提供的服务来进行操作。在这次攻击中,小A便是利用了闪电贷服务来实施他的计划。
小A做了两件事:
1.他创造了两个ERC20假代币FDO和FUSDT,然后将它们存入了即将被攻击的DODO池内。
接着,他利用了DODO V2众筹池的闪电贷功能。小A发现该池竟然可以被随意重新初始化,并且没有设置任何限制。于是,在借出资金后,他迅速将众筹池初始化为只处理他伪造的FDO/FUSDT这对假代币,并提前预存了足量的假代币进入池子。这样一来,当众筹池检查借款偿还情况时,检测的对象不再是真实的代币,而是小A放入的假代币,从而让小A用假代币轻易换取了真金白银。
第一回合:抢跑者的逆袭
小A第一次瞄准的是(WSZO/USDT)池,但他还没来得及收网,就被一个名为小B的抢跑机器人截胡了。小B通过提高交易费的方式成功插队,使得矿工优先打包了他的交易,导致小A错失良机。
第二回合:半路杀出程咬金
两次失利后,小A把目标转向了(ETHA/USDT)池,并提高了交易费用防止再次被抢跑。然而,他并不知道小B已经盯上了他。结果,小A再一次被小B抢先。
第三回合:搬起石头砸自己的脚
第三次攻击中小A终于绕过了小B,但在成功取出资金后,他选择先将其存入一个新合约,打算之后再转移到自己账户。然而这个临时存储合约存在一个任何人都能提取资金的漏洞,这一疏忽又被另一位角色——小C发现。当小A准备转移资金时,又一次遭遇了抢跑。
为了便于理解,我们以下文提到的第三次攻击为例进行详细解析。
涉及本次攻击的关键函数如下:
getVaultReserve 函数:用于获取当前池中代币对的储备量。
flashloan 函数:实现闪电贷功能,用户调用时会根据参数转入相应数量的代币,并触发外部逻辑。
init 函数:最关键的初始化函数,允许任何人随时调用重新初始化池子,且没有权限限制,这正是漏洞所在。
以下是攻击交易的具体流程,详情可通过我们团队的交易分析工具查看: https://tx.blocksecteam.com/
步骤0-5(内容同原文)
此次攻击之所以发生,主要原因在于DODO V2众筹池的init函数设计缺陷。正常情况下,该函数应在创建池时仅调用一次,并随后限制访问权限以及禁止重复调用。攻击者小A正是利用了init函数可以随意重新初始化池子的漏洞,结合闪电贷机制,用假代币成功换取了真代币。
因此,我们向相关项目方提出以下建议:
加强对合约核心功能的权限审核,避免因权限控制不足导致关键函数被滥用,从而引发潜在风险和损失。
提升代码审计意识,项目上线前务必咨询专业的区块链安全公司进行全面的安全审计,最大程度保障项目安全稳定运行。
文中涉及的外部地址与合约地址
文中涉及的交易记录(五次攻击)
DODO币
翻转
休闲益智
怪兽power
动作格斗
荧的惩罚游戏
角色扮演
冠军来了
休闲益智
挖掘机逆袭记
休闲益智
披萨塔正式版
休闲益智
方程式赛车手
休闲益智
米加世界迷你小镇
模拟经营
幸运硬币
休闲益智