Nuclei: шаблонный скан своей инфраструктуры на уязвимости

У Nikto и OWASP ZAP — свой фиксированный набор проверок. Nuclei устроен иначе: это движок, который прогоняет сайт или сервис через тысячи готовых шаблонов, написанных сообществом под конкретные CVE, утечки конфигурации и типовые ошибки. Шаблоны обновляются непрерывно, поэтому прогон, сделанный сегодня, может найти то, чего не было полгода назад, — и наоборот. Проверка выполняется только на собственной инфраструктуре или по письменному разрешению владельца.
Статья опирается на логику направления «Тесты на проникновение» из методики зрелости Группы Сбер (источник); это методика для крупных компаний, мы используем её как ориентир и пересказываем своими словами. Проверка выполнена Nuclei 3.4.9 с актуальными на момент теста шаблонами против тестового nginx в контейнере, после неё всё удалено.
Что должно получиться
| Уровень | Что это значит на практике |
|---|---|
| 2. Гигиенический | Инфраструктура регулярно проверяется по актуальной базе шаблонов уязвимостей, обновляемой сообществом быстрее, чем любой внутренний список |
Критерии сформулированы нами по мотивам методики, это ориентир, а не оценка соответствия.
Запуск
nuclei -u https://ваш-сервис.ru -severity medium,high,critical
Первый запуск сам скачивает актуальные шаблоны сообщества (на момент проверки — свыше 11 000). Ключ -severity ограничивает прогон по уровню серьёзности находок — для регулярного прогона в конвейере разумно ограничиться high,critical, чтобы не тонуть в информационных находках при каждой сборке.
Результат проверки
На тестовом nginx с версией 1.22.1 и файлом .env в корне (положен специально для проверки) полный прогон по всем уровням серьёзности дал 15 совпадений за минуту:
| Шаблон | Находка |
|---|---|
nginx-eol |
Версия 1.22.1 указана как снятая с поддержки |
nginx-version, tech-detect, waf-detect |
Определение технологии и версии по заголовкам ответа |
http-missing-security-headers (9 срабатываний) |
Отсутствующие заголовки: CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и другие — тот же набор, что показали Nikto и ZAP |
default-nginx-page |
Отдаётся страница по умолчанию — сигнал, что сервис ещё не настроен или забыт |
Шаблон на обнаружение .env специально конкретно для этого файла в наборе не сработал в этом прогоне — общий вывод тот же, что и для Nikto: шаблонные сканеры покрывают известные паттерны, а не гарантируют проверку каждого конкретного случая. Инвентаризация собственных файлов на сервере остаётся обязательной, а не опциональной мерой.
Ловушка с публичным сервером для OOB-проверок
Часть шаблонов (поиск слепых SSRF, блайнд-инъекций) работает через внешний механизм подтверждения — целевой сервер должен обратиться на контролируемый адрес, и Nuclei это фиксирует через сервис Interactsh. По умолчанию используется публичный сервер проекта. В тесте это дало поток ошибок разбора ответов от публичного сервера (повреждённые данные протокола) — сами результаты сканирования это не испортило, но для чувствительной инфраструктуры, где нежелательно, чтобы сканирование порождало любой трафик за пределы вашего периметра, отключите эту часть явно:
nuclei -u https://ваш-сервис.ru -ni # -ni: без Interactsh, часть шаблонов на слепые уязвимости не сработает
С флагом -ni и фильтром по критичным/высоким уровням на тестовом сервере (который не содержал настоящих уязвимостей такого уровня) прогон отработал без единой находки и без единой ошибки — чистый результат для демонстрации порога CI.
Порядок внедрения
- Обновляйте шаблоны перед каждым важным прогоном (
nuclei -update-templates) — новые CVE добавляются постоянно, устаревший набор шаблонов пропустит свежие находки. - Для регулярного прогона в конвейере используйте фильтр по серьёзности (
high,critical) — так результат попадает в CI без лавины информационных находок. - Для чувствительной инфраструктуры отключайте Interactsh (
-ni) или разворачивайте собственный сервер Interactsh, если нужны и такие проверки. - Сверяйте находки с другими инструментами — совпадение между Nuclei, Nikto и ZAP по отсутствующим заголовкам повышает уверенность, что это не ложное срабатывание одного движка.
- Не считайте отсутствие находок доказательством безопасности: как и любой шаблонный сканер, Nuclei проверяет известные паттерны, а не находит новые классы уязвимостей.
Диагностика
| Симптом | Причина и что делать |
|---|---|
Поток ошибок Could not unmarshal interaction data |
Публичный сервер Interactsh вернул повреждённые данные. Отключите его явно (-ni) для чистого вывода, если OOB-проверки не нужны |
| Шаблонов стало заметно больше или меньше между прогонами | Сообщество постоянно добавляет и иногда убирает шаблоны. Это нормально, фиксируйте версию набора шаблонов для сравнимости между прогонами, если важна стабильность отчёта |
| Находок слишком много для разбора | Прогон без фильтра по серьёзности. Начните с critical,high и расширяйте по мере разбора |
| Известная проблема (например, конкретный забытый файл) не найдена | Нет подходящего шаблона в наборе. Дополните процесс собственной инвентаризацией, не полагайтесь только на готовые шаблоны |
Ограничения
Nuclei находит то, под что есть шаблон, — он не заменяет анализ логики вашего конкретного приложения и не гарантирует обнаружение уязвимостей нулевого дня. Часть шаблонов рассчитана на активное взаимодействие с целью (не только пассивное чтение ответов), поэтому для чувствительных продуктивных систем стоит сначала прогонять на стейджинге.
Где это в модели зрелости
Материал относится к направлению «Тесты на проникновение» (материалы направления, карта зрелости). Уровень 2 требует регулярной технической проверки собственной инфраструктуры: постоянно обновляемая база шаблонов Nuclei закрывает часть этой задачи между плановыми внешними тестами.
Как проверить
- Шаблоны обновляются перед каждым значимым прогоном, а не остаются зафиксированными на момент первой установки.
- В регулярном прогоне задан фильтр по серьёзности, результат доходит до ответственного без лавины неразобранных находок.
- Для чувствительной инфраструктуры осознанно решено, нужен ли публичный Interactsh или его следует отключить.
- Проверка применяется только к собственным системам или по письменному разрешению владельца.
Источники
- Методика оценки уровня зрелости кибербезопасности компании, Группа Сбер: sberbank.ru.
- Документация Nuclei: docs.projectdiscovery.io; исходный код: github.com/projectdiscovery/nuclei.


















