Большую часть прошлого года я работал в ConsenSys над энергетическими проектами, кульминацией чего стало ответвление, стремящееся стать первой в мире энергосистемой на основе блокчейна, под названием Grid+. В числе наших приоритетов – создание новой системной архитектуры, которая позволит неискушённым пользователям безопасно хранить и использовать криптовалюты. Благодаря моей работе у меня также была возможность взаимодействовать с рядом людей и крупных организаций, вступающих в криптопространство, которые неизбежно приходят к одному и тому же вопросу: Как хранить криптовалюту? Какой способ обращения с криптовалютой самый безопасный и удобный? Лучший ответ на данный момент – наверное, аппаратный кошелёк. Самые популярные кошельки на рынке сейчас – Trezor и Ledger Nano S. Есть и другие кошельки, такие как KeepKey, но это, по сути, модификации Trezor. Я разобрал кошельки Ledger Nano S и Trezor и хочу поделиться результатами, а также важными выводами насчёт безопасности.
Сюда входит моё мнение о том, где я вижу большие поверхности атаки, но я не обязательно знаю или подразумеваю какой-то конкретный способ взлома. Кроме того, я не рассматривал устройства без собственного дисплея из-за существенно повышенной уязвимости к атакам.
Железо
Trezor
Trezor – относительно простое устройство, подключающееся через разъём Micro-USB. У него очень простой корпус из формованного пластика с двумя пластиковыми кнопками и 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
Потенциальные уязвимости
Приступая к обзору того, что я считаю относительными уязвимостями каждой системы, я опишу некоторые базовые предположения о том, что может случиться. Первое предположение – это то, что компьютер, к которому подключён аппаратный кошелёк, может быть или был тем или иным образом взломан. Я не буду рассматривать, какой именно механизм или какое вредоносное ПО используется для взлома устройства, но просто предположу, что это возможно. Во-вторых, я также рассмотрю способы хищения средств, предположив, что взломщик может завладеть устройством до или после его инициализации пользователем. Я считаю, что вышеупомянутые допущения – хорошая отправная точка, потому что предназначение аппаратных кошельков, по крайней мере в моём понимании, – способствовать уменьшению уязвимостей безопасности исходя из того, что данные допущения верны. Кроме того, если мы отбросим предположение о подсоединении кошелька к взломанному компьютеру, отпадает потребность в аппаратном кошельке, потому что можно просто использовать компьютер.
Атака посредника за $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.
Имел место ряд успешных попыток с помощью одного лишь 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+, можно будет безопасно хранить криптовалюты онлайн. А пока будьте бдительны и помните, что мы живём и работаем в коварной среде. Идеальных решений нет, и мы советуем всем пользователям осведомляться о преимуществах и потенциальных недостатках всех существующих решений.
Источник: bitnovosti.com