Что такое OWASP ZAP?
OWASP (как обсуждается в Penetration Testing Basics for QA Testers) Zed Attack Proxy (ZAP) — самый популярный бесплатный инструмент тестирования безопасности в мире, активно поддерживаемый сообществом OWASP. Для QA-инженеров ZAP предоставляет автоматизированное сканирование безопасности для обнаружения уязвимостей вроде SQL (как обсуждается в Security Testing for QA: A Practical Guide) injection, XSS и небезопасных конфигураций до того, как они попадут в продакшен.
Почему ZAP для QA?
- Бесплатный и Open Source - Без лицензионных затрат, полный доступ к функциям
- Легко Автоматизировать - CLI, Docker, API для интеграции CI/CD
- Комплексное Сканирование - Активное/пассивное сканирование, spidering, fuzzing
- Тестирование API - Поддержка OpenAPI/Swagger, тестирование GraphQL
- Обширная Отчетность - HTML, JSON, XML отчеты с рекомендациями по исправлению
- Активное Сообщество - Регулярные обновления, плагины, marketplace
Режимы Сканирования ZAP
1. Пассивное Сканирование
Анализирует HTTP трафик без отправки дополнительных запросов. Безопасно запускать в продакшене.
# Запустить ZAP в daemon режиме
docker run -u zap -p 8080:8080 owasp/zap2docker-stable zap.sh -daemon \
-host 0.0.0.0 -port 8080 -config api.disablekey=true
# Получить доступ к target через ZAP proxy
curl -x http://localhost:8080 https://example.com
# Сгенерировать отчет пассивного сканирования
curl "http://localhost:8080/JSON/core/action/jsonreport/"
Пассивное Сканирование Обнаруживает:
- Отсутствующие security headers (CSP, X-Frame-Options, HSTS)
- Небезопасные cookies (отсутствуют флаги HttpOnly, Secure)
- Раскрытие информации (stack traces, комментарии в коде)
- Устаревшие библиотеки и фреймворки
2. Активное Сканирование
Отправляет атакующие payloads для поиска уязвимостей. Использовать только на авторизованных целях.
# Spider target для обнаружения URL
docker run owasp/zap2docker-stable zap-baseline.py \
-t https://example.com \
-r report.html
# Полное активное сканирование
docker run owasp/zap2docker-stable (как обсуждается в [SQL Injection and XSS: Finding Vulnerabilities](/blog/sql-injection-xss)) zap-full-scan.py \
-t https://example.com \
-r full-report.html \
-z "-config api.disablekey=true"
Активное Сканирование Обнаруживает:
- SQL Injection
- Cross-Site Scripting (XSS)
- Path Traversal
- Remote Code Execution
- XML External Entity (XXE)
- Server-Side Request Forgery (SSRF)
3. Сканирование API
Тестирование REST API используя спецификации OpenAPI/Swagger.
# Импортировать OpenAPI spec и сканировать
docker run -v $(pwd):/zap/wrk:rw owasp/zap2docker-stable \
zap-api-scan.py \
-t https://api.example.com \
-f openapi \
-d /zap/wrk/openapi.json \
-r /zap/wrk/api-report.html
Интеграция CI/CD
GitHub Actions
# .github/workflows/security-scan.yml
name: OWASP ZAP Security Scan
on:
pull_request:
branches: [main]
jobs:
zap_scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build application
run: docker-compose up -d
- name: ZAP Baseline Scan
uses: zaproxy/action-baseline@v0.7.0
with:
target: 'http://localhost:3000'
rules_file_name: '.zap/rules.tsv'
- name: Upload ZAP Report
uses: actions/upload-artifact@v3
with:
name: zap-report
path: report_html.html
Кастомные Политики Сканирования
Конфигурация rules.tsv
# Игнорировать ложные срабатывания
10021 IGNORE (CSP: Wildcard Directive)
10038 IGNORE (Content Security Policy Header Not Set)
# Fail на конкретных уязвимостях
40012 FAIL (Cross Site Scripting - Reflected)
90018 FAIL (SQL Injection)
# Предупреждение на средней серьезности
10054 WARN (Cookie Without SameSite Attribute)
Интерпретация Результатов
Уровни Риска
Риск | Описание | Требуемое Действие |
---|---|---|
Высокий | Критические уязвимости (SQL Injection, RCE) | Исправить немедленно |
Средний | Значительные проблемы (XSS, слабая крипто) | Исправить перед релизом |
Низкий | Минорные проблемы (отсутствующие headers) | Исправить когда возможно |
Частые Уязвимости и Исправления
SQL Injection:
# Уязвимо
query = f"SELECT * FROM users WHERE id = {user_input}"
# Исправлено - Использовать параметризованные запросы
cursor.execute("SELECT * FROM users WHERE id = ?", (user_input,))
XSS:
// Уязвимо
document.getElementById('output').innerHTML = userInput;
// Исправлено - Экранировать вывод
document.getElementById('output').textContent = userInput;
Отсутствующие Security Headers:
# Добавить в nginx.conf
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self'";
Заключение
OWASP ZAP необходим для интеграции тестирования безопасности в QA workflows. От автоматизированных CI/CD сканов до комплексного тестирования API, ZAP помогает идентифицировать уязвимости рано, когда их дешевле всего исправить.
Ключевые Выводы:
- Начинайте с baseline сканов в CI/CD
- Используйте пассивное сканирование для мониторинга продакшена
- Реализуйте кастомные политики для вашей толерантности к риску
- Автоматизируйте аутентификацию для сканирования с авторизацией
- Отслеживайте уязвимости во времени
- Исправляйте высокие/критические проблемы немедленно