慢霧安全團隊建議使用非ERC20 標準的token 合約時,要注意兼容性,合約記賬應在代幣轉賬之前做好記錄,遵循Checks-Effects-Interactions 規則,避免再次出現此類安全問題。
By:Victory@慢霧安全團隊
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 規則,避免再次出現此類安全問題。
展開全文打開碳鏈價值APP 查看更多精彩資訊