- Replace default config paths from C:\ProgramData\ActivityWatch to C:\ProgramData\AWatch-rus in dlp-endpoint-signals-collector.ps1 and email-outbound-collector.ps1 - Add isLikelyClientHost() function to reject IP/localhost as valid hostname for bucket selection in aw-ru-patch.js - Add docs/dlp-reliability-roadmap.md and docs/powershell-analysis.md - Update README.md with links to new documentation Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
4.2 KiB
Анализ DLP-скриптов PowerShell (работоспособность)
Дата анализа: 2026-05-04 (UTC)
Проверенный scope
windows/dlp-endpoint-signals-collector.ps1windows/file-operations-collector.ps1windows/dlp-policy.example.jsonwindows/web-category-rules.example.json
Ключевой итог
DLP-скрипты в целом рабочие по архитектуре (heartbeat в ActivityWatch, policy-driven правила, cooldown, enforcement), но есть критичный риск misconfiguration и несколько эксплуатационных рисков.
Что точно хорошо
- В обоих коллекторах включены
Set-StrictMode -Version Latestи$ErrorActionPreference = 'Stop'. - Есть отправка событий в отдельные bucket’ы (
aw-dlp-endpoint-signals_*,aw-dlp-incidents_*,aw-file-operations_*). - В endpoint-коллекторе реализованы:
- правила по буферу обмена / USB / печати,
- suppression через cooldown (
Should-EmitByCooldown), - опциональный screenshot capture при инциденте.
- В 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 может не работать (событие уйдёт, но скриншот/уведомление может не сформироваться).
Рекомендации (приоритет)
- P1: выровнять дефолтный
ConfigPathвdlp-endpoint-signals-collector.ps1наC:\ProgramData\AWatch-rus\deployment-config.json. - P1: добавить проверку
response.IsSuccessStatusCodeвfile-operations-collector.ps1и логировать body/status при ошибках. - P2: сохранить subscription-объекты
Register-ObjectEventи делатьUnregister-Eventвfinally. - 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).