Categorizzazione di provider e app di servizi a più livelli

Nota

I provider di servizi a più livelli sono deprecati. A partire da Windows 8 e Windows Server 2012, usare windows Filtering Platform.

 

Winsock 2 supporta protocolli a più livelli. Un protocollo a più livelli è uno che implementa solo funzioni di comunicazione di livello superiore, mentre si basa su uno stack di trasporto sottostante per lo scambio effettivo di dati con un endpoint remoto. Un esempio di protocollo a più livelli o di un provider di servizi a più livelli sarebbe un livello di sicurezza che aggiunge il protocollo al processo di definizione della connessione per eseguire l'autenticazione e stabilire uno schema di crittografia concordato a vicenda. Tale protocollo di sicurezza richiederebbe in genere i servizi di un protocollo di trasporto affidabile sottostante, ad esempio TCP o SPX. Il termine protocollo di base implementato dal provider di base fa riferimento a un provider Winsock che implementa un protocollo come TCP o SPX che è in grado di eseguire comunicazioni dati con un endpoint remoto. Il termine protocollo a più livelli viene usato per descrivere un protocollo che non può essere autonomo. Questi protocolli a più livelli vengono installati come provider di servizi a più livelli (Winsock Layered Service Providers).

Un esempio di LSP è il provider di servizi Client Microsoft Firewall installato come parte del server di sicurezza Internet e autenticazione (ISA) nei client. Il provider di servizi Client Microsoft Firewall viene installato sui provider di base Winsock per TCP e UDP. Una libreria a collegamento dinamico (DLL) nel software client del firewall ISA diventa un provider di servizi a più livelli Winsock che tutte le applicazioni Winsock usano in modo trasparente. In questo modo, il provider di servizi di configurazione client del firewall ISA può intercettare le chiamate di funzione Winsock dalle applicazioni client e quindi instradare una richiesta al provider di servizi di base sottostante originale se la destinazione è locale o al servizio Firewall in un computer ISA Server se la destinazione è remota. Un LSP simile viene installato come parte del servizio Microsoft Forefront Firewall e del client TMG (Threat Management Gateway) nei client.

Durante l'inizializzazione LSP, il provider di servizi di rete deve fornire puntatori a una serie di funzioni SPI (Service Provider Interface) Winsock. Queste funzioni verranno chiamate durante l'elaborazione normale dal livello direttamente sopra l'LSP (un altro LSP o Ws2_32.DLL).

È possibile definire categorie LSP in base al subset di funzioni SPI implementate da un LSP e alla natura dell'elaborazione aggiuntiva eseguita per ognuna di queste funzioni. Classificando i provider di servizi di configurazione e classificando le applicazioni che usano socket Winsock, diventa possibile determinare in modo selettivo se un LSP deve essere coinvolto in un determinato processo in fase di esecuzione.

In Windows Vista e versioni successive viene fornito un nuovo metodo per la categorizzazione sia dei provider di servizi a più livelli di Winsock che delle applicazioni in modo che vengano caricati solo determinati LSP. Esistono diversi motivi per aggiungere queste funzionalità.

Uno dei motivi principali è che alcuni processi critici del sistema, ad esempio winlogon e lsass, creano socket, ma questi processi non usano questi socket per inviare traffico sulla rete. La maggior parte dei provider di servizi di configurazione non deve quindi essere caricata in questi processi. Sono stati inoltre documentati alcuni casi in cui i provider di servizi di configurazione bug possono causare l'arresto anomalo di lsass.exe . Se lsass si arresta in modo anomalo, il sistema forza un arresto. Un effetto collaterale di questi processi di sistema che caricano ISP è che questi processi non escono mai, quindi quando un LSP viene installato o rimosso, è necessario un riavvio.

Un motivo secondario è che esistono alcuni casi in cui le applicazioni potrebbero non voler caricare determinati LSP. Ad esempio, alcune applicazioni potrebbero non voler caricare provider di servizi di configurazione crittografici che potrebbero impedire all'applicazione di comunicare con altri sistemi in cui non è installato il provider di servizi di configurazione con estensione LSP con estensione non grafica.

Infine, le categorie LSP possono essere usate da altri provider di servizi di configurazione per determinare dove devono essere installate nella catena di protocolli Winsock. Per anni, vari sviluppatori LSP hanno voluto un modo per sapere come si comporterà un LSP. Ad esempio, un LSP che controlla il flusso di dati deve essere sopra un LSP che crittografa i dati. Naturalmente, questo metodo di categorizzazione LSP non è una prova stupida poiché si basa su LSP di terze parti per classificarsi in modo appropriato.

La categorizzazione LSP e altri miglioramenti della sicurezza in Windows Vista e versioni successive sono progettati per impedire agli utenti di installare involontariamente indirizzi IP dannosi.

Categorie LSP

In Windows Vista e versioni successive, un provider di servizi di configurazione può essere classificato in base al modo in cui interagisce con le chiamate e i dati di Windows Sockets. Una categoria LSP è un gruppo identificabile di comportamenti in un subset di funzioni SPI Winsock. Ad esempio, un filtro contenuto HTTP viene classificato come controllo dati (categoria LSP_INSPECTOR). La categoria LSP_INSPECTOR esamina i parametri (ma non modifica) per le funzioni SPI di trasferimento dei dati. Un'applicazione può eseguire una query per la categoria di un LSP e scegliere di non caricare il provider di servizi di rete in base alla categoria LSP e al set di categorie LSP consentite dell'applicazione.

Nella tabella seguente sono elencate le categorie in cui è possibile classificare un provider di servizi di configurazione locale.

Categoria LSP Descrizione
LSP_CRYPTO_COMPRESS Il provider di servizi di configurazione locale è un provider di crittografia o compressione dei dati.
LSP_FIREWALL L'LSP è un provider di firewall.
LSP_LOCAL_CACHE Il provider di servizi di configurazione locale è un provider di cache locale.
LSP_INBOUND_MODIFY Il provider di servizi di configurazione locale modifica i dati in ingresso.
LSP_INSPECTOR Il provider di servizi di configurazione locale controlla o filtra i dati.
LSP_OUTBOUND_MODIFY Il provider di servizi di configurazione locale modifica i dati in uscita.
LSP_PROXY Il provider di servizi di configurazione locale funge da proxy e reindirizza i pacchetti.
LSP_REDIRECTOR Il provider di servizi di rete è un redirector di rete.
LSP_SYSTEM L'LSP è accettabile per l'uso nei servizi e nei processi di sistema.

 

Un provider di servizi di configurazione può appartenere a più di una categoria. Ad esempio, un LSP firewall/sicurezza può appartenere alle categorie di controllo (LSP_INSPECTOR) e firewall (LSP_FIREWALL).

Se un LSP non dispone di un set di categorie, viene considerato come nella categoria Tutti gli altri. Questa categoria LSP non verrà caricata nei servizi o nei processi di sistema , ad esempio lsass, winlogon e molti processi svchost.

Categorizzazione di LSP

In Windows Vista sono disponibili diverse nuove funzioni e versioni successive per la categorizzazione di un LSP:

Per classificare un LSP, la funzione WSCSetProviderInfo o WSCSetProviderInfo32 viene chiamata con un GUID per identificare la voce nascosta LSP, la classe di informazioni da impostare per questa voce del protocollo LSP e un set di flag usati per modificare il comportamento della funzione.

La funzione WSCGetProviderInfo o WSCGetProviderInfo32 viene usata in modo analogo per recuperare i dati associati a una classe di informazioni per un LSP.

Categorizzazione delle applicazioni

In Windows Vista sono disponibili diverse nuove funzioni e versioni successive per la categorizzazione di un'applicazione:

Per classificare un'applicazione, la funzione WSCSetApplicationCategory viene chiamata con il percorso di caricamento dell'immagine eseguibile per identificare l'applicazione, gli argomenti della riga di comando usati all'avvio dell'applicazione e le categorie LSP consentite per tutte le istanze di questa applicazione.

La funzione WSCGetApplicationCategory viene usata in modo analogo per recuperare le categorie di provider di servizi a più livelli associate a un'applicazione.

Determinazione dei LSP caricati

La parte finale della categorizzazione LSP consiste nel determinare quali LSP verranno caricati in quali processi. Quando un processo carica Winsock, vengono eseguiti i confronti seguenti della categoria dell'applicazione e delle categorie LSP per tutti i provider di servizi di configurazione installati:

  • Se l'applicazione non è categorizzata, consentire il caricamento di tutti gli LSP nel processo.
  • Se sia l'applicazione che il provider di servizi di configurazione locale dispongono di categorie assegnate, tutti gli elementi seguenti devono essere true:
    Almeno una delle categorie LSP è presente nelle categorie specificate dell'applicazione.
    Nelle categorie LSP vengono specificate solo le categorie specificate nell'applicazione. Ad esempio, se l'applicazione specifica una categoria che deve essere nella categoria di LSP.
    Se la categoria LSP_SYSTEM è presente nella categoria dell'applicazione, deve essere presente nelle categorie di LSP.

Nota

Se un LSP non è categorizzato, la relativa categoria è effettivamente zero. Affinché si verifichi una corrispondenza, tutte le categorie specificate del provider di servizi di rete devono essere presenti nelle categorie dell'applicazione (le categorie dell'applicazione devono essere un superset delle categorie di LSP) con l'avvertenza che, se LSP_SYSTEM è presente nella categoria dell'applicazione, deve essere presente anche nella categoria LSP.

 

Si consideri l'esempio seguente:

L'applicazione Foo.exe è categorizzata come LSP_SYSTEM + LSP_FIREWALL + LSP_CRYPTO_COMPRESS. L'applicazione Bar.exe è categorizzata come LSP_FIREWALL + LSP_CRYPTO_COMPRESS. Nel sistema sono installati quattro LSP:

  • LSP1 ha impostato una categoria di LSP_SYSTEM.
  • LSP2 non è impostato per categorie, quindi la categoria è zero.
  • LSP3 ha impostato una categoria di LSP_FIREWALL.
  • LSP4 include categorie di LSP_SYSTEM + LSP_FIREWALL + LSP_CRYPTO_COMPRESS + LSP_INSPECTOR

In questo esempio, l'applicazione Foo.exe caricherà solo LSP1, mentre l'applicazione Bar.exe caricherà LSP3.

Determinazione dei provider Winsock installati

Microsoft Windows Software Development Kit (SDK) include un programma Winsock di esempio che può essere usato per determinare i provider di trasporto Winsock installati in un computer locale. Per impostazione predefinita, il codice sorgente per questo esempio winsock viene installato nella directory seguente di Windows SDK per Windows 7:

C:\Programmi\Microsoft SDKs\Windows\v7.0\Samples\NetDs\winsock\LSP

Questo esempio è un'utilità per l'installazione e il test dei provider di servizi a più livelli. Ma può anche essere usato per raccogliere informazioni dettagliate a livello di codice dal catalogo Winsock in un computer locale. Per elencare tutti i provider Winsock correnti, inclusi provider di base e provider di servizi di livello, compilare questo esempio winsock ed eseguire il comando della console seguente:

instlsp -p

L'output sarà un elenco dei provider Winsock installati nel computer locale, inclusi i provider di servizi a più livelli. L'output elenca l'ID catalogo e il nome della stringa per il provider Winsock

Per raccogliere informazioni più dettagliate su tutti i provider Winsock, eseguire il comando della console seguente:

instlsp -p -v

L'output sarà un elenco WSAPROTOCOL_INFO strutture supportate nel computer locale.

Per un elenco dei soli provider di servizi a più livelli installati nel computer locale, eseguire il comando console seguente:

instlsp -l

Per eseguire il mapping della struttura LSP, eseguire il comando console seguente:

instlsp -m

Nota

La funzionalità TDI è deprecata e verrà rimossa nelle versioni future di Microsoft Windows. A seconda di come si usa TDI, usare il Kernel Winsock (WSK) o Windows Filtering Platform (WFP). Per altre informazioni su WFP e WSK, vedere Piattaforma filtro Windows e Kernel Winsock. Per un post di blog di Windows Core Networking su WSK e TDI, vedere Introduzione al kernel Winsock (WSK).