Случай из практики: фальшивый аппаратный криптокошелек

Полный разбор инцидента с поддельным криптокошельком: выглядит и работает, как Trezor, но отдает все криптоинвестиции преступникам.

Разбор и анализ поддельного криптокошелька Trezor

Криптовалюта — один из самых привлекательных для злоумышленников цифровых активов, его несложно красть и удобно обналичивать. Для защиты своей криптовалюты серьезные инвесторы часто применяют аппаратные криптокошельки. В таком кошельке приватные ключи хранятся вне уязвимых к атакам компьютеров и смартфонов, и подписывать транзакции гораздо безопасней. К сожалению, покупка аппаратного кошелька тоже не гарантирует сохранности средств, как узнал на своем печальном опыте один наш клиент.

Симптомы взлома

Кража криптовалюты произошла незаметно: в один ужасный день в истории транзакций криптокошелька появилась операция по переводу крупной суммы средств на сторону. Самое интересное, что в тот день жертвой никаких транзакций не проводилось, более того — криптокошелек к компьютеру не подключался!

Иии… Их нет!

Иии… Их нет!

Изучаем кошелек

Герой нашего печального рассказа приобрел довольно распространенный аппаратный кошелек Trezor Model T. Эта модель с открытыми и полностью доступными исходниками как программной, так и аппаратной частей, основанная на популярном микроконтроллере STM32F427.

Производители Trezor Model T реализовали широкий спектр мер, которые в теории должны надежно защищать устройство от злоумышленников. Коробка и сам корпус устройства опечатаны голографическими наклейками, микроконтроллер переведен в режим защиты от чтения памяти (RDP 2), а загрузчик прошивки проверяет ее цифровую подпись и в случае любых аномалий выводит сообщение о неоригинальности прошивки и удаляет все данные из кошелька. Для доступа к устройству и подтверждения транзакций используется PIN-код, который хоть и не защищает мастер-ключ (master access key, на основе которого генерируется мнемоническая сид-фраза — seed phrase), но используется для шифрования хранилища, где он лежит. Опционально, в дополнение к PIN-коду, можно установить защищающий мастер-ключ пароль, использование которого предусмотрено стандартом BIP-39.

Не используй меня, я небезопасен!

Не используй меня, я небезопасен! (Источник)

Изученный нами экземпляр кошелька на первый — поверхностный — взгляд выглядел точь-в-точь как оригинальный, без признаков вскрытия. Кошелек покупался на популярном маркетплейсе у проверенного продавца, голографические наклейки на коробке и самом кошельке присутствовали и не были повреждены. При загрузке кошелька в режиме обновления отображались версия прошивки 2.4.3 и версия загрузчика 2.0.4

Экран режима обновления фальшивого кошелька

Экран режима обновления фальшивого кошелька

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

Сразу выяснилось, что загрузчика с версией 2.0.4 производителем никогда не выпускалось. В истории изменений на GitHub проекта лаконично указано, что этот номер версии «пропущен из-за подделок». После такого интригующего объявления, конечно, пришлось перейти к вскрытию.

Какая такая версия 2.0.4?

Какая такая версия 2.0.4?

Открыть корпус удалось с трудом — его половинки были щедро залиты клеем и проклеены двусторонним скотчем вместо «родной» ультразвуковой сварки заводских Trezor. Но самое интересное — внутри оказался совершенно другой микроконтроллер с заметными следами пайки! В подопытном экземпляре вместо оригинального STM32F427 был впаян STM32F429 с полностью отключенными механизмами защиты микроконтроллера от чтения данных и флеш-памяти (RDP 0 вместо RDP 2 в оригинальных кошельках).

А с виду был совсем как настоящий… (слева — оригинал, справа — подделка)

А с виду был совсем как настоящий… (слева — оригинал, справа — подделка)

Версия о поддельном криптокошельке оказалась доказанной — перед нами была классическая атака на цепочку поставок, когда ни о чем не подозревающая жертва приобретает уже взломанное устройство, — но сам механизм хищения криптовалюты был еще не ясен.

Троянская прошивка

Мы не станем повторять азбучные истины о работе криптокошельков, о которых писали раньше, напомним лишь одно: криптокошелек хранит приватный ключ и, зная его, можно подписать любую транзакцию и потратить деньги. Если злоумышленники смогли провести операцию, пока отключенный криптокошелек спокойно лежал в сейфе владельца, значит, они либо скопировали приватный ключ после его генерации, либо же… знали его заранее!

Благодаря отключенной защите флеш-памяти от чтения, которую наши злоумышленники после впайки нового микроконтроллера решили не активировать, мы с легкостью извлекли из криптокошелька его прошивку и, реконструировав ее код, обнаружили, что верна вторая версия. Мошенники внесли всего три изменения в оригинальные прошивки загрузчика и самого кошелька.

Во-первых, полностью убрали контроль защитных механизмов и цифровых подписей в загрузчике, избавившись от проблемы «красного экрана» при проверке оригинальности прошивки в момент запуска.

Во-вторых, на этапе инициализации или при сбросе кошелька случайно сгенерированная сид-фраза заменялась на одну из 20 заранее созданных и сохраненных в мошеннической прошивке. Владелец начинал ее использовать, считая совершенно новой и уникальной.

В-третьих, если владелец устанавливал дополнительный пароль для защиты мастер-ключа, использовался лишь его первый символ (a…z, A…Z, 0…9 или ! для любого спецсимвола), что вместе с вариантом вообще без пароля давало 64 возможных комбинации. Таким образом, чтобы подобрать ключ к конкретному фальшивому кошельку, злоумышленникам нужно было перебрать всего 64*20=1280 вариантов.

На вид фальшивый криптокошелек работал как обычно, но с самого начала мошенники имели над ним полный контроль. Как видно из истории транзакций, они не торопились и выждали целый месяц после первого пополнения кошелька, прежде чем вывести с него деньги. Но защиты у владельца денег не было никакой — игра была проиграна уже в тот момент, когда на троянский кошелек впервые поступили средства.

Ответ от производителя

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

Ответ Trezor yf информацию о взломе криптокошелька

Ответ Trezor на наше исследование о взломе криптокошелька. (Источник)

Как предотвратить угрозу фальшивок

Без специальных знаний и опыта отличить фальшивый криптокошелек от настоящего довольно сложно. Основная защита — покупать кошелек напрямую у официального производителя и выбирать модели со специальными версиями защищенных микроконтроллеров (даже оригинальный Trezor в этом смысле не идеален, есть модели с более защищенными чипами и дополнительными механизмами защиты).

И стоит помнить, что даже не подделанный и не модифицированный кошелек может быть уязвим к целому ряду атак, от которых требуется защита. Среди приоритетных мер — использование пароля, если он поддерживается кошельком, и, разумеется, защита всех компьютеров и смартфонов.

Советы