Megosztás a következőn keresztül:


In-Memory OLTP alkalmazásvezérlési és felügyelt telepítőszabályzatok létrehozása

A következőkre vonatkozik:SQL Server

Az SQL Server minden natív lefordított táblához és tárolt eljáráshoz lefordít és összekapcsol egy dinamikus csatolási kódtárat (DLL), amelynek natív implementációja ezeknek az objektumoknak a C-kódban van. Bár az In-Memory OLTP-DLL-ek dinamikusan jönnek létre, maguk a fájlok is kihívást jelenthetnek, ha olyan megfelelőségi követelmények vannak, amelyek a kódintegritási kényszerítést feltételként tartják fenn.

Mi az a HKDLLGEN?

Az SQL Server 2022 (16.x) 17-es és újabb kumulatív frissítésében egy Hekaton DLL-generátor néven ismert összetevő lett hozzáadva az In-Memory OLTP szolgáltatáshoz. Az új Hekaton DLL-létrehozási (hkdllgen) folyamat nélkül a fő SQL Server-folyamat C-kódmá alakítja a T-SQL-t, majd elindítja a fordító- és összekapcsolási folyamatokat, hogy aláíratlan In-Memory OLTP DLL-eket hozzon létre. Hkdllgenköztes alkalmazásként ellenőrzi és elfogadja az SQL Server kimenetét, majd létrehozza aláírt DLL-eket. Ahhoz, hogy kódintegritási szabályzatokat kényszeríthessen ezekhez a DLL-ekhez, a Hkdllgen folyamatot Windows Defender alkalmazásvezérlő (WDAC) felügyelt telepítőként kell kijelölni.

A Hekaton DLL-generátor az első lépés annak biztosítása felé, hogy a szabályozási megfelelőségi követelmények, például a kódintegritási In-Memory OLTP által létrehozott DLL-ekkel teljesíthetők legyenek. A kódintegritás ebben a kontextusban biztosítja, hogy az OLTP-In-Memory létrehozott DLL-eket az operációs rendszer a létrehozásuk időpontjától kezdve a betöltésükig és a végrehajtásukig megbízhatónak minősítse. A Hekaton DLL-generátor összetevő felügyelt telepítőként való kijelölése lehetővé teszi, hogy a WDAC kódintegritási rendszere megbízzon a létrehozott DLL-ekben, és lehetővé teszi azok használatát.

Hogyan működik egy felügyelt telepítő?

A felügyelt telepítő egy speciális szabálygyűjteményt használ AppLocker a szervezet által megbízhatónak minősített bináris fájlok kijelöléséhez az alkalmazástelepítéshez. A megbízható bináris fájlok egyikének futtatásakor a Windows figyeli a bináris folyamatot (és az általa indított gyermekfolyamatokat), és figyeli a lemezre írt fájlokat. A fájlok írása során a rendszer egy jogcímet vagy címkét ad hozzá a fájlhoz egy felügyelt telepítőtől származóként.

Az AppLockerrel a WDAC alkalmazásvezérlő konfigurálható úgy, hogy megbízhatónak minősítse a felügyelt telepítő által telepített fájlokat, ha hozzáadja a Engedélyezve:Felügyelt telepítő beállítást egy alkalmazásvezérlési szabályzathoz. Ha ez a beállítás be van állítva, az App Control ellenőrzi a felügyelt telepítő forrásadatait annak meghatározásakor, hogy engedélyezi-e egy bináris futtatását. Mindaddig, amíg nincsenek megtagadási szabályok a binárisra, az App Control lehetővé teszi futását kizárólag a felügyelt telepítő eredete alapján. Az AppLocker a felügyelt telepítőként kijelölt végrehajtható fájlok végrehajtását is szabályozza, de nem biztosít megbízhatósági láncot a végrehajtható fájlokhoz és A WDAC-hoz hasonló DLL-ek esetében. Ebben a cikkben bemutatjuk, hogyan jelölheti ki és konfigurálhatja a hkdllgen folyamatot felügyelt telepítőként, amelyet az AppLocker és a WDAC is használhat.

A Hekaton DLL-generátor engedélyezése

Példa

Ebben a példában a sp_configure a Hekaton DLL-generátor beállítás engedélyezésére szolgál, amelyet external xtp dll gen util enablednéven nevezünk. Létrejön egy tesztadatbázis, valamint egy tesztmemória-optimalizált táblázat.

  1. Tesztadatbázis létrehozása.

    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. Hozzon létre egy teszttáblát a tesztadatbázisban.

    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. Egy új, .gen kiterjesztésű, nulla hosszúságú fájl van generálva minden egyes .dll esetében a <path-to-data-directory>\xtp\<database_id> alkönyvtárban. A dll-ek aláírása megtörtént.

Az In-Memory OLTP AppLocker- és felügyelt telepítőszabályzatok létrehozásának lépései

Az AppLocker házirendlétrehozási felhasználói felülete a csoportházirend-szerkesztőben (gpedit.msc) és az AppLocker PowerShell-parancsmagok nem használhatók közvetlenül a Felügyelt telepítő szabálygyűjtemény szabályainak létrehozásához. Xml- vagy szövegszerkesztővel azonban konvertálhat EXE-szabálygyűjteményi szabályzatokat ManagedInstaller-szabálygyűjteményekké.

Fontos

Léteznie kell egy AppLocker-szabályzatnak, mielőtt a Hekaton DLL-generáló végrehajtható fájlt hozzáadja egy kiszolgálóhoz tartozó AppLocker szabályzatkonfigurációhoz, ellenkező esetben fennáll annak a kockázata, hogy a Windows Defender letiltja az alapvető operációs rendszer funkciókat. Az alkalmazásvezérlési szabályzatok létrehozásával, tesztelésével és karbantartásával kapcsolatos további információkért tekintse meg AppLocker üzembe helyezési útmutatóját.

A többi példa a Windows Server 2022 és Windows 11 és újabb verziókra vonatkozik.

Annak ellenőrzéséhez, hogy legalább egy exe szabálygyűjtemény létezik-e az AppLocker Control szabályzatkonfigurációjában, hajtsa végre a következő PowerShell-parancsot:

Get-AppLockerPolicy -Effective

Vagy a hatályos szabályzatok kimenetének mentése XML-fájlba megtekintésre:

Get-AppLockerPolicy -Effective -Xml > effective_app_policy.xml

Az alábbi lépések végigvezetik a helyi kiszolgálóra alkalmazható szabályzatok létrehozásának és alkalmazásának folyamatán. Az ezekkel a lépésekkel létrehozott felügyelt telepítő házirendek egyesíthetők egy csoportházirend-objektumra vonatkozó teljes körű szabályzattal, és terjeszthetők a környezet összes SQL-kiszolgálójára, vagy alkalmazhatók egyetlen kiszolgáló helyi szabályzatára. Azt javasoljuk, hogy egy tartományi rendszergazdával együttműködve alkalmazza a kódintegritási szabályzatot a tartományszintről.

  1. A New-AppLockerPolicy használatával hozzon létre egy EXE-szabályt a felügyelt telepítőként kijelölő fájlhoz. Ez a példa létrehoz egy szabályt a Hekaton DLL-generátorhoz a Publisher-szabálytípus használatával, de bármely AppLocker-szabálytípus használható. Előfordulhat, hogy újra kell formáznia a kimenetet az olvashatóság érdekében.

    #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. Manuálisan szerkessze a AppLocker_HKDLLGEN_Policy.xml, és módosítsa a következő attribútumértékeket:

    • RuleCollection Type és ManagedInstaller
    • EnforcementMode és AuditOnly
    • BinaryVersionRange LowSection-tól "*"-ig és HighSection-től "*"-ig

    Változás:

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

    Címzett:

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

    Változás:

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

    Címzett:

    <BinaryVersionRange LowSection="*" HighSection="*"/>
    
  3. Telepítse az AppLocker által felügyelt telepítő konfigurációs szabályzatát. Importálhatja az AppLocker-szabályzatot, és csoportházirenddel telepítheti azokat, vagy szkripttel helyezheti üzembe a szabályzatot a Set-AppLockerPolicy parancsmaggal, ahogyan az az alábbi PowerShell-parancsban látható.

    #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. Ha az AppLocker-szabályzatot PowerShell-szkripttel telepíti, a felügyeleti parancssorból származó appidtel.exe segédprogrammal konfigurálhatja az AppLocker Application Identity szolgáltatást és az AppLocker szűrőillesztőt.

    appidtel.exe start [-mionly]
    

A felügyelt telepítő opció engedélyezése a Windows Defender Vállalati Alkalmazásvezérlő Varázslóban

Ahhoz, hogy a Windows Defender alkalmazásvezérlő (WDAC) megbízhatónak tekintse a hkdllgen.exe folyamat által létrehozott DLL-eket, meg kell adnia az alkalmazásvezérlési szabályzatában a Engedélyezve: Felügyelt telepítő opciót. Ez a beállítás a 13. lehetőséggel Set-RuleOption parancsmaggal határozható meg.

Hozzon létre egy kódintegritási szabályzatfájlt a WDAC alapszabályzat varázslójának sablon alapszabályzatai közül.

Az Alapértelmezett Windows házirendtől kezdve kevesebb lehetőséget biztosít, amelyeket az útmutató eltávolít. Az alapértelmezett Windows módról és a Microsoft mód engedélyezéséről a Vállalati verzióhoz készült példaalkalmazás-vezérlési alapszabályzatokcímű cikkben talál további információt.

Alapsablon-szabályzat

Képernyőkép a WDAC-alapsablon képernyőről.

A Windows-szabályzat alapsablonjának kiválasztása után adjon nevet a szabályzatnak, és adja meg, hogy hová szeretné menteni az Alkalmazásvezérlési szabályzatot a lemezen.

Szabályzattípus kiválasztása

Válassza a Többszörös szabályzatformátum és a Alapszabályzatot szabályzattípusként

Képernyőkép a WDAC Házirendtípus kiválasztása képernyőről.

Szabályzatsablon konfigurálása

Csak a felügyelt telepítőt, a frissítési szabályzatot újraindítás nélkül, az aláíratlan rendszerintegritási szabályzatot és a felhasználói módú kódintegritási szabályzatszabály-beállításokat engedélyezze. Tiltsa le a többi házirendszabály-beállítást. Ez a szabályzatszabály-címek melletti csúszkagomb lenyomásával végezhető el.

Az alábbi táblázat az egyes szabályzatszabályok leírását tartalmazza, a bal oldali oszloptól kezdve. Az házirendszabályokról szóló cikk az egyes szabályzatszabályok teljesebb leírását tartalmazza.

Szabálybeállítás Leírás
Felügyelt telepítő Ezzel a beállítással automatikusan engedélyezheti a felügyelt telepítőként definiált szoftverterjesztési megoldás, például a Hekaton DLL-generátor által telepített alkalmazásokat.
Frissítési Szabályzat Újraindítás Nélkül Ezzel a beállítással a rendszer újraindítása nélkül engedélyezheti a jövőbeli alkalmazásvezérlési vállalati szabályzatfrissítések alkalmazását.
aláíratlan rendszerintegritási szabályzat Lehetővé teszi, hogy a szabályzat aláíratlan maradjon. Ha ez a beállítás el lett távolítva, a szabályzatot alá kell írni, és hozzá kell adni az UpdatePolicySignerst a szabályzathoz a szabályzat későbbi módosításának engedélyezéséhez.
felhasználói módú kódintegritás Az üzleti alkalmazásvezérlési szabályzatok a kernel módú és a felhasználói módú bináris fájlokat is korlátozzák. Alapértelmezés szerint csak a kernel módú bináris fájlok vannak korlátozva. A szabály beállításának engedélyezése ellenőrzi a felhasználói módú végrehajtható fájlokat és szkripteket.

A Szabályzatsablon konfigurálása képernyő képernyőképe.

Először engedélyeznie kell naplózási módot, mert ez lehetővé teszi az új alkalmazásvezérlési vállalati szabályzatok tesztelését, mielőtt kényszerítené őket. Ellenőrzési mód esetén nincs letiltva alkalmazás; ehelyett a szabályzat eseményt naplóz, amikor egy, a szabályzaton kívüli alkalmazás elindul. Ezért minden sablonban alapértelmezés szerint engedélyezve van a naplózási mód.

Fájlszabályok

Távolítsa el az összes szabályzat-aláírási szabályt a listáról.

Képernyőkép a WDAC-fájlszabályok képernyőről.

(nem kötelező) Adjon hozzá egy egyéni közzétevői házirendszabályt, amely biztosítaná, hogy az olyan fájlok, mint a hkdllgen.exe közzétevőként legyenek aláírva.

A WDAC egyéni szabályzat képernyőjének képernyőképe.

A Publisher-fájlszabály típusa a kódaláíró tanúsítványlánc tulajdonságaival alapozza meg a fájlszabályokat.

Képernyőkép a WDAC-házirendszabály képernyőről.

A Szabály létrehozása gomb kiválasztása után egyetlen házirend-aláírási szabálynak kell léteznie.

Képernyőkép a WDAC-szabályzat aláírási szabálylistájáról.

Az Alkalmazásvezérlési szabályzat üzembe helyezése. Lásd a Az alkalmazásvezérlés vállalati szabályzatainak üzembe helyezése.

A szabályzat létrehozása után a rendszer az új szabályzatot a házirendfájl helyeként kiválasztott elérési útra írja. A szabályzatfájl nevének új bináris verziója a fájlnév végéhez fűzött szabályzatverzióval rendelkezik. A házirend.cip fájl az SQL Server-példány C:\Windows\System32\CodeIntegrity\CiPolicies\Active alkönyvtárába másolható.

Kódintegritási szabályzat manuális üzembe helyezése

A kódintegritási szabályzat egyszerűbb létrehozása érdekében egy általánosabb szabályzat.xml fájl szerkeszthető, amely a WDAC alkalmazásvezérlő házirend varázslójának befejezése után jött létre. Ez a forgatókönyv akkor fordulhat elő, ha a WDAC alkalmazásvezérlési házirend varázslója nem SQL Serveren, hanem egy munkaállomáson fut. Egy kevésbé testreszabott kódintegritási szabályzatfájl például a következőképpen nézhet ki:

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

Ez a példa nem rendelkezik aláírt közzétevői szabvánnyal, és feltételezi, hogy a szabályzatfájl egy helyi munkakönyvtárat (például C:\Temp) használ Hekaton_Custom_CIPolicy.xmlfájlnévvel.

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

Ha a házirendet a kiszolgáló újraindítása és a Kódintegritás állapotának ellenőrzése nélkül szeretné alkalmazni, futtassa ezt a PowerShell-szkriptet:

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

Ellenőrizze, hogy a létrehozott Hekaton DLL-ek megbízhatóak-e a kódintegritással

Ha a kódintegritás naplózási módban vagy aktív módban működik, a Hekaton DLL-generátor által létrehozott DLL-eket a Windows megbízhatónak minősíti, és kiterjesztett attribútummal bővíti a fájlokat.

A Smartlocker jogcím a metaadatok részeként lesz hozzáadva. Ez az fsutil paranccsal tekinthető meg egy rendszergazdai parancssorból. Például válassza ki a memóriában lévő OLTP dinamikusan létrehozott fájlokat a \Data\xtp\<database_id> mappából, és hajtsa végre a következő parancsot:

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

Az fsutil kimenet képernyőképe.

Felügyelt telepítő eltávolítása funkció

A Felügyelt telepítő jellemző eszközről való eltávolításához el kell távolítania a Managed Installer AppLocker-szabályzatot az eszközről a következő utasítások követésével: AppLocker-szabály törlése: AppLocker-szabályzatok törlése egyetlen rendszeren vagy távoli rendszeren.