Получение заблокированного сетевого трафика Windows
Categories:
- Получение заблокированного сетевого трафика Windows
Получение заблокированного сетевого трафика Windows
- Получение заблокированного сетевого трафика Windows
- Нужно определить заблокированный трафик, заблокированный трафик включает в себя входящие и исходящие направления.
- Два вида блокировки: на основе соединения (connection) и на основе пакета (packet). Отбрасывание пакетов происходит часто, необходимо проанализировать причины отбрасывания, блокировка на основе соединения более соответствует реальной ситуации.
- Многие нормально обработанные пакеты также будут отброшены, поэтому необходимо различать drop и block поведение, мы в основном сосредоточены на block ситуации.
Создание тестовой среды
WFP в основном работает в usermode, часть в kernalmode, функции представлены в виде драйвера, создание тестовой среды довольно сложное. Рекомендуется использовать другой физический компьютер в качестве тестовой машины, после компиляции на компьютере разработчика, отправить на тестовую машину для удаленной отладки. Из-за ограничений условий, мы также можем напрямую отлаживать локально.
- Microsoft WFP Sample project
- Только обращайте внимание на: Windows-driver-samples\network\trans\WFPSampler
- WFPSampler project guide
Проблемы компиляции:
Другие проблемы:
Получение событий блокировки через аудит
По умолчанию аудит WFP отключен.
- Можно включить аудит по категориям с помощью MMC управления групповой политикой, MMC управления локальной безопасностью или команды auditpol.exe.
- Можно включить аудит по подкатегориям с помощью команды auditpol.exe.
- Должен использоваться guid для настройки, иначе есть проблемы локализации для разных языковых систем.
- Аудит использует циклический журнал, 128KB, не нужно беспокоиться о потреблении ресурсов
Категорияhttps://docs.microsoft.com/en-us/windows/win32/secauthz/auditing-constants
| Category/Subcategory | GUID |
|---|---|
| … | … |
| Object Access | {6997984A-797A-11D9-BED3-505054503030} |
| Policy Change | {6997984D-797A-11D9-BED3-505054503030} |
| … | … |
Подкатегории Object Access и соответствующие GUID https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-gpac/77878370-0712-47cd-997d-b07053429f6d
| Object Access Subcategory | Subcategory GUID | Inclusion Setting |
|---|---|---|
| … | … | … |
| Filtering Platform Packet Drop | {0CCE9225-69AE-11D9-BED3-505054503030} | No Auditing |
| Filtering Platform Connection | {0CCE9226-69AE-11D9-BED3-505054503030} | No Auditing |
| Other Object Access Events | {0CCE9227-69AE-11D9-BED3-505054503030} | No Auditing |
| … | … | … |
Подкатегории Policy Change и соответствующие GUID:
| Policy Change Subcategory | Subcategory GUID |
|---|---|
| Audit Policy Change | {0CCE922F-69AE-11D9-BED3-505054503030} |
| Authentication Policy Change | {0CCE9230-69AE-11D9-BED3-505054503030} |
| Authorization Policy Change | {0CCE9231-69AE-11D9-BED3-505054503030} |
| MPSSVC Rule-Level Policy Change | {0CCE9232-69AE-11D9-BED3-505054503030} |
| Filtering Platform Policy Change | {0CCE9233-69AE-11D9-BED3-505054503030} |
| Other Policy Change Events | {0CCE9234-69AE-11D9-BED3-505054503030} |
# Справочник auditpol: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/auditpol
# Этот раздел в основном сосредоточен на категории 'Object Access'
# Получить доступные для запроса поля
# -v показывает GUID, -r показывает отчет CSV
auditpol /list /category /v
auditpol /list /subcategory:* /v
# Получить настройки аудита для подкатегории
auditpol /get /category:'Object Access' /r | ConvertFrom-Csv| Get-Member
# Запросить GUID
auditpol /get /category:'Object Access' /r | ConvertFrom-Csv| Format-Table Subcategory,'Subcategory GUID','Inclusion Setting'
# Найти подкатегорию
auditpol /list /subcategory:"Object Access","Policy Change" -v
# Резервное копирование
auditpol /backup /file:d:\audit.bak
# Восстановление
auditpol /restore /file:d:\audit.bak
# Изменение политики
# **Policy Change** | {6997984D-797A-11D9-BED3-505054503030}
auditpol /set /category:"{6997984D-797A-11D9-BED3-505054503030}" /success:disable /failure:disable
# Filtering Platform Policy Change | {0CCE9233-69AE-11D9-BED3-505054503030}
auditpol /set /subcategory:"{0CCE9233-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable
# **Object Access** | {6997984A-797A-11D9-BED3-505054503030}
auditpol /get /category:"{6997984A-797A-11D9-BED3-505054503030}"
auditpol /set /category:"{6997984A-797A-11D9-BED3-505054503030}" /success:disable /failure:disable
# Filtering Platform Packet Drop | {0CCE9225-69AE-11D9-BED3-505054503030}
auditpol /set /subcategory:"{0CCE9225-69AE-11D9-BED3-505054503030}" /success:disable /failure:enable
# Filtering Platform Connection | {0CCE9226-69AE-11D9-BED3-505054503030}
auditpol /set /subcategory:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:disable /failure:enable
# Чтение журналов
$Events = Get-WinEvent -LogName 'Security'
foreach ($event in $Events) {
ForEach ($line in $($event.Message -split "`r`n")) {
Write-host $event.RecordId ':' $Line
break
}
}
Описание событий:
| Event ID | Explanation |
|---|---|
| 5031(F) | Служба Windows Firewall заблокировала приложение от приема входящих соединений в сети. |
| 5150(-) | Windows Filtering Platform заблокировал пакет. |
| 5151(-) | Более строгий фильтр Windows Filtering Platform заблокировал пакет. |
| 5152(F) | Windows Filtering Platform заблокировал пакет. |
| 5153(S) | Более строгий фильтр Windows Filtering Platform заблокировал пакет. |
| 5154(S) | Windows Filtering Platform разрешил приложению или службе прослушивать порт для входящих соединений. |
| 5155(F) | Windows Filtering Platform заблокировал приложение или службу от прослушивания порта для входящих соединений. |
| 5156(S) | Windows Filtering Platform разрешил соединение. |
| 5157(F) | Windows Filtering Platform заблокировал соединение. |
| 5158(S) | Windows Filtering Platform разрешил привязку к локальному порту. |
| 5159(F) | Windows Filtering Platform заблокировал привязку к локальному порту. |
Подробное описание событий, на которые следует обратить внимание:
- Audit Filtering Platform Packet Drop
Такие события генерируются в очень большом объеме, рекомендуется обратить внимание на событие 5157, оно записывает почти ту же информацию, но 5157 записывает на основе соединения, а не на основе пакета.
Объем событий отказа для этой подкатегории обычно очень высокий и обычно используется для устранения неполадок. Если вам нужно контролировать заблокированные соединения, лучше использовать «5157(F): Windows Filtering Platform заблокировал соединение», потому что оно содержит почти ту же информацию и генерируется на уровне соединения, а не на уровне пакета.

- Audit Filtering Platform Connection
- Рекомендуется обращать внимание только на события отказа, такие как заблокированные соединения, и по мере необходимости обращать внимание на разрешенные соединения.
- 5031
- Если у вас нет никаких правил брандмауэра (разрешения или запрета) в Windows Firewall для конкретных приложений, вы получите это событие из слоя Windows Filtering Platform, потому что по умолчанию этот слой блокирует любые входящие соединения.
51505151- 5155
- 5157
- 5159
Получение информации провайдера
# Получить информацию провайдера, связанную с security
Get-WinEvent -ListProvider "*Security*" | Select-Object providername,id
# Microsoft-Windows-Security-Auditing 54849625-5478-4994-a5ba-3e3b0328c30d
# Получить информацию о задачах, предоставляемых провайдером
Get-WinEvent -ListProvider "Microsoft-Windows-Security-Auditing" | Select-Object -ExpandProperty tasks
# SE_ADT_OBJECTACCESS_FIREWALLCONNECTION 12810 Filtering Platform Connection 00000000-0000-0000-0000-000000000000
| ProviderName | Id |
|---|---|
| Security Account Manager | 00000000-0000-0000-0000-000000000000 |
| Security | 00000000-0000-0000-0000-000000000000 |
| SecurityCenter | 00000000-0000-0000-0000-000000000000 |
| Microsoft-Windows-Security-SPP-UX-GenuineCenter-Logging | fb829150-cd7d-44c3-af5b-711a3c31cedc |
| Microsoft-Windows-Security-Mitigations | fae10392-f0af-4ac0-b8ff-9f4d920c3cdf |
| Microsoft-Windows-VerifyHardwareSecurity | f3f53c76-b06d-4f15-b412-61164a0d2b73 |
| Microsoft-Windows-SecurityMitigationsBroker | ea8cd8a5-78ff-4418-b292-aadc6a7181df |
| Microsoft-Windows-Security-Adminless | ea216962-877b-5b73-f7c5-8aef5375959e |
| Microsoft-Windows-Security-Vault | e6c92fb8-89d7-4d1f-be46-d56e59804783 |
| Microsoft-Windows-Security-Netlogon | e5ba83f6-07d0-46b1-8bc7-7e669a1d31dc |
| Microsoft-Windows-Security-SPP | e23b33b0-c8c9-472c-a5f9-f2bdfea0f156 |
| Microsoft-Windows-Windows Firewall With Advanced Security | d1bc9aff-2abf-4d71-9146-ecb2a986eb85 |
| Microsoft-Windows-Security-SPP-UX-Notifications | c4efc9bb-2570-4821-8923-1bad317d2d4b |
| Microsoft-Windows-Security-SPP-UX-GC | bbbdd6a3-f35e-449b-a471-4d830c8eda1f |
| Microsoft-Windows-Security-Kerberos | 98e6cfcb-ee0a-41e0-a57b-622d4e1b30b1 |
| Microsoft-Windows-Security-ExchangeActiveSyncProvisioning | 9249d0d0-f034-402f-a29b-92fa8853d9f3 |
| Microsoft-Windows-NetworkSecurity | 7b702970-90bc-4584-8b20-c0799086ee5a |
| Microsoft-Windows-Security-SPP-UX | 6bdadc96-673e-468c-9f5b-f382f95b2832 |
| Microsoft-Windows-Security-Auditing | 54849625-5478-4994-a5ba-3e3b0328c30d |
| Microsoft-Windows-Security-LessPrivilegedAppContainer | 45eec9e5-4a1b-5446-7ad8-a4ab1313c437 |
| Microsoft-Windows-Security-UserConsentVerifier | 40783728-8921-45d0-b231-919037b4b4fd |
| Microsoft-Windows-Security-IdentityListener | 3c6c422b-019b-4f48-b67b-f79a3fa8b4ed |
| Microsoft-Windows-Security-EnterpriseData-FileRevocationManager | 2cd58181-0bb6-463e-828a-056ff837f966 |
| Microsoft-Windows-Security-Audit-Configuration-Client | 08466062-aed4-4834-8b04-cddb414504e5 |
| Microsoft-Windows-Security-IdentityStore | 00b7e1df-b469-4c69-9c41-53a6576e3dad |
Создание событий блокировки
Необходимо обратить особое внимание на то, что при создании событий блокировки это повлияет на работу других программ на локальной машине!
Можно своевременно использовать .\WFPSampler.exe -clean для очистки фильтра.
Шаги операции:
Включить аудит Filtering Platform Connection,
auditpol /set /subcategory:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:enable /failure:enableОткрыть Event Viewer, создать Custom View, создать фильтр, пока мы сосредоточимся только на трех событиях 5155, 5157, 5159.

Создать фильтр, мы используем WFPSampler.exe для создания фильтра, блокируем прослушивание локального порта 80,
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_LISTEN_V4 -iplp 80Использовать сторонний (не IIS) http сервер, здесь используем nginx, по умолчанию прослушивает порт 80, дважды щелкните для запуска, что приведет к событию 5155

Восстановить фильтр,
.\WFPSampler.exe -cleanВосстановить аудиторский переключатель,
auditpol /set /category:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:disable /failure:disable
# 5155 заблокировало приложение или службу от прослушивания порта для входящих соединений
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_LISTEN_V4
# 5157 заблокировало соединение
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_CONNECT_V4
# 5159, заблокировало привязку к локальному порту
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4
# Другое
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V4_DISCARD
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_RECV_ACCEPT_V4_DISCARD
.\WFPSampler.exe -s BASIC_ACTION_BLOCK -l FWPM_LAYER_ALE_AUTH_CONNECT_V4_DISCARD
# Чтобы найти конкретный фильтр Windows Filtering Platform по ID, выполните следующую команду:
netsh wfp show filters
# Чтобы найти конкретный ID слоя Windows Filtering Platform, необходимо выполнить следующую команду:
netsh wfp show state
Мониторинг сетевых событий (NET_EVENT)
- Сетевые события поддерживают перечисление поиска, поддерживают подписку.
- Способ перечисления поддерживает настраиваемые условия фильтрации, получение сетевых событий за определенный период времени.
- Способ подписки может вводить функцию callback для реального времени обратной связи.
Поддерживаемые типы событий:
typedef enum FWPM_NET_EVENT_TYPE_ {
FWPM_NET_EVENT_TYPE_IKEEXT_MM_FAILURE = 0,
FWPM_NET_EVENT_TYPE_IKEEXT_QM_FAILURE,
FWPM_NET_EVENT_TYPE_IKEEXT_EM_FAILURE,
FWPM_NET_EVENT_TYPE_CLASSIFY_DROP,
FWPM_NET_EVENT_TYPE_IPSEC_KERNEL_DROP,
FWPM_NET_EVENT_TYPE_IPSEC_DOSP_DROP,
FWPM_NET_EVENT_TYPE_CLASSIFY_ALLOW,
FWPM_NET_EVENT_TYPE_CAPABILITY_DROP,
FWPM_NET_EVENT_TYPE_CAPABILITY_ALLOW,
FWPM_NET_EVENT_TYPE_CLASSIFY_DROP_MAC,
FWPM_NET_EVENT_TYPE_LPM_PACKET_ARRIVAL,
FWPM_NET_EVENT_TYPE_MAX
} FWPM_NET_EVENT_TYPE;
Поддерживаемые условия фильтрации (FWPM_NET_EVENT_ENUM_TEMPLATE):
| Value | Meaning |
|---|---|
| FWPM_CONDITION_IP_PROTOCOL | Номер IP протокола, как указано в RFC 1700. |
| FWPM_CONDITION_IP_LOCAL_ADDRESS | Локальный IP адрес. |
| FWPM_CONDITION_IP_REMOTE_ADDRESS | Удаленный IP адрес. |
| FWPM_CONDITION_IP_LOCAL_PORT | Локальный номер порта транспортного протокола. Для ICMP тип сообщения. |
| FWPM_CONDITION_IP_REMOTE_PORT | Удаленный номер порта транспортного протокола. Для ICMP код сообщения. |
| FWPM_CONDITION_SCOPE_ID | Идентификатор области интерфейса IPv6. Зарезервировано для внутреннего использования. |
| FWPM_CONDITION_ALE_APP_ID | Полный путь приложения. |
| FWPM_CONDITION_ALE_USER_ID | Идентификация локального пользователя. |
Неводные вызовы могут получить только обычные события drop.
Мониторинг сетевых соединений (NetConnection)
По сравнению с мониторингом сетевых событий, мониторинг соединений требует более высоких прав доступа. Способ callback
Вызывающему необходимо иметь доступ FWPM_ACTRL_ENUM к контейнерам объектов соединения и доступ FWPM_ACTRL_READ к объектам соединения. См. Access Control для получения дополнительной информации.
Пока не удалось успешно контролировать сетевые соединения.
Нашел ту же проблему, Receiving in/out traffic stats using WFP user-mode API, и явление, которое я столкнулся в своем исследовании, одинаково, функция подписки не получает никаких сообщений, не получает никаких событий, нет ошибок. Кто-то указал, что в нережиме ядра можно получить только отчеты о событиях drop, что не удовлетворяет потребности в получении событий блокировки.
Пример добавления security descriptor: https://docs.microsoft.com/en-us/windows/win32/fwp/reserving-ports
Приложение уровня контроля (ALE) обзор
- ALE включает в себя ряд фильтров в режиме ядра, поддерживающих состояние фильтрации.
- Фильтры на уровне ALE могут авторизовать создание соединений, распределение портов, управление сокетами, создание raw сокетов и прием в режиме promiscuous.
- Фильтры на уровне ALE классифицируются на основе соединения (connection) или на основе сокета (socket), фильтры на других уровнях могут классифицироваться только на основе пакета (packet).
- Ссылки на фильтры ALE ale-layers
- Дополнительные ссылки на фильтры filtering-layer-identifiers
Кодирование
Большинство функций WFP могут быть вызваны из пользовательского режима или режима ядра. Однако функции пользовательского режима возвращают значения DWORD, представляющие коды ошибок Win32, а функции режима ядра возвращают значения NTSTATUS, представляющие коды состояния NT. Следовательно, имена и семантика функций одинаковы в пользовательском режиме и режиме ядра, но сигнатуры функций различаются. Это требует отдельных заголовков для пользовательского режима и режима ядра. Имена заголовочных файлов пользовательского режима заканчиваются на “u”, имена заголовочных файлов режима ядра заканчиваются на “k”.
Выводы
Требуется только знать о возникновении событий, нет необходимости немедленно обрабатывать события, кроме того, разработка драйвера приведет к большему риску, поэтому было решено использовать аудит событий, мониторинг журналов для генерации событий для получения событий блокировки.
Откройте новый поток для использования NotifyChangeEventLog для мониторинга событий журнала.
Приложение
Архитектура WFP
WFP (Windows Filter Platform) 
Поток данных
Поток данных:
- Пакет поступает в сетевой стек.
- Сетевой стек находит и вызывает шим.
- Шим вызывает процесс классификации на определенном уровне.
- Во время классификации фильтры сопоставляются и принимается результирующее действие. (См. Фильтрация арбитража.)
- Если во время процесса классификации совпадают какие-либо фильтры callout, вызываются соответствующие callout.
- Шим действует на окончательное решение фильтрации (например, отбрасывает пакет).