Уязвимости аппаратных кошельков

Огромную часть прошедшего года я работал в ConsenSys над энергетическими проектами, кульминацией что сделалось ответвление, стремящееся стать первой в мире энергосистемой на базе блокчейна, под заглавием Grid+. В числе наших ценностей – создание новейшей системной архитектуры, которая дозволит неискушённым юзерам неопасно хранить и употреблять криптовалюты. Благодаря моей работе у меня также была возможность вести взаимодействие с рядом людей и больших организаций, вступающих в криптопространство, которые безизбежно приходят к одному и тому же вопросцу: Как хранить криптовалюту? Какой метод воззвания с криптовалютой самый неопасный и удачный? Наилучший ответ сейчас – наверняка, аппаратный кошелёк. Самые пользующиеся популярностью кошельки на рынке на данный момент – Trezor и Ledger Nano S. Есть и остальные кошельки, такие как KeepKey, но это, на самом деле, модификации Trezor. Я разобрал кошельки Ledger Nano S и Trezor и желаю поделиться плодами, также необходимыми выводами насчёт сохранности.

Сюда заходит моё мировоззрение о том, где я вижу огромные поверхности атаки, но я не непременно понимаю либо подразумеваю некий определенный метод взлома. Не считая того, я не разглядывал устройства без собственного монитора из-за значительно завышенной уязвимости к атакам.

Железо

 

Trezor

Trezor – относительно обычное устройство, подключающееся через разъём Micro-USB. У него весьма обычной корпус из формованного пластика с 2-мя пластмассовыми клавишами и LCD-дисплеем. Что любопытно, пластмассовый корпус склеен кое-чем вроде цианоакрилата либо суперклея.

Trezor — наружный вид и интегральная схема

В Trezor употребляется единственный микроконтроллер – обычный STM32F205, – что создаёт огромную аппаратную поверхность атаки. Это весьма распространённый 32-битный микропроцессор ARM Cortex M3. Он не считается одним из неопасных микроконтроллеров ST, и в нём не употребляется разработка Secure Enclave. В этом микроконтроллере общего предназначения генерируются и хранятся приватные ключи. По сиим причинам у Trezor нет сертификата согласно общим аспектам сохранности.

Ledger Nano S

Ledger Nano S также подключается через Micro-USB, имеет две клавиши ввода и экран. Основное различие Trezor и Ledger в том, что крайний употребляет не один, а два микроконтроллера: STM32F042K и ST31H320. STM32F042K весьма похож на применяемый в Trezor STM32F205, но у него есть не наружные, а внутренние часы. Также любопытно то, что у Ledger есть настоящий микроконтроллер банковского уровня с технологией Secure Enclave ST31H320, где хранятся приватные ключи кошелька. ST31H320 уже нашёл огромное количество остальных применений, включая банковское дело, идентификацию и платное телевидение. Не считая того, он соответствует эталонам сохранности согласно общим аспектам уровня EAL6+. Комбинированная архитектура ST31/STM32 имеет наиболее маленький, но достойный уровень сертификации EAL5+. Кроме неопасного хранения приватных ключей, Secure Enclave может хранить ключ устройства, что обеспечивает высшую степень убежденности в том, что устройство Ledger не поддельное и не было взломано на пути к юзеру.

Ledger Nano S и интегральная схема

Сопоставление

 

Аппаратное сопоставление Trezor и Ledger Потенциальные уязвимости

Приступая к обзору того, что я считаю относительными уязвимостями каждой системы, я обрисую некие базисные догадки о том, что может случиться. 1-ое предположение – это то, что комп, к которому подключён аппаратный кошелёк, быть может либо был тем либо другим образом взломан. Я не буду разглядывать, какой конкретно механизм либо какое вредное ПО употребляется для взлома устройства, но просто предположу, что это может быть. Во-2-х, я также рассмотрю методы хищения средств, предположив, что взломщик может овладеть устройством до либо опосля его инициализации юзером. Я считаю, что вышеупомянутые допущения – не плохая отправная точка, поэтому что назначение аппаратных кошельков, по последней мере в моём осознании, – содействовать уменьшению уязвимостей сохранности исходя из того, что данные допущения верны. Не считая того, если мы отбросим предположение о подсоединении кошелька к взломанному компу, отпадает потребность в аппаратном кошельке, поэтому что можно просто употреблять комп.

Атака посредника за $800

Невзирая на то что у Ledger Nano S есть экран, он всё равно уязвим к атакам посредника. Причина в том, что он указывает лишь 8 цифр адреса получателя. Доказательство таковой 8-значной транзакции можно обойти с относительно маленькими затратами. Также заметьте, что отображение 8 цифр адреса получателя касается не только лишь Ethereum, но также Bitcoin и Litecoin.

Поправка: В крайней прошивке 1.3.1 показываются полные адреса Биткойна, так что это не относится к устройствам с крайней прошивкой и крайней версией приложения Ledger Bitcoin Wallet для транзакций с биткойнами. Но для прошивки 1.3.1 и Ledger Ethereum Wallet 1.0.19 как и раньше показываются лишь частичные (8-значные) адреса Ethereum, и эта уязвимость всё ещё существует.

Верификация транзакции на Ledger

Текущая стоимость генерирования чувствительного к регистру адреса с 8 данными знаками на генераторе заказных адресов vante.me составляет приблизительно $800. Хотя vante.me предназначен для сотворения адресов, содержащих сначала понятный для человека текст, чтоб адресок был наиболее известным, вычислительные издержки на разделение строчки на 4 данных знака сначала и 4 в конце такие же.

Стоимость генерирования адреса на vante.me

Таковым образом, если вы подсоедините Ledger Nano S к взломанному компу и будете часто употреблять его для переводов огромных сумм на один либо больше счетов, вы уязвимы к данной нам атаке. К примеру, допустим, у вас есть биржевой счёт, куда вы часто переводите средства. Если ваш комп взломан, злодей будет знать, на какие адреса и какие суммы вы обычно отправляете. Тогда взломщик может издержать вычислительную мощность, нужную для сотворения адресов, кажущихся схожими (8 совпадающих символов, $800 за адресок) либо практически схожими (7 символов заместо 8, $30 за адресок), и подождать, пока вы не создадите последующую крупную транзакцию. Когда ваш подсоединённый Ledger должен будет подтвердить транзакцию с внедрением вашего счёта, он может подменить его своим счётом, и вы ни о чём не догадаетесь, подтверждая транзакцию на устройстве.

Что любопытно, Trezor не уязвим к таковой атаке, поэтому что он показывает на своём мониторе полный адресок получателя, до этого чем подтвердить транзакцию. Это также проливает свет на увлекательную деталь: перед отправкой большой транзакции необходимо проверить минимум 10 символов (стоимость атаки ~$3,1 млн) адреса (лучше весь адресок). Я также желаю тут упомянуть, что атаку посредника можно предупредить, если употреблять для отправки средств с Ledger разовые адреса. При всем этом предполагается, что у взломщика не будет довольно времени на генерирование неверного адреса меж обнаружением адреса получателя и отправкой юзером средств.

Доказательство на Trezor

Обновление прошивки USB-устройства

Ledger и Trezor обновляются при помощи чего-то наподобие обновления прошивки USB-устройств (USB Device Firmware Upgrade (DFU)) для микроконтроллеров ST. USB DFU дозволяет обновлять прошивку устройства через USB-порт и диспетчер устройств на подсоединённом компе. К огорчению, существует ряд возможных векторов атаки, связанных с возможностью удалённой записи прошивки через USB.

Имел пространство ряд удачных попыток при помощи 1-го только DFU удалённо выгружать память семейства микроконтроллеров STM32F. Что все-таки это означает? Для Trezor это означает почти все, поэтому что это потенциально дозволяет хакеру удалённо извлечь из устройства приватные ключи. Для Ledger это не таковая большая неувязка, поэтому что ключи хранятся не на STM32, а на ST31 с технологией Secure Enclave. Таковым образом, даже если удалённо скопировать память STM32, приватные ключи останутся в сохранности на ST31.

Кроме предоставления возможной способности удалённой выгрузки памяти STM32, USB DFU может потенциально дозволить злодею записать на устройство во время обновления вредный код. Хотя Ledger и Trezor во время обновления выводят на экран устройства контрольную сумму для проверки, её можно просто сфальсифицировать при помощи вредного кода. Чтоб это потенциально сработало, ваш комп должен быть взломан сразу с обновлением прошивки вашего кошелька. Если Trezor был обновлён вредным кодом, взломщик практически может получить контроль над средствами. В случае Trezor для этого довольно раскрытия приватных ключей. В случае Ledger ключи не будут раскрыты и взломщик не сумеет сделать искажённые транзакции из-за Secure Enclave.

Обход ПИН-кодов

Последующая серия уязвимостей, к которым я желал бы обратиться, касается того, что может случиться, если аппаратный кошелёк попадёт в руки злодеям. У Trezor и Ledger есть функция сброса в случае 3-кратного ввода неверного ПИН-кода. Так злодей не сумеет овладеть кошельком и применить атаку способом грубой силы для определения ПИН-кода.

Средства в сохранности, поэтому что они защищены ПИН-кодом, правильно?

На DEF CON 25 была презентация, где Cryptotronix показал, что в STM32F205 Trezor можно вызвать сбой при помощи вольтажного сбоя либо сбоя часов. Это создаёт у Trezor уязвимости, дозволяющие хакеру заполучить приватные ключи без необходимости знать ПИН. Есть даже блог с пошаговыми инструкциями о том, как это сделать без какого-нибудь специального оборудования, также обещающий в дальнейшем опубликовать начальный код.

Как насчёт Ledger? Ledger наименее уязвим к схожей атаке благодаря внутренним часам, также Secure Enclave. Если в Ledger всё предусмотрели, Secure Enclave перед доказательством устройством сообщения востребует ПИН устройства. Благодаря этому средства не сумеют быть похищены с Ledger даже в случае удачной атаки на STM32F042K.

Цепь поставок

Физические механизмы «сохранности» устройств, похоже, животрепещущи для Trezor из-за возможных векторов атаки, связанных с взломом устройства в цепи поставок. Не считая суперклея, которым заклеен корпус, упаковка Trezor «опечатана» голографическими наклейками, которые также кажутся попыткой защиты от взлома. Усилия, прилагаемые производителем для того, чтоб гарантировать, что Trezor не будет взломан до получения конечным юзером, должны настораживать. Trezor добавляет эти меры «сохранности» по той причине, что не может гарантировать, что новое устройство, заказываемое через его веб-сайт, – это то самое устройство, которое он сделал и запрограммировал.

Упаковка Trezor с голограммой сохранности

Если злодею получится перехватить Trezor до его получения конечным юзером, то он сумел бы вскрыть его и употреблять комфортно предоставленные выводы для программатора, чтоб записать на Trezor вредное  ПО. Этому ещё больше содействует факт, что все прошивки Trezor имеют открытый код. Не считая того, потому что ключ устройства Trezor хранится на STM32, злодей также может поменять ключ опосля перепрошивки устройства. Так даже производитель не сумеет выяснить, взломано ли устройство и совершенно не поддельное ли оно.

У Ledger таковых заморочек нет, поэтому что Secure Enclave способен защитить ключ устройства, который Ledger употребляет для доказательства его аутентичности. Это значительно понижает возможность внедрения в цепь поставок поддельных либо взломанных устройств.

Фраза для восстановления

Самая уязвимая часть головоломки сохранности – это, наверняка, фраза для восстановления. Фраза для восстановления – это набор из 12-24 слов, позволяющий вернуть приватные ключи при помощи BIP39. В отличие от аппаратных кошельков, предоставляющих некое препятствие для злоумышленного использования либо взлома, фраза для восстановления представляет собой обыденный текст. В Grid+ эта уязвимость описывается как атака «ящика для носков», так как почти все люди, наверняка, хоть раз прятали свою фразу для восстановления в ящике для носков.

Это, наверняка, основная уязвимость аппаратного кошелька. К тому же в особенности иронически, что если кто-то захотит обезопасить свою фразу для восстановления, то ему, может быть, придётся пользоваться банковским сейфом. Опосля практически десятилетних трудов по созданию распределённых пиринговых средств, фраза для восстановления возвращает нас туда, откуда мы начинали, когда держали средства в банке. Это ещё раз подчёркивает тот факт, что криптовалюты – это актив на предъявителя. Как и в случае золота, их сохранность, по последней мере пока, зависит от возможности юзера на физическом уровне их обезопасить либо скрыть их местопребывание.

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

Слежка

Крайнее, что стоит хотя бы кратко разглядеть, – это мысль слежки. Если злодею получится заполучить ПИН от вашего аппаратного кошелька, может быть что угодно. Есть удалённые механизмы слежки, когда может врубаться и просматриваться веб-камера компа без ведома либо согласия юзера. Есть также наиболее прямые методы слежки, когда там, где вы живёте либо работаете, быть может установлена сокрытая камера. Эдвард Сноуден был очевидно параноидален насчёт слежки, как видно из того, что он употреблял одеяло, чтоб скрыть вводимый пароль. Может быть, это не самая возможная угроза, но если есть достаточная мотивация и известна мишень, то это, пожалуй, самый обычной вектор атаки.

Эдвард Сноуден – из кинофильма «Citizenfour. Правда Сноудена»

Подытожим

Какие выводы можно сделать из вышесказанного? Ниже приводится резюме возможных уязвимостей Trezor и Ledger. Если б не уязвимость к атаке посредника, Ledger вышел бы очевидным победителем. Но данная неувязка усложняет какое бы то ни было решение. Если б Ledger прислушался к отзывам общества и включил полный адресок получателя, либо хотя бы 10-11 символов, заместо всего только 8 символов, то мне было бы намного спокойнее именовать данное устройство наилучшим.

Не так давно BTChip (Ledger) анонсировала обновление приложения кошелька для отображения полных адресов. Как это произойдёт, я буду советовать Ledger как наилучший выбор, чем Trezor.

Сопоставление уязвимостей

Можно ли ещё чего-нибудть сделать, чтоб повысить сохранность хранения криптовалют? Да. Кошельки с мультиподписью. Кошельки с мультиподписью разрешают переводить средства лишь опосля доказательства транзакции n из m ключей. В простейшей форме это 2 из 3 ключей. В случае Биткойна и его производных (таковых как Litecoin) конкретно так я и рекомендую хранить институциональные средства. Разработка является развитой, имеет долгую историю удачного внедрения и как Trezor, так и Ledger дают ту либо иную форму поддержки мультиподписей. Не считая того, необходимость доказательства транзакции несколькими людьми, до этого чем можно будет перевести средства, создаёт внутренние средства контроля, обычно желаемые в компании.

К огорчению, Ethereum пока не имеет интегрированной поддержки кошельков с мультиподписью. Хоть какой кошелёк Ethereum с мультиподписью основан на смарт-контракте, а этот смарт-контракт может иметь уязвимости, как не так издавна случилось в случае взлома Parity. Потому, если гласить о Ethereum, я советую дождаться внедрения EIP86, до этого чем употреблять мультиподписи для неопасного хранения эфира либо активов ERC20.

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

Author: Anonim