技术看门道:Optimism窃取事件反映Layer2 网络合约的不足
rubyou
发表于 2022-11-19 14:25:28
2592
5
0
今年五月底Optimism基金会聘请做市商Wintermute为op代币提供流动性,Optimism基金会为Wintermute团队提供2000万op代币用于做市。此过程中出现了沟通失误,Wintermute团队向Optimism基金会提供了Layer1(eth)上的收款账户,而此账户尚未在Layer2(Optimism)上部署,Optimism基金会向Layer2账户打款后,Wintermute团队发现了该问题,但在账户修复之前,攻击者提前取得了该账户权限,开始抛售账户中的op代币。8 f7 X3 m5 U) q+ C" s
) E1 b7 x c; D& |0 c% v# I
时间线
& _# ~7 K4 K$ H: j5 Y
●05.26&05.27-Optimism基金会向Wintermute团队提供的地址0x4f3a120e72c76c22ae802d129f599bfdbc31cb81分别打款1op和100万op作为账户测试。! Q# c( W8 Z- S" U. W
●05.27-Optimism基金会向该地址打款剩余1900万op。& l q- n; e" S3 \. a7 G$ K2 [) X
& }) S' e# r; t8 U
●05.30-Wintermute团队发现账户错误,联系Optimism基金会,并联系GnosisSafe团队请求协助取回资金。Wintermute团队在与Optimism基金会和GnosisSafe团队协商后,评估该账户目前仍是安全的,不会被Wintermute团队之外的人控制,在GnosisSafe团队的帮助下可以取回资金。并计划在06.07日修复账户权限。, U/ l1 I; A8 U" Y1 G* \
●06.01-攻击者部署攻击合约,合约内硬编码了factory地址,说明此时攻击者已确定了完整的攻击流程。' a$ s5 i' l0 \- c0 b9 G
4 F P; v0 O- _. x
●06.05-攻击者发起攻击,取得目标账户权限。并转出100万op到tornado进行兑换。
e# j/ x7 C# R
●06.09-Wintermute团队发表声明对此过失负全责,并会回购所有攻击者抛售的代币,同时要求攻击者归还剩余代币。声明发表4小时后,攻击者再次转出100万op到某私人账户。& g% w2 [- F0 w! t7 x. ]
# K! M, M" y, m% ]6 F
攻击路线" o4 X3 z+ h1 g' I$ I* B1 G
7 G6 o7 I" S1 `0 b7 w5 `
1、所有GnosisSafe保险箱合约均由GnosisSafeproxyfactory合约部署,要获得目标地址控制权需要调用proxyfactory在此地址上部署proxy合约。" A4 o0 i+ t: d# |4 d
% J& }4 ^; ?7 a6 i' U) T, Y. K
2、攻击发生前,Layer2(Optimism)上的proxyfactory合约尚未部署,攻击者通过重放Layer1上factory合约的部署交易,在Layer2上部署新的factory合约。9 }1 f; [# X7 J) b
' \& O1 s @) V9 Z* J
3、在Layer2上通过多次调用factory合约的createProxy方法部署proxy合约,不断累加factory合约的nonce,直到将proxy部署到目标地址。- v6 t+ A' U) @$ d! u, O# u1 R/ u2 U% R
, p6 S6 M! x& v |) Q: h/ w
4、在调用createProxy部署proxy时,将masterCopy参数设置为攻击者控制的合约地址,masterCopy将作为proxy的implementation。至此攻击者得到目标地址的控制权。4 I4 J, M, ?) Z. r! ?
以太坊合约地址生成
3 W7 i- [3 f0 @6 b8 q" K
为了解释上述攻击路线为何可以在特定地址部署合约,我们需要了解一下以太坊的合约地址生成机制。/ X# I. c. e q; ~9 p; Q- k
, o- r, Z% t7 X1 p' @4 p7 P
/ n3 V, v' k2 r
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
成为第一个吐槽的人