Freigeben über


So erstellen Sie In-Memory OLTP App-Kontroll- und Managed-Installer-Richtlinien

Gilt für:SQL Server

SQL Server kompiliert und verknüpft eine Dynamic Link Library (DLL) für jede systemeigene kompilierte Tabelle und gespeicherte Prozedur, die über die systemeigene Implementierung dieser Objekte in C-Code verfügt. Während die In-Memory OLTP-DLLs dynamisch generiert werden, stellen die Dateien selbst möglicherweise einige Herausforderungen dar, wenn Complianceanforderungen bestehen, die über die Codeintegritätserzwingung als Kriterium verfügen.

Was ist HKDLLGEN?

In SQL Server 2022 (16.x) kumulativen Update 17 und höheren Versionen wurde eine Komponente, die als Hekaton DLL-Generator bezeichnet wird, zur In-Memory OLTP-Funktion hinzugefügt. Ohne den neuen Prozess der Hekaton DLL Generation (hkdllgen) konvertiert der Haupt-SQL Server-Prozess T-SQL in C-Code und startet dann Compiler- und Linkerprozesse, um nicht signierte In-Memory OLTP-DLLs zu generieren. Hkdllgenvalidiert und akzeptiert als Zwischenanwendung die Ausgabe von SQL Server und erstellt dann signierte DLLs. Um Codeintegritätsrichtlinien für diese DLLs zu erzwingen, muss der Hkdllgen Prozess als Windows Defender Application Control (WDAC) Verwalteter Installer festgelegt werden.

Der Hekaton DLL-Generator ist der erste Schritt, um sicherzustellen, dass behördliche Complianceanforderungen wie Codeintegrität mit In-Memory OLTP generierten DLLs erfüllt werden können. Die Codeintegrität in diesem Kontext stellt sicher, dass DLLs, die In-Memory OLTP generiert, vom Betriebssystem ab dem Zeitpunkt, zu dem sie erstellt werden, vertrauenswürdig sind, bis sie geladen und ausgeführt werden. Mit der Möglichkeit, die Hekaton DLL-Generatorkomponente als verwaltetes Installationsprogramm festzulegen, kann das WDAC-Codeintegritätssystem den generierten DLLs vertrauen und diese verwenden.

Wie funktioniert ein verwaltetes Installationsprogramm?

Verwaltetes Installationsprogramm verwendet eine spezielle Regelsammlung in AppLocker-, um Binärdateien zu bestimmen, die von Ihrer Organisation als autorisierte Quelle für die Anwendungsinstallation vertrauenswürdig sind. Wenn eine dieser vertrauenswürdigen Binärdateien ausgeführt wird, überwacht Windows den Prozess der Binärdatei (und alle untergeordneten Prozesse, die es startet) und überwacht, ob Dateien auf den Datenträger geschrieben werden. Wenn Dateien geschrieben werden, wird der Datei ein Anspruch oder Tag hinzugefügt, der oder das von einem verwalteten Installationsprogramm stammt.

Mit AppLocker kann WDAC-App-Steuerelement so konfiguriert werden, dass Dateien, die von einem verwalteten Installationsprogramm installiert werden, als vertrauenswürdig konfiguriert werden, indem die Option Enabled:Managed Installer zu einer App-Steuerelementrichtlinie hinzugefügt wird. Wenn diese Option aktiviert ist, prüft die App-Kontrolle die Ursprungsinformationen des verwalteten Installationsprogramms, um festzustellen, ob eine Binärdatei ausgeführt werden darf. Solange es keine Ablehnungsregeln für die Binärdatei gibt, erlaubt die App-Kontrolle die Ausführung rein basierend auf ihrem verwalteten Installationsursprung. AppLocker steuert auch die Ausführung ausführbarer Dateien, die als verwalteter Installer festgelegt sind, bietet jedoch keine Vertrauenskette für ausführbare Dateien und DLLs wie WDAC. In diesem Artikel erfahren Sie, wie Sie den hkdllgen Prozess als verwaltetes Installationsprogramm festlegen und konfigurieren, das sowohl von AppLocker als auch von WDAC verwendet werden kann.

Aktivieren des Hekaton DLL-Generators

Beispiel

In diesem Beispiel wird sp_configure verwendet, um die Hekaton DLL-Generatoroption zu aktivieren, die als external xtp dll gen util enabledbezeichnet wird. Es wird eine Testdatenbank zusammen mit einer testspeicheroptimierten Tabelle erstellt.

  1. Erstellen Sie eine Testdatenbank.

    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. Erstellen Sie eine Testtabelle in der Testdatenbank.

    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. Für jede .dll im Unterverzeichnis „<path-to-data-directory>\xtp\<database_id>“ wird eine neue Datei der Länge 0 mit einer .gen-Erweiterung generiert. Die DLLs sind jetzt signiert.

Schritte zum Erstellen von In-Memory OLTP AppLocker- und verwalteten Installer-Richtlinien

Die AppLocker-Richtlinienerstellungs-UI im GPO-Editor (gpedit.msc) und die AppLocker PowerShell-Cmdlets können nicht direkt zum Erstellen von Regeln für die Regelsammlung des verwalteten Installationsprogramms verwendet werden. Sie können jedoch einen XML- oder Text-Editor verwenden, um eine EXE-Regelauflistungsrichtlinie in eine ManagedInstaller-Regelauflistung zu konvertieren.

Wichtig

Eine AppLocker-Richtlinie sollte vorhanden sein, bevor Sie die ausführbare Datei der Hekaton-DLL-Generation der AppLocker-Steuerrichtlinienkonfiguration eines Servers hinzufügen, da andernfalls das Risiko besteht, dass grundlegende Betriebssystemfunktionen möglicherweise von Windows Defender blockiert werden. Weitere Informationen zum Erstellen, Testen und Warten von Anwendungssteuerungsrichtlinien finden Sie im AppLocker-Bereitstellungshandbuch.

Die übrigen Beispiele gelten für Windows Server 2022- und Windows 11- und neueren Versionen.

Führen Sie den folgenden PowerShell-Befehl aus, um zu überprüfen, ob mindestens eine exe- Regelsammlung innerhalb der AppLocker-Steuerrichtlinienkonfiguration des Servers vorhanden ist:

Get-AppLockerPolicy -Effective

Oder um die Ausgabe der effektiven Richtlinien in einer XML-Datei zum Anzeigen zu speichern:

Get-AppLockerPolicy -Effective -Xml > effective_app_policy.xml

Die folgenden Schritte führen Sie durch den Prozess des Erstellens und Anwendens einer Richtlinie, die auf einen lokalen Server angewendet werden kann. Eine mit diesen Schritten generierte Richtlinie für verwaltete Installationsprogramme kann mit einer GPO-weiten Richtlinie zusammengeführt und an alle SQL-Server innerhalb einer Umgebung verteilt oder auf die lokale Richtlinie eines einzelnen Servers angewendet werden. Es wird empfohlen, mit einem Domänenadministrator zusammenzuarbeiten, um die Codeintegritätsrichtlinie auf Domänenebene anzuwenden.

  1. Verwenden Sie New-AppLockerPolicy-, um eine EXE-Regel für die Datei zu erstellen, die Sie als verwaltetes Installationsprogramm entwerfen. In diesem Beispiel wird eine Regel für den Hekaton-DLL-Generator mit dem Publisher-Regeltyp erstellt, aber jeder AppLocker-Regeltyp kann verwendet werden. Möglicherweise müssen Sie die Ausgabe zur Lesbarkeit neu formatieren.

    #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. Bearbeiten Sie die AppLocker_HKDLLGEN_Policy.xml manuell, und ändern Sie die folgenden Attributwerte:

    • RuleCollection Type bis ManagedInstaller
    • EnforcementMode bis AuditOnly
    • BinaryVersionRange LowSection bis "*" und HighSection bis "*"

    Veränderung:

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

    in:

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

    Veränderung:

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

    in:

    <BinaryVersionRange LowSection="*" HighSection="*"/>
    
  3. Stellen Sie die Konfigurationsrichtlinie für verwaltete Installationsprogramme von AppLocker bereit. Sie können entweder die AppLocker-Richtlinie importieren und mit Einer Gruppenrichtlinie bereitstellen oder ein Skript verwenden, um die Richtlinie mit dem cmdlet Set-AppLockerPolicy bereitzustellen, wie im folgenden PowerShell-Befehl gezeigt.

    #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. Wenn Sie die AppLocker-Richtlinie über ein PowerShell-Skript bereitstellen, verwenden Sie das hilfsprogramm appidtel.exe aus einer Administrativen Eingabeaufforderung, um den AppLocker-Anwendungsidentitätsdienst und den AppLocker-Filtertreiber zu konfigurieren.

    appidtel.exe start [-mionly]
    

Aktivieren der Option "Verwaltetes Installationsprogramm" im Windows Defender-Anwendungssteuerungs-Assistenten für Unternehmen

Damit die Windows Defender-Anwendungssteuerung (WDAC) den vom hkdllgen.exe-Prozess generierten DLLs vertraut, muss die Option "Aktiviert: Verwalteter Installer" in Ihrer App-Steuerungsrichtlinie angegeben werden. Diese Einstellung kann mithilfe des Set-RuleOption Cmdlets mit Option 13 definiert werden.

Generieren Sie eine Codeintegritätsrichtlinien-Datei aus einer der Vorlagen für Basisrichtlinien des WDAC-Basisrichtlinienassistenten.

Ab der Richtlinie Standard Windows stehen weniger Optionen zur Verfügung, die in diesem Handbuch entfernt werden. Weitere Informationen zu den Richtlinien für den Modi „Standard Windows“ und „Microsoft zulassen“ finden Sie im Artikel Beispiele für Basisrichtlinien für App Control for Business.

Basisvorlagenrichtlinie

Screenshot des WDAC-Basisvorlagenbildschirms.

Nachdem die Windows-Richtlinienbasisvorlage ausgewählt wurde, geben Sie der Richtlinie einen Namen, und wählen Sie aus, wo die App-Steuerelementrichtlinie auf dem Datenträger gespeichert werden soll.

Auswählen eines Richtlinientyps

Wählen Sie den Richtlinientyp Mehrfachrichtlinienformat und Basisrichtlinie aus.

Screenshot des Bildschirms

Konfigurieren einer Richtlinienvorlage

Aktivieren Sie nur die Regeloptionen „Verwaltetes Installationsprogramm“, „Richtlinie aktualisieren ohne Neustart“, „Unsignierte Systemintegritätsrichtlinie“ und „Benutzermodus-Codeintegritätsrichtlinie“. Deaktivieren Sie die anderen Richtlinienregeloptionen. Dazu drücken Sie die Schiebereglerschaltfläche neben den Titeln der Richtlinienregel.

Die folgende Tabelle enthält eine Beschreibung jeder Richtlinienregel, beginnend mit der spalte links. Der Artikel Richtlinienregeln enthält eine vollständige beschreibung der einzelnen Richtlinienregeln.

Regeloption Beschreibung
Verwaltetes Installationsprogramm Verwenden Sie diese Option, um Anwendungen, die von einer Softwareverteilungslösung wie dem Hekaton DLL-Generator installiert werden, automatisch zuzulassen, der als verwaltetes Installationsprogramm definiert wurde.
Updaterichtlinie ohne Neustart Verwenden Sie diese Option, um zuzulassen, dass zukünftige App Control for Business-Richtlinienupdates angewendet werden, ohne dass ein Systemneustart erforderlich ist.
nicht signierte Systemintegritätsrichtlinie Ermöglicht es, dass die Richtlinie unsigniert bleibt Wenn diese Option entfernt wird, muss die Richtlinie signiert sein und updatePolicySigners zur Richtlinie hinzugefügt werden, um zukünftige Richtlinienänderungen zu ermöglichen.
Codeintegrität im Benutzermodus App Control for Business-Richtlinien beschränken sowohl Kernelmodus- als auch Benutzermodus-Binärdateien. Standardmäßig sind nur Binärdateien im Kernelmodus eingeschränkt. Durch Aktivieren dieser Regeloption werden ausführbare Dateien und Skripts im Benutzermodus überprüft.

Screenshot des Bildschirms „Richtlinienvorlage konfigurieren“

Sie sollten zunächst Überwachungsmodus aktivieren, da sie es Ihnen ermöglicht, neue App Control for Business-Richtlinien zu testen, bevor Sie sie erzwingen. Im Überwachungsmodus wird keine Anwendung blockiert, sondern die Richtlinie protokolliert ein Ereignis, wenn eine Anwendung außerhalb der Richtlinie gestartet wird. Aus diesem Grund sind alle Vorlagen standardmäßig im Überwachungsmodus aktiviert.

Dateiregeln

Entfernen Sie alle Richtliniensignaturregeln aus der Liste.

Screenshot des Bildschirms

(Optional) Fügen Sie eine Benutzerdefinierte Publisher-Richtlinienregel hinzu, die sicherstellt, dass Dateien wie hkdllgen.exe als Herausgeber signiert werden.

Screenshot des Bildschirms „Benutzerdefinierte WDAC-Richtlinie“

Der Publisher-Dateiregeltyp verwendet Eigenschaften in der Codesignaturzertifikatskette, um Dateiregeln zu basisieren.

Screenshot des WDAC-Richtlinienregelbildschirms.

Nachdem Sie die Schaltfläche Regel erstellen ausgewählt haben, sollte eine einzelne Richtliniensignaturregel vorhanden sein.

Screenshot des Bildschirms „WDAC-Richtliniensignatur-Regelliste“

Stellen Sie Ihre App Control-Richtlinie bereit. Weitere Informationen finden Sie unter Bereitstellen von App Control for Business-Richtlinien.

Nachdem die Richtlinie erstellt wurde, wird die neue Richtlinie in den Pfad geschrieben, der als Speicherort der Richtliniendatei ausgewählt wurde. Die neue binäre Version des Richtliniendateinamens ist mit der Richtlinienversion am Ende des Dateinamens versehen. Die Richtlinie.cip-Datei kann in das Unterverzeichnis C:\Windows\System32\CodeIntegrity\CiPolicies\Active der SQL Server-Instanz kopiert werden.

Manuelles Bereitstellen einer Codeintegritätsrichtlinie

Um eine optimiertere Codeintegritätsrichtlinie zu erstellen, kann eine allgemeinere policy.xml-Datei, die nach Abschluss des WDAC App Control-Richtlinien-Assistenten generiert wurde, bearbeitet werden. Dieses Szenario kann auftreten, wenn der Richtlinienassistent für WDAC-App Control nicht auf einem SQL Server, sondern von einer Arbeitsstation ausgeführt wird. Beispielsweise könnte eine weniger angepasste Code-Integritätsrichtlinien-Datei wie folgt aussehen:

   <?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>

In diesem Beispiel ist keine signierte Herausgeberregel vorhanden, und es wird davon ausgegangen, dass die Richtliniendatei ein lokales Arbeitsverzeichnis (z. B. C:\Temp) mit dem Dateinamen Hekaton_Custom_CIPolicy.xmlverwendet.

#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"

Um die Richtlinie anzuwenden, ohne den Server neu zu starten und den Status der Codeintegrität zu überprüfen, führen Sie dieses PowerShell-Skript aus:

# 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*

Überprüfen, ob die generierten Hekaton-DLLs durch Codeintegrität vertrauenswürdig sind

Sobald die Codeintegrität im Überwachungsmodus oder im aktiven Modus ausgeführt wird, werden die vom Hekaton DLL-Generator generierten DLLs von Windows als vertrauenswürdig eingestuft und verfügen über ein erweitertes Attribut zu den Dateien.

Ein Smartlocker-Anspruch wird als Teil der Metadaten hinzugefügt. Dies kann mithilfe des Befehls „fsutil“ über eine Eingabeaufforderung „Administrativ“ angezeigt werden. Wählen Sie beispielsweise eine der dynamisch generierten In-memory-OLTP-Dateien aus dem Ordner "\Data\xtp\<database_id>" aus, und führen Sie den folgenden Befehl aus:

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

Screenshot der fsutil-Ausgabe

"Funktion 'Verwaltetes Installationsprogramm entfernen'"

Um das Feature "Verwaltetes Installationsprogramm" vom Gerät zu entfernen, müssen Sie die AppLocker-Richtlinie für verwaltete Installationsprogramme vom Gerät entfernen, indem Sie die Anweisungen unter Löschen einer AppLocker-Regel befolgen: Löschen von AppLocker-Richtlinien für ein einzelnes System oder Remotesysteme.