Инфраструктурный код оказался удобной ловушкой для рабочих машин разработчиков. Aikido обнаружила вредоносный код сразу в двух Terraform-провайдерах и двух Go-модулях. Компания считает находку первым известным ей случаем систематического распространения вредоносного ПО через Terraform Registry.
Опасными оказались провайдеры gocommunity-io/dockerd и kreuzwenker/docker, опубликованные в начале сентября. Второй имитирует популярный kreuzwerker/docker, у которого насчитывается около 56 млн загрузок. Terraform-провайдер представляет собой плагин, через который Terraform управляет внешними сервисами, поэтому такой компонент запускается прямо на машине разработчика или в CI/CD-среде.
Вредоносная логика почти не выдаёт себя при обычной проверке. Код в обоих провайдерах срабатывает, только когда SHA-256 от объединённых значений containerName и networkID совпадает с заранее заданным хэшем. После совпадения программа расшифровывает путь к спрятанному архиву, извлекает содержимое, расшифровывает файлы через AES и запускает полученный Go-код отдельной командой.
На второй стадии загружается RAT, то есть троян удалённого доступа. Программа собирает сведения об операционной системе, архитектуре, имени компьютера, пользователе и наличии Node.js, после чего связывается с управляющей инфраструктурой. Команды приходят по двум независимым каналам через Slack и смарт-контракт в тестовой сети Arbitrum Sepolia, а затем могут запускать дополнительный код на Go или JavaScript.
Такая схема затрудняет анализ. RAT опрашивает блокчейн примерно раз в три секунды, а Slack раз в десять секунд, при этом сообщения шифруются отдельными ключами для заражённых клиентов. В обычной песочнице провайдер может вообще не показать вредоносного поведения, если проверяющая сторона не воспроизведёт нужные параметры запуска.
Параллельно злоумышленники распространяли тот же код через Go-модули gocommunity.io/orderedbtree и gogets.dev/btreex. Во втором случае архив замаскировали под SQL-файл, а запуск тоже привязали к специальному входному значению. Авторы кампании подделали даты коммитов, поэтому часть истории проекта выглядела старше реальной публикации пакета в сентябре.
Для маскировки операторы создали домены gocommunity[.]io и gogets[.]dev, которые изображали новые экосистемы пакетов Go. Похожая тактика уже охватывала npm, PyPI, Go Modules и другие площадки, где вредоносные зависимости выдавали за обычные инструменты разработки. Новые домены, по оценке Aikido, должны были повысить доверие к поддельным пакетам.
Следы инфраструктуры и общий публичный ключ связывают новые образцы с кампанией Graphalgo. ReversingLabs в феврале связала Graphalgo с северокорейской Lazarus Group, которая заманивала разработчиков фиктивными вакансиями и тестовыми заданиями. Aikido говорит о техническом пересечении новых пакетов с этой кампанией, а не о самостоятельной атрибуции каждого эпизода.
В открытых сообщениях управляющего Slack-канала Aikido выделила 18 уникальных имён хостов. Среди них три Windows-машины, пять Linux-систем и десять компьютеров с macOS. Масштаб выглядит ограниченным, а выборочные условия запуска указывают скорее на точечную операцию. Ранее злоумышленники уже подменяли Terraform-модули через скомпрометированную инфраструктуру Coder.
Aikido советует считать скомпрометированной всю машину или CI/CD-исполнитель, где запускался любой из четырёх компонентов. Компания рекомендует изолировать систему, заменить связанные токены GitHub, GitLab и реестров пакетов, облачные учётные данные и SSH-ключи, проверить историю действий, удалить вредоносные зависимости и переустановить систему, поскольку простого удаления пакета недостаточно.
