注:5 月,DeFi 安全事故频发,据统计,约有 15 个项目遭到黑客攻击,包括 Belt Finance、BurgerSwap、Julswap、Merlin、AutoShark Finance、Bogged Finance、Pancake Bunnny、Venus、FinNexus、bEarn Fi 、EOS Nation、xToken、Rari Capital、Value DeFi、Spartan,涉及资金损失近 3 亿美元。值得注意的是,在如此多的攻击中,BSC 上的 DeFi 项目貌似成了黑客的集中攻击点,而闪电贷则是黑客主要的攻击手段。5 月 30 日,币安智能链(BSC)官方还针对频发的安全事件发布推特称:
最近已经接连发生超过 8 起针对 BSC 链上项目的闪电贷攻击,我们认为现在有一个有组织的黑客团队盯上了 BSC。我们呼吁所有 DApp 注意防范并采取防治措施。
此前,BSC 还与区块链安全公司 CertiK 举办了有关 DeFi 风险的直播活动,本文将对其进行回顾以帮助了解 DeFi 中的 4 大安全风险。观看活动视频,可访问:https://www.pscp.tv/w/1BdGYYeYVREGX。
自 9 个月前推出以来,币安智能链(BSC)已成为全球领先的 DeFi 平台之一。如今,有超过 600 个项目在 BSC 上每天产生数千万的交易。
然而,巨大的成功也伴随着巨大的风险。黑客利用在不同层面暴露出来的漏洞,越发频繁地进行了漏洞攻击。这些漏洞可以分为 4 个大类,我们将对这些漏洞进行介绍,以使读者更好地了解与 DeFi 有关的安全风险。
1
管理密钥的泄露
在智能合约中,修改器限制了允许调用某些功能的人选。这些功能通常是用于修改合约配置或管理智能合约中持有的资金的特权功能。如果攻击者获取了管理密钥,他们就可以完全控制智能合约,并窃取用户资金。
密钥如何被泄露?
第一种可能性是通过计算机木马。攻击者可以使用木马程序来窃取存储在计算机上的私钥。此外,攻击者也可以进行网络钓鱼攻击,欺骗用户将私钥发送给攻击者。对于 DeFi 项目而言,有时几个项目利益相关者将共享一个私钥。这就使得恶意的内部人员可以使用该密钥调用管理功能,并将项目的代币转移到他们自己的钱包地址。
例如,2021 年 3 月 5 日,PAID 网络就遭受了因私钥管理不善而引发的 " 铸币 " 攻击。PAID 代币合约是置于一个可升级的代理之后的,也就是说,合约可以被修改和替换。代理人的私钥被用来交换部署在代理背后的代码,其中包含攻击过程中使用的销毁和铸造功能的恶意代码。攻击者销毁了 6000 万现有的 PAID 代币,然后为自己铸造了 5900 万代币。瞬时,PAID 代币价格从 2.8 美元跌至 0.3 美元,因为 2,501,203 个 PAID 代币在 Uniswap 上遭到抛售,总价约为 2,040ETH。攻击者很可能是通过网络钓鱼攻击入侵了管理员的机器。
2021 年 4 月 19 日,298 万个 EASY 代币从 EasyFi 官方钱包转移到几个未知的钱包,这些代币的当时价值为 7500 万美元。
EasyFi 创始人声称,黑客攻击的原因是 " 对创始人的机器 /Metamask 进行有针对性的攻击,以获取管理密钥 "。
项目应该安全地存储私钥,而不应该在 PC 设备上以纯文本形式存储管理密钥,或依赖 MetaMask 热钱包。我们建议使用硬件钱包创建一个多签(Multisig)账户。例如,对于一个五人团队,每个团队成员都应该有自己的硬件钱包。当他们试图发送特权交易时,应该要求五个团队成员中至少有三个人签署该交易,从而防止攻击者在获得其中一个密钥时就能够调用任何特权功能。
对于代币合约来说,如果可能的话,应避免允许铸造新的代币。但如果没有这个可能,也要尽量使用 DAO 合约或时间锁合约作为所有者,而不是 EOA 账户(外部自有账户)。
2
编码错误
DeFi 中,一些漏洞的复杂程度很高,但情况并不总是如此。
有时,智能合约中的一个小编码错误就会变成一场大灾难,导致价值数百万的资产受到损害。
一些常见的编码错误包括:
函数允许 (修改)
拼写错误
数字错误
缺少 / 不正确的变量值赋值
一个值得注意的例子是 Uranium Finance 的黑客事件,该事件发生在一个未经审计的合约上,最终导致了 5700 万美元的损失。这是由于在比较交换前后池中两个代币余额的乘积时,使用了不一致的乘数,使得攻击者可以从资金池中换出大部分代币,而成本只有 1 Wei。
Uranium Finance 代码:
正确代码:
另一个例子是来自于 Value DeFi 的黑客事件,该事件导致了 1000 万美元的损失。据悉,合约中的初始化函数漏掉了 "initialized = true",也就是说,任何人都可以重新初始化资金池并将自己设置为操作员。2021 年 5 月 5 日,攻击者重新初始化了资金池,并将操作员的角色设置为了自己,然后使用 "governanceRecoverUnsupported() " 函数耗尽了池中的质押代币。
Value DeFi 中的漏洞代码 :
修复代码:
上述两个例子都是由简单的编码错误引起的,而且都造成了重大损失。但是,这些类型的错误完全可以通过适当的同行评审、单元测试和安全审计来轻松消除。
3
闪电贷和价格操纵
闪电贷是一种从 Aave 或 DyDx 等协议中借入大量资金以获得一定费用的方式。其要求是,贷款需要在同一交易中归还。如果没有,贷款就会被退回。这些贷款的一般利用流程如下:
使用闪电贷借入大量的代币 A
在 DEX 上将代币 A 换成代币 B (降低代币 A 的价格,大幅提高代币 B 的价格)
利用一个依赖 A/B 交易对价格的 DeFi 项目
偿还闪电贷
近日,PancakeBunny 就遭遇闪电贷攻击,攻击者共获得了 114K BNB 和 697K Bunny (当时约为 4000 万美金)。攻击者利用闪电贷操纵了 PancakeSwap USDT-BNB V1 池的价格,导致大量的 BNB 流入 BNB-Bunny 池,从而使得该合约能够以虚高的 BNB 对 Bunny 的价格铸造 Bunny。PancakeBunny 则使用以下函数来计算 Bunny 价格:
随着大量的 BNB 流入 BNB-Bunny 池,变量 "reserve0 " 变得很大。最终,由于价格计算存在缺陷,攻击者共获得了 697K Bunny。
此外,遭受过闪电贷攻击的受害者还有很多,其中也不乏 DeFi 领域的一些知名项目,包括 PancakeBunny($4000 万资金损失),Harvest Finance($2500 万资金损失),Yearn($1100 万资金损失),Value DeFi($700 万资金损失),AKROPOLIS($200 万资金损失),Cheese Bank,XToken,bZx 等等。
如果一个项目需要价格参考,它也需要小心,因为闪电贷可能会操纵价格。为了防止这种情况发生,我们建议使用时间加权平均价格(TWAP)。TWAP 代表了一个代币在特定时间范围内的平均价格。如果攻击者在一个区块中操纵价格,它是不会影响平均价格的。另一个建议是,使用一个可靠的链上价格预言机,如 Chainlink。
4
滥用第三方协议和商业逻辑错误
许多项目,如 PancakeSwap 和 UniSwap,是独立运行的。在 PancakeSwap 中,用户可以为收益耕种代币提供流动性,或者用一种代币交换另一种代币。用户不与其他第三方协议互动。
其他项目,如 Yearn Finance,运作方式则不同。Yearn Finance 收集用户资金并将其投入第三方合约。它通过投资用户的代币获得收益。另一种情况是,一些项目从其他项目 " 借用 " 代码。例如,PancakeSwap 就引用了 UniSwap 的代码。在这两种情况下,如果第三方代码的源头有漏洞,那么使用该代码的项目也会出现漏洞。如果一个项目的开发者不熟悉他们所使用的第三方代码,那么一旦漏洞被利用,就可能酿成大问题。
2021 年 5 月 8 日,Value DeFi vSwap AMM 的非 50/50 资金池被人利用,总共损失了约 1100 万美元。为了实现非 50/50 资金池,Value DeFi 从属于 Bancor 协议的 "BancorFormula.sol " 复制了 "power() " 函数。在 power() 函数的描述中,写到这个函数不支持 "_baseN <_baseD " 的情况。然而,不幸的是,Value DeFi 就是这样使用这个函数的。攻击者通过向该函数发送了一个精心制作的有效载荷,将少量的代币 A 交换成了代币 B。
Value DeFi 代码:
在 DeFi 领域中还有许多其他类似的案例。2021 年 5 月 8 日,一名攻击者通过利用集成在 Rari Capital V2 中的 Alpha Homora V1 的 ibETH 池(银行合约)的功能,从 Rari Capital Ethereum 池中抽走了大约 2600 个 ETH。Bearn Finance 则在其 "BvaultsStrategy " 合约中允许使用 BUSD 的提款金额来提取 ibBUSD,使得攻击者从池中移除了 10,859,319 BUSD。
相较于前几种问题,此类漏洞更难发现,在使用与任何第三方协议通信的项目时,都应该谨慎行事。我们不建议盲目地复制和部署开发人员不了解的代码。开发者应该在整合第三方协议并将其部署到生产中之前,充分了解第三方协议以及分叉项目的工作方式。此外,我们还建议开发者先在测试网上部署他们的项目,并进行测试运行,以检查交易记录的异常情况。
作为终端用户,在使用个人资产与项目进行互动之前,有时很难找出项目的详细信息。这时,便可以借助区块链安全公司的审计报告,来浏览项目的安全性。
总之,创建 DeFi 项目可以很有趣,但被黑客攻击就不好了。
要使一个项目 100% 安全是困难的,但我们可以尽可能地进行保护:
保持管理密钥的安全
避免简单的编码错误
使用可靠的链上价格馈送
接受安全审计并做好审计准备
声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。
简介:专业性+洞察力的中文区块链媒体,致力于探索Web 3.0前瞻内容和深度解读。
评论0条