Перейти к содержанию

Установка и запуск ZAP

Подготовка инфраструктуры

ZAP Scanner устанавливается как отдельный сервис. Возможна установка как вместе с AppSec.Hub, так и на отдельный сервер. Предварительно необходимо установить Docker и Docker-compose.

Пакет Версия
Docker 19.03.0 и выше
Docker-compose 1.27.0 и выше

Установка Docker и Docker-compose

В зависимости от используемой операционной системы предлагается четыре способа установки Docker и Docker-compose.

Установка ZAP Scanner

Docker

Для установки ZAP Scanner с помощью Docker выполните следующие шаги:

  1. Создайте папки.

    sudo mkdir -p /opt/zap/
    sudo mkdir -p /opt/zap/logs
    
  2. Создайте конфигурационные файлы.

    /opt/zap/.env
    /opt/zap/docker-compose.yml
    

    Пример файла .env:

    Важно!

    Заданные в файле параметры необходимо заменить своими значениями, указания по заполнению приведены ниже.

    IP_EXTERNAL=0.0.0.0
    JWT_TOKEN=<нужно сгенерировать ключ подписи jwt-токена для сервиса gateway — см. ниже>
    hub_zap_scanner_version=2024.3.2
    
    Пример файла docker-compose.yml
    services:
        zap:
            image: docker.swordfishsecurity.com/appsechub/hub-zap-scanner:${hub_zap_scanner_version}
            container_name: zap
            networks:
                - net-hub
            ports:
                - ${IP_EXTERNAL}:8080:8080/tcp
            environment:
                - JWT_TOKEN=${JWT_TOKEN}
            volumes:
                - ./logs:/var/tmp/log
            tmpfs:
                - /tmp
                - /LOG_PATH_IS_UNDEFINED:uid=2000,gid=2000
    
            # pids_limit: 400
            security_opt:
                - no-new-privileges
            restart: always
            # read_only: true
            cpu_shares: 1024
            deploy:
                resources:
                    limits:
                        memory: 1500M
                        pids: 400
    
    networks:
        net-hub:
            driver: bridge
            ipam:
                driver: default
                config:
                    - subnet: 172.20.0.0/24
    

    Примечание

    В версиях Docker-compose 2.26.0 и выше для ограничения по процессам вместо параметра pids_limit требуется использовать поле deploy.resources.limits.pids.

    В docker-compose.yml для версий Docker-compose 2.26.0 и выше поле, которое в версиях ниже 2.26.0 описывалось так:

    pids_limit: 400
    

    должно быть определено следующим образом:

    deploy:
        resources:
            limits:
                pids: 400
    

    Выше приведен пример docker-compose.yml для версий Docker-compose выше 2.26.0.

  3. Выполните настройку конфигурационного файла /opt/zap/.env. Укажите следующие параметры:

    • IP_EXTERNAL — IP-адрес, на котором нужно слушать трафик (в общем случае 0.0.0.0);

    • JWT_TOKEN — ключ подписи jwt-токена.

      Примечание

      Для генерации токена можно использовать следующую команду:

      dd if=/dev/urandom bs=1 count=64 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev
      

  4. Назначьте группу и владельца локальных папок.

    sudo chown 2000:2000 -R /opt/zap/logs
    
    export UID_2000=2000
    export GID_2000=2000
    sudo chown ${UID_2000}:${GID_2000} -R /opt/zap/logs
    sudo chown ${UID_2000}:${GID_2000} -R /opt/zap/.env
    sudo chown ${UID_2000}:${GID_2000} -R /opt/zap/docker-compose.yml
    

    Установите разрешение на прослушивание привилегированных портов от непривилегированного пользователя.

    echo "net.ipv4.ip_unprivileged_port_start=0" | sudo tee -a /etc/sysctl.conf 
    sudo sysctl -p /etc/sysctl.conf
    
    sudo chown 2000:2000 -R /opt/zap/logs
    
    export REMAP_UID=$(cat /etc/subuid | grep -i $USER | awk -F : '{print $2}')
    export REMAP_GID=$(cat /etc/subgid | grep -i $USER | awk -F : '{print $2}')
    export UID_2000=$((${REMAP_UID}+1999))
    export GID_2000=$((${REMAP_UID}+1999))
    sudo chown ${UID_2000}:${GID_2000} -R /opt/zap/logs
    sudo chown ${UID_2000}:${GID_2000} -R /opt/zap/.env
    sudo chown ${UID_2000}:${GID_2000} -R /opt/zap/docker-compose.yml
    

    Установите разрешение на прослушивание привилегированных портов от непривилегированного пользователя.

    echo "net.ipv4.ip_unprivileged_port_start=0" | sudo tee -a /etc/sysctl.conf 
    sudo sysctl -p /etc/sysctl.conf
    

Helm Chart

Для установки ZAP Scanner с использованием Helm Chart выполните следующую команду:

helm pull oci://docker.swordfishsecurity.com/appsechub/hub-helm/hub-zap-scanner --version 0.1.2

Запуск ZAP Scanner

cd /opt/zap
docker-compose up -d

Остановка ZAP Scanner

cd /opt/zap
docker-compose down

Генерация токена для подключения в AppSec.Hub

Для генерации токена доступа можно отправить POST запрос на /api/token. В теле запроса необходимо указать значение параметра JWT_TOKEN, см. шаг 3 раздела «Установка Zap scanner» выше.

curl --request POST \
    --url <zap-url>/api/token \
    --header 'Content-Type: text/plain' \
    --data '<jwt-secret>'

В ответ на запрос придет токен, который необходимо будет добавить в AppSec.Hub.

К началу