Кратко

  • Coinkite заявляет, что из-за ошибки сборки генерация seed-фраз на их аппаратных кошельках Coldcard осуществлялась не аппаратным генератором, а программным резервным вариантом.
  • По мнению компании, атакующий использовал искусственный интеллект для анализа их открытого кода, однако собственная AI-проверка, проведённая несколькими неделями ранее, не выявила проблем.
  • Каждая актуальная модель кошелька затронута в той или иной степени, и обновление прошивки не может исправить уже созданный seed.

Coinkite считает, что атакующий использовал искусственный интеллект для обнаружения уязвимости, из-за которой владельцы их аппаратных кошельков Coldcard потеряли десятки миллионов долларов в Bitcoin. Компания утверждает, что их собственный AI-анализ того же кода несколько недель назад не выявил ничего подозрительного. 

Производитель аппаратных кошельков опубликовал предупреждение для Mk3 и  технический разбор в четверг, после того как выяснилось, что seed-фразы, генерируемые устройствами, были гораздо легче подбираемыми, чем предполагалось.

Потери из-за уязвимости, которая была эксплуатирована ранним утром в пятницу, оцениваются в 594 BTC, около 38 миллионов долларов. Средства были выведены примерно из 500 кошельков за 25 минут, причем 562 BTC были впоследствии сконсолидированы на одном адресе.

Coinkite сообщает, что должны предположить: "кто-то использовал искусственный интеллект для анализа предыдущих версий нашей прошивки" чтобы обнаружить ошибку. Компания заявила, что несколько недель назад запускала одну из лучших моделей для проверки своего кода, и модель "не выявила эту ошибку или ничего серьёзного". Атакующие и защитники используют одинаковые инструменты, написали они, но в этот раз "это не помогло нам, а только помогло злоумышленникам".

Что пошло не так

Прошивка Coldcard вызывает функцию для получения случайных данных, и в коде присутствовало две реализации с одинаковой сигнатурой: аппаратный генератор, написанный Coinkite, и программный резервный вариант, унаследованный от MicroPython. Препроцессор проверял только наличие определённой настройки, не её значение, так что сборка проходила с резервной реализацией без ошибок. Генерация seed-фраз использовала этот вариант с момента миграции в марте 2021 года.

Все актуальные модели затронуты в той или иной степени. По оценке Coinkite, эффективное пространство поиска для seed-фразы Mk3 составляет примерно 40 бит вместо ожидаемых 128. Дополнительная энтропия от защищённых элементов в Mk4, Q и Mk5 увеличивает их до примерно 72 бит, что, по словам компании, существенно улучшает ситуацию, но не достигает целевого уровня. Tapsigner, Opendime и Satscard используют другой код и не затронуты.

Что необходимо сделать владельцам

Coinkite выпустил экстренный hotfix: версия 5.6.0 для Mk4 и Mk5, и 1.5.0Q для Q. Обновление не исправляет seed-фразы, созданные на затронутой прошивке. Владельцам необходимо сгенерировать новый seed на исправленном устройстве, а компания рекомендует использовать сильную BIP-39 passphrase, минимум 99 бросков кубика или оба способа. Владельцам Mk3, чья модель больше не поддерживается, предлагается отдельный путь миграции.