KaliBench: почему LLM-агенты проваливают командную строку
«msfvenom --list-formats» вместо «msfvenom --list formats». Одна лишняя деталь в синтаксисе, и инструмент молчит. Кибербезопасность живёт в командной строке, и командная строка не прощает даже мелких отклонений от канона. Именно на этом слое спотыкаются LLM-агенты, которых всё активнее зовут автоматизировать работу аналитиков и пентестеров.
Свежая работа KaliBench (arXiv:2610.02206) измеряет как раз его: способность модели перевести запрос на человеческом языке в точную, исполняемую команду Kali Linux. Результат отрезвляет. Когда на входе только текст запроса, ни одна открытая модель не превышает 42% полностью верных команд. При этом восьмёрка, дообученная на этом же бенчмарке, почти догоняет 685-миллиардного гиганта, и это уже совсем другая история.
Что такое KaliBench
KaliBench это бенчмарк и открытый датасет из 8 504 пар «запрос-команда», покрывающих 1 642 инструмента Kali Linux. Задания разложены по 5 фазам жизненного цикла атаки (в духе Cyber Kill Chain) и 23 функциональным направлениям, от разведки и анализа уязвимостей до эксплуатации, постэксплуатации и защитного анализа. Каждая пара содержит команду, разобранную на компоненты: инструмент, опциональные флаги и позиционные аргументы.
Kali Linux это рабочая лошадка пентестера: больше двух тысяч предустановленных инструментов, от Nmap до Metasploit и Volatility. Задача аналитика обычно звучит так: «просканируй эту подсеть на предмет SMB-мисконфигураций». Перевод такой фразы в конкретный вызов с правильными флагами это отдельное умение, которое и проверяет бенчмарк. Направления покрывают весь цикл работ: разведка, веб, фаззинг, эксплойты, пароли, форензика, отчётность и даже GPU-крекинг хешей.
В отличие от CTF-бенчмарков, где итоговый провал сложно разложить по причинам, здесь ошибка атрибутируется точно: отдельно за выбор инструмента, отдельно за флаги и их значения, отдельно за порядок аргументов.
Как собирали датасет
Основой стала официальная документация Kali: 2 372 инструмента со всеми опциями и алиасами. Генерацию поручили Qwen3-Max: по 10-13 пар на инструмент, всего 27,7 тысячи пар. Дальше началось самое интересное.
Ручная проверка показала, что больше половины сгенерированных команд содержат выдуманные или перепутанные опции. Характерная ошибка: --silent вместо --silence. Модель уверенно смешивает похожие флаги, и без внешнего контроля такой датасет учил бы мусору.
Каждый пример прогнали через три фильтра. Сначала LLM-верификатор сверял каждую опцию с манускриптом инструмента, и первый раунд отсеял около половины примеров. Затем Docker-песочница с образом kali-linux-everything пыталась команду исполнить: то, что падало из-за галлюцинаций, а не из-за синтетических данных, отбрасывалось, ещё 12% отборки. Финальные сомнения разбирали люди, и 4,9% примеров ушли в брак из-за неоднозначных запросов. Итог: 8 504 выживших пары, 30,7% от исходных 27,7 тысячи.
Для тестовой части отобрали 5 000 примеров (все 1 642 инструмента), для обучения осталось 3 504 примера по 962 инструментам. В тесте 3 074 уникальных опциональных аргумента, так что набор не схлопывается в десяток шаблонных команд.
Три режима: сколько подсказок нужно агенту
Модели оценивают в трёх режимах с разным количеством подсказок. В Unrestricted дают только текст запроса: надо угадать и инструмент, и его аргументы. В Restricted добавляют список из 20 инструментов-кандидатов, среди которых есть правильный. В Hinted выдают полную документацию кандидатов, это ближе всего к классическому function calling, где функции и параметры описаны явно.
Метрики разложены по компонентам: выбран ли правильный инструмент (Tool Accuracy), верно ли собраны опциональные флаги (Optional F1) и позиционные аргументы (Positional F1). Total Score это среднее по компонентам, а Exact Correct начисляется, только когда вся команда совпала до символа.
Что показали результаты
Средние по всем моделям такие: в Unrestricted до полностью верной команды дотягивают 22,3% ответов, в Restricted 28,3%, в Hinted 73,1%. Разрыв между режимами объясняет, где именно болит. Список кандидатов резко поднимает точность выбора инструмента (с 72% до 95,2%), но почти не помогает с аргументами. Настоящий рывок даёт документация: Optional F1 взлетает с 45,1% до 87,8%, Total Score с 59,4% до 90,8%.
Проще говоря, модели в целом понимают, что от них хотят, но не знают интерфейсов наизусть. Опциональные флаги это самый трудный слой, позиционные аргументы чуть легче, а выбор инструмента среди подсказанных почти решён.
Верхняя граница открытого класса выглядит так: лучшая модель без подсказок, GLM-5.2 на 753 миллиардах параметров, берёт 41,3% точных команд. Типичные мид-модели на 20-32B сидят между 18,9% и 24%, компактные восьмёрки без дообучения остаются ниже 21%, а DeepSeek-V3.2 на 685 миллиардах набирает 33%. Масштаб помогает, но не решает задачу в лоб.
8B догнал 685B: рецепт RedSage-K
Самая интригующая часть работы: авторы взяли открытую security-модель RedSage-Ins на 8 миллиардах параметров и дообучили её на тренировочном сплите KaliBench. Схема скромная: LoRA через Unsloth, две эпохи, батч 32, одна H200. Три варианта: только SFT, только RLVR через GRPO и комбинация SFT+GRPO.
RLVR это обучение с подкреплением на проверяемых наградах. Сигнал складывается из компонентных метрик: правильный инструмент, алиас-осознанные опциональные аргументы, позиционные аргументы, плюс бонус за точное совпадение команды и отдельная награда за формат. Ключевой трюк: награды вычисляются без исполнения команд модели. Ground truth уже прошёл песочницу при сборке датасета, а разбор ответов идёт детерминированно, через shlex-парсинг. Для домена безопасности это двойная выгода: обучение не крутит произвольные боевые команды и не требует инфраструктуры исполнения.
Результат: версия SFT+GRPO набирает 79,2% Average Total Score против 80,2% у DeepSeek-V3.2 (685B), отставание меньше одного пункта. А в самом честном, Unrestricted режиме восьмёрка даже впереди: 70,3% против 67,2%. Чистый GRPO тоже даёт мощный прирост относительно базовой модели: +11 пунктов Total Score в Unrestricted и +5,3 в Restricted.
Есть и подвох. В Hinted-режиме GRPO-версии слегка ухудшаются: модель, обученная на награду, перестраивает некоторые уже решённые примеры. В абсолюте это 537 исправленных ошибок против 562 новых регрессий, а SFT-инициализация смягчает эффект, сокращая регрессии до 488. Мораль: чем формальнее сигнал, тем важнее не разучиться делать то, что уже работало.
Четыре способа ошибиться и капризные инструменты
Слабость моделей сконцентрирована в одном месте: опциональные аргументы. Авторы выделяют четыре повторяющихся паттерна. Путаница длинных и коротких форм: --domain и -d смешиваются в одной команде. Галлюцинации опций: позиционный аргумент превращается во флаг. Выдуманные длинные опции для инструментов, у которых есть только короткие. И путаница единственного и множественного числа: --symlink против --symlinks.
На уровне отдельных инструментов разброс огромный. Простые интерфейсы берутся идеально: у truecrypt2john, rfdump и d2j-std-apk средний Exact Correct 100%, у jsql 99,5%. А вот у nikto выбор инструмента почти не ошибается (98,6%), но опциональные аргументы не угадываются почти никогда (1,2%), и до точной команды не дотянулся никто. У hashrat 18,4% точных команд, у steghide 31,9%. Сложность определяется капризностью CLI, а не «хакерностью» направления: категории crypto-stego и gpu у моделей идут заметно лучше, чем wireless-стеки.
Проприетарные модели и цена отказов
Отдельный сюжет: топовые проприетарные системы. GPT-5.6-Sol отвечает почти на всё (4 988 из 5 000 запросов) и берёт 61,68% точных команд на полном наборе, лучший результат среди всех участников. Codex с GPT-5.5 внутри: 51,68%. Claude Opus 5 ответил только на 3 675 запросов из 5 000: 26,5% заблокированы или пропущены провайдерскими ограничениями на кибербезопасность. На отвеченных запросах у него 59,89%, но с учётом отказов полный балл падает до 44,02%.
Авторы формулируют это аккуратно: «провайдер-специфичные ограничения безопасности влияют на использование в кибербезопасности». На практике четверть запросов легального направления ушла в отказ, и цена осторожности посчитана прямо в процентах покрытия. Даже лучший результат в 61,68% далёк от насыщения, так что вопрос, где проходит граница между защитой от злоупотреблений и работой специалиста, здесь только открывается.
Устойчивость к грязным запросам
Реальные запросы редко бывают аккуратными. Авторы проверили три вариации: перефраз, неформальный стиль и «грязные» запросы с опечатками, обрывками и грамматическим шумом. Перефраз почти безвреден и даже слегка помогает в Unrestricted (+0,61 пункта), неформальный стиль стоит долей пункта, а вот грязные запросы снимают сразу 3,2 пункта Total Score без подсказок. В Hinted-режиме падение смягчается до 1,07 пункта: документация компенсирует часть шума, но не отменяет его.
Почему это важно
Для тех, кто строит security-агентов, главный вывод звучит так: барьер это не «знания», а точность интерфейса. Если у вас есть документация инструментов, не жалейте контекста, это самый дешёвый прирост точности. Дообучение на командных парах работает на удивление скромными средствами: LoRA, одна GPU, пара дней. Локальный деплой в безопасности часто обязателен из-за чувствительных данных, и открытый рецепт здесь на вес золота. Наконец, RLVR без исполнения команд открывает дешёвый цикл улучшения, но требует дисциплины: следите за регрессиями в режимах с подсказками.
Ограничения авторы перечисляют сами: только одиночные команды без многошаговых цепочек, опора на документацию, отсутствие среды. Следующие шаги очевидны: многошаговые сценарии, retrieval-augmented выбор инструментов и оценка с учётом окружения. Кстати, подобные вопросы поднимаются и в соседних работах про агентов для поиска и проверки источников, так что это движение, а не одиночная статья.
Часто задаваемые вопросы
Почему просто не дать модели документацию всех инструментов Kali сразу?
Потому что инструментов больше двух тысяч, и их схемы не влезают в контекст. В эксперименте документацию даже для кандидатов иногда приходилось обрезать до лимита в 8 192 токена. Hinted-режим помогает, но и он не идеален: в среднем 73,1% точных команд, а не 100%.
Насколько опасны такие модели?
Это те же open-weight модели, что и раньше, а бенчмарк всего лишь измеряет домен точнее. Награды для обучения считаются без исполнения команд, что безопаснее и дешевле. А поведение проприетарных моделей показывает, что индустрия пока решает вопрос грубыми фильтрами, теряя покрытие там, где работа легальная.
Можно ли обучить свою модель на KaliBench?
Да, датасет открытый. Рецепт из статьи скромный: LoRA через Unsloth, две эпохи, батч 32, одна H200, RedSage-Ins как база. В Unrestricted и Restricted прирост существенный (до +14 пунктов Total Score), а вот Hinted-режим может слегка просесть. Для локального security-агента это один из самых практичных рецептов сезона.
Итог
KaliBench показывает, что LLM уже говорят на языке кибербезопасности, но ещё не бегло пишут на языке командной строки. Разрыв между «понимаю задачу» и «выполняю точно» измеряется десятками пунктов, и закрывается он двумя способами: подсказками в контексте или дообучением на командных парах. Восьмёрка, обученная на этом бенчмарке, подошла на один пункт к 685-миллиардному гиганту в общем зачёте и обогнала его в самом честном режиме. Если вы строите агентов для безопасности, это самый предметный ориентир сезона.
А вы бы доверили LLM настройку флагов для боевого сканирования? Или пусть сначала возьмёт 100% в Hinted?