Condividi tramite


Ottimizzazione antivirus per i contenitori di Windows

Le informazioni contenute in questa pagina si applicano a:

  • Windows 10, versioni 1607 e successive
  • Windows Server 2016 e versioni successive
  • Prodotti antivirus (AV) in esecuzione nell'host

In questo argomento vengono descritte le ottimizzazioni che i prodotti AV possono usare per evitare l'analisi ridondante dei file contenitore di Windows e migliorare il tempo di avvio dei contenitori.

Panoramica dei contenitori

La funzionalità Contenitore di Windows è progettata per semplificare la distribuzione e la distribuzione delle applicazioni. Per altre informazioni, vedere l'introduzione ai contenitori di Windows.

I contenitori vengono costruiti da un numero qualsiasi di livelli di pacchetto. Il pacchetto del sistema operativo di base di Windows costituisce il primo livello.

Ogni contenitore ha un volume isolato che rappresenta il volume di sistema in tale contenitore. Un filtro di isolamento del contenitore (wcifs.sys) fornisce una sovrimpressione virtuale dei livelli di pacchetto in questo volume del contenitore. La sovrimpressione viene ottenuta usando segnaposto (reparse points). Il volume viene sottoposto a seeding con segnaposto prima che il contenitore acceda al percorso sovrapposto. Le letture dei file segnaposto vengono indirizzate al file del pacchetto di backup. In questo modo più volumi di contenitori possono accedere allo stesso flusso di dati del file del pacchetto sottostante.

Se un contenitore modifica un file, il filtro di isolamento esegue la copia su scrittura e sostituisce il segnaposto con il contenuto del file del pacchetto. In questo modo il "collegamento" viene interrotto nel file del pacchetto per quel determinato contenitore.

Reindirizzamento in lettura

Le letture da un file segnaposto vengono reindirizzate al livello del pacchetto appropriato dal filtro di isolamento. Il reindirizzamento viene eseguito a livello di filtro. Poiché il filtro è inferiore all'intervallo AV, i filtri AV non vedranno il reindirizzamento in lettura. AV non visualizzerà anche l'apertura dei file di pacchetto eseguiti per configurare il reindirizzamento.

Un filtro AV ha una visualizzazione completa di tutte le operazioni nel volume del sistema contenitore. Visualizza le operazioni sui file segnaposto, nonché le modifiche ai file o le nuove aggiunte di file.

Problema di analisi ridondante

Probabilmente saranno presenti molti contenitori a seconda degli stessi livelli di pacchetto. Lo stesso flusso di dati di un determinato file di pacchetto fornirà i dati per i segnaposto in più volumi di sistema del contenitore. Di conseguenza, è possibile eseguire analisi AV ridondanti degli stessi dati in ogni contenitore. Ciò ha un impatto negativo non necessario sulle prestazioni dei contenitori. Si tratta di un costo significativo dato che i contenitori devono essere avviati rapidamente e potrebbero essere di breve durata.

Per evitare l'analisi ridondante nei contenitori, è consigliabile che un prodotto AV modifichi il comportamento come descritto di seguito. Spetta al prodotto AV determinare il vantaggio di rischio/ricompensa per i clienti per questo approccio. Per altre informazioni, vedere la sezione Vantaggi e rischi nella parte inferiore di questa pagina.

1. Installazione del pacchetto

Durante l'installazione del pacchetto, gli strumenti di gestione eseguiranno il layout dei file nel pacchetto nella radice del livello. Il filtro AV deve continuare a analizzare i file mentre vengono inseriti nella radice del pacchetto e normalmente sarebbe. Ciò garantisce che tutti i file nei livelli siano inizialmente puliti rispetto al malware.

2. Avvio ed esecuzione del contenitore

Per l'analisi in tempo reale di un volume di contenitori, gli AV devono eseguire l'analisi in modo da evitare la ridondanza. I file segnaposto richiedono una particolare considerazione. I file modificati dal contenitore o dai nuovi file creati nel contenitore non vengono reindirizzati in modo che l'analisi ridondante non sia un problema.

Per evitare analisi ridondanti, il filtro AV deve prima identificare i volumi e i segnaposto dei contenitori in tali volumi. Per vari motivi non esiste un modo diretto per eseguire query su un filtro AV se un volume è un volume contenitore o se un determinato file è un file segnaposto. Il filtro di isolamento nasconde il punto di controllo del segnaposto per motivi di compatibilità dell'applicazione (alcune applicazioni non si comportano correttamente se sono consapevoli che accedono a reparse points). Inoltre, un volume è solo un volume contenitore mentre è in esecuzione un contenitore. Il contenitore può essere arrestato e il volume può rimanere rimontato. Al contrario, in fase di pre-creazione, il filtro AV deve eseguire una query sull'oggetto file per determinare se viene aperto nel contesto di un contenitore. Può quindi collegare ed ECP alla creazione e ricevere lo stato segnaposto al completamento della creazione.

Nel prodotto AV sono necessarie le modifiche seguenti:

  • Durante la pre-creazione in un volume del contenitore, collegare un ECP a Create CallbackData che riceverà le informazioni segnaposto. Queste operazioni possono essere identificate eseguendo una query sui parametri SILO dall'oggetto file usando IoGetSiloParameters. Si noti che il filtro deve specificare le dimensioni nella struttura WCIFS_REDIRECTION_ECP_CONTEXT . Tutti gli altri campi sono campi impostati se L'ECP viene riconosciuto.

  • In fase di post-creazione, se l'ECP viene riconosciuto, esaminare i flag di reindirizzamento ECP. I flag indicano se l'apertura è stata eseguita dal livello del pacchetto o dalla radice scratch (file nuovi o modificati). I flag indicano anche se il livello del pacchetto è registrato e se è remoto.

    • Per gli aperti gestiti da un livello remoto, AV deve ignorare l'analisi del file. Ciò è indicato dai flag di reindirizzamento: WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_LAYER && WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_REMOTE_LAYER

      Si presuppone che i livelli remoti siano stati analizzati nell'host remoto. I pacchetti contenitore Hyper-V sono remoti alla macchina virtuale dell'utilità che ospita il contenitore. Questi pacchetti verranno analizzati normalmente nell'host Hyper-V quando accedono dalla macchina virtuale dell'utilità tramite loopback SMB.

      Poiché VolumeGUID e FileId non si applicano in modalità remota, questi campi non verranno impostati.

    • Per gli aperti gestiti da un livello registrato, AV deve ignorare l'analisi del file. Ciò è indicato dai flag di reindirizzamento: WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_LAYER && WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_REGISTERED_LAYER

      Il livello registrato deve essere analizzato in modo asincrono durante l'installazione del pacchetto e dopo l'aggiornamento della firma.

      Nota

      I livelli registrati potrebbero non essere identificati dal sistema in futuro. In questo caso, i file di livello locale devono essere identificati singolarmente come descritto nell'ultimo punto elenco.

    • Per le finestre gestite da un livello di pacchetto locale, AV deve usare il volumeGUID e l'ID file del file di livello forniti per determinare se il file deve essere analizzato. Ciò richiederà probabilmente che AV crei una cache di file analizzati indicizzati in base al GUID del volume e al FileId. Questo è indicato dal flag di reindirizzamento: WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_LAYER

    • Per i file nuovi/modificati nel percorso scratch, il prodotto AV deve analizzare i file ed eseguire la normale correzione. Questo è indicato dal flag di reindirizzamento: WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_SCRATCH

      Poiché in questo caso non è presente alcun file di livello, VolumeGUID e FileId non verranno impostati.

    • Non salvare "questo file viene gestito dal livello" come marcatore permanente nel contesto del flusso. È possibile modificare un file inizialmente eseguito dalla radice del livello dopo la creazione. In questo caso, una creazione successiva per lo stesso file può indicare che la creazione viene eseguita dal volume del contenitore. Il filtro AV deve comprendere che ciò può verificarsi.

Non usare la chiave del Registro di sistema LayerRootLocations

In passato è consigliabile usare la chiave del LayerRootLocations Registro di sistema per ottenere la posizione dell'immagine di base. I prodotti AV non devono più usare questa chiave del Registro di sistema. Usare invece l'approccio consigliato in questo argomento per evitare l'analisi ridondante.

Percorso del Registro di sistema usato per registrare i livelli del pacchetto:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\LayerRootLocations

Vantaggi e rischi

Considerare i vantaggi e i rischi seguenti per l'uso di queste nuove ottimizzazioni per i prodotti AV.

Vantaggi

  • Nessun impatto sull'avvio o sul tempo di esecuzione del contenitore (anche per il primo contenitore).
  • Evita l'analisi dello stesso contenuto in più contenitori.
  • Funziona per i contenitori di Windows Server. Per il contenitore Hyper-V, questa operazione funziona per i pacchetti, ma richiede ulteriori operazioni per l'esecuzione del contenitore.

Rischi

Se un contenitore viene avviato nel tempo tra l'aggiornamento della firma e la successiva analisi proattiva antimalware pianificata, i file eseguiti nel contenitore non vengono analizzati in relazione alle firme antimalware più recenti. Per attenuare questo rischio, il prodotto AV potrebbe ignorare le analisi per i file reindirizzati solo se non è stato eseguito un aggiornamento della firma dall'ultima analisi proattiva. Ciò limita la riduzione delle prestazioni dei contenitori fino a quando non viene completata un'analisi proattiva con le firme più recenti. Facoltativamente, il prodotto AV può attivare un'analisi proattiva in questa situazione in modo che i successivi lanci di contenitori siano più efficienti.