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

慢雾科技

    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 应?的时候要确保是官?的?站,并且在调?之前要仔细检查调?的内容,及早的识别出钓??站和恶意的交易数据。