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

0

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

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

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

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

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

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

Кошельки на самом деле не хранят пользовательские криптовалюты: они лишь хранят секреты, в частности приватные ключи, предоставляющие доступ к криптовалютам и возможность их тратить. В основном это приватные ключи на основе эллиптической криптографии (ECC) с использованием разных кривых в зависимости от блокчейна. Самые распространённые кривые – это secp256k1 (Биткойн, Эфириум), Ed25519 (Monero) и BLS12-381 (Эфириум 2.0).

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

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

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

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

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

    : Laptop Mag

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

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

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

    Один из самых популярных аппаратных криптокошельков – Ledger – можно купить здесь. Кстати, эта французская компания совсем недавно провела полный ребрендинг.

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

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

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

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

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

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

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

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

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

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

    Два базовых принципа, позволяющих сохранить свои пароли в безопасности, – это использовать менеджер паролей и никогда не использовать один и тот же пароль для разных целей.

    Самая серьёзная угроза для программных кошельков – специализированное вредоносное ПО, похищающее ваши средства. Вредоносному ПО вроде KPOT или ElectroRAT не нужно даже подбирать ваш пароль: они могут непосредственно его перехватить, когда вы его вводите, расшифровать конфигурационные данные кошелька и похитить ваш сид.

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

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

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

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

  • В большинстве случаев программные кошельки для компьютера защищают сид пользователя с помощью пароля.
  • Контроль доступа к файлам этих кошельков главным образом зависит от безопасности компьютера. На практике компьютеры сложно защитить от вредоносного ПО, и с ростом популярности криптовалют атаки на кошельки будут становиться всё более и более изощрёнными.
  • Использовать такие программные кошельки для защиты цифровых активов – плохая идея. Любое специализированное вредоносное ПО сможет заполучить файлы кошелька и найти пароли офлайн или получить их с помощью кейлогера.
  • Угроза Эффективность Причина
    Защита во время хранения ~ Защита полностью зависит от того, насколько сильный пользовательский пароль.
    Защита во время использования секрета Вредоносное ПО может извлечь пользовательский сид из памяти во время использования.
    Безопасный криптографический материал ✔/~ Зависит от реализации. Обычно достаточно хорош.

    Программные кошельки для смартфона

    : Atomic

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

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

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

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

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

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

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

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

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

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

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

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

  • Приложение запрашивает KeyStore о генерировании ключа шифрования для заданного идентификатора. KeyStore генерирует ключ и хранит его.
  • Когда приложение хочет зашифровать или дешифровать данные, оно отправляет их вместе с идентификатором ключа в KeyStore.
  • Наконец, KeyStore проверяет, действительно ли приложение имеет право использовать этот ключ, и отправляет ему выходные данные.
  • При такой модели приложение не может знать значение ключа, но может его использовать. К ключу также можно привязать дополнительный контроль доступа: например, доступ к ключу может определяться аутентификацией пользователя (через запрос PIN-кода или графического ключа для разблокировки).

    Этот механизм может обеспечить дополнительную безопасность в сравнении с парольной защитой. На новых телефонах KeyStore дополнен безопасной средой выполнения (TEE) или иногда технологией Secure Element.

    : Medium

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

    : Medium

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

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

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

    Подытожим мобильные кошельки:

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

    Угроза Эффективность Причина
    Защита во время хранения ~ Доступ часто сложнее, чем на ПК, но пароль чаще проще взломать.
    Защита во время использования секрета Вредоносное ПО может извлечь пользовательский сид из памяти во время использования.
    Безопасный криптографический материал ✔/~ Зависит от реализации. Обычно достаточно хорош.

    В завершение

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

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