故技重施:Hundred Finance 被黑分析
2022 年 03 月 16 日,據慢霧區消息,Hundred Finance 存在嚴重漏洞遭到攻擊,黑客獲利約 2,363 ETH,慢霧安全團隊第一時間介入分析,並將結果分享如下:
相關信息
Hundred Finance 是一個去中心化應用程序(DApp),它支持加密貨幣的借貸。它是一種多鏈協議,與 Chainlink 預言機集成,以確保市場健康和穩定,同時專門為長尾資產提供市場。
以下是本次攻擊涉及的相關地址:
攻擊者地址:
https://blockscout.com/xdai/mainnet/address/0xD041Ad9aaE5Cf96b21c3ffcB303a0Cb80779E358
攻擊交易:https://blockscout.com/xdai/mainnet/tx/0x534b84f657883ddc1b66a314e8b392feb35024afdec61dfe8e7c510cfac1a098
攻擊者合約:
https://blockscout.com/xdai/mainnet/address/0xdbf225e3d626ec31f502d435b0f72d82b08e1bdd
https://blockscout.com/xdai/mainnet/address/0xbE8fe2aE087aeCcB1E46EF206368421c9212637B
https://blockscout.com/xdai/mainnet/address/0x09b4f2551e9f39fa021a99463e21d6044656a7b9
https://blockscout.com/xdai/mainnet/address/0xf07ac43678b408ff0c86efff99b8d21af3d38c51
https://blockscout.com/xdai/mainnet/address/0x9c4e6edbc45b16e4378b53cd3e261727e103f633
被攻擊合約:
https://blockscout.com/xdai/mainnet/address/0x243E33aa7f6787154a8E59d3C27a66db3F8818ee husdc
https://blockscout.com/xdai/mainnet/address/0xe4e43864ea18d5e5211352a4b810383460ab7fcc hwbtc
https://blockscout.com/xdai/mainnet/address/0x8e15a22853a0a60a0fbb0d875055a8e66cff0235 heth
https://blockscout.com/xdai/mainnet/address/0x090a00a2de0ea83def700b5e216f87a5d4f394fe hxdai
攻擊核心點
在 Hundred Finance 借貸協議的 borrowFresh 函數中,記账是在代幣轉账之後,但市場中 USDC、wBTC、wETH 使用的是 ERC677 類型 token 合約,它是 ERC20 合約的一個擴展,兼容 ERC20 協議標准。ERC677 在 token 進行轉账之後,會回調到目標合約的 onTokenTransfer 方法,這就使攻擊者構造的惡意合約能進行重入攻擊。
具體細節分析
1. 通過 SushiSwap 閃電貸借出 2,096,607.298 USDC、1,723,293.26 wXDAI、1,650,170.47 wXDAI。
2. 攻擊者通過攻擊合約向 USDC 借貸合約抵押 1,200,000 枚 USDC,換取 59,999,789.075 枚 hUSDC。
隨後通過借貸合約借走 1,200,000 枚 USDC,但是由於借貸合約記账是在轉账之後,因此攻擊者能在轉账的時候同時开始他的攻擊。
因為 XDai 鏈上的 USDC、WBTC、WETH 是有轉账後回調步驟,攻擊者在轉完 USDC 之後再次重入到 WBTC 的借貸合約。同時因為上一步借走 USDC 的數據還未記錄,所以攻擊者又順利的借走 16.17030715 枚 WBTC, 此後再次重入到 WETH 的借貸合約,借走 24.715930916595319168 枚 WETH。
3. 接着,攻擊者繼續往 USDC 借貸合約轉入 1,964,607 枚 USDC,拿到 98,230,019.558 枚 hUSDC,然後從池子裏面借出 1,748,500.495 枚 USDC,再重入到 xDai 的借貸合約;
隨後,攻擊者轉入大量的 xDai 換出 234,304,737.048 枚 hxDAI,再借出大量的 xDai,再從 USDC 借貸合約借出 4,128,044.631 枚 USDC 之後,攻擊者再一次往 USDC 借貸合約轉入 1,358,759.278 枚 USDC,又獲得 67,937,725.081枚 hUSDC,接着,繼續從 USDC 的借貸合約借出 1,209,295.758 枚 USDC。
4. 最後攻擊者歸還從 SushiSwap 借出來的 xDai 和 USDC,剩余的非法獲利轉到攻擊者账戶上。
MistTrack
據慢霧 AML 分析,黑客地址將資金從 XDai 跨鏈到以太坊後,將代幣均兌換為 ETH,且在以太坊上的黑客地址初始資金來源於 Tornado.Cash。
最後將獲利的 2,363 ETH 分成 32 次轉入 Tornado.Cash,以躲避追蹤。
總結
本次攻擊事件是由於在借貸合約中的 borrowFresh 函數沒有在代幣轉账前進行記账並且使用的 token 是有回調機制造成的,進而導致攻擊者可以在轉账之後重入到其他借貸合約。慢霧安全團隊建議使用非 ERC20 標准的 token 合約時,要注意兼容性,合約記账應在代幣轉账之前做好記錄,遵循 Checks-Effects-Interactions 規則,避免再次出現此類安全問題。
By:Victory@慢霧安全團隊
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
Arthur Hayes 新文聚焦 | 全球貨幣政策的真相,比特幣接下來何去何從?
作為一名宏觀經濟預測者,我試圖基於公开數據和當前事件,作出能夠指導投資組合資產配置的預測。我喜歡“...
Ouroboros DeFi:為什么 Usual Money 被低估了?
前言:Ouroboros DeFi 方法論在Ouroboros DeFi收益基金,我們的投資策略始...
WEEX 唯客交易所贊助臺北區塊鏈周 支持更多全球用戶Onboard Web3
第三屆臺北區塊鏈周(Taipei Blockchain Week, TBW)於 12 月 12-1...