165 lines
7.3 KiB
Markdown
165 lines
7.3 KiB
Markdown
# Email Outbound Collector
|
||
|
||
## Обзор
|
||
|
||
Мониторинг исходящей почты на Windows-эндпоинтах. Два режима работы:
|
||
|
||
| Режим | Источник | Данные |
|
||
|----------|--------------------------------|-------------------------------------------------------|
|
||
| outlook | Outlook COM (Sent Items) | Subject, From, To/CC, вложения, размер тела |
|
||
| smtp | `Get-NetTCPConnection` | SMTP-соединения (порты 25/587/465/2525), процесс |
|
||
|
||
По умолчанию `Mode = 'both'` — оба режима активны одновременно.
|
||
|
||
## Запуск
|
||
|
||
```powershell
|
||
# С deployment-config.json (штатный вариант)
|
||
.\email-outbound-collector.ps1
|
||
|
||
# С явными параметрами
|
||
.\email-outbound-collector.ps1 -ServerHost <AW_SERVER_HOST> -ServerPort 5600 -Mode outlook
|
||
|
||
# Только SMTP мониторинг (без Outlook)
|
||
.\email-outbound-collector.ps1 -ServerHost <AW_SERVER_HOST> -Mode smtp
|
||
```
|
||
|
||
### Параметры
|
||
|
||
| Параметр | По умолчанию | Описание |
|
||
|----------------|-----------------------------------------|---------------------------------|
|
||
| `-ConfigPath` | `C:\ProgramData\AWatch-rus\deployment-config.json` | Путь к конфигу |
|
||
| `-ServerHost` | из конфига | Адрес AW-сервера |
|
||
| `-ServerPort` | из конфига / 5600 | Порт AW-сервера |
|
||
| `-PolicyPath` | из конфига / `dlp-policy.json` | Путь к DLP-политике |
|
||
| `-Mode` | `both` | `outlook`, `smtp`, или `both` |
|
||
| `-PollSeconds` | из конфига / 10 | Интервал опроса |
|
||
|
||
## AW Buckets
|
||
|
||
- `aw-email-monitor_<host>` — все email-события (signal heartbeats)
|
||
- `aw-dlp-incidents_<host>` — инциденты при срабатывании DLP-правил
|
||
|
||
## DLP-политика: секция `endpoint.email`
|
||
|
||
Добавляется в существующий `dlp-policy.json`:
|
||
|
||
```json
|
||
{
|
||
"endpoint": {
|
||
"email": [
|
||
{
|
||
"id": "block-external-attachments",
|
||
"action": "block",
|
||
"severity": "high",
|
||
"minAttachments": 1,
|
||
"externalOnly": true,
|
||
"internalDomain": "@company.ru",
|
||
"message": "Запрещена отправка вложений на внешние адреса"
|
||
},
|
||
{
|
||
"id": "alert-confidential-subject",
|
||
"action": "alert",
|
||
"severity": "medium",
|
||
"subjectRegex": "(?i)(конфиденциально|секретно|для служебного пользования)",
|
||
"message": "Обнаружена отправка письма с пометкой конфиденциальности"
|
||
},
|
||
{
|
||
"id": "alert-personal-data",
|
||
"action": "alert",
|
||
"severity": "high",
|
||
"recipientRegex": "(?i)(gmail\\.com|mail\\.ru|yandex\\.ru|yahoo\\.com)",
|
||
"minAttachments": 1,
|
||
"message": "Отправка вложений на личную почту"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### Параметры правил
|
||
|
||
| Поле | Тип | Описание |
|
||
|-------------------|--------|-----------------------------------------------------------|
|
||
| `id` | string | Уникальный ID правила (обязательно) |
|
||
| `action` | string | `alert` (по умолчанию) или `block` |
|
||
| `severity` | string | `low`, `medium`, `high`, `critical` |
|
||
| `subjectRegex` | string | Regex по теме письма |
|
||
| `recipientRegex` | string | Regex по списку получателей |
|
||
| `senderRegex` | string | Regex по адресу отправителя |
|
||
| `attachmentRegex` | string | Regex по именам вложений |
|
||
| `minAttachments` | int | Минимальное количество вложений для срабатывания |
|
||
| `minBodyLength` | int | Минимальная длина тела письма |
|
||
| `externalOnly` | bool | Срабатывать только на внешних получателей |
|
||
| `internalDomain` | string | Домен организации (используется с `externalOnly`) |
|
||
| `cooldownSeconds` | int | Cooldown между повторными инцидентами |
|
||
| `message` | string | Текст уведомления пользователю и в инцидент |
|
||
|
||
## Enforcement (action: "block")
|
||
|
||
**Outlook mode**: письмо перемещается из Sent Items в Drafts. Пользователь получает balloon notification.
|
||
|
||
**SMTP mode**: только уведомление (перехват SMTP-соединения на сетевом уровне не реализуем из PowerShell). Инцидент записывается с `enforced: false`.
|
||
|
||
## Телеметрия
|
||
|
||
### Heartbeat `email_sent` (Outlook mode)
|
||
```json
|
||
{
|
||
"signalType": "email_sent",
|
||
"subject": "<sha256 hash>",
|
||
"sender": "user@company.ru",
|
||
"recipientCount": 3,
|
||
"recipients": "<sha256 hash>",
|
||
"attachmentCount": 2,
|
||
"attachmentNames": "report.xlsx; data.csv",
|
||
"bodyLength": 1520,
|
||
"collectionMode": "outlook"
|
||
}
|
||
```
|
||
|
||
### Heartbeat `smtp_connection` (SMTP mode)
|
||
```json
|
||
{
|
||
"signalType": "smtp_connection",
|
||
"remoteAddress": "74.125.205.108",
|
||
"remotePort": 587,
|
||
"processId": 12340,
|
||
"processName": "OUTLOOK",
|
||
"collectionMode": "smtp"
|
||
}
|
||
```
|
||
|
||
### Incident
|
||
```json
|
||
{
|
||
"ruleId": "block-external-attachments",
|
||
"action": "block",
|
||
"severity": "high",
|
||
"signalType": "email_outbound",
|
||
"subject": "<sha256>",
|
||
"attachmentCount": 2,
|
||
"enforced": true
|
||
}
|
||
```
|
||
|
||
## Приватность
|
||
|
||
- Тема и получатели записываются как SHA256-хеш (не открытый текст).
|
||
- Тело письма не читается и не хранится — записывается только длина.
|
||
- Имена вложений записываются открытым текстом (для DLP-анализа).
|
||
|
||
## Интеграция в ensemble
|
||
|
||
Добавьте в `launch-watchers.ps1` или Task Scheduler:
|
||
|
||
```powershell
|
||
Start-Process powershell.exe -ArgumentList '-ExecutionPolicy Bypass -File "C:\ProgramData\AWatch-rus\email-outbound-collector.ps1"' -WindowStyle Hidden
|
||
```
|
||
|
||
## Требования
|
||
|
||
- **Outlook mode**: Microsoft Outlook установлен и настроен для текущего пользователя.
|
||
- **SMTP mode**: Не требует дополнительного ПО. Работает на уровне TCP-соединений.
|
||
- **Enforcement (block)**: Outlook mode — требует доступ к COM объекту Outlook.
|