feat(detmir): add rust-first operations tooling

This commit is contained in:
igor04091968
2026-06-02 17:57:58 +03:00
parent 60670d30a8
commit 19e3682bc8
263 changed files with 51678 additions and 718 deletions
+198
View File
@@ -0,0 +1,198 @@
# Cross-OS Native DLP Enforcement
## Цель
Расширять AWatch-rus как легкую DLP-систему без тяжелого монолитного endpoint-agent.
Базовый принцип: сначала использовать естественные механизмы ОС и управляемых браузеров,
а собственный код держать тонким слоем политики, телеметрии и корреляции.
Это не заменяет текущий Windows/RDP contour. Он остается основным production-контуром:
- `AWatchRusCollectorGuard` следит за collector health;
- `aw-rus-healthd` принимает решение по свежести бакетов и активности хоста;
- `tsj-guardian-bot` наблюдает и лечит только реальные деградации;
- DLP policy engine остается центральным источником правил.
## Единая модель политики
Новые OS-specific механизмы должны сводиться к одному контракту:
```json
{
"nativeControls": {
"mode": "monitor",
"channels": {
"removableStorage": {"action": "audit"},
"print": {"action": "audit"},
"clipboard": {"action": "audit"},
"browserUpload": {"action": "audit"},
"appExecution": {"action": "audit"}
}
}
}
```
Допустимые действия:
- `audit`: только событие в `aw-dlp-endpoint-signals_<host>`;
- `warn`: событие плюс локальное уведомление пользователя;
- `block`: блокировка штатным механизмом ОС или managed browser;
- `blockWithOverride`: блокировка с управляемым исключением, если платформа это поддерживает;
- `disabled`: канал выключен.
Для rollout по умолчанию используется `monitor/audit`. `block` включается только по одному
каналу и одной группе хостов после накопления baseline.
На Windows это правило enforced в `dlp-endpoint-signals-collector.ps1`: если endpoint-правило
просит `action: "block"`, но `nativeControls.mode` не равен `enforce` или канал не разрешает
`block`, collector подавляет enforcement и пишет инцидент с `enforcementSuppressed=true`.
## Windows
Windows остается самой зрелой платформой для ближайшего enforcement.
Предпочтительный порядок:
1. USB/removable storage:
- мониторинг: текущий `dlp-endpoint-signals-collector.ps1`;
- enforcement: GPO/registry/device installation restrictions и `Set-Disk -IsReadOnly`;
- область блокировки: запись на removable media, не чтение.
2. Print:
- мониторинг: `Microsoft-Windows-PrintService/Operational`;
- enforcement: отмена print job штатным spooler API/CIM;
- rollout: сначала только документы с совпадением `documentRegex`.
3. Clipboard:
- мониторинг: текущий endpoint collector;
- enforcement: очистка clipboard только для high-confidence правил;
- риск: UX и ложные срабатывания, поэтому `block` не включать глобально.
4. App execution:
- enforcement: AppLocker или WDAC/App Control for Business;
- назначение: не “DLP content”, а сужение каналов утечки через запрещенные приложения.
5. Browser upload:
- легкий путь: managed browser policy + URL/category rules;
- сильный путь: расширение браузера или коммерческий DLP browser control, если нужен inline file upload block.
Ограничение: AppLocker/WDAC управляют запуском кода, но не поведением уже запущенного приложения.
Поэтому они дополняют DLP, а не заменяют USB/print/browser enforcement.
## macOS
Для macOS нельзя идти через kernel extension как основной путь. Современный естественный
вариант - System Extensions и профиль управления через MDM.
Предпочтительный порядок:
1. Monitor-only agent:
- LaunchDaemon + Swift/Go helper;
- публикация событий в AW buckets;
- локальный health heartbeat по аналогии с `aw-rus-collector-guard_<host>`.
2. Endpoint Security system extension:
- file open/write/exec telemetry;
- deny только после отдельного PoC и подписи/entitlements;
- обязательная MDM-подготовка approval profile.
3. Network Extension:
- для DNS/proxy/web egress контроля;
- лучше применять к managed domains, не как полный MITM по умолчанию.
4. MDM restrictions:
- screen capture, AirDrop, external media, profile-level restrictions;
- это самый легкий enforcement, если парк управляется MDM.
Ограничение: без MDM и Apple Developer entitlements macOS enforcement будет хрупким.
Для неуправляемых Mac оставляем monitor-only.
## Linux
Linux должен быть легким и дистрибутивно-нейтральным. Не начинать с “универсального агента,
который перехватывает все syscalls”.
Предпочтительный порядок:
1. fanotify file gate:
- мониторинг и permission events для чувствительных каталогов;
- хороший MVP для removable mount points, home/project shares, export directories;
- блокировка через permission response до открытия файла.
2. auditd/journald collectors:
- дешево для exec, sudo, mount, removable media, ssh/scp hints;
- подходит для server/workstation baseline.
3. eBPF telemetry:
- использовать для observability: process, connect, file metadata;
- enforcement только через BPF LSM на поддерживаемых ядрах и после отдельной совместимости.
4. Desktop clipboard/print:
- monitor-only через DE-specific tools (`wl-paste`, `xclip`, CUPS logs);
- block режим только для управляемых рабочих станций.
Ограничение: Linux enforcement сильно зависит от ядра, LSM stack и дистрибутива. Поэтому
первая production-версия должна быть fanotify + auditd, а eBPF оставить как расширяемый слой.
## ChromeOS и managed browser
Для ChromeOS не надо писать свой endpoint-agent. Если устройства управляются через Google
Admin Console, использовать ChromeOS Data Controls:
- copy/paste;
- printing;
- screen capture/screen sharing;
- file open/upload/transfer;
- removable storage.
Для Windows/macOS/Linux браузерный контур должен быть policy-first:
- Edge/Chrome enterprise policies;
- URL/category lists из текущего DLP policy engine;
- расширение браузера только когда нужен inline upload/file decision, а не только telemetry.
## Priority Backlog
### P0 - сейчас
- Привести все health-check скрипты к единой inactive/guard-aware классификации.
- Хранить `nativeControls` в policy document как forward-compatible секцию.
- Не включать новый `block` глобально; только `audit` и `warn`.
### P1 - Windows production
- USB write-block profile через GPO/PowerShell.
- Print cancel по `documentRegex`.
- Browser upload detection по managed URL categories.
- Guard heartbeat для applied nativeControls version/checksum.
### P2 - Linux MVP
- `aw-linux-file-gate` на fanotify для monitor/audit по каталогам.
- `aw-linux-audit-collector` для mount/usb/scp/sudo/process telemetry.
- systemd unit + heartbeat bucket.
### P3 - macOS MVP
- `aw-macos-monitor` LaunchDaemon без enforcement.
- MDM profile checklist.
- System Extension PoC только для managed Macs.
### P4 - managed browser / ChromeOS
- Транслятор DLP policy domains/categories в Chrome/Edge policy bundle.
- ChromeOS Data Controls mapping для организаций с Google Workspace.
## Rollout Rules
- Каждая новая платформа стартует в `monitor`.
- `block` разрешен только после минимум 7 дней clean baseline.
- Любой block должен писать:
- rule id;
- action;
- platform;
- native mechanism;
- enforcement result;
- override id, если применимо.
- Если local guard/heartbeat старше порога, центральный бот не делает широкий restart,
а переводит платформу в degraded и запускает platform-specific recovery.
## Sources
- Microsoft AppLocker overview: https://learn.microsoft.com/en-us/windows/security/application-security/application-control/app-control-for-business/applocker/applocker-overview
- Microsoft AppLocker policy design: https://learn.microsoft.com/en-za/windows/security/application-security/application-control/app-control-for-business/applocker/understand-applocker-policy-design-decisions
- Microsoft Purview Chrome DLP extension: https://learn.microsoft.com/en-us/purview/dlp-chrome-learn-about
- Apple system extensions deployment: https://support.apple.com/guide/deployment/system-extensions-in-macos-depa5fb8376f/web
- Linux fanotify manual: https://man7.org/linux/man-pages/man7/fanotify.7.html
- eBPF docs: https://docs.ebpf.io/
- ChromeOS Data Controls: https://support.google.com/chrome/a/answer/11587610