Криптовалютный кошелёк – это устройство или приложение, которое позволяет управлять одной или несколькими криптовалютами и проводить транзакции с ними. Основные его функции, связанные с безопасностью, – хранить приватные ключи пользователя и подписывать ими транзакции.
Можно выделить два основных типа кошельков: программные и аппаратные. Они выполняют ту же функцию, но по-разному. Считается, что использовать программные кошельки проще: достаточно одной программы, чтобы создавать, подтверждать и подписывать транзакции. В случае программного кошелька транзакции, созданные в программе, не нужно подтверждать с помощью аппаратного устройства.
Недавно проект Forbidden Stories разоблачил целенаправленную атаку на тысячи людей по всему миру. Эта атака использовала уязвимости в Android и iOS, чтобы устанавливать шпионскую программу Pegasus, разработанную компанией NSO Group. Это вредоносное ПО способно отслеживать всю активность устройства и перехватывать личную информацию: СМС, разговоры в WhatsApp и Signal, телефонные звонки и т. д. В настоящей статье объясняется, как в таких условиях подобное вредоносное ПО может похищать все секреты программных кошельков и в чём разница с точки зрения безопасности между программными кошельками на мобильных телефонах и компьютерах.
Эта статья не ставит цель углубиться в технические подробности. Чтобы она оставалась относительно простой, будут обсуждаться лишь базовые моменты.
Защита секретов
Что хранится в криптокошельке?
Кошельки на самом деле не хранят пользовательские криптовалюты: они лишь хранят секреты, в частности приватные ключи, предоставляющие доступ к криптовалютам и возможность их тратить. В основном это приватные ключи на основе эллиптической криптографии (ECC) с использованием разных кривых в зависимости от блокчейна. Самые распространённые кривые – это secp256k1 (Биткойн, Эфириум), Ed25519 (Monero) и BLS12-381 (Эфириум 2.0).
Эти ключи используются, чтобы подписывать транзакции и в целом взаимодействовать с активами на блокчейне.
Хранение этих ключей зависит от типа кошелька: детерминированный или нет. Иерархически детерминированный (HD) кошелёк позволяет создавать дерево ключей из единого главного секрета, известного как сид (см. BIP44). Этот сид часто получают из мнемонической последовательности из 12, 18 или 24 слов, случайно сгенерированных или выбранных пользователем (см. BIP39). Эта мнемоническая фраза позволяет ограничить число ключей, которые нужно хранить: их можно в любой момент заново вычислить из сида. HD-кошельки хранят только эту мнемоническую фразу или сид.
Недетерминированные кошельки генерируют новый ключ при каждом использовании и должны хранить их все. Их не так просто перенести в новый кошелёк из-за несовместимости резервных копий.
Основные функции кошелька, связанные с безопасностью, заключаются в надлежащем генерировании, хранении и использовании этих секретов. Существуют разные уровни безопасности, связанные с разными типами угроз:
Аппаратные кошельки
Модель безопасности аппаратного кошелька ориентирована на избегание этих угроз. Аппаратные кошельки по самому своему замыслу защищают от вредоносного ПО. Это независимые устройства, самостоятельно подписывающие транзакции. Криптографический материал всегда остаётся внутри устройства и никогда не отправляется в программное приложение, с которым происходит взаимодействие. Интерфейс передачи данных всегда простой, что существенно сокращает поверхность атаки. Это может быть USB, microSD, камера + экран (через QR-код) или Bluetooth с низким энергопотреблением.
Кроме того, аппаратные кошельки имеют встроенный дисплей, позволяющий пользователю проверять выполняемые действия при взаимодействии с секретными ключами. Такая ручная проверка на устройстве – очень эффективная контрмера против вредоносного ПО на компьютере или телефоне. Тогда как вредоносное ПО на компьютере или мобильном устройстве может получать доступ к секретам (сиду или приватным ключам) или даже подменять/изменять адреса или суммы, когда пользователь проводит транзакцию, в аппаратном кошельке это невозможно.
Аппаратные кошельки также защищают от «атак злой горничной» и злоумышленников, получивших физический доступ к устройству. Аппаратные кошельки имеют разные уровни безопасности, но все они по умолчанию защищают от подобных угроз.
Один из самых популярных аппаратных криптокошельков – Ledger – можно купить здесь. Кстати, эта французская компания совсем недавно провела полный ребрендинг.
Программные кошельки
Обычные программные кошельки защищают секреты стандартными способами: с помощью механизмов безопасности операционной системы, под которой они работают, и иногда контроля доступа на основе ПИН-кода или пароля.
Ниже мы рассмотрим кошельки для ПК (Windows, macOS, Linux) и мобильных устройств. Основные различия между ними в основном связаны с механизмами безопасности, предлагаемыми операционной системой.
Программные кошельки для компьютера
Ряд популярных кошельков, таких как Electrum, Exodus, Atomic или Bitcoin Core, работают на компьютерах.
На компьютере механизмы безопасности, предлагаемые операционной системой, чтобы изолировать процессы кошелька от других, ограничены. Большинство приложений запускаются под одним пользователем и могут считывать данные друг друга.
Безопасность этих программных кошельков главным образом зависит от безопасности защищающего их пароля, а также от отсутствия в операционной системе вредоносного ПО (что достаточно сложно гарантировать, см. недавние новости о Pegasus).
Большую часть времени сид хранится в шифрованном контейнере, защищённом паролем. Простейшая атака – это когда вредоносное ПО или инструмент удалённого администрирования пересылает этот шифрованный контейнер злоумышленнику. Затем пароль можно получить либо методом перебора, либо с помощью кейлогера.
В сценарии, когда злоумышленнику лишь удаётся получить доступ к шифрованному контейнеру (злоумышленник находит USB-ключ, содержащий кошелёк, или устанавливает на компьютер вредоносное ПО, но жертва не открывает своё приложение с кошельком), ему нужно искать пароль методом перебора.
Большинство паролей плохи. В сеть слито миллиарды паролей, и многие люди используют одни и те же пароли для нескольких сервисов. Существуют инструменты, позволяющие восстановить пароли от криптовалютных кошельков, такие как BTCRecover или Hashcat. Пароли могут быть сложными, но в каждом кошельке есть реальные деньги, так что злоумышленники готовы вкладывать ресурсы, чтобы эти пароли взломать.
Два базовых принципа, позволяющих сохранить свои пароли в безопасности, – это использовать менеджер паролей и никогда не использовать один и тот же пароль для разных целей.
Самая серьёзная угроза для программных кошельков – специализированное вредоносное ПО, похищающее ваши средства. Вредоносному ПО вроде KPOT или ElectroRAT не нужно даже подбирать ваш пароль: они могут непосредственно его перехватить, когда вы его вводите, расшифровать конфигурационные данные кошелька и похитить ваш сид.
В видео ниже показано демонстративное приложение, созданное специально для этой статьи и ориентированное на кошелёк Electrum (хотя это мог быть и другой программный кошелёк). Оно симулирует вредоносное ПО, похищающее пользовательский пароль, когда жертва его вводит. Затем с помощью пароля расшифровываются данные кошелька, чтобы отобразить сид:
Как можно видеть, даже если пароль сложный, приложение способно его заполучить, так как оно извлекает его непосредственно из памяти.
Этот пример очень похож на недавние кампании вредоносного ПО .SCR, использовавшегося для кражи криптовалют. Преступники использовали техники социальной инженерии, чтобы обманным путём заставить пользователей скачать вредоносный скринсейвер. Этот скринсейвер похищал с компьютера жертвы информацию, включая данные для входа в кошелёк и на криптовалютные биржи.
Подытожим, что мы выяснили о программных кошельках для компьютера:
Угроза | Эффективность | Причина |
Защита во время хранения | ~ | Защита полностью зависит от того, насколько сильный пользовательский пароль. |
Защита во время использования секрета | ❌ | Вредоносное ПО может извлечь пользовательский сид из памяти во время использования. |
Безопасный криптографический материал | ✔/~ | Зависит от реализации. Обычно достаточно хорош. |
Программные кошельки для смартфона
Смартфоны на 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. Их безопасность зависит как от самого приложения, так и от свойств безопасности операционной системы. Конечно, когда защита операционной системы взломана, приложение более не безопасно.
Обычно используются два метода защиты сида:
На следующем видео показано ещё одно демонстративное приложение, созданное для этой статьи. Это вредоносное ПО, замаскированное под виджет для отслеживания курса биткойна. Данное ПО использует известную уязвимость на непропатченном устройстве, чтобы получить права администратора и переслать шифрованный сид на удалённый сервер. Затем сервер подбирает пароль, чтобы расшифровать сид.
Данный метод не привязан к какому-то конкретному кошельку. Его (более или менее) легко адаптировать к любому кошельку с парольной защитой. Вот тот же пример с кошельком Coinbase:
В приложениях, использующих KeyStore, реализован следующий механизм:
При такой модели приложение не может знать значение ключа, но может его использовать. К ключу также можно привязать дополнительный контроль доступа: например, доступ к ключу может определяться аутентификацией пользователя (через запрос PIN-кода или графического ключа для разблокировки).
Этот механизм может обеспечить дополнительную безопасность в сравнении с парольной защитой. На новых телефонах KeyStore дополнен безопасной средой выполнения (TEE) или иногда технологией Secure Element.
Это значит, что злоумышленник с правами администратора не сможет извлечь ключи шифрования из KeyStore. Тем не менее он сможет использовать KeyStore в качестве оракула дешифрования и шифровать и расшифровывать любые данные, какие пожелает.
Помимо шифрования, KeyStore позволяет также подписывать транзакции. Так может ли кошелёк защитить свои ключи шифрования, чтобы их было сложно извлечь? К сожалению, нет: программные кошельки не используют KeyStore, чтобы подписывать транзакции, и приложение всегда манипулирует приватными ключами в виде простого текста.
Причина проста: KeyStore и Keychain предлагают общие услуги по шифрованию и подписыванию транзакций, но не поддерживают криптографию, используемую в криптовалютах. Например, KeyStore использует подписи ECDSA, но только на основе кривых, определённых в стандарте Национального института стандартов и технологий США (NIST) FIPS 186-4 (P-224, P-256, P-384 и P-521). Биткойн использует другую кривую – secp256k1, – которая пока не поддерживается.
Таким образом, KeyStore и Keychain – хорошие сервисы для защиты секретов и приватных ключей. Они способны предложить определённую степень безопасности, шифруя конфиденциальные данные: шифрование исправляет некоторые классы уязвимостей (например, произвольное чтение файлов). Однако если получения прав администратора недостаточно, чтобы извлечь значения ключей из KeyStore, дополненного аппаратными методами, то его достаточно, чтобы дешифровать конфиденциальные данные. Злоумышленник, которому удастся получить доступ к приложению, сможет извлечь его секреты.
Подытожим мобильные кошельки:
Вот последний пример демонстративного шпионского ПО, ориентированного на кошелёк Blockchain.com (хотя это можно так же легко провернуть со многими другими кошельками). Оно устанавливается удалённо и следит за кошельком. Как только пользователь авторизовался с помощью отпечатка пальца, ключ шифрования разблокируется и данные дешифруются. Шпионское ПО использует приложение, чтобы заполучить этот ключ шифрования и затем пересылает его вместе с данными кошелька на удалённый сервер:
Угроза | Эффективность | Причина |
Защита во время хранения | ~ | Доступ часто сложнее, чем на ПК, но пароль чаще проще взломать. |
Защита во время использования секрета | ❌ | Вредоносное ПО может извлечь пользовательский сид из памяти во время использования. |
Безопасный криптографический материал | ✔/~ | Зависит от реализации. Обычно достаточно хорош. |
В завершение
Итак, программные кошельки имеют разные уровни безопасности. Однако их модель угроз не охватывает случай, когда вредоносное ПО запущено в операционной системе с правами администратора. Причина в том, что программный кошелёк не может быть более безопасным, чем операционная система, под которой он работает.