Sdílet prostřednictvím


Jak vytvořit zásady řízení OLTP aplikací a spravovaných instalačních programů In-Memory

platí pro:SQL Server

SQL Server zkompiluje a propojí dynamickou knihovnu odkazů (DLL) pro každou nativní zkompilovanou tabulku a uloženou proceduru, která má nativní implementaci těchto objektů v kódu jazyka C. I když se knihovny DLL OLTP pro In-Memory generují dynamicky, samotné soubory mohou představovat určité problémy, pokud jsou stanoveny požadavky na dodržování předpisů s vynucením integrity kódu jako kritériem.

Co je HKDLLGEN?

V systému SQL Server 2022 (16.x) od kumulativní aktualizace 17 a v novějších verzích byla do funkce In-Memory OLTP přidána komponenta známá jako generátor DLL Hekaton. Bez nového procesu generování knihovny DLL Hekaton (hkdllgen) hlavní proces SQL Serveru převede T-SQL na kód jazyka C a potom spustí procesy kompilátoru a linkeru, které vygenerují nepodepsané In-Memory knihovny DLL OLTP. Hkdllgen, jako zprostředkující aplikace, ověří a přijme výstup z SQL Serveru a pak vytvoří podepsané knihovny DLL. Aby bylo možné vynutit zásady integrity kódu pro tyto knihovny DLL, musí být proces Hkdllgen určen jako Windows Defender Application Control (WDAC) spravovaného instalačního programu.

Generátor knihoven DLL Hekaton je prvním krokem k tomu, aby požadavky na zákonnou shodu, jako je integrita kódu , mohly být splněny s knihovnami DLL generovanými systémem OLTP In-Memory. Integrita kódu v tomto kontextu zajišťuje, aby knihovny DLL, které In-Memory OLTP vygenerovaly, důvěřovaly operačnímu systému od doby jejich vytvoření, dokud se nenačtou a nespustí. Schopnost určit komponentu generátoru knihovny DLL Hekaton jako spravovaný instalační program umožňuje systému integrity kódu WDAC důvěřovat knihovnám DLL, které jsou generovány a umožňují je použít.

Jak funguje spravovaný instalační program?

Spravovaný instalační program používá speciální kolekci pravidel v AppLockeru k určení binárních souborů, které jsou vaší organizací důvěryhodné jako autorizovaný zdroj pro instalaci aplikace. Když se spustí některý z těchto důvěryhodných binárních souborů, systém Windows monitoruje proces binárního souboru (a všechny podřízené procesy, které spustí) a sleduje, jestli se soubory zapisují na disk. Při zápisu souborů se do souboru přidá příznak nebo značka, které pocházejí ze spravovaného instalačního programu.

Pomocí AppLockeru lze nástroj WDAC App Control nakonfigurovat tak, aby důvěřoval souborům nainstalovaným spravovaným instalačním programem přidáním možnosti Enabled:Managed Installer do zásad řízení aplikací. Pokud je tato možnost nastavená, kontrola řízení aplikací kontroluje informace o původu spravovaného instalačního programu při určování, jestli se má binární soubor spustit nebo ne. Pokud pro binární soubor neexistují žádná pravidla zamítnutí, App Control povoluje jeho spuštění pouze na základě původu spravovaného instalátoru. AppLocker také řídí spouštění spustitelných souborů, které jsou určené jako spravovaný instalační program, ale nenabízí řetězec důvěryhodnosti pro spustitelné soubory a knihovny DLL, jako je WDAC. V tomto článku si ukážeme, jak určit a nakonfigurovat proces hkdllgen jako spravovaný instalační program, který může používat AppLocker i WDAC.

Povolte generátor DLL Hekaton

Příklad

V tomto příkladu se sp_configure používá k povolení možnosti generátoru DLL Hekaton, která se nazývá external xtp dll gen util enabled. Vytvoří se testovací databáze spolu s tabulkou optimalizovanou pro testovací paměť.

  1. Vytvořte testovací databázi.

    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. Vytvořte testovací tabulku v testovací databázi.

    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. Pro každý .gen v podadresáři .dll se vygeneruje nový soubor s nulovou délkou s příponou <path-to-data-directory>\xtp\<database_id>. Knihovny DLL jsou teď podepsané.

Postup vytvoření In-Memory zásad applockeru OLTP a spravovaného instalačního programu

Uživatelské rozhraní pro vytváření zásad AppLockeru v Editoru objektů zásad skupiny (gpedit.msc) a rutiny PowerShellu pro AppLocker se nedají přímo použít k vytváření pravidel pro kolekci pravidel spravovaného instalačního programu. Pomocí XML nebo textového editoru však můžete převést zásady kolekce pravidel EXE na kolekci pravidel ManagedInstaller.

Důležitý

Před přidáním spustitelného souboru pro generování DLL Hekaton do konfigurace zásad řízení serveru AppLocker by měla již existovat zásada AppLocker, jinak hrozí riziko blokování základních funkcí operačního systému Windows Defenderem. Další informace o vytváření, testování a údržbě zásad řízení aplikací najdete v průvodci nasazením AppLockeru.

Zbývající příklady platí pro Windows Server 2022 a Windows 11 a novější verze.

Pokud chcete ověřit, že v konfiguraci zásad řízení nástroje AppLocker existuje alespoň kolekce pravidel exe, spusťte následující příkaz PowerShellu:

Get-AppLockerPolicy -Effective

Nebo uložte výstup efektivních zásad do souboru XML pro zobrazení:

Get-AppLockerPolicy -Effective -Xml > effective_app_policy.xml

Následující kroky provedou procesem vytvoření a použití zásady, které je možné použít na místní server. Zásady spravovaného instalačního programu, které se generují pomocí těchto kroků, je možné sloučit do zásad skupiny pro celou službu a distribuovat je do všech SQL Serverů v rámci prostředí nebo použít na místní zásady jednoho serveru. Doporučujeme spolupracovat se správcem domény, abyste měli zásadu integrity kódu použitou na úrovni domény.

  1. Pomocí New-AppLockerPolicy vytvořte pravidlo EXE pro soubor, který navrhujete jako spravovaný instalační program. Tento příklad vytvoří pravidlo pro generátor knihovny DLL Hekaton pomocí typu pravidla vydavatele, ale lze použít jakýkoli typ pravidla AppLocker. Možná budete muset přeformátovat výstup pro čitelnost.

    #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. Ručně upravte AppLocker_HKDLLGEN_Policy.xml a změňte následující hodnoty atributů:

    • RuleCollection Type na ManagedInstaller
    • EnforcementMode na AuditOnly
    • BinaryVersionRange LowSection"*" a HighSection"*"

    Vyměnit:

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

    k:

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

    Vyměnit:

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

    k:

    <BinaryVersionRange LowSection="*" HighSection="*"/>
    
  3. Nasaďte zásady konfigurace spravovaného instalačního programu AppLockeru. Zásady AppLocker můžete buď importovat a nasadit pomocí Zásad skupiny, nebo je pomocí skriptu nasadit pomocí cmdletu Set-AppLockerPolicy, jak je uvedeno v následujícím příkazu PowerShellu.

    #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. Pokud nasazujete zásady AppLockeru prostřednictvím skriptu PowerShellu, pomocí nástroje appidtel.exe z příkazového řádku pro správu nakonfigurujte službu Identity aplikace AppLockeru a ovladač filtru AppLockeru.

    appidtel.exe start [-mionly]
    

Povolení možnosti spravovaného instalačního programu v Průvodci řízením aplikací v programu Windows Defender pro firmy

Pokud chcete řízení aplikací v programu Windows Defender (WDAC) důvěřovat knihovně DLL vygenerovaným procesem hkdllgen.exe, musí být v zásadách řízení aplikací zadána možnost Povoleno: Spravovaná instalační služba. Toto nastavení lze definovat pomocí rutiny Set-RuleOption s možností 13.

Vygenerujte soubor zásad integrity kódu z některého z Průvodce základními zásadami WDAC základní zásady šablony.

Počínaje zásadami výchozími pro Windows se poskytuje méně možností, které jsou odstraněny v této příručce. Další informace o režimu Výchozí Windows a Režimu povolit Microsoft lze nalézt v článku Základní zásady Příklad řízení aplikací pro firmy.

Základní zásady šablony

snímek obrazovky základní šablony WDAC

Po výběru základní šablony zásad pro Windows pojmenujte zásadu a zvolte, kam chcete zásady řízení aplikací uložit na disk.

Výběr typu zásady

Jako typ zásady zvolte formát pro více zásad a základní zásadu.

Snímek obrazovky výběru typu zásady WDAC

Konfigurace šablony zásad

Povolte pouze spravovaný instalátor, zásady aktualizace bez restartu, zásady integrity systému bez podpisu a zásady integrity kódu v uživatelském režimu. Zakažte další možnosti pravidla zásad. Můžete to provést stisknutím tlačítka posuvníku vedle názvů pravidel zásad.

Následující tabulka obsahuje popis jednotlivých pravidel zásad, počínaje sloupcem úplně vlevo. Článek pravidla zásad poskytuje úplný popis každého pravidla zásad.

Možnost pravidla Popis
Spravovaný instalační program Tuto možnost použijte k automatickému povolení aplikací nainstalovaných pomocí řešení distribuce softwaru, jako je generátor knihovny DLL Hekaton, který byl definován jako spravovaný instalační program.
zásady aktualizace bez restartování Tuto možnost použijte, pokud chcete povolit budoucí aktualizace zásad řízení aplikací pro firmy bez nutnosti restartování systému.
Nepodepsaná zásada integrity systému Umožňuje, aby politika zůstala nepodepsaná. Pokud je tato možnost odebrána, musí být politika podepsaná a UpdatePolicySigners musí být přidán do politiky, aby bylo možné povolit budoucí úpravy politiky.
integrita kódu v uživatelském režimu Zásady řízení aplikací pro firmy omezují binární soubory v režimu jádra i v uživatelském režimu. Ve výchozím nastavení jsou binární soubory v režimu jádra omezené. Povolením této možnosti pravidla ověříte spustitelné soubory a skripty uživatelského režimu.

snímek obrazovky Konfigurovat šablonu zásad

Na začátku byste měli povolit režim auditu , protože vám umožní otestovat nové zásady řízení aplikací pro firmy, než je vynutíte. V režimu auditu není žádná aplikace blokovaná– místo toho zásady protokoluje událost při každém spuštění aplikace mimo zásadu. Z tohoto důvodu mají všechny šablony ve výchozím nastavení povolený režim auditu.

Pravidla souborů

Odstraňte ze seznamu všechna pravidla podepisování zásad.

snímek obrazovky pravidel souborů WDAC

(volitelné) přidat pravidlo zásad vlastního vydavatele, které zajistí, aby se soubory, jako je hkdllgen.exe, podepsaly jako vydavatel.

snímek obrazovky vlastní zásady WDAC

Typ pravidla souboru Publisher používá vlastnosti v řetězu certifikátů pro elektronický podpis k určení pravidel souborů.

snímek obrazovky pravidel zásad WDAC

Po výběru tlačítka Vytvořit pravidlo by mělo existovat jedno pravidlo podepisování zásad.

snímek obrazovky se seznamem pravidel podepisování zásad WDAC

Nasaďte zásady řízení aplikací. Viz Nasazení kontroly aplikací pro obchodní zásady.

Po vytvoření zásady se nová zásada zapíše do cesty, která byla zvolena jako umístění souboru zásad. Nová binární verze názvu souboru zásad má verzi zásady připojenou na konec názvu souboru. Zásady souboru .cip lze zkopírovat do podadresáře C:\Windows\System32\CodeIntegrity\CiPolicies\Active instance SYSTÉMU SQL Server.

Ruční nasazení zásad integrity kódu

Pokud chcete vytvořit efektivnější zásady integrity kódu, můžete upravit obecnější soubor .xml, který se vygeneroval po dokončení Průvodce zásadami řízení aplikací WDAC. Tento scénář může nastat, pokud se Průvodce zásadami řízení aplikací WDAC nespustí na SQL Serveru, ale z pracovní stanice. Například méně přizpůsobený soubor zásad integrity kódu může vypadat takto:

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

Tento příklad nemá podepsané pravidlo vydavatele a předpokládá, že soubor zásad používá místní pracovní adresář (například C:\Temp) s názvem souboru 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"

Pokud chcete zásadu použít bez restartování serveru a zkontrolovat stav integrity kódu, spusťte tento skript PowerShellu:

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

Ověřte, že generované knihovny DLL Hekaton jsou důvěryhodné pro integritu kódu.

Jakmile integrita kódu funguje v režimu auditování nebo v aktivním režimu, knihovny DLL generované generátorem DLL Hekaton jsou důvěryhodné systémem Windows a mají k souborům přidány rozšířené atributy.

Jako součást metadat je přidán nárok Smartlocker. To lze zobrazit pomocí příkazu fsutil z příkazového řádku pro správu. Vyberte například jeden z dynamicky generovaných souborů OLTP v paměti ze složky \Data\xtp\<database_id> a spusťte následující příkaz:

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

snímek obrazovky s výstupem nástroje fsutil

Odeberte funkci spravovaného instalačního programu

Pokud chcete ze zařízení odebrat funkci Spravovaného instalačního programu, musíte ze zařízení odebrat zásadu AppLockeru spravovaného instalačního programu podle pokynů v článku Odstranění pravidla AppLockeru: Vymazání zásad AppLockeru v jednom systému nebo vzdálených systémech.