Compartilhar via


Otimização antivírus para contêineres do Windows

As informações nesta página se aplicam a:

  • Windows 10, versões 1607 e posteriores
  • Windows Server 2016 e versões posteriores
  • Produtos antivírus (AV) em execução no host

Este tópico descreve as otimizações que os produtos AV podem usar para evitar a verificação redundante de arquivos de contêiner do Windows e ajudar a melhorar o tempo de inicialização do contêiner.

Visão geral do contêiner

O recurso contêiner do Windows foi projetado para simplificar a distribuição e a implantação de aplicativos. Para obter mais informações, consulte a introdução aos Contêineres do Windows.

Os contêineres são construídos a partir de qualquer número de camadas de pacote. O pacote do sistema operacional base do Windows forma a primeira camada.

Cada contêiner tem um volume isolado que representa o volume do sistema para esse contêiner. Um filtro de isolamento de contêiner (wcifs.sys) fornece uma sobreposição virtual de camadas de pacote nesse volume de contêiner. A sobreposição é obtida usando espaços reservados (pontos de nova análise). O volume é propagado com espaços reservados antes que o contêiner acesse primeiro o caminho sobreposto. As leituras de arquivos de espaço reservado são direcionadas para o arquivo de pacote de backup. Dessa forma, vários volumes de contêiner podem acessar o mesmo fluxo de dados de arquivo de pacote subjacente.

Se um contêiner modificar um arquivo, o filtro de isolamento executará copy-on-write e substituirá o espaço reservado pelo conteúdo do arquivo de pacote. Isso interrompe a "vinculação" ao arquivo de pacote para esse contêiner específico.

Redirecionamento de leitura

As leituras de um arquivo de espaço reservado são redirecionadas para a camada de pacote apropriada pelo filtro de isolamento. O redirecionamento é executado no nível do filtro. Como o filtro está abaixo do intervalo de AV, os filtros AV não verão o redirecionamento de leitura. O AV também não verá as aberturas de arquivos de pacote executadas para configurar o redirecionamento.

Um filtro AV tem uma exibição completa de todas as operações no volume do sistema de contêineres. Ele vê operações em arquivos de espaço reservado, bem como as modificações de arquivo ou novas adições de arquivo.

Problema de verificação redundante

Provavelmente haverá muitos contêineres dependendo das mesmas camadas de pacote. O mesmo fluxo de dados de um determinado arquivo de pacote fornecerá os dados para espaços reservados em vários volumes do sistema de contêineres. Como resultado, há potencial para verificações de AV redundantes dos mesmos dados em cada contêiner. Isso tem um impacto negativo desnecessário no desempenho dos contêineres. Esse é um custo de significação, dado que os contêineres devem começar rapidamente e podem ser de curta duração.

Para evitar a verificação redundante em contêineres, é recomendável que um produto AV modifique seu comportamento, conforme descrito abaixo. Cabe ao produto AV determinar o benefício de risco/recompensa para seus clientes para essa abordagem. Para obter mais informações sobre isso, consulte a seção Benefícios e riscos na parte inferior desta página.

1. Instalação do pacote

Durante a instalação do pacote, as ferramentas de gerenciamento disporão arquivos no pacote na raiz da camada. O Filtro AV deve continuar a examinar os arquivos, pois eles estão sendo colocados na raiz do pacote e normalmente o faria. Isso garante que todos os arquivos nas camadas sejam inicialmente limpo em relação ao malware.

2. Início e execução do contêiner

Para verificação em tempo real de um volume de contêiner, os AVs devem verificar de uma maneira que evite a redundância. Os arquivos de espaço reservado precisam de consideração especial. Os arquivos modificados pelo contêiner ou novos arquivos criados no contêiner não são redirecionados, portanto, a verificação redundante não é uma preocupação.

Para evitar verificações redundantes, o filtro AV primeiro precisa identificar volumes de contêiner e espaços reservados nesses volumes. Por vários motivos, não há uma maneira direta de um filtro AV consultar se um volume é um volume de contêiner ou se um determinado arquivo é um arquivo de espaço reservado. O filtro de isolamento oculta o ponto de nova análise do espaço reservado por motivos de compatibilidade do aplicativo (alguns aplicativos não se comportam corretamente se estiverem cientes de que estão acessando pontos de nova análise). Além disso, um volume é apenas um volume de contêiner enquanto um contêiner está em execução. O contêiner pode ser interrompido e o volume pode permanecer remontado. Em vez disso, na pré-criação, o filtro AV deve consultar o objeto de arquivo para determinar se ele está sendo aberto no contexto de um contêiner. Em seguida, ele pode anexar e ECP ao estado criar e receber o espaço reservado ao criar a conclusão.

As seguintes alterações são necessárias no produto AV:

  • Durante a pré-criação em um volume de contêiner, anexe um ECP ao Create CallbackData que receberá as informações de espaço reservado. Essas criações podem ser identificadas consultando os parâmetros SILO do fileobject usando IoGetSiloParameters. Observe que o filtro deve especificar o tamanho na estrutura WCIFS_REDIRECTION_ECP_CONTEXT . Todos os outros campos estarão fora dos campos definidos se o ECP for confirmado.

  • Na pós-criação, se o ECP for confirmado, examine os sinalizadores de redirecionamento do ECP. Os sinalizadores indicarão se a abertura foi atendida da camada de pacote ou da raiz do zero (arquivos novos ou modificados). Os sinalizadores também indicarão se a camada de pacote está registrada e se ela é remota.

    • Para aberturas que são atendidas de uma camada remota, o AV deve ignorar a verificação do arquivo. Isso é indicado pelos sinalizadores de redirecionamento: WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_LAYER && WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_REMOTE_LAYER

      Supõe-se que camadas remotas foram verificadas no host remoto. Os pacotes de contêiner do Hyper-V são remotos para a VM do utilitário que hospeda o contêiner. Esses pacotes serão verificados normalmente no host Hyper-V quando forem acessados pela VM do utilitário por loop-back SMB.

      Como VolumeGUID e FileId não se aplicam ao remoto, esses campos não serão definidos.

    • Para aberturas que são atendidas de uma camada registrada, o AV deve ignorar a verificação do arquivo. Isso é indicado pelos sinalizadores de redirecionamento: WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_LAYER && WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_REGISTERED_LAYER

      A camada registrada deve ser verificada de forma assíncrona durante a instalação do pacote e após a atualização da assinatura.

      Observação

      As camadas registradas podem não ser identificadas pelo sistema no futuro. Nesse caso, os arquivos de camada local devem ser identificados individualmente, conforme descrito no último marcador.

    • Para aberturas atendidas de uma camada de pacote local, o AV deve usar o VolumeGUID e o FileId fornecidos do arquivo de camada para determinar se o arquivo precisa ser verificado. Isso provavelmente exigirá que o AV crie um cache de arquivos verificados indexados por GUID de volume e FileId. Isso é indicado pelo sinalizador de redirecionamento: WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_LAYER

    • Para arquivos novos/modificados no local de rascunho, o produto AV deve examinar os arquivos e executar sua correção normal. Isso é indicado pelo sinalizador de redirecionamento: WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_SCRATCH

      Como não há nenhum arquivo de camada nesse caso, VolumeGUID e FileId não serão definidos.

    • Não salve "este arquivo é atendido da camada" como um marcador permanente em seu contexto de fluxo. Um arquivo que é inicialmente atendido da raiz da camada pode ser modificado após a criação. Nesse caso, uma criação subsequente para o mesmo arquivo pode indicar que a criação está sendo atendida do volume de contêiner. O Filtro AV precisa entender que isso pode acontecer.

Não use a chave do Registro LayerRootLocations

No passado, é recomendável usar a chave do LayerRootLocations Registro para obter o local da imagem base. Os produtos AV não devem mais usar essa chave do Registro. Em vez disso, use a abordagem recomendada neste tópico para evitar a verificação redundante.

O local do Registro que foi usado para registrar camadas de pacote:

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

Benefícios e riscos

Considere os seguintes benefícios e riscos para usar essas novas otimizações para produtos AV.

Benefícios

  • Nenhum impacto no início do contêiner ou no tempo de execução (mesmo para o primeiro contêiner).
  • Evita a verificação do mesmo conteúdo em vários contêineres.
  • Funciona para contêineres do Windows Server. Para o Contêiner do Hyper-V, isso funciona para os pacotes, mas requer trabalho adicional para executar o Contêiner.

Riscos

Se um contêiner for iniciado no tempo entre a atualização de assinatura e a próxima verificação antimalware proativa agendada, os arquivos executados no contêiner não serão verificados em relação às assinaturas antimalware mais recentes. Para atenuar esse risco, o produto AV poderá ignorar as verificações de arquivos redirecionados somente se não houver uma atualização de assinatura desde a última verificação proativa. Isso limitaria a degradação do desempenho do contêiner até que uma verificação proativa seja concluída com as assinaturas mais recentes. Opcionalmente, o produto AV pode disparar uma verificação proativa nessa situação para que as inicializações de contêiner subsequentes sejam mais eficientes.