Понимание Windows-сети_WFP
Categories:
- Понимание 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 пакеты копируются и собираются без операций с исходным пакетом, что не влияет на бизнес.
Подписка может использовать шаблон фильтра для уменьшения количества пакетов, которые нужно обрабатывать:
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 для получения событий.