Атака на GPU-фермы: злоумышленники используют ComfyUI для скрытого майнинга и создания прокси-ботнета

botnet

Специалисты по кибербезопасности из Censys ARC обнаружили активную кампанию, в рамках которой злоумышленники целенаправленно атакуют публично доступные в интернете экземпляры ComfyUI - популярного графического интерфейса для генерации изображений с помощью ИИ. Эксплуатируя функционал пользовательских узлов, атакующие получают удалённое выполнение кода (RCE) на незащищённых системах, которые затем используются для скрытого майнинга криптовалют и создания распределённой сети прокси-серверов. По оценкам исследователей, более 1000 таких уязвимых инстансов ComfyUI в настоящее время открыты для атак из глобальной сети.

Описание

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

Цель - GPU для майнинга и прокси-трафик

ComfyUI представляет собой среду с узловым интерфейсом для работы со Stable Diffusion и другими моделями генерации изображений. Система пользуется спросом в сообществе ИИ-арта и часто развёртывается на оборудовании с мощными графическими процессорами, включая арендованные облачные инстансы. Именно эти GPU и становятся главной целью злоумышленников, которые перенаправляют их вычислительные мощности на добычу криптовалют, когда система простаивает. Многие такие развёртывания по ошибке или небрежности оказываются выведены в интернет без какой-либо аутентификации, что открывает прямой путь для компрометации.

Помимо майнинга, атакующие используют скомпрометированные хосты для развёртывания прокси-серверов на базе Hysteria v2, формируя управляемую ботнет-сеть. Это позволяет монетизировать атаку дважды: за счёт украденных вычислительных ресурсов и потенциальной перепродажи доступа к прокси-каналам. Вся операция централизованно управляется через веб-панель управления, написанную на Python с использованием фреймворка Flask.

Автоматизированная охота и эксплуатация

Вместо случайного поиска жертв атакующие развернули собственный сканирующий конвейер. Его ключевым элементом является инструмент под названием "ComfyUI Eternal Agent", который непрерывно прочёсывает IP-диапазоны крупных облачных провайдеров, таких как AWS, Google Cloud Platform и Oracle Cloud, в поисках открытых портов, связанных с ComfyUI. В одном из циклов сканирования, охватившем около 6400 IP-адресов, инструмент обнаружил 624 активных экземпляра ComfyUI, из которых 214 были подтверждены как уязвимые.

Суть эксплуатации заключается в злоупотреблении механизмом пользовательских узлов ComfyUI. Некоторые из таких узлов, например, "FL_CodeNode" из пакета "ComfyUI_Fill-Nodes" или "SrlEval" из "srl-nodes", принимают на вход произвольный Python-код и выполняют его в процессе ComfyUI. Если сканер обнаруживает подобный узел в системе, он автоматически создаёт и отправляет вредоносный "воркфлоу" (workflow), который выполняет код, загружающий и запускающий основной вредоносный скрипт.

Если же уязвимый узел отсутствует, но установлен менеджер расширений ComfyUI-Manager, сканер использует его API для установки вредоносного пакета под видом легитимного узла. В более новой версии инструмента (v8.2) для этого используется прямая установка через "pip install", где в файле "setup.py" скрыта команда на выполнение полезной нагрузки. После установки пакета сканер принудительно перезапускает ComfyUI и повторяет атаку. Для скрытия следов эксплуатации инструмент также очищает историю выполненных операций в ComfyUI.

Сложный вредонос и механизмы выживания

Основная полезная нагрузка, скрипт "ghost.sh", представляет собой сложный инструмент для скрытого майнинга с продвинутыми функциями уклонения. Он начинает с отключения истории команд оболочки и создания уникального идентификатора для хоста на основе его имени. Майнеры (XMRig для майнинга Monero на CPU и lolMiner для Conflux на GPU) размещаются в каталогах, замаскированных под системные, например, "/var/tmp/.systemd-private-<hex>". Процессы майнинга запускаются под именами, имитирующими потоки ядра Linux, такими как "khugepaged_<hex>" или "nv_uvm_<hex>", чтобы не привлекать внимание при беглом просмотре вывода "ps aux".

Одной из ключевых техник является безфайловое выполнение (fileless execution). Скрипт, по возможности, использует системный вызов "memfd_create" для загрузки исполняемого файла майнера прямо в оперативную память и запускает его из "/proc/self/fd/", не оставляя следов на диске. Если злоумышленникам удаётся получить права root, они внедряют в систему руткит через "LD_PRELOAD". Этот руткит, скомпилированный прямо на атакованной машине, перехватывает вызовы функций вроде "readdir", скрывая от любых системных утилит файлы и процессы, связанные с вредоносом.

Для обеспечения живучести реализовано три независимых механизма "воскрешения". Во-первых, сторожевой процесс следит за целостностью файлов майнеров с помощью "inotify" и мгновенно восстанавливает их при удалении. Во-вторых, копии скрипта и бинарных файлов рассредоточены по нескольким скрытым местам в файловой системе. В-третьих, на файлы майнеров устанавливается атрибут "chattr +i", делающий их неизменяемыми даже для пользователя root. Перед запуском собственных процессов скрипт также агрессивно "зачищает" систему от возможных конкурентов, завершая процессы, похожие на другие майнеры.

Панель управления и долгосрочное закрепление

Все скомпрометированные хосты регистрируются в центральной панели управления на Flask, доступ к которой защищён стандартными учётными данными "admin/pickmezr". Панель позволяет оператору отслеживать хешрейт, статистику майнинга, аппаратные характеристики рабочих машин, а также отправлять им команды: перезапустить майнеры, обновиться, выполнить произвольную команду или самоуничтожиться. Отдельный модуль панели управляет флотом прокси-серверов Hysteria v2, развёрнутых на тех же хостах.

В версии 8.2 сканера были добавлены два новых механизма долгосрочного закрепления. Первый - это установка скрытого узла "GPU Performance Monitor", который при каждой загрузке ComfyUI запускает фоновый поток. Этот поток каждые шесть часов повторно загружает и выполняет основную полезную нагрузку. Второй - это подмена стандартного рабочего процесса ComfyUI ("default.json") на вредоносный, что гарантирует повторное заражение при каждом перезапуске приложения. Таким образом, даже если администратор обнаружит и удалит майнеры, простая перезагрузка системы приведёт к автоматическому восстановлению инфекции.

Связи и контекст

Анализ истории команд оператора указывает на связи с дополнительной инфраструктурой. В частности, был зафиксирован доступ к хосту в сети China Mobile, который, согласно данным GreyNoise, уже был отмечен как вредоносный и участвовал в кампании по распространению червя через уязвимости Redis. На этом хосте также наблюдались сервисы, связанные с ComfyUI. Это позволяет предположить, что либо оператор использует скомпрометированные системы в качестве промежуточной инфраструктуры, либо данная кампания является частью его более широкой деятельности.

Исследователи подчёркивают, что хотя инструментарий местами выглядит собранным наспех, сама тактика атаки через пользовательские узлы ComfyUI является необычной и демонстрирует понимание злоумышленниками специфики целевого ПО. Вместо поиска уязвимостей в ядре приложения они атакуют его расширяемость - механизм, который часто остаётся без должного внимания с точки зрения безопасности. Данная кампания служит очередным напоминанием о критической важности базовых мер защиты: никогда не выводить в интернет административные интерфейсы без аутентификации, регулярно обновлять ПО и его компоненты, а также мониторить сетевую активность и необычную нагрузку на систему, особенно на графические процессоры.

Индикаторы компрометации

IPv4

  • 120.241.40.237
  • 162.243.85.63
  • 3.80.187.132
  • 77.110.96.200

Domain Port Combinations

  • cfx.kryptex.network:8027
  • xmr.kryptex.network:8029

URLs

  • https://api.telegram.org/bot8315596543:AAF25ZfnaeAJ2S0Vxphybp4SIHy6DMk9icg/sendMessage
  • https://github.com/Vova75Rus/ComfyUI-Shell-Executor

SHA256

  • 1864aaa74c027e799382467c08bb7304bf5b4e40cdb022b8016d4a8d77f556b9
  • 1a00c2bd1bc406bca4ff2bb166b48b352241a97675f38dcf97c211a577f7788e
  • 56f395b720e076c22cac55abe4f26c95702f18cffa9848019e84bb6b0f9e5ff5
  • c13d3432776c36b62ccd9c89f5774e6b229ac318ae756554ecde25a21270e4ec
  • dc232b55329d95fe2a47a8d637b7bffea06f18e3d8332ba94b042b1862213a1d
Комментарии: 0