Поделиться через


Оптимизация антивирусной программы для контейнеров Windows

Сведения на этой странице относятся к:

  • Windows 10 версии 1607 и более поздних
  • Windows Server 2016 и более поздних версий
  • Антивирусные продукты (AV), работающие на узле

В этом разделе описываются оптимизации, которые могут использоваться продуктами av, чтобы избежать избыточного сканирования файлов контейнера Windows и ускорить запуск контейнера.

Общие сведения о контейнере

Функция контейнеров Windows предназначена для упрощения распространения и развертывания приложений. Дополнительные сведения см. в статье Общие сведения о контейнерах Windows.

Контейнеры создаются из любого количества слоев пакета. Пакет базовой ОС Windows формирует первый уровень.

Каждый контейнер имеет изолированный том, представляющий системный том для этого контейнера. Фильтр изоляции контейнера (wcifs.sys) обеспечивает виртуальное наложение слоев пакетов на этот том контейнера. Наложение достигается с помощью заполнителей (точек повторного анализа). Том заполняется заполнителями, прежде чем контейнер впервые обращается к переопределенным путям. Операции чтения файлов заполнителей направляются в файл резервного пакета. Таким образом, несколько томов контейнеров могут получить доступ к одному и тому же базовому потоку данных файла пакета.

Если контейнер изменяет файл, фильтр изоляции выполняет копирование при записи и заменяет заполнитель содержимым файла пакета. Это нарушает "компоновку" с файлом пакета для конкретного контейнера.

Перенаправление чтения

Операции чтения из файла заполнителя перенаправляются на соответствующий уровень пакета фильтром изоляции. Перенаправление выполняется на уровне фильтра. Так как фильтр находится ниже диапазона av, фильтры av не будут видеть перенаправление чтения. Av также не увидит открытия файлов пакета, выполненных для настройки перенаправления.

Фильтр антивирусной программы имеет полное представление обо всех операциях с томом системы контейнера. Он видит операции с файлами заполнителей, а также изменения или новые добавления файлов.

Проблема с избыточным сканированием

Скорее всего, в зависимости от одного и того же уровня пакета будет много контейнеров. Один и тот же поток данных заданного файла пакета предоставит данные для заполнителей на нескольких томах системы контейнеров. В результате в каждом контейнере могут быть избыточные проверки одних и того же данных. Это оказывает ненужное негативное влияние на производительность контейнеров. Это означающая стоимость, учитывая, что контейнеры, как ожидается, запускаются быстро и могут быть кратковременными.

Чтобы избежать избыточного сканирования в контейнерах, рекомендуется изменить поведение антивирусной программы, как описано ниже. Продукт антивирусной программы определяет преимущества риска и вознаграждения для своих клиентов для этого подхода. Дополнительные сведения см. в разделе Преимущества и риски в нижней части этой страницы.

1. Установка пакета

Во время установки пакета средства управления выкладывают файлы в пакет под корневым слоем. Фильтр av должен продолжать проверять файлы, так как они помещаются в корень пакета, и обычно это так. Это гарантирует, что все файлы на уровнях изначально будут очищены по отношению к вредоносным программам.

2. Запуск и выполнение контейнера

Для сканирования тома контейнера в режиме реального времени AVs должны проверяться таким образом, чтобы избежать избыточности. Файлы заполнителей требуют особого внимания. Файлы, измененные контейнером, или новые файлы, созданные в контейнере, не перенаправляются, поэтому избыточное сканирование не является проблемой.

Чтобы избежать избыточных проверок, фильтр антивирусной программы сначала должен определить тома контейнеров и заполнители на этих томах. По различным причинам фильтр антивирусной программы не может напрямую запрашивать, является ли том томом контейнера или если данный файл является файлом-заполнителем. Фильтр изоляции скрывает точку повторного анализа заполнителя по соображениям совместимости приложений (некоторые приложения работают неправильно, если им известно, что они обращаются к точкам повторного анализа). Кроме того, том является только томом контейнера во время выполнения контейнера. Контейнер может быть остановлен, а том может остаться в состоянии повторного подключения. Вместо этого при предварительном создании фильтр av должен запрашивать объект файла, чтобы определить, открывается ли он в контексте контейнера. Затем он может присоединить и ECP к созданию и получить состояние заполнителя при завершении создания.

В продукте антивирусной программы требуются следующие изменения:

  • Во время предварительного создания тома контейнера присоедините ECP к параметру Create CallbackData, который получит сведения о заполнителях. Эти создания можно определить, запросив параметры SILO из объекта fileobject с помощью IoGetSiloParameters. Обратите внимание, что фильтр должен указывать размер в структуре WCIFS_REDIRECTION_ECP_CONTEXT . Все остальные поля устанавливаются, если ecp подтвержден.

  • Если после создания ecp подтвержден, проверьте флаги перенаправления ECP. Флаги будут указывать, был ли открытый объект обслуживался из слоя пакета или из исходного корня (новые или измененные файлы). Флаги также указывают, зарегистрирован ли уровень пакета и является ли он удаленным.

    • Для открытий, обслуживающихся с удаленного уровня, антивирусная программа должна пропустить сканирование файла. На это указывают флаги перенаправления: WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_LAYER && WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_REMOTE_LAYER

      Можно предположить, что удаленные слои были проверены на удаленном узле. Пакеты контейнеров Hyper-V являются удаленными для виртуальной машины служебной программы, на котором размещен контейнер. Эти пакеты обычно сканируются на узле Hyper-V при обращении к виртуальной машине служебной программы через замыкающий цикл SMB.

      Так как VolumeGUID и FileId не применяются к удаленному репозиторию, эти поля не будут заданы.

    • Для открытий, обслуживающихся с зарегистрированного уровня, антивирусная программа должна пропустить сканирование файла. На это указывают флаги перенаправления: WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_LAYER && WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_REGISTERED_LAYER

      Зарегистрированный слой должен проверяться асинхронно во время установки пакета и после обновления сигнатуры.

      Примечание

      Зарегистрированные слои могут не идентифицироваться системой в будущем. В этом случае локальные файлы слоев необходимо идентифицировать по отдельности, как описано в последнем маркере.

    • Для открытий, обслуживаемых с локального уровня пакета, AV должна использовать предоставленные VolumeGUID и FileId файла слоя, чтобы определить, требуется ли проверять файл. Для этого, скорее всего, потребуется av для создания кэша отсканированных файлов, индексированных по guid тома и FileId. На это указывает флаг перенаправления: WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_LAYER

    • Для новых или измененных файлов в исходном расположении продукт антивирусной программы должен сканировать файлы и выполнять нормальное исправление. На это указывает флаг перенаправления: WCIFS_REDIRECTION_FLAGS_CREATE_SERVICED_FROM_SCRATCH

      Так как в этом случае нет файла слоя, VolumeGUID и FileId не будут заданы.

    • Не сохраняйте сообщение "Этот файл обслуживается из слоя" в качестве постоянного маркера в контексте потока. Файл, изначально обслуживающийся из корня слоя, может быть изменен после создания. В этом случае последующее создание для того же файла может указывать на то, что создание обслуживается из тома контейнера. Фильтр антивирусной программы должен понимать, что это может произойти.

Не используйте раздел реестра LayerRootLocations

В прошлом мы рекомендовали LayerRootLocations использовать раздел реестра для получения расположения базового образа. Продукты антивирусной программы больше не должны использовать этот раздел реестра. Вместо этого используйте подход, рекомендуемый в этом разделе, чтобы избежать избыточного сканирования.

Расположение реестра, которое использовалось для регистрации уровней пакета:

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

Преимущества и риски

Рассмотрите следующие преимущества и риски, связанные с использованием этих новых оптимизаций для av-продуктов.

Преимущества

  • Не влияет на время запуска или выполнения контейнера (даже для первого контейнера).
  • Избегает сканирования одного и того же содержимого в нескольких контейнерах.
  • Подходит для контейнеров Windows Server. Для контейнера Hyper-V это подходит для пакетов, но требует дополнительных работ для запуска контейнера.

Риски

Если контейнер запускается в период между обновлением подписи и очередной запланированной упреждающей проверкой вредоносных программ, файлы, выполняемые в контейнере, не проверяются с учетом последних сигнатур защиты от вредоносных программ. Чтобы снизить этот риск, антивирусная программа может пропускать проверки перенаправленных файлов только в том случае, если с момента последней упреждающей проверки не было обновления сигнатуры. Это приведет к снижению производительности контейнера до тех пор, пока не будет завершена упреждающая проверка с последними сигнатурами. При необходимости продукт антивирусной программы может активировать упреждающую проверку в этой ситуации, чтобы последующие запуски контейнеров были более эффективными.