Categorización de proveedores de servicios y aplicaciones por niveles
Nota:
Los proveedores de servicio por niveles (LSP) están en desuso. A partir de Windows 8 y Windows Server 2012, use la Plataforma de filtrado de Windows.
WinSock 2 admite protocolos en capas. Un protocolo por niveles es uno que implementa solo funciones de comunicaciones de nivel superior, mientras se basa en una pila de transporte subyacente para el intercambio real de datos con un punto de conexión remoto. Un ejemplo de un protocolo o proveedor de servicios por niveles sería un nivel de seguridad que agrega protocolo al proceso de establecimiento de conexión para realizar la autenticación y establecer un esquema de cifrado mutuamente acordado. Este protocolo de seguridad normalmente requeriría los servicios de un protocolo de transporte confiable subyacente, como TCP o SPX. El término "protocolo base" implementado por el proveedor base hace referencia a un proveedor de WinSock que implementa un protocolo como TCP o SPX que es capaz de realizar comunicaciones de datos con un punto de conexión remoto. El término "protocolo por niveles" se usa para describir un protocolo que no puede ser independiente. Estos protocolos por niveles se instalan como proveedores de servicios por niveles de WinSock (LSP).
Un ejemplo de un LSP es el proveedor de servicios de cliente de firewall de Microsoft instalado como parte del servidor de autenticación y seguridad de Internet (ISA) en los clientes. El proveedor de servicios de cliente de Firewall de Microsoft se instala a través de los proveedores base de WinSock para TCP y UDP. Una biblioteca de vínculos dinámicos (DLL) en el software cliente de Firewall de ISA se convierte en un proveedor de servicios por niveles de WinSock que todas las aplicaciones Winsock usan de forma transparente. De este modo, el LSP cliente de Firewall de ISA puede interceptar las llamadas de funciones de WinSock desde aplicaciones cliente y, a continuación, enrutar una solicitud al proveedor de servicios base subyacente original si el destino es local o al servicio Firewall en un equipo de ISA Server si el destino es remoto. Se instala un LSP similar como parte del servicio Microsoft Forefront Firewall y el cliente de Threat Management Gateway (TMG) en los clientes.
Durante la inicialización de LSP, el LSP debe proporcionar punteros a una serie de funciones de interfaz de proveedor de servicios (SPI) de WinSock. A estas funciones se les llamará durante el procesamiento normal por el nivel directamente superior al LSP (ya sea otro LSP o Ws2_32.DLL).
Es posible definir categorías LSP basadas en el subconjunto de funciones SPI que implementa un LSP y la naturaleza del procesamiento adicional realizado para cada una de esas funciones. Mediante la clasificación de LSP, así como la clasificación de aplicaciones que usan sockets WinSock, es posible determinar selectivamente si un LSP debe participar en un proceso determinado en tiempo de ejecución.
En Windows Vista y versiones posteriores, se proporciona un nuevo método para clasificar tanto los proveedores de servicios por niveles de WinSock como las aplicaciones para que solo se carguen determinados LSP. Hay varias razones para agregar estas características.
Una de las principales razones es que determinados procesos críticos del sistema, como winlogon y lsass, crean sockets, pero estos procesos no usan estos sockets para enviar ningún tráfico en la red. Por lo tanto, la mayoría de los LSP no deben cargarse en estos procesos. También se han documentado varios casos en los que LSP con errores pueden provocar que lsass.exe se bloquee. Si lsass se bloquea, el sistema fuerza un apagado. Un efecto secundario de estos procesos del sistema al cargar LSP es que estos procesos nunca se cierran, por lo que, cuando se instala o quita un LSP, se requiere un reinicio.
Un motivo secundario es que hay algunos casos en los que es posible que las aplicaciones no quieran cargar determinados LSP. Por ejemplo, es posible que algunas aplicaciones no quieran cargar LSP criptográficos que podrían impedir que la aplicación se comunique con otros sistemas que no tengan instalado el LSP ciptográfico.
Por último, otros LSP pueden usar las categorías de LSP para determinar dónde se deben instalar en la cadena del protocolo WinSock. Durante años, numerosos desarrolladores de LSP han querido conocer una manera de saber cómo se comportará un LSP. Por ejemplo, un LSP que inspecciona el flujo de datos querría estar por encima de un LSP que cifre los datos. Por supuesto, este método de categorización de LSP no es infalible, ya que depende de que los LSP de terceros se categoricen a sí mismos de manera adecuada.
La categorización de LSP y otras mejoras de seguridad en Windows Vista y versiones posteriores están diseñadas para ayudar a evitar que los usuarios instalen de forma involuntaria los LSP malintencionados.
Categorías de LSP
En Windows Vista y versiones posteriores, un LSP se puede clasificar en función de cómo interactúa con las llamadas y los datos de Windows Sockets. Una categoría de LSP es un grupo identificable de comportamientos en un subconjunto de funciones SPI de WinSock. Por ejemplo, un filtro de contenido HTTP se clasificaría como un inspector de datos (la categoría LSP_INSPECTOR). La categoría LSP_INSPECTOR inspeccionará (pero no modificará) parámetros para transferir funciones SPI de transferencia de datos. Una aplicación puede consultar la categoría de un LSP y elegir no cargarlo en función de la categoría de LSP y el conjunto de categorías de LSP permitidas de la aplicación.
En la tabla siguiente se enumeran las categorías en las que se puede clasificar un LSP.
Categoría LSP | Descripción |
---|---|
LSP_CRYPTO_COMPRESS | El LSP es un proveedor de criptografía o compresión de datos. |
LSP_FIREWALL | El LSP es un proveedor de firewall. |
LSP_LOCAL_CACHE | El LSP es un proveedor de caché local. |
LSP_INBOUND_MODIFY | El LSP modifica los datos de entrada. |
LSP_INSPECTOR | El LSP inspecciona o filtra los datos. |
LSP_OUTBOUND_MODIFY | El LSP modifica los datos salientes. |
LSP_PROXY | El LSP actúa como proxy y redirige los paquetes. |
LSP_REDIRECTOR | El LSP es un redirector de red. |
LSP_SYSTEM | El LSP es aceptable para su uso en servicios y procesos del sistema. |
Un LSP puede pertenecer a más de una categoría. Por ejemplo, un LSP de firewall o seguridad podría pertenecer a las categorías inspector (LSP_INSPECTOR) y firewall (LSP_FIREWALL).
Si un LSP no tiene un conjunto de categorías, se considera que está en la categoría Todos los demás. Esta categoría de LSP no se cargará en servicios o procesos del sistema (por ejemplo, lsass, winlogon y muchos procesos de svchost).
Clasificación de LSP
Hay varias funciones nuevas disponibles en Windows Vista y versiones posteriores para clasificar un LSP:
Para clasificar un LSP, se llama a la función WSCSetProviderInfo o WSCSetProviderInfo32 con un GUID para identificar la entrada oculta de LSP, la clase de información que se establecerá para esta entrada del protocolo de LSP y un conjunto de marcas usadas para modificar el comportamiento de la función.
La función WSCGetProviderInfo o WSCGetProviderInfo32 se usa de forma similar para recuperar los datos asociados a una clase de información para un LSP.
Categorización de aplicaciones
Hay varias funciones nuevas disponibles en Windows Vista y versiones posteriores para clasificar una aplicación:
Para clasificar una aplicación, se llama a la función WSCSetApplicationCategory con la ruta de acceso de carga a la imagen ejecutable para identificar la aplicación, los argumentos de línea de comandos que se usan al iniciar la aplicación y las categorías de LSP que se permiten para todas las instancias de esta aplicación.
La función WSCGetApplicationCategory se usa de forma similar para recuperar las categorías del proveedor de servicios por niveles (LSP) asociadas a una aplicación.
Determinar qué LSP se cargan
La parte final de la categorización LSP es determinar qué LSP se cargará en qué procesos. Cuando un proceso carga WinSock, se realizan las siguientes comparaciones de la categoría de aplicación y las categorías de LSP para todos los LSP instalados:
- Si la aplicación no está clasificada, permita que todos los LSP se carguen en el proceso.
- Si tanto la aplicación como el LSP tienen categorías asignadas, todo lo siguiente debe ser cierto:
- Al menos una de las categorías de LSP está presente en las categorías especificadas de la aplicación.
Solo las categorías especificadas en las categorías indicadas de la aplicación se especifican en las categorías de LSP. Por ejemplo, si la aplicación especifica una categoría, esta debe estar en la categoría del LSP.
Si la categoría LSP_SYSTEM está presente en la categoría de la aplicación, debe estar presente en las categorías del LSP.
Nota:
Si un LSP no está categorizado, su categoría es efectivamente cero. Para que se produzca una coincidencia, todas las categorías especificadas del LSP deben estar presentes en las categorías de la aplicación (las categorías de la aplicación deben ser un superconjunto de las categorías del LSP) con la advertencia de que si LSP_SYSTEM está presente en la categoría de la aplicación, también debe estar presente en la categoría del LSP.
Considere el ejemplo siguiente:
La aplicación Foo.exe se clasifica como LSP_SYSTEM + LSP_FIREWALL + LSP_CRYPTO_COMPRESS. La aplicación Bar.exe se clasifica como LSP_FIREWALL + LSP_CRYPTO_COMPRESS. Hay cuatro LSP instalados en el sistema:
- LSP1 ha establecido una categoría de LSP_SYSTEM.
- LSP2 no tiene categorías establecidas, por lo que su categoría es cero.
- LSP3 ha establecido una categoría de LSP_FIREWALL.
- LSP4 ha establecido las categorías de LSP_SYSTEM + LSP_FIREWALL + LSP_CRYPTO_COMPRESS + LSP_INSPECTOR
En este ejemplo, la aplicación Foo.exe solo cargaría LSP1, mientras que la aplicación Bar.exe cargaría LSP3.
Determinación de los proveedores de WinSock instalados
El Kit de desarrollo de software (SDK) de Microsoft Windows incluye un programa de WinSock de ejemplo que se puede usar para determinar los proveedores de transporte de WinSock instalados en un equipo local. De forma predeterminada, el código fuente de este ejemplo de WinSock se instala en el siguiente directorio de Windows SDK para Windows 7:
C:\Archivos de programa\Microsoft SDKs\Windows\v7.0\Samples\NetDs\winsock\LSP
Este ejemplo es una utilidad para instalar y probar proveedores de servicios por niveles. Pero también se puede usar para recopilar información detallada del catálogo de WinSock en un equipo local mediante programación. Para enumerar todos los proveedores actuales de WinSock, incluidos los proveedores base y los proveedores de servicios de capa, compile este ejemplo de WinSock y ejecute el siguiente comando de consola:
instlsp -p
El resultado será una lista de proveedores de Winsock instalados en el equipo local, incluidos los proveedores de servicios por niveles. El resultado muestra el identificador de catálogo y el nombre de cadena del proveedor de WinSock.
Para recopilar información más detallada sobre todos los proveedores de WinSock, ejecute el siguiente comando de consola:
instlsp -p -v
El resultado será una lista de estructuras WSAPROTOCOL_INFO admitidas en el equipo local.
Para obtener una lista de solo los proveedores de servicios por niveles instalados en el equipo local, ejecute el siguiente comando de consola:
instlsp -l
Para asignar la estructura de LSP, ejecute el siguiente comando de consola:
instlsp -m
Nota:
La característica TDI está en desuso y se quitará en futuras versiones de Microsoft Windows. Dependiendo de cómo use TDI, use el Kernel de WinSock (WSK) o la Plataforma de filtrado de Windows (PMA). Para obtener más información sobre WFP y WSK, consulte Plataforma de filtrado de Windows y Winsock Kernel. Para leer una entrada de blog de Windows Core Networking sobre WSK y TDI, consulte Introducción a Winsock Kernel (WSK).