Крупномасштабная и высокосогласованная кибератака, нацеленная сразу на четыре ключевые платформы для разработчиков - npm, GitHub, расширения для VSCode и репозитории Python (PyPI), - демонстрирует тревожную эволюцию угроз для цепочки поставок программного обеспечения. Вместо точечных ударов злоумышленники провели скоординированную операцию, скомпрометировав более 430 репозиториев, пакетов и расширений. Её отличительной и новаторской чертой стало использование блокчейна Solana в качестве неуязвимого для блокировки канала командования и управления (Command and Control, C2), что знаменует собой смену парадигмы в инфраструктуре вредоносного ПО. Анализ операционной безопасности, включая геофильтрацию, указывает на вероятное восточноевропейское, возможно, русскоязычное, происхождение угрозы.
Описание
Инцидент вышел на свет 13-14 марта, когда три независимые исследовательские группы - Aikido Security, Socket и Step Security - почти одновременно опубликовали отчёты о различных активностях. Aikido Security предупредила о возвращении кампании «GlassWorm», атаковавшей более 151 репозитория GitHub и пакетов npm с помощью обфускации невидимыми символами Юникода. Socket связала 72 вредоносных расширения для VSCode на площадке Open-VSX с той же кампанией. Step Security раскрыла кампанию «ForceMemo», в которой были скомпрометированы сотни репозиториев Python на GitHub через захват учётных записей и атаки с принудительной отправкой (force-push) кода. Изначально эти активности казались разрозненными, однако более глубокий анализ показал, что они являются частями одной масштабной операции.
Ключевым связующим звеном, подтвердившим единый источник атак, стал один и тот же адрес в блокчейне Solana: "BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC". Этот адрес был жёстко прописан в полезной нагрузке, обнаруженной во всех трёх сегментах кампании. Более того, аналитики обнаружили совпадения в используемой серверной инфраструктуре, включая IP-адреса 45.32.151[.]157 и 217.69.0[.]159, которые фигурировали в отчётах всех исследовательских групп. Временная шкала атак также указывает на координацию: активность началась осенью 2025 года, резко активизировалась в начале марта 2026-го, после чего векторы атак через npm и VSCode были свёрнуты 13 марта, в то время как атака на Python-репозитории оставалась активной. Это демонстрирует высокий уровень управления и адаптации со стороны операторов.
Главная опасность подобных атак на цепочку поставок заключается в их экспоненциальном воздействии. В отличие от традиционного вредоносного ПО, которое заражает устройства поодиночке через фишинг или скомпрометированные сайты, компрометация одного популярного пакета или репозитория мгновенно затрагивает тысячи проектов и, в конечном счёте, миллионы конечных пользователей. Например, только один скомпрометированный репозиторий "pedronauck/reworm" имеет более 1460 звёзд на GitHub. Если вредоносный код попадёт даже к части этих разработчиков, а затем в проекты, над которыми они работают, масштабы потенциального заражения становятся огромными. Поверхность атаки смещается с отдельных компьютеров на всю экосистему создания ПО.
Особую изощрённость кампании придало то, как операторы адаптировали методы обфускации под каждую платформу, сохраняя при этом идентичную конечную полезную нагрузку. Для npm-пакетов и репозиториев GitHub использовались невидимые символы Юникода, которые выглядят как пустая строка в редакторе кода и обманывают как человеческий глаз, так и многие инструменты анализа. В расширениях для VSCode применялась идентичная техника. Для Python-репозиториев злоумышленники использовали цепочку base64, zlib и XOR-шифрование. При этом метод внедрения - захват аккаунта GitHub, перезапись истории коммитов через force-push с сохранением оригинальных данных автора - делал атаку крайне скрытной.
Несмотря на разные пути доставки и обфускации, все три вектора сходились на одной и той же последовательности действий. Вредоносный код, вне зависимости от языка, обращался к одному адресу в блокчейне Solana, опрашивая его на предмет новых транзакций. В мемо (memo) этих транзакций содержалась закодированная ссылка на следующий этап загрузки с традиционного сервера. Примечательно, что даже полезная нагрузка, внедрённая в Python-проекты, в итоге загружала и исполняла инфостилер (программу для кражи данных), написанный на JavaScript и запускаемый через Node.js. Это говорит о стандартизации и экономии усилий со стороны злоумышленников.
Использование публичного блокчейна в качестве канала C2 является наиболее значимым аспектом с технической точки зрения. Этот метод, иногда называемый «блокчейн-сокрытием» (blockchain «etherhiding»), обеспечивает беспрецедентную устойчивость. В отличие от традиционного сервера C2, который можно выявить, заблокировать или изъять, децентрализованный и неизменяемый блокчейн невозможно «выключить». Злоумышленники просто публикуют новые команды в виде транзакций, а вредоносное ПО их считывает. Анализ показал 49 таких обновлений командного сервера за несколько месяцев, что делало инфраструктуру атаки практически неуязвимой для быстрого обезвреживания.
Важным атрибуционным признаком стала обнаруженная в коде географическая фильтрация. Во всех вариантах вредоносного ПО присутствовала проверка, которая определяла, используется ли на системе русский язык, московский часовой пояс или раскладка клавиатуры. В случае положительного результата вредоносная программа завершала работу, не причиняя вреда. Такая практика, характерная для некоторых восточноевропейских киберпреступных группировок, снижает риск привлечения внимания правоохранительных органов страны происхождения операторов и косвенно указывает на их русскоязычное происхождение, хотя связь с государственными структурами не установлена.
Для специалистов по безопасности этот инцидент служит суровым напоминанием о необходимости усилить защиту всей цепочки поставок. Рекомендации включают тщательный аудит зависимостей, использование инструментов для сканирования программного обеспечения на предмет уязвимостей (Software Composition Analysis, SCA), мониторинг аномальных активностей в системах контроля версий, таких как неожиданные force-push, и повышенную осторожность при установке расширений для IDE или пакетов из непроверенных источников. Борьба с угрозами такого масштаба и сложности требует перехода от защиты периметра к глубокому пониманию и контролю над внутренними процессами разработки и используемыми компонентами.
Индикаторы компрометации
IPv4
- 140.82.60.183
- 149.28.24.100
- 155.138.237.76
- 207.246.77.75
- 217.69.0.159
- 217.69.10.135
- 217.69.11.57
- 217.69.11.99
- 45.32.150.97
- 45.32.151.157
- 45.76.44.240
- 66.42.56.190
- 95.179.189.100
Solana C2
- BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC
Funding Wallet
- G2YxRa6wt1qePMwfJzdXZG62ej4qaTC7YURzuh2Lwd3t