Криптовалюта — один из самых привлекательных для злоумышленников цифровых активов, его несложно красть и удобно обналичивать. Для защиты своей криптовалюты серьезные инвесторы часто применяют аппаратные криптокошельки. В таком кошельке приватные ключи хранятся вне уязвимых к атакам компьютеров и смартфонов, и подписывать транзакции гораздо безопасней. К сожалению, покупка аппаратного кошелька тоже не гарантирует сохранности средств, как узнал на своем печальном опыте один наш клиент.
Симптомы взлома
Кража криптовалюты произошла незаметно: в один ужасный день в истории транзакций криптокошелька появилась операция по переводу крупной суммы средств на сторону. Самое интересное, что в тот день жертвой никаких транзакций не проводилось, более того — криптокошелек к компьютеру не подключался!
Изучаем кошелек
Герой нашего печального рассказа приобрел довольно распространенный аппаратный кошелек 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 проекта лаконично указано, что этот номер версии «пропущен из-за подделок». После такого интригующего объявления, конечно, пришлось перейти к вскрытию.
Открыть корпус удалось с трудом — его половинки были щедро залиты клеем и проклеены двусторонним скотчем вместо «родной» ультразвуковой сварки заводских Trezor. Но самое интересное — внутри оказался совершенно другой микроконтроллер с заметными следами пайки! В подопытном экземпляре вместо оригинального STM32F427 был впаян STM32F429 с полностью отключенными механизмами защиты микроконтроллера от чтения данных и флеш-памяти (RDP 0 вместо RDP 2 в оригинальных кошельках).
Версия о поддельном криптокошельке оказалась доказанной — перед нами была классическая атака на цепочку поставок, когда ни о чем не подозревающая жертва приобретает уже взломанное устройство, — но сам механизм хищения криптовалюты был еще не ясен.
Троянская прошивка
Мы не станем повторять азбучные истины о работе криптокошельков, о которых писали раньше, напомним лишь одно: криптокошелек хранит приватный ключ и, зная его, можно подписать любую транзакцию и потратить деньги. Если злоумышленники смогли провести операцию, пока отключенный криптокошелек спокойно лежал в сейфе владельца, значит, они либо скопировали приватный ключ после его генерации, либо же… знали его заранее!
Благодаря отключенной защите флеш-памяти от чтения, которую наши злоумышленники после впайки нового микроконтроллера решили не активировать, мы с легкостью извлекли из криптокошелька его прошивку и, реконструировав ее код, обнаружили, что верна вторая версия. Мошенники внесли всего три изменения в оригинальные прошивки загрузчика и самого кошелька.
Во-первых, полностью убрали контроль защитных механизмов и цифровых подписей в загрузчике, избавившись от проблемы «красного экрана» при проверке оригинальности прошивки в момент запуска.
Во-вторых, на этапе инициализации или при сбросе кошелька случайно сгенерированная сид-фраза заменялась на одну из 20 заранее созданных и сохраненных в мошеннической прошивке. Владелец начинал ее использовать, считая совершенно новой и уникальной.
В-третьих, если владелец устанавливал дополнительный пароль для защиты мастер-ключа, использовался лишь его первый символ (a…z, A…Z, 0…9 или ! для любого спецсимвола), что вместе с вариантом вообще без пароля давало 64 возможных комбинации. Таким образом, чтобы подобрать ключ к конкретному фальшивому кошельку, злоумышленникам нужно было перебрать всего 64*20=1280 вариантов.
На вид фальшивый криптокошелек работал как обычно, но с самого начала мошенники имели над ним полный контроль. Как видно из истории транзакций, они не торопились и выждали целый месяц после первого пополнения кошелька, прежде чем вывести с него деньги. Но защиты у владельца денег не было никакой — игра была проиграна уже в тот момент, когда на троянский кошелек впервые поступили средства.
Ответ от производителя
После выхода статьи в своем официальном Twitter-аккаунте производитель данной модели криптокошельков Trezor отметил, что данная проблема действительно имела место в 2022 году, когда несколько фальшивых криптокошельков от неавторизованного российского реселлера попали на рынок, отдельно подчеркнув, что после того случая подобных инцидентов не было отмечено.
Как предотвратить угрозу фальшивок
Без специальных знаний и опыта отличить фальшивый криптокошелек от настоящего довольно сложно. Основная защита — покупать кошелек напрямую у официального производителя и выбирать модели со специальными версиями защищенных микроконтроллеров (даже оригинальный Trezor в этом смысле не идеален, есть модели с более защищенными чипами и дополнительными механизмами защиты).
И стоит помнить, что даже не подделанный и не модифицированный кошелек может быть уязвим к целому ряду атак, от которых требуется защита. Среди приоритетных мер — использование пароля, если он поддерживается кошельком, и, разумеется, защита всех компьютеров и смартфонов.