
Как из офлайн-кошельков вывели $130 млн: разбор уязвимости в генерации сид-фразы
Первая волна забрала 594 BTC — около $38 млн — примерно из 500 кошельков за двадцать пять минут. Ни один из них не был подключён к интернету. Это были офлайн-кошельки, владельцы которых делали всё по инструкции безопасности.
Кошельки пустели волнами: к середине августа сумма перевалила за 1778 BTC, а итоговая оценка ущерба приблизилась к $130 млн. Причиной оказался не фишинг и не подмена адреса, а ошибка в сборке 2021 года, из-за которой часть сид-фраз генерировалась предсказуемо.
Что такое энтропия и почему 40 бит — это приговор
Сид-фраза создаётся из случайного числа. Качество этой случайности измеряется в битах энтропии, и отраслевой стандарт — 128 бит. Перебрать такое число невозможно физически.
На затронутых устройствах показатель падал примерно до 40 бит. Это уже не физика, а вопрос аренды вычислительных мощностей на несколько часов.
Разница принципиальная. Вся конструкция безопасности аппаратного кошелька держится на одном допущении: число, рождённое внутри устройства, снаружи неизвестно. Когда энтропия обваливается, защищённый элемент, PIN-код и пассфраза превращаются в декорации — приватный ключ восстанавливается без всякого доступа к железу.
Почему изоляция не помогла
Офлайн-хранение защищает от конкретной угрозы: заражённый компьютер не должен добраться до ключей. С этой задачей аппаратный кошелёк справляется отлично.
Но против ключа, который был слабым с рождения, изоляция бесполезна. Кошелёк может лежать в сейфе и никогда не включаться рядом с сетью — приватный ключ всё равно вычисляется, потому что атакуют не железо, а математику, породившую сид-фразу.
Именно поэтому советы вроде «держите кошельки офлайн» в этом сценарии не работают: безопасности они не добавляют. Все они неявно предполагают, что злоумышленнику нужно дотянуться до вашего устройства. Генерация сид-фразы — единственный случай, когда это не требуется.
ИИ как инструмент поиска уязвимостей
Производитель допускает, что атакующие использовали искусственный интеллект, чтобы прочесать старые версии открытого кода и найти слабое место.
Исследователи, отслеживавшие кражи, описывают кампанию как программную и, возможно, управляемую языковой моделью. К началу августа они насчитали около $88,6 млн, распределённых по 4585 адресам, а сами атаки шли тремя крупными волнами.
Вот что тут важно. Код был открыт с 2021 года, и люди читали его годами. Изменился не код, а стоимость его перечитывания: сегодня можно проанализировать все исторические версии любого открытого проекта за деньги, которые раньше не окупались.
Ирония в том, что трёхнедельный аудит после инцидента компания тоже проводила с участием ИИ-моделей и внешних исследователей. Инструмент один и тот же, и выигрывает тот, у кого больше терпения.
Что исправили
Владельцам затронутых моделей выпустили новую прошивку и настоятельно рекомендовали поставить её немедленно. Помимо основной ошибки, закрыли проблемы в подписи транзакций, обработке данных по USB, проверке образа и резервных копиях кошельков.
Самое показательное изменение не техническое, а процедурное: теперь при создании кошелька пользователь обязан добавить случайность вручную, сделав не менее шестидесяти пяти нажатий. Устройство больше не доверяет самому себе в вопросе случайности.
Для аппаратных решений это правильная поправка и одновременно признание неприятного факта. Случайность — самая трудная для проверки вещь в любом продукте безопасности, потому что слабое случайное число внешне неотличимо от сильного.
Как проверить свой кошелёк
Смотрите не на модель, а на историю конкретного кошелька: производители публикуют список затронутых сборок, и сверка даты создания с этим списком — единственная надёжная проверка.
Если кошелёк создавался в опасном окне, считайте его скомпрометированным независимо от того, двигались ли средства. Взлом идёт по спискам адресов, и тишина на балансе означает лишь то, что до вашего кошелька пока не дошли.
Обновление не лечит уже созданные ключи. Оно исправляет генерацию будущих, а слабый приватный ключ остаётся слабым навсегда — поэтому пострадавшим пришлось не патчить кошельки, а переносить криптовалюту.
Порядок переноса такой: поставьте свежую прошивку, создайте новый кошелёк, сверьте адрес на экране кошелька, отправьте пробную сумму, затем переведите остаток. Старый секрет после этого не используют нигде и никогда, даже как запасной.
Генерация происходит один раз, занимает полминуты и определяет всё остальное. Относитесь к этой минуте как к самому уязвимому моменту в жизни кошелька.
Если устройство предлагает добавить свою энтропию — броски кубика, нажатия клавиш, монетка, — используйте эту возможность. Ощущается как ритуал, а на деле именно ваш вклад не даёт единственному внутреннему источнику определять ключи целиком.
Не восстанавливайте старую сид-фразу на новом железе, не выяснив, на какой сборке он был создан. В этом инциденте опасное окно тянулось годами, и многие владельцы давно забыли версию, которая стояла при первой настройке.
Разносите крупные суммы по нескольким аппаратным кошелькам, созданным в разное время и желательно на железе разных производителей. Звучит параноидально ровно до момента, когда одна ошибка вендора выносит четыре с половиной тысячи адресов разом.
Что аппаратный кошелёк защищает, а что нет
Аппаратная защита закрывает три вещи: кражу ключа с заражённого компьютера, подмену транзакции на лету и взлом устройства без PIN-кода. Это по-прежнему лучший способ хранения крупных сумм.
Он не закрывает ошибки генерации, подпись, сделанную не глядя, и социальную инженерию. Если вы подтверждаете операцию, не сверив адрес на экране, аппаратный кошелёк подпишет ровно то, что ему показали.
Отсюда практика: экран кошелька — не формальность, а последняя точка контроля безопасности. Проверяйте получателя и сумму при каждой операции, а не только при первой.
И держите баланс между хранилищем и биржей осознанно. Оборотную часть удобно оставлять там, где ведётся торговля, а долгосрочную — в холодном кошельке, но обе части требуют своих правил, и путать их не стоит.
Три уровня защиты и место аппаратного кошелька
Чтобы понимать масштаб проблемы, полезно разложить способы хранения по уровням.
Первый — счёт на бирже. Приватный ключ там не ваш, зато площадка берёт на себя операционные риски и умеет замораживать подозрительные операции. Для активной торговли этого достаточно, для долгих накоплений — нет.
Второй — программные кошельки на телефоне или компьютере. Приватный ключ у вас, но живёт он в системе, где работают браузер, мессенджеры и загруженные файлы. Любой стилер, попавший на устройство, добирается до них за секунды.
Третий — аппаратные носители. Приватный ключ хранится в отдельном чипе кошелька, а транзакция подписывается внутри устройства, а наружу уходит только подпись. Именно поэтому аппаратный кошелёк считается стандартом для сумм, потерю которых вы не переживёте спокойно.
Разбираемая история важна тем, что бьёт по третьему уровню: аппаратный кошелёк считался самым надёжным вариантом.
Как проверять транзакции на устройстве
Практическая часть безопасности сводится к дисциплине подтверждений. Кошелёк выводит данные транзакций на экран именно для того, чтобы вы их прочитали.
Смотрите в транзакции три поля: получателя, сумму и сеть. Подмена адреса в буфере обмена, отравление истории транзакций и вредонос на компьютере дают один и тот же результат — на экране появится не тот получатель, которого вы ожидали.
Сверяйте адрес целиком, а не первые и последние символы. Атаки последнего года построены ровно на том, что человек проверяет края строки и пропускает середину.
Отдельно проверяйте суммы транзакций при работе со смарт-контрактами. Запрос неограниченного разрешения выглядит на экране так же буднично, как обычный перевод, а последствия у него другие.
И не подписывайте вслепую пакеты транзакций. Если устройство просит подтвердить несколько операций подряд, читайте каждую: злоумышленники прячут лишнюю строку в середине очереди.
Главный вывод
Открытый исходный код часто воспринимают как гарантию. Это не гарантия, а лишь предпосылка для аудита, и сам аудит кто-то должен провести, оплатить и повторять регулярно.
Семь лет прошивка была публичной и популярной, и ошибка всё равно дожила до 2026 года — просто потому, что никому не требовалось перечитывать старые коммиты, пока экономика не изменилась.
Устройство, безопасное в 2021 году, не является безопасным автоматически сегодня. Проверка, которая имела значение, — та, которую никто не запускал.
Значит, аппаратные кошельки небезопасны?
Нет. Это значит, что один конкретный сбой — слабая генерация — обесценивает все остальные слои защиты. Для большинства владельцев такие кошельки остаются радикально безопаснее ключей на компьютере.
Можно ли по виду seed-фразы понять, что она слабая?
Нельзя. Слабая и сильная фраза выглядят одинаково: двенадцать или двадцать четыре обычных слова. Поэтому ошибка и прожила несколько лет незамеченной.
Защитит ли обновление уже созданные ключи?
Нет. Обновление исправляет только будущую генерацию. Единственное решение — перенос средств на кошельки, созданные на исправленной прошивке.
Почему пострадали офлайн-устройства?
Потому что атака не требовала контакта с устройством. Как только ключи попадают в предсказуемый диапазон, приватный ключ восстанавливается удалённо, и физическая изоляция теряет смысл.
Стоит ли добавлять свою случайность при создании?
Да, если устройство это позволяет. Пользовательский вклад подмешивается в генератор, и даже дефектный внутренний источник перестаёт единолично определять ваши ключи.
Что безопаснее — хранить на бирже или в холодном кошельке?
Задачи разные. Биржа удобна для оборота и берёт на себя часть операционных рисков, холодные кошельки защищают от чужого доступа к ключам. Разумная схема — разделять суммы, а не выбирать одно из двух.
Эксперт по крипторынкам и руководитель отдела контента и маркетинга EIDEX. Пишет о структуре рынка, инфраструктуре бирж и кросс-чейн торговле, превращая ончейн-данные и рыночные сдвиги в понятную практическую аналитику для трейдеров.


