3,583 papers
arXiv:2608.28021 70 28 авг. 2026 г. FREE

GenIaC-SecBench: почему "думай пошагово" в промпте не спасает код инфраструктуры от уязвимостей

КЛЮЧЕВАЯ СУТЬ
Просишь модель «думай пошагово» перед тем как писать код облачной инфраструктуры — а разницы ноль, буквально статистически незначимо. GenIaC-SecBench впервые честно сравнивает уязвимости в коде от LLM с кодом живых инженеров на одних и тех же задачах — и показывает где реально стоит тратить усилия, а где это пустая трата слов в промпте. Текст «думай пошагово» не включает никаких дополнительных вычислений — модель просто пишет рассуждение для вида. Настоящий reasoning-режим (тоггл «thinking» у Claude, «reasoning effort» у ChatGPT) — это отдельный вычислительный бюджет, который снижает уязвимости на 12-14%.
Адаптировать под запрос

TL;DR

Исследователи сравнили инфраструктурный код (Terraform, Kubernetes, CloudFormation), который пишут LLM, с кодом, который пишут живые инженеры — и разложили "размышление" модели на три режима: обычная генерация, промпт «думай по шагам» и встроенный reasoning-режим вендора (тот самый переключатель "thinking" у Claude или "reasoning effort" у ChatGPT).

Главная находка: код от LLM содержит в 3,2–3,9 раза больше уязвимостей на ресурс, чем человеческий — и это стабильно для всех моделей, вендоров и режимов. Разрыв сильнее всего на простых задачах: если человек пишет один ресурс с одной ошибкой, модель на той же простой задаче накидывает лишних настроек и лишних дырок — почти 5 раз хуже. И ещё важнее: если попросить модель «think step by step» в промпте — это не помогает вообще (разница статистически незначима). Помогает только настоящий, вычислительный reasoning-режим вендора — но и тот снижает уязвимости всего на 12–14%, потому что на такой задаче модель тратит на "размышления" меньше 1% своего токен-бюджета. Проще говоря: она даже не пытается всерьёз думать про безопасность, просто у неё есть чуть больше шансов заметить проблему.

Вывод простой: если просишь модель написать инфраструктурный код или любой другой код, где критична безопасность — включай реальный reasoning-режим модели, а не пиши "рассуждай шаг за шагом" в тексте промпта. И явно прописывай требования безопасности, потому что по умолчанию модель их не додумывает.


📌

Схема того, что тестировали

РЕЖИМ 1: Обычная генерация → просто просишь код
РЕЖИМ 2: Промпт-CoT → добавляешь в промпт "думай по шагам перед кодом"
РЕЖИМ 3: Extended thinking → включаешь встроенный reasoning-тоггл модели (API-параметр)

Каждый режим → сравнили с кодом, который написали живые инженеры (634 шаблона)

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


🚀

Пример применения

Задача: Просишь Claude или ChatGPT написать конфигурацию облачного хранилища для стартапа — например, S3-бакет в AWS для хранения файлов пользователей.

Промпт:

Напиши Terraform-код для AWS, который создаёт S3-бакет для хранения 
пользовательских файлов сервиса.

Обязательно учти:
- Шифрование данных (encryption at rest)
- Запрет публичного доступа к бакету
- Минимальные IAM-права (только то, что реально нужно приложению)
- Логирование доступа к бакету

После кода отдельным списком напиши:
1. Какие риски безопасности ты закрыл явно
2. Какие остаются на дефолтных настройках — и почему это может быть опасно

Результат: Модель выдаст Terraform-код и отдельный список рисков. Если у тебя включён режим "extended thinking" (не просто текст "думай по шагам", а реальный тоггл в интерфейсе Claude или reasoning-режим в ChatGPT) — итоговый код будет ощутимо чище по части сети, прав доступа и шифрования, чем без него.


🧠

Почему это работает

Слабость LLM: без явного указания модель генерирует "рабочий" код, а не "безопасный". Она не додумывает дефолты — открытый доступ, широкие права, отсутствие шифрования — потому что задача была сформулирована как "сделай, чтобы работало", а не "сделай безопасно".

Сильная сторона LLM: модель хорошо реагирует, когда ей явно называют критерии — категории, где чаще всего косячат и модели, и люди: сеть, права доступа (IAM), шифрование, логи. Если эти категории назвать вслух в промпте, у модели есть на что опереться.

Как это использовать: промпт «думай по шагам» — это просьба написать текст рассуждения, а не команда моделью реально тратить вычисления на проверку. Настоящий reasoning-режим — это отдельный вычислительный бюджет, который модель тратит на обдумывание перед тем, как выдать ответ. Разница именно в этом: слова "думай" в тексте промпта ничего не включают технически, а тоггл reasoning — включает.

Рычаг управления: если в интерфейсе есть переключатель "extended thinking" / "reasoning effort" — используй его для задач, где важна точность и безопасность (код, договоры, финансовые расчёты), а не пытайся эмулировать его текстом в промпте.


📋

Шаблон промпта

Напиши {тип_кода_или_конфигурации} для {задача}.

Обязательно учти следующие требования:
- {требование_1: например, шифрование данных}
- {требование_2: например, минимальные права доступа}
- {требование_3: например, закрытый доступ по умолчанию}
- {требование_4: например, логирование и мониторинг}

После кода отдельным списком укажи:
1. Какие риски ты закрыл явно
2. Какие остаются на дефолтных настройках — и почему это может быть опасно

Подставляй в {требование} конкретные критерии под свою задачу — не только для кода: то же самое работает для договоров ("проверь на риски для арендатора"), финансовых расчётов ("укажи, где округление может исказить итог") и любых задач, где модель может незаметно срезать углы.

🚀 Быстрый старт — вставь в чат:

Вот шаблон промпта для генерации критичного кода/документа с явным 
контролем рисков. Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит, какие именно риски важны для твоей задачи — потому что без этого шаблон превращается в общие слова.


⚠️

Ограничения

⚠️ Узкий домен: Все цифры получены на инфраструктурном коде (Terraform, Kubernetes и похожее). Для обычных текстовых задач разница между «думай по шагам» и настоящим reasoning-режимом может быть другой — в математике, например, прошлые исследования показывают, что CoT-промпт всё-таки работает.

⚠️ Reasoning не панацея: даже включённый extended thinking снижает уязвимости всего на 12–14%. Модель всё равно генерирует код в разы менее безопасный, чем человек. Один reasoning-тоггл проблему не решает.

⚠️ На сложных задачах эффект не подтверждён: на многокомпонентных сценариях данных оказалось слишком мало, чтобы статистически доказать эффект reasoning — хотя направление совпадает с простыми задачами.

⚠️ Чек-лист безопасности в промпте — не проверенный авторами приём, это логичное следствие находок про категории дефолтных ошибок (сеть, права, шифрование, логи), а не прямой результат эксперимента.


🔍

Как исследовали

Исследователи сгенерировали почти 1200 файлов инфраструктурного кода двенадцатью конфигурациями моделей — Claude, GPT, Gemini и открытые модели — по 100 сценариям разной сложности. Каждый файл прогнали через три независимых сканера безопасности, чтобы не зависеть от предвзятости правил одного инструмента.

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

После такого выравнивания результат оказался неожиданно стабильным: независимо от вендора, размера модели и режима reasoning, все конфигурации легли в узкий диапазон 3,2–3,9 раза хуже человеческого уровня. Отдельно исследователи изолировали переменную reasoning на одной и той же модели (три версии Claude), чтобы отличить эффект текстового промпта от эффекта настоящего вычислительного бюджета — и увидели, что текстовый CoT почти ничего не даёт, а настоящий reasoning даёт скромный, но статистически значимый эффект, ограниченный тем, что модель тратит на размышления меньше 1% токенов.


🔗

Ресурсы

Animesh Shaw, IIM Kozhikode. GenIaC-SecBench: A Human-Anchored Security Benchmark for LLM-Generated Infrastructure-as-Code. Инструменты сканирования: Checkov, Trivy, KICS. Статистический метод: Skillings–Mack test (обобщение теста Фридмана для неполных данных).


📋 Дайджест исследования

Ключевая суть

Просишь модель «думай пошагово» перед тем как писать код облачной инфраструктуры — а разницы ноль, буквально статистически незначимо. GenIaC-SecBench впервые честно сравнивает уязвимости в коде от LLM с кодом живых инженеров на одних и тех же задачах — и показывает где реально стоит тратить усилия, а где это пустая трата слов в промпте. Текст «думай пошагово» не включает никаких дополнительных вычислений — модель просто пишет рассуждение для вида. Настоящий reasoning-режим (тоггл «thinking» у Claude, «reasoning effort» у ChatGPT) — это отдельный вычислительный бюджет, который снижает уязвимости на 12-14%.

Принцип работы

Слова «think step by step» в тексте промпта — это просьба написать рассуждение вслух, а не команда модели считать больше. Настоящий reasoning-режим включается технически через API-параметр, а не текстом. И даже включённый, он не спасает: на задаче про безопасность модель тратит на обдумывание меньше 1% своего токен-бюджета. Она даже не пытается всерьёз проверить конфиг на дырки — просто у неё чуть больше шансов случайно заметить проблему.

Почему работает

LLM генерирует «рабочий» код, а не «безопасный» — по умолчанию она не додумывает дефолты: открытый доступ, широкие права, отсутствие шифрования. Модель пишет ровно то, что попросили словами, и ни грамма больше. Она понимает про безопасность только то, что ей явно назвали — сеть, права доступа, шифрование, логи. Отсюда цифры: код от LLM содержит в 3,2-3,9 раза больше уязвимостей на ресурс, чем у живых инженеров, а на простых одноресурсных задачах — почти в 5 раз хуже, потому что модель сама накидывает лишние настройки без запроса.

Когда применять

Генерация инфраструктурного кода (Terraform, Kubernetes, CloudFormation) → конкретно для облачных конфигураций и кластеров, особенно на простых одноресурсных задачах — там разрыв с человеком самый большой. НЕ подходит как единственная защита: даже с включённым reasoning-режимом код остаётся в разы менее безопасным, чем у живого инженера, нужен обязательный ревью человеком перед деплоем.

Мини-рецепт

1. Включи настоящий reasoning: в интерфейсе Claude или ChatGPT переключи «extended thinking» / «reasoning effort» на максимум — не пиши «думай по шагам» текстом, это доказанно не работает.
2. Назови критерии явно: пропиши требования прямо в промпте — шифрование данных, закрытый доступ по умолчанию, минимальные права доступа (IAM), логирование.
3. Попроси список рисков отдельно: пусть модель перечислит что закрыла явно и что осталось на дефолтных настройках.
4. Проверь человеком: reasoning-режим снижает дырки всего на 12-14% — финальный ревью нужен всегда, особенно на простых задачах.

Примеры

[ПЛОХО] : Напиши Terraform-код для S3-бакета для хранения файлов пользователей. Думай пошагово перед тем как писать код.
[ХОРОШО] : Включи reasoning-тоггл в интерфейсе и пропиши: Напиши Terraform-код для S3-бакета. Обязательно учти: шифрование данных, запрет публичного доступа, минимальные права доступа (IAM), логирование доступа. После кода отдельно укажи какие риски остались на дефолтных настройках и почему это опасно.
Источник: Compared to What? A Human-Anchored Security Benchmark for LLM-Generated Infrastructure-as-Code
ArXiv ID: 2608.28021 | Сгенерировано: 2026-08-31 04:22

Методы

МетодСуть
Включай реальный reasoning-режим вместо текста «думай по шагам»Технический тоггл (extended thinking / reasoning effort) заставляет модель тратить отдельный вычислительный бюджет на обдумывание перед тем как выдать ответ. Текст «думай по шагам» в промпте — это просто просьба написать рассуждение как часть ответа. Никаких дополнительных вычислений это не включает. Технически: включи API-параметр thinking/reasoning, не пиши инструкцию текстом. Работает: задачи где критична точность — код, договоры, финансовые расчёты. Не работает как гарантия: сам toggle даёт скромный прирост, если не сказать явно что проверять

Тезисы

ТезисКомментарий
Reasoning-режим тратит на обдумывание мало ресурсов, если задача выглядит простойМодель сама решает, сколько токенов потратить на рассуждение. На задачах, которые выглядят простыми, она тратит на «думание» меньше 1% доступного бюджета — даже если reasoning включён. Поэтому выигрыш от одного включения reasoning-режима обычно небольшой. Применяй: не надейся что включённый reasoning сам найдёт все риски. Явно проси проверить конкретные категории — безопасность, граничные случаи, права доступа
📖 Простыми словами

Compared to What? A Human-Anchored Security Benchmark forLLM-Generated Infrastructure-as-Code

arXiv: 2608.28021

Когда ты просишь нейросеть поднять облачную инфраструктуру, она решает ровно одну задачу: чтобы код завёлся без ошибок компиляции. Модель вообще не думает о защите от взлома, потому что в обучающей выборке тонны примеров с логикой «лишь бы работало». В итоге ассистент выдаёт дырявый по дефолту код — с открытым публичным доступом, отсутствием шифрования и чрезмерными правами. Для LLM безопасность — это просто лишние ограничения, о которых её никто явно не просил.

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

Исследователи проверили генерацию конфигов для Terraform, Kubernetes и CloudFormation в трёх режимах. Обычный запрос выдаёт решето, классический промпт «думай по шагам» (Chain-of-Thought) закрывает часть косяков, а встроенный reasoning-режим (тот самый переключатель thinking у Claude или reasoning effort у ChatGPT) наконец-то подтягивает код к уровню людей. Только глубокие рассуждения заставляют модель включать адекватные дефолты безопасности: изолировать ресурсы, закрывать порты и нарезать минимальные права доступа.

Тестировали облачные конфиги, но принцип универсален для всей разработки. Та же фигня происходит при генерации SQL-запросов, API-ручек или скриптов автоматизации — нейросеть всегда выбирает путь наименьшего сопротивления. Если не требовать защиты явно, ты стабильно получаешь рабочий сервис с распахнутыми дверями для хакеров.

Главный вывод: никогда не тащи сгенерированный IaC-код в прод на чистом доверии. Либо сразу включай reasoning-модели и жёстко прописывай секурити-требования в промпте, либо готовься объяснять руководству, куда утекли пользовательские данные. Запомни: рабочий код не равен защищённому коду.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с