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

Установка и запуск 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

  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=<нужно сгенерировать токен - см. ниже>
    zap_scanner_version=2023.2.1
    
    IP_EXTERNAL=0.0.0.0
    JWT_TOKEN=<нужно сгенерировать токен - см. ниже>
    zap_scanner_version=2023.2.1-astra
    

    Пример файла docker-compose.yml.

    version: '3.9'
    
    services:
      zap:
        image: docker.swordfishsecurity.com/appsechub/zap-scanner:${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
    
    networks:
      net-hub:
        driver: bridge
        ipam:
            driver: default
            config:
                - subnet: 172.20.0.0/24
    
  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
    

Запуск 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.

К началу