Понимание Windows-сети_WFP

  • Понимание Windows-сети_WFP

Понимание Windows-сети

  • Понимание Windows-сети

WFP

Терминология

https://learn.microsoft.com/en-us/windows/win32/fwp/object-model https://learn.microsoft.com/en-us/windows/win32/fwp/basic-operation https://learn.microsoft.com/en-us/windows-hardware/drivers/network

callout: Callout расширяет возможности Windows Filtering Platform. Callout состоит из набора функций callout и GUID-ключа, который однозначно идентифицирует callout. callout driver: Callout driver - это драйвер, который регистрирует callouts в Windows Filtering Platform. Callout driver является типом filter driver. callout function: Callout function - это функция, вызываемая Windows Filtering Platform для выполнения конкретной задачи. Callout function связана с callout. filter: Filter - это набор функций, вызываемых Windows Filtering Platform для выполнения операций фильтрации. Filter состоит из набора функций filter и GUID-ключа, который однозначно идентифицирует filter. filter engine: Filter engine - это компонент Windows Filtering Platform, выполняющий операции фильтрации. Filter engine отвечает за вызов функций filter, зарегистрированных в Windows Filtering Platform. filter layer: Filter layer - это набор функций, вызываемых Windows Filtering Platform для выполнения операций фильтрации. Filter layer состоит из набора функций filter layer и GUID-ключа, который однозначно идентифицирует filter layer.

Диспетчерская очередь вызывает обратные вызовы в максимально сжатые сроки, не дожидаясь заполнения очереди, что обеспечивает возможность удовлетворения требований в реальном времени. Когда обратный вызов пользователя выполняется медленно, блокируемые пакеты максимально вставляются в следующую очередь, лимит очереди составляет 256. Больше заблокированных пакетов кэшируется системой, грубо говоря, кэш-возможность составляет 16500, кэш-возможность системы может варьироваться в зависимости от производительности и конфигурации машины. Когда пользователь обрабатывает пакеты в обратном вызове, существуют две сущности пакетов: Ядро пакета, которое освобождается после того, как обратный вызов обработает очередь. Таким образом, когда обратный вызов выполняется медленно, один вызов может зафиксировать систему на 256 пакетов в кэше. Копирование в обратном вызове, немедленно освобождается после обработки одного пакета.

В FwppNetEvent1Callback пакеты копируются и собираются без операций с исходным пакетом, что не влияет на бизнес.

Подписка может использовать шаблон фильтра для уменьшения количества пакетов, которые нужно обрабатывать:

https://learn.microsoft.com/en-us/windows/win32/api/fwpmtypes/ns-fwpmtypes-fwpm_net_event_enum_template0

filterCondition

Массив структур FWPM_FILTER_CONDITION0, содержащих различные условия фильтрации (дублированные условия фильтрации приведут к ошибке). Все условия должны быть истинными для выполнения действия. Другими словами, условия объединены логическим И. Если условия не указаны, действие всегда выполняется.

Нельзя использовать одинаковый filter Все отношения между фильтрами являются “и”, все должны быть удовлетворены Согласно документации Microsoft, поддерживается восемь типов фильтров, на самом деле поддерживается больше типов фильтров.

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

Идентификация локального пользователя. Анализ зарегистрированных в системе подписок показал наличие двух подписок, просмотр их GUID sessionKey не позволил определить, кто их зарегистрировал, анализ показал, что каждая подписка реализует следующие функции:

Подписана на все данные пакетов FWPM_NET_EVENT_TYPE_CLASSIFY_DROP, подсчитаны все отброшенные пакеты. Подписана на все данные пакетов FWPM_NET_EVENT_TYPE_CLASSIFY_ALLOW, может использоваться для статистики трафика Эти две подписки используют condition filter FWPM_CONDITION_NET_EVENT_TYPE(206e9996-490e-40cf-b831-b38641eb6fcb), что показывает, что фильтры, которые можно реализовать, не ограничиваются 8, упомянутыми в документации Microsoft.

Больше исследований показали, что пользовательский режим вызова интерфейса может захватывать только события drop, события, не являющиеся drop, должны быть получены в режиме ядра, поэтому micro-isolation не может использовать FWPM_CONDITION_NET_EVENT_TYPE для получения событий.