«Черный четверг» для DeFi: как умелые хакеры вывели $8 млн из MakerDAO на фоне обвала рынка
Обвал рынка 12 марта стал настоящим испытанием для DeFi-сектора и ударил по его слабым местам. Не устоял даже флагман MakerDAO — злоумышленникам удалось вывести из системы свыше $8 млн. О том, какие уроки преподал DeFi «черный четверг», специально для ForkLog рассказал независимый исследователь Андрей Тукманов.
Как обеспечивается стабильность DAI?
MakerDAO — это экосистема из двух токенов: управляющего Maker и стейблкоина DAI. Последний привязан к доллару США в соотношении 1:1 и обеспечен различными цифровыми активами, в основном — Ethereum.
Для получения DAI пользователь вносит залог на специальный смарт-контракт, после чего система выдает ему стейблкоины. При этом залог всегда превышает размер займа (на момент написания — 150%). Если стоимость монет в залоге опускается ниже стоимости займа, начинается аукцион, в рамках которого участники сети, так называемые ликвидаторы, выкупают залог за DAI. После этого система сжигает полученные стейблкоины, уменьшая эмиссию. Такой механизм призван обеспечить привязку к доллару.
Что случилось в «черный четверг»?
Паника на рынке спровоцировала экстремальную нагрузку на сеть Ethereum — существенно выросли транзакционные комиссии.
MakerDAO отслеживает курсы активов с помощью нескольких сторонних источников — «оракулов». Для начала процедуры ликвидации за основу берется усредненная цена, которая публикуется раз в час. Из-за перегруженности Ethereum задержка составила два часа — за это время стоимость ETH упала с $166 до $136.
Our post covering the events of the Black Thursday market crash is now live and includes details on what took place as well as a brief introduction to planned Automation updates.
We welcome all feedback and comments, be it here or in our Discord.https://t.co/X9FejPQSbg
— DeFi Saver (@DeFiSaver) March 18, 2020
После обновления усредненной цены множество залогов оказались под угрозой ликвидации, но у ликвидаторов не было достаточно DAI для выкупа всех позиций. Часть из них сознательно не стали покупать стремительно падающий ETH.
Написанная разработчиками MakerDAO система Auction Keeper оказалась не рассчитана на высокие цены на газ. Многие ликвидаторы оказались неспособны выполнять свои функции.
Вакуум заполнил атакующий, которому удалось выиграть несколько аукционов по цене около нуля. Его примеру последовали и другие пользователи. Совокупно они выкупили залоги на $8 млн за копейки, а $4 млн в DAI оказались необеспеченными.
Как ответили разработчики?
Разработчики увеличили длительность аукциона, чтобы дать шанс честным участникам. Однако обновление протокола занимает 24 часа.
Создатели MakerDAO добавили такую задержку для решения проблемы безопасности. Злоумышленник мог заменить смарт-контракты системы на собственные и вывести из MakerDAO деньги. Для этого требовались голосующие токены MKR. Стоимость потенциальной атаки была существенно ниже стоимости заблокированных в системе средств. Задержка позволяет другим участникам отменить решения и вывести средства.
Команда проекта также анонсировала большую распродажу токенов MKR, доходы от которой позволили бы закрыть дыру. Аукцион состоялся, покупателями выступили аффилированные с командой разработчиков анонимные инвесторы.
Некоторые полагают, что среди них могли быть Coinbase и Circle, поскольку стейблкоин USDC затем добавили в обеспечение DAI. Возможно, участие приняли и инвесторы проекта Paradigm и Dragonlfy, которые ранее инвестировали $27,5 млн в MakerDAO.
Некоторые регуляторы считают MKR ценной бумагой. Распродажа может привлечь их внимание, а проблемы MakerDAO безусловно отразятся на всем DeFi-секторе.
Генеральная репетиция
14 февраля была совершена транзакция, затронувшая сразу семь DeFi-проектов. Затраты атакующего составили около $8 на комиссию сети, полученная прибыль оценивается в $350 тысяч.
В ходе атаки цена биткоина по отношению к эфиру на бирже Uniswap выросла втрое. Спонсором дампа и главным пострадавшим стал протокол для маржинальной торговли bzx.
Uniswap – это автоматический пул ликвидности, цена на котором рассчитывается по простой формуле и сильно растет на больших объемах.
При торговли с плечом трейдер берет заем на покупку актива, рассчитывая на его рост. Если цена выросла, актив продается, а разницу, оставшуюся после возврата долга и уплаты процентов, трейдер кладет себе в карман. Если цена падает, он берет на себя убытки. При этом средства контролируются смарт-контрактом.
Смарт-контракт купил BTC более чем на $1,5 млн при создании короткой позиции с пятикратным плечом. Разработчики bzx не проверили обеспечение позиции, будучи уверены, что никто в здравом уме не будет рисковать 1300 ETH.
Но задумка атакующего заключалась в манипуляции ценой биткоина на Uniswap. Он продал 112 BTC на 63% дороже рынка, выручив $700 тысяч.
Разбираем атаку
Атакующий использовал новый инструмент flash loan — это мгновенный заем, который возвращается в той же транзакции, в которой был выдан. Если деньги не будут возвращены, контракт автоматически отменит все изменения.
Это дает возможность безопасно выдавать займы без обеспечения. Обычно flash loan используется для арбитража или ликвидаций: покупаешь дешевле, а продаешь дороже. В «черный четверг» flash loan тоже активно использовался для спасения залогов.
Однако взломщик действовал иначе. Он взял заем на 10 000 ETH ($2,8 млн на тот момент) на платформе dydx и разделил его на две части. Первую часть он направил на bzx для осуществления манипуляции, а вторую использовал для арбитража.
Flash loan позволил атакующему существенно удешевить атаку. Хакеру не нужно было искать большую сумму, и он сэкономил на необходимости отмыть эти деньги. Кроме того, сам заем обошелся фактически бесплатно.
In the wake of the «Black Thursday» events, what does #DeFi build next? 🧐
Read the hot take by @lemiscate on our blog: https://t.co/XJFdKjtsML
— Aave (@AaveAave) March 14, 2020
17 февраля после восстановления работы протокол bzx вновь подвергся атаке. На этот раз с помощью flash loan злоумышленник манипулировал ценой стейблкоина sUSD,. Протокол в итоге выдал необеспеченный заем. Ущерб оценили в $650 тысяч.
Как сработали оракулы?
Для расчета залогов в DeFi используют курсы криптовалют, часто подтягиваемые с децентрализованных бирж. Из-за низкой ликвидности на таких площадках котировками легко манипулировать.
Разработчики bzx использовали информацию от агрегатора ликвидности Kyber, но после атаки решили подключиться к сети оракулов Chainlink. В ней участники собирают курсы с различных бирж и записывают в сеть Ethereum. Цены усредняются, чтобы обезопасить систему от ложной информации.
Chainlink на фоне паники на рынке заняла 22% пропускной способности Ethereum и ей пришлось снизить необходимое для консенсуса количество голосов с 21 до 7.
At one point the requester (Chainlink team) was submitting so many request transactions that it was actually consuming 22% of Ethereum’s total bandwidth, compounding the problem even furtherhttps://t.co/sSuwgJyrW6
— ChainLinkGod.eth (@ChainLinkGod) March 14, 2020
After the Ethereum network congestion issues on Black Thursday, it looks like the parameters on some https://t.co/hO9I0FPjb2 price feeds have changed
ETH/USD & BTC/USD
Deviation to update:
0.5% -> 1%
Min threshold to start aggregation:
14 -> 7 nodes$ETH $LINK
More below 👇 pic.twitter.com/2OiiaRFq0Q— ChainLinkGod.eth (@ChainLinkGod) March 14, 2020
MakerDAO использует собственную сеть оракулов, в которой данные собираются с различных бирж и усредняются в смарт-контракте. Эта система очень дорого обходится, и разработчики хотят ее обновить. Это повлияет на весь сектор, поскольку многие DeFi-протоколы используют оракулов MakerDAO.
Что же делать DeFi-сектору?
Описанные атаки показали, что DeFi-протоколы неустойчивы в условиях повышенной волатильности. В таким периоды сложные формулы в основе их алгоритмов перестают работать.
Важной частью аудита безопасности таких протоколов должно стать нагрузочное тестирование, которое покажет, как смарт-контракты поведут себя в экстремальной ситуации.
Monkey testing — проверка поведения системы, с которой совершают на первый взгляд бессмысленные действия. Такие проверки помогают открыть новые векторы атак, которые могут стать актуальными с появлением новых схем, таких как flash loan.
DeFi подразумевает коллективное управление. Чем выше уровень децентрализации, тем больше времени требуется на принятие решений.
Некоторые системы можно поставить на паузу, чтобы обезопасить средства. Но любая остановка чревата потерями, когда рынок нестабилен. Многие команды уже изменили лимиты, чтобы затруднить манипуляции.
- MakerDAO понадобилось 24 часа, чтобы изменить настройки после атаки.
- Уязвимость в протоколе bzx привела к том, что 16 часов под угрозой находилось более $2 млн.
- В Compound обновили систему, дав большие права команде разработчиков в случае аварии.
- В Compound подготовили алгоритм действий на случай аварийной остановки MakerDAO — протокол прекратит использовать курсы с Maker.
- В dydx повысили пороги для торгов.
Всегда нужно иметь запасной план на случай, если потерь избежать не удалось.
Разработчики bzx после трехнедельной паузы опубликовали пост с описанием атаки и мер по ликвидации последствий. В документе приводятся довольно смелые прогнозы на 265 лет вперед. Текст опубликовали за три дня до падения рынков, возможно оценки придется скорректировать.
Traders may now close their position. The audited changes have been made.
Mea Culpa: A New Beginning, the post-attack report, has been released. You can read it along with the the audit report 👇https://t.co/vMG6d1eTsI#defi #ethereum
— bZx (@bzxHQ) March 10, 2020
Итоги
Ликвидаторы при атаке на MakerDAO не справились со своими обязанностями. Ошибка в общем коде не позволяла принимать пользователям участие в аукционе. Вероятно, негативный опыт простимулирует появление альтернативных клиентов, ведь для большинство DeFi-протоколов сейчас написаны лишь официальные библиотеки.
Можно предположить, что наказания для участников, которые отвечают за работоспособность системы, тоже станут дополнительной мерой безопасности.
Появление таких инструментов как flash loan, вероятно, приведет к введению лимитов и следовательно — необходимости KYC. Однако в DeFi участниками являются и смарт-контракты, поэтому можно скорее говорить о появлении рынка доверия и репутации.
Разработчики основных протоколов постараются наполнить фонды для защиты от будущих атак. Лицензирование участников может стать одним из способов монетизации.
Для принятия решений будут требоваться все больше данных, оракулы будут усложняться и брать на себя функции контроля рисков.
Все это создаст новые вызовы в контексте производительности, и DeFi может мигрировать на решения второго уровня.
Подписывайтесь на новости ForkLog в Telegram: ForkLog Feed — вся лента новостей, ForkLog — самые важные новости и опросы.
Рассылки ForkLog: держите руку на пульсе биткоин-индустрии!