Files
AWatch-rus/docs/DETMIR_CURRENT_STATE_RU.md
T

326 lines
14 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.
# DetMir/AWatch-rus: актуальное состояние и граница DLP-модуля
Дата фиксации: 2026-06-25.
Обновление 2026-06-29 после восстановления RDP-сервера: фактический
production IP Windows/RDP host теперь `192.168.100.19`; stable ActivityWatch
logical host id остаётся `SHARKON2025`. Подробный post-restore baseline:
`docs/DETMIR_RESTORE_BASELINE_2026-06-29_RU.md`.
Документ фиксирует фактическое состояние DetMir/AWatch-rus и первую границу
переработки горячего пути портала. Это не release evidence для реестра
российского ПО, не заявление о сертификации и не claim замены DLP/SIEM/EDR.
## Runtime baseline
- Контур: DetMir / AWatch-rus.
- Stable Windows/RDP logical host id для ActivityWatch bucket-ов и отчетов:
`SHARKON2025`. Это legacy logical id, а не обязательное физическое имя
Windows-сервера. Правило rename-safe эксплуатации описано в
`docs/WINDOWS_LOGICAL_HOST_ID_RU.md`.
- Текущий физический RDP/WinRM target: `192.168.100.19`.
- Portal host: `10.10.10.2`.
- Portal service: `detmir-portal.service`.
- Portal URL: `http://10.10.10.2:8720/`.
- Задеплоенный binary hash:
`653b22b0fbf29a22f7de42ade7b689490b1de16fa07e785e4e0efd3078e7a3bc`.
- Бэкап предыдущего binary на сервере:
`/usr/local/bin/detmir-portal.bak.20260625T045640Z`.
- Runtime mode после phase 1 deploy:
`DETMIR_PORTAL_DLP_MODULE_ENABLED=false`.
- Server-side optional DLP runtime control:
`AW_DLP_ENABLED=false|true` и `DETMIR_DLP_ENABLED=false|true`.
- Runtime control/statistics script:
`scripts/detmir_dlp_runtime_control.sh` / live
`/usr/local/bin/detmir-dlp-runtime-control`.
- Live DLP runtime state after 2026-06-25 controlled disable:
`AW_DLP_ENABLED=false`, `AW_DLP_INFLUX_ENABLED=false`;
active/enabled DLP units: `0/0`.
- Reason: DLP runtime materially increases Proxmox VM/LXC, InfluxDB, Grafana,
ClickHouse and AW server load. In production DetMir it is currently kept
disabled, but remains a documented optional module that can be enabled later.
- Health после деплоя: `/healthz` возвращал `status=ok`.
- Readiness после деплоя: `/readyz` возвращал `status=ready`.
## Что исправлено в текущем baseline
- Первичная загрузка портала больше не зависает в бесконечном `LOADING`.
- При холодном старте тяжелый операторский срез не блокирует UI бесконечно.
- Frontend показывает честное состояние `STALE / Первичный срез прогревается`.
- При prewarm больше не смешиваются статусы `STALE` и ложное
`Данные отсутствуют`.
- Progress bar доходит до `100%` в fail-soft/prewarm состоянии.
- Browser smoke после деплоя подтвердил:
- `loadStatus=STALE`;
- `progress=100%`;
- `LOADING=false`;
- `EMPTY=false`;
- `ERROR=false`.
## Phase 1 live verification
2026-06-25 после сборки `detmir-portal` и деплоя через
`ansible/deploy_detmir_portal.yml --limit proxmox` подтверждено:
- `/healthz`: `status=ok`;
- `/readyz`: `status=ready`;
- `/api/reports`: `ok=true`, `cache_status=warming`,
`modules.dlp.enabled=false`, `modules.dlp.hot_path=false`;
- `/api/operator`: `cache_status=warming`, `summary.severity=STALE`,
`modules.dlp.status=disabled`, `incidents=0`;
- server log для `/api/operator`: `status=200`, `latency_ms=49`.
Это подтверждает, что первый operator/API screen больше не блокируется на
холодной полной сборке. Полный snapshot строится в фоне и честно помечается как
`warming`/`STALE`.
## Текущая проблема производительности
Наблюдаемые признаки:
- после restart полный тяжелый snapshot может уходить в prewarm/stale mode;
- report cache и stale UI защищают пользователя от зависания, но не убирают
саму стоимость тяжелых расчетов;
- DLP evidence, screenshots, endpoint signals, case review и forensics
enrichment требуют больше CPU/IO/сетевых операций, чем Workforce core.
Вывод: DLP/evidence/forensics enrichment уже вынесен из обязательного hot path
phase 1 через `DETMIR_PORTAL_DLP_MODULE_ENABLED=false`, но полная оптимизация
тяжелого snapshot/prewarm остается отдельной инженерной задачей.
## Целевая граница после переработки
Core hot path:
- Workforce Operations;
- worktime/activity;
- загрузка, простои, перегруз;
- дисциплина процесса;
- качество и полнота данных;
- легкие агрегаты для руководителя;
- readiness/health без ожидания DLP.
Optional DLP module:
- DLP endpoint signals;
- clipboard/USB/print/web/file operation incidents;
- screenshots/evidence;
- DLP/case review;
- heavy security correlation;
- forensics timelines and evidence packages;
- Hayabusa enrichment where needed.
Отключение optional DLP module не должно ломать:
- `/healthz`;
- `/readyz`;
- первичную загрузку портала;
- Workforce views;
- management reports;
- базовый operator dashboard.
Отключение optional DLP module должно показывать честный статус:
```text
DLP module disabled / not configured
```
без заявления, что DLP-проверки выполнены.
## Рекомендуемые feature flags
Минимальная целевая модель конфигурации:
```json
{
"modules": {
"dlp": {
"enabled": false,
"evidence": false,
"correlation": false,
"screenshots": false,
"hot_path": false
}
}
}
```
Первая реализованная runtime-граница:
```text
--dlp-module-enabled
DETMIR_PORTAL_DLP_MODULE_ENABLED=true|false
AW_DLP_ENABLED=true|false
DETMIR_DLP_ENABLED=true|false
```
Default остается `true`, чтобы существующее поведение не менялось без явного
решения администратора. Для ускоренного Workforce/operator режима допускается
`DETMIR_PORTAL_DLP_MODULE_ENABLED=false`; в этом режиме портал:
- не читает DLP incident/case/review/audit файлы в основном report/operator
path;
- отключает security-events backend внутри snapshot, не меняя сохраненные
ClickHouse credentials;
- возвращает disabled-state для DLP evidence API;
- не считает отсутствие DLP ошибкой Workforce core.
Ansible-параметр поставки:
```yaml
detmir_portal_dlp_module_enabled_override: false
```
Отдельный `detmir-portal-evidence` сервис не отключается этим флагом и остается
самостоятельным контуром evidence/API при наличии отдельной конфигурации.
Hayabusa/Velociraptor boundary:
- Hayabusa/Sigma and Velociraptor are optional security findings / forensics
sources, not Workforce hot path dependencies.
- Heavy DLP runtime can remain disabled while Hayabusa/Velociraptor findings
are imported into Security Finding Inbox / ClickHouse.
- Velociraptor server/client mode must be enabled explicitly
(`disabled|offline_collector|server_clients`) and must not be auto-started by
routine production deploy on the small DetMir Proxmox contour.
- Findings from Velociraptor/Hayabusa support `decide -> plan -> approve ->
apply -> verify`, but do not imply automatic remediation without approval.
Server-side optional DLP runtime описан отдельно:
- [DLP_OPTIONAL_RUNTIME_RU.md](DLP_OPTIONAL_RUNTIME_RU.md).
При `AW_DLP_ENABLED=false`:
- `dlp-health-check` возвращает штатный `dlp:mode=disabled`;
- `detmir-dlp` не выполняет SSH health probe;
- `detmir-check`, `check-aw-full` и `check-aw-data` не считают DLP buckets
обязательными;
- `detmir-readiness` не требует DLP Influx write и DLP systemd units;
- перед отключением и после отключения собираются JSON-срезы в
`/var/lib/activitywatch/health/dlp-runtime-history/`, latest-срез остается в
`/var/lib/activitywatch/health/dlp-runtime-state.json`.
Live disable evidence 2026-06-25:
- `dlp-health-check` returned `ok=true`, `dlp:mode=disabled`;
- `detmir-dlp` returned `ok=true`, `dlp:mode=disabled`;
- pre-disable active units:
`aw-dlp-influx-exporter.timer`,
`activitywatch-dlp-aggregator.timer`,
`aw-dlp-report-scheduler.timer`,
`aw-dlp-syslog-forwarder.timer`,
`aw-dlp-webhook-sender.timer`,
`aw-dlp-cef-exporter.timer`,
`aw-dlp-ioc-refresh.timer`,
`aw-dlp-policy-engine.service`,
`aw-dlp-case-management.service`,
`detmir-portal-evidence.service`;
- post-disable active/enabled DLP units: `0/0`;
- retained evidence files:
`/var/lib/activitywatch/health/dlp-runtime-history/dlp-runtime-current-20260625T083619Z.json`,
`/var/lib/activitywatch/health/dlp-runtime-history/dlp-runtime-pre_disable-20260625T083637Z.json`,
`/var/lib/activitywatch/health/dlp-runtime-history/dlp-runtime-disabled-20260625T083700Z.json`;
- `check-aw-full` with `AW_DLP_ENABLED=false` reports `DLP buckets ...
SKIPPED`;
- ActivityWatch core services remained active:
`activitywatch-server`, `aw-worktime-api`.
Separate live observations after DLP disable, before 2026-06-29 restore:
- `aw-watcher-afk`, `aw-watcher-window` and `aw-worktime-sessions` were stale
in the manual check and require separate RDP collector/session recovery;
- WinRM from the server side to `192.168.100.18:5985` was unreachable during
this check;
- these are not treated as DLP disable regressions.
Post-restore correction on 2026-06-29:
- current physical RDP/WinRM target is `192.168.100.19`;
- laptop route to `192.168.100.19` is through DetMir OpenVPN gateway
`10.0.13.1`;
- WinRM `5985` and RDP `3389` are reachable from the admin laptop;
- stable ActivityWatch logical host id remains `SHARKON2025`.
Fail-safe правила:
- если DLP выключена, Security/Forensics views должны показывать disabled-state,
а не падать;
- если DLP включена, тяжелые DLP операции должны выполняться асинхронно или
через cache, а не блокировать первый Workforce/operator screen;
- readiness не должен заявлять DLP healthy, если модуль отключен или не
проверен;
- отсутствие DLP не является ошибкой Workforce core.
## Сетевое состояние
Доступ к DetMir зависит от NetworkManager VPN profile
`pfSense-gate-UDP4-1194-vpn_prog10-config`. Имя tun-интерфейса не является
семантической идентичностью и должно проверяться по адресу `10.0.13.*`.
Пример рабочего route:
```text
10.10.10.2 via 10.0.13.1 dev <current-detmir-tun>
```
Наблюдавшаяся нестабильность dataplane:
- tun device может присутствовать в routing table, но gateway `10.0.13.1` не
отвечает;
- при этом SSH, `/healthz` и браузерная проверка DetMir недоступны;
- после ручного поднятия NetworkManager-подключения
`pfSense-gate-UDP4-1194-vpn_prog10-config` доступ восстанавливался.
- 2026-06-25 после phase 1 deploy зафиксирован отдельный сбой:
`nm-openvpn` для `178.178.98.83:1194` получил `TLS handshake failed` и
`connect timeout exceeded`; повторная production-очистка старого systemd
prewarm drop-in отложена до восстановления VPN handshake.
Актуальная проверка 2026-06-29:
```text
192.168.100.19 via 10.0.13.1 dev <current-detmir-tun>
10.0.13.1 ping OK
192.168.100.19:5985 OK
192.168.100.19:3389 OK
```
Команда восстановления:
```bash
nmcli connection down 'pfSense-gate-UDP4-1194-vpn_prog10-config' || true
sleep 2
nmcli connection up 'pfSense-gate-UDP4-1194-vpn_prog10-config'
```
Проверка:
```bash
ping -c 2 -W 2 10.0.13.1
ping -c 2 -W 2 10.10.10.2
nc -vz -w 3 10.10.10.2 22
curl -sS --max-time 5 http://10.10.10.2:8720/healthz
```
## Что не менять без отдельной задачи
- Не удалять DLP collectors и warehouse ради ускорения портала.
- Не включать heavy DLP или Velociraptor server runtime автоматически при
обычном deploy без ресурсного решения.
- Не менять UI/API несовместимо: новые поля должны быть additive.
- Не заявлять completed DLP decoupling до live deploy и browser/API smoke.
- Не позиционировать AWatch-rus как сертифицированную DLP/SIEM/EDR/СЗИ.
## Следующий инженерный шаг
Закрыть оставшиеся production-hardening пункты:
1. После восстановления DetMir VPN повторно прогнать
`ansible/deploy_detmir_portal.yml`, чтобы удалить legacy drop-in
`/etc/systemd/system/detmir-portal.service.d/30-prewarm-after-start.conf`.
2. Подтвердить remote `sha256sum /usr/local/bin/detmir-portal` и отсутствие
`ExecStartPost` prewarm в `systemctl cat detmir-portal`.
3. Подтвердить browser smoke без зависания первичной загрузки.
4. Добавить метрики и smoke для режимов `dlp.enabled=false` и
`dlp.enabled=true`.