How a Solana feature designed for convenience let attackers drain more than $270 million from Drift
Как функция Solana, предназначенная для удобства, позволила злоумышленникам вывести более 270 миллионов долларов из Drift
Злоумышленник вывел не менее 270 миллионов долларов из протокола Drift на Solana, воспользовавшись легитимной функцией под названием «прочные nonce» (durable nonces), а не эксплуатируя ошибку в коде или украденные ключи.
Подделав две вводящие в заблуждение авторизации от пяти членов Совета безопасности (Security Council) протокола Drift, злоумышленник предварительно подписал транзакции, которые оставались действительными более недели, а затем использовал их для захвата контроля над протоколом в считанные минуты.
Этот инцидент, затронувший все депозиты пользователей в Drift и перенаправивший средства через NEAR, Backpack, Wormhole и Tornado Cash, подчеркивает, что социальная инженерия и операционные ошибки, особенно в отношении обработки прочных nonce, становятся ведущим вектором угроз в DeFi.
Атака на протокол Drift не была хакерской атакой в традиционном смысле.
Никто не обнаружил ошибку или не взломал закрытый ключ. Не было использовано манипулирование оракулом или эксплойт с использованием флэш-займов.
Вместо этого злоумышленник использовал легитимную функцию Solana под названием «прочные nonce», чтобы обманом заставить Совет безопасности Drift предварительно одобрить транзакции, которые должны были быть выполнены через недели, в то время и в контексте, которые подписавшие лица не предполагали.
В результате была осуществлена кража не менее чем на 270 миллионов долларов, которая заняла менее минуты для выполнения, но более недели для подготовки.
В Solana каждая транзакция включает в себя «недавний хэш блока» (recent blockhash), который по сути является меткой времени, доказывающей, что транзакция была создана недавно. Этот хэш блока истекает примерно через 60-90 секунд. Если транзакция не отправлена в сеть в течение этого периода, она становится недействительной. Это функция безопасности, которая помогает предотвратить повторное использование старых, устаревших транзакций.
Прочные nonce отменяют эту функцию безопасности. Они заменяют истекающий хэш блока фиксированным «nonce» — одноразовым кодом, хранящимся в специальном ончейн-аккаунте, который поддерживает действительность транзакции неопределенно долго, пока кто-нибудь не решит ее отправить.
Эта функция существует по легитимным причинам. Аппаратные кошельки, автономные системы подписи и институциональные решения для хранения данных нуждаются в возможности подготовки и утверждения транзакций без необходимости отправлять их в течение 90 секунд.
Однако неограниченно действительные транзакции создают проблему. Если кто-то подписывает транзакцию сегодня, ее можно выполнить на следующей неделе или в следующем месяце, в соответствии с жестко закодированными правилами системы. Подписавший не может отозвать свое одобрение после его предоставления, если только аккаунт nonce не будет вручную обновлен, что большинство пользователей не отслеживают.
Протокол Drift управлялся «многоподписной системой Совета безопасности» (Security Council multisig), в которой несколько человек (в данном случае пять) совместно контролируют систему, и любое действие требует одобрения не менее двух из них. Многоподписные системы являются стандартной практикой безопасности в DeFi, где идея заключается в том, что компрометация одного человека недостаточно для кражи средств.
Но злоумышленнику не нужно было компрометировать ключи никого. Ему требовалось всего две подписи, и, похоже, он получил их с помощью того, что Drift описывает как
23 марта было создано четыре постоянных аккаунта с одноразовыми ключами. Два из них были связаны с законными членами Совета безопасности Drift. Два аккаунта контролировались злоумышленником. Это означает, что злоумышленник уже получил действительные подписи от двух из пяти членов совета и зафиксировал их в постоянных транзакциях с одноразовыми ключами, которые не истекали.
27 марта Drift провела запланированную миграцию Совета безопасности для замены одного из членов. Злоумышленник адаптировался. К 30 марта появился новый постоянный аккаунт с одноразовым ключом, связанный с членом обновленной мультиподписи, что указывает на то, что злоумышленник повторно получил необходимый порог одобрения в два из пяти голосов в новой конфигурации.
Сначала Drift провела законное тестовое снятие средств со своего страхового фонда. Примерно через минуту злоумышленник отправил предварительно подписанные постоянные транзакции с одноразовыми ключами. Двух транзакций, расположенных на расстоянии четырех слотов в блокчейне Solana, было достаточно для создания и утверждения вредоносной административной транзакции, а затем для ее утверждения и выполнения.
В течение нескольких минут злоумышленник получил полный контроль над разрешениями протокола Drift. Он использовал этот контроль для внедрения механизма мошеннического вывода средств и опустошения хранилищ.
Исследователи, анализирующие данные блокчейна, отслеживали потоки средств в режиме реального времени. Разбивка украденных активов, составленная специалистом по безопасности Владимиром С., составила примерно 270 миллионов долларов в различных токенах.
Наибольшую долю составляли 155,6 миллиона долларов в токенах JPL, за которыми следовало 60,4 миллиона долларов в USDC, 11,3 миллиона долларов в CBBTC (биткоин, обернутый Coinbase), 5,65 миллиона долларов в USDT, 4,7 миллиона долларов в обернутом эфире, 4,5 миллиона долларов в DSOL, 4,4 миллиона долларов в WBTC, 4,1 миллиона долларов в FARTCOIN и меньшие суммы в JUP, JITOSOL, MSOL, BSOL, EURC и других.
Основной кошелек, через который были выведены средства, был пополнен за восемь дней до атаки через протокол NEAR, но оставался неактивным до дня исполнения. Украденные средства были переведены на промежуточные кошельки, которые были пополнены всего за день до этого через Backpack, децентрализованную криптовалютную биржу, требующую верификации личности, что может дать следователям зацепку.
Оттуда средства были переведены на адреса Ethereum через Wormhole, кросс-чейн мост. Эти адреса Ethereum были предварительно пополнены с использованием Tornado Cash, сервиса для обеспечения конфиденциальности, находящегося под санкциями.
Он раскритиковал Circle, централизованного эмитента USDC, за то, что компания не заморозила украденные средства в течение шестичасового периода после начала атаки, примерно в полдень по восточному времени.
Атака также напомнила о недавних попытках социальной инженерии, использующих тактики, аналогичные тем, что были замечены ранее, согласно.
То, что не сработало, – это человеческий фактор, окружающий мультиподпись. Постоянные одноразовые ключи позволили злоумышленнику разделить момент одобрения и момент выполнения более чем на неделю, создав промежуток времени, в течение которого контекст подписанного документа больше не соответствовал контексту, в котором он использовался.
Все депозиты в продуктах заимствования и кредитования Drift, депозиты в хранилищах и торговые средства затронуты. Токены DSOL, не размещенные на платформе Drift, включая активы, стейкнутые валидатору Drift, не затронуты. Активы страхового фонда выводятся и обеспечиваются сохранностью. Протокол заморожен, а скомпрометированный кошелек удален из мультиподписи.
Таким образом, это уже третий крупный инцидент за последние месяцы, который не был связан с уязвимостью в коде. Социальная инженерия и недостатки операционной безопасности, а не ошибки в смарт-контрактах, все чаще становятся причиной утечки средств из DeFi-протоколов.
Вектор "durable nonce" особенно опасен, поскольку он использует функцию, которая существует по определенной причине, и против которой трудно защититься без фундаментального изменения принципов работы мультиподписи в Solana.
Открытым остается вопрос, который Drift должен будет осветить в своем подробном отчете о произошедшем: как два разных участника мультиподписи одобрили транзакции, которые они не понимали, и могли ли какие-либо изменения в инструментах или интерфейсе выявить транзакции с использованием "durable nonce" и потребовать дополнительной проверки.
Предположительно, хакеры из Северной Кореи стоят за взломом протокола Drift на сумму 286 миллионов долларов.