Files
AWatch-rus/docs/CONTAINMENT_OPERATOR_RUNBOOK_RU.md
T
igor04091968 757fd3125d
CI / Rust checks (push) Canceled after 0s
CI / Docs and registry checks (push) Canceled after 0s
CI / Smoke checks (push) Canceled after 0s
Coverage / Coverage baseline (push) Canceled after 0s
Security / Cargo audit (push) Canceled after 0s
Security / Cargo deny (push) Canceled after 0s
Security / Secret pattern check (push) Canceled after 0s
Security / Dependency review (push) Canceled after 0s
Add shadow security finding inbox
2026-07-01 06:12:08 +03:00

195 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AWatch-rus containment operator runbook
Дата: 2026-06-25.
Runbook для безопасной проверки containment-логики. Текущая реализация не
блокирует рабочие станции и не меняет сеть. Она только рассчитывает решение и
показывает, был бы quarantine рекомендован или отказан.
## 1. Сборка
```bash
cd /mnt/usb_hdd2/Projects/ActivityWatch-Russian
export CARGO_TARGET_DIR=/home/igor/.cache/detmir-adk-rust-target
cargo build --manifest-path adk-rust/Cargo.toml -p containment-engine
```
## 2. Smoke в disabled/shadow режиме
```bash
cd /mnt/usb_hdd2/Projects/ActivityWatch-Russian
bash scripts/containment_shadow_smoke.sh
```
Ожидаемо:
- JSON содержит `would_mutate=false`;
- `decision_status=disabled` для default example policy;
- нет изменений firewall, pfSense, AD, VLAN, routes.
## 3. Проверка shadow recommendation
Создайте временный policy с:
```json
{
"enabled": true,
"mode": "shadow"
}
```
на базе `configs/containment-policy.example.json`, затем выполните:
```bash
containment-engine decide \
--policy /tmp/containment-policy-shadow.json \
--finding configs/containment-finding.example.json \
--pretty
```
Ожидаемо:
- `decision_status=shadow_recommended`;
- `would_mutate=false`;
- `rollback_plan_id` заполнен;
- `blockers=[]`.
## 4. Manual approval mode
`manual_approval` должен только поставить решение в состояние
`manual_approval_required`. Он не применяет block сам.
## 5. Auto mode
В текущей реализации `auto` может вернуть `auto_ready`, но `would_mutate=false`.
Это намеренно: decision layer сам не применяет блокировки.
Запрещено считать `auto_ready` фактической блокировкой. Это только решение
control plane.
## 6. Windows Firewall executor dry-run
Security Finding Inbox показывает подозрительные станции и фиксирует workflow
события. Портал не выполняет firewall apply. После `approved` и
`apply_requested` отдельный процесс `security-finding-inbox executor` может
выполнить контролируемый цикл `decide -> plan -> apply -> verify`, а при
ошибке `rollback`. По умолчанию executor работает dry-run/fail-closed.
Сгенерируйте план:
```bash
cd /mnt/usb_hdd2/Projects/ActivityWatch-Russian
containment-engine windows-firewall plan \
--request configs/windows-firewall-containment-request.example.json \
--pretty > /tmp/windows-firewall-plan.json
```
Проверьте `blockers`. Для корректного example они должны быть пустыми.
Dry-run apply:
```bash
containment-engine windows-firewall apply \
--plan /tmp/windows-firewall-plan.json \
--confirm-apply YES \
--pretty
```
Ожидаемо:
- `execution_status=dry_run_commands_ready`;
- `would_mutate=false`;
- в JSON есть PowerShell-команды `New-NetFirewallRule`;
- реальные firewall-правила не создаются.
Verify dry-run:
```bash
containment-engine windows-firewall verify \
--plan /tmp/windows-firewall-plan.json \
--pretty
```
Rollback dry-run:
```bash
containment-engine windows-firewall rollback \
--plan /tmp/windows-firewall-plan.json \
--confirm-rollback YES \
--pretty
```
## 7. Real Windows execution rules
Dry-run polling из центрального контура:
```bash
security-finding-inbox executor \
--once \
--dry-run \
--containment-engine-bin /usr/local/bin/containment-engine \
--policy /etc/activitywatch/containment-policy.json \
--management-allowlist 10.10.10.10,10.10.10.11 \
--blocked-remote-addresses 10.10.20.0/24,10.10.30.0/24
```
Реальный Windows Firewall apply допускается только на целевой Windows-станции:
```powershell
security-finding-inbox.exe executor `
--once `
--execute-local `
--confirm-execute YES `
--executor-host HOST-EXAMPLE `
--containment-engine-bin C:\ProgramData\AWatch-rus\containment-engine.exe `
--policy C:\ProgramData\AWatch-rus\containment-policy.json `
--management-allowlist 10.10.10.10,10.10.10.11 `
--blocked-remote-addresses 10.10.20.0/24,10.10.30.0/24
```
Executor откажется, если нет `approved` перед `apply_requested`, finding не
`suspected_infected`/`confirmed_infected`, management channel не проверен,
allowlist/block ranges пустые, host finding не совпадает с executor host для
local apply, containment policy возвращает blocker или Windows Firewall plan
содержит blockers.
`--execute-local` разрешён только для отдельного lab Windows host, где заранее
проверены:
- доступ с admin jump host;
- доступ к AWatch/Velociraptor management адресам;
- rollback command;
- out-of-band доступ, если firewall rule ошибочен;
- TTL и оператор, ответственный за возврат.
Не использовать широкие блокировки `Any`/`LocalSubnet`: Windows Firewall
block-правила могут перекрыть allow-правила и отрезать управление.
## 8. Когда можно расширять real containment executor
Только после выполнения условий:
- есть lab host;
- подтвержден management allowlist;
- есть rollback command;
- есть TTL rollback;
- есть audit log;
- `plan`, `apply`, `verify`, `rollback` покрыты тестами;
- auto-containment для серверов остается disabled.
## 9. Проверки перед commit
```bash
cd /mnt/usb_hdd2/Projects/ActivityWatch-Russian
python3 scripts/public_secret_pattern_check.py
bash -n scripts/containment_shadow_smoke.sh
bash scripts/containment_shadow_smoke.sh
git diff --check
cd adk-rust
export CARGO_TARGET_DIR=/home/igor/.cache/detmir-adk-rust-target
cargo fmt --all --check
cargo test -p containment-engine
cargo clippy -p containment-engine --all-targets -- -D warnings
```