Ad
Инциденты

JadePuffer нацелил шифровальщик на модели и данные ИИ

Маша Даровская
By Маша Даровская , IT-редактор и автор
JadePuffer нацелил шифровальщик на модели и данные ИИ
Обложка © Anonhaven

Оператор JadePuffer вернулся к ранее взломанному серверу Langflow с новым шифровальщиком ENCFORGE. Вредонос ищет веса моделей, контрольные точки, обучающие наборы, векторные индексы и другие компоненты инфраструктуры машинного обучения, после чего частично шифрует файлы и добавляет к их именам расширение .locked.

Исследователи Sysdig считают операцию агентной: значительную часть разведки, исправления ошибок и построения цепочки атаки выполняла система на базе большой языковой модели. Когда первая попытка доставки шифровальщика провалилась, она создала шесть версий сценария за 5 минут 24 секунды. Последняя версия самостоятельно нашла нужный процесс, перенесла ENCFORGE из контейнера на основную систему, провела тестовое сканирование, запустила шифрование и подсчитала заблокированные файлы.

Sysdig наблюдала команды, временные метки, автоматически исправлявшийся код и подробные комментарии внутри вредоносных нагрузок. Исследователи не видели системную инструкцию агента, его панель управления и действия человека вне атакуемой среды. Полную автономность операции поэтому нельзя считать независимо доказанной.

JadePuffer — условное название неизвестного оператора, введённое Sysdig.  Первая описанная операция JadePuffer началась со взлома доступного из интернета экземпляра Langflow. Атакующий собрал учётные данные, исследовал внутреннюю сеть и добрался до отдельного производственного сервера с MySQL и Alibaba Nacos.

В той атаке были зашифрованы 1342 элемента конфигурации Nacos. Для этого использовалась встроенная функция MySQL AES_ENCRYPT(), после чего оригинальные таблицы конфигурации и истории удалили, а в базе создали таблицу с требованием выкупа. Сгенерированный ключ вывели в стандартный поток, но не сохранили и не отправили на сервер оператора. Восстановить конфигурации с его помощью после завершения процесса было невозможно даже при оплате.

Новая операция связана с прежней тем же адресом электронной почты в требовании выкупа. Sysdig считает это наиболее сильным признаком того, что за обеими кампаниями стоял один оператор. Инструментарий при этом изменился: вместо одноразовых сценариев Python и шифрования внутри MySQL появился скомпилированный вредонос на Go с отдельной системой ключей и полноценным интерфейсом командной строки.

JadePuffer снова использовал CVE-2025-3248 — критическую ошибку в открытой платформе Langflow для создания приложений и рабочих процессов на базе языковых моделей.

Проблема находилась в обработчике /api/v1/validate/code. Версии ниже 1.3.0 позволяли удалённому пользователю отправить подготовленный запрос и выполнить произвольный код без предварительной авторизации. Исправление вошло в Langflow 1.3.0.

CISA добавила CVE-2025-3248 в каталог известных эксплуатируемых уязвимостей 5 мая 2025 года. Новая атака произошла более чем через год после появления публичного предупреждения и доступного обновления.

Langflow представляет особый интерес для злоумышленников, поскольку такие серверы часто связаны с облачными платформами, поставщиками языковых моделей, векторными базами и объектными хранилищами. В переменных окружения и внутренних базах могут находиться ключи API, пароли и строки подключения.

После выполнения кода JadePuffer проверил архитектуру и имя системы, начал искать облачные ключи, токены API и реквизиты баз данных, а затем проверил доступность внутренних служб.

Во время разведки атакующий обнаружил /var/run/docker.sock. Этот файл позволяет обращаться к программному интерфейсу Docker и управлять контейнерами.

Возможность записывать команды в Docker-сокет фактически даёт контроль уровня root над основной системой. Через него можно создать привилегированный контейнер, подключить корневую файловую систему хоста и получить доступ к данным за пределами исходного контейнера.

JadePuffer попытался скачать ENCFORGE с управляющего сервера по адресу, заканчивавшемуся на /lockd. Файл не появился в целевом каталоге. Исследователи позднее выяснили, что бинарник размещался под скрытым именем /.lockd: запрос к /lockd возвращал ошибку 404.

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

Первая версия была простой оболочкой для обращения к Docker через Unix-сокет. Каждый следующий вариант устранял конкретную проблему предыдущего.

Последовательность выглядела так:

  • do.py v1 отправлял команды Docker через curl;

  • do.py v2 добавил копирование через /proc/<pid>/root;

  • ns.py использовал общий механизм выполнения, но содержал жёстко заданный идентификатор процесса;

  • x.py создавал одноразовый контейнер для каждой команды;

  • h.py заменил внешние утилиты собственным клиентом для Unix-сокета;

  • deploy.py v1 начал автоматически получать идентификатор процесса через Docker API;

  • deploy.py v2 добавил настоящее шифрование и проверку результата.

Первые шесть итераций и финальная доработка заняли 5 минут 24 секунды. Последний сценарий определял процесс целевого контейнера, копировал lockd через procfs, создавал привилегированную среду с подключённым корнем хоста и запускал nsenter для перехода в пространства имён основной системы.

Сначала ENCFORGE запускался с параметром проверки без шифрования. После успешного теста сценарий включал рабочий режим --lock, ждал несколько секунд, искал процесс lockd, читал журнал и подсчитывал файлы с расширением .locked.

Эта последовательность стала главным аргументом в пользу агентного характера новой атаки: механизм доставки строился и исправлялся непосредственно во время вторжения, а не запускался в виде заранее подготовленного неизменяемого сценария.

ENCFORGE представляет собой статически собранный шифровальщик на Go. Исследованный файл был упакован с помощью UPX и запускался под именем lockd.

Полный анализ распакованного бинарника выявил около 180 целевых расширений. Значительная часть списка относится к моделям, данным и инструментам машинного обучения.

Среди целей присутствуют:

  • контрольные точки .ckpt, .h5, .pb и модели .onnx;

  • файлы PyTorch .pt, .pt2 и .pth;

  • веса в формате .safetensors;

  • локальные модели .ggml и .gguf;

  • сериализованные объекты .pkl и .pickle;

  • векторные индексы .faiss;

  • наборы данных .parquet, .arrow, .feather и .tfrecord;

  • массивы NumPy .npy и .npz;

  • файлы DuckDB и векторы .vec.

Наличие этих форматов само по себе ещё могло бы объясняться широким списком документов. На целевую специализацию указывает справка параметра --include, позволяющего добавлять собственные маски. В качестве примеров в ней приведены адаптеры LoRA и файлы GGJT — старый формат весов, связанный с ранними версиями llama.cpp.

Шифровальщик также ищет форматы macOS, включая файлы связки ключей и проекты Xcode. Наличие отдельной версии для macOS не подтверждено.

ENCFORGE использует гибридную криптографическую схему. Содержимое обрабатывается алгоритмом AES-256 в режиме счётчика, а симметричный ключ защищается встроенным открытым ключом RSA-2048.

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

Заблокированные файлы получают расширение .locked. ENCFORGE умеет продолжать прерванную работу, не повреждая повторно уже обработанные объекты, завершает процессы, удерживающие файлы открытыми, и удаляет собственный исполняемый файл после завершения.

Записки с требованием выкупа создаются под именами README, HOW_TO_DECRYPT или README_DECRYPT. В них жертве присваивается уникальный идентификатор и предлагается связаться с оператором для получения платёжных инструкций.

В исследованной версии ENCFORGE отсутствовали сетевой клиент, функции отправки данных, модули облачных хранилищ и логика подготовки файлов к выгрузке.

Во время наблюдавшейся операции Sysdig также не обнаружила подтверждённой кражи информации. Оператор не использовал известный сайт публикации утечек, а в шифровальщике не было ссылки на платёжный портал в сети Tor.

Кампания строилась по модели одиночного вымогательства: давление создаёт потеря доступа к данным, а не угроза их публикации.

Исследованный экземпляр работал в Linux, но внутри него сохранился код для отключения восстановления Windows.

В бинарнике присутствуют вызовы vssadmin.exe для удаления теневых копий и bcdedit.exe для изменения параметров восстановления загрузки. В перечне завершаемых процессов указаны Microsoft SQL Server, Outlook, Word, OneNote и другие приложения Windows.

Исследователи пришли к выводу, что ENCFORGE использует единую кодовую базу Go, которую можно собирать под разные операционные системы. Реальный образец для Windows в рамках этой операции не описан.

Поддержка macOS остаётся предположением. Список расширений включает специфические для Apple файлы, но системных команд и процессов macOS в изученном бинарнике нет.

Sysdig оценивает прямые затраты на восстановление производственной модели примерно в $75–500 тыс. Сумма включает облачные графические ускорители, несколько обучающих запусков и работу инженеров. Это ориентир исследовательской компании, а не универсальная цена для любого проекта.

Затраты зависят от размера модели, сложности собственных данных и количества экспериментов, необходимых для получения производственного результата.

Шифрование нескольких вариантов на общем хранилище увеличивает ущерб. Если рядом находился обучающий датасет, сначала придётся восстановить или заново собрать данные, а уже затем повторять обучение и строить векторные индексы.

Утверждать, что модели принципиально невозможно восстановить, неверно. Актуальная автономная или неизменяемая резервная копия позволяет вернуть сохранённые артефакты без полного переобучения.

В первой кампании Sysdig зафиксировала более 600 осмысленных нагрузок, выполненных за сжатый период. Код содержал подробные комментарии на естественном языке, объяснявшие цели команд, причины выбора систем и приоритеты атакующего.

После ошибок система не ограничивалась повтором той же команды. Она анализировала результат и создавала исправленный вариант. В одном эпизоде между неудачным входом в Nacos и работающим многоэтапным исправлением прошло 31 секунда.

Новая операция продемонстрировала такое же поведение при работе с Docker: после неправильного пути к бинарнику возникла серия постепенно усложнявшихся инструментов, завершившаяся работающей цепочкой выхода на хост.

Эти признаки позволили Sysdig классифицировать JadePuffer как агентного субъекта атаки — оператора, чьи возможности в значительной мере реализуются ИИ-агентом.

Точный уровень самостоятельности остаётся неизвестным. Человек мог определять цели, утверждать критические действия или вмешиваться между наблюдавшимися запросами. Поэтому корректнее говорить об оценке исследователей, а не о доказанном полностью автономном взломе.

Первая кампания опиралась на одноразовые команды Python и встроенную функцию шифрования MySQL. Она была привязана к конкретной базе, а ключ оказался потерян после выполнения.

Новая версия получила отдельный бинарник, интерфейс командной строки, гибридную криптографическую схему, идентификаторы задач и упоминание сопутствующего генератора ключей keyforge.

Во внутренних путях ENCFORGE встречается название проекта encfile. Эти признаки указывают на создание многократно используемого инструментария, а не разового сценария для одной системы.

На управляющем сервере также находилась подготовленная копия CPython 3.14 с замаскированным именем файла. В наблюдавшейся атаке она не запускалась, поэтому включать её в фактическую цепочку заражения нельзя.

Основной признак первоначального доступа — создание дочерних процессов Langflow после обращений к /api/v1/validate/code. Особого внимания требуют вызовы subprocess.run и subprocess.check_output от имени пользователя веб-приложения.

Обращения процесса Langflow к /var/run/docker.sock также должны вызывать предупреждение. Платформе не требуется создавать привилегированные контейнеры или подключать корневой каталог основной системы.

Сильными индикаторами попытки выхода из контейнера служат:

  • Privileged: true;

  • PidMode: host;

  • подключение / с правом записи;

  • запуск nsenter --target 1;

  • вызовы Docker API /containers/create и /containers/{id}/start от имени веб-приложения.

После запуска ENCFORGE появляются многочисленные файлы .locked, особенно в каталогах с .gguf, .safetensors, .ckpt, .faiss, .pkl и .parquet. Sysdig также опубликовала правило YARA для распакованного бинарника.

Есть новость? Станьте автором.

Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.