Bybit. Взлом, который вам стоит запомнить. Детальный мета-анализ атаки и методы противодействия
Знать сей случай надо: хотя бы по той причине, чтобы осознать, что никаких резервов 1:1 у бирж нет, а их сотрудники - не компетентны буквально во всём.
Собрал эту статью больше для себя, т.к. на сегодня все сыщики, крипто-исследователи, различные компании, биржи и т.д. обсуждают совершенно не те аспекты, которые стоило бы.
Начнём в этот раз потому неожиданно - с начала.
Мета-анализ
Я не буду использовать ничего, кроме публичных данных, чтобы каждый мог верифицировать всё написанное, потому как это - один из самых крупных взломов за всю историю. В каждом разделе ссылки будут даны отдельно.
Как же произошёл взлом?
- x.com/blainemalone/status/1893308053631705106 - визуализация
- x.com/pcaversaccio/status/1893378769378848932 - описание алгоритма безопасносго использования подписей
- x.com/dhkleung/status/1893073692374245500 - разбор атаки
- chainabuse.com/report/b87c8824-8f5c-434a-a595-b7b916f641ad - перечень кошельков
С помощью анализа ончейн-сигнатур SlowMist было выявлено несколько следов:
- Развёртывание вредоносного контракта: в UTC 2025-02-19 07:15:23 злоумышленник развернул вредоносный контракт: 0xbDd077f651EBe7f7b3cE16fe5F2b025BE2969516.
- Далее было произведено вмешательство в логику безопасного контракта: в UTC 2025-02-21 14:13:35 злоумышленник заменил контракт SAFE на вредоносную версию 0x46deef0f52e3a983b67abf4714448a41dd7ffd6d32d32da69d62081c68ad7882, подписав транзакцию с тремя аккаунтами-владельцами.
- Это позволило определить начальный адрес атаки: 0x0fa09C3A328792253f8dee7116848723b72a6d2e.
- Встраивание вредоносной логики: используя DELEGATECALL, злоумышленник внедрил вредоносный контракт в слот STORAGE 0 по адресу 0x96221423681A6d52E184D440a8eFCEbB105C7242.
- Выполнение функций бэкдора для перевода средств: злоумышленник использовал функции sweepETH и sweepERC20 в рамках вредоносного контракта для перевода 400 000 ETH и stETH (на общую сумму около 1,5 млрд долларов) из холодного кошелька на неизвестные адреса.
С технической точки зрения эта атака имеет общие черты со взломами WazirX и Radiant Capital, поскольку все три инцидента были направлены на кошельки Safe multisig.
Для взлома Radiant Capital, согласно официальному раскрытию, злоумышленник использовал сложный метод, который обманул верификатор подписей и отобразил на фронтенде кажущиеся легитимными транзакции. Этот подход схож с деталями, раскрытыми в посте:
medium.com/@RadiantCapital/radiant-post-mortem-fecd6cd38081.
Более того, во всех трёъх инцидентах использовался один и тот же механизм проверки разрешений во вредоносных контрактах, где адреса владельцев были жъстко закодированы для проверки вызывающих контракт лиц.
Кроме того, сообщения об ошибках, выдаваемые при проверке прав доступа в хаках Bybit и WazirX, также были похожи.
В данном случае проблема была связана с манипуляцией фронтендом, который был изменён для обмана пользователей. Это не единичный случай. За последний год хакеры использовали этот метод для атак на множество платформ, в том числе:
- WazirX - потеря $230 млн (Safe multisig)
- Radiant Capital - потеря $50 млн (безопасный мультисигнал)
- DMM Bitcoin - потеря $305M (Gonco multisig).
Согласно официальному заявлению компании Bybit нужно ответить на следующие вопросы:
- Получил ли злоумышленник данные о внутренних финансовых операциях Bybit заранее, что позволило ему определить время перевода ETH в холодный кошелек с несколькими подписями?
- Через систему SAFE злоумышленник обманом заставил подписывающих лиц одобрить вредоносные транзакции с помощью поддельного интерфейса?
- Была ли взломана и захвачена фронтенд-система SAFE?
- Видели ли подписанты правильный адрес и URL-адрес в интерфейсе SAFE, неосознанно подписывая измененные данные транзакции?
- Кто первым инициировал запрос на подписание? Насколько безопасным было устройство (для подобной подписи)?
Но на данный момент полных ответов на данные вопросы от биржи нет. Продолжим компоновать поэтому то, что есть…
Согласно данным независимого исследователя dhkleung, цитирую: “Эта атака очень сложна. Злоумышленники обладают глубокими техническими знаниями о внутренней работе EVM. Самое пугающее заключается в том, что злоумышленники, похоже, также очень хорошо понимали внутренние операции компании Bybit”.
И далее он задаётся теми же вопросами, что и любой здравомыслящий человек: “Как все “красные флаги” во вредоносном переводе ERC-20 смогли пройти все ручные и системные проверки? Как можно было (вообще) предотвратить атаку?”
Какие же рекомендации выдаёт исследователь?
- Выполняйте моделирование транзакций ДО подписания любой транзакции. Делайте прерывание при (любых) неожиданных изменениях.
- Требуйте подтверждения баланса от леджера перед подписанием транзакций.
- Определите строгую политику движения средств по кошелькам (например, внутренние кошельки могут переводить средства только на внутренние кошельки).
Но далее он сам подчёркивает, что даже эти меры безопасности не применяются биржами (и другими участниками рынка).
Теперь давайте разберём, как с его точки зрения произошла атака…
В общих чертах, взлом включал в себя 4 широкие группы событий:
- Атакующий развернул контракт с трояном и контракт с бэкдором.
- Злоумышленник обманул подписантов мультисиг («холодного») кошелька, чтобы они санкционировали вредоносный перевод ERC-20 на троянский контракт.
- Вместо передачи токенов троянский контракт подменил копию реального контракта Safe multisig implementation контрактом с бэкдором, который контролировался злоумышленником.
- Злоумышленник вызвал команды sweepETH и sweepERC20, чтобы слить с кошелька все ETH, mETH, stETH и cmETH.
- Адрес атакующего деплойера: etherscan.io/address/0x0fa09c3a328792253f8dee7116848723b72a6d2e
- Контракт-троян: etherscan.io/address/0x96221423681a6d52e184d440a8efcebb105c7242
- Контракт-бэкдор: etherscan.io/address/0xbDd077f651Ebe7f7b3cE16fe5f2b025be2969516
- Транзакция замены: etherscan.io/tx/0x46deef0f52e3a983b67abf4714448a41dd7ffd6d32d32da69d62081c68ad7882
- Safe-деплойер: etherscan.io/address/0x34cfac646f301356faa8b21e94227e3583fe3f5f
- Bybit - холодный кошелёк: etherscan.io/address/0x1Db92e2EebC8E0c075a02Bea49a2935Bcd2dFcF4
И далее исследователь утверждает, что “появились сообщения о том, что устройства, использовавшиеся для авторизации перевода ERC-20 на мультисиг-кошелек, были взломаны. Эта версия вполне вероятна, поскольку указанный перевод был весьма необычным. Маловероятно, что подобная транзакция обошла бы типичные меры безопасности операций:
- Перевод осуществляется на не верифицированный контракт, который даже не соответствует стандарту ERC-20.
- В переводе участвует 0 токенов.
- Транзакция представляет собой операцию вызова делегата”.
Более того: любой из этих признаков должен быть достаточным для того, чтобы спровоцировать событие остановки процесса подписания. (Прим. Menaskop: но подписанты этого не сделали).
Таким образом, транзакция была проведена (авторизована), а получателем передачи токена ERC-20 стал контракт бэкдора.
Далее: “Получив сигнатуры, злоумышленник вызывает метод execTransaction на Safe, который запускает вредоносный перевод ERC-20 по троянскому контракту. Сам по себе вредоносный перевод ERC-20 не делает ничего особенного. Он выполняет несколько проверок, а затем сохраняет адрес получателя в слоте хранения 0”.
И после этого он задаёт разумный вопрсо: “Мы уже знаем, что получателем является контракт с бэкдором, так что именно он и будет храниться. Но на каком контракте? Вспомните, что транзакция была настроена как операция вызова делегата. Это указывает виртуальной машине Ethereum (EVM) хранить данные не на контракте бэкдора, а на контракте холодного кошелька, перезаписывая то, что было на контракте холодного кошелька. Что такого особенного в слоте хранения 0?” (Можете изучить по ссылке).
И, наконец: “Поскольку кошелек multisig обновился через прокси-контракт, его контракт должен откуда-то загружать код. В коде прокси-сервер загружает фактическую реализацию multisig, называемую master-copy. Где находится мастер-копия? В слоте хранения 0. В результате кошелек multisig был «модернизирован» для использования контракта с бэкдором… Итак, обманом заставив подписантов mutisig санкционировать вредоносную передачу ERC-20 через вызов делегата, злоумышленник подменил код кошелька multisig своим собственным контрактом с бэкдором”.
Интересно, что исследователь записал буквально следующее: “Контракт с бэкдором (до смешного короткий и выполняет всего две основные функции:
- Передача всех ETH выбранному злоумышленником получателю.
- Передача любого токена ERC-20 в любом количестве получателю по выбору злоумышленника”.
То есть операция по подмене выглядит громоздкой, но сам перевод - нет, поскольку он выполняет то, что большинство дрейнеров, например.
Теперь рассмотрим дополнения от другого исследователя: x.com/blainemalone/status/1893308053631705106/photo/1.
Главный вывод: “злом Bybit демонстрирует, что наиболее уязвимой частью этого потока (через) Multisig является человеческий фактор. Учитывая, что в цепочке передаётся так много ценностей, добросовестное подписание никогда не было столь важным”.
Пояснения у нго те же: “Доп. логика (без контракта):
- Функция используется для генерации данных, которые вы хотите, чтобы мультисиг выполнял.
- По умолчанию наш сейф всегда будет отправлять на адрес Multicall generateMultiCall3Calldata(actions) returns (bytes memory call data) { returns aggregate3value(Call3Value[])}.
И, наконец, разберём сообщение ещё одного исследователя: “... на самом деле всё довольно просто: пользовательский интерфейс, инфраструктура, зависимости и т. д. могут и будут повреждены. Когда вы нажимаете кнопки на аппаратном устройстве, вот тогда вам нужно быть на 100% уверенным в том, что вы подписываете. САМАЯ важная часть — это экран на вашем аппаратном устройстве и то, что он отображает, и что вы на 100% понимаете, что это значит. Если вы не уверены на 100%, не нажимайте кнопки. НИКОГДА. Людям нужно стать параноиками. Им нужно понять, что вы в одной подписи от того, чтобы стать (владельцем огромной утраты). Это, по моему скромному мнению, как минимум 80% мышления. Такова цена суверенности и асимметричной криптографии. Как упростить проверку — это другой вопрос, или какие ограждения следует построить. Приоритет № 1 — вы ВСЕГДА понимаете, ЧТО вы подписываете”.
Выводы по первой части взлома
Я привожу лишь личную позицию, основанную на фактах выше:
- Команда Bybit НЕ изучала взломы, которые были ранее сделаны по похожей схеме, в частности Radiant и другие, т.е. здесь видна халатность команды.
- В видео-объяснении становится ясно, что CEO биржи не может адекватно и формально-точно рассказать о подписании транзакций, а также прямо подтверждает, что данные для подписи не совпадали. Это опять же интерпретируется мной как халатность со стороны команды и CEO именно.
- Кроме того, по данным разных исследователей, SAFE взломан не был, а была проведена подмена контракта именно через подписантов от Bybit, т.е. это не взлом как HACK, а взлом на базе социальной инженерии.
- Было ли заражение устройств или нет;
- Стоят ли за взломом Lazarus или нет;
- Почему именно все подписанты попались на уловки хакеров…
Всё это и многое другое - остаётся за завесой тайны, т.к. публичных данных или нет. Или они недостаточны для проведения объективного анализа. Но пройдёмся по второй части7
Распределение средств
- slowmist.medium.com/slowmist-hacker-techniques-and-questions-behind-bybits-nearly-1-5-billion-theft-09f0b59da2e2 - базовый отчёт
Итак, всё началось 21 февраля 2025 года, когда известный крипто-сыщик ZachXBT указал на масштабный отток средств с платформы Bybit. В результате этого инцидента было похищено более 1,46 миллиарда долларов, что стало крупнейшей кражей криптовалюты за последние годы.
Согласно анализу, проведённому командой SlowMist, похищенные активы в основном включают:
- 401 347 ETH (~$1,068 млрд.)
- 8 000 mETH (~$26 миллионов)
- 90,375.5479 stETH (~$260 миллионов)
- 15,000 cmETH (~$43 миллиона)
Был использован инструмент отслеживания misttrack.io для анализа начального адреса предполагаемых хакеров 0x47666Fab8bd0Ac7003bce3f5C3585383F09486E2: с первоначального адреса произошло распределение 400 000 ETH по 40 адресам, каждый из которых получил 10 000 ETH, и переводы после этого продолжились.
Из этих средств 205 ETH были обменены на BTC через Chainflip и привязаны к адресу bc1qlu4a33zjspefa3tnq566xszcr0fvwz05ewhqfq.
15 000 cmETH было передано по адресу 0x1542368a03ad1f03d96D51B414f4738961Cf4443. Примечательно, что mETH Protocol опубликовал сообщение на сайте X, в котором говорится, что в ответ на инцидент с Bybit команда оперативно приостановила вывод средств в cmETH, предотвратив несанкционированные транзакции. В результате mETH Protocol успешно вернул 15 000 смЕТХ с адреса хакера.
8 000 mETH и 90 375,5479 stETH были переведены на адрес 0xA4B2Fd68593B6F34E51cB9eDB66E71c1B4Ab449e.
Затем они были обменены на 98 048 ETH через Uniswap и ParaSwap, после чего были перемещены на адрес 0xdd90071d52f20e85c89802e5dc1ec0a7b6475f92.
Адрес 0xdd9 далее распределил ETH по 9 адресам, каждый из которых получил по 10 000 ETH, при этом дальнейших переводов пока не наблюдалось.
Начальный адрес атаки: 0x0fa09C3A328792253f8dee7116848723b72a6d2e пополнили с Binance.
Первоначальный адрес хакера 0x47666Fab8bd0Ac7003bce3f5C3585383F09486E2 в настоящее время имеет баланс в 1 346 ETH.
Используя MistTrack для анализа, мы также обнаружили связь между адресами хакеров в этом инциденте и адресами, связанными с хакерами BingX и Phemex.
Выводы по второй части
Мы видим, что отмыв происходит через:
Конечная цель - это фиат. Хотя Отсюда вывод может быть простой: средства могут проходить режим “отмыва” несколько лет и точная их идентификация зависит от множества факторов.
Здесь биржа, правда, постаралась и объявила награду в целых 10% от суммы взлома: при условии розыска и возврата средств, а это почти $150M.
Итоги по этой части
Мета-анализ мой не завершён, а лишь начат. Но что могу сказать сегодня?
На мой взгляд это тот случай, когда биржа виновата на 99% хотя сама атака была сложна и продумана. Почему?
- Никаких мер безопасности по уже известным случаям взлома предусмотрено просто не было, а действия, которые совершала команда - похожи не на действия профессионалов, которые распоряжаются миллиардами чужих средств, а новичков, которым плевать на то, чьи это деньги.
- В частности, должна была быть внедрена дополнительная проверка подписей - через эксплорер и/или любым иным подобным способом.
- Наконец, СМИ разнесли весь об атаке, но в 2-х аспектах: а) виноваты Lazarus (хотя это всё ещё предмет обсуждений); б) Bybit молодцы, что не допустили кризиса ликвидности (хотя это их прямая обязанность, которая одна из десятка таковых была выполнена).
Далее? Следим за делом. Делимся фактами. И делаем выводы. А пока всё и