BXH被盗分析

观前提示

以下时间均为北京时间

参与者

角色 地址 备注
攻击者 Exploiter 0x48c94305bddfd80c6f4076963866d968cac27d79 BXH攻击者外部账户
攻击合约 Attacker 0x887716168FC8c1A2933F97ea3858a94c9E229201 BXH攻击者创建的攻击合约(通过此合约攻击BXH策略)创建于 2021-10-27 21:47:34
攻击者收款合约 0x13b81fa9c0873a74c49a85bd8149c1c20bf9d18c 创建于 2021-10-30 11:15:45
BXH策略地址 0x6AcECA12de5a15f11ca51b654433259533B0B802 BXH策略资金地址
BXH管理员 0x56146b129017940d06d8e235c02285a3d05d6b7c 总管理员
BXH访问权限控制合约 0x83dae57c46985c3a2346e8a3c6991ca908f8b06b 用于控制各个合约访问权限

攻击时序图

sequenceDiagram
participant Exploiter as 攻击者 Exploiter
participant Attacker as 攻击合约 Attacker
participant AttackContract as 攻击者收款合约 AttackContract
participant ACL as BXH访问权限控制合约 ACL
participant BXH as BXH策略合约
participant master as BXH管理员
rect rgba(0, 0, 255, .1)
Exploiter->>Attacker: 2021-10-27 21:47:34 创建攻击合约
master->>+ACL: 2021-10-29 16:19:00 给攻击合约提权
ACL-->>-Attacker: 攻击合约获得权限
%% Note over Exploiter,master: 省略:期间尝试七次攻击,均失败
end
Exploiter->>AttackContract: 2021-10-30 11:15:45 创建攻击者收款合约
Exploiter->>+Attacker: 2021-10-30 11:27:47 给攻击者收款合约提权
Attacker-->>+ACL: 访问权限控制合约0xf047601d函数,给攻击者收款合约尝试提权
ACL-->>-AttackContract: ACL内部调用收款合约的0x1f1fcd51。最后给攻击者收款合约添加INTERFACE_ROLE角色
deactivate Attacker
Exploiter->>+Attacker:2021-10-30 11:32:53 第八次发起攻击
Attacker-->>+ACL: 调用ACL的0x8b6b802函数,此函数反编译失败。但猜测内部将资产从策略合约转移给攻击者
ACL-->>+BXH:请求资产转移
BXH-->>-AttackContract:资产转移至攻击者收款合约
deactivate ACL
AttackContract-->>Exploiter:ETH转移至攻击者
deactivate Attacker

注: 攻击者在最后一次成功攻击前,有7次尝试更改逻辑代码的失败攻击。

从攻击者角度去分析

  1. 2021-10-29 16:19:00 未知原因拥有BXH最高权限的管理员给Attacker开启GOVERNANCE_ROLE权限。

  2. 2021-10-30 11:27:47 Exploiter给AttackContract添加INTERFACE_ROLE权限。

  3. 2021-10-30 11:32:53 Exploiter通过GOVERNANCE_ROLE权限对ACL合约发起攻击成功获取资产。

ACL内部角色对应的bytes32的值

ACL内角色 bytes32
keccak256(‘INTERFACE_ROLE’) 0x886f5b5d23a7f8b3645010a8eb98414557d4607145067846682ff187e4950fe3
keccak256(‘WITHDRAW_ROLE’) 0x5d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ec
keccak256(‘GOVERNANCE_ROLE’) 0x71840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb1

攻击者尝试的8次攻击

第一次升级逻辑代码

调用者 触发者 时间 备注 参数 txid
Exploiter Attacker 2021-10-27 21:47:34 攻击者创建攻击合约 查看
Exploiter Attacker 2021-10-29 15:58:53 给攻击合约第一次升级逻辑合约0x2d4d4b79249e6f03cf0e8d672bfc32bdb07981df 查看
Exploiter Attacker 2021-10-29 22:26:36 尝试取款失败,参数填的是ETH合约地址 withdraw(2170ed0880ac9a755fd29b2688956bd959f933f8) 查看

第二次升级逻辑代码

调用者 触发者 时间 备注 参数 txid
Exploiter Attacker 2021-10-30 03:45:16 给攻击合约第二次升级逻辑合约0x9e47d35f352d322670e5c6def2174d1ae739b3ca 查看
Exploiter Attacker 2021-10-30 03:51:19 尝试取款失败 withdraw() 查看

第三次升级逻辑代码

调用者 触发者 时间 备注 参数 txid
Exploiter Attacker 2021-10-30 04:01:10 给攻击合约第三次升级逻辑合约0x977171a577cf954663457af5a2bdc7b1a9951e3b 查看
Exploiter Attacker 2021-10-30 04:04:35 尝试取款失败 withdraw() 查看

第四次升级逻辑代码

调用者 触发者 时间 备注 参数 txid
Exploiter Attacker 2021-10-30 04:23:39 给攻击合约第四次升级逻辑合约0x477c53ac688f27b1d2460d85aa681eda9edefde3 查看
Exploiter Attacker 2021-10-30 04:24:54 尝试取款失败 withdraw() 查看

第五次升级逻辑代码

调用者 触发者 时间 备注 参数 txid
Exploiter Attacker 2021-10-30 04:34:03 给攻击合约第五次升级逻辑合约0xe18e97ea16b86f37e335ff1e6d6e96cf74b5f842 查看
Exploiter Attacker 2021-10-30 04:34:51 尝试取款失败 withdraw() 查看

第六次升级逻辑代码

调用者 触发者 时间 备注 参数 txid
Exploiter Attacker 2021-10-30 05:14:09 给攻击合约第六次升级逻辑合约0x114587850bbdd67f69517143106a9c3af7a9d61c 查看
Exploiter Attacker 2021-10-30 05:16:24 第一次尝试取款至0x61e365f6031e3cc859911a75c467d3cf2d037e01失败 withdraw1() 查看
Exploiter Attacker 2021-10-30 09:19:00 第二次尝试取款至0x61e365f6031e3cc859911a75c467d3cf2d037e01失败 withdraw1() 查看

第七次升级逻辑代码

调用者 触发者 时间 备注 参数 txid
Exploiter Attacker 2021-10-30 09:36:12 给攻击合约第七次升级逻辑合约0x22952a0eb4ebd12a1f2d6c318704420f22a2c3db 查看

第八次升级逻辑代码

调用者 触发者 时间 备注 参数 txid
Exploiter Attacker 2021-10-30 09:39:21 给攻击合约第八次升级逻辑合约0x114587850bbdd67f69517143106a9c3af7a9d61c 查看
Exploiter Attacker 2021-10-30 09:41:09 第一次取款至0x22952a0eb4ebd12a1f2d6c318704420f22a2c3db失败 withdraw1() 查看
Exploiter Attacker 2021-10-30 09:54:53 第二次取款至0x22952a0eb4ebd12a1f2d6c318704420f22a2c3db失败 withdraw1() 查看
Exploiter Attacker 2021-10-30 10:56:37 第三次取款至0x91ecadeab1a43ed918309175bcc877ea456378c0失败 withdraw2() 查看
Exploiter Attacker 2021-10-30 11:07:00 第四次尝试,此次操作成功给0x22地址提权,但未能成功取出存款 withdraw1(0x22952a0eb4ebd12a1f2d6c318704420f22a2c3db) 查看
Exploiter Attacker 2021-10-30 11:18:21 第五次取款至0x13b81fa9c0873a74c49a85bd8149c1c20bf9d18c未能成功 withdraw1() 查看
Exploiter Attacker 2021-10-30 11:19:45 第六次取款至0x13b81fa9c0873a74c49a85bd8149c1c20bf9d18c未能成功 withdraw2() 查看
Exploiter Attacker 2021-10-30 11:27:47 第七次尝试,此次操作成功给0x13b81地址提权,但未能成功取出存款 withdraw1(0x13b81fa9c0873a74c49a85bd8149c1c20bf9d18c) 查看
Exploiter Attacker 2021-10-30 11:29:17 第八次取款至0x13b81fa9c0873a74c49a85bd8149c1c20bf9d18c未能成功 withdraw2(0x13b81fa9c0873a74c49a85bd8149c1c20bf9d18c) 查看
Exploiter Attacker 2021-10-30 11:32:53 第九次取款至0x13b81fa9c0873a74c49a85bd8149c1c20bf9d18c成功,大量资产被转移 withdraw2(0x13b81fa9c0873a74c49a85bd8149c1c20bf9d18c) 查看
Exploiter Attacker 2021-10-30 11:36:11 第十次取款至0x13b81fa9c0873a74c49a85bd8149c1c20bf9d18c成功,但是已无剩余资产 withdraw2(0x13b81fa9c0873a74c49a85bd8149c1c20bf9d18c) 查看