Så här skapar du In-Memory OLTP-appkontroll och principer för hanterat installationsprogram
gäller för:SQL Server
SQL Server kompilerar och länkar ett DLL -bibliotek (Dynamic Link Library) för varje intern kompilerad tabell och lagrad procedur som har den interna implementeringen av dessa objekt i C-kod. Även om In-Memory OLTP-DLL:er genereras dynamiskt, kan själva filerna ge vissa utmaningar när det finns efterlevnadskrav som har kodintegritetsframtvingande som ett kriterium.
Vad är HKDLLGEN?
I SQL Server 2022 (16.x) Kumulativ uppdatering 17 och senare versioner lades en komponent som kallas Hekaton DLL-generatorn till i funktionen In-Memory OLTP. Utan den nya Hekaton DLL-generationen (hkdllgen) konverterar SQL Server-huvudprocessen T-SQL till C-kod och startar sedan kompilator- och länkprocesser för att generera osignerade In-Memory OLTP-DLL:er.
Hkdllgen
validerar och accepterar , som ett mellanliggande program, utdata från SQL Server och skapar sedan signerade DLL:er. För att tillämpa kodintegritetsprinciper för dessa DLL:er måste Hkdllgen
processen anges som Windows Defender Application Control (WDAC) Managed Installer.
Hekaton DLL-generatorn är det första steget mot att säkerställa att regelefterlevnadskrav som kodintegritet kan uppfyllas med In-Memory OLTP-genererade DLL:er. Kodintegritet i den här kontexten ser till att DLL:er som In-Memory OLTP genererar är betrodda av operativsystemet från den tidpunkt då de skapas tills de läses in och körs. Möjligheten att utse hekaton DLL-generatorkomponenten som ett hanterat installationsprogram gör att WDAC-kodintegritetssystemet kan lita på de DLL:er som genereras och gör att de kan användas.
Hur fungerar ett hanterat installationsprogram?
Det hanterade installationsprogrammet använder en särskild regelsamling i AppLocker för att utse binärfiler som är betrodda av din organisation som en auktoriserad källa för programinstallation. När en av dessa betrodda binärfiler körs övervakar Windows binärfilens process (och eventuella underordnade processer som startas) och söker efter filer som skrivs till disk. När filer skrivs läggs en uppgift eller tagg till i filen som anger att den kommer från ett hanterat installationsprogram.
Med AppLocker kan WDAC App Control konfigureras för att lita på filer som installeras av ett hanterat installationsprogram genom att lägga till alternativet Enabled:Managed Installer i en appkontrollprincip. När det alternativet har angetts söker App Control efter ursprungsinformation för det hanterade installationsprogrammet när du avgör om en binär fil ska kunna köras eller inte. Så länge det inte finns några nekanderegler för binärfilen tillåter App Control att den körs enbart baserat på dess ursprung för det hanterade installationsprogrammet. AppLocker styr också körningen av körbara filer som är avsedda som ett hanterat installationsprogram, men det erbjuder inte en förtroendekedja för körbara filer och DLL:er som WDAC. I den här artikeln går vi igenom hur du anger och konfigurerar hkdllgen
process som ett hanterat installationsprogram som kan användas av både AppLocker och WDAC.
Aktivera Hekaton DLL-generatorn
Exempel
I det här exemplet används sp_configure
för att aktivera alternativet Hekaton DLL-generator, som kallas external xtp dll gen util enabled
. En testdatabas skapas tillsammans med en testminnesoptimerad tabell.
Skapa en testdatabas.
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
Skapa en testtabell i testdatabasen.
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
En ny fil med noll längd med ett
.gen
-tillägg genereras för varje.dll
i underkatalogen<path-to-data-directory>\xtp\<database_id>
. Dll-filerna är nu signerade.
Steg för att skapa In-Memory OLTP AppLocker- och Managed Installer-principer
Användargränssnittet för att skapa AppLocker-principer i GPO-redigeraren (gpedit.msc) och AppLocker PowerShell-cmdletarna kan inte användas direkt för att skapa regler för regelsamlingen Hanterat installationsprogram. Du kan dock använda en XML- eller textredigerare för att konvertera en EXE-regelsamlingsprincip till en ManagedInstaller-regelsamling.
Viktig
En AppLocker-policy bör finnas innan Hekaton DLL-genereringsexekverbara fil läggs till för en servers AppLocker-kontrollpolicyskonfiguration, annars finns det en risk att grundläggande funktioner i operativsystemet blockeras av Windows Defender. Mer information om hur du skapar, testar och underhåller principer för programkontroll finns i distributionsguiden för AppLocker.
De återstående exemplen gäller för Windows Server 2022 och Windows 11 och senare versioner.
Kontrollera att minst en exe- regelsamling finns i servrarnas AppLocker Control-principkonfiguration genom att köra följande PowerShell-kommando:
Get-AppLockerPolicy -Effective
Eller för att spara utdata från de effektiva principerna i en XML-fil för visning:
Get-AppLockerPolicy -Effective -Xml > effective_app_policy.xml
Följande steg går igenom processen för att skapa och tillämpa en princip som kan tillämpas på en lokal server. En policy för hanterade installationsprogram som genereras med de här stegen kan sammanfogas till en övergripande grupprincip och distribueras till alla SQL-servrar inom en miljö eller tillämpas på en enskild servers lokala policy. Vi rekommenderar att du arbetar med en domänadministratör för att tillämpa kodintegritetsprincipen från domännivå.
Använd New-AppLockerPolicy för att skapa en EXE-regel för filen som du anger som ett hanterat installationsprogram. I det här exemplet skapas en regel för Hekaton DLL-generatorn med hjälp av regeltypen Publisher, men alla AppLocker-regeltyper kan användas. Du kan behöva formatera om utdata för läsbarhet.
#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
Redigera
AppLocker_HKDLLGEN_Policy.xml
manuellt och ändra följande attributvärden:-
RuleCollection Type
tillManagedInstaller
-
EnforcementMode
tillAuditOnly
-
BinaryVersionRange LowSection
till"*"
ochHighSection
till"*"
Förändring:
<RuleCollection Type="Exe" EnforcementMode="NotConfigured">
till:
<RuleCollection Type="ManagedInstaller" EnforcementMode="AuditOnly">
Förändring:
<BinaryVersionRange LowSection="2022.160.4175.1" HighSection="2022.160.4175.1"/>
till:
<BinaryVersionRange LowSection="*" HighSection="*"/>
-
Distribuera konfigurationsprincipen för AppLocker-hanterat installationsprogram. Du kan antingen importera AppLocker-principen och distribuera med en grupprincip eller använda ett skript för att distribuera principen med cmdleten Set-AppLockerPolicy enligt följande PowerShell-kommando.
#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
Om du distribuerar AppLocker-principen via ett PowerShell-skript använder du verktyget appidtel.exe från en administrativ kommandotolk för att konfigurera AppLocker Application Identity Service och AppLocker-filterdrivrutinen.
appidtel.exe start [-mionly]
Aktivera alternativet för hanterat installationsprogram i guiden Programkontroll för företag i Windows Defender
För att Windows Defender Application Control (WDAC) ska lita på DLL:er som genereras av hkdllgen.exe
processen måste alternativet Aktiverad: Hanterat installationsprogram anges i din appkontrollpolicy. Den här inställningen kan definieras med hjälp av cmdleten Set-RuleOption med alternativ 13.
Generera kodintegritetsprincipfilen från en av mallarna för basprinciper som finns i WDAC-basprincipguiden.
Från och med principen Standard för Windows finns färre alternativ som tas bort i den här guiden. Mer information om standardprinciperna för Windows-läge och Tillåt Microsoft-läge finns i artikeln Exempel på appkontroll för företag-basprinciper.
Policy för bas-mall
När du har valt mallen för Windows-principbasen ger du principen ett namn och väljer var du vill spara appkontrollprincipen på disken.
Välj en principtyp
Välj flera principformat och basprincip som principtyp
Konfigurera principmall
Aktivera endast alternativet Hanterat installationsprogram, Uppdateringsprincip utan omstart, Osignerad systemintegritetsprincip och regelalternativ för kodintegritet i användarläge. Inaktivera de andra principregelalternativen. Detta kan göras genom att trycka på skjutreglaget bredvid principregelrubrikerna.
I följande tabell finns en beskrivning av varje principregel som börjar med kolumnen längst till vänster. Artikeln policyregler innehåller en mer fullständig beskrivning av varje principregel.
Regelalternativ | Beskrivning |
---|---|
Hanterad Installationsprogram | Använd det här alternativet för att automatiskt tillåta program som installeras av en programvarudistributionslösning, till exempel Hekaton DLL-generatorn, som har definierats som ett hanterat installationsprogram. |
uppdateringsprincip utan att starta om | Använd det här alternativet om du vill tillåta att framtida uppdateringar av appkontroll för företag-principer tillämpas utan att en systemomstart krävs. |
Osignerad Systemintegritetspolicy | Tillåter att policyn förblir osignerad. När det här alternativet tas bort måste principen signeras och UpdatePolicySigners läggas till i principen för att aktivera framtida principändringar. |
kodintegritet i användarläge | Appkontroll för affärsprinciper begränsar både binärfiler i kernelläge och användarläge. Som standard är endast binärfiler i kernelläge begränsade. Om du aktiverar det här regelalternativet verifieras körbara filer och skript i användarläge. |
Du bör först aktivera granskningsläge eftersom du kan testa nya App Control for Business-principer innan du tillämpar dem. Med granskningsläge blockeras inget program, i stället loggar principen en händelse när ett program utanför principen startas. Därför har alla mallar granskningsläge aktiverat som standard.
Filregler
Ta bort alla regler för signering av policy från listan.
(valfritt) Lägg till en principregel för anpassad utgivare som skulle säkerställa att filer som hkdllgen.exe signeras av en utgivare.
Regeltypen för utgivarens fil använder egenskaper i kodsigneringscertifikatkedjan för att fastställa filregler.
När du har valt knappen Skapa regel ska det finnas en enda principsigneringsregel.
Distribuera din App Control-policy. Se Distribuera appkontroll för företagspolicyer.
När principen har skapats skrivs den nya principen till den sökväg som valdes som principfilplats. Den nya binära versionen av policyfilens namn har fått policyversionen tillagd i slutet av sitt namn. Den policyfilen.cip kan kopieras till underkatalogen C:\Windows\System32\CodeIntegrity\CiPolicies\Active
på SQL Server-instanser.
Distribuera en kodintegritetspolicy manuellt
För att skapa en mer effektiviserad kodintegritetsprincip kan en mer allmän princip.xml fil som genererades när du har slutfört guiden för WDAC-appkontrollprincip redigeras. Det här scenariot kan uppstå om WDAC Appkontrollpolicy-guiden inte körs på en SQL Server, utan från en arbetsstation. En mindre anpassad kodintegritetsprincipfil kan till exempel se ut så här:
<?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>
Det här exemplet har ingen signerad utgivarregel och förutsätter att principfilen använder en lokal arbetskatalog (till exempel C:\Temp
) med filnamnet 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"
Om du vill tillämpa principen utan att starta om servern och kontrollera statusen för kodintegritet kör du det här PowerShell-skriptet:
# 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*
Kontrollera att hekaton-DLL:er som genereras är betrodda av kodintegritet
När kodintegriteten fungerar i gransknings- eller aktivt läge är DLL:erna som genereras av Hekaton DLL-generatorn betrodda av Windows och har ett utökat attribut till filerna.
Ett Smartlocker- krav läggs till som en del av metadatan. Detta kan ses genom att använda kommandot fsutil från ett administrativt kommandotolksfönster. Du kan till exempel välja en av de minnesinterna OLTP-filer som genereras dynamiskt från mappen \Data\xtp\<database_id>
och köra följande kommando:
fsutil file queryea "D:\SQL\MSSQL17.MSSQLSERVER\MSSQL\DATA\xtp\5\xtp_t_5_64719283_196202718557591_1.dll"
Ta bort funktionen Managed Installer
Om du vill ta bort funktionen Hanterat installationsprogram från enheten måste du ta bort AppLocker-principen för hanterat installationsprogram från enheten genom att följa anvisningarna i Ta bort en AppLocker-regel: Rensa AppLocker-principer på ett enda system eller fjärrsystem.
Relaterat innehåll
- Tillåt automatiskt appar som distribueras av ett hanterat installationsprogram med App Control för företag
- In-Memory OLTP-översikt och användningsscenarier
- En guide till frågebearbetning för Memory-Optimized-tabeller
- exempeldatabas för In-Memory OLTP
- distributionsguide för AppLocker
- Distribuera appkontroll för affärsprinciper