Вы запускаете CI/CD-пайплайн, а через неделю узнаёте, что продакшен скомпрометирован через уязвимость в старой версии lodash. Или находите CVE, о которой не знали. Мы настраиваем автоматические сканеры уязвимостей, которые находят такие проблемы до того, как ими воспользуются злоумышленники. Наш многолетний опыт — мы внедряли сканирование для проектов с аудиторией от 10 000 до 5 млн пользователей. Предотвращение одного инцидента может сэкономить от 500 000 рублей на простое и восстановлении. Получите консультацию по подбору инструментов для вашего стека.
Почему автоматическое сканирование уязвимостей необходимо?
Каждый день появляются десятки новых CVE. По данным OWASP, 70% атак используют известные уязвимости. Без автоматизации вы узнаёте об уязвимости постфактум — после взлома. Регулярное сканирование встраивается в процесс разработки: npm audit проверяет зависимости при каждом npm install, а Nuclei сканирует продакшен каждую ночь. Такой подход сокращает время реакции до нескольких часов и снижает риск инцидентов на 80%.
Какие уязвимости находит автоматическое сканирование?
- Мисконфигурация CSP и CORS — неправильные заголовки безопасности открывают доступ к данным. DAST-сканеры (OWASP ZAP, Nikto) проверяют корректность настроек.
-
Устаревшие библиотеки — SCA-сканеры (Trivy, Snyk) находят пакеты с известными уязвимостями. Пример:
[email protected]содержит CVE-2021-23337, которую Trivy детектит за секунды. - Инъекции в коде — SAST-сканеры (Semgrep, SonarQube) выявляют SQL-инъекции, XSS и path traversal до деплоя. Semgrep с правилами OWASP Top 10 покрывает 90% типовых ошибок.
Как настроить сканирование уязвимостей в CI/CD?
Рассмотрим один кейс — OWASP ZAP в GitHub Actions. Настройка занимает день и даёт baseline-сканирование с проверкой на OWASP Top 10.
# .github/workflows/security-scan.yml name: Security Scan on: schedule: - cron: '0 3 * * 1' push: branches: [main] jobs: zap-scan: runs-on: ubuntu-latest steps: - name: ZAP Baseline Scan uses: zaproxy/[email protected] with: target: 'https://staging.example.com' rules_file_name: '.zap/rules.tsv' cmd_options: '-a -j' - name: Upload Report uses: actions/upload-artifact@v3 with: name: zap-report path: report_html.html ZAP генерирует HTML-отчёт с детальным описанием уязвимостей и рекомендациями. Мы настраиваем исключения для ложных срабатываний (файл .zap/rules.tsv) и связываем артефакт с пайплайном. Доля ложных срабатываний после калибровки не превышает 5%.
Шаги по настройке сканера уязвимостей
- Аудит текущего стека и выбор инструментов (DAST/SAST/SCA).
- Развёртывание сканера в тестовой среде.
- Настройка правил сканирования и исключений.
- Интеграция с CI/CD (GitHub Actions, GitLab CI или Jenkins).
- Настройка уведомлений о находках High/Critical в Slack/Telegram.
- Документирование конфигураций и обучение команды.
- Мониторинг и корректировка в течение первого месяца.
Nuclei — шаблонное сканирование
Nuclei подходит для быстрой проверки на конкретные CVE. Он выполняет 7000+ шаблонов и находит уязвимости за минуты.
# Установка go install github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest # Обновление шаблонов nuclei -update-templates # Сканирование по категориям nuclei -u https://target.example.com \ -t cves/ \ -t misconfigurations/ \ -t exposures/ \ -severity critical,high \ -o nuclei_report.json \ -json Semgrep SAST в CI/CD
Semgrep анализирует код за секунды и поддерживает 30+ языков. Мы подключаем правила OWASP Top Ten и фреймворков.
# .github/workflows/sast.yml - name: Semgrep SAST uses: semgrep/semgrep-action@v1 with: config: >- p/owasp-top-ten p/php p/laravel p/javascript env: SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }} Dependency Scanning
# PHP composer audit # Node.js npm audit --audit-level=high npx audit-ci --high # Python pip-audit --output=json -o pip-audit.json # Docker-образы trivy image myapp:latest \ --severity HIGH,CRITICAL \ --format json \ -o trivy-report.json Управление результатами (False Positive)
Для OWASP ZAP создаём файл исключений .zap/rules.tsv с правилами игнорирования.
10016 IGNORE # Web Browser XSS Protection Not Enabled (устаревший) 10021 IGNORE # X-Content-Type-Options Missing (уже настроен) 90033 IGNORE # Loosely Scoped Cookie — false positive для /api | Задача | Рекомендуемый инструмент | Альтернативы |
|---|---|---|
| DAST (динамическое сканирование) | OWASP ZAP | Nikto, Burp Suite |
| SAST (статический анализ) | Semgrep | SonarQube, CodeQL |
| SCA (проверка зависимостей) | Trivy | Snyk, Dependabot |
| Шаблонное сканирование CVE | Nuclei | Nmap NSE |
| Мониторинг безопасности | Watchtower (Docker) | Sysdig, Falco |
Сравнение инструментов
| Инструмент | Тип | Скорость | Языки/платформы | Интеграция с CI/CD |
|---|---|---|---|---|
| OWASP ZAP | DAST | Средняя | Любое веб-приложение | GitHub Actions, Jenkins |
| Nuclei | DAST/шаблоны | Высокая | Любой HTTP | CLI, GitHub Actions |
| Semgrep | SAST | Высокая | 30+ языков | GitHub Actions, GitLab CI |
| SonarQube | SAST | Средняя | 27+ языков | GitLab CI, Jenkins |
| Trivy | SCA/контейнеры | Высокая | Docker, OS, языки | CLI, GitHub Actions |
DAST-сканеры выявляют на 30% больше уязвимостей runtime по сравнению с SAST. Однако SAST находит проблемы на ранних этапах, что снижает стоимость исправления. Комбинированный подход даёт полную картину.
Срок реализации
- OWASP ZAP baseline в GitHub Actions: 1 день
- Nuclei + уведомления: 1 день
- Semgrep SAST + Dependency scanning: 1–2 дня
- SonarQube full setup: 2–3 дня
Что входит в работу
- Настройка 2–3 сканеров под ваш стек
- Интеграция с CI/CD (GitHub Actions, GitLab CI)
- Настройка уведомлений в Slack/Telegram о находках High/Critical
- Документация по конфигурациям и процессам
- Обучение команды (1–2 часа)
- Месяц поддержки после запуска
Свяжитесь с нами, чтобы мы оценили ваш проект и предложили оптимальный набор инструментов. Получите консультацию — расскажем, какие сканеры лучше всего подходят под ваш стек. Инвестиция в безопасность избавит от многомиллионных потерь от взломов.







