О модели безопасности программных кошельков | Леджер

О модели безопасности программных кошельков | Леджер

Исходный узел: 2671485

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

Две недели назад, Запрещенные истории обнародовала целенаправленную атаку на тысячи людей по всему миру. Эта атака использовала уязвимости на Android и iOS для установки шпионского ПО, разработанного NSO Group: Pegasus. Эта вредоносная программа способна отслеживать всю активность устройства и похищать личную информацию: SMS, разговоры в WhatsApp и Signal, телефонные звонки и т. д. В этой статье объясняется, как в этих условиях такая вредоносная программа сможет извлечь все секреты программных кошельков и различия с точки зрения безопасности между программными кошельками на мобильных телефонах и настольных компьютерах.

Эта статья предназначена быть не очень технической. Для простоты будут обсуждаться только основные функции.

Защита секретов

Что хранится в криптокошельке?

Кошельки на самом деле не хранят криптовалюты пользователей: они хранят только секреты, особенно закрытые ключи, которые позволяют получить доступ к криптовалютам и возможность их тратить. Эти закрытые ключи в основном представляют собой закрытые ключи ECC (криптография на эллиптических кривых) с различными кривыми в зависимости от блокчейна. Наиболее распространенными кривыми являются secp256k1 (Биткойн, Эфириум…), Ed25519 (Монеро) или BLS12-381 (Эфириум 2).

Эти ключи используются для подписи транзакций и, в более общем плане, для взаимодействия с активами блокчейна.

Хранение этих ключей зависит от типа кошелька: детерминированный или нет. Иерархический детерминированный (HD) кошелек позволяет создавать дерево ключей из одного главного секрета, называемого начальным числом (см. BIP44). Это начальное число часто получается из мнемонической последовательности из 12, 18 или 24 слов, случайно сгенерированных или выбранных пользователем (см.BIP39). Эти мнемоники позволяют ограничить количество хранимых ключей: они могут быть пересчитаны в любое время из семени. Кошельки HD хранят только эту мнемонику или начальное число.

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

Основные функции безопасности кошелька заключаются в правильном создании, хранении и использовании этих секретов. Существуют разные уровни защиты от разных типов угроз:

  • Защита от атак «злой девы»: Злоумышленник, имеющий временный доступ к кошельку, не должен иметь возможности добавить внутрь кошелька бэкдор, позволяющий украсть PIN-код или пароли, защищающие секреты.
  • Безопасный криптографический материал: Ключи и одноразовые номера, сгенерированные кошельком, никогда не должны быть предсказуемыми. Кроме того, знание секретов (кроме начальных), сгенерированных в какой-то момент времени, не должно позволять предсказать секрет, который будет сгенерирован в будущем.
  • Защита в состоянии покоя: Если злоумышленник получит постоянные данные программного кошелька, он не сможет извлечь ключи.
  • Защита при тайном использовании: Когда кошелек разблокирован, ключи не должны быть доступны злоумышленнику или вредоносному ПО.
Аппаратные кошельки

Модель безопасности аппаратного кошелька направлена ​​на устранение этих угроз безопасности. Аппаратные кошельки изначально защищают от вредоносных программ. Это независимые устройства, которые самостоятельно подписывают транзакции. Криптографические материалы всегда остаются внутри устройства и никогда не отправляются в программное приложение, с которым они связаны. Интерфейс связи всегда прост, что значительно снижает поверхность атаки. Это может быть USB, Micro SD или камера + экран (через QR-код) или Bluetooth Low Energy.

Кроме того, аппаратные кошельки встраивают экран прямо в устройство, позволяя пользователю проверять действия, которые он собирается выполнить, взаимодействуя со своими секретными ключами. Эти ручные проверки устройств являются очень эффективной мерой противодействия вредоносным программам на компьютере/мобильном устройстве. Там, где вредоносное ПО на компьютере/мобильном устройстве может получить доступ к секретам (начальным или закрытым ключам) или даже поменять/изменить адреса или суммы, когда пользователь выполняет транзакцию, это невозможно с аппаратным кошельком.

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

Программное обеспечение кошельки

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

Далее рассматриваются настольные (Windows, macOS, Linux) кошельки и мобильные кошельки. Основные различия между ними в основном связаны с механизмами безопасности, предлагаемыми операционной системой.

Программные кошельки на компьютере

Несколько популярных кошельков, таких как Electrum, Exodus, Atomic или Bitcoin core, работают на компьютерах.

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

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

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

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

Большинство паролей плохой. В Сеть просочились миллиарды паролей, и многие люди склонны повторно использовать свои пароли для нескольких служб. Готовые инструменты позволяют восстановить пароли к криптовалютным кошелькам, такие как btcrecover or hashcat. Пароли могут быть сложными, но за каждым кошельком стоят реальные деньги, поэтому злоумышленники без колебаний вложат ресурсы для взлома таких паролей.

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

Наиболее опасными угрозами для программных кошельков являются специализированные вредоносные программы и похитители, разработанные специально для выкачивания ваших средств. Такие вредоносные программы, как KPOT или ЭлектроРАТ, даже не придется подбирать ваш пароль: они могут напрямую перехватить его, когда вы его вводите, расшифровать данные конфигурации кошелька и эксфильтровать начальное число.

Вот игрушечное приложение, разработанное для этой статьи, предназначенное для кошелька Electrum (хотя это мог быть и другой программный кошелек). Он имитирует вредоносное ПО, которое крадет пароль пользователя при его вводе жертвой. Затем пароль используется для расшифровки данных кошелька и отображения начального числа:

Как вы видите, даже если пароль сложный, приложение может получить его, поскольку оно напрямую перехватывает его в памяти.

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

В заключение о программных кошельках, работающих на компьютерах:

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

Смартфоны Android и iOS по умолчанию предлагают функции безопасности, которые не так широко используются в настольных операционных системах.

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

Следовательно, вредоносное приложение не может считывать данные из другого приложения, за исключением следующих случаев:

  • Он находит уязвимость в этом приложении.
  • Или ему удается повысить привилегии, например, используя уязвимость ядра, позволяющую получить root-доступ к системе.

К сожалению, такие атаки существуют. Они намного проще на устаревших версиях Android и iOS, а также на старых или дешевых устройствах, где сторонний код часто менее безопасен.

В современной ОС эти атаки сложнее, но вполне осуществимы. Например, Ян Бир показал чрезвычайно впечатляющая атака с нулевым кликом на iOS 13.5 в декабре 2020 года. Гуан Гун представил цепочка эксплойтов удаленно рутировать широкий спектр Android-устройств на базе Qualcomm в июне 2020 года. А две недели назад Запрещенные истории сообщила, что NSO Group использовала цепочку эксплойтов для атаки на последние устройства iOS и Android с использованием уязвимостей нулевого дня.

Менее изощренные злоумышленники могут использовать локальные уязвимости, позволяющие им извлекать данные кошелька из вредоносного приложения. Брокеры уязвимостей, такие как Zerodium, платят до $ 200,000 за повышение привилегий до root на Android и iOS, но до 1,500,000 XNUMX XNUMX долларов за удаленные атаки.

Мы изучили пару кошельков для Android/iOS. Их безопасность зависит от самого приложения, а также от функций безопасности базовой ОС. Конечно, когда безопасность операционной системы нарушена, приложение перестает быть безопасным.

Обычно используются два метода защиты семян:

  • La protezione con password – данные кошелька защищены паролем, введенным пользователем. Дизайн такой же, как у настольных кошельков. На практике извлечь данные сложнее, чем с компьютера, так как извлечь данные приложения из вредоносного приложения технически сложнее по причинам, изложенным выше. Однако восстановить пароль после кражи данных на практике проще: вводить сложные пароли на мобильных телефонах утомительно, поэтому пользователи склонны выбирать более простые. Более того, механизмы получения ключа (используемые для создания ключа из пароля) на мобильных устройствах обычно проще взломать, поскольку они часто более легкие по соображениям производительности.
  • Coinomi и Metamask являются примерами таких кошельков.

В следующем видео мы покажем еще одно игрушечное приложение, разработанное для этой статьи. Это вредоносное ПО, замаскированное под поддельный биткойн-тикер. Вредоносное ПО использует известную уязвимость на неисправленном устройстве, чтобы получить root-доступ на устройстве и эксфильтровать зашифрованное начальное число на удаленный сервер. Затем сервер перебирает пароль для расшифровки начального числа.

Этот метод не относится к кошельку. Его можно (более или менее) легко адаптировать к любому защищенному паролем кошельку. Вот тот же пример с кошельком Coinbase:

[Встраиваемое содержимое]

  • Безопасность на основе хранилища ключей Android (или цепочки ключей iOS) – В этом случае данные кошелька шифруются с помощью ключа шифрования, хранящегося в хранилище ключей Android (связка ключей iOS). Эти службы изначально были разработаны для безопасного хранения ключей шифрования, и многие приложения используют их для создания ключа, который будет шифровать все конфиденциальные пользовательские данные. Приложения, использующие хранилище ключей, реализуют следующий механизм:
    • Приложение запрашивает хранилище ключей для создания ключа шифрования для данного идентификатора. Keystore генерирует ключ и надежно сохраняет его.
    • Когда приложению требуется зашифровать или расшифровать большой двоичный объект, оно отправляет большой двоичный объект вместе с идентификатором ключа в хранилище ключей.
    • Наконец, хранилище ключей проверяет, действительно ли приложение имеет права на использование этого ключа, и отправляет обратно выходные данные в приложение.

В этой модели приложение не может знать значение ключа, но может его использовать. Также можно связать с ключом дополнительные элементы управления доступом: например, доступ к ключу можно обусловить аутентификацией пользователя (запрос PIN-кода или графического ключа).

Этот механизм может обеспечить дополнительную безопасность по сравнению с защитой на основе пароля. Действительно, на последних телефонах хранилище ключей поддерживается Trusted Execution Environment (TEE) или иногда Secure Element.

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

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

Это по простой причине: KeyStore и KeyChain предлагают общие службы подписи и шифрования, но не поддерживают криптографию, используемую в криптовалютах. Например, KeyStore реализует подпись ECDSA, но только для кривых NIST, определенных в FIPS 186-4 (P-224, P-256, P-384 и P-521). Биткойн использует другую кривую, secp256k1, который пока не поддерживается.

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

В заключение по мобильным кошелькам:

  • Механизм изоляции между приложениями, предоставляемый iOS/Android, поднимает планку безопасности по сравнению с программным кошельком, работающим на компьютере. Злоумышленнику необходимо сначала повысить привилегии для доступа к данным приложения. Это возможно на устаревших устройствах. Опытные злоумышленники (Ян Бир сделал это только за 6 месяцев, но… это Ян Бир) также могут сделать это на недавно пропатченных устройствах.
  • Службы защиты ключей (KeyStore, KeyChain) могут добавить дополнительный уровень безопасности для защиты секретов в состоянии покоя. Тем не менее, поскольку они не поддерживают криптографические алгоритмы для криптовалютных приложений, ключ все же можно извлечь.
  • Во всех случаях злоумышленник с корневым доступом может либо получить семя в состоянии покоя, когда оно используется, либо использовать права пользователя для очистки кошелька, используя программный кошелек в качестве оракула.

Вот последний пример игрушечной шпионской программы, нацеленной на кошелек Blockchain.com (хотя это можно было бы сделать и на многих других кошельках так же легко). Он устанавливается удаленно и следит за кошельком. После того, как пользователь прошел аутентификацию с помощью своего отпечатка пальца, ключ шифрования разблокируется, а данные кошелька расшифрованы. Шпионское ПО использует приложение для получения этого ключа шифрования. Затем он передает ключ и данные кошелька на удаленный сервер:

[Встраиваемое содержимое]

Заключение

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

  • Механизм изоляции между приложениями, предоставляемый iOS/Android, поднимает планку безопасности по сравнению с программным кошельком, работающим на компьютере. Злоумышленнику необходимо сначала повысить привилегии для доступа к данным приложения.
  • Службы защиты ключей (KeyStore, KeyChain) могут добавить дополнительный уровень безопасности для защиты секретов в состоянии покоя. Тем не менее, поскольку они не поддерживают криптографические алгоритмы для криптовалютных приложений, ключами нужно манипулировать непосредственно из приложения, поэтому они обеспечивают ограниченную защиту.
  • Во всех случаях злоумышленник с корневым доступом может либо получить семя в состоянии покоя, когда оно используется, либо использовать права пользователя для очистки кошелька, используя программный кошелек в качестве оракула.

Отметка времени:

Больше от Ledger