慢霧認為,攻擊主要在于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則用于資產管理。
多名CEX用戶存取款地址因惡意插件被黑客地址替換:6月9日消息,據 X-explore 披露,由于惡意瀏覽器插件,許多用戶在中心化交易平臺(CEX)的存款和取款地址已經被黑客地址所替換。自 2022 年 6 月以來,已有數百起針對數十家 CEX 的攻擊。X-explore 建議用戶不要下載并安裝未知的瀏覽器擴展/軟件/應用程序,仔細檢查電子郵件中的提款和存款地址。[2023/6/9 21:25:38]
本次攻擊中,攻擊者分兩步來完成這次攻擊,我們接下來進行詳細分析:
首先攻擊者通過在其他鏈調用crossChain函數構造數據發起跨鏈交易。
我們切入此函數進行分析:
EthCrossChainManager.crossChain
從上圖我們可以清晰的看出,此函數只是用于幫助用戶構造makeTxParam并存儲了構造后的哈希以便后續驗證,其并未對用戶傳入的跨鏈操作參數進行任何限制,因此攻擊者完全可以通過構造任意想構造的數據而讓Relayer毫無防備的將其同步至PolyChain,通過PolyChain將其同步至以太坊Relayer。
隨后在以太坊上的Relayer通過調用EthCrossChainManager合約中
的verifyHeaderAndExecuteTx函數提交區塊頭信息來驗證這筆跨鏈信息的真實性。
我們切入此函數進行分析:
EthCrossChainManager.verifyHeaderAndExecuteTx
Arbitrum一開發者疑似被黑 在Discord社區發布釣魚鏈接:金色財經報道,Hideout NFT創始人Wickd NFT發推特提醒,Arbitrum的一名開發者疑似被黑,在Discord社區發布釣魚鏈接。[2023/3/25 13:26:04]
通過上圖代碼我們可以看出其先對區塊頭進行反序列化,以解出所需要驗證的具體信息。隨后調用getCurEpochConPubKeyBytes函數從EthCrossChainData合約中獲取Keeper公鑰,并通過deserializeKeepers函數得到Keeper地址。
接下來將通過ECCUtils.verifySig驗證簽名是否為Keeper,從以下代碼中我們可以發現verifySig函數中會切出簽名者的vrs,并通過ecrecover接口獲取簽名者地址,然后調用containMAddresses函數循環比較簽名者是否為Keeper,只要Keeper簽名數量符合要求即可通過檢查,數量要求即為EthCrossChainManager合約傳入的n-(n-1)/3)。
簽名驗證后會通過ECCUtils.merkleProve進行默克爾根驗證,只要是正常跨鏈操作即可通過此項檢查。隨后會對交易是否重復發送進行檢查并存儲已驗證后的數據。這里只需保證不重復提交即可。
最后,也是最關鍵的一步,其將通過內部調用_executeCrossChainTx函數執行構造的數據。
從上圖我們可以看出_executeCrossChainTx函數未對傳入的_toContract、_method等參數進行檢查就直接以_toContract.call的方式執行交易。
Grim Finance 被黑簡析:攻擊者通過閃電貸借出 WFTM 與 BTC 代幣:據慢霧區情報,2021 年 12 月 19 日,Fantom 鏈上 Grim Finance 項目遭受攻擊。慢霧安全團隊進行分析后以簡訊的形式分享給大家。
1. 攻擊者通過閃電貸借出 WFTM 與 BTC 代幣,并在 SpiritSwap 中添加流動性獲得 SPIRIT-LP 流動性憑證。
2. 隨后攻擊者通過 Grim Finance 的 GrimBoostVault 合約中的 depositFor 函數進行流動性抵押操作,而 depositFor 允許用戶指定轉入的 token 并通過 safeTransferFrom 將用戶指定的代幣轉入 GrimBoostVault 中,depositFor 會根據用戶轉賬前后本合約與策略池預期接收代幣(預期接收 want 代幣,本次攻擊中應為 SPIRIT-LP)的差值為用戶鑄造抵押憑證。
3. 但由于 depositFor 函數并未檢查用戶指定轉入的 token 的合法性,攻擊者在調用 depositFor 函數時傳入了由攻擊者惡意創建的代幣合約地址。當 GrimBoostVault 通過 safeTransferFrom 函數調用惡意合約的 transferFrom 函數時,惡意合約再次重入調用了 depositFor 函數。攻擊者進行了多次重入并在最后一次轉入真正的 SPIRIT-LP 流動性憑證進行抵押,此操作確保了在重入前后 GrimBoostVault 預期接收代幣的差值存在。隨后 depositFor 函數根據此差值計算并為攻擊者鑄造對應的抵押憑證。
4. 由于攻擊者對 GrimBoostVault 合約重入了多次,因此 GrimBoostVault 合約為攻擊者鑄造了遠多于預期的抵押憑證。攻擊者使用此憑證在 GrimBoostVault 合約中取出了遠多于之前抵押的 SPIRIT-LP 流動性憑證。隨后攻擊者使用此 SPIRIT-LP 流動性憑證移除流動性獲得 WFTM 與 BTC 代幣并歸還閃電貸完成獲利。
此次攻擊是由于 GrimBoostVault 合約的 depositFor 函數未對用戶傳入的 token 的合法性進行檢查且無防重入鎖,導致惡意用戶可以傳入惡意代幣地址對 depositFor 進行重入獲得遠多于預期的抵押憑證。慢霧安全團隊建議:對于用戶傳入的參數應檢查其是否符合預期,對于函數中的外部調用應控制好外部調用帶來的重入攻擊等風險。[2021/12/19 7:49:04]
其中通過鏈上數據我們可以看出EthCrossChainData合約的owner即為EthCrossChainManager合約,而先前我們知道中繼鏈驗證人(即Keeper)的公鑰存在EthCrossChainData合約中,且此合約存在putCurEpochConPubKeyBytes函數可以直接修改Keeper公鑰。
慢霧:BSC項目Value DeFi vSwap 模塊被黑簡析:據慢霧區情報,幣安智能鏈項目 Value DeFi 的 vSwap 模塊被黑,慢霧安全團隊第一時間介入分析,并將結果以簡訊的形式分享,供大家參考:
1. 攻擊者首先使用 0.05 枚 WBNB 通過 vSwap 合約兌換出 vBSWAP 代幣;
2. 攻擊者在兌換的同時也進行閃電貸操作,因此 vSwap 合約會將兌換的 vBSWAP 代幣與閃電貸借出的 WBNB 轉給攻擊者;
3. 而在完成整個兌換流程并更新池子中代幣數量前,會根據池子的 tokenWeight0 參數是否為 50 來選擇不同的算法來檢查池子中的代幣數量是否符合預期;
4. 由于 vSwap 合約的 tokenWeight0 參數設置為 70,因此將會采用第二種算法對池子中的代幣數量進行檢查;
5. 而漏洞的關鍵點就在于采用第二種算法進行檢查時,可以通過特殊構造的數據來使檢查通過;
6. 第二種算法是通過調用 formula 合約的 ensureConstantValue 函數并傳入池子中緩存的代幣數量與實時的代幣數量進行檢查的;
7. 在通過對此算法進行具體分析調試后我們可以發現,在使用 WBNB 兌換最小單位(即 0.000000000000000001) vBSWAP 時,池子中緩存的 WBNB 值與實時的值之間允許有一個巨大的波動范圍,在此范圍內此算法檢查都將通過;
8. 因此攻擊者可以轉入 WBNB 進行最小單位的 vBSWAP 代幣兌換的同時,將池子中的大量 WBNB 代幣通過閃電貸的方式借出,由于算法問題,在不歸還閃電貸的情況下仍可以通過 vSwap 的檢查;
9. 攻擊者只需要在所有的 vSwap 池子中,不斷的重復此過程,即可將池子中的流動性盜走完成獲利。詳情見原文鏈接。[2021/5/8 21:37:37]
經過以上分析,結果已經很明確了,攻擊者只需在其他鏈通過crossChain正常發起跨鏈操作的交易,此交易目的是為了調用EthCrossChainData合約的putCurEpochConPubKeyBytes函數以修改Keeper角色。隨后通過正常的跨鏈流程,Keeper會解析用戶請求的目標合約以及調用參數,構造出一個新的交易提交到以太坊上。這本質上也只是一筆正常的跨鏈操作,因此可以直接通過Keeper檢查與默克爾根檢查。最后成功執行修改Keeper的操作。
科羅拉多州政府電腦被黑客襲擊并被勒索比特幣:科羅拉多州交通運輸部員工周三被勒索軟件劫持了計算機文件,并被黑客要求支付比特幣后才能解除攻擊。對此,安全官員并未滿足黑客要求,而是關閉了2000多臺員工電腦。據悉,這個勒索軟件是SamSam的變種,此次攻擊不是由于員工打開受感染的電子郵件,而是黑客利用供應商的用戶名和密碼遠程訪問。[2018/2/22]
但我們注意到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:AINKEEPEPEKEEYSHIBAINUbitkeep錢包最新版Baby Pepe Flokibitkeep錢包被盜
親愛的CoinW用戶: CoinW現已建立新幣專屬交流社群,所有用戶皆可掃描文末二維碼或添加群主微信進群交流最新項目信息,近期交易過新幣的用戶進群還可領取打新贈禮.
1900/1/1 0:00:00隨著近期加密社區熱切的討論《美國基礎設施法案》新增對加密貨幣領域的稅務征收,無論此基建法案通過與否,對加密交易征稅,本身就已在某種程度上宣布了這項技術或資產的合法性.
1900/1/1 0:00:00尊敬的用戶:?????????????BKEXGlobal即將上線REQ,詳情如下:上線交易對:REQ/USDT??幣種類型:ERC20充值功能開放時間:已開放交易功能開放時間:2021年8月1.
1900/1/1 0:00:00尊敬的虎符用戶: 七夕專場,虎符特開展WD挖礦等送福利活動,5,000USDT等您來拿。 單幣挖礦領福利 活動時間:2021年8月13日17:00——2021年9月12日17:00(UTC8)幣.
1900/1/1 0:00:00親愛的CoinW用戶: 幣贏CoinW將于2021年8月10日19:00在DeFi專區上線FormationFi,開通FORM/USDT交易對.
1900/1/1 0:00:00親愛的用戶: 為回饋新老用戶長期的關注與支持,HomiExUSDT固定年化20%挖礦基金,今日開啟28天定期產品認購,保本保息無風險,到期系統自動發放收益本金至HomiEx錢包賬戶.
1900/1/1 0:00:00