引言
在过去三年中,我们观察到 DeFi 生态系统中发生了多起安全事件。为了应对威胁,社区采用了以代码为中心的方法,例如静态代码审计、智能合约扫描工具或动态模糊测试。尽管这些方法已显示出有效性,但我们认为以代码为中心的方法不能单独解决安全问题和保护用户资产。例如,存在多个案例,易受攻击的合约已通过多家信誉良好的代码审计公司进行审计。
我们相信,除了现有的以代码为中心的方法之外,还应该存在更主动的威胁防护解决方案来抵御威胁。我们在 2021 年底内部讨论了这一想法,并于 2022 年初开发了一个名为 IronDome 的系统。自那时以来,我们已在 BlockSec 内部部署了该系统。在 2022 年,IronDome 成功阻止了多次攻击,并为用户挽回了超过 500 万美元的资产,其中包括 2022 年 4 月阻止 Saddle Finance 被利用的案例,挽回了 380 万美元。
在本博客中,我们将详细介绍 IronDome 的系统架构及其成功案例。我们还将讨论我们系统的局限性以及对未来威胁防护方向的见解。
高层系统架构
IronDome 的基本思想是监听以太坊的待处理交易池,通过我们的 交易预执行系统 Mopsus 检测攻击交易,并通过自动合成一个救援交易来阻止攻击,该交易会将易受攻击的资产转移到我们的安全账户,并利用 FlashBot 在攻击交易之前执行。下图展示了该架构。

内存池监控
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] 如何让区块链攻击“可被阻止” | 作者:BlockSec
[2] The Block:稳定币 DEX Saddle Finance 被盗 1000 万美元
[3] Lend 漏洞分析 — HomeCoin (mirror.xyz)
[5] FSWAP 在 Twitter 上发文:“FSWAP 流动性进展攻击详情” / 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/



