Operazione WFP

Windows Filtering Platform (WFP) esegue le attività integrando le entità di base seguenti: Livelli, Filtri, Shim e Callout.

Livelli

Un livello è un contenitore gestito dal motore di filtro la cui funzione consiste nell'organizzare i filtri in set. Un livello non è un modulo nello stack di rete. Ogni livello ha uno schema che definisce il tipo di filtri che possono essere aggiunti. Per altre informazioni, vedere Condizioni di filtro disponibili in Ogni livello di filtro .

I livelli possono contenere livelli secondari per gestire i requisiti di filtro in conflitto, ad esempio "Blocca porte TCP superiori alla 1024" e "Apri porta 1080". Le regole per la gestione dei conflitti di filtro sono determinate dall'arbitrato dei filtri.

IL WFP contiene un set di sottotipi predefiniti. Ogni livello eredita tutti i livelli secondari predefiniti. Gli utenti possono anche aggiungere i propri livelli secondari.

L'elenco dei livelli del motore di filtro è disponibile nell'argomento della sezione di riferimento Filtro degli identificatori livello.

Filtri

Un filtro è una regola corrispondente ai pacchetti in ingresso o in uscita. La regola indica al motore di filtro cosa fare con il pacchetto, incluso per chiamare un modulo di callout per l'ispezione approfondita di pacchetti o flussi. Ad esempio, un filtro può specificare "Blocca il traffico con una porta TCP maggiore di 1024" o "Call out to IDS for all traffic that is not secured".

Un filtro di avvio è un filtro applicato in fase di avvio non appena viene avviato il driver dello stack TCP/IP (tcpip.sys). Un filtro di avvio è disabilitato all'avvio di BFE. Un filtro viene contrassegnato come boot-time impostando il flag FWPM_FILTER_FLAG_BOOTTIME quando viene richiamato FwpmFilterAdd0 .

Un filtro di runtime è un filtro applicato dopo l'avvio di BFE. Un filtro di runtime può essere statico, dinamico o persistente a seconda del modo in cui è stato creato. Per altre informazioni sui diversi tipi di filtri in fase di esecuzione e sulla relativa durata, vedere Gestione oggetti.

Spessori

Uno shim è un componente in modalità kernel che prende decisioni di filtro classificando in base ai livelli del motore di filtro. Ogni shim classifica uno o più livelli. Ad esempio, lo shim del modulo Transport Layer classifica il livello Trasporto in ingresso, il livello Trasporto in uscita e i livelli ALE Connect e Receive-Accept per il primo pacchetto di un flusso.

Come pacchetti, flussi ed eventi attraversano lo stack di rete, gli shim li analizzano per estrarre le condizioni e i valori classificabili e quindi chiamare nel motore di filtro per valutarli rispetto ai filtri in un determinato livello. Il motore di filtro può richiamare uno o più callout come parte della classificazione. Gli shim eseguono l'eliminazione effettiva di pacchetti, flussi ed eventi in base al risultato della classificazione eseguita dal motore di filtro.

Callout

Un callout è un set di funzioni esposte da un driver e usato per i filtri specializzati. Vengono usati per eseguire l'analisi e la manipolazione dei pacchetti, ad esempio l'analisi dei virus, l'analisi dei controlli genitori per il contenuto inappropriato, l'analisi dei dati dei pacchetti per gli strumenti di monitoraggio. Alcuni callout, ad esempio il driver NAT (Network Address Translation), sono incorporati nel sistema operativo. Altri, ad esempio un callout di Controllo genitori HTTP o il callout del sistema di rilevamento delle intrusioni (IDS), possono essere forniti da fornitori di software indipendenti (ISV). Le funzioni di callout vengono richiamate dal motore di filtro quando un filtro callout corrispondente corrisponde a un determinato livello.

I callout possono essere registrati in uno dei livelli WFP in modalità kernel. I callout possono restituire un'azione ("Blocca", "Consenti" e, quando si eseguono l'ispezione dei flussi, "Rinvia", "Bisogno di altri dati", "Drop connection") e possono modificare e proteggere il traffico di rete in ingresso e in uscita.

Una volta registrato un callout con il motore di filtro, può ricevere il traffico di rete da elaborare. Il traffico può essere pacchetti, flussi o eventi a seconda del livello. Un agente dell'applicazione o del firewall fa sì che il traffico venga passato a un callout aggiungendo un filtro la cui azione è "Callout" e il cui ID callout è l'identificatore del callout. I callout possono indicare al motore di filtro di restituire "Block" o "Permit" allo shim. I callout possono anche restituire "Continua" per consentire ad altri filtri di elaborare il pacchetto.

Più callout possono essere esposti da un driver callout.

È necessario aggiungere un callout (con FwpmCalloutAdd0) e registrato (con FwpsCalloutRegister) prima di poterlo usare. Prima della creazione di filtri che fanno riferimento al callout, è necessaria una chiamata a FwpmCalloutAdd0 . È necessaria una chiamata a FwpsCalloutRegister prima che il WFP possa richiamare il callout quando vengono confrontati i filtri del callout. Per impostazione predefinita, i filtri che fanno riferimento ai callout aggiunti ma che non sono ancora stati registrati con il motore di filtro vengono considerati filtri "Blocca". L'ordine di chiamata di FwpmCalloutAdd0 e FwpsCalloutRegister non è rilevante. Un callout permanente deve essere aggiunto una sola volta e deve essere registrato ogni volta che il driver che implementa il callout viene avviato ,ad esempio dopo un riavvio.

Classificazione

La classificazione è il processo di applicazione di filtri al traffico di rete (pacchetto, flusso o evento) per determinare il risultato di "Consenti" o "Blocca" per tale traffico. Per un pacchetto, un flusso o un evento è presente una chiamata di classificazione per livello.

Durante la classificazione, le proprietà (ad esempio, l'indirizzo di origine) del pacchetto, del flusso o dell'evento vengono confrontate con le condizioni di filtro impostate sui filtri a livello in cui viene richiamata la classificazione. Quando vengono trovate corrispondenze, viene usato l'algoritmo Filter Arbitration per determinare il risultato del processo di classificazione.

Una richiesta di classificazione viene attivata da uno shim.

Le azioni di classificazione possono essere:

  • Consenti
  • Blocca
  • Callout
    • Consenti
    • Blocca
    • Continua
    • Rinviare
    • Sono necessari altri dati
    • Eliminare la connessione

Operazione WFP

All'avvio, non appena viene avviato il driver dello stack TCP/IP (tcpip.sys), il motore di filtro in modalità kernel applica i criteri di sicurezza del sistema tramite filtri di avvio.

Quando il motore di filtro di base (BFE) viene avviato in modalità utente, i filtri permanenti vengono aggiunti alla piattaforma, i filtri di avvio vengono disabilitati e le notifiche vengono inviate a tali driver di callout che hanno sottoscritto tramite FwpmBfeStateSubscribeChanges0. Le notifiche vengono inviate immediatamente dopo il completamento dell'inizializzazione BFE. La piattaforma è ora pronta per la registrazione dei callout e per l'aggiunta di oggetti in fase di esecuzione.

La transizione dal tempo di avvio ai filtri permanenti può essere di diversi secondi o addirittura più lunga in un computer lento. È atomico, quindi se un provider ha sia un'ora di avvio che un filtro permanente, non ci sarà mai una finestra quando nessuno dei due è attivo.

Dopo l'avvio di BFE, i filtri di runtime possono essere aggiunti dagli agenti firewall o da soluzioni firewall personalizzate. BFE elabora questi filtri e li invia al livello del motore di filtro appropriato per l'imposizione. BFE accetta anche le impostazioni di autenticazione e invia queste impostazioni ai moduli di keying IPsec (IKE/AuthIP). Per altre informazioni, vedere Configurazione IPsec .

In qualsiasi momento, i filtri e le impostazioni di autenticazione possono essere aggiunti, rimossi o modificati nel sistema tramite l'interfaccia RPC esposta dall'autenticazione BFE. I livelli secondari e i moduli di callout possono essere aggiunti o rimossi in modo analogo.

Flusso di dati:

  1. Un pacchetto entra nello stack di rete.
  2. Lo stack di rete trova e chiama uno shim.
  3. Lo shim richiama il processo di classificazione a un determinato livello.
  4. Durante la classificazione, i filtri vengono confrontati e viene eseguita l'azione risultante. (Vedere l'arbitraggio dei filtri).
  5. Se durante il processo di classificazione vengono confrontati filtri callout, vengono richiamati i callout corrispondenti.
  6. Lo shim agisce sulla decisione finale di filtro (ad esempio, eliminare il pacchetto).

Il flusso di dati in uscita segue un modello simile.

Gli argomenti seguenti descrivono ulteriormente il funzionamento del WFP.

Modello a oggetti

Gestione oggetti