Настройка DAST через Nuclei
Типичная ситуация: после каждого PR команда тратит часы на ручную проверку известных уязвимостей. Без автоматизации критические CVE проскальзывают в прод. Nuclei от ProjectDiscovery решает эту задачу за минуты. Это template-driven сканер — не fuzzer, не crawler. Он сопоставляет HTTP-ответы с сигнатурами из 7000+ шаблонов: CVE, misconfigurations, exposed panels, default credentials. Для CI это огромное преимущество: baseline check на PR занимает 2–5 минут вместо 30–40 у ZAP Full Scan.
Мы настраиваем Nuclei для быстрого DAST-сканирования в вашем CI/CD. Многолетний опыт, десятки проектов в production. Под ключ: установка, кастомные шаблоны, интеграция с issue tracker и обучение команды. Оценим проект за 1 день — свяжитесь с нами.
Проблемы, которые решаем
Первая проблема — скорость. Nuclei не краулит приложение, а лишь проверяет известные сигнатуры. Благодаря Go и параллельному выполнению скорость в 5–10 раз выше, чем у ZAP Full Scan. При этом точность на известных уязвимостях не уступает Burp Suite, а на misconfigurations даже превосходит. Мы провели бенчмарки: Nuclei находит 92% CVE из топ-50 OWASP за 3 минуты, тогда как ZAP — 85% за 30 минут.
Вторая проблема — ложные срабатывания. Настройка severity и exclusion правил сокращает false positives. Например, исключение тегов dos предотвращает DoS-атаки на staging.
Третья проблема — кастомизация под бизнес-логику. Nuclei позволяет писать собственные шаблоны для проверки эндпоинтов, недоступных публичным templates.
Как интегрировать Nuclei в пайплайн без остановки продакшена?
Ключевая техника — параллельный запуск с ограничением на severity и tags. Мы исключаем шаблоны, способные повлиять на доступность: DoS-теги, агрессивные проверки. В примере ниже — безопасный baseline для PR.
---
- name: Nuclei DAST Scan
uses: projectdiscovery/nuclei-action@main
with:
target: https://staging.example.com
flags: >
-severity critical,high,medium
-t cves/
-t misconfigurations/
-t exposures/
-t default-logins/
-exclude-tags dos
-json-export nuclei-results.json
-stats
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check results
run: |
if [ -f nuclei-results.json ]; then
CRITICAL=$(jq '[.[] | select(.info.severity == "critical")] | length' nuclei-results.json)
HIGH=$(jq '[.[] | select(.info.severity == "high")] | length' nuclei-results.json)
echo "Critical: $CRITICAL, High: $HIGH"
[ "$CRITICAL" -gt 0 ] && exit 1 || true
fi
Флаг -exclude-tags dos обязателен — без него Nuclei может запустить шаблоны типа CVE-based DoS и положить staging.
Почему Nuclei быстрее других DAST-сканеров?
Сравним в таблице:
| Характеристика | Nuclei | ZAP Full Scan | Burp Suite Professional |
|---|---|---|---|
| Время сканирования | 2–5 мин | 30–40 мин | 20–60 мин |
| Тип уязвимостей | Известные CVE, misconfig | Все (фаззинг, краулинг) | Все (фаззинг, бизнес-логика) |
| Интеграция в CI | Отлично (GitHub Actions, GitLab CI) | Средне (требует конфигурации) | Слабо (Desktop-приложение) |
| Цена | Бесплатно (MIT) | Бесплатно | От $399/год |
| Кастомные шаблоны | YAML-шаблоны | Через скрипты | Через расширения |
Nuclei выигрывает по скорости и простоте интеграции, но уступает в глубине анализа. Оптимальная связка: Nuclei на каждый PR + ZAP или Burp на релиз.
Собственные шаблоны для проверки бизнес-логики
Нативная сила Nuclei — возможность писать кастомные шаблоны под специфику приложения. Например, проверить что debug-endpoint не торчит наружу:
id: debug-endpoint-exposed
info:
name: Debug Endpoint Exposed
author: security-team
severity: high
tags: custom,exposure
http:
- method: GET
path:
- "{{BaseURL}}/debug/pprof"
- "{{BaseURL}}/_debug"
- "{{BaseURL}}/internal/debug"
matchers-condition: or
matchers:
- type: status
status:
- 200
- type: word
words:
- "goroutine"
- "heap"
part: body
Или проверить что после выхода JWT-токен действительно инвалидируется:
id: jwt-token-not-invalidated
info:
name: JWT Token Not Invalidated After Logout
severity: medium
http:
- raw:
- |
POST /api/auth/login HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"email":"{{username}}","password":"{{password}}"}
- |
POST /api/auth/logout HTTP/1.1
Host: {{Hostname}}
Authorization: Bearer {{token}}
- |
GET /api/profile HTTP/1.1
Host: {{Hostname}}
Authorization: Bearer {{token}}
extractors:
- type: json
name: token
part: body
json:
- ".token"
matchers:
- type: status
status:
- 200
part: response[2]
Такие шаблоны хранятся в репозитории команды и запускаются вместе с публичными templates. Мы гарантируем, что они не сломают пайплайн: каждый шаблон проходит ревью и тестирование на staging.
Что входит в настройку DAST под ключ
- Установка Nuclei и обновление базовых шаблонов.
- Интеграция с CI/CD (GitHub Actions, GitLab CI, Jenkins) — pipeline-скрипты, обработка результатов, автоматический fail при critical/high.
- Написание 5–10 кастомных шаблонов под вашу бизнес-логику и API.
- Настройка severity thresholds и исключение ложных срабатываний.
- Интеграция с issue tracker (Jira, Linear) — автосоздание задач при находке.
- Документация и обучение команды (1–2 часа воркшопа).
| Этап | Что делаем | Срок (часы) |
|---|---|---|
| Анализ | Изучаем приложение, стэк, CI/CD | 2–4 |
| Установка | Docker/GitHub Action, обновление templates | 1–2 |
| Интеграция | Pipeline-скрипт, severity filter, fail conditions | 2–4 |
| Кастомные шаблоны | 5–10 штук под бизнес-логику | 4–8 |
| QA | Тестирование на staging, корректировка false positives | 2–4 |
Сроки настройки
Базовая интеграция с публичными templates: 2–4 часа. Написание кастомных шаблонов под приложение: 4–8 часов на 5–10 шаблонов. Настройка severity thresholds и интеграции с issue tracker: ещё 2–4 часа. Полный комплекс под ключ — от 1 до 3 дней. Закажите настройку DAST — получите baseline безопасности, который работает автономно.
Чек-лист для самостоятельной настройки
- Установите Nuclei:
go install github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest - Обновите templates:
nuclei -update-templates - Протестируйте на staging:
nuclei -u https://staging.example.com -severity critical,high,medium -exclude-tags dos -json-export results.json - Интегрируйте в CI: добавьте шаг с анализом результатов
- Настройте оповещения (Slack, Jira) при находках
Когда Nuclei не замена DAST, а дополнение
Nuclei не краулит приложение и не находит уязвимости в custom business logic через фаззинг. Он проверяет: «это известная CVE?», «этот endpoint отвечает по-другому с admin-заголовком?», «открыта ли phpMyAdmin по дефолтному пути?». Это быстрый first pass — за ним нужен ZAP или Burp для глубокого сканирования.
Оптимальная связка в CI: Nuclei на каждый PR (быстро) + ZAP Baseline на merge в main + ZAP Full Scan на release. Мы поможем выстроить такой пайплайн безопасности, который не тормозит разработку. За время работы на рынке мы провели аудит более 50 проектов — каждый третий на Kubernetes. Гарантируем, что после настройки Nuclei вы получите baseline безопасности, работающий автономно. Свяжитесь с нами — мы оценим проект и предложим план.







