观前提示
以下时间均为北京时间
参与者
攻击时序图
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次尝试更改逻辑代码的失败攻击。
从攻击者角度去分析
-
2021-10-29 16:19:00 未知原因拥有BXH最高权限的管理员给Attacker开启GOVERNANCE_ROLE
权限。
-
2021-10-30 11:27:47 Exploiter给AttackContract添加INTERFACE_ROLE
权限。
-
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-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 ) |
查看 |