簡介
在過去三年中,我們觀察到了 DeFi 生態系統中的幾起安全事件。為了防禦這些威脅,社群採取了以程式碼為中心的方法,例如靜態程式碼審計、智慧合約掃描工具或動態模糊測試(fuzzing)。儘管這些方法已顯示出一定的有效性,但我們認為僅靠程式碼中心的方法無法完全解決安全問題並保障專案用戶的資產。例如,已有數個案例顯示,即使是有漏洞的合約也曾由多家知名程式碼審計公司審計過。
我們相信,除了現有的以程式碼為中心的方法外,還應存在一種更主動的威脅防禦解決方案來抵禦這些威脅。我們在 2021 年底內部醞釀了這一想法,並於 2022 年初開發了一個名為 IronDome 的系統。自那時起,我們已在 BlockSec 內部部署了該系統。在 2022 年,IronDome 成功阻擋了多次攻擊,挽救了超過 500 萬美元的用戶資產,其中包括 2022 年 4 月成功阻止了對 Saddle Finance 的攻擊並挽救了 380 萬美元資金的案例。
在本部落格中,我們將詳細介紹 IronDome 的系統架構及其成功案例。我們還將討論系統的侷限性以及對威脅防禦未來方向的見解。
高階系統架構
IronDome 的基本理念是監聽以太坊的待處理交易池(pending pool),通過我們的 交易預執行系統 Mopsus 檢測攻擊交易,並通過自動合成一個將脆弱資產轉移至我們安全帳戶的救援交易來阻擋攻擊,並利用 FlashBot 對攻擊交易進行搶跑(front-running)。下圖展示了該架構。

記憶體池(Mempool)監控
IronDome 通過我們客製化的 Geth 客戶端監聽記憶體池中的待處理交易。關鍵在於我們的系統必須及時監聽交易,並儘可能多地監聽交易。
攻擊檢測
每一筆待處理交易都會被送入攻擊檢測模組。由於這些交易尚未上鏈,我們將利用我們的交易預執行引擎 Mopsus 來預執行這些交易,並根據交易的運行狀態和結果來檢測攻擊(惡意)交易。
救援交易合成
對於攻擊交易,IronDome 會自動合成一筆救援交易及其輔助合約。救援交易將採用與攻擊交易類似的方法來「利用」脆弱合約,但會將獲利轉移至我們受控的安全帳戶(一個多重簽名帳戶),而不是攻擊者控制的帳戶。例如,我們可以自動部署類似於攻擊合約的輔助合約,但將代幣轉移地址替換為我們的安全帳戶。當然,對於某些攻擊交易,需要使用更複雜的方法。
對於救援交易,我們需要確保它在攻擊交易之前上鏈。在當前系統中,我們為此利用了 FlashBot。首先,我們必須確保他人無法監聽我們的救援交易。其次,我們可以採取一些策略使我們的救援交易位於區塊頂部。
代表性成功案例
我們在 2022 年初部署了 IronDome。該系統已成功檢測並阻擋了多次攻擊。此表格總結了部分成功案例。
以下時間軸展示了我們的系統如何在 2022 年 4 月底為 Saddle Finance 挽救了 380 萬美元。具體而言,我們的系統在不到一秒鐘的時間內完成了檢測攻擊交易並自動合成救援交易的整個過程。我們將所有挽救的資金歸還給了 Saddle Finance。點擊連結可查看原始駭客攻擊交易和我們的救援交易。
- 原始駭客攻擊交易:https://etherscan.io/tx/0xd9bc83688e8eddde39bd9073c363665b1419d475dd4498e81b52cce41d7c76b3
- 我們的救援交易:https://etherscan.io/tx/0x9549c0cb48ec5a5a2c4703cbbbbea5638028b2d8c8adc103220ef1c7fe5e99a3
倫理考量
我們在系統中嚴肅對待安全倫理問題。雖然我們的系統是「利用」漏洞合約來拯救用戶資產,但我們認為此行為不存在倫理問題。
- 首先,我們的系統不會主動去利用漏洞合約。它只有在檢測到待處理的攻擊交易時才會做出反應,並自動合成一筆類似的交易(以阻擋攻擊交易)。它從未主動發起攻擊。
- 其次,我們積極與受影響的協議溝通並退還挽救的資金。
侷限性
儘管 IronDome 已顯示出其有效性,但該系統仍存在一些侷限性。接下來,我們將闡述這些侷限性並探討主動威脅防禦的未來方向。
- 首先,我們的系統監聽的是記憶體池中的待處理交易。如果攻擊者利用某些私人交易服務(例如 FlashBot),攻擊交易將不會出現在記憶體池中,因此無法被檢測到。為了反制此問題,我們呼籲與私人交易服務提供商合作,檢測並阻擋攻擊交易(採用與我們系統類似的檢測惡意交易的方式)。此外,即使我們的系統無法在待處理池中成功阻擋攻擊交易,它仍然可以在交易上鏈後檢測到攻擊,並發送一筆救援交易以防止後續的攻擊交易。請注意,在許多情況下,通常會存在多筆攻擊交易。
- 其次,安全是一場軍備競賽。我們已經觀察到攻擊者提高了合成救援交易的門檻。例如,他們可以將一筆攻擊交易拆分為多筆,並混淆獲利地址。儘管這些問題可以解決,但我們相信軍備競賽不會停止。我們正在致力於解決這些問題的方案。
- 第三,如何確保救援交易在攻擊交易之前上鏈仍然是一個懸而未決的問題。儘管一些競價策略可以提高救援交易被打包進區塊的機率,但我們無法保證 100% 的成功率。
參考文獻與進一步閱讀
[1] How to Make the BlockChain Attack “Blockable” | by BlockSec
[2] The Block: Stablecoin DEX Saddle Finance hacked for $10 million
[3] Lend Exploit Post-Mortem — HomeCoin (mirror.xyz)
[5] FSWAP on Twitter: “The details of the attack on FSWAP liquidity progress” / Twitter
[6] https://forta.org/blog/blocksec-and-forta-work-to-secure-web3-beyond-audits/
[7] https://forta.org/blog/the-future-of-threat-prevention-in-web3/



