# Анализ DLP-скриптов PowerShell (работоспособность)

Дата анализа: **2026-05-04 (UTC)**

## Проверенный scope

- `windows/dlp-endpoint-signals-collector.ps1`
- `windows/file-operations-collector.ps1`
- `windows/dlp-policy.example.json`
- `windows/web-category-rules.example.json`

## Ключевой итог

DLP-скрипты в целом рабочие по архитектуре (heartbeat в ActivityWatch, policy-driven правила, cooldown, enforcement), но есть **критичный риск misconfiguration** и несколько эксплуатационных рисков.

---

## Что точно хорошо

1. В обоих коллекторах включены `Set-StrictMode -Version Latest` и `$ErrorActionPreference = 'Stop'`.
2. Есть отправка событий в отдельные bucket’ы (`aw-dlp-endpoint-signals_*`, `aw-dlp-incidents_*`, `aw-file-operations_*`).
3. В endpoint-коллекторе реализованы:
   - правила по буферу обмена / USB / печати,
   - suppression через cooldown (`Should-EmitByCooldown`),
   - опциональный screenshot capture при инциденте.
4. В file collector есть наблюдение за `Desktop/Documents/Downloads` через `FileSystemWatcher`.

---

## Найденные проблемы и риски

### 1) Критично: дефолтный путь конфига в endpoint-скрипте не совпадает с проектом

- `dlp-endpoint-signals-collector.ps1` использует по умолчанию:
  - `C:\ProgramData\AWatch-rus\deployment-config.json`
- Остальной проект использует namespace `AWatch-rus` (`C:\ProgramData\AWatch-rus\...`).

**Риск:** endpoint-коллектор может стартовать без нужного deployment-конфига и работать с неверными/пустыми параметрами.

### 2) Нет строгой проверки HTTP-результата в file collector

В `file-operations-collector.ps1` POST выполняется через `HttpClient`, но код ответа не валидируется (`IsSuccessStatusCode` не проверяется), ошибки частично только логируются.

**Риск:** «тихая» потеря telemetry при 4xx/5xx.

### 3) Watcher не снимает event subscriptions явно

Есть `Register-ObjectEvent`, но в `finally` disposal только watcher-объектов; отписка событий (`Unregister-Event`) явно не делается.

**Риск:** при рестартах/долгой работе возможно накопление подписок в сессии.

### 4) Screenshot/GUI-зависимость для enforcement

`Capture-IncidentScreenshot` и balloon notification завязаны на `System.Windows.Forms/System.Drawing`.

**Риск:** в non-interactive / service context часть enforcement UX может не работать (событие уйдёт, но скриншот/уведомление может не сформироваться).

---

## Рекомендации (приоритет)

1. **P1:** выровнять дефолтный `ConfigPath` в `dlp-endpoint-signals-collector.ps1` на `C:\ProgramData\AWatch-rus\deployment-config.json`.
2. **P1:** добавить проверку `response.IsSuccessStatusCode` в `file-operations-collector.ps1` и логировать body/status при ошибках.
3. **P2:** сохранить subscription-объекты `Register-ObjectEvent` и делать `Unregister-Event` в `finally`.
4. **P2:** для enforcement/UI добавить fallback режим «headless» (только лог + heartbeat).

---

## Что не удалось проверить в текущей среде

В этом контейнере отсутствует `pwsh`, поэтому не выполнены:

- синтаксический parse всех `*.ps1/*.psm1` через PowerShell parser;
- `Test-ModuleManifest`;
- smoke-run на Windows API (`Get-WinEvent`, `Get-Partition`, `Get-Disk`, `Set-Clipboard`, `Win32_PrintJob`).
