慢霧認為,攻擊主要在于EthCrossChainData合約的keeper被修改,而非私鑰泄漏導致。目前,黑客已開始陸續歸還資金。
撰文:慢霧安全團隊
2021年08月10日,據慢霧區消息,跨鏈互操作協議PolyNetwork遭受黑客攻擊,慢霧安全團隊第一時間介入分析,并將分析結果分享如下。
攻擊背景
PolyNetwork是由Neo、Ontology、Switcheo基金會共同作為創始成員,分布科技作為技術提供方共同發起的跨鏈組織。
如下圖,通過官方的介紹我們可以清楚的看出PolyNetwork的架構設計:用戶可以在源鏈上發起跨鏈交易,交易確認后由源鏈Relayer將區塊頭信息同步至PolyChain,之后由PolyChain將區塊頭信息同步至目標鏈Relayer,目標鏈Relayer將驗證信息轉至目標鏈上,隨后在目標鏈進行區塊頭驗證,并執行用戶預期的交易。
以下是本次攻擊涉及的具體地址:
攻擊核心
源鏈未對發起的跨鏈操作的數據進行檢查。目標鏈未對解析出的目標調用合約以及調用參數進行檢查。EthCrossChainData合約的owner為EthCrossChainManager。bytes4(keccak256(abi.encodePacked(_method,"(bytes,bytes,uint64)")))可以被hash碰撞。攻擊細節
PolyNetwork會在各個鏈上部署智能合約以便進行跨鏈互操作,其中EthCrossChainManager合約用于驗證PolyChain同步來的區塊頭以確認跨鏈信息的真實。EthCrossChainData合約用于存儲跨鏈數據,中繼鏈驗證人(即Keeper)的公鑰也存儲在這個合約中。LockProxy則用于資產管理。
慢霧:Equalizer Finance被黑主要在于FlashLoanProvider合約與Vault合約不兼容:據慢霧區消息,6 月 7 日,Equalizer Finance 遭受閃電貸攻擊。慢霧安全團隊以簡訊形式將攻擊原理分享如下:
1. Equalizer Finance 存在 FlashLoanProvider 與 Vault 合約,FlashLoanProvider 合約提供閃電貸服務,用戶通過調用 flashLoan 函數即可通過 FlashLoanProvider 合約從 Vault 合約中借取資金,Vault 合約的資金來源于用戶提供的流動性。
2. 用戶可以通過 Vault 合約的 provideLiquidity/removeLiquidity 函數進行流動性提供/移除,流動性提供獲得的憑證與流動性移除獲得的資金都受 Vault 合約中的流動性余額與流動性憑證總供應量的比值影響。
3. 以 WBNB Vault 為例攻擊者首先從 PancekeSwap 閃電貸借出 WBNB
4. 通過 FlashLoanProvider 合約進行二次 WBNB 閃電貸操作,FlashLoanProvider 會先將 WBNB Vault 合約中 WBNB 流動性轉給攻擊者,隨后進行閃電貸回調。
5. 攻擊者在二次閃電貸回調中,向 WBNB Vault 提供流動性,由于此時 WBNB Vault 中的流動性已經借出一部分給攻擊者,因此流動性余額少于預期,則攻擊者所能獲取的流動性憑證將多于預期。
6. 攻擊者先歸還二次閃電貸,然后從 WBNB Vault 中移除流動性,此時由于 WBNB Vault 中的流動性已恢復正常,因此攻擊者使用添加流動性獲得憑證所取出的流動性數量將多于預期。
7. 攻擊者通過以上方式攻擊了在各個鏈上的 Vault 合約,耗盡了 Equalizer Finance 的流動性。
此次攻擊的主要原因在于 Equalizer Finance 協議的 FlashLoanProvider 合約與 Vault 合約不兼容。慢霧安全團隊建議協議在進行實際實現時應充分考慮各個模塊間的兼容性。[2022/6/8 4:09:22]
本次攻擊中,攻擊者分兩步來完成這次攻擊,我們接下來進行詳細分析:
慢霧:Avalanche鏈上Zabu Finance被黑簡析:據慢霧區情報,9月12日,Avalanche上Zabu Finance項目遭受閃電貸攻擊,慢霧安全團隊進行分析后以簡訊的形式分享給大家參考:
1.攻擊者首先創建兩個攻擊合約,隨后通過攻擊合約1在Pangolin將WAVAX兌換成SPORE代幣,并將獲得的SPORE代幣抵押至ZABUFarm合約中,為后續獲取ZABU代幣獎勵做準備。
2.攻擊者通過攻擊合約2從Pangolin閃電貸借出SPORE代幣,隨后開始不斷的使用SPORE代幣在ZABUFarm合約中進行`抵押/提現`操作。由于SPORE代幣在轉賬過程中需要收取一定的手續費(SPORE合約收取),而ZABUFarm合約實際接收到的SPORE代幣數量是小于攻擊者傳入的抵押數量的。分析中我們注意到ZABUFarm合約在用戶抵押時會直接記錄用戶傳入的抵押數量,而不是記錄合約實際收到的代幣數量,但ZABUFarm合約在用戶提現時允許用戶全部提取用戶抵押時合約記錄的抵押數量。這就導致了攻擊者在抵押時ZABUFarm合約實際接收到的SPORE代幣數量小于攻擊者在提現時ZABUFarm合約轉出給攻擊者的代幣數量。
3.攻擊者正是利用了ZABUFarm合約與SPORE代幣兼容性問題導致的記賬缺陷,從而不斷通過`抵押/提現`操作將ZABUFarm合約中的SPORE資金消耗至一個極低的數值。而ZABUFarm合約的抵押獎勵正是通過累積的區塊獎勵除合約中抵押的SPORE代幣總量參與計算的,因此當ZABUFarm合約中的SPORE代幣總量降低到一個極低的數值時無疑會計算出一個極大的獎勵數值。
4.攻擊者通過先前已在ZABUFarm中有進行抵押的攻擊合約1獲取了大量的ZABU代幣獎勵,隨后便對ZABU代幣進行了拋售。
此次攻擊是由于ZabuFinance的抵押模型與SPORE代幣不兼容導致的,此類問題導致的攻擊已經發生的多起,慢霧安全團隊建議:項目抵押模型在對接通縮型代幣時應記錄用戶在轉賬前后合約實際的代幣變化,而不是依賴于用戶傳入的抵押代幣數量。[2021/9/12 23:19:21]
首先攻擊者通過在其他鏈調用crossChain函數構造數據發起跨鏈交易。
動態 | 越南加密貨幣交易所VinDAX被黑客入侵,損失了至少500萬美元的加密貨幣:越南鮮為人知的加密貨幣交易所VinDAX被黑客入侵,損失了至少500萬美元的加密貨幣 ,該交易所主要從事區塊鏈項目的代幣銷售 。一位名為“@VinDAXSupport”的VinDAX官方電報頻道管理員上周五證實,該交易所確實遭到了黑客攻擊,損失了價值不菲的加密貨幣。他們說,入侵發生在“三天前”。(theblockcrypto)[2019/11/8]
我們切入此函數進行分析:
EthCrossChainManager.crossChain
從上圖我們可以清晰的看出,此函數只是用于幫助用戶構造makeTxParam并存儲了構造后的哈希以便后續驗證,其并未對用戶傳入的跨鏈操作參數進行任何限制,因此攻擊者完全可以通過構造任意想構造的數據而讓Relayer毫無防備的將其同步至PolyChain,通過PolyChain將其同步至以太坊Relayer。
隨后在以太坊上的Relayer通過調用EthCrossChainManager合約中
的verifyHeaderAndExecuteTx函數提交區塊頭信息來驗證這筆跨鏈信息的真實性。
我們切入此函數進行分析:
EthCrossChainManager.verifyHeaderAndExecuteTx
通過上圖代碼我們可以看出其先對區塊頭進行反序列化,以解出所需要驗證的具體信息。隨后調用getCurEpochConPubKeyBytes函數從EthCrossChainData合約中獲取Keeper公鑰,并通過deserializeKeepers函數得到Keeper地址。
Vertcoin官方推特帳號被黑 欲騙用戶比特幣:加密貨幣項目Vertcoin周二證實,其官方推特帳號“Vertcoin”被詐騙者破解。攻擊者在Vertcoin的推特賬戶發布消息稱,該幣的發行方將贈予用戶10個比特幣,只需要用戶將0.005個BTC發送到一個特定的地址就能換取。這條推文立刻引起了社區成員的懷疑,因為開發商并沒有在其他地方宣布這一消息,這類騙局已經在Twitter上傳播了好幾個月。事后不久,Vertcoin首席開發員詹姆斯·洛夫喬伊(James Lovejoy)在推特上發文稱,Vertcoin賬戶被盜了。“不要接受任何贈品,它們都是假的。”[2018/5/2]
接下來將通過ECCUtils.verifySig驗證簽名是否為Keeper,從以下代碼中我們可以發現verifySig函數中會切出簽名者的vrs,并通過ecrecover接口獲取簽名者地址,然后調用containMAddresses函數循環比較簽名者是否為Keeper,只要Keeper簽名數量符合要求即可通過檢查,數量要求即為EthCrossChainManager合約傳入的n-(n-1)/3)。
簽名驗證后會通過ECCUtils.merkleProve進行默克爾根驗證,只要是正常跨鏈操作即可通過此項檢查。隨后會對交易是否重復發送進行檢查并存儲已驗證后的數據。這里只需保證不重復提交即可。
最后,也是最關鍵的一步,其將通過內部調用_executeCrossChainTx函數執行構造的數據。
從上圖我們可以看出_executeCrossChainTx函數未對傳入的_toContract、_method等參數進行檢查就直接以_toContract.call的方式執行交易。
Poloniex用戶數據庫丟失,導致螞蟻礦池賬號被黑:今日螞蟻礦池推特緊急發送三條推特回復Poloniex交易所,詢問一賬號的登陸IP。螞蟻礦池稱,Poloniex丟失用戶數據庫導致該賬號被黑客入侵。今日上午,Poloniex就出現帳戶余額顯示不正常問題,官方稱正在調查原因。其表示他們正在努力恢復出錯的帳戶余額,并將暫停所有的強制清算。[2018/1/19]
其中通過鏈上數據我們可以看出EthCrossChainData合約的owner即為EthCrossChainManager合約,而先前我們知道中繼鏈驗證人(即Keeper)的公鑰存在EthCrossChainData合約中,且此合約存在putCurEpochConPubKeyBytes函數可以直接修改Keeper公鑰。
經過以上分析,結果已經很明確了,攻擊者只需在其他鏈通過crossChain正常發起跨鏈操作的交易,此交易目的是為了調用EthCrossChainData合約的putCurEpochConPubKeyBytes函數以修改Keeper角色。隨后通過正常的跨鏈流程,Keeper會解析用戶請求的目標合約以及調用參數,構造出一個新的交易提交到以太坊上。這本質上也只是一筆正常的跨鏈操作,因此可以直接通過Keeper檢查與默克爾根檢查。最后成功執行修改Keeper的操作。
但我們注意到putCurEpochConPubKeyBytes函數定義為
functionputCurEpochConPubKeyBytes(bytescalldatacurEpochPkBytes)externalreturns(bool);
而_executeCrossChainTx函數執行的定義為
abi.encodePacked(bytes4(keccak256(abi.encodePacked(_method,"(bytes,bytes,uint64)")))
我們可以知道這兩個函數的函數簽名在正常情況下傳入的_method為putCurEpochConPubKeyBytes肯定是完全不同的,因此通過_toContract.call理論上是無法調用到putCurEpochConPubKeyBytes函數的。但_method是攻擊者可以控制的,其完全可以通過枚舉各個字符組合以獲得與調用putCurEpochConPubKeyBytes函數相同的函數簽名,這要求其只需枚舉前4個字節符合即可。我們也可以自己嘗試枚舉驗證,如下所示:
可以看出前四個字節與putCurEpochConPubKeyBytes函數是一致的
至此我們就已還原出攻擊者的攻擊細節。
通過解析鏈上數據,我們可以發現攻擊者將Keeper替換為了0xA87fB85A93Ca072Cd4e5F0D4f178Bc831Df8a00B。
最后攻擊者只需使用替換后的Keeper地址進行簽名即可通過所有檢查執行調用LockProxy合約將其管理的資產轉出。
攻擊流程
攻擊者在源鏈精心構造一筆修改目標鏈Keeper的操作。
利用官方Relayer正常在目標鏈提交數據并執行替換Keeper操作。
攻擊者通過替換后的Keeper地址對其轉出資產的操作進行簽名提交至EthCrossChainManager進行驗證。
驗證Keeper為攻擊者已替換完的地址通過檢查,執行將資產轉移至攻擊者指定地址。
獲利走人。
MistTrack分析過程
慢霧AML團隊分析統計,本次攻擊損失共計超6.1億美元!
具體如下:
資金流向分析
慢霧AML旗下?MistTrack反洗錢追蹤系統分析發現,攻擊者初始的資金來源是門羅幣(XMR)。
然后在交易所里換成了BNB/ETH/MATIC等幣種并分別提幣到3個地址,不久后在3條鏈上發動攻擊。
事件梳理
資金情況
BSC上:
黑客地址1,黑客將近1.2億美元的流動性添加到Curve分叉項目EllipsisFinance中,目前仍在做市無異動。Polygon上:
資金無異動。
Ethereum上:
1)黑客地址3,只有一筆轉出13.37ETH到地址0xf8b5c45c6388c9ee12546061786026aaeaa4b682的交易;
2)黑客在Curve上添加了超9706萬美元的流動性。后又撤銷流動性將9638萬枚USDC和67萬枚DAI換成9694萬枚DAI,這筆資金仍停留在地址3。目前,3343萬枚USDT已被Tether凍結。
疑難問答
注:eccm為EthCrossChainManager合約的簡稱,eccd為EthCrossChainData合約的簡稱。
問:為什么keeper能更換成功,合約代碼沒有進行鑒權嗎?
答:eccd合約有進行鑒權,僅允許owner調用putCurEpochConPubKeyBytes更改keeper,因為eccd合約的owner是eccm,所以通過eccm可以更改keeper的值。
問:為什么能簽名一筆更換keeper的交易?
答:因為跨鏈要執行的數據沒有判斷好toContract,所以可能原先的keeper以為是一筆正常的跨鏈交易就簽名了,但是他是一筆更換keeper的交易。
問:為什么能繞過代碼bytes4(keccak256(abi.encodePacked(_method,"(bytes,bytes,uint64)")))的這個限制,然后執行putCurEpochConPubKeyBytes(bytes)函數?
答:函數簽名用的是keccak-256進行哈希,然后取前面的4bytes,這種情況下是較容易被hash碰撞的。
問:黑客更換keeper的交易如何被舊的keepers簽名?
答:keepers是一個鏈中繼器(Replayer),會對所有正常用戶的跨鏈請求進行簽名。當用戶在BSC上發起跨鏈交易時,keepers會解析用戶請求的目標合約以及調用參數,構造出一個新的交易提交到以太坊上,并在以太坊上用eccm合約調用用戶交易里包含的目標合約。黑客替換keeper的交易本質上也是一筆正常的跨鏈交易,只不過調用的目標合約是eccd合約,調用的參數是更換keeper,所以能被正常簽名。
總結
本次攻擊主要在于EthCrossChainData合約的keeper可由EthCrossChainManager合約進行修改,而EthCrossChainManager合約的verifyHeaderAndExecuteTx函數又可以通過_executeCrossChainTx函數執行用戶傳入的數據。因此攻擊者通過此函數傳入精心構造的數據修改了EthCrossChainData合約的keeper為攻擊者指定的地址,并非網傳的是由于keeper私鑰泄漏導致這一事件的發生。
慢霧AML旗下MistTrack反洗錢追蹤系統將持續監控被盜資金的轉移,拉黑攻擊者控制的所有錢包地址,提醒交易所、錢包注意加強地址監控,避免相關惡意資金流入平臺。此外,特別感謝虎符Hoo、PolyNetwork、火幣Zlabs、鏈聞、WePiggy、TokenPocket錢包、Bibox、歐科云鏈等團隊及許多個人伙伴在合規的前提下及時與慢霧安全團隊同步相關攻擊者信息,為追蹤攻擊者爭取了寶貴的時間。
目前,在多方努力下,黑客開始陸續歸還資金。
來源鏈接:mp.weixin.qq.com
免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews立場無關。文章內的信息、意見等均僅供參考,并非作為或被視為實際投資建議。
慢霧
慢霧
慢霧科技是一家專注區塊鏈生態安全的國家高新技術企業,通過「威脅發現到威脅防御一體化因地制宜的安全解決方案」服務了全球許多頭部或知名的項目。慢霧科技的安全解決方案包括:安全審計、威脅情報、漏洞賞金、防御部署、安全顧問等服務并配套有加密貨幣反洗錢、假充值漏洞掃描、漏洞監測、被黑檔案庫、智能合約防火墻、SafeStaking等SAAS型安全產品,已有商業客戶上千家。慢霧慢霧科技慢霧AML慢霧安全Slowmist查看更多以太坊
Tags:KEEAINEPEKEEPbitkeep官網下載APPBCB BlockchainPEPE2.0價格bitkeep里面沒錢怎么充值
據Decrypt8月14日消息,實驗音樂人HollyHerndon的新數字樂器正在增加一個NFT拍賣行組件,允許用戶提交他們自己的曲目,并通過DAO投票批準出售.
1900/1/1 0:00:00你覺得,錢包安全最重要的一步是什么?以前我認為錢包安全最重要的是備份助記詞,但現在我的答案變了.
1900/1/1 0:00:00尊敬的BitMart用戶:EDDASwap(EDDA)將聯合BitMart舉辦一場名為“60天后消失”的NFT空投抽獎活動.
1900/1/1 0:00:00據VulcanPost8月12日消息,新加坡收藏品設計和制作公司MightyJaxx完成1000萬美元融資,騰訊領投.
1900/1/1 0:00:00尊敬的歐易OKEx用戶:歐易OKEx將于2021年8月13日18:00(HKT)正式上線SUSHI?DeFi賺幣服務,您可以一鍵質押SUSHI參與DeFi賺幣獲得收益.
1900/1/1 0:00:00近期imToken發現詐騙團伙在多個渠道誘導用戶下載假的imToken,目前已知騙子的推廣路徑有非小號、百度廣告排名、社交軟件等第三方下載渠道,由此導致用戶資產被盜.
1900/1/1 0:00:00