19 мая стартовала скоординированная кампания по компрометации открытой экосистемы разработки. Злоумышленники внедрили вредоносный код в несколько компонентов, которые ежедневно используют миллионы программистов. Под удар попали npm-пакеты (прежде всего из пространства имен @antv), популярное действие для GitHub Actions (actions-cool/issues-helper) и расширение для редактора кода VSCode (nrwl.angular-console версии 18.95.0). Установка любого из этих компонентов запускала многоступенчатую цепочку заражения. Исследователи из компании Wiz Research зафиксировали аномальную активность в реальном времени в средах разработки и непрерывной интеграции. По их данным, кампания направлена на кражу учетных данных, закрепление в системе и дальнейшее удаленное управление зараженными машинами.
Описание
Атака затронула все звенья цепи поставок программного обеспечения. Разработчики, использующие зараженные пакеты, сами того не зная, загружали на свои рабочие станции и в инфраструктуру непрерывной поставки исполняемый код, который действовал в несколько этапов. Сначала вредоносная программа извлекала дополнительные полезные нагрузки из репозиториев GitHub. Примечательно, что для хранения этих нагрузок использовались "осиротевшие" коммиты - записи изменений, которые уже не принадлежат ни одному активному репозиторию. Такой приём позволяет долгое время оставаться незамеченным, потому что стандартные системы мониторинга редко проверяют заброшенные коммиты. Затем с помощью среды выполнения bun загружались и запускались вторичные модули, отвечавшие за кражу данных и создание точки опоры в системе.
Специалисты Wiz Research в своём отчёте описали, какие именно сведения собирал зловред. Он извлекал токены доступа к GitHub, ключи SSH, учетные данные для облачных платформ (AWS, Azure, Google Cloud), а также пароли и сессионные cookie из браузеров. Вся эта информация утекала через специально созданные злоумышленниками публичные репозитории GitHub. Причём описание таких репозиториев содержало строку, написанную задом наперёд: niagA oG eW ereH :duluH-iahS. Если прочитать её справа налево, получается "Shah-dulud :Here we Go Again" - возможно, отсылка к какому-то внутреннему мему группы.
Для закрепления в системе вредоносное ПО устанавливало бэкдор на языке Python. Файл сохранялся по пути ~/.local/share/kitty/cat.py. Этот скрипт регулярно обращался к API GitHub с запросом поиска коммитов, содержащих ключевое слово firedalazer. Когда злоумышленники публиковали новый коммит с таким словом, бэкдор получал зашифрованную команду. После проверки цифровой подписи удалённый код загружался и выполнялся. Фактически операторы получали полный контроль над заражённой машиной. Правда, на момент публикации отчёта этот канал управления не проявлял активности: серверы управления молчали. Тем не менее, механизм остаётся работоспособным, и в любой момент злоумышленники могут его активировать.
Атрибуция атаки основана на пересечениях в инфраструктуре, поведении вредоносного кода и операционных шаблонах. Эксперты Wiz Research с умеренной уверенностью связывают эту кампанию с группой TeamPCP. Ранее этот же кластер проявлял активность, направленную на разработчиков, и уже был замечен в атаках на цепочки поставок. Хотя расследование продолжается, текущий инцидент демонстрирует высокий уровень координации и зрелости тактик, характерный именно для TeamPCP.
Группам реагирования на инциденты следует немедленно проверить рабочие станции разработчиков, среды CI/CD и репозитории на предмет признаков компрометации. Нужно убедиться, что никто не устанавливал затронутые пакеты или расширение VSCode. Особое внимание стоит уделить активности в GitHub: не появились ли подозрительные репозитории, не создавались ли новые токены доступа, не выполнялись ли необычные рабочие процессы. Поскольку вредоносное ПО целенаправленно ворует разработческие учётные данные, нужно считать скомпрометированными все токены GitHub, ключи SSH, пароли к облачным сервисам и секреты CI/CD. Их следует отозвать и заменить. Кроме того, необходимо проверить наличие файла ~/.local/share/kitty/cat.py как на macOS, так и на Linux. На macOS дополнительными индикаторами служат файлы автозагрузки LaunchAgents, а на Linux - systemd-юниты с похожими именами. Любое необычное исходящее взаимодействие с GitHub (частые запросы к API поиска коммитов) должно быть проанализировано.
Угроза остаётся актуальной. Разработчикам и компаниям, использующим открытые компоненты, стоит усилить защиту цепочки поставок. Внедрение верификации пакетов, формирование списка разрешённых зависимостей и генерация SBOM (спецификации состава программного обеспечения) помогут снизить риск повторения подобных атак. Однако главный урок этого инцидента - даже доверенные пакеты с большой аудиторией могут быть скомпрометированы, и доверие к открытому коду должно подкрепляться непрерывным мониторингом. Расследование продолжается, и команда Wiz Research обещает обновлять данные по мере поступления новой информации.
Индикаторы компрометации
MD5
- b06b126b9e26af03a7ef2f8b8e90d446
SHA1
- 783b4019fc5b942a29846132d28441c8fc31bed8
SHA256
- fb5c97557230a27460fdab01fafcfabeaa49590bafd5b6ef30501aa9e0a51142