Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Все, кто связан со сферой 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, который был необходим до выхода плагина:
Теперь OWASP ZAP умеет поддерживать сессию на основе заголовков посредством плагина Authentication Helper, который можно установить в магазине ZAP Marketplace:
Релиз плагина состоялся в январе 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).
Подробнее об этом плагине можно прочитать тут:
https://www.zaproxy.org/docs/desktop/addons/authentication-helper/session-header/
https://www.zaproxy.org/docs/desktop/addons/authentication-helper/
https://www.zaproxy.org/blog/2023-01-19-authentication-help/
Создатели заметки: Алмаз Вахитов, Мария Ковтун.