Gelaagde serviceproviders en apps categoriseren
Notitie
Gelaagde serviceproviders zijn verouderd. Gebruik vanaf Windows 8 en Windows Server 2012 Windows Filtering Platform.
Winsock 2 biedt plaats aan gelaagde protocollen. Een gelaagd protocol is een protocol dat alleen communicatiefuncties op een hoger niveau implementeert, terwijl u vertrouwt op een onderliggende transportstack voor de daadwerkelijke uitwisseling van gegevens met een extern eindpunt. Een voorbeeld van een gelaagd protocol of gelaagde serviceprovider is een beveiligingslaag die protocol toevoegt aan het proces voor het tot stand brengen van verbindingen om verificatie uit te voeren en een wederzijds overeengekomen versleutelingsschema tot stand te brengen. Een dergelijk beveiligingsprotocol vereist doorgaans de services van een onderliggend betrouwbaar transportprotocol zoals TCP of SPX. Het term basisprotocol dat door de basisprovider wordt geïmplementeerd, verwijst naar een Winsock-provider die een protocol implementeert, zoals TCP of SPX, dat gegevenscommunicatie met een extern eindpunt kan uitvoeren. Het term gelaagde protocol wordt gebruikt om een protocol te beschrijven dat niet zelfstandig kan zijn. Deze gelaagde protocollen worden geïnstalleerd als Winsock Layered Service Providers (LSP's).
Een voorbeeld van een LSP is de Microsoft Firewall Client Service Provider die is geïnstalleerd als onderdeel van de ISA (Internet Security and Authentication Server) op clients. De Microsoft Firewall Client Service Provider wordt geïnstalleerd via de Winsock-basisproviders voor TCP en UDP. Een DLL (Dynamic Link Library) in de ISA Firewall Client-software wordt een Winsock-gelaagde serviceprovider, waardoor alle Winsock-toepassingen deze transparant gebruiken. Op deze manier kan de LSP van de ISA Firewall-client winsock-functieaanroepen van clienttoepassingen onderscheppen en vervolgens een aanvraag doorsturen naar de oorspronkelijke onderliggende basisserviceprovider als de bestemming lokaal is of naar de Firewall-service op een ISA Server-computer als de bestemming extern is. Een vergelijkbare LSP wordt geïnstalleerd als onderdeel van de Microsoft Forefront Firewall Service en de TMG-client (Threat Management Gateway) op clients.
Tijdens de LSP-initialisatie moet de LSP verwijzen naar een aantal functies van Winsock Service Provider Interface (SPI). Deze functies worden aangeroepen tijdens normale verwerking door de laag direct boven de LSP (een andere LSP of Ws2_32.DLL).
Het is mogelijk om LSP-categorieën te definiëren op basis van de subset van SPI-functies die door een LSP worden geïmplementeerd en de aard van de extra verwerking die voor elk van deze functies wordt uitgevoerd. Door LSP's te classificeren en toepassingen te classificeren die Winsock-sockets gebruiken, is het mogelijk selectief te bepalen of een LSP tijdens runtime moet worden betrokken bij een bepaald proces.
Op Windows Vista en hoger wordt een nieuwe methode geboden voor het categoriseren van zowel Winsock Layered Service Providers als toepassingen, zodat alleen bepaalde LSP's worden geladen. Er zijn verschillende redenen om deze functies toe te voegen.
Een van de belangrijkste redenen is dat bepaalde systeemkritieke processen zoals winlogon en lsass sockets maken, maar deze processen gebruiken deze sockets niet om verkeer op het netwerk te verzenden. De meeste LSP's mogen dus niet in deze processen worden geladen. Er zijn ook een aantal gevallen gedocumenteerd waarbij buggy LSP's lsass.exe kunnen laten crashen. Als lsass vastloopt, dwingt het systeem een afsluiting af. Een neveneffect van deze systeemprocessen voor het laden van LSP's is dat deze processen nooit afsluiten, dus wanneer een LSP is geïnstalleerd of verwijderd, is opnieuw opstarten vereist.
Een secundaire reden is dat er enkele gevallen zijn waarin toepassingen bepaalde LSP's mogelijk niet willen laden. Sommige toepassingen willen bijvoorbeeld geen cryptografische LSP's laden die kunnen voorkomen dat de toepassing communiceert met andere systemen waarop de holografische LSP niet is geïnstalleerd.
Ten slotte kunnen LSP-categorieën door andere LSP's worden gebruikt om te bepalen waar ze zich moeten installeren in de Winsock-protocolketen. Jarenlang wilden verschillende LSP-ontwikkelaars weten hoe een LSP zich gedraagt. Een LSP die de gegevensstroom inspecteert, wil bijvoorbeeld boven een LSP staan waarmee de gegevens worden versleuteld. Deze methode van LSP-categorisatie is natuurlijk niet waterdicht, omdat het afhankelijk is van derden die zichzelf op de juiste manier als LSP categoriseren.
De LSP-categorisatie en andere beveiligingsverbeteringen in Windows Vista en later zijn ontworpen om te voorkomen dat gebruikers onbedoeld schadelijke LSP's installeren.
LSP-categorieën
Op Windows Vista en hoger kan een LSP worden geclassificeerd op basis van hoe deze communiceert met Windows Sockets-aanroepen en -gegevens. Een LSP-categorie is een identificeerbare groep gedragingen op een subset van Winsock SPI-functies. Een HTTP-inhoudsfilter wordt bijvoorbeeld gecategoriseerd als gegevenscontrole (de LSP_INSPECTOR categorie). De LSP_INSPECTOR categorie zal parameters voor gegevensoverdracht van SPI-functies inspecteren, maar niet wijzigen. Een toepassing kan een query uitvoeren op de categorie van een LSP en ervoor kiezen om de LSP niet te laden op basis van de LSP-categorie en de set toegestane LSP-categorieën van de toepassing.
De volgende tabel bevat categorieën waarin een LSP kan worden geclassificeerd.
LSP-categorie | Beschrijving |
---|---|
LSP_CRYPTO_COMPRESS | De LSP is een cryptografie- of gegevenscompressieprovider. |
LSP_FIREWALL | De LSP is een firewallprovider. |
LSP_LOCAL_CACHE | De LSP is een lokale cacheprovider. |
LSP_INBOUND_MODIFY | De LSP wijzigt inkomende gegevens. |
LSP_INSPECTOR | De LSP inspecteert of filtert gegevens. |
LSP_OUTBOUND_MODIFY | De LSP wijzigt uitgaande gegevens. |
LSP_PROXY | De LSP fungeert als een proxy en stuurt pakketten om. |
LSP_REDIRECTOR | De LSP is een netwerkomleiding. |
LSP_SYSTEM | De LSP is acceptabel voor gebruik in services en systeemprocessen. |
Een LSP kan tot meer dan één categorie behoren. Een firewall/beveiligings-LSP kan bijvoorbeeld behoren tot de categorieën Inspector (LSP_INSPECTOR) en firewall (LSP_FIREWALL).
Als een LSP geen categorieset heeft, wordt deze beschouwd als de categorie Alle andere. Deze LSP-categorie wordt niet gebruikt in services of systeemprocessen (bijvoorbeeld lsass, winlogon en veel svchost-processen).
LSPs categoriseren
Er zijn verschillende nieuwe functies beschikbaar in Windows Vista en later voor het categoriseren van een LSP:
Als u een LSP wilt categoriseren, wordt de WSCSetProviderInfo of WSCSetProviderInfo32 functie aangeroepen met een GUID om de verborgen LSP-vermelding te identificeren, de informatieklasse die moet worden ingesteld voor deze LSP-protocolvermelding en een set vlaggen die worden gebruikt om het gedrag van de functie te wijzigen.
De functie WSCGetProviderInfo of WSCGetProviderInfo32 wordt op dezelfde manier gebruikt om de gegevens op te halen die zijn gekoppeld aan een informatieklasse voor een LSP.
Toepassingen categoriseren
Er zijn verschillende nieuwe functies beschikbaar op Windows Vista en later voor het categoriseren van een toepassing:
Als u een toepassing wilt categoriseren, wordt de functie WSCSetApplicationCategory aangeroepen met het laadpad naar de uitvoerbare installatiekopie om de toepassing te identificeren, de opdrachtregelargumenten die worden gebruikt bij het starten van de toepassing en de LSP-categorieën die zijn toegestaan voor alle exemplaren van deze toepassing.
De functie WSCGetApplicationCategory wordt op dezelfde manier gebruikt om de LSP-categorieën (Layered Service Provider) op te halen die zijn gekoppeld aan een toepassing.
Bepalen welke LSP's worden geladen
Het laatste deel van de LSP-categorisatie is bepalen welke LSP's worden geladen in welke processen. Wanneer een proces Winsock laadt, worden de volgende vergelijkingen gemaakt van de toepassingscategorie en de LSP-categorieën voor alle geïnstalleerde LSP's:
- Als de toepassing niet is gecategoriseerd, staat u toe dat alle LSP's in het proces worden geladen.
- Als zowel de toepassing als de LSP categorieën hebben toegewezen, moet aan alle volgende voorwaarden worden voldaan:
- Ten minste één van de LSP-categorieën is aanwezig in de opgegeven categorieën van de toepassing.
Alleen categorieën die zijn opgegeven in de opgegeven categorieën van de toepassing, worden opgegeven in de LSP-categorieën. Als de toepassing bijvoorbeeld een categorie opgeeft, moet deze in de categorie van de LSP vallen.
Als de categorie LSP_SYSTEM aanwezig is in de categorie van de toepassing, moet deze aanwezig zijn in de categorieën van de LSP.
Notitie
Als een LSP niet is gecategoriseerd, is de categorie effectief nul. Voor een overeenkomst moeten alle opgegeven categorieën van de LSP aanwezig zijn in de categorieën van de toepassing (de categorieën van de toepassing moeten een superset van de categorieën van de LSP zijn) met het voorbehoud dat als LSP_SYSTEM aanwezig is in de categorie van de toepassing, deze ook aanwezig moet zijn in de categorie van de LSP.
Bekijk het volgende voorbeeld:
De toepassing Foo.exe is gecategoriseerd als LSP_SYSTEM + LSP_FIREWALL + LSP_CRYPTO_COMPRESS. De toepassing Bar.exe is gecategoriseerd als LSP_FIREWALL + LSP_CRYPTO_COMPRESS. Er zijn vier LSP's geïnstalleerd op het systeem:
- LSP1 heeft een categorie van LSP_SYSTEM ingesteld.
- LSP2 is geen categorieën ingesteld, dus de categorie is nul.
- LSP3 heeft een categorie van LSP_FIREWALL ingesteld.
- LSP4 heeft categorieën van LSP_SYSTEM + LSP_FIREWALL + LSP_CRYPTO_COMPRESS + LSP_INSPECTOR
In dit voorbeeld zou de Foo.exe-toepassing alleen LSP1 laden, terwijl de Bar.exe-toepassing LSP3 zou laden.
Het bepalen van geïnstalleerde Winsock-providers
De Microsoft Windows Software Development Kit (SDK) bevat een voorbeeld van een Winsock-programma dat kan worden gebruikt om te bepalen welke Winsock-transportproviders op een lokale computer zijn geïnstalleerd. Standaard wordt de broncode voor dit Winsock-voorbeeld geïnstalleerd in de volgende map van de Windows SDK voor Windows 7:
C:\Program Files\Microsoft SDK's\Windows\v7.0\Samples\NetDs\winsock\LSP
Dit voorbeeld is een hulpprogramma voor het installeren en testen van gelaagde serviceproviders. Maar het kan ook worden gebruikt om programmatisch gedetailleerde informatie te verzamelen uit de Winsock-catalogus op een lokale computer. Als u alle huidige Winsock-providers, inclusief zowel basisproviders als serviceproviders in lagen, wilt weergeven, bouwt u dit Winsock-voorbeeld en voert u de volgende consoleopdracht uit:
instlsp -p
De uitvoer is een lijst met Winsock-providers die zijn geïnstalleerd op de lokale computer, inclusief gelaagde serviceproviders. De uitvoer bevat de catalogus-id en de tekenreeksnaam voor de Winsock-provider
Als u meer gedetailleerde informatie wilt verzamelen over alle Winsock-providers, voert u de volgende consoleopdracht uit:
instlsp -p -v
De uitvoer is een lijst WSAPROTOCOL_INFO structuren die worden ondersteund op de lokale computer.
Voor een lijst met alleen gelaagde serviceproviders die op de lokale computer zijn geïnstalleerd, voert u de volgende consoleopdracht uit:
instlsp -l
Voer de volgende consoleopdracht uit om de LSP-structuur in kaart te brengen:
instlsp -m
Notitie
De TDI-functie is afgeschaft en wordt verwijderd in toekomstige versies van Microsoft Windows. Afhankelijk van hoe u TDI gebruikt, gebruikt u de Winsock-kernel (WSK) of het Windows-filterplatform (WFP). Zie Windows Filtering Platform en Winsock Kernelvoor meer informatie over WFP en WSK. Zie Introduction to Winsock Kernel (WSK)voor een blogbericht over Windows Core Networking over WSK en TDI.