Рубрики
Uncategorized

Автоматизируйте зап с докером

На предыдущих постах вы узнали, как использовать ZAP с настольным клиентом и через командную строку Wi … Теги с DevOps, безопасностью, тестированием, учебником.

Zed Attack Proxy (3 части серии)

На предыдущих постах вы узнали, как использовать ZAP с помощью настольного клиента и через командную строку с zap cli. Этот пост вы узнаете, как использовать документы Docker, которые предоставляются OwASP. Это даже облегчит автоматизировать ZAP, особенно в конвейере CI/CD.

1. Вступление

Он настоятельно рекомендуется прочитать два предыдущих поста о zap, прежде чем начать с этого. Вам понадобятся некоторые файлы, которые были созданы на предыдущих постах. Если у вас уже есть опыт работы с zap, вы можете продолжить читать и использовать файлы из Github Репозиторий из каталога zap2Docker Отказ Сгенерированные отчеты также будут доступны в этом репозитории. Таким образом, вы сможете сравнить ваши результаты.

На предыдущих постах вам показали, как использовать Zap Desktop Client. и как использовать Zap cli Для того, чтобы автоматизировать тест на проникновение. Тем не менее, Owasp также предоставляет некоторые Docker Images который можно использовать для автоматизированного сканирования.

Вы снова использовали WebGoat как уязвимое веб-приложение. Если вы следили за предыдущими сообщениями, лучше начать с нуля и удалить созданный вами контейнер Docker.

$ docker rm goatandwolf

Поскольку приложение к тестированию работает в контейнере докена, и ZAP также будет работать в контейнере докера, необходимо создать докеренную сеть. В противном случае не удастся получить доступ к веб-стране из контейнера ZAP Docker.

$ docker network create zapnet

Далее создайте контейнер WebGoat в рамках только созданной сети Zapnet Отказ

$ docker run --name goatandwolf -p 8080:8080 -p 9090:9090 -d --net zapnet webgoat/goatandwolf

Перейдите к WebGoat URL и создать пользователь MyDeveloperPlanet с паролем пароль . Этот пользователь будет использоваться для аутентификации во время сканирования.

2. Zap docker полное сканирование

Изображение ZAP Docker предоставляет несколько возможностей сканирования. Один из них — это Базовое сканирование который сканирует ваше приложение пассивно. Активное сканирование, однако, даст вам лучшие результаты, и это может быть достигнуто с помощью Полное сканирование Отказ

Вам понадобится IP-адрес webgoat внутри Zapnet сеть. Это может быть достигнуто с помощью следующей команды. В приведенном ниже примере 172.22.0.2 IP-адрес, где можно получить доступ к веб-адресу.

$ docker inspect goatandwolf | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.22.0.2",

Во-первых, вы сканируете приложение без какой-либо информации о пользователе. Полный список опций OP можно найти здесь ниже используемые варианты поясняются:

  • --net : Для того, чтобы добавить ZAP в сеть вместе с WebGoat
  • : Это будет отображать ваш текущий каталог на рабочий каталог Docker Image
  • : не возвращайте неудачу на предупреждение
  • -j : запустить паук Ajax в дополнение к классическому
  • -М 10 : количество минут до паука для (просто защита, паук занимает меньше времени, чем 10 минут)
  • -Т 60 : Ограничить полное сканирование до 60 минут
  • -t : URL для сканирования для
  • -R : имя отчета по результатам
$ docker run --net zapnet -v $(pwd):/zap/wrk/:rw \
  -t owasp/zap2docker-stable zap-full-scan.py -I -j -m 10 -T 60 \
  -t http://172.22.0.2:8080/WebGoat \
  -r 20210417-zap-full-scan-without-user.html

Как вы заметили, при запуске сканирования с zap CLI в предыдущем посте эта сканирование даст вам меньше результатов, чем ожидалось. Паук делает некоторую работу, но недостаточно и поскольку вы не предоставили пользовательские учетные данные, большая часть приложения не отсканирована.

Для того, чтобы предоставить пользовательские учетные данные, вы можете предоставить контекст Webgoat.context. Вы создали в прошлый раз. Единственное, что вам нужно сделать, это заменить localhost с IP-адресом во всем файле. Переместите файл контекста в текущий каталог, чтобы он будет доступен в каталоге ZAP Worke внутри контейнера Docker. Вы добавляете следующие два дополнительных варианта в команду:

  • : Файл контекста
  • : Пользователь использовать
$ docker run --net zapnet -v $(pwd):/zap/wrk/:rw \
  -t owasp/zap2docker-stable zap-full-scan.py -I -j -m 10 -T 60 \
  -t http://172.22.0.2:8080/WebGoat \
  -r 20210417-zap-full-scan.html \
  -n Webgoat.context \
  -U mydeveloperplanet

Запуск этой команды приводит к следующей ошибке. Он утверждает, что URL не находится в контексте, но оно есть. Даже если бы это будет работать, сомнительным, найдет ли паук, найдут все URL-адреса приложения. В предыдущих постах вы заметили, что ручное исследование веб-сайта вместе с пауком дала гораздо больше URL для сканирования.

20432 [ZAP-ProxyThread-11] WARN  org.zaproxy.zap.extension.api.API - Bad request to API endpoint [/JSON/ajaxSpider/action/scanAsUser/] from [127.0.0.1]:
org.zaproxy.zap.extension.api.ApiException: url_not_in_context
    at org.zaproxy.zap.extension.spiderAjax.AjaxSpiderAPI.startScan(AjaxSpiderAPI.java:337) ~[?:?]
    at org.zaproxy.zap.extension.spiderAjax.AjaxSpiderAPI.handleApiAction(AjaxSpiderAPI.java:202) ~[?:?]
    at org.zaproxy.zap.extension.api.API.handleApiRequest(API.java:507) [zap-2.10.0.jar:2.10.0]
    at org.parosproxy.paros.core.proxy.ProxyThread.processHttp(ProxyThread.java:497) [zap-2.10.0.jar:2.10.0]
    at org.parosproxy.paros.core.proxy.ProxyThread.run(ProxyThread.java:333) [zap-2.10.0.jar:2.10.0]
    at java.lang.Thread.run(Thread.java:834) [?:?]

3. ICTU ZAP Docker полное сканирование

ICTU Голландская ИТ-организация правительства расширила изображения ZAP Docker с веб-каком для аутентификации. Было бы интересно выяснить, может ли так сканировать приложение, включая аутентификацию. Обратите внимание, что изображение Docker теперь взяты из ICTU. Dockerhub страница. Добавлены два дополнительных параметра по сравнению с полным сканированием без аутентификации пользователя:

  • --hook : Ссылка на сценарий Python, который позаботится о аутентификации
  • -z : Некоторые дополнительные параметры, необходимые для аутентификации
$ docker run --rm -v $(pwd):/zap/wrk/:rw --net zapnet -t ictu/zap2docker-weekly zap-full-scan.py -I -j -m 10 -T 60 \
  -t http://172.22.0.2:8080/WebGoat \
  --hook=/zap/auth_hook.py \
  -r 20210417-ictuzap-full-scan.html \
  -z "auth.loginurl=http://172.22.0.2:8080/WebGoat/login \
      auth.username="mydeveloperplanet" \
      auth.password="password" \
      auth.auto=1"

Это, кажется, делает свою работу. Однако меньше результатов обнаружены по сравнению с Zap CLI Scan. Скорее всего, из-за паука снова.

4. Zap cli с докером

Хорошая новость заключается в том, что Zap CLI также отправляется в ZAP Docker Image. Хорошие результаты были достигнуты с помощью Zap CLI, поэтому давайте посмотрим, применяется ли это, когда вы запустите его из контейнера ZAP Docker. Вы снова запустите контейнер Docker с помощью обороты громкости к вашему текущему каталогу и с вариантом Для того, чтобы начать контейнер в интерактивном режиме. Это позволит вам выполнить команды внутри контейнера Docker.

$ docker run --name zap-cli --net zapnet -v $(pwd):/zap/wrk/:rw -i owasp/zap2docker-stable

В качестве теста вы можете проверить, доступно ли WebGoat из контейнера ZAP Docker с A wget Отказ

$ wget http://172.22.0.2:8080/WebGoat
--2021-04-18 12:02:03--  http://172.22.0.2:8080/WebGoat
Connecting to 172.22.0.2:8080... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://172.22.0.2:8080/WebGoat/ [following]
--2021-04-18 12:02:03--  http://172.22.0.2:8080/WebGoat/
Reusing existing connection to 172.22.0.2:8080.
HTTP request sent, awaiting response... 302 Found
Location: http://172.22.0.2:8080/WebGoat/login [following]
--2021-04-18 12:02:03--  http://172.22.0.2:8080/WebGoat/login
Reusing existing connection to 172.22.0.2:8080.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: 'WebGoat'

     0K .                                                      94.3M=0s

2021-04-18 12:02:03 (94.3 MB/s) - 'WebGoat' saved [1877]

Вы будете следовать тому же шагам, что и в предыдущем посте. Единственное отличие состоит в том, что вы выполните команды в пределах контейнера Docker. Первое, что нужно сделать, это начать зап. Для простоты вы отключите ключ API. Помните, что ключ API был необходим для доступа к ZAP API. Вы можете получить ключ API, если вы хотите через WENTSWING ZAP UI Отказ

$ zap-cli --log-path wrk/ start --start-options '-config api.disablekey=true'
[INFO]            Starting ZAP daemon

Импортировать контекст. Помните, что вы изменили localhost В файле контекста к IP-адресу можно получить доступ к веб-адресу.

$ zap-cli -v context import /zap/wrk/Webgoat.context
[INFO]            Imported context from /zap/wrk/Webgoat.context

В предыдущем посте вы экспортировали URL-адреса вручную в файл webgoat-exported-urls.txt Отказ Скопируйте этот файл в текущий каталог и найдите/замените localhost с IP-адресом webgoat.

Кроме того, скопируйте Open-urls.sh Скрипт к вашему текущему каталогу и измените путь к текстовому файлу.

#!/bin/bash
input="wrk/webgoat-exported-urls.txt"
while IFS= read -r line
do
  zap-cli open-url "$line"
done < "$input"

Выполните скрипт, это займет около 10 минут.

$ ./wrk/open-urls.sh
[INFO]            Accessing URL http://172.22.0.2:8080
[INFO]            Accessing URL http://172.22.0.2:8080/WebGoat
[INFO]            Accessing URL http://172.22.0.2:8080/WebGoat/
[INFO]            Accessing URL http://172.22.0.2:8080/WebGoat/AuthBypass.lesson.lesson
...
[INFO]            Accessing URL http://172.22.0.2:8080/sitemap.xml

Начните классический паук.

$ zap-cli -v spider -c Webgoat -u mydeveloperplanet "http://172.22.0.2:8080/WebGoat"
[INFO]            Running spider...
[DEBUG]           Spidering target http://172.22.0.2:8080/WebGoat...
[DEBUG]           Running spider in context 1 as user 2230
[DEBUG]           Started spider with ID 0...
[DEBUG]           Spider progress %: 0
[DEBUG]           Spider #0 completed

Запустите активное сканирование, это займет около 15 минут.

$ zap-cli -v active-scan --recursive -c Webgoat -u mydeveloperplanet "http://172.22.0.2:8080/WebGoat"
[INFO]            Running an active scan...
[DEBUG]           Scanning target http://172.22.0.2:8080/WebGoat...
[DEBUG]           Scanning in context 1 as user 2230
[DEBUG]           Started scan with ID 0...
...
[DEBUG]           Scan progress %: 98
[DEBUG]           Scan #0 completed

Генерировать отчет.

$ zap-cli -v report -o /zap/wrk/report-zap-full-scan.html -f html
[DEBUG]           Generating HTML report
[INFO]            Report saved to "/zap/wrk/report-zap-full-scan.html"

Как видите, это дает вам аналогичные результаты, как на предыдущем посте.

Сохраните сеанс для следующего использования.

$ zap-cli -v session save /zap/wrk/webgoat-20210418-active-scan.session
[DEBUG]           Saving the session to "/zap/wrk/webgoat-20210418-active-scan.session"

Выключение Зап.

$ zap-cli -v shutdown
[INFO]            Shutting down ZAP daemon
[DEBUG]           Shutting down ZAP.
[DEBUG]           ZAP shutdown successfully.

Наконец, введите Выход Чтобы выйти из интерактивной оболочки и отключите контейнер WebGoat Docker.

$ docker stop goatandwolf

5. Заключение

Здорово, что OWASP предоставляет документы Docker с предварительно установленным ZAP. Это упрощает установку и облегчает интеграцию его в ваш CI/CD-трубопровод. Сканирование по умолчанию, которые предоставляются, не дают достаточно хороших результатов. К счастью, Zap Cli также предоставляется, и это сделала работу. Также обратите внимание, что Zap CLI будет заменен в ближайшее время с Автоматизация Framework Отказ

Zed Attack Proxy (3 части серии)

Оригинал: «https://dev.to/mydeveloperplanet/automate-zap-with-docker-4o53»