项目方在合约部署前,需要考虑配置是否合理。部署后,应测试相关功能,是否存在被利用的风险,并且联系审计公司查看初始的参数是否合理。

原用标题:损失约 1.5 亿,黑客点火,多人 “趁火打劫”——Nomad 被攻击事件分析

封面:Photo by Moritz Erken on Unsplash

北京时间 8 月 2 日,Beosin 链必应-区块链安全态势感知平台舆情监测显示,跨链通讯协议 Nomad 遭遇攻击,黑客获利约 1.5 亿美元。截止发稿前,根据 DeFi Llama 数据显示,Nomad 代币桥中只剩下约 5900 美元左右。

图片

关于本次攻击事件的来龙去脉,Beosin 安全团队第一时间进行了分析。

加密市场中首次发生的去中心化抢劫?

首先,我们先来认识本次故事主角——Nomad。

Nomad 自称能提供安全的互操作性解决方案,旨在降低成本并提高跨链消息传递的安全性,与基于验证者的跨链桥不同,Nomad 不依赖大量外部方来验证跨链通信,而是通过利用一种 optimistic 机制,让用户可以安全地发送消息和桥接资产,并保证任何观看的人都可以标记欺诈并保护系统。

而在 4 月 13 日,他们也以 2.25 亿美元估值完成高达 2200 万美元的种子轮融资,领投方为 Polychain。对于一家初创项目而言,数千万美元种子轮融足可谓赢在起跑线上,但是本次攻击之后,不知道项目方会如何处理与 “自救”。

Nomad 官方推特表示,已得知此事,目前正在调查。

图片

关于本次事件,在 Web3 领域,却引起了争议。

Terra 研究员 FatMan 在推特上对 Nomad 遭遇攻击事件发表评论称:“在公共 Discord 服务器上弹出的一条消息称,任意一个人都能从 Nomad 桥上抢了 3 千到 2 万美元:所有人要做的就是复制第一个黑客的交易并更改地址,然后点击通过 Etherscan 发送。这是在真正的加密市场中首次发生的去中心化抢劫。” 

图片

事实的确如此。

根据 Odaily 星球日报的报道,在第一个黑客盗窃完成后,这条「成功」经验也在加密社区疯传,被更多用户模仿,趁火打劫。跨链通讯协议 Nomad 的资产被洗劫一空。

图片

可能是因为过于心急,一些用户忘记使用马甲伪装,直接使用了自己的常用 ENS 域名,暴露无遗(这可能给 Nomad 后续追赃减轻了一定的负担)。目前已经有用户开始自发退款,以求避免被起诉。

图片

项目方在部署合约时犯了什么错导致被攻击?

本次攻击主要是项目方在部署合约时,把零 (0x000000….) 的 confirmAt 设置为 1,导致任意一个未使用的_message 都可以通过判断,并从合约中提取出对应资产。技术分析如下:

被攻击合约

0x5D94309E5a0090b165FA4181519701637B6DAEBA (存在漏洞利用的合约)

0x88A69B4E698A4B090DF6CF5Bd7B2D47325Ad30A3(遭受损失的金库合约)

由于攻击交易过多,下面依靠其中一笔攻击交易分析为例进行阐述;(0x87ba810b530e2d76062b9088bc351a62c184b39ce60e0a3605150df0a49e51d0)

图片
攻击的交易截图

1. 通过交易分析,发现攻击者是通过调用 (0x5D9430) 合约中的 process 函数提取(0x88A69)合约中的资金。

图片
攻击细节截图

2. 跟进 process 函数中,可以看到合约对_messageHash 进行了判断, 当输入的 messages[_messageHash] 为 0x000000…. 时,返回值却是 true。

图片
攻击细节截图

3. 然后跟进 acceptableRoot 函数,发现_root 的值为零 (0x000000….) 时, 而 confirmAt[_root] 等于 1,导致判断恒成立,从而攻击者可以提取合约中的资金。

图片
攻击细节截图
图片
  攻击细节截图

4. 后续通过查看交易,发现合约在部署时,就已经初始零 (0x000000….) 的 confirmAt 为 1, 交易可见(0x99662dacfb4b963479b159fc43c2b4d048562104fe154a4d0c2519ada72e50bf)

图片
攻击细节截图
图片
攻击细节截图

项目方还能找回被盗资金吗?

针对跨链代币桥攻击导致损失一事,Nomad 团队表示,“调查正在进行中,已经联系区块链情报和取证方面的主要公司协助。我们已经通知执法部门,并将夜以继日地处理这一情况,及时提供最新信息。我们的目标是识别相关账户,并追踪和追回资金。”

目前,Beosin 安全团队正在使用链必追平台对被盗资金地址进行监控和追踪分析。

总结:合约部署需要注意哪些问题?

针对本次事件,Beosin 安全团队建议:项目方在合约部署前,需要考虑配置是否合理。部署后,应测试相关功能,是否存在被利用的风险,并且联系审计公司查看初始的参数是否合理。

免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。本文内容仅用于信息分享,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。