РАЗБОР На проверке

Локальный LLM для пентеста: железо, модели, workflow

Сергей Попов
Сергей Попов Red Team · 6,7 тыс. сообщений
Подписаться
162
[ обложка статьи ]
Режим чтения
Видеокарта с чёрным кожухом и медными тепловыми трубками лежит на антистатическом коврике рядом с компактной материнской платой ITX, на задней панели выгравирована надпись про локальную модель и оф...


На одном из недавних проектов клиент передал 14 000 строк PHP-кода кастомного REST API. Бюджет на код-ревью - два дня. Скормил контроллер авторизации локальной модели на 27B параметров - через 14 минут она ткнула пальцем в SQL-инъекцию в параметре user_id, которую grep по регуляркам пропустил. Ни одного байта клиентского кода не ушло за пределы рабочей станции. Дальше - как собрать такую среду с нуля и встроить локальный LLM для пентеста в ежедневную работу.

Зачем пентестеру локальная нейросеть​

Вопрос «есть же ChatGPT - зачем мучиться?» снимается тремя вещами. Подробнее - в нашем обзоре безопасность llm атаки.

NDA и регуляторика. Хороший отчёт о пентесте - по сути пошаговая инструкция, как нанести заказчику максимальный ущерб. Почти все NDA запрещают обработку таких данных третьими сторонами. Облачный API - третья сторона, даже если ToS утверждают обратное. На банковских проектах и в госсекторе вопрос закрыт до начала обсуждения. Offline AI хакинг без передачи данных наружу - единственная легитимная опция.

Цензура. ChatGPT откажется генерировать reverse shell. Claude свернёт обсуждение обхода ASLR. Для пентестера это рабочие задачи в рамках scope, а не создание малвари. Uncensored LLM модель без safety-слоя отвечает по существу - без морализаторства. Jailbreak LLM для пентеста - обходной путь, но проще сразу взять модель без ограничений и не тратить время на уговоры.

Скорость и стоимость. Без лимитов по RPM, без сетевых задержек, без оплаты за токены. На engagement, где за день нужно прогнать через модель 50 фрагментов кода и десяток скан-логов, разница ощутимая. Каждый следующий запрос к локальному inference LLM стоит ноль - только электричество.

С точки зрения MITRE ATT&CK применение AI для offensive-задач описывается техникой Artificial Intelligence (T1588.007, Resource Development). Бизнес-логика для атакующего проста: AI ускоряет фазу подготовки - от разведки до крафта пейлоада - при нулевых операционных расходах.

Железо: минимум, оптимум, идеал​

Главный ограничитель - VRAM видеокарты. Модель должна целиком поместиться в видеопамять: частичный offload на CPU замедляет inference в 10–20 раз и превращает интерактивную работу в пытку.

КонфигурацияVRAMКакие модели тянетБюджет
RTX 3060 12GB12 GB7B в Q8, 14B в Q4от $300 б/у
RTX 3090 24GB24 GB27-32B в Q8, 70B в Q4от $700 б/у
Mac M3 Pro 36GB36 GB unified27-32B в Q8 без свопаот $2000
2x RTX 309048 GB70B в Q8от $1400 б/у

По практическому разбору на Хабре, Mac с Apple M3 и 32 GB Unified Memory запускает Gemma 3 27B без свопа через Metal. На Windows/Linux RTX 3090 с 24 GB VRAM и 32 GB оперативки - проверенный дефолт для моделей 27–32B. Карта поддерживает CUDA, Ollama подхватывает её без дополнительных плясок.

Оперативная память - минимум 32 GB. Параллельно с моделью работают Burp Suite, терминалы с SSH-сессиями, Docker-контейнеры с целями и сканерами. На 16 GB всё начинает свопиться после загрузки модели - проверено на своей шкуре.

Дисковое пространство: модели занимают 15–40 GB каждая в зависимости от квантования. Если держите 3–4 модели под разные задачи - заложите 150 GB под хранилище Ollama.

Рекомендация: бюджет около $1000 - берите б/у RTX 3090. Лучшее соотношение VRAM к цене на вторичке, включая российские площадки. 24 GB закрывают 90% offensive-задач с моделями до 32B. Для минимального развёртывания LLM для безопасности на тестовом стенде хватит и RTX 3060, но выбор моделей сужается до 7B-класса - а это заметно слабее на код-ревью и генерации пейлоадов.

AI ассистент пентестера: выбор модели по бенчмаркам​

Маркетинг каждой модели обещает прорыв. Реальность проверяется на реальных уязвимостях, а не на академических MMLU-бенчмарках.

Согласно публикации TrustedSec (точные параметры рекомендуется уточнять в первоисточнике), несколько self-hosted моделей из разных семейств были протестированы на задачах OWASP Juice Shop. Задачи покрывали SQL injection, JWT manipulation, Path Traversal/LFI и Auth bypass. Каждая модель получала множество попыток на challenge для статистической значимости. Все модели запускались через Ollama на локальном сервере - результаты напрямую применимы к нашему сценарию.

Модели в тесте: gemma3:27b, qwen3:32b, qwen3-coder, devstral-small:24b и другие (точный список рекомендуется уточнять в первоисточнике TrustedSec, названия в каталоге Ollama меняются между релизами).

Ряд моделей меньшего размера отсеялся ещё на старте - они не смогли стабильно генерировать корректные tool calls. Это входной билет в автоматизацию пентеста с AI. Без structured tool calls модель может только рассуждать, но ничего не делать. Разница между «я бы отправил вот такой запрос» и реальным HTTP-запросом - как между чтением книги про плавание и прыжком в воду.

Что показал бенчмарк:
  • Качество описаний инструментов важнее количества параметров. 27B-модель с хорошим tool description обходила 32B со скудным описанием. Подтверждается и другими исследованиями по tool calling в локальных LLM.
  • Часть моделей генерировала текстовые объяснения вместо вызова инструмента. Harness отправлял nudge «Use the http_request tool. Do not explain, send a request» - но не все модели реагировали. Некоторые продолжали описывать, что бы они сделали, вместо того чтобы сделать. Знакомая ситуация - как джуниор, который пишет красивый план атаки, но не может запустить sqlmap.
  • First-turn solve rate (решение с первой попытки) кардинально различался между моделями - критично для time-boxed engagement, где каждая минута на счету.
Рекомендации на середину 2025:

ЗадачаМодельПараметрыКомментарий
Код-ревью и поиск уязвимостейqwen3-coder30B+Code-специализация даёт преимущество
Пейлоады, tool calling, автоматизацияqwen3:32b / gemma3:27b27-32BСтабильные structured calls
Анализ скриншотов, VLM-задачиgemma3:27b27B128K контекст, мультимодальность, хороший русский
Минимальное железо, 12 GB VRAMmistral:7b7BБазовый уровень, для лёгких задач сойдёт

Из бенчмарка Codeby: для Ollama offensive security начинайте с Qwen 32B+ или gemma3:27b. Конкретная модель зависит от задачи, но как стартовая точка эти семейства стабильно лидируют на offensive-задачах.

Про русскоязычную поддержку: Gemma 3 заявляет 140+ языков, включая технический русский. На практике промпты на русском работают, но пейлоады и технические конструкции модель генерирует точнее, если промпт на английском. Системный промпт и техническую часть запроса делайте на EN, описание контекста проекта - на удобном языке.

Развёртывание Ollama для пентеста​

📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

) - для код-ревью этого обычно мало. Расширяйте через параметр num_ctx в API-запросе:
Bash:
curl http://localhost:11434/api/chat -d '{
  "model": "qwen3:32b",
  "options": {"num_ctx": 16384},
  "messages": [{"role":"user","content":"..."}]
}'
Gemma 3 27B поддерживает до 128K токенов, но каждый токен контекста потребляет VRAM. На 24 GB карте реалистичный потолок для 27B-модели - 16–32K токенов. Увеличивайте num_ctx осторожно и следите за nvidia-smi.

Uncensored-модели. Для offensive-задач ищите варианты без safety-alignment в библиотеке Ollama: dolphin-mistral, dolphin-llama3, wizard-vicuna-uncensored. Загружаются стандартно через ollama pull. Вместо того чтобы обходить ограничения через jailbreak-промпты, проще сразу взять модель без цензуры - меньше головной боли.

Несколько моделей. Ollama позволяет держать несколько моделей одновременно. На практике удобно: qwen3-coder для код-ревью, gemma3:27b для генерации пейлоадов и анализа скриншотов. Переключение между моделями - одна строка в API-запросе.

Рабочие сценарии в цепочке атаки​

Локальная нейросеть для хакинга закрывает три фазы kill chain: разведку, обнаружение уязвимостей и подготовку эксплойтов. По данным Hadrian, «AI offensive capability is concentrated at the front end, degrades through the middle, and is effectively absent at the back» - разведка и перечисление это зона доминации LLM, а post-exploitation по-прежнему требует человека.

LLM для разведки и OSINT​

Самый очевидный сценарий - deep research OSINT через локальную модель. Скормите ей вывод инструментов разведки и получите структурированный анализ вместо ручного парсинга сотен строк.

Workflow: запускаете nmap -sV -sC -oN scan.txt target, затем передаёте файл модели через API с промптом «проанализируй результаты сканирования, выдели сервисы с известными уязвимостями, приоритизируй по эксплуатируемости, укажи конкретные CVE если уверен». Аналогично работает с выводом subfinder на 3 000 поддоменов, результатами nuclei, Burp-экспортами. Модель не заменяет анализ - ускоряет первичную сортировку и выделение приоритетных целей.

Исследование Pentest Copilot (arxiv, 2024) показало, что RAG с базой актуальных CVE снижает галлюцинации и позволяет модели ссылаться на конкретные уязвимости вместо выдуманных. Step chaining - разбиение сложной задачи разведки на подзадачи - помогает не терять контекст при работе с большими объёмами данных.

Инструменты, которые подключаются к Ollama API напрямую: PentestGPT умеет парсить вывод nmap и логов перечисления с предложением следующего шага (актуальность рекомендуется проверять в первоисточниках). В Nuclei обсуждается AI-генерация YAML-шаблонов из описания уязвимости на естественном языке (проверяйте в документации ProjectDiscovery). Некоторые open-source проекты (например, упоминаемый в сообществе METATRON - существование и актуальность требуют проверки) заявляют интеграцию с Ollama. По данным Hadrian, к марту 2025 было каталогизировано несколько десятков open-source AI-инструментов для offensive security - и практически все поддерживают подключение к локальному inference-серверу.

AI для анализа кода уязвимостей​

Здесь локальный LLM для пентеста приносит максимальную отдачу. Клиент передал исходники - нужно найти injection-точки, broken access control, небезопасную десериализацию, hardcoded secrets.

Подход - файл за файлом, контроллер за контроллером. Не скармливайте всё приложение целиком: даже 128K контекста не хватит на проект в 50 000 строк, а качество деградирует задолго до исчерпания окна. Разбивайте на модули, начинайте с контроллеров авторизации, обработчиков пользовательского ввода и API-эндпоинтов.

Промпт, работающий на практике: «Ты пентестер. Проанализируй этот PHP-контроллер. Найди: SQL-инъекции, XSS, IDOR, hardcoded credentials, небезопасную десериализацию. Для каждой находки укажи номер строки, тип уязвимости и PoC-запрос для эксплуатации. Если уязвимостей нет - скажи прямо.»

Последняя фраза критична. Без неё модель «находит» уязвимости в каждом файле, включая заведомо безопасный код. Классическое поведение - LLM хочет быть полезной и придумывает проблемы на ровном месте.

Модели qwen3-coder и gemma3:27b стабильно ловят классику: SQLi через конкатенацию строк, XSS через нефильтрованный вывод, IDOR через предсказуемые идентификаторы. На сложных цепочках (SSRF через PDF-генератор, десериализация с гаджет-чейном) проседают - тут по-прежнему нужен ручной анализ опытного пентестера.

Генерация эксплойтов с помощью AI​

Третий сценарий - самый чувствительный к safety-фильтрам облачных API. Облачные модели отказываются помогать, локальная uncensored - работает.

Типичные задачи: адаптация SQLi-пейлоада под конкретную СУБД и WAF, генерация XSS-вектора с обходом конкретного CSP, написание PoC для найденной уязвимости, конвертация exploit-кода между языками.

По данным AutoPenBench (Gioacchini et al., 2024, arXiv:2410.17141), GPT-4-based агент показал порядка 21% полностью автономный success rate, вырастающий до ~64% с участием человека (точные цифры см. arXiv:2410.17141). Исследование Fang et al. (2024, arXiv:2404.08144) зафиксировало высокий exploitation rate у GPT-4 на наборе one-day CVE - но при наличии CVE-описания в промпте. Без описания результат кратно хуже.

Локальные модели 27–32B стабильны на шаблонных задачах (SQLi, LFI), но проседают на многошаговых цепочках. GPT для red team задач работает как мультипликатор, не как замена - ни разу модель не вытянула полную цепочку от рекона до shell самостоятельно.

Квантование: граница качества на offensive-задачах​

Веса модели в оригинале хранятся в 16 битах (FP16/BF16). Квантование сжимает их до 8 (Q8) или 4 бит (Q4), уменьшая VRAM и ускоряя inference. Вопрос - какой ценой.

КвантованиеПотеря качестваКогда подходитКогда не подходит
Q8_0 (8-bit GGUF)МинимальнаяДефолт для всех задач-
Q4_K_M (4-bit GGUF)Заметная на цепочкахБыстрые одношаговые запросыМногошаговый exploit, код-ревью
IQ2_M (2-bit GGUF)КритическаяНе рекомендуетсяЛюбые offensive-задачи

Q8 - безопасный дефолт. Для 32B-модели: примерно 32 GB в FP16, 16–18 GB в Q8. На RTX 3090 модель 32B в Q8 помещается с запасом на контекстное окно.

Q4 - компромисс. Ответы становятся «шумнее»: модель чаще галлюцинирует, путает параметры функций, генерирует синтаксически корректные, но семантически бесполезные пейлоады. На простых задачах (перевод пейлоада под другой формат, подсказка синтаксиса sqlmap) - хватит. На многошаговом reasoning при анализе бизнес-логики - уже нет.

Q2 и агрессивнее (IQ2_M) - на Reddit обсуждают как способ запустить 70B-модели на 24 GB VRAM. На offensive-задачах результат печальный: модель теряет различение типов уязвимостей, путает SQLi с XSS, генерирует нерабочие пейлоады. Экономия на спичках.

Правило: одна подсказка → один ответ = Q4 хватит. Reasoning через несколько шагов = только Q8 или выше.

Промпт-инжиниринг для LLM red team​

Промпт для offensive-модели строится иначе, чем для чат-бота.

Системный промпт-минимум. Бенчмарк TrustedSec использовал одну фразу: «You are a penetration tester.» Минималистичный промпт заставляет модель опираться на знания, а не на костыли из подсказки. Для боевого engagement добавьте контекст: целевую ОС, стек технологий, scope.

Запрет на объяснения. Модели обожают рассказывать, что собираются сделать. Указывайте явно: «Выдай только команду/пейлоад. Без объяснений, без предисловий.» Это прямо коррелирует с наблюдением TrustedSec: модели генерировали текст вместо tool calls, пока harness не начинал их пинать.

Итеративность. Провальный пейлоад часто срабатывает на попытке 3–5 или после небольшой переформулировки. LLM стохастичны - каждый inference немного другой при температуре выше нуля. Не бросайте после первого отказа.

Контекст решает. Версия ПО, фрагмент ответа сервера, структура параметров, сообщение об ошибке - всё это повышает точность результата. С CVE-описанием в промпте модель работает кратно эффективнее. Без контекста даже frontier-модели проседают.

Интеграция с тулчейном. Ollama API на порту 11434 совместим с OpenAI-форматом, что позволяет подключать практически любой инструмент. PentestGPT, METATRON, кастомные Python-скрипты, Burp-расширения - все работают с http://localhost:11434. Локальный inference-сервер становится хабом, к которому стекается всё: вывод nmap, результаты sqlmap, Burp-логи. Один endpoint - десятки применений.

Разговоры о том, что AI заменит пентестеров, идут уже два года. За это время не было ни одного публичного случая, где модель самостоятельно прошла от рекона до root. Бенчмарки подтверждают: около 21% автономного success rate у лучшей frontier-модели (по пересказам AutoPenBench; точные цифры см. arXiv:2410.17141). Локальные 27–32B стабильны на SQLi, но ломаются на любой нетривиальной цепочке. AI в пентесте - cruise control, не autopilot: держит курс на прямой, повороты по-прежнему за вами.

Что реально изменилось - скорость рутины. Код-ревью, занимавший два дня, укладывается в четыре часа: модель делает первый проход, я проверяю находки и копаю глубже там, где она подсветила подозрительное. Разведка по 200 хостам проходит через LLM-фильтр и приходит ко мне уже отсортированная по приоритету. Автоматизация пентеста с AI экономит 30–40% времени на engagement - не за счёт магии, а за счёт переноса рутинного парсинга текста на модель.

Ловушка, в которую уже попадают джуниоры: слепое доверие к выводу модели. LLM галлюцинируют - уверенно называют несуществующие CVE, генерируют синтаксически правильные, но бесполезные пейлоады, «обнаруживают» уязвимости в заведомо чистом коде. Каждый вывод - гипотеза для проверки руками. Кто этого не делает - получает ложные findings в отчёте и потерю репутации перед клиентом. Если хочется обкатать цепочку «модель → пейлоад → эксплуатация» на живом стенде - на HackerLab.pro есть категории web и pwn, где эту связку можно гонять без рисков для клиентской инфраструктуры.
Полезно

Комментарии

0