5.1 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\ActivityWatch\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).
Команды для целевой Windows-проверки
# 1) Синтаксис
Get-ChildItem .\windows -Recurse -Include *.ps1,*.psm1 | ForEach-Object {
[void][System.Management.Automation.Language.Parser]::ParseFile($_.FullName,[ref]$null,[ref]$errs)
if($errs){ "FAIL $($_.FullName)" } else { "OK $($_.FullName)" }
}
# 2) Быстрый запуск file collector (с логом)
.\windows\file-operations-collector.ps1 -ConfigPath 'C:\ProgramData\AWatch-rus\deployment-config.json' -LogPath 'C:\ProgramData\AWatch-rus\collector-fileops.log'
# 3) Быстрый запуск endpoint collector (с логом)
.\windows\dlp-endpoint-signals-collector.ps1 -ConfigPath 'C:\ProgramData\AWatch-rus\deployment-config.json' -PolicyPath 'C:\ProgramData\AWatch-rus\dlp-policy.json' -LogPath 'C:\ProgramData\AWatch-rus\collector-endpoint.log'