Вредоносный RAT прячется в Terraform провайдерах и Go модулях

Исследователи Aikido Security обнаружили новую supply chain атаку Graphalgo, в рамках которой вредоносный RAT на Go распространяется через Terraform провайдеры и Go модули. Впервые зафиксирована доставка malware через HashiCorp Registry: злоумышленники опубликовали вредоносные провайдеры gocommunity-io/dockerd и kreuzwenker/docker (typosquat популярного kreuzwerker/docker с 56 миллионами загрузок), а также Go модули gocommunity.io/orderedbtree и gogets.dev/btreex. Campaign использует целевые триггеры, блокчейн и Slack для command and control, что делает обнаружение крайне сложным.

Ключевые IOCs: Terraform провайдеры gocommunity-io/dockerd и kreuzwenker/docker; Go модули gocommunity.io/orderedbtree и gogets.dev/btreex; домены gocommunity[.]io и gogets[.]dev; Ethereum контракт 0xAD02b5cDE693529d3bdA0266299501ad0193036C на Arbitrum Sepolia; Slack workspace portfolio-devs.slack[.]com и portfolio-testers.slack[.]com.

🎯 Механика атаки: целевая активация и скрытое выполнение

Вредоносные Terraform провайдеры содержат скрытые точки входа в файле /internal/provider/resource_docker_container_funcs.go, которые активируются только при выполнении специфических условий. Malware остается инертным, пока SHA256 хэш от конкатенации Terraform переменных containerName и networkID не совпадет с целевым значением b9966e3762e9a0d5d263b8cb3cca07294f81af9714d40ddf4628cb85d74e8ad5. Этот механизм означает, что вредоносный провайдер безвреден в большинстве случаев и активируется только при целевой атаке на конкретную инфраструктуру.

⚙️ Процесс активации и выполнения второй стадии

  • Проверка триггера: Вычисление SHA256 хэша от containerName + networkID
  • Дешифрование ключа: Использование хэша как AES ключа для расшифровки пути к файлу
  • Распаковка архива: Извлечение import-resource.sqlite3 (SHA256: 5f892a5424e88a21a3eb3d7f82ebf04d8ac31cdb19ada25153be4165df977d0f)
  • Дешифрование содержимого: AES дешифрование каждого файла в архиве
  • Запуск второй стадии: Выполнение через detached go run . в фоновом режиме

Использование специфического триггера подрывает sandbox-тестирование: сканер, устанавливающий Graphalgo провайдер с обычными входами, видит нормальный Docker провайдер. Атакующий, по-видимому, знал или ожидал узнать точные имена контейнеров и сетей цели, что указывает на предварительную разведку или социальную инженерию до того, как пакет был загружен. Это классический признак целевой операции, а не массовой кампании.

Go модуль gogets.dev/btreex впервые появился 8 сентября, но атакующий подделал коммиты, чтобы датировать их ноябрем 2025 года. Поскольку Go Modules считает даты коммитов авторитетными, Go module proxy и pkg.go.dev отображали поддельную дату. Злоумышленник также создал два фальшивых сайта Go пакетов — gogets.dev и gocommunity.io — чтобы сделать свои пакеты выглядящими как устоявшиеся проекты.

🔗 Двойная C2 инфраструктура: Slack и блокчейн dead drop

Вторая стадия Graphalgo RAT представляет собой Go агент с двумя каналами command and control, что делает его особенно устойчивым к обнаружению и блокировке. Malware первоначально собирает системную информацию, включая аппаратные атрибуты, ОС, hostname и доступность node на зараженной системе, а затем передает эти данные через оба канала.

💬 Slack как C2 канал

Malware отправляет собранную информацию в Slack канал frontend-devs в workspace portfolio-devs.slack[.]com (Portfolio Devs).值得注意的是, malware общается с api.slack.com, и субдомен workspace не контактируется напрямую. Для Slack C2 коммуникаций malware использует захардкоженный публичный ключ 302a300506032b656e032100bad013df6eec5d686f4cc8551e0a5c87a0135164bdd1dafb1c75141d1b526702.

  • Первоначальный контакт: Запись публичного ключа клиента в канал frontend-devs
  • Шифрование: Все последующие коммуникации шифруются с использованием общего ключа
  • Рабочий канал: Последующие сообщения отправляются в workspace portfolio-testers.slack[.]com в канал qa-announcements
  • Опрос: Malware проверяет Slack каждые 10 секунд

Slack API трафик является обычным в большинстве корпоративных сетей, поэтому egress filtering вряд ли отметит Graphalgo check-ins. Это делает Slack идеальным каналом для скрытой коммуникации в средах, где разработчики активно используют этот инструмент.

⛓️ Blockchain dead drop на Arbitrum Sepolia

Для блокчейн-based C2 malware получает данные из Ethereum смарт-контракта на Arbitrum Sepolia testnet, используя захардкоженный адрес контракта 0xAD02b5cDE693529d3bdA0266299501ad0193036C. Процесс работает следующим образом:

  1. Получение приватного ключа для общего Ethereum кошелька
  2. Дешифрование приватного ключа с использованием ключа, производного от того же материала, что использовался для дешифрования второй стадии
  3. Получение публичного ключа threat actor из контракта
  4. Создание общего ключа с использованием публичного ключа и эфемерного приватного ключа
  5. Запись эфемерного приватного ключа в контракт через метод setCPubKey
  6. Чтение зашифрованных команд из serviceData1 и serviceData2

C2 механизм дополнительно указывает на то, что этот malware является частью целевой операции. Способность threat actor выдавать команды ограничена, поскольку все клиенты потребляют все сообщения и no-op когда не могут дешифровать сообщения, предназначенные для других клиентов. Это особенно сложная реализация blockchain dead drop, которая интегрирует двунаправленную коммуникацию с минимальным риском утечки информации или disruption. Malware опрашивает блокчейн каждые 3 секунды.

C2 канал Интервал опроса Платформа Назначение
Slack 10 секунд api.slack.com Первоначальный контакт, обмен ключами
Blockchain 3 секунды Arbitrum Sepolia Dead drop команды, постоянная коммуникация

Блокчейн трафик менее обычен в корпоративных сетях. Aikido рекомендует организациям без бизнес-необходимости взаимодействовать с блокчейнами настроить алерты на сетевые подключения к HTTP-based blockchain сервисам. По команде malware может запускать дополнительный Go или JavaScript код или удалить себя.

🛡️ Response playbook: изоляция, ротация, переизображение

Если какой-либо из пакетов или провайдеров Graphalgo был установлен на машине разработчика или CI/CD runner, вся среда должна считаться скомпрометированной. Простое удаление пакета недостаточно для очистки машины, поскольку malware запускает вторую стадию как detached фоновый процесс.

🚨 Немедленные действия при обнаружении

  • Изоляция машины: Отключить от сети немедленно. Учитывая C2 каналы malware (Slack API вызовы и Ethereum смарт-контракт), зараженный хост может оставаться доступным для threat actor даже после удаления пакета
  • Ротация всех credentials: Не ограничиваться Go module токенами. Ротировать GitHub/GitLab токены, npm/PyPI/Go publish токены, облачные credentials и SSH ключи. Если затронутый пакет запускался через Terraform провайдер, приоритизировать облачные и инфраструктурные credentials, поскольку этот вектор атаки нацелен на DevOps рабочие станции с прямым доступом к production
  • Проверка несанкционированной активности: Проверить недавние коммиты, публикации пакетов, Terraform applies и GitHub Actions runs, сделанные с этой машины или с использованием её credentials. Предположить, что атакующий мог действовать с использованием валидных, работающих credentials
  • Переизображение устройства: Удалить пакет и переизобразить машину. Поскольку malware выполняет дешифрованную вторую стадию через detached go run ., удаление пакета само по себе не гарантирует, что все запущенное им исчезло. Переизображение — единственный способ быть уверенным, что хост чист

🔍 Поиск индикаторов компрометации

На этой неделе подтвердите, что ни один из четырех Graphalgo пакетов не существует нигде в вашей среде, идентифицируйте всех внутри или снаружи компании, кто запускает Terraform с production credentials, и сократите время жизни этих credentials. Эти три действия адресуют кампанию Graphalgo конкретно и более широкий класс атак, нацеленных на инфраструктурные инструменты.

Для команд, запускающих Terraform in-house, необходимо:

  • Искать в репозиториях и lock файлах gocommunity-io/dockerd, kreuzwenker/docker, gocommunity.io/orderedbtree и gogets.dev/btreex, и заблокировать домены gocommunity.io и gogets.dev на DNS уровне
  • Требовать code review на любые изменения блока required_providers, с ревьюером, подтверждающим namespace провайдера по официальной странице Terraform Registry
  • Рассмотреть private registry или provider network mirror, чтобы инженеры могли устанавливать только Terraform провайдеры, одобренные вашей командой
  • Заменить долгоживущие облачные access keys на инженерных ноутбуках на краткоживущие credentials, выдаваемые через single sign-on, и переместить production applies в CI pipelines, которые аутентифицируются через OpenID Connect (OIDC) federation вместо сохраненных секретов
  • Настроить алерты на подключения к публичным blockchain сервисам с инженерных endpoints и build runners, если у вас нет бизнес-причины разрешать их
  • Переклассифицировать DevOps и platform engineering ноутбуки как tier 0 активы в вашем inventory и endpoint detection and response (EDR) политике

Критическое замечание: Переизображение является единственным надежным способом очистки. Malware запускает вторую стадию как detached процесс, поэтому удаление провайдера не останавливает уже запущенный код. Любая машина, установившая эти пакеты, должна считаться полностью скомпрометированной, и все облачные credentials, которые она имела, должны быть ротированы.

📊 Контекст: растущая угроза supply chain атак на IaC

Кампания Graphalgo представляет собой первую задокументированную доставку malware через Terraform провайдеры, но она вписывается в растущий тренд supply chain атак на инфраструктурные инструменты. Terraform используется более чем 75% компаний для управления облачной инфраструктурой, делая его привлекательной целью для злоумышленников, стремящихся получить доступ к production средам через DevOps рабочие станции.

🎯 Почему Terraform провайдеры уязвимы

  • Доверие к Registry: Инженеры обычно доверяют пакетам из официального HashiCorp Registry без глубокой проверки
  • Typosquatting: kreuzwenker/docker выглядит как легитимный kreuzwerker/docker, особенно при быстром просмотре
  • Автоматическая установка: Terraform автоматически загружает провайдеры при terraform init без дополнительных подтверждений
  • Привилегированный доступ: DevOps рабочие станции часто имеют доступ к production credentials для управления инфраструктурой
  • Слабая проверка: Большинство команд не имеют процессов для верификации подлинности провайдеров перед использованием

Использование блокчейн и Slack для C2 отражает эволюцию malware техник, где злоумышленники используют легитимные сервисы для скрытой коммуникации. Это делает обнаружение сложнее, поскольку трафик выглядит как обычная бизнес-активность. Blockchain dead drops становятся все более популярными среди продвинутых threat actors, поскольку они обеспечивают устойчивую к takedown инфраструктуру.

🔐 Долгосрочные защитные меры

Для предотвращения подобных атак организации должны внедрить многоуровневую стратегию защиты supply chain. Это включает использование приватных registry для всех инфраструктурных пакетов, обязательную верификацию checksums и signatures перед установкой, сегментацию доступа к production credentials и непрерывный мониторинг сетевой активности на аномальные подключения к blockchain сервисам.

Кампания Graphalgo демонстрирует, что даже хорошо известные и широко используемые инструменты Infrastructure as Code могут стать вектором для сложных целевых атак. Комбинация специфических триггеров, двойной C2 инфраструктуры и поддельной истории релизов показывает высокий уровень изощренности threat actors, стоящих за этой операцией. Организации должны пересмотреть свои подходы к безопасности supply chain и относиться к инфраструктурным инструментам с той же строгостью, что и к критическим production системам.

«Безопасность цепочки поставок — это не про доверие к каждому звену, а про проверку каждого звена. В мире Infrastructure as Code один непроверенный провайдер может стать дверью ко всей вашей облачной инфраструктуре».

— Брюс Шнайер, криптограф и эксперт по безопасности

24.09.2026, 02:26