Утечка $88 млн в биткоинах: уязвимость в COLDCARD ослабила генератор случайных чисел
Исследователи подозревают, что уязвимость в прошивке аппаратных кошельков COLDCARD была использована для кражи примерно $88,6 млн в биткоинах из тысяч кошельков. Сиды создавались с помощью ущербного генератора случайных чисел.
Компания Galaxy Research, занимающаяся цифровыми активами, сообщила о первой волне подозрительных транзакций 30 июля. Всего за 41 минуту с 1196 адресов вывели около 1 083 BTC — тогда это составляло $70,2 млн.
Атака произошла примерно за 30 часов до того, как Coinkite публично раскрыла информацию о проблеме. Все транзакции использовали одинаковую фиксированную комиссию в 30 сатоши за виртуальный байт и не оставляли выхода сдачи.
«Каждая операция выплачивала идентичные жёстко заданные 30.0 sat/vB — это переплата в 30–75 раз относительно медианной ставки недели (0,4–1,0 sat/vB) — и не оставляла сдачи. Это похоже на автоматический инструмент, тратящий уже известные ключи, а не на перемещение средств владельцами», — отметили в Galaxy.
Вторая и третья волны: счёт пострадавших приблизился к 5 тысячам
1 августа Galaxy Research зафиксировала вторую и третью волну атак. Общий итог вырос до 1 367 BTC с 4 585 адресов — около $88,6 млн по курсу на тот момент. На момент отчёта похищенные средства оставались на контролируемых злоумышленниками адресах.
Аналитики Chainalysis обнаружили, что атакующий нацеливался в первую очередь на кошельки с крупными балансами. За первые десять минут было украдено около $30 млн, а у одного из пострадавших единовременно забрали $1,8 млн. По мнению Chainalysis, это доказывает: злоумышленник изучил уязвимые кошельки заранее.
Корень проблемы: детерминированный fallback вместо аппаратного RNG
Команды Block (Bitcoin Engineering and Security) совместно с другими экспертами проанализировали прошивку COLDCARD после сообщений о кражах. Результаты передали в Coinkite 30 июля.
Специалисты пришли к выводу: уязвимость вызвана ошибкой интеграции кода генерации случайных чисел. Функция ngu.random в прошивке обращалась не к аппаратному криптографическому ГСЧ на чипе STM32, а к детерминированному программному генератору Yasmarang из MicroPython.
Fallback-генератор опирался на идентификатор микроконтроллера и системные тайминги — источники, не обеспечивающие криптографически стойкую случайность. Потенциально их можно измерить или реконструировать. Это давало возможность перебирать возможные сиды офлайн и сопоставлять производные адреса с данными блокчейна.
Какие устройства затронуты и что делать пользователям
- Mk2 и Mk3 с прошивками с 4.0.1 по 4.1.9.
- Mk4 и Mk5 с версиями до 5.6.0 (стандартная) или до 6.6.0X (Edge).
- Q-устройства с версиями до 1.5.0Q (стандартная) или до 6.6.0QX (Edge).
- Продукты TAPSIGNER, OPENDIME и SATSCARD не подвержены уязвимости — они используют другую кодовую базу.
Coinkite выпустила исправленные версии прошивок. Однако обновление не делает старый сид безопасным. Пользователям, чьи ключи были сгенерированы уязвимой версией, необходимо: проверить существующий бэкап, установить новую прошивку, сгенерировать свежий сид, записать его и сверить адрес на устройстве. Потом выполнить небольшой тестовый перевод, после чего переместить оставшиеся средства.
В Coinkite уточнили, что сиды, усиленные как минимум 50 бросками честных игральных костей (независимых и приватных), не входят в зону прямого риска по этой уязвимости. Сильная и уникальная BIP-39 парольная фраза также усложняет эксплуатацию, но миграция всё равно рекомендуется, так как проблему исходного сида она не устраняет.
Coinkite также уничтожила все устройства COLDCARD с уязвимой прошивкой, ожидавшие отправки. Клиентам, чьи заказы уже были доставлены, направили уведомления по электронной почте с инструкциями по миграции средств.
Читайте также: Компьютерные вирусы: как трояны и черви крадут ваши данные
Источник: BleepingComputer
