“То, что в децентрализованных финансах называют безотзывным смарт-контрактом, часто оказывается не таким уж безотзывным — просто возврат денег требует нестандартного мышления и сговора с криптобиржами.”
Почему атаки на DeFi, это в первую очередь поиск упущенных допущений
Забудьте про хакеров в масках, взламывающих “неприступный” код. Основная масса успешных атак на протоколы DeFi происходит не из-за ошибок в сложной криптографии или уязвимостей в языке программирования Solidity. Их корень — в разрыве между математической строгостью алгоритма и рыночной неопределённостью, которую этот алгоритм пытается игнорировать. Смарт-контракт формально корректен, но его логика построена на допущениях, которые в реальном мире не выполняются.
Например, контракт может рассчитывать цену актива, полагаясь на данные от стороннего оракула. Логика проста: “если цена упала ниже X — начинаем ликвидацию”. Но что, если оракул можно обмануть или заставить показать ложную цену? Или если цену можно искусственно “просадить”, временно манипулируя рынком на небольшой бирже, данные которой использует оракул? Формально всё работает по коду, но допущение “данные оракула верны и не подвержены манипуляциям” оказалось ложным.
Анатомия атаки: не один взлом, а цепь событий
Типичный сценарий атаки редко сводится к одной операции “похитить деньги”. Это многоходовая комбинация, где каждый шаг выглядит как обычная, разрешённая блокчейном транзакция.
- Исследование и выбор цели: злоумышленник изучает код протокола (часто открытый) и ищет несоответствия: где логика контракта зависит от внешних данных, где есть временные задержки между проверкой условия и его исполнением, где можно повлиять на расчёт.
- Подготовка ресурсов: арендуются или берутся в кредит крупные суммы криптовалюты. Это нужно, чтобы оказывать давление на рынок или заполучить значительную долю в протоколе.
- Проведение атаки: выполняется серия транзакций. Они могут включать создание фиктивных торговых пар, манипуляцию ценами через flash-кредиты (мгновенные бесколлатеральные займы), эксплуатацию разницы курсов между протоколами (арбитраж) или триггер уязвимой логики контракта.
- Отмывание и вывод: украденные средства нужно обналичить. Самый сложный этап, так как крупные переводы отслеживаются. Используются миксеры, обмен на другие активы, переводы через множество кошельков и иногда — сговор с нерегулируемыми биржами для быстрого вывода.
Разбор кейса: атака на протокол кредитования Venus
В начале 2023 года произошла атака на протокол Venus, работающий в экосистеме BNB Chain. Это не был взлом в привычном смысле. Атака эксплуатировала механизм ликвидации и систему управления протоколом.
Venus, это децентрализованный кредитный протокол, где пользователи вносят залог (например, BNB) и могут брать кредиты в стейблкоинах. Если стоимость залога падает, позиция может быть ликвидирована другими пользователями за вознаграждение.
Атака началась с того, что злоумышленник взял крупный flash-кредит в стейблкоине USDT. На эти средства он выкупил огромное количество токенов управления протоколом — XVS. Резкий спрос искусственно взвинтил цену XVS.
Как была использована уязвимость
Протокол позволял использовать XVS в качестве залога. Когда цена XVS была искусственно высокой, злоумышленник внёс свои токены в Venus и взял под них максимально возможный кредит в стейблкоинах (BUSD, USDT).
Затем flash-кредит был возвращён. Массивная продажа XVS, купленных ранее, обрушила его рыночную цену. Но в протоколе Venus существовала задержка (time-lock) между изменением рыночной цены и обновлением этой цены внутри системы для расчёта обеспечения. Это окно уязвимости.
Пока цена в протоколе всё ещё показывала старые, высокие значения, позиция злоумышленника формально оставалась хорошо обеспеченной. Однако на рынке цена уже рухнула. Он инициировал ликвидацию собственной, казалось бы, “здоровой” позиции. Система, видя формально корректные данные (обеспечение по старой цене всё ещё выше порога ликвидации), разрешила операцию. В результате ликвидации залог (XVS) был продан по заниженной, но всё ещё “старой” высокой цене внутри протокола, а вырученные стейблкоины пошли на погашение кредита. Разница между реальной рыночной стоимостью залога и той, по которой его “продали” внутри системы, составила прибыль атакующего.
Что сработало не так
- Использование токена управления в качестве залога: актив с высокой волатильностью и низкой ликвидностью стал ключевым элементом финансовой конструкции.
- Зависимость от рыночной цены с временной задержкой: протокол не успевал за реальными изменениями на рынке, создавая арбитражное окно.
- Возможность ликвидировать собственную позицию: механика, предназначенная для защиты системы, была использована против неё.
Ошибки проектирования, которые повторяются
Проанализировав десятки инцидентов, можно выделить типовые ошибки в архитектуре протоколов, которые становятся мишенями.
| Тип ошибки | Суть проблемы | Пример инцидента |
|---|---|---|
| Ценовая зависимость от одного источника | Протокол полагается на один оракул или биржу для получения цены. Манипуляция ценой на этом источнике искажает всю логику. | Атаки на протоколы, использующие данные малоликвидных бирж. |
| Рекурсивные вызовы и логика с состоянием | Функция контракта, которую может вызвать любой пользователь, меняет состояние, от которого зависит другая функция в этом же вызове. Это позволяет подсунуть некорректные данные. | Классическая уязвимость “reentrancy”. |
| Некорректная математика округления | Ошибки в расчётах процентов, комиссий или долей могут привести к потере средств изSQL-запросов казначейства или к возможности вывода “лишних” токенов. | Инциденты в yield-протоколах из-за округления доходности. |
| Слишком сложная логика управления | Децентрализованные автономные организации (DAO) с многоступенчатым голосованием могут быть захвачены через покупку токенов управления, что позволяет изменить параметры протокола в пользу атакующего. | Атака на Beanstalk. |
Что можно сделать? Защита на уровне проектирования
Эффективная защита начинается не с найма аудиторов, а с архитектурных решений, которые усложняют или делают экономически невыгодными атаки.
- Использование децентрализованных оракулов: агрегация данных с нескольких независимых источников вместо одного.
- Внедрение защитных пауз (time locks) для критических изменений параметров. Даже если управление захвачено, сообщество успеет среагировать.
- Ограничение возможностей flash-кредитов внутри протокола: запрет на использование заёмных средств для операций, влияющих на расчёт цен в том же блоке.
- Экономические сдержки: увеличение стоимости атаки через введение высоких комиссий за подозрительные операции или требование большего обеспечения для активов с высокой волатильностью.
- Непрерывный мониторинг аномалий: автоматические системы, отслеживающие необычные объёмы торгов, резкие изменения цен в пулах ликвидности и подозрительные паттерны транзакций.
Итог: атака как стресс-тест
Каждая крупная атака на DeFi-протокол, это публичный стресс-тест его экономической и технической модели. Она выявляет слабые места, которые не были видны при проектировании и даже при аудите. Успешность протокола теперь измеряется не только объёмом заблокированных средств, но и его устойчивостью к подобным скоординированным действиям.
Для разработчиков это означает сдвиг парадигмы: нужно проектировать системы, которые устойчивы не только к ошибкам кода, но и к рациональному, корыстному поведению участников, стремящихся извлечь выгоду из любого допущения. Битва в DeFi сместилась с криптографии на поля экономической теории игр и анализа рыночных механизмов.