“友好協商”後退贓90%,Arbitrum上Sentiment項目黑客事件分析

原文:《黑客被“感化”退還資金? Arbitrum鏈的Sentiment項目被攻擊事件分析》

2023年4月5日,據Beosin-Eagle Eye態勢感知平台消息,Arbitrum鏈的Sentiment項目遭受黑客攻擊,黑客獲利約1百萬美元,不過在項目方的“感化”下,黑客已退還大部分資金。

據了解,Sentiment是一個Defi借貸項目。借貸邏輯是Sentiment為用戶開設賬戶,用戶通過此賬戶將資產質押到其他項目獲取收益,並且在質押之後也可以進行借貸。本次攻擊如何發生,請聽我們詳細分解。

事件相關信息

攻擊交易

0xa9ff2b587e2741575daf893864710a5cbb44bb64ccdc487a100fa20741e0f74d

攻擊者地址

0xdd0cdb4c3b887bc533957bc32463977e432e49c3

攻擊合約

0x9f626f5941fafe0a5b839907d77fbbd5d0dea9d0

被攻擊合約

0x62c5aa8277e49b3ead43dc67453ec91dc6826403

攻擊流程

跟著Beosin一起來看看黑客是如何對Sentiment項目“下手”的。

1.攻擊者首先從Tornado.Cash提取1ETH到其以太坊賬戶,然後通過跨鏈橋將0.7ETH轉入到其Arbitrum賬戶做好gas準備。然後部署了他的攻擊合約。

“友好協商”後退贓90%,Arbitrum上Sentiment項目黑客事件分析

2.接著攻擊者發起攻擊交易,首先攻擊合約通過閃電貸獲得606個WBTC,10050個WETH和18,000,000個USDC。然後,攻擊合約在Sentiment項目中按照項目方的正常業務邏輯創建賬戶,並只在賬戶中質押了50個WETH,再通過Sentiment項目的AccountManager合約將這50個WETH添加到Balancer項目的Balancer: Vault合約中。為價格操控之後的借款提供質押記錄。

“友好協商”後退贓90%,Arbitrum上Sentiment項目黑客事件分析

3.可以看到,上面的質押是通過Sentiment開設的賬戶進行的,之後攻擊合約以合約身份向Balancer提供大量流動性,一共花費了606個WBTC,10000個WETH和18,000,000個USDC。

“友好協商”後退贓90%,Arbitrum上Sentiment項目黑客事件分析

4.緊接著攻擊者調用Balancer: Vault.exitPool()函數取回流動性,這個過程中Balancer: Vault會向攻擊者轉賬從而調用攻擊者預先構造好的fallback函數。

“友好協商”後退贓90%,Arbitrum上Sentiment項目黑客事件分析

5.在fallback函數中,攻擊者調用了Sentiment項目的borrow進行借貸。按照借貸的邏輯,借款需要檢查借款人的質押,而Sentiment確實通過RiskEngine.isAccountHealthy()進行了檢查。

“友好協商”後退贓90%,Arbitrum上Sentiment項目黑客事件分析

6.這裡的檢查是通過WeightedBalancerLPOracle.getPrice()函數獲取抵押物價格,而該函數依賴Balancer: Vault.getPoolTokens()返回的數據。由於這時攻擊者退出流動性的操作還沒有完成,這裡返回的數據是包含了攻擊者流動性的舊數據。

“友好協商”後退贓90%,Arbitrum上Sentiment項目黑客事件分析

7.這個舊數據導致了預言機的價格計算錯誤,WeightedBalancerLPOracle.getPrice()返回價格由正常的220132731298820699變成了3550073070005057760,提升了約16倍,使得攻擊者抵押的50WETH價值升高,從而能取出更多資產。

“友好協商”後退贓90%,Arbitrum上Sentiment項目黑客事件分析

8.攻擊者通過多個borrow和exec,最終獲取了0.5個WBTC、30個WETH、538,399USDC和360,000USDT。然後通過跨鏈回到了攻擊者的以太坊地址,並全部換成了517個ETH,價值約1百萬美元。

“友好協商”後退贓90%,Arbitrum上Sentiment項目黑客事件分析

漏洞分析

根據Beosin安全團隊的分析,本次攻擊主要利用了重入導致的價值計算錯誤。這一漏洞的主要原因是Sentiment項目未考慮到Balancer: Vault._joinOrExit()函數在流動性移除時,先轉移資產再更新池子餘額。導致在轉移ETH資產時,會觸發攻擊合約的fallback調用,此時攻擊合約借款,Sentiment採用未更新的Balancer的數據計算價格,導致比質押更多的資產被借出。

Sentiment的價格計算函數:

“友好協商”後退贓90%,Arbitrum上Sentiment項目黑客事件分析

Balancer項目的流動性添加與移除函數:

“友好協商”後退贓90%,Arbitrum上Sentiment項目黑客事件分析

資金追踪

Beosin Trace追踪發現,被盜資金為517個ETH,經項目方與黑客協商,其中51ETH為賞金已被黑客轉移到Tornado.Cash,其餘資金已歸還項目方。

“友好協商”後退贓90%,Arbitrum上Sentiment項目黑客事件分析

總結

針對本次事件,Beosin安全團隊建議:

1.在合約開發時,採用檢查-影響-交互模式。並且在多個合約相互依賴時需要更加註意合約之間的影響帶來的安全問題。

2.項目與其他項目有數據依賴時,需要謹慎考慮項目之間的結合是否會導致新的安全問題出現。盡量通過原始數據作為自己邏輯的參考,減少對其他項目運算結果的依賴。

Total
0
Shares
Related Posts