Введение
За последние три года мы наблюдали несколько инцидентов безопасности в экосистеме DeFi. Для защиты от угроз сообщество использует методы, ориентированные на код, например, статический аудит кода, инструменты для сканирования смарт-контрактов или динамический фаззинг. Несмотря на их эффективность, мы утверждаем, что подход, сфокусированный только на коде, не может полностью решить проблемы безопасности и защитить активы пользователей. Например, существует ряд случаев, когда уязвимые контракты проходили аудит в нескольких авторитетных аудиторских компаниях.
Мы считаем, что помимо существующих подходов, ориентированных на код, должно существовать более проактивное решение для предотвращения угроз. Мы обдумывали эту идею внутри компании в конце 2021 года и разработали систему под названием IronDome в начале 2022 года. С тех пор мы внедрили эту систему внутри BlockSec. В 2022 году IronDome успешно заблокировал несколько атак и спас активы пользователей на сумму более 5 миллионов долларов США, включая случай с предотвращением эксплойта Saddle Finance в апреле 2022 года, что позволило спасти 3,8 миллиона долларов США.
В этом блоге мы подробно расскажем об архитектуре системы IronDome и историях её успеха. Мы также обсудим ограничения нашей системы и поделимся идеями о будущем направлении предотвращения угроз.
Общая архитектура системы
Основная идея IronDome заключается в прослушивании пула транзакций Ethereum, ожидающих подтверждения (mempool), обнаружении атакующей транзакции с помощью нашей системы предварительного выполнения транзакций Mopsus и блокировке атаки путём автоматического синтеза спасательной транзакции, которая переводит уязвимые активы на наш безопасный счёт, а также опережении атакующей транзакции через FlashBot. На следующем рисунке показана архитектура системы.

Мониторинг Mempool
IronDome отслеживает ожидающие транзакции в пуле памяти (mempool) через наш модифицированный клиент Geth. Ключевой момент заключается в том, что наша система должна прослушивать транзакции оперативно и обрабатывать максимально возможное их количество.
Обнаружение атак
Каждая ожидающая транзакция передаётся в модуль обнаружения атак. Поскольку эти транзакции ещё не записаны в блокчейн, мы используем наш движок предварительного выполнения транзакций Mopsus для их симуляции и выявляем вредоносные транзакции на основе состояний выполнения и результатов транзакции.
Синтез спасательной транзакции
Для выявленной атакующей транзакции IronDome автоматически синтезирует спасательную транзакцию и вспомогательные контракты. Спасательная транзакция выполняет действия, аналогичные атакующей транзакции, для «эксплуатации» уязвимого контракта, но переводит прибыль на наш безопасный счёт (мультиподписной аккаунт), а не на счёт, контролируемый злоумышленником. Например, мы можем автоматически развернуть вспомогательные контракты, похожие на контракты злоумышленника, но заменить адрес перевода токенов на наш безопасный счёт. Разумеется, для некоторых типов атак требуются более сложные подходы.
Спасательная транзакция должна попасть в блокчейн раньше атакующей. В текущей системе мы используем для этого FlashBot. Во-первых, мы должны убедиться, что другие участники не видят нашу спасательную транзакцию. Во-вторых, мы можем применять различные стратегии, чтобы гарантировать, что наша спасательная транзакция окажется в начале блока.
Репрезентативные примеры успеха
Мы внедрили IronDome в начале 2022 года. Система успешно обнаружила и заблокировала множество атак. В этой таблице обобщены некоторые успешные случаи.
На следующей временной шкале показано, как наша система спасла 3,8 миллиона долларов США для Saddle Finance в конце апреля 2022 года. В частности, наша система завершила весь процесс обнаружения атакующей транзакции и автоматического синтеза спасательной транзакции менее чем за одну секунду. Мы вернули все спасённые средства Saddle Finance. По ссылкам ниже вы можете увидеть оригинальную атаку tx и нашу спасательную tx.
- Оригинальная атаку tx: https://etherscan.io/tx/0xd9bc83688e8eddde39bd9073c363665b1419d475dd4498e81b52cce41d7c76b3
- Наша спасательная tx: 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/



