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

Обнаружение и картографирование приложения

Процесс:

  1. Starting Points — начальные точки (URL, sitemap)
  2. Link Discovery — обнаружение ссылок
  3. Form Discovery — обнаружение форм
  4. Parameter Discovery — обнаружение параметров
  5. 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, ручным тестированием и другими методами для максимальной эффективности.