От предподписи до утраты прав: почему защитные линии Drif оказались неэффективными?
Автор: Four Pillars
Составлено: AididiaoJP, Foresight News
Ключевые моменты
1 апреля 2026 года в 16:05 (UTC) протокол Drift подвергся серьезной атаке на сумму около 285 миллионов долларов. Drift является децентрализованным обменом вечных контрактов в экосистеме Solana. Эта атака представляет собой сложную схему манипуляции залогами: злоумышленник использовал утеченные ключи администратора для создания нового спотового рынка для токена без ценности, затем отключил механизм защиты вывода и в конце подделал ценность залога для вывода реальных активов.
Эта атака сочетала в себе предподписанную технологию на основе постоянных случайных чисел и продвинутые методы социальной инженерии. С 23 марта злоумышленник создал учетные записи постоянных случайных чисел для двух подписантов многофакторной подписи и двух счетов, контролируемых злоумышленниками. Даже после того, как 27 марта протокол выполнил законную многофакторную миграцию, злоумышленник все равно успешно восстановил доступ к новым подписантам многофакторной подписи. Злоумышленник получил предподпись от законных подписантов, вводя в заблуждение содержанием транзакции, сохранил ее с помощью постоянных случайных чисел и выполнил массовые действия 1 апреля, в конечном итоге захватив права администратора. Это событие не связано с утечкой мнемонических фраз или уязвимостями смарт-контрактов.
Это событие является еще одной значительной ошибкой в операционной безопасности, которая произошла всего через 10 дней после атаки Resolv. Крах Resolv произошел из-за того, что он совершенно не установил механизм многофакторной подписи; хотя Drift и имеет многофакторную подпись, но из-за слишком низкого порога и отсутствия дополнительных мер безопасности также потерпел неудачу. Эти два события вместе показывают, что необходимо срочно пересмотреть привилегированную архитектуру.
Обзор событий
Источник: @DriftProtocol
1 апреля 2026 года в 16:05 (UTC) децентрализованный обмен вечных контрактов Drift на Solana подвергся масштабной атаке. Drift — это протокол, предоставляющий услуги по торговле с кредитным плечом, спотовой торговле, кредитованию и другим видам децентрализованных финансов, его архитектура сочетает в себе виртуальных автоматических маркетмейкеров и онлайновую книгу заказов. Непосредственно перед атакой общая заблокированная ценность протокола составляла примерно 309 миллионов долларов.
Источник: @PeckShieldAlert
Примерно в 18:10 (UTC) через два часа после начала атаки команда Drift опубликовала сообщение на платформе X, призвав пользователей приостановить депозиты. Затем команда подтвердила факт атаки и приостановила все функции депозитов и выводов. По оценкам нескольких компаний по безопасности и цепочечной аналитике, включая PeckShield и Lookonchain, убытки составляют около 285 миллионов долларов. Кошелек Phantom быстро принял меры и заблокировал доступ к этому протоколу.
Это событие привлекло особое внимание, потому что оно произошло всего через 10 дней после инцидента с атакой Resolv, став еще одним крупным инцидентом утечки ключей администратора, который произошел за короткий промежуток времени. Оба события имеют общие корни: основная причина заключается не в уязвимости кода смарт-контракта, а в ошибках в области операционной безопасности.
Анализ коренной причины
Суть этой атаки заключается в том, что злоумышленник использовал утеченные права администратора для манипуляции залогами. Если инцидент с Resolv связан с утечкой ключей, обладающих правами на эмиссию, то инцидент с Drift — это утечка ключей, обладающих правами на запуск рынка и настройки безопасности. Оба события имеют разные проявления, но корни одинаковы. Ниже будет проведен поэтапный анализ процесса атаки.
Источник: Dexscreener
Самым непосредственным инструментом атаки был токен CarbonVote (CVT), токен с очень низкой ликвидностью. Один из адресов, контролируемых злоумышленниками (FnYXwy...LpAjjx), выпустил этот токен за три недели до атаки. Общая эмиссия CVT составляет примерно 750 миллионов токенов, из которых более 80% находятся в кошельке злоумышленника. Злоумышленники создали на Raydium минимальный ликвидный пул стоимостью около 500 долларов, после чего провели серию операций по увеличению объема торговли.
Функция initializeSpotMarket в протоколе Drift позволяет администратору напрямую указывать адрес оракула и его параметры. Изучив конфигурацию существующего программного пакета для спотовых рынков, можно заметить, что каждый рынок отдельно определяет оракула, источник оракула и поля для эмиссии токенов. Это означает, что даже такие токены, как CVT, которые не имеют цен от Pyth, могут быть выведены на рынок, если злоумышленник получит права администратора.
Во время этой атаки злоумышленник назначил цену от Switchboard для рынка CVT в качестве своего оракула. Switchboard — это сеть оракулов, создание пользовательских цен относительно легко. Злоумышленник настроил цену, контролируемую им, оценивая 785 миллионов CVT в сотни миллионов долларов. Платформы для отслеживания цен, такие как Dexscreener, показывают, что цена CVT составляет около 1 доллара, но его фактическая рыночная ликвидность и внутренняя ценность практически равны нулю.
Кошелек, использованный в атаке (HkGz4K...ovpZES), впервые активировался примерно за восемь дней до этого, 24 марта. Этот кошелек планировал получить предварительный депозит через протокол NEAR, онлайновые записи показывают, что до дня атаки этот кошелек завершил 325 транзакций.
История онлайновой активности администратора, использованного в день атаки (H7PiGq...y7ZgL), также заслуживает внимания. Этот ключ зарегистрировал всего 29 транзакций. Первая транзакция произошла 31 марта в 15:05 (UTC), за день до атаки; последняя транзакция произошла 1 апреля в 18:05 (UTC), в день атаки. Общее время существования этого ключа в сети составляет примерно 27 часов. Причины этого можно четко увидеть в онлайновых записях.
Права администратора протокола Drift не управляются одной внешней учетной записью, а реализуются через механизм многофакторной подписи. Однако последующее расследование выявило, что путь атаки намного сложнее простой инвазии многофакторной подписи. Примерно за девять дней до атаки злоумышленник создал четыре учетные записи постоянных случайных чисел. Две из них были связаны с подписантами многофакторной подписи комитета безопасности Drift, а две другие контролировались злоумышленниками. Постоянные случайные числа — это механизм на Solana, который может обойти обычный временной лимит в одну минуту для блок-хэшей, позволяя заранее собирать подписи и выполнять их позже. Предполагается, что злоумышленник использовал этот механизм, чтобы получить предподпись от законных подписантов, вводя их в заблуждение о содержании транзакций.
Через четыре дня команда Drift провела запланированную миграцию многофакторной подписи из-за изменений среди членов комитета по безопасности. Эта миграция была частью обычной процедуры, но злоумышленник успешно адаптировался к этому изменению.
За день до атаки злоумышленник создал новую учетную запись постоянных случайных чисел для одного из подписантов после миграции многофакторной подписи (6UJbu9...Pvu924). На тот момент злоумышленник вновь восстановил действующий доступ к двум из пяти подписантов в обновленной многофакторной подписи. Это указывает на то, что злоумышленник глубоко проник в систему и даже смог справиться с неожиданными изменениями, такими как миграция многофакторной подписи.
В день атаки команда Drift провела тестовый вывод из страхового фонда. Примерно через минуту злоумышленник быстро выполнил две заранее подписанные транзакции постоянных случайных чисел.
Источник: solscan
Первая транзакция была выполнена на многофакторной подписи Squads с командами VaultTransactionCreate, ProposalCreate и ProposalApprove, создав зловредное предложение на передачу прав администратора и зарегистрировав первое одобрение.
Затем вторая транзакция с использованием постоянных случайных чисел выполнила команды ProposalApprove и VaultTransactionExecute. Порог в две пятых был достигнут, и поскольку временной замок был установлен на ноль секунд, транзакция была немедленно выполнена. В это время в программе Drift V2 была вызвана команда UpdateAdmin, которая передала адрес администратора злоумышленнику (H7PiGq...y7ZgL).
Ключевой момент заключается в том, что обе транзакции были полностью подписаны заранее и массово отправлены в день атаки. Подписанты, вероятно, не полностью понимали содержание транзакций, которые они подписывали. Использование Drift командой термина «ошибка в транзакции» указывает на то, что подписанты были обмануты, подписав зловредные транзакции по передаче прав администратора, замаскированные под обычные операции. Постоянные случайные числа играют роль в том, чтобы хранить эти предподписи неограниченно, позволяя злоумышленникам выполнять их в выбранный ими момент.
Замененный администратор затем вызвал программу Drift V2 (dRifty...cn33UH) и выполнил две операции.
Источник: solscan
Во-первых, злоумышленник зарегистрировал CVT в качестве нового спотового рынка на Drift с помощью команды initializeSpotMarket. В этом процессе был создан новый аккаунт спотового рынка (BY3WYn...FVU1Cf) и два аккаунта токенов CVT, а производный адрес программы казначейства Drift (PDA, JCNCMF...XXJfrw) был установлен в качестве владельца токенов.
Drift работает на многосетевом залоговом системе, что означает, что токены, зарегистрированные на новом спотовом рынке, могут сразу использоваться в качестве залога. Однако для того, чтобы считаться квалифицированным залогом, параметры initial_asset_weight и maintenance_asset_weight данного рынка должны быть установлены на положительное значение больше нуля, в то время как значения по умолчанию значительно ниже или близки к нулю. Анализ транзакции атаки (4a5962R...st82X) показывает, что updateSpotMarketMarginWeights (или эквивалентное обновление риск-параметров) выполняется в одной и той же транзакции с initializeSpotMarket, злоумышленники устанавливают вес залога CVT на максимальное значение.
Это выявило ключевой недостаток в проектировании с точки зрения глубинной защиты: операции по запуску рынка, назначению источника оракула, настройке максимального веса залога и отключению защиты вывода могут быть выполнены в одной транзакции. Фактор скидки по весу, предназначенный для предотвращения концентрации рисков по крупным позициям, теряет свою эффективность после того, как вес сам по себе установлен на максимальное значение. Если бы эта программа установила верхний предел для весов новых созданных рынков или установила отдельный временной замок для изменения весов, то такая атака, разрушающая все меры защиты за один раз, была бы невозможна.
Источник: solscan
Во-вторых, в одной и той же транзакции злоумышленник пять раз вызвал команду updateWithdrawGuardThreshold, увеличив лимит на вывод основных активов до экстремального уровня. Лимиты всех рынков были установлены на единое значение примерно в 500 триллионов, что фактически увеличило порог защиты вывода до бесконечности, тем самым отменив механизм защиты, предназначенный для предотвращения аномально больших выводов.
Эта транзакция (4a5962R...st82X) одновременно разрушила три ключевые линии обороны Drift.
Во-первых, путем назначения цены, контролируемой злоумышленниками, от Switchboard в качестве оракула, механизм ценообразования был сломлен. Во-вторых, вес залога был установлен на максимальное значение, что привело к тому, что токен без внутренней ценности был признан качественным залогом. В-третьих, порог механизма защиты вывода был повышен до уровня около 500 триллионов, что фактически устранило механизм блокировки аномальных выводов.
Включая изменения прав администратора, злоумышленник разрушил всю безопасность протокола всего за две транзакции. С точки зрения аудита кода это создает глубокую парадоксальную ситуацию: код контракта Drift полностью работает в соответствии с тем, как это подтверждено в аудите. initializeSpotMarket по проекту зарегистрировал новый рынок, назначил источник оракула и настроил параметры веса; updateWithdrawGuardThreshold по проекту изменил лимиты. Корень проблемы заключается в самом дизайне системы — этот дизайн позволяет полностью завершить цепочку атак в одной транзакции. Это уже не относится к аудиту кода, а к области проектирования привилегированной архитектуры и параметрических ограничений.
В конечном итоге злоумышленник через недавно созданный учетный запись Drift внес около 785 миллионов CVT в качестве залога. Оценка цены оракула Switchboard, контролируемого злоумышленником, определяла эту стоимость в сотни миллионов долларов, в то время как установленный максимальный вес залога признал почти всю оценку в качестве действительного залога. Система маржи Drift работала полностью согласно проекту. Проблема заключалась в том, что каждый параметр, вводимый в эту систему, был злонамеренно манипулирован злоумышленником.
