![]() |
Приветствую снова всех. Извиняюсь за долгое отсутствие, некоторые данную часть ждали больше всего. К сожалению не смог выпустить все оперативно в силу различных причин (в т.ч. и лени )
Итак, для тех, кто не знаком, советую ознакомиться с предыдущими вводными частями: Автоматизация OWASP ZAP. Часть 1. Вводная часть Автоматизация OWASP ZAP. Часть 2. Запуск в Docker, доступ к API Итак в данной части постараюсь кратко пробежать по основным понятиям, структуре кода автоматизации, ну и по нескольким своим скриптам, на примере которых вы уже можете создавать что-то свое. Определения Сессия - это сессия в рамках которой происходит работа ZAP. Сессии можно создавать, загружать, сохранять. Сессия стартует по факту вместе с ZAP. Ей можно дать имя, и она будет сохраняться. Если открыть новую сессию с таким же именем как и предыдущая, то сессия пересоздастся. Контекст - по факту выборка того, на что надо обратить внимание. Т.е. набор URL, того, что надо исключить, набор технологий (базы данных, языки программирования и т.д.). Тут же настройка аутентификации, авторизации, отслеживания сессий(для сканирования под Login пользователем) (это вообще отдельная статья может быть по премудростям аутентификации, если будет интересно, смогу в будущем описать или ответить в личке). Паук и ajax-паук - ну тут стандартно, первый смотрит в ответах урлы и ходит по ним, с обозначенной глубиной. Второй предназначен для JavaScript, т.е. он запускает браузер и через браузер пытается выдернуть динамически формируемые урлы. (Для пауков как раз и важна авторизация и управление сессиями про которые я описал в контексте). Активное сканирование - это как раз и есть нужный нам модуль. Тут ZAP береn накопленное все добро из прокси и пауков (из статей выше я писал, что я натравливаю end-to-end регрессионные тесты) и делает сканирование (т.е. вставляет пейлоады в различные параметры, в зависимости от настроек активного сканирования). Код автоматизации и его структура Итак с определениями закончили, если что, будем разбираться прямо по ходу описания скриптов. Вот тут мой репозиторий, которым вы можете также пользоваться. Там же описаны какие версии питона неоходимы и какие имеются зависимости. Так же там есть докер файл, и описание, как все тесты запускать из докера. Давайте рассмотрим структуру репки: Код: Код:
├── DockerfileДалее перейдем к папке scripts где все и находится. Код: Код:
.slack- здесь описан класс для интеграции со слэк. Делает базовые вещи (шлет сообщения, отчеты, и может удалять отчеты и файлы) через модуль requests. defectdojo - тут просто один файл который я взял вот отсюда (репозиторий defectDojo). В файле __init__ создал наследованный класс и определил для него нужные мне методы. configs - тут хранятся различные переменные/настройки которые используются в скриптах. scan_core тут основные функции обращений к API ZAP и описаны. Кратко пройдемся по папкам: Код: Код:
├── api_conf.pyshared_core.py какие то общие функции. Папка setup- тут находятся различные функции предназначенные для настройки ZAP. job - тут функции которые выполняют различную работу (запускают пауков, активное сканирование, и строит отчеты и отправляет их. Тут же в reports описана интеграция с redmine). Описание скрипта Как упоминалось ранее, в папке scripts находятся 2 файла: Код: Код:
.Обратите внимание, тут должны быть установлены доп. модули: Replacer и OpenAPI (В докере последнее имеется). Краткие действия в файле: 1. Выключаются все ранее созданные реплэйсеры (они автоматически вставляют данные в запросы отправляемые ZAP, в моем случае это хедер с токеном авторизации или иные данные которые помешают получить токен авторизации). Создаем контекст и задаем ему настройки. 2. Python: Код:
tokenДелаю Запрос и получаю токен. Удаляю реплэйсер (если был), и создаю новый с полученным токеном. В моем случае это Header вида Token: dsadasdasdsadsadsa4321dsa 3. Python: Код:
zap4.Ниже настраиваем параметры активного сканирования (количество потоков, исключаемые из сканирования параметры и urls). 5. Старт сканирования. С обработкой ошибок и отправлением уведомлений в SLACK 6. Последними двумя строками, в случае если сканирование завершилось, создаем html отчет и отправляем его в слак. regression_scan.py Настройки сканирования в данном файле можно задавать флагами. Описание флагов можно получить через опцию --help. По умолчанию скрипт делает активное сканирование (без паука) и и отсылает результаты в Slack и DefectDojo (менеджер уязвимостей). Давайте быстренько пробежимся по скрипту: Python: Код:
ifPython: Код:
context_idСоздаем контекст с определенным листом технологий, и исключающими УРЛс. Удаляем дефолтный контекст (чтобы не интересующие нас сайты случайно не залетели в отчет). Т.к. у меня тонкая настройка политики, то я ранее создал её в интерфейсе ZAP и положил в папку, которой делаю volume в Docker с ZAP. Тут я её подгружаю. Так же имеются методы, которые позволяют создать политику с собственным именем и выставить для всех пейлоадов определенные одинаковые параметры. (Все значения параметров определяются в конфигах в папке configs). Далее не буду копировать код, но если указано, что надо запустить паука, то запускается паук и после его отработки аналогично скрипту и его описанию выше, настраиваются параметры активного сканирования. Python: Код:
# Start AscanВ следующем модуле генерируются и отправляются отчеты: Python: Код:
slackPython: Код:
add_redmine_issue_notesPython: Код:
xml_reportСоздаем объект класса DefectDojo и далее загружаем xml отчет в заранее созданный product и engagement. Заключительное слово Благодарю всех, кто осилил. По хорошему все это добро надо разбивать на несколько частей. + У ЗАП много еще потайных мест и вещей которые не сразу понятны. К сожалению, я не имею возможности/времени ими поделиться, если будет много вопросов возможно и составлю по ним описания. Зависит от активности и интереса комьюнити. Так же возможно не все работает, т.к. мною не все функции были протестированы, особенно темное пятно в Пауке(т.к. у меня нет в нем необходимости на настоящий момент). А также не до конца понятен алгоритм Аякс паука. Точнее какой url ему скармливать, в моих приложениях он не очень активно что-то находит. Так же у ЗАП есть механизмы внутреннего скриптования. Про них можно много рассказывать тоже, и некоторые вещи без скриптов в самом ZAP в современных приложениях к сожалению не реализуемы. Данной области я касался лишь слегка, но большинство вещей все-таки можно выполнить стандартными возможностями OWASP ZAP. |
| Время: 01:51 |