We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Автоматизированное сканирование уязвимостей веб‑приложений с OWASP ZAP в Termux и CI/CD пайплайном

Подробное руководство по настройке OWASP ZAP в Termux, автоматизации сканирования веб‑приложений и интеграции процесса в CI/CD пайплайн для постоянного контроля безопасности.

В современном мире DevSecOps становится неотъемлемой частью разработки. Автоматическое сканирование веб‑приложений в рамках CI/CD позволяет выявлять уязвимости на ранних этапах и предотвращать их попадание в продакшн. В этой статье мы рассмотрим, как развернуть OWASP ZAP в среде Termux на Android‑устройстве и интегрировать его в CI/CD пайплайн.

Что понадобится

  • Устройство с Android 8.0+ и установленный Termux (из F-Droid или Google Play).
  • Подключение к интернету для загрузки пакетов.
  • Репозиторий проекта в GitHub, GitLab или Bitbucket.
  • Базовые навыки работы с Linux‑командной строкой и CI/CD системами.

Установка Termux и базовых зависимостей

pkg update && pkg upgrade -y
pkg install -y git curl wget openjdk-17 unzip python

Для работы OWASP ZAP требуется Java 17 (или выше). Убедитесь, что переменная JAVA_HOME указывает на корректный путь:

export JAVA_HOME=$PREFIX/lib/openjdk-17
export PATH=$JAVA_HOME/bin:$PATH

Скачивание и установка OWASP ZAP

Последнюю стабильную версию ZAP можно получить напрямую с официального репозитория:

wget -O zap.zip https://github.com/zaproxy/zaproxy/releases/download/v2.14.0/ZAP_2.14.0_Linux.tar.gz
mkdir -p $HOME/zap && tar -xzf zap.zip -C $HOME/zap --strip-components=1
chmod +x $HOME/zap/zap.sh

Проверяем запуск в режиме демона (headless):

$HOME/zap/zap.sh -daemon -port 8090 -config api.disablekey=true

Опция -config api.disablekey=true отключает обязательность API‑ключа, что удобно для локального CI, но в продакшн‑среде рекомендуется использовать ключ.

Создание скрипта автоматического сканирования

Скрипт на Python будет управлять ZAP через его REST‑API. Сохраняем файл zap_scan.py в корень проекта.

#!/usr/bin/env python3
import sys, time, json, requests

ZAP_API = 'http://127.0.0.1:8090'
TARGET = sys.argv[1] if len(sys.argv) > 1 else 'http://example.com'

def start_spider(url):
    resp = requests.get(f"{ZAP_API}/JSON/spider/action/scan", params={'url': url, 'maxChildren': '0'})
    scan_id = resp.json()['scan']
    while True:
        status = requests.get(f"{ZAP_API}/JSON/spider/view/status", params={'scanId': scan_id}).json()['status']
        if status == '100':
            break
        time.sleep(2)
    print('Spider finished')

def start_active_scan(url):
    resp = requests.get(f"{ZAP_API}/JSON/ascan/action/scan", params={'url': url})
    scan_id = resp.json()['scan']
    while True:
        status = requests.get(f"{ZAP_API}/JSON/ascan/view/status", params={'scanId': scan_id}).json()['status']
        if status == '100':
            break
        time.sleep(5)
    print('Active scan finished')

def generate_report():
    resp = requests.get(f"{ZAP_API}/OTHER/core/other/jsonreport")
    return resp.text

if name == 'main':
    start_spider(TARGET)
    start_active_scan(TARGET)
    report = generate_report()
    with open('zap_report.json', 'w') as f:
        f.write(report)
    print('Report saved to zap_report.json')

Сделайте скрипт исполняемым:

chmod +x zap_scan.py

Интеграция с CI/CD

Ниже представлены примеры конфигураций для самых популярных CI‑систем.

GitHub Actions

name: OWASP ZAP Scan
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
jobs:
  zap_scan:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: Install ZAP
        run: |
          wget -O zap.tar.gz https://github.com/zaproxy/zaproxy/releases/download/v2.14.0/ZAP_2.14.0_Linux.tar.gz
          tar -xzf zap.tar.gz -C $HOME
          chmod +x $HOME/ZAP_2.14.0/zap.sh

      - name: Start ZAP daemon
        run: $HOME/ZAP_2.14.0/zap.sh -daemon -port 8090 -config api.disablekey=true &
        env:
          ZAP_HOME: $HOME/ZAP_2.14.0
        timeout-minutes: 2

      - name: Wait for ZAP API
        run: |
          for i in {1..30}; do
            curl -s http://127.0.0.1:8090 || break
            sleep 2
          done

      - name: Run scan script
        run: |
          python3 - <<'PY'
          import sys, time, requests
          # (скрипт из предыдущего раздела вставьте сюда или скопируйте из репозитория)
          PY
        env:
          TARGET_URL: https://your-app.example.com

      - name: Upload ZAP report
        uses: actions/upload-artifact@v3
        with:
          name: zap-report
          path: zap_report.json

GitLab CI

stages:
  - zap_scan

zap_scan:
  stage: zap_scan
  image: openjdk:17-slim
  variables:
    ZAP_VERSION: "2.14.0"
  script:
    - apt-get update && apt-get install -y wget curl python3
    - wget -O zap.tar.gz https://github.com/zaproxy/zaproxy/releases/download/v${ZAP_VERSION}/ZAP_${ZAP_VERSION}_Linux.tar.gz
    - tar -xzf zap.tar.gz -C $HOME
    - chmod +x $HOME/ZAP_${ZAP_VERSION}/zap.sh
    - $HOME/ZAP_${ZAP_VERSION}/zap.sh -daemon -port 8090 -config api.disablekey=true &
    - >
      for i in {1..30}; do
        curl -s http://127.0.0.1:8090 && break || sleep 2;
      done
    - python3 zap_scan.py https://your-app.example.com
  artifacts:
    paths:
      - zap_report.json
    expire_in: 1 week

Отправка результатов в мессенджеры и системы тикетов

Для автоматического уведомления команды можно использовать веб‑хуки. Пример отправки в Slack:

curl -X POST -H 'Content-type: application/json' \
     --data "{\"text\": \"OWASP ZAP сканирование завершено. Отчет доступен в артефактах CI.\"}" \
     https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

Лучшие практики

  • Запускайте сканирование только после деплоя тестовой версии, чтобы не сканировать продакшн‑окружение без согласования.
  • Ограничьте время сканирования (параметр -config scanner.attackStrength=LOW) в CI, чтобы не превышать лимиты билда.
  • Храните отчёты в формате JSON или HTML и интегрируйте их в системы управления уязвимостями (Jira, Redmine).
  • Регулярно обновляйте OWASP ZAP, так как база правил постоянно растёт.

Заключение

Автоматизация сканирования веб‑приложений с помощью OWASP ZAP в Termux и интеграция процесса в CI/CD позволяет поддерживать высокий уровень безопасности без затраты большого количества ресурсов. Вы получаете постоянный контроль над уязвимостями, быстро реагируете на новые находки и поддерживаете культуру DevSecOps в команде.

Если вам требуется профессиональная настройка безопасных CI/CD пайплайнов, аудит кода, проведение пентестов или консалтинг по DevSecOps — команда RybinskLab готова помочь. Мы обеспечим end‑to‑end решение, адаптированное под ваши бизнес‑цели, и гарантируем надёжную защиту ваших веб‑приложений.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект