menu-icon
anue logo
熱門時事鉅亨號鉅亨買幣
search icon

區塊鏈

Fairyproof分析:一起三明治交易機器人被攻擊案例

BlockBeats 律動財經 2023-08-30 19:00

cover image of news article
律動財經圖片

三明治機器人交易是區塊鏈生態的日常交易中非常普遍的交易行為。通過機器人進行交易不僅能極大地提高交易效率,還能儘快發現交易中存在的套利機會。

安全的機器人交易當然能達到上述目的,可不安全的機器人交易則有可能「偷雞不成反蝕把米」。UTC 時間 8 月 29 日 06:04:39,BNB Chain 鏈上便發生了一起三明治交易機器人被攻擊的案例。

在該起案例中被攻擊的交易機器人總共損失了 207 個 WBNB、184900 個 BSC-USD 和 158900 個 BUSD,總資產價值約 39 萬美元。


Fairyproof 在第一時間對該事件進行了分析,發現攻擊原因疑似為函數調用權限驗證不充分。

通常在 DEX(去中心化交易平台)的鏈上交易中,為了節省 gas,交易機器人會直接和交易對進行交互,而不通過 DEX 的 Router 合約。在基於 Uniswap 交易邏輯實現的 DEX 中,其交易對為先借後還,即調用交易者的特定回調函數(在本例中為 pancakeV3SwapCallback)來通知交易者代幣已經借出,需要交易者進行相關操作以歸還借出的代幣。

因此,在交易合約中必須驗證回調函數 pancakeV3SwapCallback 的調用者(msg.sender)為真正的交易對和交易的發起者(tx.origin)權限。由於 msg.sender 的驗證相對複雜(有時要考慮兼容 Uniswap V2 導致驗證邏輯複雜),因此大多數合約只驗證了 tx.origin。

通常這麼做是沒有問題的。然而如果交易的某一步涉及到了惡意合約(在本例中就是攻擊代幣合約),則會發生風險,因為惡意合約調用 pancakeV3SwapCallback 時,tx.origin 是可以通過權限驗證的。

在本次事件中,正是由於未驗證 msg.sender 是否是 pancakeV3 交易池,攻擊代幣直接調用了 pancakeV3SwapCallback 函數並偽造了交易參數,從而通過了 tx.origin 驗證並竊取了資產。

在本次攻擊中,三明治交易的相關哈希值如下:

三明治機器人的合約地址如下:

· 執行合約(存在漏洞):0x5C936E535Bb591C979a7c8D36C48a6B31808Cef9

· 保險庫合約:0x6E47b1123ddcF74E853516F934f5296cEb17D404

攻擊代幣的合約地址:0xb4864E14467B0D1a2AfB1F70b3f04D4aCd635e06

攻擊代幣交易對的地址:0xf61F401041a1AF03875B0E0d4AAa9749a57AEB93

攻擊者的地址:0x30BA49Ca659B70d3723E3cA6ed96EA4EF0249893

本次攻擊的主要內部交易流程如下圖所示:

注,上圖截取自此處

從上述流程中,我們可以分析攻擊交易的具體步驟如下:

步驟 1:攻擊者部署攻擊代幣合約並進行相關準備工作,發起一筆購買交易暴露給三明治交易機器人。

步驟 2:三明治機器人在 FrontRun 中調用 PancakeV3 交易池 0xf61F401041a1AF03875B0E0d4AAa9749a57AEB93 的 swap 函數來獲取攻擊代幣。

步驟 3:交易池 0xf61F401041a1AF03875B0E0d4AAa9749a57AEB93 將攻擊代幣轉給三明治機器人(Uniswap 系列的先藉機制),這個過程會調用攻擊代幣的 transfer 函數。

步驟 4:攻擊代幣的 transfer 函數調用三明治機器人的 pancakeV3SwapCallback() 函數,並附帶偽造的請求參數。

步驟 5:三明治機器人的 pancakeV3SwapCallback() 函數 tx.origin 驗證通過,然後將資產從保險庫中轉移到攻擊代幣合約中(因為 pancakeV3SwapCallback 函數通常會將資產發送給 msg.sender)。

步驟 6:接下來是正常三明治交易流程。三明治機器人獲利約 25 個 USDC。

步驟 7:攻擊者提取代幣合約中竊取的多種資產。所提取的竊取資產如下圖所示,包括 WBNB、BSC-USD 和 BUSD:

注,上圖截取自此處

本次攻擊警示合約開發者合約接口一定要驗證調用者的權限,也就是驗證 msg.sender,僅僅驗證 tx.origin 是不夠的。

在類似的情景中,Fairyproof 建議首先驗證 tx.origin,再驗證下列兩種情形之一:

1.初始調用合約的外部接口進行交易時,將交易對地址寫入合約,在回調函數中對此進行驗證。交易執行完畢後再重置這個交易對參數。雖然這樣的操作會額外消耗 gas,但能極大提升安全性。

2.在合約中固定存入 Factory 地址,在回調函數中計算相應的交易對地址並進行相應的驗證。

除此以外,對合約進行審計是確保項目安全的必要步驟。本例中出現的安全事故是完全可以通過安全審計發現並避免的。

Fairyproof 為區塊鏈生態提供專業、完善、嚴謹的安全服務,涵蓋合約審計、安全諮詢、安全方案、實時監測、被盜資產追蹤等。我們一直致力與生態中的合作夥伴共同攜手,傾力打造安全的生態環境、保護用戶的加密資產。

原文連結

暢行幣圈交易全攻略,專家駐群實戰交流

▌立即加入鉅亨買幣實戰交流 LINE 社群(點此入群
不管是新手發問,還是老手交流,只要你想參與虛擬貨幣現貨交易、合約跟單、合約網格、量化交易、理財產品的投資,都歡迎入群討論學習!

前往鉅亨買幣找交易所優惠

文章標籤


Empty