Классификация многоуровневых поставщиков служб и приложений
Примечание.
Поставщики многоуровневой службы устарели. Начиная с Windows 8 и Windows Server 2012, используйте платформу фильтрации Windows.
Winsock 2 содержит многоуровневые протоколы. Многоуровневый протокол — это тот, который реализует только функции обмена данными с более высоким уровнем, используя базовый стек транспорта для фактического обмена данными с удаленной конечной точкой. Пример многоуровневого протокола или многоуровневого поставщика услуг — это уровень безопасности, который добавляет протокол к процессу создания подключения для выполнения проверки подлинности и установления взаимно согласованной схемы шифрования. Таким протоколом безопасности обычно требуются службы базового надежного транспортного протокола, например TCP или SPX. Термин базовый протокол, реализованный базовым поставщиком, относится к поставщику Winsock, который реализует протокол, например TCP или SPX, который может выполнять обмен данными с удаленной конечной точкой. Термин многоуровневый протокол используется для описания протокола, который не может быть изолированным. Эти многоуровневые протоколы устанавливаются как поставщики служб winsock layered (LSPs).
Примером LSP является поставщик услуг клиент межсетевого экрана (Майкрософт), установленный в составе сервера безопасности и проверки подлинности Интернета (ISA) на клиентах. Поставщик услуг клиент межсетевого экрана (Майкрософт) устанавливается через базовые поставщики Winsock для TCP и UDP. Библиотека динамической компоновки (DLL) в клиентском программном обеспечении брандмауэра ISA становится поставщиком служб с уровнем Winsock, который все приложения Winsock используют прозрачно. Таким образом, клиент LSP брандмауэра ISA может перехватывать вызовы функции Winsock из клиентских приложений, а затем направлять запрос к исходному базовому поставщику услуг, если назначение является локальным или в службу брандмауэра на компьютере сервера ISA Server, если назначение является удаленным. Аналогичный LSP устанавливается в составе службы брандмауэра Microsoft Forefront и клиента шлюза управления угрозами (TMG) на клиентах.
Во время инициализации LSP LSP должен предоставлять указатели на ряд функций интерфейса поставщика услуг Winsock (SPI). Эти функции будут вызываться во время обычной обработки слоем непосредственно над LSP (другой LSP или Ws2_32.DLL).
Можно определить категории LSP на основе подмножества функций SPI, реализующих LSP, и природу дополнительной обработки, выполняемой для каждой из этих функций. Классифицируя LSPS, а также классифицируя приложения, использующие сокеты Winsock, можно выборочно определить, должен ли LSP участвовать в данном процессе во время выполнения.
В Windows Vista и более поздних версиях новый метод предоставляется для классификации поставщиков служб и приложений с уровнем Winsock, чтобы загружать только определенные LSPS. Существует несколько причин для добавления этих функций.
Одной из основных причин является то, что некоторые системные критически важные процессы, такие как winlogon и lsass, создают сокеты, но эти процессы не используют эти сокеты для отправки трафика в сети. Поэтому большинство LSPS не должны загружаться в эти процессы. Также было задокументировано несколько случаев, когда ошибки LSPS могут привести к сбою lsass.exe . Если lsass завершает работу, система принудительно завершает работу. Побочным эффектом этих системных процессов загрузки LSPs является то, что эти процессы никогда не завершаются, поэтому при установке или удалении LSP требуется перезагрузка.
Вторичная причина заключается в том, что в некоторых случаях приложения могут не загружать определенные LSPS. Например, некоторые приложения могут не загружать криптографические LSPS, которые могут предотвратить взаимодействие приложения с другими системами, на которых не установлен cyptographic LSP.
Наконец, категории LSP можно использовать другими LSPS для определения того, где в цепочке протоколов Winsock они должны установить себя. В течение многих лет различные разработчики LSP хотели, чтобы узнать, как будет вести себя LSP. Например, LSP, проверяющий поток данных, должен быть выше LSP, который шифрует данные. Конечно, этот метод классификации LSP не является дурак доказательством, так как он полагается на сторонние LSPs, чтобы классифицировать себя соответствующим образом.
Классификация LSP и другие улучшения безопасности в Windows Vista и более поздних версий предназначены для предотвращения непреднамеренной установки вредоносных LSPs пользователями.
Категории LSP
В Windows Vista и более поздних версиях LSP можно классифицировать на основе взаимодействия с вызовами и данными сокетов Windows. Категория LSP — это определяемая группа поведения в подмножестве функций Winsock SPI. Например, фильтр содержимого HTTP будет классифицироваться как инспектор данных (категория LSP_INSPECTOR). Категория LSP_INSPECTOR будет проверять (но не изменять) параметры для передачи данных функций SPI. Приложение может запрашивать категорию LSP и не загружать LSP на основе категории LSP и набора разрешенных категорий LSP приложения.
В следующей таблице перечислены категории, в которые можно классифицировать LSP.
Категория LSP | Description |
---|---|
LSP_CRYPTO_COMPRESS | LSP — это поставщик шифрования или сжатия данных. |
LSP_FIREWALL | LSP — это поставщик брандмауэра. |
LSP_LOCAL_CACHE | LSP — это локальный поставщик кэша. |
LSP_INBOUND_MODIFY | LSP изменяет входящие данные. |
LSP_INSPECTOR | LSP проверяет или фильтрует данные. |
LSP_OUTBOUND_MODIFY | LSP изменяет исходящие данные. |
LSP_PROXY | LSP выступает в качестве прокси-сервера и перенаправляет пакеты. |
LSP_REDIRECTOR | LSP — это сетевой перенаправление. |
LSP_SYSTEM | LSP является приемлемым для использования в службах и системных процессах. |
LSP может принадлежать нескольким категориям. Например, LSP брандмауэра или безопасности может принадлежать как к категориям инспектора (LSP_INSPECTOR), так и к категориям брандмауэра (LSP_FIREWALL).
Если LSP не имеет набора категорий, он считается в категории "Все остальные". Эта категория LSP не будет загружена в службы или системные процессы (например, lsass, winlogon и многие процессы svchost).
Классификация LSPS
Несколько новых функций доступны в Windows Vista и более поздних версиях для классификации LSP:
Чтобы классифицировать LSP, функция WSCSetProviderInfo или WSCSetProviderInfo32 вызывается с идентификатором GUID для идентификации скрытой записи LSP, класса информации, заданного для этой записи протокола LSP, и набора флагов, используемых для изменения поведения функции.
Функция WSCGetProviderInfo или WSCGetProviderInfo32 аналогично используется для извлечения данных, связанных с классом сведений для LSP.
Классификация приложений
Несколько новых функций доступны в Windows Vista и более поздних версиях для классификации приложения:
Чтобы классифицировать приложение, функция WSCSetApplicationCategory вызывается с путем загрузки к исполняемому изображению для идентификации приложения, аргументов командной строки, используемых при запуске приложения, и категорий LSP, которые разрешены для всех экземпляров этого приложения.
Функция WSCGetApplicationCategory аналогично используется для получения категорий поставщика многоуровневой службы (LSP), связанных с приложением.
Определение того, какие LSPS загружаются
Последняя часть классификации LSP определяет, какие LSPS будут загружены в какие процессы. При загрузке Winsock следующие сравнения выполняются из категории приложения и категорий LSP для всех установленных LSPs:
- Если приложение не классифицируется, разрешите загрузку всех LSPS в процесс.
- Если приложение и LSP имеют назначенные категории, все из следующих значений должны иметь значение true:
- Хотя бы одна из категорий LSP присутствует в указанных категориях приложения.
В категориях LSPs указаны только категории, указанные в указанных категориях приложения. Например, если приложение указывает категорию, она должна находиться в категории LSP.
Если категория LSP_SYSTEM присутствует в категории приложения, она должна присутствовать в категориях LSP.
Примечание.
Если LSP не классифицируется, ее категория фактически равна нулю. Для сопоставления все указанные категории LSP должны присутствовать в категориях приложения (категории приложения должны быть супермножеством категорий LSP) с предостережением о том, что если LSP_SYSTEM присутствует в категории приложения, он также должен присутствовать в категории LSP.
Рассмотрим следующий пример:
Приложение Foo.exe классифицируется как LSP_SYSTEM + LSP_FIREWALL + LSP_CRYPTO_COMPRESS. Приложение Bar.exe классифицируется как LSP_FIREWALL + LSP_CRYPTO_COMPRESS. В системе установлено четыре LSPS:
- LSP1 имеет категорию LSP_SYSTEM.
- LSP2 не является набором категорий, поэтому его категория равна нулю.
- LSP3 имеет категорию LSP_FIREWALL.
- LSP4 имеет категории LSP_SYSTEM + LSP_FIREWALL + LSP_CRYPTO_COMPRESS + LSP_INSPECTOR
В этом примере приложение Foo.exe будет загружать только LSP1, а приложение Bar.exe загружает LSP3.
Определение установленных поставщиков Winsock
Пакет средств разработки программного обеспечения Microsoft Windows (SDK) включает пример программы Winsock, которую можно использовать для определения поставщиков транспорта Winsock, установленных на локальном компьютере. По умолчанию исходный код для этого примера Winsock устанавливается в следующем каталоге пакета SDK для Windows 7:
C:\Program Files\Microsoft SDKKs\Windows\v7.0\Samples\NetDs\winsock\LSP
Этот пример — это служебная программа для установки и тестирования поставщиков многоуровневой службы. Но его также можно использовать для программного сбора подробных сведений из каталога Winsock на локальном компьютере. Чтобы получить список всех текущих поставщиков Winsock, включая как базовых поставщиков, так и поставщиков служб слоев, создайте этот пример Winsock и выполните следующую команду консоли:
instlsp -p
Выходные данные будут списком поставщиков Winsock, установленных на локальном компьютере, включая многоуровневых поставщиков услуг. В выходных данных перечислены идентификатор каталога и имя строки для поставщика Winsock.
Чтобы получить более подробную информацию обо всех поставщиках Winsock, выполните следующую команду консоли:
instlsp -p -v
Выходные данные будут списком WSAPROTOCOL_INFO структур, поддерживаемых на локальном компьютере.
Чтобы получить список только многоуровневых поставщиков услуг, установленных на локальном компьютере, выполните следующую команду консоли:
instlsp -l
Чтобы сопоставить структуру LSP, выполните следующую команду консоли:
instlsp -m
Примечание.
Функция TDI устарела и будет удалена в будущих версиях Microsoft Windows. В зависимости от способа использования TDI используйте ядро Winsock (WSK) или платформу фильтрации Windows (МПП). Дополнительные сведения о МПП и WSK см. в разделе "Платформа фильтрации Windows" и "Ядро Winsock". Запись блога о сети Windows Core о WSK и TDI см. в разделе "Общие сведения о ядре Winsock (WSK)".