BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

被盜6.1億美金,抽絲剝繭還原黑客攻擊Poly Network 與O3 Swap現場

蓝贝壳学院
特邀专栏作者
本文約3155字,閱讀全文需要約5分鐘
被盜6.1億美金,抽絲剝繭還原黑客攻擊Poly Network 與O3 Swap現場
AI總結
展開
被盜6.1億美金,抽絲剝繭還原黑客攻擊Poly Network 與O3 Swap現場

之前的明星爆火項目O3想必大家還有印象,不過在一天前崩盤了,O3Swap的池子被盜,因為O3的資金放在poly裡,所以poly被黑導致了O3覆滅;8月10日晚,跨鏈協議Poly Network 遭受攻擊,Ethereum、BinanceChain、Polygon3條鏈上近6億美元資金被盜。因為兩家被攻擊的平台背後是同一家技術團隊,且有NEO背書,被盜原因是項目方在合約裡給自己留有超級權限,黑客利用這個超級權限的後門將池子裡的幣全部都轉走。

LBank藍貝殼學院這里科普一下,PolyNetwork被曾被認為是當前市場上可落地性最佳的跨鏈互操作性協議,真正做到異構跨鏈。目前,已經支持的異構跨鏈協議包括:Bitcoin、Ethereum、NEO、Ontology、Elornd、Ziliqa、幣安智能鏈、Switcheo、火幣生態鍊等。

回顧事件:

攻擊最早發生於8月10日17:55,黑客在以太坊陸續從Poly Network智能合約轉移了9638萬個USDC、1032個WBTC等資產,總價值超過2.6億美元;18:04起,黑客在Polygon從該項目智能合約轉移了8508萬USDC;18:08起,黑客在BSC從該項目智能合約轉移了8760萬個USDC、26629個ETH等資產。

這是整個加密歷史上涉案金額最大的黑客事件,超過了鼎鼎大名的Mt.Gox 事件(744408 枚BTC,當時總價值約4 億美元),以及2018 年的Coincheck 大案(5.23 億枚XEM,當時總價值約5.34 億美元)。關於本次事件發生的具體原因,行業安全機構技術團隊一直在進行實時監控,追踪漏洞原理和技術細節。

經過分析,攻擊者是利用了EthCrossChainManager合約中存在的邏輯缺陷,通過該合約調用EthCrossChainData合約中putCurEpochConPubKeyBytes函數更改Keeper為自有地址,然後使用該地址對提取代幣的交易進行簽名,從而將LockProxy合約中的大量代幣套取出來。

黑客是怎麼得手的?

攻擊者地址:

BSC:

0x0D6e286A7cfD25E0c01fEe9756765D8033B32C71

ETH:

0xC8a65Fadf0e0dDAf421F28FEAb69Bf6E2E589963

Polygon:

被攻擊的合約:

BSC:

A:

0x7ceA671DABFBa880aF6723bDdd6B9f4caA15C87B(EthCrossChainManager)

B:

0x2f7ac9436ba4B548f9582af91CA1Ef02cd2F1f03(LockProxy)

ETH:

C:

0x838bf9E95CB12Dd76a54C9f9D2E3082EAF928270(EthCrossChainManager)

D:

0x250e76987d838a75310c34bf422ea9f1AC4Cc906(LockProxy)

Polygon:

E:

0xABD7f7B89c5fD5D0AEf06165f8173b1b83d7D5c9(EthCrossChainManager)

F:

攻擊交易:

BSC:

0x3eba3f1fb50c4cbe76e7cc4dcc14ac7544762a0e785cf22034f175f67c8d3be9

0x50105b6d07b4d738cd11b4b8ae16943bed09c7ce724dc8b171c74155dd496c25

0xd65025a2dd953f529815bd3c669ada635c6001b3cc50e042f9477c7db077b4c9

0xea37b320843f75a8a849fdf13cd357cb64761a848d48a516c3cac5bbd6caaad5

ETH:

0xb1f70464bd95b774c6ce60fc706eb5f9e35cb5f06e6cfe7c17dcda46ffd59581

Polygon:

0x1d260d040f67eb2f3e474418bf85cc50b70101ca2473109fa1bf1e54525a3e01

0xfbe66beaadf82cc51a8739f387415da1f638d0654a28a1532c6333feb2857790

在BSC上,攻擊者首先通過傳遞精心構造的數據調用EthCrossChainManager合約中的verifyHeaderAndExecuteTx(0xd450e04c)函數。由於verifyHeaderAndExecuteTx函數調用了內部函數_executeCrossChainTx,並且在該內部函數中使用用了call調用,攻擊者通過精心構造的數據(通過其他漏洞獲取了原Keeper簽名後的數據)控制了call調用的參數_method ,成功的以EthCrossChainManager合約的身份調用了EthCrossChainData合約中putCurEpochConPubKeyBytes函數更改Keeper為自有地址(0xa87fb85a93ca072cd4e5f0d4f178bc831df8a00b)。這一步操作是為了後續能夠獲得有效Keeper簽名後的交易,然後提取合約中的代幣。

上述調用攻擊者構建的_method實際上並不是putCurEpochConPubKeyBytes,這是因為call調用中只有函數名是用戶可控的,參數為固定的數量和類型。攻擊者通過構造與putCurEpochConPubKeyBytes具有相同函數簽名的f1121318093函數實現了對EthCrossChainData合約中putCurEpochConPubKeyBytes函數的調用。

完成修改Keeper之後,攻擊者便可以對任意交易進行簽名。攻擊者通過多筆有效Keeper(在簽名已被攻擊者修改為自己的地址)簽名後的交易將B合約中ETH、BTCB、BUSD以及USDC代幣全部取出。

由於ETH和Polygon與BSC上具有相同的代碼和Keeper,攻擊者在完成BSC上的攻擊之後,將之前構造的數據在ETH和Polygon上進行重放,將ETH和Polygon上Keeper也修改為了自有地址(0xa87fb85a93ca072cd4e5f0d4f178bc831df8a00b)。

然後使用同樣的攻擊手法,取出了D合約中全部的ETH、USDC、WBTC、UNI、DAI、SHIB、WETH、FEI、USDT和renBTC以及F合約中全部的USDC。

攻擊者在Polygon歸還101萬USDC。 Ps:現在一大堆人在打幣給黑客地址留言要幣因為聽說有人要了以後得到13.5個eth

我們需要注意哪些事情?

本次攻擊事件主要原因是合約權限管理邏輯存在問題,任意用戶都可以調用verifyHeaderAndExecuteTx函數進行交易的執行,並且在其內部進行call調用時,函數名可由用戶控制,惡意用戶可以通過精心構造數據異常調用部分函數。同時EthCrossChainManager合約具有修改Keeper的權限,正常情況下是通過changeBookKeeper函數進行修改,但在此次攻擊中攻擊者是通過精心構造的數據通過verifyHeaderAndExecuteTx函數中的call調用成功修改Keeper地址,而Keeper地址又可以對交易進行簽名,Defi誕生以來最大損失的攻擊事件因此產生。

LBank藍貝殼學院在此提醒大家,開發者在使用call調用時,尤其需要注意參數為用戶可控的情況,一些特殊的合約以及函數需要對權限進行嚴格控制,避免被異常調用造成不可挽回的損失。

O3Swap
PolyNetwork
安全
歡迎加入Odaily官方社群