Termux – это мощный терминальный эмулятор для Android, позволяющий запускать полноценную Linux‑среду без root‑прав. Совмещение Termux с OWASP ZAP (Zed Attack Proxy) открывает возможности полного аудита веб‑приложений прямо со смартфона. В статье мы рассмотрим, как автоматизировать процесс сканирования и генерации отчётов, используя скрипты Bash и планировщик cron.
Подготовка окружения
Для начала необходимо установить базовые пакеты и сам Termux‑API (по желанию). Выполняем следующие команды:
pkg update && pkg upgrade -y
pkg install wget curl git unzip openjdk-17 -y
pkg install python clang make -y
Установка Java необходима, так как ZAP работает на JVM. После установки проверяем версии:
java -version
python3 --version
Установка OWASP ZAP в Termux
Скачиваем последнюю стабильную сборку ZAP с официального репозитория OWASP:
wget -O zap.tar.gz https://github.com/zaproxy/zaproxy/releases/download/v2.14.0/ZAP_2.14.0_Linux.tar.gz
mkdir -p $HOME/zap && tar -xzf zap.tar.gz -C $HOME/zap --strip-components=1
Добавляем директорию ZAP в PATH для удобного вызова:
echo 'export PATH=$HOME/zap:$PATH' >> $HOME/.profile
source $HOME/.profile
Проверяем запуск в режиме демона (headless):
zap.sh -daemon -port 8090 -config api.disablekey=true
Опция -config api.disablekey=true отключает обязательность API‑ключа, что упрощает автоматизацию в локальной среде. Для продакшн‑сканирований рекомендуется задать собственный ключ.
Создание скрипта автоматического сканирования
Скрипт будет выполнять следующие шаги:
- Запуск ZAP в режиме демона.
- Инициализация контекста и целевого URL.
- Запуск активного сканирования.
- Ожидание завершения и выгрузка отчётов.
- Остановка демона.
Ниже пример Bash‑скрипта zap_scan.sh:
#!/usr/bin/env bash
# Параметры сканирования
TARGET="https://example.com"
ZAP_PORT=8090
REPORT_DIR="$HOME/zap_reports"
mkdir -p "$REPORT_DIR"
# 1. Запуск ZAP в фоне
zap.sh -daemon -port $ZAP_PORT -config api.disablekey=true &
ZAP_PID=$!
# Даем ZAP время на инициализацию
sleep 10
# 2. Создание контекста (опционально)
curl -s "http://127.0.0.1:$ZAP_PORT/JSON/context/action/addContext/?contextName=auto"
# 3. Запуск активного сканирования
SCAN_ID=$(curl -s "http://127.0.0.1:$ZAP_PORT/JSON/ascan/action/scan/?url=$TARGET&recurse=true&inScopeOnly=true" | jq -r '.scan')
# 4. Ожидание завершения сканирования
while :; do
STATUS=$(curl -s "http://127.0.0.1:$ZAP_PORT/JSON/ascan/view/status/?scanId=$SCAN_ID" | jq -r '.status')
echo "Progress: $STATUS%"
if [ "$STATUS" -eq "100" ]; then break; fi
sleep 5
done
# 5. Генерация отчётов (HTML, XML, JSON)
curl -s "http://127.0.0.1:$ZAP_PORT/OTHER/core/other/htmlreport/" > "$REPORT_DIR/report.html"
curl -s "http://127.0.0.1:$ZAP_PORT/OTHER/core/other/xmlreport/" > "$REPORT_DIR/report.xml"
curl -s "http://127.0.0.1:$ZAP_PORT/OTHER/core/other/jsonreport/" > "$REPORT_DIR/report.json"
# 6. Остановка демона
curl -s "http://127.0.0.1:$ZAP_PORT/JSON/core/action/shutdown/"
kill $ZAP_PID
echo "Отчёты сохранены в $REPORT_DIR"
Для работы скрипта требуется утилита jq (парсер JSON). Установим её:
pkg install jq -y
Сохраните скрипт, сделайте его исполняемым (chmod +x zap_scan.sh) и запустите:
./zap_scan.sh
Автоматизация с помощью cron
Termux поддерживает планировщик crond. Установим и настроим:
pkg install cronie -y
mkdir -p $HOME/.termux/boot
Создаём задачу, которая будет запускать сканирование каждый день в 02:00:
(crontab -l 2>/dev/null; echo "0 2 * $HOME/zap_scan.sh") | crontab -
Запускаем демон crond (можно добавить в автозапуск Termux):
sv-enable crond
sv up crond
Объединение результатов и отправка по email
Для интеграции с системами CI/CD или уведомлениями удобно отправлять готовый отчёт на почту. Пример использования msmtp:
pkg install msmtp -y
cat > $HOME/.msmtprc <
Оптимизация и масштабирование
Для больших целей рекомендуется:
- Разделять сканирование по поддоменам, используя массив URL‑ов.
- Настраивать
ContextиAuthenticationчерез API, если приложение требует авторизации. - Хранить отчёты в облаке (Google Drive, Dropbox) через их CLI‑клиенты.
- Объединять результаты нескольких запусков в единый дашборд (например, Grafana + InfluxDB).
Проверка корректности установки
Если при запуске ZAP вы получаете ошибку java.lang.NoClassDefFoundError, проверьте, что переменная JAVA_HOME указывает на установленный JDK:
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
Эта рекомендация основана на типичных проблемах «start» Java‑приложений, описанных в словарных источниках [cambridge.org](https://dictionary.cambridge.org/us/dictionary/english/start) и [merriam-webster.com](https://www.merriam-webster.com/dictionary/start).
Заключение
Комбинация Termux и OWASP ZAP предоставляет мобильную, но в то же время мощную платформу для регулярного аудита веб‑приложений. Автоматизировав запуск сканеров, сбор отчётов и их доставку, вы получаете постоянный поток актуальной информации о состоянии безопасности без необходимости отдельного сервера.
RybinskLab готов помочь в построении полностью автоматизированных пайплайнов безопасности, адаптированных под ваши бизнес‑процессы. Мы предоставляем консалтинг, настройку CI/CD интеграций и поддержку OWASP‑инструментов в любой инфраструктуре.