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

0
4
Обложка статьи: 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.

Порядок внедрения

  1. Обновляйте шаблоны перед каждым важным прогоном (nuclei -update-templates) — новые CVE добавляются постоянно, устаревший набор шаблонов пропустит свежие находки.
  2. Для регулярного прогона в конвейере используйте фильтр по серьёзности (high,critical) — так результат попадает в CI без лавины информационных находок.
  3. Для чувствительной инфраструктуры отключайте Interactsh (-ni) или разворачивайте собственный сервер Interactsh, если нужны и такие проверки.
  4. Сверяйте находки с другими инструментами — совпадение между Nuclei, Nikto и ZAP по отсутствующим заголовкам повышает уверенность, что это не ложное срабатывание одного движка.
  5. Не считайте отсутствие находок доказательством безопасности: как и любой шаблонный сканер, Nuclei проверяет известные паттерны, а не находит новые классы уязвимостей.

Диагностика

Симптом Причина и что делать
Поток ошибок Could not unmarshal interaction data Публичный сервер Interactsh вернул повреждённые данные. Отключите его явно (-ni) для чистого вывода, если OOB-проверки не нужны
Шаблонов стало заметно больше или меньше между прогонами Сообщество постоянно добавляет и иногда убирает шаблоны. Это нормально, фиксируйте версию набора шаблонов для сравнимости между прогонами, если важна стабильность отчёта
Находок слишком много для разбора Прогон без фильтра по серьёзности. Начните с critical,high и расширяйте по мере разбора
Известная проблема (например, конкретный забытый файл) не найдена Нет подходящего шаблона в наборе. Дополните процесс собственной инвентаризацией, не полагайтесь только на готовые шаблоны

Ограничения

Nuclei находит то, под что есть шаблон, — он не заменяет анализ логики вашего конкретного приложения и не гарантирует обнаружение уязвимостей нулевого дня. Часть шаблонов рассчитана на активное взаимодействие с целью (не только пассивное чтение ответов), поэтому для чувствительных продуктивных систем стоит сначала прогонять на стейджинге.

Где это в модели зрелости

Материал относится к направлению «Тесты на проникновение» (материалы направления, карта зрелости). Уровень 2 требует регулярной технической проверки собственной инфраструктуры: постоянно обновляемая база шаблонов Nuclei закрывает часть этой задачи между плановыми внешними тестами.

Как проверить

  1. Шаблоны обновляются перед каждым значимым прогоном, а не остаются зафиксированными на момент первой установки.
  2. В регулярном прогоне задан фильтр по серьёзности, результат доходит до ответственного без лавины неразобранных находок.
  3. Для чувствительной инфраструктуры осознанно решено, нужен ли публичный Interactsh или его следует отключить.
  4. Проверка применяется только к собственным системам или по письменному разрешению владельца.

Источники

Комментарии закрыты.