Все, кто связан со сферой Application Security / DevSecOps, так или иначе слышали или даже применяют продукт OWASP ZAP. Данное приложение представляет из себя open source-инструмент для динамического сканирования веб-приложений (DAST). Но мало просто запустить сканирование приложения инструментом, надо суметь его правильно настроить.

Одним из важных этапов настройки DAST-сканирования является авторизация в приложении, а также поддержка сессии в течение всего сканирования. Чтобы настроить авторизованные сканирования на ZAP, необходимо учесть три вещи:

1. То, как сделать запрос аутентификации. ZAP поддерживает следующие варианты: на основе отправки формы, JSON-данных, HTTP/NTLM-аутентификацию, аутентификацию на основе скрипта, вручную.

2. То, как происходит обработка сеанса в приложении. Другими словами, как ZAP будет поддерживать отправку авторизованных запросов к приложению в течение сканирования. На данный момент есть поддержка сессии на основе cookie, заголовка, с использованием скрипта и поддержка сессий на основе HTTP-аутентификации. О поддержке сессии на основе заголовка мы и поговорим в данной статье.

3. То, как определяется, аутентифицированы ли запросы от ZAP (настройка стратегии проверки). ZAP умеет отправлять запрос на определенный URL для сравнения полученного ответа с его авторизованной версией, либо производить подобную проверку на каждый запрос.

Ранее для управления сессией сканирования через заголовки приходилось использовать скрипты в самом ZAP, например ZEST, JavaScript или Python.

Пример добавления скрипта для авторизации через JWT, который был необходим до выхода плагина:

Gif взят из репозитория https://github.com/rezen.
Gif взят из репозитория https://github.com/rezen.

Теперь OWASP ZAP умеет поддерживать сессию на основе заголовков посредством плагина Authentication Helper, который можно установить в магазине ZAP Marketplace:

Установка плагина Authentication Helper.
Установка плагина Authentication Helper.

Релиз плагина состоялся в январе 2023 года, и продолжается его активное развитие — на момент написания статьи актуальна версия 0.3.0. Отметим, что этот Add-on также позволяет автоматически определять тип аутентификации в приложении и сразу самостоятельно менять этот тип в Context-настройке. Посмотрим на практике, как осуществляется авторизация через JWT-токен в ZAP, используя для примера наше приложение Stingray.

При успешной авторизации в приложении нам возвращается access-токен, который также необходимо использовать при проведении ZAP-сканирований:

Тело ответа при успешной авторизации.
Тело ответа при успешной авторизации.

При настройке Context в пункте Session Management теперь доступно поле Header-based Session Management. Заполняется оно следующим образом:

Настройки по управлению сессией.
Настройки по управлению сессией.

Объяснение. Так как для поддержки авторизованных запросов используется заголовок Authorization, укажем его в первом поле. Значение заголовка Authorization при запросах: Bearer <token>, соответственно поле Value заполняется этим же значением, а в фигурных скобках обозначается, какое значение из тела JSON нужно подставлять. Таким образом, мы получаем возможность быстро настроить авторизованные запросы к приложению через ZAP-сканирование:

Автоматические запросы для проверки авторизованного состояния сессии.
Автоматические запросы для проверки авторизованного состояния сессии.

После запуска Spider (выполняет кроулинг — обход сайта) мы видим во вкладке History, что запросы проверки авторизации возвращают 200 код, что свидетельствует об успешной авторизации запросов ZAP.

Подобная настройка сессии значительно упрощает взаимодействие с инструментом, когда нам требуется аутентификация на основе заголовка, избавляя от необходимости использовать дополнительные скрипты.

Подводя итог, хотелось бы зафиксировать возможности, которые предоставляет данный Add-on на сегодняшний день:

  • поддержка идентификации и конфигурации запроса авторизации (версия 0.1.0, вышла 17.01.2023);

  • поддержка управления сессией на основе заголовков (версия 0.2.0 вышла 08.02.2023);

  • поддержка аутентификации на основе браузера (версия 0.3.0 вышла 13.03.2023).

 

Подробнее об этом плагине можно прочитать тут:

Header Based Session Management

Authentication Helper

Authentication Help

 Создатели заметки: Алмаз Вахитов, Мария Ковтун.

Комментарии (0)