DAST
Что такое dast: определение, основные принципы, примеры и практические советы. Изучайте фундаментальной защите информации с подробными объяснениями для начинающих специалистов.
DAST - Динамический анализ кода
Что такое DAST?
Dynamic Application Security Testing (DAST) — это метод тестирования безопасности, который анализирует работающие приложения на предмет уязвимостей путем отправки запросов и анализа ответов.
Ключевые особенности
- Анализ работающего приложения — тестирование в реальном времени
- Black-box подход — без доступа к исходному коду
- Реальные условия — тестирование в продакшн-подобной среде
- Обнаружение runtime уязвимостей — проблемы, видимые только при выполнении
Принципы работы DAST
Black-box тестирование
Тестирование без знания внутренней структуры
Методы:
- Fuzzing — отправка случайных данных
- Parameter Manipulation — манипуляция параметрами
- Session Management — тестирование управления сессиями
- Authentication Bypass — попытки обхода аутентификации
HTTP/HTTPS анализ
Анализ веб-протоколов
Компоненты:
- Request Analysis — анализ запросов
- Response Analysis — анализ ответов
- Header Inspection — проверка заголовков
- Cookie Analysis — анализ cookies
Crawling и Discovery
Обнаружение и картографирование приложения
Процесс:
- Starting Points — начальные точки (URL, sitemap)
- Link Discovery — обнаружение ссылок
- Form Discovery — обнаружение форм
- Parameter Discovery — обнаружение параметров
- Authentication Discovery — обнаружение аутентификации
Типы обнаруживаемых уязвимостей
OWASP Top 10
Наиболее критичные уязвимости веб-приложений
A01:2021 – Broken Access Control
Нарушение контроля доступа
# Тестирование вертикального повышения привилегий
GET /admin/users HTTP/1.1
Host: example.com
Cookie: sessionid=user123
# Ожидаемый результат: 403 Forbidden
# Проблема: 200 OK (доступ разрешен)
A02:2021 – Cryptographic Failures
Ошибки криптографии
# Тестирование слабого шифрования
GET /login HTTP/1.1
Host: example.com
# Анализ ответа:
# Set-Cookie: sessionid=abc123; Secure; HttpOnly
# Проблема: отсутствие флага Secure
A03:2021 – Injection
Инъекции
# SQL Injection тест
POST /search HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
query=1' OR '1'='1
# Анализ ответа на предмет ошибок SQL
A07:2021 – Identification and Authentication Failures
Ошибки идентификации и аутентификации
# Тестирование слабых паролей
POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
username=admin&password=admin
# Проблема: принят слабый пароль
Дополнительные уязвимости
Cross-Site Scripting (XSS)
Межсайтовое выполнение сценариев
# Reflected XSS тест
GET /search?q=<script>alert('XSS')</script> HTTP/1.1
Host: example.com
# Анализ ответа на предмет выполнения скрипта
Cross-Site Request Forgery (CSRF)
Межсайтовая подделка запросов
<!-- CSRF тест -->
<form action="http://example.com/transfer" method="POST">
<input type="hidden" name="amount" value="1000" />
<input type="hidden" name="to" value="attacker" />
<input type="submit" value="Click me" />
</form>
Server-Side Request Forgery (SSRF)
Подделка запросов на стороне сервера
# SSRF тест
POST /api/fetch HTTP/1.1
Host: example.com
Content-Type: application/json
{
"url": "http://localhost:22"
}
# Анализ на предмет доступа к внутренним сервисам
Популярные DAST инструменты
OWASP ZAP
Открытый инструмент для тестирования веб-приложений
Возможности:
- Automated Scanning — автоматическое сканирование
- Manual Testing — ручное тестирование
- API Testing — тестирование API
- CI/CD Integration — интеграция с CI/CD
Использование:
# Запуск ZAP в headless режиме
zap-baseline.py -t http://example.com
# Запуск с аутентификацией
zap-full-scan.py -t http://example.com -a -j zap-report.json
Burp Suite
Коммерческая платформа для тестирования веб-приложений
Версии:
- Community Edition — бесплатная версия
- Professional — профессиональная версия
- Enterprise — корпоративная версия
Возможности:
- Spider — паук для обхода приложения
- Scanner — сканер уязвимостей
- Intruder — инструмент для атак
- Repeater — повторение запросов
Nessus
Коммерческий сканер уязвимостей
Особенности:
- Comprehensive Scanning — комплексное сканирование
- Compliance Checking — проверка соответствия
- Vulnerability Management — управление уязвимостями
- Reporting — детальная отчетность
Acunetix
Специализированный сканер веб-приложений
Возможности:
- Fast Scanning — быстрое сканирование
- JavaScript Analysis — анализ JavaScript
- API Testing — тестирование API
- Compliance — соответствие стандартам
Интеграция в CI/CD
GitHub Actions
Интеграция с GitHub Actions
name: DAST Scan
on: [push, pull_request]
jobs:
dast:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run OWASP ZAP
uses: zaproxy/[email protected]
with:
target: "http://example.com"
rules_file_name: ".zap/rules.tsv"
cmd_options: "-a"
GitLab CI
Интеграция с GitLab CI
stages:
- dast
dast:
stage: dast
image: owasp/zap2docker-stable
script:
- zap-baseline.py -t http://example.com -J zap-report.json
artifacts:
reports:
junit: zap-report.json
only:
- main
Jenkins
Интеграция с Jenkins
pipeline {
agent any
stages {
stage('DAST Scan') {
steps {
sh 'zap-baseline.py -t http://example.com'
}
}
}
post {
always {
publishHTML([
allowMissing: false,
alwaysLinkToLastBuild: true,
keepAll: true,
reportDir: '.',
reportFiles: 'zap-report.html',
reportName: 'DAST Report'
])
}
}
}
Настройка и конфигурация
Аутентификация
Настройка аутентификации для тестирования
Методы аутентификации:
- Form-based — аутентификация через формы
- HTTP Basic — базовая HTTP аутентификация
- API Key — аутентификация по ключу API
- OAuth — OAuth аутентификация
Пример конфигурации ZAP:
// zap_script.js
const ZAPv2 = require("zapv2");
const zap = new ZAPv2({
proxies: { http: "http://127.0.0.1:8080" },
});
// Настройка аутентификации
zap.authentication.setAuthenticationMethod(
"1",
"formBasedAuthentication",
"loginUrl=http://example.com/login&loginRequestData=username={%username%}&password={%password%}"
);
Исключения и фильтры
Настройка исключений для ложных срабатываний
Методы исключения:
- URL Patterns — исключение по URL
- Parameter Patterns — исключение по параметрам
- Response Patterns — исключение по ответам
- Custom Rules — пользовательские правила
Пример конфигурации:
<!-- zap-config.xml -->
<zap>
<exclusions>
<url>http://example.com/health</url>
<url>http://example.com/metrics</url>
</exclusions>
<filters>
<parameter>debug</parameter>
<parameter>test</parameter>
</filters>
</zap>
Автоматизация тестирования
Scheduled Scanning
Планируемое сканирование
Настройка:
# Crontab для ежедневного сканирования
0 2 * * * /usr/bin/zap-baseline.py -t http://example.com -J /var/reports/zap-$(date +\%Y\%m\%d).json
API Integration
Интеграция через API
Пример использования ZAP API:
// Запуск сканирования
const scanResponse = await fetch(
"http://localhost:8080/JSON/ascan/action/scan/?url=http://example.com"
);
// Проверка статуса
const statusResponse = await fetch(
"http://localhost:8080/JSON/ascan/view/status/"
);
const status = await statusResponse.json();
// Получение результатов
const resultsResponse = await fetch(
"http://localhost:8080/JSON/core/view/alerts/"
);
const results = await resultsResponse.json();
Custom Scripts
Пользовательские скрипты
Пример скрипта для ZAP:
// custom_script.js
function scan(helper, msg) {
// Проверка на конкретную уязвимость
if (msg.getResponseHeader().getHeader("X-Frame-Options") == null) {
helper
.newAlert()
.setRisk(2) // Medium risk
.setConfidence(2) // Medium confidence
.setName("Missing X-Frame-Options header")
.setDescription("The X-Frame-Options header is missing")
.setSolution("Add X-Frame-Options header")
.raise();
}
}
Лучшие практики
Рекомендации
- Тестируйте в изолированной среде — не тестируйте продакшн
- Настройте аутентификацию — тестируйте защищенные области
- Используйте актуальные правила — регулярно обновляйте базы
- Комбинируйте с SAST — используйте оба подхода
- Автоматизируйте — интегрируйте в CI/CD pipeline
Чего избегать
- Тестирования продакшна — это может нарушить работу
- Игнорирования ложных срабатываний — настройте фильтры
- Отсутствия контекста — учитывайте бизнес-логику
- Игнорирования производительности — не перегружайте систему
Метрики и отчетность
Ключевые метрики
- Vulnerability Count — количество уязвимостей
- Risk Distribution — распределение рисков
- Scan Coverage — покрытие сканированием
- False Positive Rate — уровень ложных срабатываний
Отчеты
- Executive Summary — исполнительное резюме
- Technical Details — технические детали
- Remediation Guide — руководство по исправлению
- Trend Analysis — анализ тенденций
Ограничения DAST
Ложные срабатывания
Проблема ложных срабатываний
Причины:
- Бизнес-логика — сложная бизнес-логика
- Контекст — отсутствие понимания контекста
- Внешние зависимости — зависимости от внешних систем
- Устаревшие правила — устаревшие правила сканирования
Решения:
- Настройка фильтров — настройка исключений
- Ручная проверка — ручная проверка результатов
- Обучение — обучение команды
- Регулярный пересмотр — регулярный пересмотр правил
Пропущенные уязвимости
Проблема пропуска реальных уязвимостей
Причины:
- Сложные уязвимости — сложные для обнаружения уязвимости
- Аутентификация — ограниченный доступ к приложению
- JavaScript — сложная клиентская логика
- API — специфичные API уязвимости
Решения:
- Комбинированный подход — использование DAST + SAST
- Ручное тестирование — дополнительное ручное тестирование
- Специализированные инструменты — инструменты для конкретных технологий
- Penetration Testing — тестирование на проникновение
Заключение
DAST — это важный инструмент для обнаружения уязвимостей в работающих приложениях. Успешное использование DAST требует:
- Правильной настройки — адаптации под приложение
- Интеграции в процессы — встраивания в CI/CD
- Управления результатами — обработки ложных срабатываний
- Комбинированного подхода — использования с другими методами
Помните: DAST — это часть комплексного подхода к безопасности. Используйте его в сочетании с SAST, ручным тестированием и другими методами для максимальной эффективности.