Атаки на цепочку поставок: вредоносные пакеты и скомпрометированные библиотеки кошельков
Атака на цепочку поставок в крипте прячет вредоносный код в программах, которым вы доверяете. Узнайте, как работают скомпрометированные пакеты и библиотеки кошельков и как защититься.
Атака на цепочку поставок в крипте — это ситуация, когда преступники компрометируют программное обеспечение, от которого зависят кошельки, приложения или сайты, например пакет с открытым исходным кодом, расширение браузера или сервер обновлений, чтобы вредоносный код дошёл до пользователей по доверенному каналу. Обычно такой код подменяет адреса получателей, внедряет на сайт wallet drainer или крадёт сид-фразы, а жертвы зачастую ничего не делают неправильно — они просто пользуются продуктом, которому уже доверяют.
Эти атаки касаются всех в крипте, а не только разработчиков. Современные кошельки и децентрализованные приложения собраны из сотен сторонних компонентов, и один скомпрометированный компонент может затронуть сразу множество продуктов. В этом руководстве объясняется, как работают такие атаки, на что обращать внимание и как снизить риски, будь вы пользователем или разработчиком.
Как работает атака на цепочку поставок
«Цепочка поставок» криптоприложения — это всё, из чего оно состоит: библиотеки кода, инструменты сборки, хостинг-провайдеры, сети доставки контента и серверы обновлений. Атака обычно проходит по таким шагам:
- 1Получение доступа. Злоумышленник фишингом выманивает данные у мейнтейнера популярной библиотеки, покупает заброшенный пакет, подбирает слабый пароль или взламывает сервер сборки.
- 2Внедрение вредоносного кода. Он публикует новую версию со скрытым кодом, часто обфусцированным и рассчитанным на срабатывание только при определённых условиях, например при наличии криптокошелька.
- 3Распространение через обновления. Приложения, которые автоматически подтягивают последнюю версию библиотеки, включают вредоносный код в следующую сборку, а сайты — сразу при загрузке скрипта.
- 4Кража. Код может подменять скопированные в буфер обмена адреса, показывать поддельный запрос транзакции, запрашивать сид-фразу или внедрять дрейнер во фронтенд децентрализованного приложения.
- 5Сокрытие следов. Злоумышленники часто быстро удаляют код после использования, что затрудняет расследование.
Существуют задокументированные реальные инциденты по этой схеме. В 2018 году в популярный пакет JavaScript добавили вредоносную зависимость, предназначенную для кражи у пользователей конкретного приложения биткоин-кошелька. В декабре 2023 года скомпрометированная версия библиотеки Connect Kit от Ledger ненадолго привела к тому, что несколько децентрализованных приложений показывали своим пользователям wallet drainer. Оба случая показывают, что слабым местом был общий код, а не пользователи. Подробнее читайте в статье Риски vanity-адресов и похожих адресов.
Типичные точки входа
| Точка входа | Как её используют | Кто страдает |
|---|---|---|
| Пакеты с открытым кодом (npm, PyPI и подобные) | Публикуется вредоносная версия или загружается пакет с почти таким же названием | Приложения и разработчики, использующие пакет |
| Фронтенд-скрипты, загружаемые у третьих сторон | Скрипт изменяют, чтобы внедрить дрейнер | Каждый посетитель сайта |
| Расширения браузера | Расширение продают или угоняют, а затем обновляют вредоносным кодом | Пользователи, у которых установлено расширение |
| Обновления приложений | Компрометируются сервер обновлений или ключи подписи | Пользователи, установившие обновление |
| Инструменты разработчика и пакеты, предложенные ИИ | Поддельные названия пакетов, выглядящие правдоподобно | Разработчики, устанавливающие пакеты без проверки |
Тайпосквоттинг — загрузка пакета с названием, очень похожим на название популярного, — встречается особенно часто. Разработчик, опечатавшийся в названии пакета, может установить вредоносное ПО, даже не заметив этого.
Гипотетический пример
Это собирательный иллюстративный пример, а не реальный случай. Представьте небольшую децентрализованную биржу, которая загружает популярную библиотеку подключения кошельков из публичного реестра пакетов. Однажды утром мейнтейнер библиотеки попадается на фишинг, и злоумышленник публикует новую версию. Сайт биржи автоматически загружает последнюю версию.
В течение нескольких часов каждый пользователь, подключающий кошелёк, видит то, что выглядит как обычный запрос на своп. На самом деле это запрос на одобрение его токенов в пользу контракта злоумышленника. Пользователи, внимательно читающие экран одобрения в кошельке, замечают незнакомый контракт и останавливаются. Те, кто прокликивает не глядя, теряют токены. Команда биржи обнаруживает проблему, когда пользователи сообщают о потерях, и публикует предупреждение, но к этому моменту код уже удалён.
Тревожные признаки для пользователей
- Знакомое приложение вдруг просит сид-фразу или шаг «валидации кошелька», которого раньше никогда не было.
- Обычное действие вызывает необычный запрос в кошельке, например неограниченное разрешение или подпись для неизвестного контракта.
- Адрес на экране вашего аппаратного кошелька не совпадает с тем, который вы собирались использовать.
- Расширение браузера обновляется и запрашивает новые разрешения, особенно на чтение и изменение данных на всех сайтах.
- Проект или исследователи безопасности публикуют срочные предупреждения не пользоваться сайтом или приложением.
Многие из этих признаков совпадают с признаками вредоносного ПО для буфера обмена и поддельных приложений-кошельков, которые используют похожие приёмы. См. также: Поддельные обновления браузера и капча-вредоносы, нацеленные на криптопользователей.
Как защититься
Пользователю
- 1Используйте аппаратный кошелёк и перед подтверждением читайте на его экране адрес, сумму и контракт.
- 2Сведите расширения к минимуму. Удалите те, которыми не пользуетесь, и будьте осторожны, если у расширения меняется владелец или оно запрашивает новые разрешения.
- 3Разделяйте средства. Храните долгосрочные активы в кошельке, который редко подключается к сайтам, а для повседневного DeFi используйте другой кошелёк.
- 4Делайте паузу после предупреждений о безопасности. Не пользуйтесь приложением, пока оно не подтвердит, что проблема устранена.
- 5Регулярно отзывайте ненужные разрешения.
Разработчику или проекту
- Фиксируйте версии зависимостей и используйте lock-файлы; проверяйте изменения перед обновлением.
- Внимательно проверяйте названия пакетов и отдавайте предпочтение хорошо поддерживаемым библиотекам.
- Требуйте многофакторную аутентификацию для аккаунтов в реестрах пакетов и на хостингах кода.
- Используйте подписанные релизы и, где возможно, воспроизводимые сборки, чтобы пользователи могли проверять бинарные файлы.
- Применяйте content security policy и subresource integrity для сторонних скриптов.
Что делать, если вы пострадали
- 1Прекратите пользоваться затронутым приложением или расширением и отключите все кошельки.
- 2Проверьте историю транзакций на наличие разрешений или переводов в затронутый период.
- 3Отзовите подозрительные разрешения и переведите оставшиеся средства на новый кошелёк с новой сид-фразой, если ваша сид-фраза могла быть раскрыта.
- 4Соберите хеши транзакций и адреса, а затем сообщите об инциденте через официальные каналы проекта и нашу форму для сообщений о мошенничестве.
Следуйте полному чек-листу в статье что делать немедленно, если ваш кошелёк скомпрометирован.
Итог
Атаки на цепочку поставок превращают доверенное ПО в канал для кражи, поэтому нельзя полагаться только на то, что вы избегаете подозрительных ссылок. Считайте экран аппаратного кошелька и запросы кошелька последней проверкой, используйте как можно меньше программ и быстро реагируйте на официальные предупреждения о безопасности. Основная ответственность лежит на разработчиках: фиксируйте, проверяйте и подписывайте всё, что выпускаете.
Частые вопросы
Что такое атака на цепочку поставок в крипте?
Это атака, при которой преступники компрометируют программное обеспечение, от которого зависят другие продукты, — например, библиотеку кода, расширение браузера или обновление приложения, — вместо того чтобы атаковать пользователей напрямую. Когда доверенное ПО обновляется, вредоносный код попадает во все приложения и ко всем пользователям, которые от него зависят, чаще всего чтобы украсть криптовалюту или подменить адреса.
Может ли атака на цепочку поставок затронуть аппаратный кошелёк?
Экран аппаратного кошелька создан, чтобы защищать вас, даже если ваш компьютер или сайт скомпрометированы, ведь вы подтверждаете реальный адрес и сумму на самом устройстве. Тем не менее атака может обманом заставить вас одобрить вредоносную транзакцию, если вы не читаете экран, поэтому всегда проверяйте данные на самом устройстве.
Как узнать, пострадал ли сайт, которым я пользовался?
Обычно об этом сообщают в официальных объявлениях пострадавшего проекта или исследователи безопасности. Если проект, которым вы пользовались, сообщает о скомпрометированной библиотеке или фронтенде, проверьте, подписывали ли вы что-нибудь в затронутый период, отзовите разрешения и при необходимости переведите средства на новый кошелёк.
Защищены ли кошельки с открытым исходным кодом от атак на цепочку поставок?
Открытый код помогает, потому что его могут проверить больше людей, но не делает ПО неуязвимым. Вредоносный код может проникнуть через зависимости, скомпрометированные аккаунты мейнтейнеров или системы сборки. Воспроизводимые сборки, подписанные релизы и аккуратное управление зависимостями снижают риск.
