Files
portal/docs/security/zap-setup.md
T
Дмитрий 3fc5501dc5 docs(infosec): A8 ZAP #68 + Ward #70 установлены портативно — PENDING INSTALL снят
- ZAP cross-platform 2.17.0 + MCP-аддон mcp-alpha-0.0.1 на portable Temurin JRE 17 (bin/, gitignored)
- Ward v0.4.1 собран portable Go 1.26.3 (bin/ward.exe); smoke app/ → 2 находки (APP_DEBUG/APP_ENV)
- setup-доки docs/security/zap-setup.md + ward-setup.md
- нормативный синк: Tooling v2.21 / CLAUDE.md v2.25 / PSR_v1 v3.21 / Pravila v1.38
- ADR-014 amended (Status/Decision/Consequences) + routing-off-phase v1.5
- gates GREEN: cross-ref + l1-watcher 0 drift / markdownlint / lychee / gitleaks

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 15:36:06 +03:00

5.0 KiB
Raw Blame History

OWASP ZAP (#68) — установка и использование

Узел A8: #68 — глубокая боевая DAST работающего портала (spider + active scan: обход входа, инъекции, XSS, сессии/CSRF). Источник (IS9-вет принят): официальный ZAP «MCP Integration» add-on (zaproxy/zap-extensions, addOns/mcp/, Apache-2.0; провенанс OWASP/Checkmarx). Тип: Java-приложение (ZAP) + MCP-аддон (единственный настоящий MCP в наборе A8). Управляется через MCP при запущенном ZAP-демоне.


Установка (native-Windows, портативно, без choco)

ZAP — Java-приложение, требует Java 17+. И Java, и ZAP ставятся портативно (zip, без choco), всё под bin/ (gitignored).

$ProgressPreference='SilentlyContinue'

# 1. Portable Temurin JRE 17 (официальный zip, проверка SHA256)
Invoke-WebRequest -Uri 'https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.19%2B10/OpenJDK17U-jre_x64_windows_hotspot_17.0.19_10.zip' -OutFile 'bin\_dl\jre17.zip' -UseBasicParsing
# ожидаемый SHA256: 79a598e1fbb4e16582d92c4ee22280a3c4d72fd52606e1e46b1223c0fe53b0da
tar.exe -xf 'bin\_dl\jre17.zip' -C 'bin\_runtimes'   # → bin\_runtimes\jdk-17.0.19+10-jre\

# 2. ZAP cross-platform 2.17.0 (официальный GitHub-релиз; размер 286 652 857 Б)
Invoke-WebRequest -Uri 'https://github.com/zaproxy/zaproxy/releases/download/v2.17.0/ZAP_2.17.0_Crossplatform.zip' -OutFile 'bin\_dl\zap.zip' -UseBasicParsing
tar.exe -xf 'bin\_dl\zap.zip' -C 'bin'   # → bin\ZAP_2.17.0\

# 3. MCP-аддон (+ зависимости) из маркетплейса ZAP
$env:JAVA_HOME="$((Get-Location).Path)\bin\_runtimes\jdk-17.0.19+10-jre"
& "$env:JAVA_HOME\bin\java.exe" -jar 'bin\ZAP_2.17.0\zap-2.17.0.jar' -cmd -dir 'bin\ZAP_2.17.0\_home' -addoninstall mcp
  • Расположение: bin/ZAP_2.17.0/ (движок + аддоны в _home/plugin/), JRE — bin/_runtimes/jdk-17.0.19+10-jre/. bin/* в .gitignore → машинно-локально, не коммитится.
  • Java — портативная, системная не устанавливается (JAVA_HOME задаётся при запуске ZAP).
  • Verified (2026-05-21): java -jar zap-2.17.0.jar -cmd -version2.17.0; daemon API /JSON/core/view/version/2.17.0; аддон mcp-alpha-0.0.1.zap в _home/plugin/.

Квирки native-Windows (важно)

  1. Start-Process -ArgumentList калечит путь к jar с пробелами/кириллицей (Error: Unable to access jarfile). Запускать через оператор & (корректно кавычит) или задавать -WorkingDirectory bin\ZAP_2.17.0 + относительное имя zap-2.17.0.jar.
  2. Первый daemon-старт тянет полный штатный набор аддонов (~817 МБ: active/passive scan rules, spider, ajax, openapi, soap, graphql, selenium/webdrivers) — это нормально.
  3. Цель сканирования — 127.0.0.1 (как у Nuclei), не localhost.

Запуск daemon (для MCP-режима)

$root=(Get-Location).Path; $env:JAVA_HOME="$root\bin\_runtimes\jdk-17.0.19+10-jre"
Start-Process -FilePath "$env:JAVA_HOME\bin\java.exe" -WorkingDirectory "$root\bin\ZAP_2.17.0" `
  -ArgumentList @('-jar','zap-2.17.0.jar','-daemon','-dir','_home','-host','127.0.0.1','-port','8092','-config','api.disablekey=true')
# проверка готовности: GET http://127.0.0.1:8092/JSON/core/view/version/  → {"version":"2.17.0"}

MCP-интеграция: при запущенном демоне MCP-аддон отдаёт MCP-эндпоинт; зарегистрировать его SSE-адрес в .mcp.json (блок zap), затем доступны 15 MCP-инструментов (ZapStartSpiderTool, ZapStartActiveScanTool, ZapGetActiveScanStatusTool, ZapGenerateReportTool и т.д.) — все обращаются только к локальному ZAP API. Аддон alpha (mcp-alpha-0.0.1) — API может меняться.

Гард IS8

Цель по умолчанию — локальная/тестовая копия (127.0.0.1). Боевой портал — только по явной команде заказчика. Active scan тяжёлый — в smoke не запускать (только spider + passive / проверка связности). READ-only постура.

Границы (ADR-014)

IS1 — ZAP (динамика, бьёт работающий портал) ≠ Semgrep #25 (статика, читает код). IS2 — ZAP (глубина: логика приложения) ≠ Nuclei #69 (широта: известные дыры) — комплементарны.