权利的游戏 —— DAO Maker 被黑分析

本次攻击可能源于DAO Maker 受害合约的管理员私钥泄露。

> 2021 年 08 月 12 日,据慢雾区消息,加密孵化机构 DAO Maker 疑似遭受黑客攻击,导致合约大量 USDC 被转出。慢雾安全团队第一时间介入分析,并将分析结果分享如下。 ## 攻击对象 在本次攻击中,攻击者部署并开源了一个攻击合约 (0x1c) 用于快速批量的从 DAO Maker 受害合约 (0x41) 中窃取资金。 ****攻击者地址 1**** **:** 0xd8428836ed2a36bd67cd5b157b50813b30208f50 ****攻击者地址 2****: 0xef9427bf15783fb8e6885f9b5f5da1fba66ef931 ****攻击合约****: 0x1c93290202424902a5e708b95f4ba23a3f2f3cee ****DAO Maker 受害合约****: 0x41B856701BB8c24CEcE2Af10651BfAfEbb57cf49 ****DAO Maker 受害合约 deployer****:0x054e71D5f096a0761dba7dBe5cEC5E2Bf898971c ****DAO Maker 受害合约 admin****:0x0eba461d9829c4e464a68d4857350476cfb6f559 ## ****攻击细节**** 本次攻击与往常攻击不同的是:DAO Maker 受害合约 (0x41) 未开源,而攻击合约 (0x1c) 却开源了。 ![528740e41894068287205e89fa040017.png](https://img.learnblockchain.cn/attachments/2021/12/0okWDLae61b9499e77e7b.png) **从上图开源的攻击合约以及链上记录我们可以看出:** 1. 黑客调用攻击合约 (0x1c) 的 h 函数,h 函数会循环调用 f 函数,f 函数通过 DAO Maker 受害合约的 0x4b4f892a 函数获取普通用户在受害合约 (0x41) 中的 USDC 存款数量。 2. 函数 h 接着调用 DAO Maker 受害合约 (0x41) 的`withdrawFromUser(0x50b158e4) `函数,传入用户存款的用户地址、USDC 地址与需要提款的数量。 3. 随后 DAO Maker 受害合约 (0x41) 将合约中的 USDC 转移至攻击合约中 (0x1c)。 通过以上行为分析我们可以发现:攻击合约 (0x1c) 调用了受害合约 (0x41) 的 withdrawFromUser 函数,受害合约 (0x41) 就将合约管理的资金直接转给攻击合约 (0x1c) 。我们直接反编译受害合约 (0x41) 查看 withdrawFromUser 函数进行简单分析:![ef2f365ce5458bb375f6dbcbb11b2dfc.png](https://img.learnblockchain.cn/attachments/2021/12/gDbOcboJ61b94bc267c63.png) 通过反编译的代码我们可以发现,此函数是有进行权限检查的,只有 DAO contracts 才能调用此函数转移用户的资金。但攻击合约 (0x1c) 明显不是 DAO 合约,因此其 DAO 合约必然是被攻击者替换过的。 **通过链上分析我们可以清楚的看到:** 1. 受害合约部署者 (0x05) 在部署受害合约 (0x41) 后于 UTC 4 月 12 日 08:33:45 将`0x0eba461d9829c4e464a68d4857350476cfb6f559`地址设置为了管理员角色: **Tx Hash:** 0xa1b4fceb671bb70ce154a69c2f4bd6928c11d98cbcfbbff6e5cdab9961bf0e6d ![582e764606cc3be6f92f22927f74260a.png](https://img.learnblockchain.cn/attachments/2021/12/vIkYIqks61b94c63813bc.png) 2. 随后受害合约部署者 (0x05) 通过调用 revokeRole 函数放弃了受害合约 (0x41) 管理权限: ****Tx Hash**** : 0x773613398f08ddce2cc9dcb6501adf4f5f159b4de4e9e2774a559bb1c588c1b8 ![8e76e686edca6c05e4894afa529ecc67.png](https://img.learnblockchain.cn/attachments/2021/12/g57bLHtr61b949baea2cd.png) 3. 而管理员则在 UTC 8 月 12 日 01:27:39 将 DAO 合约设置为了攻击合约 (0x1c) : ****Tx Hash****: 0x2fba930502d27f9c9a2f2b9337a0149534dda7527029645752b2a6507ca6b0d6 ![c629598448db5298035c9c7900cae131.png](https://img.learnblockchain.cn/attachments/2021/12/FoROsS2j61b949c5a6bca.png) 因此攻击者才得以借助此攻击合约 (0x1c) 将受害合约 (0x41) 中用户的资金盗走。目前被盗资金被兑换成 ETH 转移至攻击者地址 2 (0xef)。 ## 总结 本次攻击可能源于 DAO Maker 受害合约的管理员私钥泄漏。攻击者窃取私钥后将受害合约的 DAO 合约替换为了攻击合约,攻击者通过替换后的合约转走了合约中的用户资金。而由于合约部署者在设置完合约管理员后就放弃的合约管理权限,因此目前项目方可能还无法有效的取回合约控制权。 本文首发于:https://mp.weixin.qq.com/s/N-afjgJD3R3JhlcrFxx12A

2021 年 08 月 12 日,据慢雾区消息,加密孵化机构 DAO Maker 疑似遭受黑客攻击,导致合约大量 USDC 被转出。慢雾安全团队第一时间介入分析,并将分析结果分享如下。

攻击对象

在本次攻击中,攻击者部署并开源了一个攻击合约 (0x1c) 用于快速批量的从 DAO Maker 受害合约 (0x41) 中窃取资金。

攻击者地址 1

0xd8428836ed2a36bd67cd5b157b50813b30208f50

攻击者地址 2

0xef9427bf15783fb8e6885f9b5f5da1fba66ef931

攻击合约

0x1c93290202424902a5e708b95f4ba23a3f2f3cee

DAO Maker 受害合约

0x41B856701BB8c24CEcE2Af10651BfAfEbb57cf49

DAO Maker 受害合约 deployer:0x054e71D5f096a0761dba7dBe5cEC5E2Bf898971c

DAO Maker 受害合约 admin:0x0eba461d9829c4e464a68d4857350476cfb6f559

攻击细节

本次攻击与往常攻击不同的是:DAO Maker 受害合约 (0x41) 未开源,而攻击合约 (0x1c) 却开源了。

从上图开源的攻击合约以及链上记录我们可以看出:

  1. 黑客调用攻击合约 (0x1c) 的 h 函数,h 函数会循环调用 f 函数,f 函数通过 DAO Maker 受害合约的 0x4b4f892a 函数获取普通用户在受害合约 (0x41) 中的 USDC 存款数量。
  2. 函数 h 接着调用 DAO Maker 受害合约 (0x41) 的withdrawFromUser(0x50b158e4)函数,传入用户存款的用户地址、USDC 地址与需要提款的数量。
  3. 随后 DAO Maker 受害合约 (0x41) 将合约中的 USDC 转移至攻击合约中 (0x1c)。

通过以上行为分析我们可以发现:攻击合约 (0x1c) 调用了受害合约 (0x41) 的 withdrawFromUser 函数,受害合约 (0x41) 就将合约管理的资金直接转给攻击合约 (0x1c) 。我们直接反编译受害合约 (0x41) 查看 withdrawFromUser 函数进行简单分析:

通过反编译的代码我们可以发现,此函数是有进行权限检查的,只有 DAO contracts 才能调用此函数转移用户的资金。但攻击合约 (0x1c) 明显不是 DAO 合约,因此其 DAO 合约必然是被攻击者替换过的。

通过链上分析我们可以清楚的看到:

  1. 受害合约部署者 (0x05) 在部署受害合约 (0x41) 后于 UTC 4 月 12 日 08:33:45 将0x0eba461d9829c4e464a68d4857350476cfb6f559地址设置为了管理员角色:

Tx Hash:

0xa1b4fceb671bb70ce154a69c2f4bd6928c11d98cbcfbbff6e5cdab9961bf0e6d

  1. 随后受害合约部署者 (0x05) 通过调用 revokeRole 函数放弃了受害合约 (0x41) 管理权限:

Tx Hash :

0x773613398f08ddce2cc9dcb6501adf4f5f159b4de4e9e2774a559bb1c588c1b8

  1. 而管理员则在 UTC 8 月 12 日 01:27:39 将 DAO 合约设置为了攻击合约 (0x1c) :

Tx Hash:

0x2fba930502d27f9c9a2f2b9337a0149534dda7527029645752b2a6507ca6b0d6

因此攻击者才得以借助此攻击合约 (0x1c) 将受害合约 (0x41) 中用户的资金盗走。目前被盗资金被兑换成 ETH 转移至攻击者地址 2 (0xef)。

总结

本次攻击可能源于 DAO Maker 受害合约的管理员私钥泄漏。攻击者窃取私钥后将受害合约的 DAO 合约替换为了攻击合约,攻击者通过替换后的合约转走了合约中的用户资金。而由于合约部署者在设置完合约管理员后就放弃的合约管理权限,因此目前项目方可能还无法有效的取回合约控制权。

本文首发于:https://mp.weixin.qq.com/s/N-afjgJD3R3JhlcrFxx12A

  • 发表于 2021-12-15 10:02
  • 阅读 ( 183 )
  • 学分 ( 0 )
  • 分类:资讯

评论