DAST: динамическое тестирование безопасности приложений
Что такое DAST
DAST расшифровывается как Dynamic Application Security Testing — динамическое тестирование безопасности приложений. Это метод проверки защищённости приложения путём взаимодействия с ним во время его работы, подобно тому, как это делает реальный пользователь или злоумышленник.
В отличие от статического анализа, который изучает исходный код, DAST работает с запущенным приложением через его внешние интерфейсы: веб-формы, API, сетевые порты. Тестировщик не видит внутренности кода, а взаимодействует с приложением снаружи, отправляя запросы и анализируя ответы.
Зачем нужен DAST
Большинство атак нацелены на работающие приложения: веб-сайты, мобильные бэкенды, API-сервисы. Злоумышленник не читает ваш исходный код. Он отправляет запросы и смотрит, как приложение реагирует. DAST моделирует именно этот подход.
DAST находит уязвимости, которые проявляются только во время выполнения: инъекции, ошибки аутентификации и авторизации, небезопасные конфигурации сервера, утечки информации в ответах. Некоторые из этих проблем невозможно обнаружить статическим анализом.
Регулярное динамическое тестирование позволяет выявлять проблемы до того, как их обнаружат злоумышленники. Это особенно важно для приложений, обрабатывающих финансовые данные, персональную информацию или являющихся частью критической инфраструктуры.
Как работает DAST
Сканер DAST выполняет краулинг приложения: обходит все доступные страницы, формы, параметры, эндпоинты API. Составляет карту приложения: какие входы существуют, какие параметры принимаются, какие методы запросов поддерживаются.
Далее сканер уязвимости начинает отправлять вредоносные нагрузки в каждый найденный вход. Для поля ввода в форме он подставляет конструкции вроде одинарных кавычек, SQL-запросов, скриптовых тегов. Для API-эндпоинтов — изменяет параметры, подставляет неожиданные значения, проверяет методы, которые не должны быть доступны.
Сканер анализирует ответы приложения. Если в ответ на SQL-инъекцию приложение вернуло сообщение об ошибке базы данных — это уязвимость. Если в ответ на XSS-нагрузку скрипт отразился без экранирования — это уязвимость.
Результат — отчёт с перечнем найденных уязвимостей, их расположением, критичностью и рекомендациями по исправлению.
Типы находимых уязвимостей
DAST обнаруживает широкий спектр проблем: SQL-инъекции, межсайтовый скриптинг, подделку межсайтовых запросов, небезопасную десериализацию, ошибки аутентификации, открытые директории, чувствительные данные в ответах, уязвимости в заголовках безопасности, проблемы в API.
Современные DAST-сканеры умеют работать с одностраничными приложениями на JavaScript, с REST и GraphQL API, с аутентификацией по токенам. Это критически важно, так как современные приложения давно ушли от простых серверных страниц.
Практика применения
Тестируйте в среде, максимально приближенной к продуктивной, но не в самой продуктивной среде. Активное тестирование создаёт нагрузку и может повредить данные. Идеально — отдельный стенд с копией продуктивных данных.
Настройте аутентификацию для сканера. Многие уязвимости находятся за логином: в личных кабинетах, административных панелях. Если сканер не может войти, он не проверит эти разделы.
Проводите сканирование регулярно: при каждом крупном обновлении приложения и по расписанию, например, раз в месяц. Новые уязвимости появляются постоянно, и код меняется.
Ограничения и дополнения
DAST не видит логику приложения. Он не поймёт, что бизнес-процесс позволяет обойти проверку, потому что формально все запросы валидны. Для проверки бизнес-логики нужно ручное тестирование.
DAST не находит уязвимости в коде, который не выполняется в ходе сканирования. Если ветка кода не достигнута запросами сканера, она не проверена.
Поэтому DAST дополняет, а не заменяет другие методы. В идеале используется связка: статический анализ кода, динамическое тестирование, анализ зависимостей и ручное тестирование на проникновение.


