Статья AI-агенты в пентесте: от 91% на CTF до провала в Active Directory

Исследователь безопасности со спины за двумя мониторами в тёмной комнате. Левый экран показывает терминал с зелёным текстом, правый — янтарный граф Active Directory с ошибкой.


PentestGPT v2 на Claude Opus 4.5, если верить препринту авторов (peer review не прошёл; публичная ссылка на момент написания недоступна), набирает 91% task completion на XBOW - 104 задачи по веб-безопасности. Там же заявлен root на 12 из 13 машин Hack The Box, включая Hard, и compromise 4 из 5 хостов в AD-среде GOAD с lateral movement через границы доменов - предыдущие системы застревали на двух. Красивые цифры. Но самое интересное не в них, а в том, что авторы нашли два принципиально разных класса отказов - и один из них не лечится ни RAG, ни расширением контекстного окна, ни заменой backbone-модели. Последние полтора года я интегрирую агентные фреймворки в engagement'ы, пробовал ReAct, LangChain, AutoGPT на реальных задачах - и эти данные полностью совпадают с тем, что наблюдаю на практике.

Два типа отказов LLM-агентов: почему инженерные фиксы не масштабируются​

Исследование PentestGPT v2 - на сейчас самый масштабный анализ LLM-агентов для автономного пентеста ИИ. Авторы разобрали 28 систем и протестировали пять из них на трёх бенчмарках возрастающей сложности: от CTF-задач до enterprise Active Directory. Вывод неожиданный: существующие архитектуры заточены под обход ограничений конкретных LLM, а не под решение фундаментальных проблем автономного хакинга. Модель улучшается - выигрыш от архитектурных надстроек сжимается. Подробнее - в нашем материале про безопасность llm атаки.

Конкретный пример: разрыв в производительности между агентами сокращается более чем вдвое при переходе с GPT-4o на GPT-5 как backbone. Контекстное сжатие, RAG-дополненный тулинг - всё это костыли для временных слабостей моделей, а не усилители сильных сторон. Архитектуры не компаундят с прогрессом моделей. Они деградируют по мере того, как модели закрывают те же проблемы сами.

Capability gaps (Type A): что лечится инженерией​

Type A failures - отказы из-за недостатка возможностей: нет инструмента, промпт кривой, знаний о конкретной технике не хватает. Агент не может запустить sqlmap, потому что инструмент не подключён к его tool layer. Или промпт не содержит контекста о том, как интерпретировать вывод Nmap для Network Service Discovery (T1046, Discovery).

Решение тут чисто инженерное: typed interfaces к инструментам, RAG с базой эксплойтов, skill compositions с закодированными паттернами атак. PentestGPT v2 закрывает Type A через Tool and Skill Layer с 38 инструментами - от Vulnerability Scanning (T1595.002, Reconnaissance) до Brute Force (T1110, Credential Access).

Где это работает: Type A доминирует на простых задачах - одношаговые CTF, exploitation с известным CVE. На бенчмарках низкой сложности разные агенты показывают сопоставимые результаты, потому что bottleneck не в планировании, а в наборе инструментов. Целевая инфраструктура - single-host с одной уязвимостью (типичный CTF или legacy-сервер без патчей)? Type A - единственный класс проблем, и его достаточно закрыть.

Complexity barriers (Type B): где агент теряет планирование​

Type B failures - принципиально другая история. Они сохраняются независимо от тулинга и качества промптов. Агент корректно запускает инструменты, получает валидный вывод - и всё равно не может завершить атаку. Три проявления:

Преждевременная фиксация на ветке. Агент не способен оценить, требует ли путь 3 или 30 шагов, и сжигает весь контекстный бюджет на бесперспективном направлении. На внутреннем пентесте AD это классика: агент уходит в kerberoasting на сервисном аккаунте без полезных привилегий и не переключается на AS-REP roasting или поиск misconfigured ACL. Любой пентестер через пару минут скажет «тупик, пробуем другое» - агент будет долбиться часами.

Неспособность перейти от разведки к эксплуатации. Агент бесконечно собирает информацию, потому что у него нет метрик «достаточности улик». Нет внутреннего триггера: хватит сканировать, у тебя уже есть всё для эксплуатации. Это как запускать nmap с новыми флагами снова и снова, хотя открытый порт 445 с SMBv1 уже найден на первом скане.

Забывание контекста. При длинных цепочках атак агент на седьмом шаге уже не помнит, что обнаружил на втором. Для инфраструктуры с многослойной сегментацией это фатально: lateral movement через несколько VLAN требует удержания десятков фактов о каждом хосте, доменных доверительных отношениях и полученных credential'ах.

Корневая причина всех трёх - отсутствие механизма оценки сложности задачи в реальном времени. Пентестер-человек решает это через интуицию: сотни engagement'ов формируют внутреннюю модель «тут на три часа» или «тут на неделю». У LLM-агента ничего подобного нет.

По заявлению авторов препринта (публичная ссылка недоступна): добавление difficulty assessment снизило долю Type B отказов с 58% до 27%, при этом доля Type A осталась неизменной. Корневые причины разные - и лечить их надо по-разному.

Архитектура difficulty-aware агента: TDA и автоматизация атак с помощью ИИ​

PentestGPT v2 бьёт по обеим проблемам: Tool and Skill Layer закрывает Type A, а Task Difficulty Assessment (TDA) - Type B.

Четыре измерения сложности пентест-задачи​

TDA оценивает трудоёмкость по четырём параметрам:

Horizon estimation - количество шагов до цели. Если для эксплуатации нужно 15+ действий, а оставшийся контекстный бюджет вмещает 10, ветка отбрасывается до того, как на неё потрачены ресурсы. На практике: агент не будет часами перебирать credentials через Brute Force (T1110), если оценка горизонта показывает, что путь через found SUID-бинарник короче.

Evidence confidence - уверенность в собранных доказательствах. Пока confidence ниже порога, агент остаётся в режиме разведки. Достигнут порог - переключается на exploitation. Решает проблему бесконечного nmap -sV --script vuln по одному и тому же хосту.

Context load - загрузка контекстного окна. Механизм мониторит, сколько контекста использовано, и выгружает ключевые факты во внешнюю память до их вытеснения. Для AD-сред с десятками хостов и отношениями доверия - без этого никуда.

Historical success rate - статистика успешности аналогичных операций в прошлых запусках. Kerberoasting на подобных конфигурациях давал 5% успеха? Приоритет ветки падает.

TDA интегрирован в Evidence-Guided Attack Tree Search (EGATS) - алгоритм, управляющий выбором между exploration (исследование новых веток) и exploitation (углубление в перспективные). EGATS обрезает ветки, когда TDA сигнализирует об интрактабельности.

Бенчмарки: три уровня сложности для AI red team инструментов​

БенчмаркЗадачиPentestGPT v2Лучший baselineОтносительный прирост
XBOW (набор задач по веб-безопасности)10491% peak / 89% mean (заявлено)61%+49%
HTB/VulnHub (полный пентест)13 машин12 из 13 rootvariesHard-задачи решены
GOAD (Active Directory)5 хостов4 compromise2x2

Данные из препринта PentestGPT v2 (публичная ссылка недоступна), требуют верификации после peer review.

На GOAD агент выполнил lateral movement и credential chaining через границы доменов - операции, требующие многошаговой координации и удержания контекста. Предыдущие системы застревали на двух хостах: Type B failures блокировали переход между доменами.

Ablation study показывает комплементарность: Tool Layer доминирует на коротких задачах (CTF, single-exploit), TDA-EGATS и Memory дают прирост на многошаговых сценариях. Ни один компонент в изоляции не воспроизводит общий результат - это не «добавили RAG и стало лучше», а архитектурный сдвиг.

Авторы честно перечисляют ограничения: novel exploitation (нестандартная эксплуатация, требующая креативного reasoning), adversarial environments с обманными защитами, extended multi-week campaigns - всё это за пределами текущих возможностей. Полностью автономный пентест - пока мечта.

Большие языковые модели пентест: GPT-4 против человека на Linux privesc​

Отдельное исследование hackingBuddyGPT (Happe & Cito; DOI заявлен как 10.1007/s10664-025-10758-3, требует верификации после публикации) фокусируется на privilege escalation - фазе, особенно чувствительной к качеству планирования. Авторы собрали публичный бенчмарк из Linux VM с одиночными уязвимостями: SUID/sudo-based, cron-based, information disclosure.

МодельУспешностьКонтекст
GPT-4-Turbo33–83%Сопоставимо с human baseline (75%)
GPT-3.5-Turbo16–50%Сильная зависимость от guidance
Llama3-8B0–33%Локальная модель, ограниченные знания

Три наблюдения, которые стоит запомнить:

State management удваивает результаты. LLM-driven reflection - когда модель периодически суммаризирует состояние и фильтрует нерелевантный контекст - подняла GPT-4-Turbo с 33% до 66% без guidance. Удвоение за счёт одного архитектурного решения. Подтверждает находку PentestGPT v2: управление контекстом - необходимое условие, а не оптимизация.

RAG с базой знаний HackTricks реально помогает, но не решает фундаментальных проблем: авторы hackingBuddyGPT это подтверждают - RAG улучшил качество команд, но не устранил failures на уровне reasoning.

Характерные ошибки LLM, которые человек никогда не допустит: использование несуществующих docker-образов; GPT-4 скачивает enumeration-скрипт, но не может запустить его, потому что бинарник называется python3 вместо python - и вместо тривиального alias или симлинка сдаётся; игнорирование low-hanging fruits; неспособность к ожиданию при эксплуатации cron-уязвимостей (агент не выдерживает паузу до срабатывания таймера). Вот это последнее - просто анекдот: cron-джоб запускается раз в минуту, а агент через 10 секунд решает, что эксплойт не сработал, и уходит на другой вектор.

Контекст применимости: бенчмарк - single-vulnerability VM на Linux без сетевой сегментации и без EDR. Legacy-сценарий. На инфраструктуре с Sysmon/AuditD и централизованным логированием результаты будут значительно ниже: каждый неудачный запуск привлекает внимание SOC.

Тут стоит вспомнить критическое замечание Chris Rohlf (struct.github.io): традиционные инструменты (sqlmap, Burp Suite) давно автоматизируют те же классы веб-уязвимостей (SQLi, XSS, LFI), которые демонстрируются как достижения LLM-агентов в публикациях UIUC об автономном взломе сайтов. Baseline против существующих инструментов не приведён, что затрудняет оценку реального прироста от LLM. Прежде чем тащить AI hacking agent для web exploitation, стоит убедиться, что он превосходит sqlmap --level=5 --risk=3 + Burp active scan - потому что пока это не доказано.

Prompt injection через MCP и детектируемость AI-агента​

Автономный AI-агент - не только инструмент пентестера. Он сам - поверхность атаки. И одновременно - источник артефактов, которые SOC может обнаружить.

Tool description injection в MCP: вектор, который меняет поведение модели без вызова инструмента​

Model Context Protocol (MCP), анонсированный Anthropic в ноябре 2024 года (поддержку позже добавили OpenAI и Google), позволяет подключать к LLM внешние инструменты через стандартизированный интерфейс.

Архитектура: MCP-хост (Claude Desktop, IDE) содержит MCP-клиент, который запрашивает у каждого подключённого MCP-сервера список доступных инструментов через вызов tools/list. Метаданные инструментов - название, описание в поле description, параметры - передаются модели как часть системного контекста. Само подключение MCP-сервера уже меняет поведение модели, даже если ни один инструмент не вызван - описания становятся частью контекста, влияющего на генерацию. Это тонкий момент, который легко пропустить.

Вектор атаки - Prompt Injection (LLM01:2025 по OWASP LLM Top 10): вредоносный MCP-сервер внедряет в поле description инструкции, которые модель интерпретирует наравне с легитимным промптом - tool description injection. По данным исследования Embrace The Red (embracethered.com), Claude интерпретирует Unicode Tags-символы как часть текстовых инструкций, что позволяет спрятать вредоносный payload так, что при визуальном осмотре метаданных в UI он невидим. Второй вектор - fake tool calls: зная формат описания инструментов, атакующий провоцирует модель на вызов несуществующего инструмента или реального с несанкционированными параметрами.

Связь с OWASP LLM06:2025 (Excessive Agency) прямая: AI-агент с доступом к nmap, sqlmap, metasploit через MCP - стандартная конфигурация для пентест-ассистента - при tool description injection может начать эксплуатацию целей вне scope engagement'а. Представьте: ваш собственный инструмент ломает то, что трогать нельзя.

Минимизация рисков при использовании MCP в offensive security:
  • Аудит исходного кода каждого стороннего MCP-сервера перед подключением - без исключений
  • Только локальный режим stdio; удалённый SSE без взаимной аутентификации - нет
  • Разделение MCP-серверов: отдельные для read-only разведки и для активной эксплуатации
  • Журналирование всех вызовов инструментов - MCP-сервер без логов в пентесте недопустим
  • API-ключи и токены не в plaintext-конфигурации claude_desktop_config.json, а в переменных окружения или системном keychain

Артефакты AI-агента: что видит SOC и SIEM​

AI-агент, выполняющий автономный пентест, генерирует характерный сетевой паттерн. Active Scanning (T1595, Reconnaissance) на внешнем периметре или Network Service Discovery (T1046, Discovery) после получения доступа в сеть - первые фазы сканирования - тригерят множество детекций. В SigmaHQ 22 правила маппятся на T1046: net_firewall_susp_network_scan_by_ip.yml для firewall-логов, opencanary_portscan_syn_scan.yml для honeypot-детекции SYN-сканов, proc_creation_win_pua_netscan.yml для процессных артефактов на Windows.

Для Brute Force (T1110) - 40 Sigma-правил, покрывающих Kerberos (win_security_susp_failed_logons_single_source_kerberos.yml), NTLM (win_security_susp_failed_logons_single_source_ntlm.yml) и облачные сценарии (azure_mfa_denies.yml). D3FEND определяет контрмеры: Protocol Metadata Anomaly Detection (D3-PMAD) для аномалий в сетевом трафике, Credential Compromise Scope Analysis (D3-CCSA) для определения масштаба компрометации учётных данных.

Пример Sigma-правила для обнаружения SYN-сканирования через honeypot (SigmaHQ):
YAML:
# opencanary_portscan_syn_scan.yml
title: OpenCanary - Port Scan SYN Scan Detected
logsource:
    product: opencanary
    service: portscan
detection:
    selection:
        logtype: 5001  # SYN scan event
    condition: selection
level: medium
Проблема AI-агента: он не умеет throttle'ить. hackingBuddyGPT на бенчмарке генерировал десятки запросов подряд без пауз - поведение, которое Suricata или rate limiter на SIEM поймает за секунды. Любой пентестер знает: на инфраструктуре с EDR (CrowdStrike Falcon, Microsoft Defender for Endpoint) последовательный SYN-скан с одного IP - мгновенный алерт. Агент этого не понимает, если скрытность не заложена в планировщик.

CrowdStrike Global Threat Report 2025 фиксирует среднее eCrime breakout time (время lateral movement после initial access) - 62 минуты (рекорд - 51 секунда). AI-агент, сжигающий контекстный бюджет на бесконечное сканирование вместо быстрого перехода к exploitation, проигрывает по всем метрикам - и по скорости, и по скрытности. По сути, шумный скрипт-кидди с GPU.

Когда AI-агент окупается: decision tree для пентест-проекта​

Данные из исследований позволяют собрать decision tree:

УсловиеAI-агент целесообразенРучная работа эффективнее
Тип задачиРазведка, корреляция вывода, приоритизация CVECreative exploitation, бизнес-логика
ИнфраструктураCTF, лаб, single-host, legacyEnterprise AD, multi-segment, modern EDR
Контекст engagement'аВнешний пентест, перечисление surfaceВнутренний пентест, lateral movement
ВремяОграниченный scope, нужна скорость на reconДлительный engagement с полным kill chain
КонфиденциальностьДанные не критичны или локальная модельNDA запрещает передачу в облако
Активность SOCLegacy IDS, нет real-time мониторингаSOC 24/7, EDR с behavior-based detection

Требования к окружению для запуска AI-агента:
  • ОС: Linux (Kali/Parrot) или macOS с Docker
  • RAM: минимум 16 ГБ для локальной модели 7–13B (Ollama); 32 ГБ для 30B+
  • GPU: 8+ ГБ VRAM для комфортной работы с локальной LLM; без GPU - задержки 30–60 секунд на запрос, что на практике делает агентный цикл неработоспособным
  • Сеть: для облачных API (OpenAI, Anthropic) - стабильный интернет; для NDA-проектов - полностью offline с Ollama + Mistral/Llama
  • Инструменты: Docker, Python 3.10+, Ollama (для локальных моделей)
Проект PentAGI (github.com/vxcontrol/pentagi) даёт инфраструктуру с набором инструментов безопасности в sandbox-контейнере Docker, multi-agent систему с делегированием задач специализированным агентам, поддержку нескольких LLM-провайдеров включая Ollama для локального inference. Развёртывание через Docker Compose с конфигурацией через .env.

Алгоритм выбора подхода:
  1. Определите NDA-ограничения. Облако запрещено - только локальная модель. Это сразу снижает quality ceiling: Llama3-8B показывает 0–33% на privesc против 33–83% у GPT-4-Turbo.
  2. Оцените целевую инфраструктуру. Single-host CTF-стиль: AI-агент даёт ROI. Enterprise AD с сегментацией: AI полезен для начальной разведки (перечисление портов, корреляция CVE с выводом nmap -sV), дальше - ручная работа.
  3. Проверьте наличие активного SOC. Если мониторинг в реальном времени - агент без throttling'а засветится быстрее человека. Нужна кастомная настройка rate limiting в конфигурации агента или добавление delay-параметров в промпт.
  4. Выделите бюджет на API. Per-exploit cost актуальной модели (GPT-4o, Claude Opus) при правильном context management конкурентоспособен, но на engagement'ах с сотнями итераций бюджет растёт нелинейно - каждый Type B failure с выгоранием контекста это полный retry с нуля.
Полтора года работы с этими штуками дают однозначную картину: на разведке и корреляции данных LLM-агенты экономят часы. На exploitation - стабильно генерируют нерабочие payload'ы или неверные параметры инструментов. Исследование 28 систем подтверждает то, что видно на каждом проекте: проблема не в качестве моделей, а в отсутствии планировщика, который оценивает сложность в реальном времени. PentestGPT v2 с TDA - первая архитектура, атакующая эту проблему в лоб, и заявленные результаты (91% на задачах XBOW, 4/5 GOAD) показывают верность направления - при условии подтверждения после peer review.

Но ни одна из 28 систем не учитывает детектируемость. Агент, генерирующий 200 SYN-пакетов за 30 секунд, - не пентестер, а шумный скрипт-кидди, которого любой Sigma-набор на T1046 поймает мгновенно. Пока difficulty-aware planning не включит «скрытность» как одно из измерений TDA, AI-агенты останутся инструментом для CTF и лабораторий, а не для red team на боевой инфраструктуре. Метрика, которую хочется увидеть в следующем поколении бенчмарков, - не task completion rate, а detectable-vs-stealthy ratio: сколько целей compromise'нуто без срабатывания хотя бы одного Sigma-правила уровня medium и выше.

Если хочешь сам пощупать, как AI-агент ведёт себя на реальных задачах - на HackerLab есть лабы с AD-средами, где можно сравнить свои результаты с тем, что выдаёт автоматика.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab