Кошельки, которые «родились слабыми»: как уязвимость Ill Bloom стоила криптовладельцам пять миллионов долларов

Специалисты компании Coinspect нашли брешь в нескольких криптокошельках, из-за которой злоумышленники смогли подобрать секретные фразы восстановления и вывести деньги владельцев. Уязвимость получила название Ill Bloom — по аналогии с первой фразой, которую выдавал уязвимый генератор: «illness blossom». Суть проблемы банальна и одновременно пугающа: программа, отвечающая за создание seed-фразы из 12–24 слов, использовала слабый генератор случайных чисел. В результате пространство возможных комбинаций резко сужалось, и злоумышленники получали возможность перебрать варианты и найти нужную фразу — а вместе с ней и полный доступ к кошельку.
27 мая произошла скоординированная атака: с 431 кошелька разом вывели около 3,1 миллиона долларов. Судя по тому, что сотни несвязанных между собой кошельков отправили средства на одни и те же несколько адресов в течение нескольких часов, действовал единый оператор или группа, заранее подготовившая список уязвимых адресов. Позже обнаружился ещё один эпизод — с одного из «засвеченных» кошельков похитили 2,1 миллиона долларов в USDT. Итоговая сумма подтверждённых потерь превысила 5 миллионов долларов.
Больше всего пострадали держатели биткоина — на эту сеть пришлось порядка 2,57 миллиона долларов потерь, причём с одного-единственного адреса злоумышленники забрали свыше 1,1 миллиона. Любопытная деталь: на своём пике в 2022 году совокупная стоимость всех «засвеченных» кошельков, по расчётам Coinspect, достигала 12,56 миллиона долларов. К моменту атаки в мае эта сумма заметно просела вместе с рынком — иначе ущерб мог бы оказаться в разы больше.
По состоянию на снимок от 30 июня Coinspect насчитала 2114 адресов с признаками активности в блокчейне, подверженных уязвимости. География поражения — пять сетей: Bitcoin, Ethereum, Rootstock, Tron и Polygon. Причём список продолжает расти уже после 30 июня — не потому, что где-то создаются новые слабые кошельки, а потому что исследователи находят новые пути генерации таких же предсказуемых фраз в старом коде. Онлайн-инструмент проверки обновляется по мере обнаружения новых случаев, поиск продолжается.
Важный момент: аппаратные кошельки уязвимости не подвержены, как и большинство популярных программных решений. Под угрозой — менее известные приложения, как мобильные, так и браузерные расширения, некоторые из которых выпущены ещё в 2018 году. Всего обнаружено пять уязвимых реализаций кошельков, но Coinspect пока не раскрывает их названия публично. Для выявления проблемы использовались три метода: анализ связей между адресами на блокчейне, поиск совпадающего кода на GitHub и реверс-инжиниринг закрытых Android-приложений и расширений для Chrome. В компании прямо говорят: вероятно, есть и другие уязвимые кошельки, которые пока не найдены.
Отдельного упоминания заслуживает история с 2,1 миллиона долларов в USDT. Атакующий 27 мая уже скомпрометировал seed-фразу жертвы, но почему-то не тронул средства в другой сети. Coinspect обнаружила эти деньги «под прицелом» 10 июня и попыталась предупредить владельца через биржи, которыми тот пользовался. Предупреждение не успело дойти вовремя. Парадокс ситуации в том, что исследователи технически могли вычислить приватный ключ и сами — но не могли перевести средства в безопасное место. Причина простая и по-своему философская: как только seed-фраза скомпрометирована, обладание ключом больше не доказывает законное владение средствами. Взять чужие деньги себе, даже с благими намерениями, значит совершить то же самое, что и злоумышленник.
Атакующий 27 мая, кстати, действовал избирательно — пропускал счета с суммой меньше примерно 5 долларов. Это не значит, что такие кошельки в безопасности: они остаются скомпрометированными, и любые будущие поступления на них могут быть украдены в любой момент. Многие пользователи, по оценке исследователей, вообще не подозревают, что их кошелёк уязвим.
Метод реконструкции атаки у Coinspect был прямолинейным: команда прогнала весь диапазон фраз, которые способен был сгенерировать слабый генератор, вывела из каждой соответствующие адреса кошельков и сверила их с публичными данными блокчейна на предмет оставшихся средств. Так появился список — по сути, «список наблюдения» за кошельками, изначально рождёнными слабыми, независимо от того, какое приложение их создало.
Проверить свой адрес можно на сайте — бесплатный инструмент сравнивает публичный адрес пользователя со списком известных уязвимых кошельков. Поддерживаются форматы Bitcoin, Tron, Solana и адреса в стиле Ethereum, включая Ethereum, Polygon, BNB и другие совместимые с EVM сети. Здесь важна оговорка: «чистый» результат проверки ничего не гарантирует, поскольку список неполон, а вот совпадение — однозначный сигнал тревоги. И поскольку одна слабая фраза может затрагивать сразу несколько блокчейнов, стоит проверять все адреса, привязанные к одному seed, а не только те, с которых уже похитили деньги.
Если совпадение найдено, действовать нужно немедленно. Recovery-фразу следует считать скомпрометированной — деньги не в безопасности, даже если их пока не тронули. Нужно создать совершенно новый кошелёк с совершенно новой фразой — то есть сгенерировать свежий набор из 12–24 слов. Здесь кроется ловушка: если приложение при создании «нового» кошелька просит ввести СТАРУЮ фразу, оно просто заново открывает тот же слабый кошелёк, а не создаёт новый. Переустановка старого приложения или повторный импорт той же фразы ничего не меняет. Средства нужно перевести на новый кошелёк, а старый прекратить использовать полностью, даже если с него ещё ничего не украли. Самый надёжный вариант — аппаратный кошелёк, но фразу для него нужно генерировать прямо на устройстве, а не импортировать старую скомпрометированную.
На фоне подобных историй традиционно активизируются мошенники, предлагающие фальшивые услуги по «спасению» кошельков. Coinspect прямо заявляет: компания никогда не запросит seed-фразу, приватные ключи, подписи, разрешения (approvals) или перевод средств для «восстановления» или «защиты» кошелька. Общее правило простое: никогда не вводить фразу восстановления, приватные ключи, пароли или файлы резервных копий на каком-либо сайте или в переписке с кем-либо.
Подобные истории с предсказуемыми генераторами случайных чисел в крипте случаются с завидной регулярностью. В 2023 году был случай «Milk Sad» — уязвимость CVE-2023-39910 в инструменте командной строки Libbitcoin Explorer, названная так же по первой сгенерированной слабой фразе. В июле того же года атака привела к одномоментному выводу миллионов долларов. Также был обнаружен баг в браузерном расширении Trust Wallet — CVE-2023-31290, который специалисты называли «близким родственником» Milk Sad: подобрать фразу можно было менее чем за сутки. Ещё раньше, в материале The Hacker News за 2023 год, описывалась история Randstorm — дефект слабой случайности, затронувший биткоин-кошельки, созданные между 2011 и 2015 годами: браузерный код, использовавшийся для их генерации, полагался на плохие случайные числа. Решение тогда было ровно таким же, как и сейчас — перевести средства на новый кошелёк, созданный более качественным софтом, поскольку изъян навсегда «зашит» в старые кошельки и никак не устраняется.
Каждый раз повторяется одна и та же схема: слабость в генерации случайных чисел, массовое хищение, единственный рабочий выход — миграция средств на новый кошелёк. Как формулируют в самом Coinspect, предсказуемый ключ — это едва ли ключ вообще.


Новое на сайте

Ссылка