近期的链圈币圈,热度已几乎都被 DeFi 掠夺。
伴随着项目的层出不穷,大量用户的涌入,DeFi 协议总锁仓量已高达 103.8 亿美元。
极高的投资收益吸引了大量币民加入,而 8 月,更是流动性挖矿项目如火如荼的一个月。
从实验性流动性挖矿项目 Yam 到目前仍旧具有极高话题度的 SushiSwap,整个区块链社区都在持续讨论着其中的巨额利润以及隐藏其下的安全隐患。
在这一个月中,大量新的挖矿项目出现,其中绝大多数项目都直接复制其他类似项目的代码,在未进行安全审计的情况下匆忙上线。因此导致了发现的智能合约安全漏洞数量众多而且性质类似。如今,确定一个项目是否可以投资的首要条件应该是检查项目及其合约是否由著名安全团队进行过专业审计并取得较高安全评价。
据 CertiK 安全技术团队统计,8 月份发生与区块链相关的安全事件盘点如下:
1
8 月 11 日,基于以太坊的代币项目 NUGS 出现安全问题,其智能合约中存在安全漏洞,致使其代币系统出现巨额通胀。由于该智能合约的安全漏洞无法被修复,因此最终 NUGS 项目官方发布公告决定放弃该项目,存入其中的代币也无法被取出。
2
8 月 12 日,流动性挖矿项目 Yam 爆出智能合约漏洞,该漏洞将预留巨大数目的代币,导致对项目进行治理所需要的代币数目随之增长,最终由于社区没有足够的代币,任何治理行为都无法进行。
3
8 月 14 日,流动性挖矿项目 Based 存在智能合约安全漏洞并遭到攻击者攻击,该项目中一号池智能合约中函数被错误设置为可以被外部任意调用,造成其被外部攻击者抢先初始化,导致一号池中任何质押行为都无法完成。
4
8 月 28 日,Sushiswap 智能合约中被发现存在多个安全漏洞,该漏洞允许智能合约拥有者在无任何社区授权情况下,任意进行取款。同时,该合约还存在重入攻击漏洞,会导致潜在恶意代码被执行多次。
5
8 月 31 日,用户由于使用存在漏洞的旧版本 electrum 钱包应用,导致 1400 枚比特币被盗。
6
8 月 31 日和 9 月 1 日,Sushiswap 仿盘 Yuno 和 Kimchi 两个项目智能合约均被发现存在安全漏洞,该漏洞允许智能合约拥有者无限增发项目对应代币,可能导致项目中代币产生巨大通胀。
列表如下:
序号
| 攻击日期
| 事件类型
---|---|---
1
| 8 月 11 日
| 智能合约漏洞
2
| 8 月 12 日
| 智能合约漏洞
3
| 8 月 14 日
| 智能合约漏洞
4
| 8 月 28 日
| 智能合约漏洞
5
| 8 月 31 日
| 钱包软件漏洞
6
| 8 月 31 日、9 月 1 日
| 智能合约漏洞
事件详情
以下是 8 月安全典型事件的具体分析:
1
1 号事件是一个非常典型的,由于逻辑实现上失误而造成的漏洞。NUGS 项目的商业实现模型是一个彩票抽奖的系统,彩票抽奖以轮为单位,在每一轮抽奖中,投资者可以向该轮奖池中存入资金。
经过一段时间后,NUGS 智能合约中的开奖函数可以被外部调用,从而确定本轮彩票抽奖的赢家。赢家获得奖池奖金,而来自外部调用开奖函数的调用者也会获得一小部分奖励。该轮抽奖结束,奖池中数额清零,因此每一轮抽奖开始时,奖池内的初始数额应当为“零”。
然而 NUGS 智能合约中存在一个关于奖池奖金初始数额的逻辑实现漏洞:当一轮抽奖结束后,奖池中数额未被清零,导致了下一轮抽奖开启后,奖池中的初始数额为上一轮的总奖金。因此奖池中的奖金会越来越多,最终导致通胀、币值飞快贬值。
2
2 号事件发生在 Yam 流动性挖矿项目上,也是一个由于逻辑实现上的失误导致的安全漏洞。
在 Yam 智能合约中存在一个 rebase 函数,其目的是在确保代币的价格稳定,而由于在代码层面的疏忽,对每一次 rebase 执行时,代币总共供给量 totalSupply 的数值被错误的进行计算,导致 totalSupply 的数目只能持续增加,因此最终同样导致了通胀发生。
以上两个事件中的漏洞都是属于逻辑实现层面出现的漏洞。逻辑实现上的漏洞虽然非常直观,但依靠任何现有的自动检测工具均无法检查,需要依靠专业的安全审计和 / 或严谨的数学证明才能够避免该类漏洞。
3
3 号事件发生于流动性挖矿项目 Based。其智能合约在进行部署时,Based 官方仅通过调用智能合约中的 renounceOwnership 函数声明了所有者,而并没有对智能合约初始化。而一名外部攻击者在 Based 官方之前,抢先调用 initialize 函数对智能合约进行了初始化。
这使得智能合约的所有者和初始化的操作者不一致,最终任何质押行为都无法完成。
该安全漏洞是由“智能合约自身调用安全风险”和“部署智能合约风险”两者同时影响产生的。对该种智能合约的部署应该确保发送部署智能合约的交易和对智能合约的初始化等操作交易的原子性(原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分),即该两者交易应该相互关联,确保没有第三方利用时间差进行恶意攻击操作。
4
6
4 号和 6 号事件相同:存在多个智能合约漏洞,其上线前均未进行安全审计,对于项目拥有者过大权利的问题,均缺乏相应社区监管机制。
这两个事件的主角项目分别是 SushiSwap (4 号事件)以及其仿盘 Yuno 和 Kimchi (6 号事件)。SushiSwap 项目智能合约中,智能合约拥有者有权利在无监管的情况下,使用 setMigrator 函数任意修改 migrator 的值,然后通过调用 migrator.migrate 来调用任意智能合约外部代码。该外部代码对于智能合约本身是未知的,因此智能合约拥有者可以通过该操作执行恶意代码。
Yuno 和 Kimchi 项目中也存在着类似的漏洞:智能合约拥有者有权利通过 mint 函数来进行无限制数量的铸币操作。
最初,该类漏洞的解决方法是将任何来自智能合约拥有者的操作使用 timelock 智能合约加入延迟锁,SushiSwap、Yuno 和 Kimchi 都通过该种方法为自身加入了 48 小时的操作延迟。其初衷是给予投资者 48 小时的窗口,对任何来自智能合约拥有者的疑似恶意交易,都有足够的时间进行撤资等操作。虽然 SushiSwap 项目中的 Chef Nomi 成功转走的大笔代币后来返还了,但最终 SushiSwap 项目还是采用了多签名钱包来确保项目的去中心化。可以说,延迟锁并没有办法根本解决智能合约本身的漏洞。
5
5 号事件是由于受害者使用了旧版本的 Electrum 钱包,攻击者利用存在于旧版本中的软件漏洞进行钓鱼攻击。
此软件漏洞会对 Electrum 节点服务器返回的交易错误信息进行 HTML 渲染。攻击者可以搭建一个恶意的节点,当该节点接收到来自用户发起的交易请求时,让用户钱包弹出一个包含钓鱼信息的窗口,让用户去下载一个所谓的“钱包更新”。
而这个”新版钱包“实际上是一个包含恶意代码的假的钱包。一旦用户将自己钱包导入,该假钱包会将其中所有代币转移至攻击者的钱包中。
安全建议
综上所述,8 月安全事件频发,CertiK 安全团队提出以下建议:
● 对于区块链项目的安全风险不仅需要从代码漏洞层面观察,同时也应该仔细了解项目的逻辑实现与其逻辑设计是否一致。
● 区块链项目需要为其整个部署流程规划详细的设计与实施流程,确保部署操作的原子性。
● 面对区块链项目智能合约拥有者权利过大的问题,不应仅仅依靠外部强制机制来限制,更是应该从智能合约代码实现以及社区治理等多角度综合,从而确保项目不会被任意一方滥用。
DeFi 热度持续上升,区块链作为时代颠覆性的核心技术,也已在各个领域得到了广泛的应用,隐藏在收益和利好之下的安全隐患也不应被忽视。
CertiK 致力于构建区块链健康安全生态,利用业内领先的技术解决区块链与智能合约的安全痛点。
声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。
简介:分享区块链领域专业、前沿、有趣的内容
评论0条