6.5 KiB
DLP Enforcement (action: "block")
Обзор
Phase 2.5 расширяет DLP endpoint collector функциями активного предотвращения (enforcement).
При action: "block" в правиле DLP-политики коллектор не только регистрирует инцидент, но и выполняет блокирующее действие:
| Канал | Действие при block |
|---|---|
| clipboard | Очистка буфера обмена (Set-Clipboard -Value $null) |
| usb | Перевод USB-диска в read-only (Set-Disk -IsReadOnly) |
Отмена задания печати (Remove-CimInstance Win32_PrintJob) |
Во всех случаях пользователь получает Windows-уведомление (balloon notification) с описанием причины блокировки.
Для cross-OS развития используется отдельный native-first профиль:
docs/dlp-cross-os-native-enforcement.md. Он задает правило: Windows enforcement оставляем
на штатных GPO/AppLocker/Spooler/Storage механизмах, macOS строим через System Extensions/MDM,
Linux через fanotify/auditd/eBPF, ChromeOS через Data Controls. Тяжелый универсальный агент
не является целевой архитектурой.
Конфигурация политики
Формат dlp-policy.json не изменился — поле action в правиле теперь поддерживает значение "block" наряду с "alert" (по умолчанию).
Важно: для production safety action: "block" в конкретном endpoint-правиле не включает
блокировку сам по себе. Реальное enforcement-действие выполняется только если:
nativeControls.modeравно"enforce";nativeControls.rollout.allowGlobalBlock=true;- и
nativeControls.channels.<channel>.actionравно"block"или"blockWithOverride".
Если правило просит block, но native controls находятся в monitor, collector пишет инцидент
как alert и добавляет поля:
requestedAction: "block";enforcementMode;nativeChannelAction;enforcementSuppressed: true.
Пример: блокировка USB записи
{
"defaults": {
"enabled": true,
"action": "alert",
"severity": "medium",
"cooldownSeconds": 300
},
"nativeControls": {
"mode": "enforce",
"rollout": {
"allowGlobalBlock": false
},
"channels": {
"clipboard": {"action": "block"},
"usb": {"action": "block"},
"print": {"action": "block"}
}
},
"endpoint": {
"usb": [
{
"id": "block-all-usb-write",
"action": "block",
"severity": "high",
"message": "Запись на USB-носитель заблокирована политикой DLP"
}
],
"clipboard": [
{
"id": "block-pdn-clipboard",
"action": "block",
"severity": "high",
"regexPatterns": [
"\\b\\d{3}-\\d{3}-\\d{3}\\s?\\d{2}\\b",
"\\b\\d{4}\\s?\\d{6}\\b"
],
"minLength": 8,
"message": "Буфер обмена очищен: обнаружены персональные данные (СНИЛС/паспорт)"
}
],
"print": [
{
"id": "block-confidential-print",
"action": "block",
"severity": "high",
"documentRegex": "(?i)(конфиденциально|секретно|confidential|restricted)",
"message": "Печать заблокирована: документ содержит метку конфиденциальности"
}
]
}
}
Пример: только мониторинг (без блокировки)
{
"endpoint": {
"usb": [
{
"id": "monitor-usb",
"action": "alert",
"severity": "medium",
"message": "Обнаружено подключение USB-носителя"
}
]
}
}
Телеметрия
Каждый инцидент с enforcement записывается в bucket aw-dlp-incidents_<host> с дополнительным полем:
{
"ruleId": "block-all-usb-write",
"action": "block",
"severity": "high",
"signalType": "usb_insert",
"enforced": true,
"driveLetter": "E:",
"volumeName": "FLASH_DRIVE"
}
enforced: true— блокировка выполнена успешноenforced: false— блокировка не удалась (недостаточно прав, устройство недоступно и т.д.)
Требования
- Clipboard block: Не требует повышенных прав.
- USB write-block: Требует запуск от имени администратора (для
Set-Disk -IsReadOnly). При запуске без прав блокировка не сработает, но инцидент будет зарегистрирован сenforced: false. - Print block: Требует права на отмену заданий печати (обычно — SYSTEM или администратор принт-сервера).
Уведомления
При каждой блокировке пользователю показывается Windows balloon notification:
| Канал | Заголовок |
|---|---|
| clipboard | DLP: буфер обмена очищен |
| usb | DLP: USB заблокирован для записи |
DLP: печать заблокирована |
Текст уведомления берётся из поля message правила политики.
Rollback
Для отключения enforcement без изменения кода — смените action с "block" на "alert" в dlp-policy.json. Все правила продолжат мониторинг без блокировки.
Для USB, переведённого в read-only, восстановление:
Get-Disk | Where-Object { $_.BusType -eq 'USB' -and $_.IsReadOnly } | Set-Disk -IsReadOnly $false