Delen via


Het maken van In-Memory OLTP App Control- en Managed Installer-beleid

van toepassing op:SQL Server-

SQL Server compileert en koppelt een DLL (Dynamic Link Library) voor elke systeemeigen gecompileerde tabel en opgeslagen procedure met de systeemeigen implementatie van deze objecten in C-code. Hoewel de In-Memory OLTP-DLL's dynamisch worden gegenereerd, kunnen de bestanden zelf enkele uitdagingen opleveren wanneer er nalevingsvereisten zijn die code-integriteit afdwingen als criterium.

Wat is HKDLLGEN?

In SQL Server 2022 (16.x) Cumulatieve update 17 en latere versies, is een onderdeel dat bekend staat als de Hekaton DLL-generator toegevoegd aan de functie In-Memory OLTP. Zonder het nieuwe Hekaton DLL Generation-proces (hkdllgen), converteert het belangrijkste SQL Server-proces T-SQL naar C-code en start vervolgens compiler- en linkerprocessen om niet-ondertekende In-Memory OLTP-DLL's te genereren. Hkdllgen, als tussenliggende toepassing, valideert en accepteert de uitvoer van SQL Server en maakt vervolgens ondertekende DLL's. Als u code-integriteitsbeleid wilt afdwingen voor deze DLL's, moet het Hkdllgen proces worden aangewezen als Windows Defender Application Control (WDAC) Managed Installer.

De Hekaton DLL-generator is de eerste stap om ervoor te zorgen dat nalevingsvereisten voor regelgeving, zoals code-integriteit kunnen worden voldaan aan In-Memory DOOR OLTP gegenereerde DLL's. Code-integriteit in deze context zorgt ervoor dat DLL's die In-Memory OLTP genereert, worden vertrouwd door het besturingssysteem vanaf het moment dat ze worden gemaakt totdat ze worden geladen en uitgevoerd. De mogelijkheid om het Hekaton DLL-generatoronderdeel aan te wijzen als een beheerd installatieprogramma stelt het WDAC-code-integriteitssysteem in staat om de DLL's te vertrouwen die worden gegenereerd en waarmee ze kunnen worden gebruikt.

Hoe werkt een beheerd installatieprogramma?

Het beheerde installatieprogramma maakt gebruik van een speciale regelverzameling in AppLocker- om binaire bestanden aan te wijzen die door uw organisatie worden vertrouwd als een geautoriseerde bron voor de installatie van toepassingen. Wanneer een van deze vertrouwde binaire bestanden wordt uitgevoerd, bewaakt Windows het proces van het binaire bestand (en alle door dit proces gestarte subprocessen) en kijkt het naar bestanden die naar de schijf worden geschreven. Wanneer bestanden worden geschreven, wordt een claim of tag toegevoegd aan het bestand als afkomstig van een beheerd installatieprogramma.

Met AppLocker kan WDAC App Control worden geconfigureerd om bestanden te vertrouwen die zijn geïnstalleerd door een beheerd installatieprogramma door de optie Enabled:Managed Installer toe te voegen aan een App Control-beleid. Wanneer deze optie is ingesteld, controleert App Control op informatie over de oorsprong van het beheerde installatieprogramma bij het bepalen of een binair bestand al dan niet mag worden uitgevoerd. Zolang er geen regels voor weigeren voor het binaire bestand zijn, kan App Control worden uitgevoerd op basis van de oorsprong van het beheerde installatieprogramma. AppLocker bepaalt ook de uitvoering van uitvoerbare bestanden die zijn aangewezen als een beheerd installatieprogramma, maar biedt geen vertrouwensketen voor uitvoerbare bestanden en DLL's zoals WDAC. In dit artikel wordt uitgelegd hoe u het hkdllgen proces kunt aanwijzen en configureren als een beheerd installatieprogramma dat door Zowel AppLocker als WDAC kan worden gebruikt.

De Hekaton DLL-generator inschakelen

Voorbeeld

In dit voorbeeld wordt sp_configure gebruikt om de Hekaton DLL-generatoroptie in te schakelen, die external xtp dll gen util enabledwordt genoemd. Er wordt een testdatabase gemaakt, samen met een tabel die is geoptimaliseerd voor testgeheugen.

  1. Maak een testdatabase.

    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. Maak een testtabel in de testdatabase.

    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. Er wordt een nieuw bestand met lengte nul met een .gen-extensie gegenereerd voor elke .dll in de submap van <path-to-data-directory>\xtp\<database_id>. De DLL-bestanden zijn nu gesigneerd.

Stappen voor het maken van In-Memory OLTP AppLocker- en Managed Installer-beleid

De gebruikersinterface voor het maken van AppLocker-beleid in GPO-editor (gpedit.msc) en de PowerShell-cmdlets van AppLocker kunnen niet rechtstreeks worden gebruikt om regels te maken voor de verzameling beheerde installatieregels. U kunt echter een XML- of teksteditor gebruiken om een EXE-regelverzamelingsbeleid te converteren naar een beheerdeinstaller-regelverzameling.

Belangrijk

Er moet een AppLocker-beleid bestaan voordat u het uitvoerbare bestand hekaton DLL-generatie toevoegt aan een configuratie van het AppLocker-beheerbeleid, anders bestaat het risico dat basisbesturingssysteemfuncties mogelijk worden geblokkeerd door Windows Defender. Zie de AppLocker-implementatiehandleidingvoor meer informatie over het maken, testen en onderhouden van beleidsregels voor toepassingsbeheer.

De overige voorbeelden zijn van toepassing op Windows Server 2022 en Windows 11 en latere versies.

Voer de volgende PowerShell-opdracht uit om te controleren of er ten minste een exe regelverzameling bestaat binnen de configuratie van het AppLocker-beheerbeleid voor servers:

Get-AppLockerPolicy -Effective

Of om de uitvoer van het effectieve beleid op te slaan in een XML-bestand voor weergave:

Get-AppLockerPolicy -Effective -Xml > effective_app_policy.xml

De volgende stappen doorlopen het proces voor het maken en toepassen van een beleid dat kan worden toegepast op een lokale server. Een beleid voor beheerd installatieprogramma dat wordt gegenereerd met behulp van deze stappen, kan worden samengevoegd in een GPO-beleid voor het hele groepsbeleid en gedistribueerd naar alle SQL-servers in een omgeving, of worden toegepast op het lokale beleid van één server. U wordt aangeraden samen te werken met een domeinbeheerder om het code-integriteitsbeleid op domeinniveau toe te passen.

  1. Gebruik New-AppLockerPolicy om een EXE-regel te maken voor het bestand dat u aanduidt als een beheerd installatieprogramma. In dit voorbeeld wordt een regel gemaakt voor hekaton DLL-generator met behulp van het regeltype Publisher, maar elk AppLocker-regeltype kan worden gebruikt. Mogelijk moet u de uitvoer opnieuw opmaken voor leesbaarheid.

    #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. Bewerk de AppLocker_HKDLLGEN_Policy.xml handmatig en wijzig de volgende kenmerkwaarden:

    • RuleCollection Type tot ManagedInstaller
    • EnforcementMode tot AuditOnly
    • BinaryVersionRange LowSection tot "*" en HighSection tot "*"

    Veranderen:

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

    Aan:

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

    Veranderen:

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

    Aan:

    <BinaryVersionRange LowSection="*" HighSection="*"/>
    
  3. Implementeer het configuratiebeleid voor het beheerde installatieprogramma van AppLocker. U kunt het AppLocker-beleid importeren en implementeren met Groepsbeleid of een script gebruiken om het beleid te implementeren met de Set-AppLockerPolicy-cmdlet, zoals wordt weergegeven in de volgende PowerShell-opdracht.

    #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. Als u het AppLocker-beleid implementeert via een PowerShell-script, gebruikt u het hulpprogramma appidtel.exe vanuit een opdrachtprompt met beheerdersrechten om de AppLocker-toepassingsidentiteitsservice en het AppLocker-filterstuurprogramma te configureren.

    appidtel.exe start [-mionly]
    

De optie voor het beheerde installatieprogramma inschakelen in de wizard Windows Defender Application Control for Business

Voor WDAC- (Windows Defender Application Control) de DLL's die worden gegenereerd door het hkdllgen.exe proces te vertrouwen, moet de optie ingeschakeld: Beheerd installatieprogramma optie worden opgegeven in het app-beheerbeleid. Deze instelling kan worden gedefinieerd met behulp van de Set-RuleOption cmdlet met optie 13.

Genereer een code-integriteitsbeleidsbestand van een van de wizard WDAC-basisbeleid sjabloonbasisbeleid.

Beginnen met het standaardbeleid voor Windows biedt minder opties, die in deze handleiding worden verwijderd. Meer informatie over de standaard windows-modus en het toestaan van beleid voor Microsoft-modus vindt u via het artikel Voorbeeld van app-beheer voor bedrijven.

Basissjabloonbeleid

Schermopname van het scherm WDAC-basissjabloon.

Zodra de basissjabloon voor Windows-beleid is geselecteerd, geeft u het beleid een naam en kiest u waar u het app-beheerbeleid op schijf wilt opslaan.

Een beleidstype selecteren

Kies de Meervoudig Beleid Formaat en Basisbeleid als het Beleidstype

Schermopname van het scherm WDAC Selecteer beleidstype.

Beleidssjabloon configureren

Schakel alleen de optie Beheerd installatieprogramma, beleid voor bijwerken zonder opnieuw opstarten, beleid voor niet-ondertekende systeemintegriteit, en beleidsregel voor code-integriteit in gebruikersmodus in. Schakel de andere beleidsregelopties uit. U kunt dit doen door op de schuifregelaarknop naast de titels van de beleidsregels te drukken.

De volgende tabel bevat een beschrijving van elke beleidsregel, te beginnen met de meest linkse kolom. Het artikel Beleidsregels bevat een volledigere beschrijving van elke beleidsregel.

Regeloptie Beschrijving
Managed Installer Gebruik deze optie om automatisch toepassingen toe te staan die zijn geïnstalleerd door een softwaredistributieoplossing, zoals de Hekaton DLL-generator, die is gedefinieerd als een beheerd installatieprogramma.
Beleid bijwerken zonder opnieuw op te starten Gebruik deze optie om toe te staan dat toekomstige app-beheer voor bedrijven-beleidsupdates worden toegepast zonder dat een systeem opnieuw hoeft te worden opgestart.
Beleid voor systeemintegriteit zonder handtekening Hiermee staat u toe dat het beleidsdocument ongetekend blijft. Wanneer deze optie wordt verwijderd, moet het beleid worden ondertekend en moet UpdatePolicySigners zijn toegevoegd aan het beleid om toekomstige beleidswijzigingen mogelijk te maken.
Gebruikersmodus-code-integriteit Beleid voor App-beheer voor Bedrijven beperkt zowel kernelmodus als binaries in gebruikersmodus. Standaard worden alleen binaire bestanden in de kernelmodus beperkt. Als u deze regeloptie inschakelt, worden uitvoerbare bestanden en scripts in de gebruikersmodus gevalideerd.

schermopname van het scherm Beleidssjabloon configureren.

U moet in eerste instantie auditmodus inschakelen, omdat u hiermee nieuwe App Control for Business-beleidsregels kunt testen voordat u ze afdwingt. Met de controlemodus wordt er geen toepassing geblokkeerd. In plaats daarvan wordt er een gebeurtenis bijgehouden wanneer een toepassing buiten het beleid wordt gestart. Daarom is voor alle sjablonen standaard controlemodus ingeschakeld.

Bestandsregels

Verwijder alle beleidsregels voor beleidsondertekening uit de lijst.

Schermopname van het scherm WDAC-bestandsregels.

(optioneel) Een aangepaste uitgeverbeleidsregel toevoegen die ervoor zorgt dat bestanden zoals hkdllgen.exe als uitgever worden ondertekend.

Schermopname van het aangepaste WDAC-beleidsscherm.

Het Publisher-bestandsregeltype gebruikt eigenschappen in de certificaatketen voor het ondertekenen van programmacode om bestandsregels op te stellen.

Schermafbeelding van het WDAC-beleidsregelscherm.

Nadat u de knop Regel maken hebt geselecteerd, moet er één regel voor beleidsondertekening bestaan.

Schermopname van het WDAC-beleidsondertekeningsregelscherm.

Implementeer uw app-beheerbeleid. Zie Implementeren van App Control for Business-beleid.

Zodra het beleid is gemaakt, wordt het nieuwe beleid geschreven naar het pad dat is gekozen als de locatie van het beleidsbestand. De nieuwe binaire versie van de naam van het beleidsbestand bevat de beleidsversie toegevoegd aan het einde van de bestandsnaam. Het -beleid.cip-bestand kan worden gekopieerd naar de C:\Windows\System32\CodeIntegrity\CiPolicies\Active submap op het SQL Server-exemplaar.

Een code-integriteitsbeleid handmatig implementeren

Als u een meer gestroomlijnd code-integriteitsbeleid wilt maken, kan een meer algemeen -beleid.xml bestand dat is gegenereerd nadat de wizard WdAC-appbeheerbeleid is voltooid, worden bewerkt. Dit scenario kan zich voordoen als de Wizard voor het WDAC-app-beheerbeleid niet wordt uitgevoerd op een SQL Server maar vanaf een desktopcomputer. Een minder aangepast code-integriteitsbeleidsbestand kan er bijvoorbeeld als volgt uitzien:

   <?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 dit voorbeeld is geen ondertekende uitgeversregel en wordt ervan uitgegaan dat het beleidsbestand gebruikmaakt van een lokale werkmap (bijvoorbeeld C:\Temp) met een bestandsnaam van 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"

Als u het beleid wilt toepassen zonder de server opnieuw op te starten en de status van code-integriteit te controleren, voert u dit PowerShell-script uit:

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

Controleer of de gegenereerde Hekaton-DLL's worden vertrouwd door Code Integrity

Zodra Code Integrity in de Audit-modus of de Actieve modus wordt uitgevoerd, worden de DLL's die door de Hekaton DLL-generator zijn gegenereerd, door Windows vertrouwd en hebben ze een uitgebreid kenmerk dat aan de bestanden is toegevoegd.

Er wordt een SmartLocker- claim toegevoegd als onderdeel van de metagegevens. Dit kan worden weergegeven met behulp van de fsutil-opdracht vanaf een beheeropdrachtprompt. Selecteer bijvoorbeeld een van de dynamisch gegenereerde bestanden in het geheugen OLTP uit de map \Data\xtp\<database_id> en voer de volgende opdracht uit:

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

schermopname van fsutil-uitvoer.

De functie Beheerd installatieprogramma verwijderen

Als u de functie Managed Installer van het apparaat wilt verwijderen, moet u het Managed Installer AppLocker-beleid van het apparaat verwijderen door de instructies te volgen bij Een AppLocker-regel verwijderen: AppLocker-beleid wissen op een enkel systeem of op externe systemen.