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


Как создать политики In-Memory управления приложениями OLTP и управляемыми установщиками

применимо к:SQL Server

SQL Server компилирует и связывает библиотеку динамических ссылок (DLL) для каждой скомпилированной таблицы и хранимой процедуры, которая имеет собственную реализацию этих объектов в коде C. Хотя библиотеки DLL OLTP In-Memory создаются динамически, сами файлы могут создать некоторые проблемы, если существуют требования к обеспечению целостности кода в качестве критерия.

Что такое HKDLLGEN?

В SQL Server 2022 (16.x) накопительного обновления 17 и более поздних версий компонент, известный как генератор DLL Hekaton, был добавлен в функцию OLTP In-Memory. Без нового процесса создания DLL Hekaton (hkdllgen) основной процесс SQL Server преобразует T-SQL в код C, а затем запускает процессы компилятора и компоновщика для создания неподписанных In-Memory OLTP DLL. Hkdllgen, как промежуточное приложение, проверяет и принимает данные из SQL Server, а затем создает подписанные DLL. Чтобы применить политики целостности кода для этих библиотек DLL, процесс Hkdllgen необходимо указать как элемент управления приложениями Защитника Windows (WDAC) управляемый установщик.

Генератор DLL Hekaton — это первый шаг к обеспечению соответствия нормативным требованиям, таким как целостность кода, с помощью генерации DLL, созданных OLTP In-Memory. Целостность кода в этом контексте гарантирует, что библиотеки DLL, In-Memory создаваемые OLTP, являются доверенными операционной системой с момента их создания до их загрузки и выполнения. Возможность назначить компонент генератора DLL Hekaton в качестве управляемого установщика позволяет системе целостности кода WDAC доверять созданным библиотекам DLL и позволяет использовать их.

Как работает управляемый установщик?

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

С помощью AppLocker управление приложениями WDAC можно настроить для доверия файлов, установленных управляемым установщиком, добавив параметр Enabled:Managed Installer в политику управления приложениями. Если этот параметр установлен, элемент управления приложениями проверяет сведения о источнике управляемого установщика при определении того, разрешено ли выполнение двоичного файла. При отсутствии правил запрета для бинарного файла, App Control позволяет ему запускаться исключительно на основе происхождения управляемого установщика. AppLocker также контролирует выполнение исполняемых файлов, которые обозначены как управляемый установщик, но не предлагает цепочку доверия для исполняемых файлов и DLL, как это делает WDAC. В этой статье мы рассмотрим, как назначить и настроить процесс hkdllgen в качестве управляемого установщика, который можно использовать как AppLocker, так и WDAC.

Включение генератора DLL Hekaton

Пример

В этом примере sp_configure используется для включения параметра генератора DLL Hekaton, который называется external xtp dll gen util enabled. Создается тестовая база данных вместе с оптимизированной для тестовой памяти таблицей.

  1. Создайте тестовую базу данных.

    USE master;
    GO
    
    EXECUTE sp_configure 'external xtp dll gen util enabled', 1;
    RECONFIGURE;
    GO
    
    CREATE DATABASE HekatonDbForTesting ON
    PRIMARY (
        NAME = N'HekatonDbForTesting_Data',
        FILENAME = N'<path-to-data-directory>\HekatonDbForTesting_Data.mdf'
    ),
    FILEGROUP [HekatonDbForTestin_XTP_FG] CONTAINS MEMORY_OPTIMIZED_DATA (
        NAME = HekatonDbForTesting_XTP_CHKPOINT,
        FILENAME = N'<path-to-data-directory>\HekatonDbForTesting_XTP_CHKPOINT'
    )
    LOG ON (
        NAME = N'HekatonDbForTesting_log',
        FILENAME = N'<Path_To_Log_Directory>\HekatonDbForTesting_Log.ldf'
    );
    GO
    
  2. Создайте тестовую таблицу в тестовой базе данных.

    USE HekatonDbForTesting;
    GO
    
    CREATE TABLE dbo.TestCustomerTable
    (
        CustomerId INT NOT NULL
            PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1000000),
        FirstName NVARCHAR (50) NOT NULL,
        LastName NVARCHAR (50) NOT NULL
    )
    WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
    GO
    
  3. Создается новый файл нулевой длины с расширением .gen для каждого .dll в подкаталоге <path-to-data-directory>\xtp\<database_id>. Теперь библиотеки DLL подписаны.

Действия по созданию политик In-Memory OLTP AppLocker и управляемого установщика

Пользовательский интерфейс создания политики AppLocker в редакторе групповой политики (gpedit.msc) и командлеты PowerShell AppLocker нельзя использовать непосредственно для создания правил для коллекции правил управляемого установщика. Однако можно использовать XML-редактор или текстовый редактор для преобразования политики сбора правил EXE в коллекцию правил ManagedInstaller.

Важный

Политика AppLocker должна существовать, прежде чем добавлять исполняемый файл создания DLL Hekaton в конфигурацию политики управления AppLocker сервера, в противном случае существует риск блокировки базовых функций операционной системы Windows Defender. Дополнительные сведения о создании, тестировании и обслуживании политик управления приложениями см. в руководстве по развертыванию AppLocker.

Остальные примеры применяются к Windows Server 2022 и Windows 11 и более поздних версиях.

Чтобы убедиться, что в конфигурации политики управления AppLocker на серверах существует по крайней мере одна коллекция правил exe , выполните следующую команду PowerShell:

Get-AppLockerPolicy -Effective

Или сохранить выходные данные эффективных политик в XML-файл для просмотра:

Get-AppLockerPolicy -Effective -Xml > effective_app_policy.xml

Ниже описан процесс создания и применения политики, которую можно применить к локальному серверу. Политика управляемого установщика, созданная с помощью этих шагов, может быть объединена в политику уровня групповой политики и распределена по всем серверам SQL Server в среде или применена к локальной политике одного сервера. Рекомендуется работать с администратором домена, чтобы политика целостности кода применялся на уровне домена.

  1. Используйте New-AppLockerPolicy, чтобы сделать правило EXE для файла, который вы назначаете в качестве управляемого установщика. В этом примере создается правило для генератора DLL Hekaton с помощью типа правила издателя, но можно использовать любой тип правила AppLocker. Возможно, потребуется переформатировать выходные данные для удобства чтения.

    #Change the current working path of the PowerShell command line or ISE to something other than the default (that is, C:\Temp). Retrieve SQL Server Path
    $SQLPath = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\MSSQLServer\Setup' -Name 'SQLPath'
    $FullPath = Join-Path -Path $SQLPath.SQLPath -ChildPath 'Binn\xtp'
    
    # Set an environment variable for the In-memory OLTP Path
    [System.Environment]::SetEnvironmentVariable('SQLPathWithXtp', $FullPath, 'Process')
    
    # Generate an AppLocker Policy for the HKDLLGEN.EXE in the current working directory. The Get-AppLockerFileInformation cmdlet will extract the    executables publisher information as well as generate a hash for the binary.
    Get-ChildItem -Path ${env:SQLPathWithXtp}'.\hkdllgen.exe' | Get-AppLockerFileInformation | New-AppLockerPolicy -RuleType Publisher -User Everyone    -Xml > AppLocker_HKDLLGEN_Policy.xml
    
  2. Вручную измените AppLocker_HKDLLGEN_Policy.xml и измените следующие значения атрибутов:

    • RuleCollection Type до ManagedInstaller
    • EnforcementMode до AuditOnly
    • BinaryVersionRange LowSection по "*", HighSection по "*"

    Менять:

    <RuleCollection Type="Exe" EnforcementMode="NotConfigured">
    

    Кому:

    <RuleCollection Type="ManagedInstaller" EnforcementMode="AuditOnly">
    

    Менять:

    <BinaryVersionRange LowSection="2022.160.4175.1" HighSection="2022.160.4175.1"/>
    

    Кому:

    <BinaryVersionRange LowSection="*" HighSection="*"/>
    
  3. Разверните политику конфигурации управляемого установщика AppLocker. Вы можете импортировать политику AppLocker и развернуть с помощью групповой политики или использовать скрипт для развертывания политики с помощью командлета Set-AppLockerPolicy, как показано в следующей команде PowerShell.

    #Enable the AppLocker Policy and merge with the existing policy that exists on the system.
    Set-AppLockerPolicy -XmlPolicy .\AppLocker_HKDLLGEN_Policy.xml -Merge -ErrorAction SilentlyContinue
    
  4. При развертывании политики AppLocker с помощью скрипта PowerShell используйте служебную программу appidtel.exe из командной строки администрирования, чтобы настроить службу удостоверений приложения AppLocker и драйвер фильтра AppLocker.

    appidtel.exe start [-mionly]
    

Включение параметра управляемого установщика в мастере управления приложениями в Защитнике Windows для бизнеса

Чтобы элемент управления приложениями Защитника Windows (WDAC) доверял библиотекам DLL, созданным процессом hkdllgen.exe, в вашей политике контроля приложений следует указать параметр Enabled: Managed Installer. Этот параметр можно определить с помощью командлета Set-RuleOption с вариантом 13.

Создайте файл политики целостности кода из одного из мастера базовой политики WDAC базовых политик шаблона.

Начиная с политики windows по умолчанию по умолчанию, удаляются в этом руководстве меньше параметров. Дополнительную информацию о режиме по умолчанию Windows и политиках режима разрешения Microsoft можно найти в статье базы политик для бизнеса с примерами управления приложениями .

Политика базового шаблона

снимок экрана базового шаблона WDAC.

После выбора базового шаблона политики Windows присвойте политике имя и выберите место для сохранения политики управления приложениями на диске.

Выбор типа политики

Выберите формат нескольких политик и базовой политики в качестве типа политики

снимок экрана: экран выбора типа политики WDAC.

Настройка шаблона политики

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

В следующей таблице описано каждое правило политики, начиная с левого столбца. В статье о правилах политики представлено более полное описание каждого правила политики.

Параметр правила Описание
управляемый установщик Используйте этот параметр, чтобы автоматически разрешить приложения, установленные с помощью решения для распространения программного обеспечения, например, генератора DLL Hekaton, которое было определено как управляемый установщик.
Политика обновления без перезагрузки Используйте этот параметр, чтобы разрешить применение будущих обновлений политики управления приложениями для бизнеса без необходимости перезагрузки системы.
Политика неподписанной целостности системы Позволяет политике оставаться незаверенной. Если этот параметр удален, политика должна быть подписана и UpdatePolicySigners должен быть добавлен в политику, чтобы включить будущие изменения политики.
целостность кода пользовательского режима Управление приложениями для бизнеса ограничивает двоичные файлы в режиме ядра и в пользовательском режиме. По умолчанию ограничиваются только двоичные файлы в режиме ядра. Включение этого параметра правила проверяет исполняемые файлы и скрипты в режиме пользователя.

снимок экрана: экран

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

Правила файлов

Удалите все правила подписывания политики из списка.

снимок экрана: экран правил файлов WDAC.

(необязательно) добавьте правило политики пользовательского издателя, которое гарантировало бы, что такие файлы, как hkdllgen.exe, будут подписаны издателем.

снимок экрана пользовательской политики WDAC.

Тип правила Publisher для файлов использует свойства в цепочке сертификатов подписи кода для создания правил файлов.

скриншот экрана с правилами политики WDAC.

После нажатия кнопки "Создать правило" должно существовать одно правило подписи политики.

снимок экрана списка правил подписания политики WDAC.

Разверните политику управления приложениями. См. развертывание политик управления приложениями для бизнеса.

После создания политики новая политика записывается в путь, выбранный в качестве расположения файла политики. Новая двоичная версия имени файла политики содержит версию политики, добавленную в конец имени файла. Файл .cip политикиможно скопировать в подкаталог C:\Windows\System32\CodeIntegrity\CiPolicies\Active экземпляра сервера SQL.

Развертывание политики целостности кода вручную

Чтобы создать более упрощенную политику целостности кода, можно изменить более универсальный файл политики .xml, созданный после завершения использования мастера политики управления приложениями WDAC. Этот сценарий может возникнуть, если мастер политики управления приложениями WDAC не выполняется на SQL Server, а на рабочей станции. Например, менее настраиваемый файл политики целостности кода может выглядеть следующим образом:

   <?xml version="1.0" encoding="utf-8"?>
<SiPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:sipolicy" PolicyType="Base Policy">
  <VersionEx>10.0.5.0</VersionEx>
  <PlatformID>{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}</PlatformID>
  <PolicyID>{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}</PolicyID>
  <BasePolicyID>{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}</BasePolicyID>
  <Rules>
    <Rule>
      <Option>Enabled:Unsigned System Integrity Policy</Option>
    </Rule>
    <Rule>
      <Option>Enabled:UMCI</Option>
    </Rule>
    <Rule>
      <Option>Enabled:Audit Mode</Option>
    </Rule>
    <Rule>
      <Option>Enabled:Managed Installer</Option>
    </Rule>
    <Rule>
      <Option>Enabled:Update Policy No Reboot</Option>
    </Rule>
  </Rules>
  <EKUs>
    <!--EKU ID-->
  </EKUs>
  <FileRules>
    <!--FileAttrib ID -->
  </FileRules>
  <Signers />
  <SigningScenarios>
    <SigningScenario ID="ID_SIGNINGSCENARIO_KMCI" FriendlyName="Kernel Mode Signing Scenario" Value="131">
      <ProductSigners />
    </SigningScenario>
    <SigningScenario ID="ID_SIGNINGSCENARIO_UMCI" FriendlyName="User Mode Signing Scenario" Value="12">
      <ProductSigners />
    </SigningScenario>
  </SigningScenarios>
  <UpdatePolicySigners />
  <HvciOptions>0</HvciOptions>
</SiPolicy>

В этом примере отсутствует правило подписанного издателя, и предполагается, что файл политики использует локальный рабочий каталог (например, C:\Temp) с именем файла Hekaton_Custom_CIPolicy.xml.

#Create Windows Defender Application Control (WDAC) policy and set Option 13 (Enabled:Managed Installer) and Option 16 (Enabled:Update Policy No Reboot)
Set-CIPolicyIdInfo -FilePath C:\Temp\Hekaton_Custom_CIPolicy.xml -PolicyName "Hekaton Managed Installer Policy" -ResetPolicyID
Set-RuleOption -FilePath C:\Temp\Hekaton_Custom_CIPolicy.xml -Option 13
Set-RuleOption -FilePath C:\Temp\Hekaton_Custom_CIPolicy.xml -Option 16

# The App Control policy XML file in this example is located in the C:\Temp directory.
$AppControlPolicyXMLFile = 'C:\Temp\test\Hekaton_Custom_CIPolicy.xml'

# Retrieve the Policy ID from the App Control policy XML. This will be used as the binary file name that Code Integrity will use.
[xml]$AppControlPolicy = Get-Content -Path $AppControlPolicyXMLFile
$PolicyID = $AppControlPolicy.SiPolicy.PolicyID
$PolicyBinary = $PolicyID + ".cip"

# Convert the App Control policy XML to binary format and save it into the Active Code Integrity path.
ConvertFrom-CIPolicy -XmlFilePath $AppControlPolicyXMLFile -BinaryFilePath "C:\Windows\System32\CodeIntegrity\CiPolicies\Active\$PolicyBinary"

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

# Refresh the Code Integrity policy without a reboot of the system
Invoke-CimMethod -Namespace root\Microsoft\Windows\CI -ClassName PS_UpdateAndCompareCIPolicy -MethodName Update -Arguments @{FilePath = "C:\Windows\System32\CodeIntegrity\CiPolicies\Active\$PolicyBinary" }

# View the current status of WDAC Code Integrity.
# If WDAC is in Audit mode the "UserModeCodeIntegrityPolicyEnforcementStatus" will have a value of "1" for Audit mode. A value of "0" signifies that Code Integrity is not active.
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard | Format-List *codeintegrity*

Убедитесь, что созданные библиотеки DLL Hekaton доверены компонентом "Целостность кода".

Как только функция обеспечения целостности кода начинает работать в режиме аудита или активном режиме, библиотеки DLL, созданные генератором DLL Hekaton, становятся доверенными в Windows, и к ним добавляются расширенные атрибуты.

Утверждение SmartLocker добавляется как часть метаданных. Это можно просмотреть с помощью команды fsutil из командной строки администрирования. Например, выберите один из динамически созданных OLTP-файлов в памяти из папки \Data\xtp\<database_id> и выполните следующую команду:

fsutil file queryea "D:\SQL\MSSQL17.MSSQLSERVER\MSSQL\DATA\xtp\5\xtp_t_5_64719283_196202718557591_1.dll"

снимок экрана выходных данных fsutil.

Удаление функции управляемого установщика

Чтобы удалить функцию управляемого установщика с устройства, необходимо удалить политику AppLocker управляемого установщика с устройства, выполнив инструкции по Удаление правила AppLocker: очистка политик AppLocker в одной системе или удаленных системах.