环环相扣 —— Gnosis Safe Multisig 用户被黑分析

慢雾安全团队建议在访问Gnosis Safe Multsig 应用的时候要确保是官网的网站,并且在调用之前要仔细检查调用的内容,及早的识别出钓鱼网站和恶意的交易数据。

`By:Victory@慢雾安全团队` 2021 年 12 ⽉ 3 ⽇,据慢雾区情报,⼀位 Gnosis Safe ⽤户遭遇了严重且复杂的⽹络钓⻥攻击。慢雾安全团队现将简要分析结果分享如下。 ## **相关信息** 攻击者地址 1: 0x62a51ad133ca4a0f1591db5ae8c04851a9a4bf65 攻击者地址 2: 0x26a76f4fe7a21160274d060acb209f515f35429c 恶意逻辑实现合约 ETH 地址: 0x09afae029d38b76a330a1bdee84f6e03a4979359 恶意合约 ETH 地址 MultiSendCallOnly 合约: 0x3cb0652856d7eabe51f1e3cceda99c93b05d7cea 受攻击的代理合约地址: 0xc97f82c80df57c34e84491c0eda050ba924d7429 逻辑合约地址: 0x34cfac646f301356faa8b21e94227e3583fe3f5f MultiSendCall 合约 ETH 地址: 0x40a2accbd92bca938b02010e17a5b8929b49130d 攻击交易: https://etherscan.io/tx/0x71c2d6d96a3fae4be39d9e571a2678d909b83ca97249140ce7027092aa77c74e ### 攻击步骤 ![41411a2703910af2a6adbfea957c182b.png](https://img.learnblockchain.cn/attachments/2021/12/0E0Uq7IR61ad6f77877a1.png) 第一步:攻击者先是在 9 天前部署了恶意 MultiSendCall,并且验证了合约代码让这个攻击合约看起来像之前真正的 MultiSendCall。 ![3beeaa53dacfd40995cc02a79f364d58.png](https://img.learnblockchain.cn/attachments/2021/12/goPiPxia61ad6fa1b1c00.png) 第二步:攻击者通过钓⻥⼿段构造了⼀个指向恶意地址 calldata 数据让⽤户进⾏签名。calldata ⾥⾯正确的 to 地址应该是 0x40a2accbd92bca938b02010e17a5b8929b49130d,现在被更改成了恶意合约 ETH 地址 MultiSendCallOnly 合约 0x3cb0652856d7eabe51f1e3cceda99c93b05d7cea。 ![28cd90254b8c123093fc154ae5951d8e.png](https://img.learnblockchain.cn/attachments/2021/12/LApAciN061ad6fb6507af.png) 由于攻击者获取的签名数据是正确的,所以通过了验证多签的阶段,之后就开始执⾏了攻击合约的 multiSend 函数。 ![71c24a5aca12c40d5afe3b114b08ebd2.png](https://img.learnblockchain.cn/attachments/2021/12/Cn4SpJ5y61ad6fbfea61a.png) 这时候通过查看攻击合约我们发现此处的修饰器 Payable 有赋值的情况存在。这时候我们通过对源码的反编译发现: ![aa2739e774f68af9b8d8d587fe97f2ed.png](https://img.learnblockchain.cn/attachments/2021/12/noPIgaSb61ad6fce91a9c.png) 当 payment.version < VERSION 这个条件触发的时候每次调⽤的时候都会对 storage[0x00] 进⾏重新赋值。这个 storage[0x00] 是不是特别眼熟?没错我们来看下 Proxy 合约。 ![f0757e218020c602e159637123bf89bc.png](https://img.learnblockchain.cn/attachments/2021/12/NGwomyOc61ad6fd9ef10e.png) 当这笔交易执⾏完毕时 Proxy 的 storage[0x00] 已经变成0x020014b037686d9ab0e73798**09afae029d38b76a330a1bdee84f6e03a4979359** 。 由于 Proxy 合约执⾏的逻辑合约地址 masterCopy 是从 storage[0x00] 读取的,所以 Proxy 指向的逻辑合约会被攻击者更改为攻击合约。后续攻击者只需等待⽤户把⾜够的代币放⼊此合约,之后构造转账函数把钱取⾛即可。 我们分析了受攻击的合约的交易记录后,发现该攻击者⾮常狡猾。 ![65000f4f0fdb3a55c3843fca339264c2.png](https://img.learnblockchain.cn/attachments/2021/12/FHa3U6wE61ad6fe545bf5.png) ![2cde82a1cba5d9082eb1ab5b09a8166b.png](https://img.learnblockchain.cn/attachments/2021/12/5m2Q7ncu61ad6ff3c1d66.png) 攻击者为了避免被发现,在攻击合约中的逻辑中还实现了保证⽤户依然能正常使⽤相关的功能。 ![32552332914c9d65192c11855235fb60.png](https://img.learnblockchain.cn/attachments/2021/12/8zwg1shA61ad6ffd9c8e1.png) 反编译攻击者的逻辑合约发现,在攻击合约的逻辑保证了攻击者动⼿前⽤户都可以正常使⽤多签功能。只有当攻击者⾃⼰调⽤的时候才会绕过验证直接把⽤户的钱取⾛。 ## **MistTrack 分析** 经 MistTrack 反洗钱追踪系统分析发现,攻击者地址 1 在 11 ⽉ 23 号开始筹备,使⽤混币平台 Tornado.Cash 获得初始资⾦ 0.9384 ETH,在⼏分钟后部署了合约,然后将 0.8449 ETH 转到了攻击者地址 2。 ![9cf978fe3fa32fe5442b34fa17cabf27.png](https://img.learnblockchain.cn/attachments/2021/12/gOhbnwTe61ad70121e9c3.png) 攻击成功后,攻击者地址 2 通过 Uniswap、Sushiswap 将获利的 HBT、DAI 等代币兑换为 ETH,最后将 56.2 ETH 转到混币平台 Tornado Cash 以躲避追踪。 ![5e4321df60525f774d67ad0589d4ed35.jpg](https://img.learnblockchain.cn/attachments/2021/12/eYFykjcN61ad702a0196d.jpg) ## **总结** **本次攻击先是使⽤了钓⻥⼿段获取了⽤户的⼀次完整的多签数据,在利⽤了 delegatecall 调⽤外部合约的时候,如果外部合约有对数据进⾏更改的操作的话,会使⽤外部合约中变量存储所在对应的 slot 位置指向来影响当前合约同⼀个 slot 的数据。通过攻击合约把代理合约指向的逻辑指向⾃⼰的攻击合约。这样就可以随时绕过多签把合约的钱随时转⾛。** **经过分析本次的事件,⼤概率是⿊客团队针对 Gnosis Safe Multi-sig 应⽤的⽤户进⾏的钓⻥攻击, 0x34cfac64 这个正常的逻辑合约是 Gnosis Safe 官⽅的地址,攻击者将这个地址硬编码在恶意合约中,所以这⼀系列的操作是适⽤于攻击所有 Gnosis Safe Multi-sig 应⽤的⽤户。此次攻击可能还有其他受害者。** **慢雾安全团队建议在访问 Gnosis Safe Multisig 应⽤的时候要确保是官⽅的⽹站,并且在调⽤之前要仔细检查调⽤的内容,及早的识别出钓⻥⽹站和恶意的交易数据。** 本文首发于:https://mp.weixin.qq.com/s/3KHnPNap7hMBbhkENUOAMg

By:Victory@慢雾安全团队

2021 年 12 ⽉ 3 ⽇,据慢雾区情报,⼀位 Gnosis Safe ⽤户遭遇了严重且复杂的⽹络钓⻥攻击。慢雾安全团队现将简要分析结果分享如下。

相关信息

攻击者地址 1:

0x62a51ad133ca4a0f1591db5ae8c04851a9a4bf65

攻击者地址 2:

0x26a76f4fe7a21160274d060acb209f515f35429c

恶意逻辑实现合约 ETH 地址:

0x09afae029d38b76a330a1bdee84f6e03a4979359

恶意合约 ETH 地址 MultiSendCallOnly 合约:

0x3cb0652856d7eabe51f1e3cceda99c93b05d7cea

受攻击的代理合约地址:

0xc97f82c80df57c34e84491c0eda050ba924d7429

逻辑合约地址:

0x34cfac646f301356faa8b21e94227e3583fe3f5f

MultiSendCall 合约 ETH 地址:

0x40a2accbd92bca938b02010e17a5b8929b49130d

攻击交易:

https://etherscan.io/tx/0x71c2d6d96a3fae4be39d9e571a2678d909b83ca97249140ce7027092aa77c74e

攻击步骤

第一步:攻击者先是在 9 天前部署了恶意 MultiSendCall,并且验证了合约代码让这个攻击合约看起来像之前真正的 MultiSendCall。

第二步:攻击者通过钓⻥⼿段构造了⼀个指向恶意地址 calldata 数据让⽤户进⾏签名。calldata ⾥⾯正确的 to 地址应该是 0x40a2accbd92bca938b02010e17a5b8929b49130d,现在被更改成了恶意合约 ETH 地址 MultiSendCallOnly 合约 0x3cb0652856d7eabe51f1e3cceda99c93b05d7cea。

由于攻击者获取的签名数据是正确的,所以通过了验证多签的阶段,之后就开始执⾏了攻击合约的 multiSend 函数。

这时候通过查看攻击合约我们发现此处的修饰器 Payable 有赋值的情况存在。这时候我们通过对源码的反编译发现:

当 payment.version < VERSION 这个条件触发的时候每次调⽤的时候都会对 storage[0x00] 进⾏重新赋值。这个 storage[0x00] 是不是特别眼熟?没错我们来看下 Proxy 合约。

当这笔交易执⾏完毕时 Proxy 的 storage[0x00] 已经变成0x020014b037686d9ab0e7379809afae029d38b76a330a1bdee84f6e03a4979359

由于 Proxy 合约执⾏的逻辑合约地址 masterCopy 是从 storage[0x00] 读取的,所以 Proxy 指向的逻辑合约会被攻击者更改为攻击合约。后续攻击者只需等待⽤户把⾜够的代币放⼊此合约,之后构造转账函数把钱取⾛即可。

我们分析了受攻击的合约的交易记录后,发现该攻击者⾮常狡猾。

攻击者为了避免被发现,在攻击合约中的逻辑中还实现了保证⽤户依然能正常使⽤相关的功能。

反编译攻击者的逻辑合约发现,在攻击合约的逻辑保证了攻击者动⼿前⽤户都可以正常使⽤多签功能。只有当攻击者⾃⼰调⽤的时候才会绕过验证直接把⽤户的钱取⾛。

MistTrack 分析

经 MistTrack 反洗钱追踪系统分析发现,攻击者地址 1 在 11 ⽉ 23 号开始筹备,使⽤混币平台 Tornado.Cash 获得初始资⾦ 0.9384 ETH,在⼏分钟后部署了合约,然后将 0.8449 ETH 转到了攻击者地址 2。

攻击成功后,攻击者地址 2 通过 Uniswap、Sushiswap 将获利的 HBT、DAI 等代币兑换为 ETH,最后将 56.2 ETH 转到混币平台 Tornado Cash 以躲避追踪。

总结

本次攻击先是使⽤了钓⻥⼿段获取了⽤户的⼀次完整的多签数据,在利⽤了 delegatecall 调⽤外部合约的时候,如果外部合约有对数据进⾏更改的操作的话,会使⽤外部合约中变量存储所在对应的 slot 位置指向来影响当前合约同⼀个 slot 的数据。通过攻击合约把代理合约指向的逻辑指向⾃⼰的攻击合约。这样就可以随时绕过多签把合约的钱随时转⾛。

经过分析本次的事件,⼤概率是⿊客团队针对 Gnosis Safe Multi-sig 应⽤的⽤户进⾏的钓⻥攻击, 0x34cfac64 这个正常的逻辑合约是 Gnosis Safe 官⽅的地址,攻击者将这个地址硬编码在恶意合约中,所以这⼀系列的操作是适⽤于攻击所有 Gnosis Safe Multi-sig 应⽤的⽤户。此次攻击可能还有其他受害者。 慢雾安全团队建议在访问 Gnosis Safe Multisig 应⽤的时候要确保是官⽅的⽹站,并且在调⽤之前要仔细检查调⽤的内容,及早的识别出钓⻥⽹站和恶意的交易数据。

本文首发于:https://mp.weixin.qq.com/s/3KHnPNap7hMBbhkENUOAMg

  • 发表于 2021-12-03 16:47
  • 阅读 ( 104 )
  • 学分 ( 0 )
  • 分类:资讯

评论