- CLOSEDQUORUM — вредоносная программа, обнаруженная в рамках проекта Cisco Talos CAIRN , реализует полностью автономное управление и контроль (C2). Подтверждений её использования в реальных атаках пока нет, однако артефакты бинарного файла позволили связать разработчика с публикациями на криминальных форумах, посвящёнными кардингу и датируемыми 2025 годом.
- Эта вредоносная программа служит показательным примером того, как злоумышленники могут свести пространство решений на определённом этапе атаки к ограниченному набору вариантов. Это позволяет моделям искусственного интеллекта самостоятельно анализировать ситуацию и выполнять действия.
- CLOSEDQUORUM демонстрирует изменение подхода к распределению усилий злоумышленников: всё больше этапов цепочки атаки могут выполняться без непосредственного участия оператора.
Третье измерение получило значительно меньше внимания в контексте вредоносных программ: перенос усилий (effort displacement). Речь идёт не просто о расширении возможностей оператора в рамках одной сессии, а о передаче целого этапа атаки от человека системе. Перенос усилий усиливает эффект скорости и масштаба, поскольку человек, участвующий в процессе, больше не является узким местом.
Возможности человека ограничены вниманием, рабочим временем и когнитивной нагрузкой. Система искусственного интеллекта, способная самостоятельно выполнять отдельный этап цепочки атаки, может продолжать работу даже тогда, когда оператор перестаёт за ней наблюдать. Она не отключается на время сна злоумышленника.
Сегодня Cisco Talos представила CAIRN — наш исследовательский инструментарий с открытым исходным кодом для отслеживания вредоносных программ, интегрированных с ИИ. Это первая публикация из серии материалов о результатах нашего исследования.
Угрозы, выявленные в рамках CAIRN, могут варьироваться от экспериментальных концептуальных разработок до сложных действующих кампаний. Однако классификация угрозы не является основной целью проекта. Систематическое изучение этого направления позволяет получать практические сведения, которые помогут противостоять использованию ИИ злоумышленниками в реальных операциях.
Знакомство с CLOSEDQUORUM
Насколько нам известно, CLOSEDQUORUM — первый публично задокументированный имплант для Windows, использующий подобную модель в тактическом управлении и контроле (C2). После запуска он передаёт выбор следующего действия группе коммерческих больших языковых моделей (LLM), а затем выполняет принятое решение. Целью программы является кража учётных данных пользователей и содержимого криптовалютных кошельков.Импланту не требуются постоянные команды от оператора или задания от специально организованного сервера C2, управляемого злоумышленником. Вся динамическая логика работы передаётся искусственному интеллекту.
Название отражает архитектуру программы. Кворум — это орган принятия решений, которому для выполнения действия требуется определённое минимальное количество участников. В случае CLOSEDQUORUM в кворум могут входить до четырёх поставщиков LLM: DeepSeek, Qwen, Mistral и Google Gemini.
Заседание закрыто: люди не допускаются. Модели опрашиваются последовательно, их независимые решения подсчитываются, а бинарный файл действует на основании полученного результата.
Архитектура CLOSEDQUORUM.
Архитектура C2 CLOSEDQUORUM поддерживает интеграцию до четырёх поставщиков LLM. Каждая активная модель голосует за следующее действие, после чего выбирается вариант, набравший наибольшее количество голосов.
Статический анализ подтверждает все детали автономного цикла принятия решений. Кроме того, сборки, использовавшиеся на этапе разработки, демонстрируют внедрение учётных данных поставщиков во время компиляции.
Однако публично распространяемая сборка содержит только тестовые API-ключи и фиктивный вебхук. Поэтому нам не удалось наблюдать полный сквозной процесс выполнения описанной архитектуры.
В следующих разделах подробно рассматривается принцип работы CLOSEDQUORUM, его возможности и значение этой разработки для будущего автономного наступательного инструментария на базе ИИ.
Архитектура «LLM в качестве C2»
CLOSEDQUORUM представляет собой 64-разрядный исполняемый файл Windows размером 16,4 МБ, скомпилированный на языке Go. Он содержит различные функции, характерные для наступательных имплантов, однако именно они не делают его уникальным.Ключевое архитектурное решение CLOSEDQUORUM заключается в использовании поставщиков LLM в качестве инфраструктуры командования и управления (C2).
Сводка результатов анализа импортов Ghidra. Параметр CGO_ENABLED=1 подтверждает, что бинарный файл объединяет код на Go и C, что позволяет ему напрямую вызывать системные функции Windows.
Традиционная архитектура C2 требует от злоумышленника управления серверной инфраструктурой: доменом, IP-адресом, протоколом и обработчиком входящих подключений. Такая инфраструктура может быть связана с атакующим, заблокирована защитными средствами, а её ротация требует затрат.
Защитники отслеживают домены C2, системы анализа угроз публикуют IP-адреса командных серверов, а журналы прозрачности сертификатов (Certificate Transparency) позволяют выявлять новую инфраструктуру C2 ещё до её использования.
Вместо одного уникального сервера C2 CLOSEDQUORUM обращается к конечным точкам до четырёх коммерческих поставщиков LLM, которыми ежедневно пользуются тысячи легитимных приложений.
Запросы к поставщикам выполняются последовательно с помощью компонента ModelOrchestrator. Ответы объединяются в срез []LLMDecision, а затем функция interModelDiscussion() преобразует их в единое действие посредством голосования относительным большинством (plurality voting).
Значение поля Decision каждого ответа увеличивает соответствующий счётчик в структуре map[string]int. В качестве результата выбирается решение с наибольшим количеством голосов.
Архитектура с несколькими поставщиками обеспечивает как агрегацию решений, так и устойчивость к сбоям. Она снижает влияние отдельных отказов моделей, тайм-аутов и некорректно сформированных ответов. Это повышает вероятность получения допустимого решения, но не гарантирует его.
Использование четырёх поставщиков увеличивает вероятность того, что кворум сможет принять решение, даже если один или два участника не отвечают либо, например, одна из моделей сталкивается с ограничениями защитных механизмов (guardrails).
Если все модели завершаются с ошибкой, используется резервное решение consensus. Оно представляет собой строку, для которой не предусмотрен обработчик соответствующей возможности. В результате цикл переходит в режим ожидания и повторной попытки, вместо того чтобы выполнять действие по умолчанию.
Функция main.interModelDiscussion, представление декомпилятора Ghidra.
Процесс, показанный на рисунке 3, состоит из следующих этапов:
- Четыре ключа поставщиков LLM инициализируются как строковые константы: deepseek, qwen, mistral и gemini (строки 109–116).
- Цикл опроса четырёх поставщиков while (uVar16 < 4) последовательно проходит по всем моделям (строка 124).
- Функция main.queryLLM(model, prompt) выполняет непосредственный вызов API, передавая каждому поставщику структурированный запрос (строка 134).
Схема голосования и принятия решений
Панель LLM не может отвечать в произвольном формате. CLOSEDQUORUM ограничивает ответы типизированной JSON-схемой, представляющей специальный язык команд для принятия решений на разных этапах атаки.
Системный промпт, извлечённый из бинарного файла, выглядит следующим образом:
«Вы — продвинутый стратег по разработке вредоносного ПО. Предоставляйте ТОЛЬКО исполняемые решения».
Системный промпт.
В шаблоне запроса, формируемого для каждого запуска, значение TARGET: %s подставляется во время выполнения.
Шаблон запроса с перечислением доступных для модели вариантов.
Полученный ответ десериализуется в структуру Go:
Структура решения, возвращаемого моделью.
Поле Decision определяет, какой из функциональных модулей main.main будет запущен:
- steal одновременно вызывает lsassDump(), dumpBrowserCredentials() и extractCryptoWallets() — все три функции выполняются вместе.
- inject сначала вызывает generateShellcode(), после чего выбор зависит от типа эксплуатации: при process_hollow выполняется injectProcess() — внедрение с использованием техники PEB-walk process hollowing; во всех остальных случаях вызывается earlyBirdInject() — внедрение через APC.
- persist передаёт управление функции establishPersistence().
- Для move в распространяемой сборке обработчик отсутствует.
Таким образом, LLM должна вернуть корректный JSON-объект, соответствующий известному типу, причём значение поля Decision должно соответствовать конкретной функциональной возможности импланта. В противном случае ответ отбрасывается.
Такое устройство существенно ограничивает пространство решений модели: вместо произвольного ответа она может выбрать только из заранее определённого набора действий, непосредственно связанных с функциональностью вредоносной программы.
Функция gatherSystemInfo() вызывается при инициализации и собирает имя хоста, архитектуру ОС, количество процессоров, версию Windows и наличие прав администратора. Эти данные сохраняются в оркестраторе как контекст TARGET:%s и передаются в каждый запрос к LLM.
Системная информация в TARGET:%s остаётся неизменной, тогда как значение target_process обновляется перед каждым новым циклом.
Поле Reasoning сохраняет обоснование решения, сформированное LLM в момент выполнения. Через вебхук Discord оператор получает не только результат работы модели, но и телеметрию атаки в реальном времени, включая:
- принятое решение (inject / persist / steal / move);
- содержимое поля Reasoning;
- target_process, exploit_type, evasion_method, payload_config;
- название использованной модели и временную метку.
- Учётные данные из LSASS — lsassDump() извлекает из памяти локальные и доменные учётные данные Windows.
- Учётные данные браузеров — dumpBrowserCredentials() извлекает сохранённые пароли из Chrome, Edge и Firefox.
- Данные криптовалютных кошельков — extractCryptoWallets() извлекает данные MetaMask (расширение Chrome), Exodus (exodus.wallet) и Ethereum-кошельков (ethPath).
Что происходит при равенстве голосов?
При равном количестве голосов используется заранее установленный порядок приоритета: сначала DeepSeek, затем Qwen, Mistral и Gemini.
Реализация подсчёта голосов.
DeepSeek получает решающий голос при любом равенстве. Цикл поиска максимального значения проходит по срезу решений в порядке их поступления, а строгое сравнение < означает, что при одинаковом максимальном количестве голосов выбирается первое встретившееся решение.
Если DeepSeek не смог вернуть ответ и не вошёл в состав кворума, решающим становится голос Qwen. При его отсутствии приоритет переходит к Mistral, а затем к Gemini.
Таким образом, поведение при равенстве голосов полностью детерминировано: при прочих равных преимущество получает модель, стоящая выше в установленном порядке — прежде всего DeepSeek.
Модель распространения
CLOSEDQUORUM, судя по всему, распространяется как сервис, конфигурируемый оператором, а не как вредоносная программа, которую разработчик непосредственно разворачивает самостоятельно. Публично обнаруженный дистрибутивный бинарный файл представляет собой неактивный шаблон: все учётные данные API LLM при инициализации устанавливаются в dummy_api_key, а вебхук Discord — в dummy_webhook_url. В таком виде бинарный файл неработоспособен.
Данные из сборок, использовавшихся на этапе разработки, указывают на то, что разработчик создаёт отдельный настроенный исполняемый файл для каждого оператора. Предполагаемая схема распространения выглядит следующим образом:
- разработчик создаёт пользовательский бинарный файл, в который на этапе компиляции внедряются вебхук Discord и API-ключи LLM оператора;
- оператор получает настроенный исполняемый файл и самостоятельно занимается его доставкой;
- украденные учётные данные поступают в Discord-канал оператора в зашифрованном с помощью AES-256-GCM виде. Ключ меняется ежедневно и может быть получен оператором на основе временной метки сообщения.
Шифрование использует симметричный ключ, производный от текущей даты, а не жёстко заданный асимметричный ключ. Теоретически инфраструктура разработчика также может расшифровать данные, похищенные оператором, если разработчику известна дата — а она ему заведомо известна. Таким образом, это скорее обфускация, чем полноценное разделение конфиденциальности между разработчиком и оператором.
При этом каждый оператор получает отдельный канал для вывода похищенных данных и отдельную сборку бинарного файла.
Если оценка архитектуры верна, перед нами модель «кража учётных данных как услуга» (credentials-as-a-service), отличительной особенностью которой является автономный уровень оркестрации LLM. Оператору, получившему CLOSEDQUORUM, не требуется постоянно находиться онлайн для проведения кампании. Достаточно развернуть бинарный файл — после чего панель LLM самостоятельно выполняет атаку.
Последствия для защиты
CLOSEDQUORUM заменяет выделенную конечную точку C2 цепочкой взаимосвязанных действий. Ни один отдельный индикатор не позволяет однозначно определить такую архитектуру, однако их сочетание выглядит характерно:
- трафик к API поставщиков ИИ, исходящий от неожиданного исполняемого файла Windows;
- последовательные обращения к нескольким поставщикам моделей через короткие промежутки времени;
- структурированные запросы, содержащие контекст хоста или формулировки, связанные с наступательными возможностями. При этом такие данные, скорее всего, можно увидеть только при инспекции TLS-трафика или на стороне самого поставщика;
- одновременное использование известных техник для внедрения в процессы, доступа к LSASS или создания механизмов закрепления;
- обращения к вебхуку Discord из того же процесса или с того же хоста;
- повторные запуски с интервалами, случайно выбираемыми в диапазоне от 5 до 15 минут.
Наиболее эффективной стратегией обнаружения по-прежнему остаётся анализ поведения, а не блокировка отдельных доменов. Легитимные приложения могут независимо обращаться к DeepSeek, OpenRouter, Mistral, Gemini или Discord. Однако значительно меньше программ должны одновременно обращаться к нескольким подобным сервисам, получать доступ к LSASS, внедряться в приостановленные процессы или создавать постоянные WMI-подписки.
Полное описание поведенческих характеристик приведено в техническом приложении и разделе с деталями реализации.
Что дальше: развитие автономности
CLOSEDQUORUM следует рассматривать не столько как сложную вредоносную программу, сколько как демонстрацию происходящего архитектурного сдвига в сторону автоматизации цепочки атаки.После развертывания тактические решения передаются циклу принятия решений на основе моделей. Модели получают контекст хоста, выбирают одну из реализованных возможностей, задают параметры выполнения и продолжают принимать решения без команд человека или заданий от выделенного C2.
Подобный подход на основе вспомогательной инфраструктуры можно относительно легко адаптировать для других целей злоумышленников.
Однако перенос функций от человека к ИИ создаёт и новые слабые места. Отказы моделей, ограничения частоты запросов, некорректные ответы, предсказуемое разрешение ничьих, ограниченная схема доступных действий и зависимость от коммерческих API создают точки отказа и возможности для обнаружения и блокирования.
Автономность не делает имплант безошибочным: некоторые ограничения человека заменяются ограничениями моделей и используемой инфраструктуры.
Тем не менее CLOSEDQUORUM демонстрирует, что исключить оператора из ограниченного этапа вторжения уже возможно с использованием существующих моделей и обычного доступа к API. Наиболее важен сам факт реализации: тактическая логика атаки может быть представлена в форме контекста, понятного модели, а структурированный ответ модели — непосредственно преобразован в исполняемое действие.
CLOSEDQUORUM пока остаётся ранним и ограниченным примером, однако он делает новую модель угроз вполне конкретной и позволяет определить наблюдаемые признаки, на которые защитникам уже сейчас стоит обратить внимание.
По мере того как перенос усилий на автоматизированные системы будет распространяться на новые этапы вторжения, его эффект будет суммироваться с уже предоставляемыми современным ИИ преимуществами в скорости и масштабе.
Для защитников это означает, что переход только начинается и ещё остаётся возможность изучить его на раннем этапе — чтобы разработать необходимые средства обнаружения, механизмы контроля и стратегии реагирования до того, как автономные операции станут более функциональными и получат широкое распространение.
Соответствие MITRE ATT&CK
| Тактика | Техника | Реализация |
|---|---|---|
| Уклонение от обнаружения (TA0005) / Повышение привилегий (TA0004) | T1055.004 — Process Injection: Asynchronous Procedure Call (APC) | По умолчанию процедура Early Bird APC создаёт приостановленный процесс Windows, записывает динамически сгенерированный шелл-код в его память, ставит полезную нагрузку в очередь с помощью NtQueueApcThread, а затем возобновляет выполнение. |
| T1055.012 — Process Injection: Process Hollowing | Если LLM выбирает process_hollow, имплант определяет базовый адрес образа приостановленного процесса, перезаписывает область его точки входа и возобновляет выполнение потока. | |
| Закрепление (TA0003) | T1547.001 — Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder | Имплант создаёт значение WindowsUpdate в ключе реестра Run текущего пользователя. |
| T1053.005 — Scheduled Task/Job: Scheduled Task | Имплант создаёт запланированную задачу с помощью schtasks.exe. | |
| T1546.003 — Event Triggered Execution: Windows Management Instrumentation Event Subscription | Имплант создаёт постоянную подписку на события WMI, которая запускает выполнение посредством запроса системной производительности каждые 60 секунд. | |
| T1059.001 — Command and Scripting Interpreter: PowerShell | Механизм WMI записывает скрипт в путь C:\Windows\Temp\wmi.ps1 и запускает его с помощью powershell.exe, оставляя на диске криминалистический артефакт. | |
| Доступ к учётным данным (TA0006) / Сбор данных (TA0009) | T1003.001 — OS Credential Dumping: LSASS Memory | Имплант включает привилегию SeDebugPrivilege и использует MiniDumpWriteDump для получения полного содержимого памяти LSASS. |
| T1555.003 — Credentials from Password Stores: Credentials from Web Browsers | Имплант собирает данные Login Data браузеров Chrome и Edge, файл logins.json Firefox, а также данные MetaMask, хранящиеся в профиле расширения Chrome. | |
| T1552.001 — Unsecured Credentials: Credentials in Files | Имплант собирает файлы криптовалютных кошельков, которые могут содержать данные для аутентификации, восстановления доступа и другую конфиденциальную информацию. | |
| T1005 — Data from Local System | Имплант извлекает данные MetaMask, Exodus и Ethereum-кошельков из локального хранилища. | |
| T1074.001 — Data Staged: Local Data Staging | Дампы LSASS, базы данных браузеров и файлы кошельков копируются во временные каталоги в C:\Windows\Temp\ перед передачей. | |
| Вывод данных (TA0010) / Командование и управление (TA0011) | T1567.004 — Exfiltration Over Web Service: Exfiltration Over Webhook | Имплант отправляет украденные учётные данные и другие собранные материалы на контролируемый оператором вебхук Discord. |
| T1102 — Web Service | Discord также используется как канал отчётности: через него имплант в реальном времени передаёт оператору выбранное панелью LLM действие. | |
| T1573.001 — Encrypted Channel: Symmetric Cryptography | Собранные файлы шифруются с помощью AES-256-GCM с использованием ключа, производного от текущей даты. | |
| T1132.001 — Data Encoding: Standard Encoding | Перед передачей зашифрованные данные кодируются в Base64. | |
| T1030 — Data Transfer Size Limits | Шифротекст разбивается на сегменты размером 1900 байт, которые отправляются в Discord с интервалом в одну секунду. | |
| Снижение эффективности защиты (TA0112) / Уклонение от обнаружения (TA0005) | T1685 — Disable or Modify Tools | Имплант подавляет телеметрию ETW, перезаписывая EtwEventWrite единственной инструкцией RET. |
| T1027 — Obfuscated Files or Information | Вторичная полезная нагрузка хранится в зашифрованном виде, что затрудня |
SHA-256
Следующие хеши представляют цепочку сборок разработчика за семь дней разработки:
- 250d4fa37488af9b025333fa17705573d721467b203765bc360890b4f5a90cd7
- c4dc171f2513fcaf9d5ecc815a94aee4063b213ab380f80bd3ac422dee5205a7
- c13cea04f598e2b0c248d603a6e31bd13aabb64d8149c1b6a77b64e0b983a86f
- f5f1f8c3e7b883793800ab6ccf21b3e60bd0730f300b4595fe74a33adc17a63c
- 5191cf625dfc209a347f137b50aea199e82040fd5ee9086fb3e2de73c133f3cb
- eddbd0ecf7195d38fefae5b9d393abfa79e6f3f94bde19308ecef130a05a42e5