Горячий кошелёк Binance взломан на 6,28 млрд долларов США; ончейн-отслеживание раскрывает, как злоумышленник использовал авторизацию EIP-7702 для захвата кошелька и перевёл средства до того, как Tether и другие эмитенты смогли их заморозить, что обеспечивает полную реконструкцию этого крупнейшего инцидента безопасности.
Автор: Dickson (@DicksonWuML)
Составлено: Shenchao TechFlow
Введение Shenchao: Кража из горячих кошельков Binance — крупнейшее событие на крипторынке сегодня. Инженер CertiK и член SEAL Dickson проследил ончейн-записи транзакция за транзакцией, восстановив полный процесс подготовки средств атакующим путём вывода из Tornado Cash, использования авторизации EIP-7702 для захвата Ethereum-горячих кошельков Binance и гонки против Tether, Circle и других эмитентов за заморозку средств. Суммы и время в этой статье — ончейн-статистика на момент публикации автором (около 8 утра по пекинскому времени 30 октября), время указано в UTC (+8 часов равно пекинскому времени), и ещё не подтверждено официально Binance.
Горячие кошельки Binance потеряли примерно 6,28 млрд долларов в 8 сетях сегодня. Из них 6,07 млрд долларов было выведено в первые 55 минут, после чего атакующий неоднократно опустошал один из Ethereum-кошельков более двух часов.
С тех пор Tether, Circle, Ripple, Paxos, World Liberty и Binance заморозили примерно 2,80 млрд долларов. Около 3,27 млрд долларов всё ещё могут свободно перемещаться, в основном BTC и ETH.
Я проследил весь инцидент ончейн, включая то, как атакующий перемещал средства до заморозок 🧵
Разбивка 6,28 млрд долларов (по цене на UTC 20:24):
• Ethereum 3,74 млрд долларов
• Bitcoin 18 270,2 BTC, 1,47 млрд долларов
• Tron 612,7 млн USDT + 46,4 млн TRX, 627,5 млн долларов
• XRP 233,5 млн XRP, 296,5 млн долларов
• Solana 970 522 SOL, 96,1 млн долларов
• Arbitrum 8 426 ETH + 74,6 млн ARB, 31,8 млн долларов
• Avalanche 1,81 млн AVAX + 8,41 млн USDt, 24,3 млн долларов
• Optimism 44,2 млн OP, 4,8 млн долларов
3,74 млрд долларов на Ethereum вытекли пятью партиями:
• 20:24:23, единственный sweep() на Binance 14: 167 464,25 ETH, 1,615 млрд USDT и 61 другой токен, всего 2,53 млрд долларов
• 20:41 и 20:59, 780 млн + 43 млн USDC выведены из смарт-кошелька Binance, доверявшего Binance 14, всего 822,6 млн долларов
• 20:24:47, Binance 16 подписал 9 переводов, отправленных напрямую атакующему: 28 005,6 ETH, 55,7 млн USDT, 25,9 млн RLUSD, 84,5 WBTC, 820 000 UNI, 1 199 XAUt, 18,8 млн ENA, 304 600 LINK, 583,6 млрд PEPE, всего 174,2 млн долларов
• 21:04 и 21:44, ещё два sweep Binance 14: 2 070 ETH и 204,3 млн USDT, всего 209,6 млн долларов
• 22:39, финальный sweep на новый кошелёк: 128,5 ETH и 122 токена малой капитализации, около 500 000 долларов
По активам: 1,87 млрд USDT, 823 млн USDC, 457 млн ETH (197 668 ETH), 88,5 млн RLUSD, 76,8 млн wBETH, 50,5 млн XAUt, 49,6 млн UNI, 44,7 млн ENA, 40,1 млн PEPE, 29,6 млн LINK, 27,8 млн USD1, плюс около 50 более мелких токенов.Подготовка началась за день до этого. 28 октября в 07:39 UTC главный кошелёк атакующего 0x7c8601d4645b93cea45f71e118a729332e6b5ca0 сначала вывел 0,1 ETH из Tornado Cash, затем вывел ещё дважды. Второй кошелёк затем вывел 1 ETH из Tornado и перевёл его на главный кошелёк 29 октября в 18:20.
29 октября в 02:28 они развернули контракт sweeper. С 13:51 до 16:47 они провели репетицию на собственных кошельках: используя делегирование EIP-7702, сметали тестовые USDT и USDC, затем выводили их. В 15:59 они развернули версию v2 с универсальной функцией вызова, и именно эта функция позже переместила $823 млн USDC.
В 20:04:52 UTC первый шаг не удался. XRP-кошелёк Binance отправил 42 750 000,1 RLUSD атакующему, но XRP-аккаунт атакующего ещё не существовал, поэтому перевод был возвращён.
Восемь секунд спустя 185 017 485,5 XRP было успешно переведено, тем самым создав аккаунт. К 20:09 четыре других XRP-кошелька Binance также были опустошены.
Последовала цепная реакция:
20:10 Solana, 965 455,1 SOL перемещено одной транзакцией
20:18 Optimism, 44,2 млн OP
20:20 Bitcoin, 18 270,2 BTC перемещено в 11 транзакциях и разделено на порции по 1 000 BTC в пределах одного блока
20:20–20:22 Tron, $612,7 млн USDT + 46,4 млн TRX
20:30–20:35 Arbitrum и Avalanche
Ethereum раскрыл метод атаки. В 20:20:59 атакующий отправил транзакцию, содержащую 50 авторизаций EIP-7702, все подписанные приватным ключом Binance 14, соответствующие nonce с 18 914 775 по 18 914 824.
Сам Binance 14 только что использовал 18 914 775 в 20:17:47, что указывает на то, что эти авторизации были подписаны всего за несколько минут до использования.
Авторизация с nonce 18 914 809 совпала. Собственная транзакция Binance 14 в том же блоке использовала 18 914 808, и с этого момента Binance 14 выполнял код атакующего.
В 20:24:23 один вызов sweep() вывел из него 167 464 ETH и $1,615 млрд USDT. Двадцать четыре секунды спустя Binance 16 подписал 9 переводов, отправленных напрямую атакующему. В 20:41 и 20:59 атакующий использовал Binance 14, чтобы вывести $823 млн USDC из смарт-кошелька Binance, который ему доверял.
Далее началась гонка с заморозками. Атакующий быстро разделил USDT:
• В 20:30 $500 млн USDT было переведено на 0x9749…c762. К 20:59 $325 млн из них были обменяны на ETH через RFQ-маркетмейкеров, а оставшиеся $175 млн были переведены дальше
• В 20:33 $200 млн USDT было переведено на 0x0ddf…697e. Около $10 млн было продано на DEX, а $190 млн было переведено на 0x8d53…639a, который внёс $60 млн в Aave и занял под них ETH
Первая партия блокировок Tether вступила в силу в 21:01:35: 0x5227, на котором всё ещё находилось $971 млн USDT; и 0x9749, который уже был опустошён. Circle заморозил $823 млн USDC в 21:04:59.
Часть средств ускользнула в последние секунды:• В 21:01:59 0x8d53 перевёл 130 млн USDT на 0x77ed…c3eb. Через сорок восемь секунд, в 21:02:47, Tether заморозил 0x8d53• С 21:04 по 21:06 0x77ed продал около 50 млн USDT на DEX и перевёл 80 млн на 0x7aa4…bfd1
• С 21:08 по 21:11 0x7aa4 продал ещё примерно 50 млн и вывел последние 30 млн. К моменту, когда Tether заморозил 0x7aa4 в 21:12:35, он уже был опустошён
• В 21:16:11 0xccbe…a263 вывел 30 млн. Через 36 секунд Tether заморозил 0xccbe, а в 21:18:59 перехватил 30 млн на 0xb171…c8c3
• 175 млн, выведенные 0x9749, оставались на 0xaa24…54a0 до тех пор, пока Tether не заморозил их в 21:14:59
Всего из 1,875 млрд USDT в Ethereum около 435 млн было продано до того, как чёрный список успел сработать. 1,38 млрд заморожено, а 60 млн заблокированы как залог в Aave.
Действия других эмитентов в хронологическом порядке:
• В 20:57:47 World Liberty занёс в чёрный список 48,5 млн WLFI в 0x5227
• В 21:07:55 Tether заморозил 8,41 млн USDt в Avalanche. Атакующий попытался перевести их в 21:40:47, и транзакция откатилась
• С 21:09 по 21:21 Tether заморозил 378,7 млн USDT в трёх кошельках в Tron. Ранее 234 млн уже были обменяны на TRX через SunSwap
• В 21:11:23 Tether заморозил 12 574 XAUt (около 50 млн USD)
• В 22:00:59 Ripple заморозил RLUSD. Атакующий уже перевёл их на 0xe702…958d в 21:33 и продал 48 млн в ETH, причём последний ордер на продажу и заморозка попали в один блок. 40,5 млн было перехвачено
• В 22:10:35 World Liberty заморозил 27,8 млн USD1
• В 22:30:47 Paxos заморозил 1 907 PAXG
• В 22:48:35 Binance занёс в чёрный список 29 934 wBETH (около 75 млн USD); атакующий уже перевёл их на 0x7f9d…15e3 в 21:52
3,45 млн FDUSD от First Digital по-прежнему можно переводить.
Binance 14 оставался делегирован контракту атакующего, что превратилось в перетягивание каната:
• В 21:04 и 21:44 атакующий снова провёл sweep: сначала 1 700 ETH, затем 370 ETH и 200,4 млн USDT. Эти USDT оказались в 0x5227, который уже был заморожен Tether
• В 22:06:23 Tether занёс в чёрный список сам Binance 14. Собственные переводы USDT Binance с этого адреса не прошли в 22:15 и 23:01
• В 22:39 атакующий снова провёл sweep, на этот раз в новый кошелёк: 128,5 ETH и 122 токена малой капитализации
• С 22:55 по 23:07 сам Binance опустошил Binance 14: 46 переводов токенов на Binance 8, примерно один каждые 12 секунд
• С 23:36 по 23:38 атакующий вызвал sweep() ещё четыре раза, и все четыре оказались пустыми
Вне Ethereum:
• Arbitrum, с 21:35 по 21:38: все 8 426 ETH и 74,6 млн ARB были переведены в новый кошелёк 7702 0x3e2b…32d5, который в 21:41 авторизовал ARB для торговли. По состоянию на 23:50 они всё ещё там
• Avalanche, 21:45:34: 1 813 999 AVAX были переведены на 0x8035…c397. Затем 200 005 AVAX были выведены с 0xc39e…9824, и в 23:27:35 тот же адрес получил 1 563 812,78 USDC в Ethereum через кросс-чейн-мост CCTP от Circle. Через четыре минуты, в 23:31:59, Circle занёс его в чёрный список• Средства в Bitcoin, XRP, Solana и Optimism пока не перемещены. BTC распределены по 19 кошелькам, 17 из которых содержат ровно по 1 000 BTC
Статус по состоянию примерно на 23:50 UTC:
Заморожено, около 2,80 млрд USD
• 1,38 млрд USDT в Ethereum, 378,7 млн в Tron, 8,41 млн в Avalanche (Tether)
• 824,6 млн USDC (Circle)
• 40,5 млн RLUSD (Ripple), 27,8 млн USD1 (World Liberty), 12 574 XAUt (Tether), 29 934 wBETH (Binance), 1 907 PAXG (Paxos), 48,5 млн WLFI
Не заморожено, около 3,27 млрд USD
• 18 270 BTC, 1,42 млрд USD
• 458 770 ETH распределены по 9 кошелькам, 1,03 млрд USD
• 233,5 млн XRP, 289 млн USD
• 684,6 млн TRX, 243 млн USD
• Около 136 млн USD в других токенах в Ethereum
• 970 500 SOL, 93 млн USD, плюс ARB, AVAX и OP, около 48 млн USD
Ещё 60 млн USDT заблокированы в качестве залога в Aave.
Примечание: переводы BTC, XRP и Tron были связаны по времени и отпечаткам транзакций: одинаковое временное окно, совершенно новые адреса получателей, а также комиссии и форматы транзакций, отличные от собственных выводов Binance. Украденная сумма рассчитана по ценам на 20:24 UTC; текущие активы рассчитаны по ценам около 23:50 UTC.
Доказательства в блокчейне для каждой транзакции и заморозки приложены в посте ниже. Если вы заметите что-то, что я упустил, пожалуйста, дайте мне знать!