Jak utworzyć zasady kontroli aplikacji OLTP i zarządzanego instalatora In-Memory
Dotyczy:programu SQL Server
Program SQL Server kompiluje i łączy dynamiczną bibliotekę linków (DLL) dla każdej natywnej skompilowanej tabeli i procedury składowanej, która ma natywną implementację tych obiektów w kodzie języka C. Chociaż biblioteki DLL OLTP In-Memory są generowane dynamicznie, same pliki mogą stanowić pewne wyzwania, gdy istnieją wymagania dotyczące zgodności, które mają wymuszanie integralności kodu jako kryterium.
Co to jest HKDLLGEN?
W programie SQL Server 2022 (16.x), w aktualizacji zbiorczej 17 i nowszych wersjach, składnik, znany jako generator bibliotek DLL Hekaton, został dodany do funkcji OLTP In-Memory. Bez nowego procesu generowania bibliotek DLL Hekaton (hkdllgen) główny proces programu SQL Server konwertuje język T-SQL na kod C, a następnie uruchamia procesy kompilatora i konsolidatora w celu wygenerowania niepodpisanych bibliotek DLL OLTP In-Memory.
Hkdllgen
, jako aplikacja pośrednia, weryfikuje i akceptuje dane wyjściowe z programu SQL Server, a następnie tworzy podpisane przez biblioteki DLL. Aby wymusić zasady integralności kodu dla tych modułów DLL, proces Hkdllgen
musi zostać wyznaczony jako Windows Defender Application Control (WDAC) Zarządzany instalator.
Generator bibliotek DLL Hekaton jest pierwszym krokiem w kierunku zapewnienia, że wymagania dotyczące zgodności z przepisami, takie jak integralność kodu, można spełnić z In-Memory wygenerowanych bibliotek DLL OLTP. Integralność kodu w tym kontekście zapewnia, że biblioteki DLL, które In-Memory generuje OLTP, są zaufane przez system operacyjny od momentu ich utworzenia do momentu ich załadowania i wykonania. Możliwość wyznaczenia składnika generatora bibliotek DLL Hekaton jako zarządzanego instalatora umożliwia systemowi integralności kodu WDAC zaufanie do generowanych bibliotek DLL i umożliwia ich używanie.
Jak działa instalator zarządzany?
Instalator zarządzany używa specjalnej kolekcji reguł w narzędziu AppLocker w celu oznaczenia plików binarnych zaufanych przez organizację jako autoryzowane źródło do instalacji aplikacji. Po uruchomieniu jednego z tych zaufanych plików binarnych system Windows monitoruje proces binarny (i wszystkie procesy podrzędne uruchamiane) i obserwuje pliki zapisywane na dysku. W miarę zapisywania plików oświadczenie lub tag są dodawane do pliku jako pochodzące z zarządzanego instalatora.
Za pomocą funkcji AppLocker, Kontrola aplikacji WDAC można skonfigurować, aby ufała plikom zainstalowanym przez zarządzany instalator, poprzez dodanie opcji Włączone:Instalator zarządzany do polityki kontroli aplikacji. Po ustawieniu tej opcji kontrolka aplikacji sprawdza informacje o pochodzeniu zarządzanego instalatora podczas określania, czy zezwolić na uruchamianie pliku binarnego. Tak długo, jak nie ma reguł odmowy dla pliku binarnego, kontrolka aplikacji umożliwia jej uruchamianie wyłącznie na podstawie źródła zarządzanego instalatora. Funkcja AppLocker kontroluje również wykonywanie plików wykonywalnych wyznaczonych jako instalator zarządzany, ale nie oferuje łańcucha zaufania dla plików wykonywalnych i bibliotek DLL, takich jak WDAC. W tym artykule przedstawiono sposób wyznaczania i konfigurowania procesu hkdllgen
jako zarządzanego instalatora, który może być używany zarówno przez funkcję AppLocker, jak i usługę WDAC.
Włączanie generatora bibliotek DLL Hekaton
Przykład
W tym przykładzie sp_configure
służy do włączania opcji generatora bibliotek DLL Hekaton, która jest nazywana external xtp dll gen util enabled
. Zostanie utworzona testowa baza danych wraz z tabelą zoptymalizowaną pod kątem pamięci testowej.
Utwórz testową bazę danych.
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
Utwórz tabelę testową w testowej bazie danych.
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
Nowy plik o zerowej długości z rozszerzeniem
.gen
jest generowany dla każdego.dll
w podkatalogu<path-to-data-directory>\xtp\<database_id>
. Biblioteki DLL są teraz podpisane.
Kroki tworzenia zasad In-Memory OLTP AppLocker i zarządzanych instalatorów
Interfejs tworzenia zasad funkcji AppLocker w Edytorze obiektów zasad grupy (gpedit.msc) i polecenia cmdlet funkcji AppLocker programu PowerShell nie mogą być bezpośrednio używane do tworzenia reguł dla zbioru reguł Zarządzanego Instalatora. Można jednak użyć edytora XML lub tekstowego, aby przekonwertować zasady zbierania reguł EXE na kolekcję reguł ManagedInstaller.
Ważny
Zasady AppLocker powinny istnieć przed dodaniem pliku wykonywalnego generującego bibliotekę DLL Hekaton do konfiguracji zasad kontroli AppLocker, w przeciwnym razie istnieje ryzyko, że podstawowe funkcje systemu operacyjnego mogą zostać zablokowane przez Windows Defender. Aby uzyskać więcej informacji na temat tworzenia, testowania i konserwacji zasad kontroli aplikacji, zobacz Przewodnik wdrażania funkcji AppLocker.
Pozostałe przykłady dotyczą Windows Server 2022 i Windows 11 i nowszych wersji.
Aby sprawdzić, czy w konfiguracji zasad kontroli funkcji AppLocker istnieje co najmniej exe kolekcja reguł, wykonaj następujące polecenie programu PowerShell:
Get-AppLockerPolicy -Effective
Możesz też zapisać dane wyjściowe obowiązujących zasad w pliku XML do wyświetlania:
Get-AppLockerPolicy -Effective -Xml > effective_app_policy.xml
W poniższych krokach przedstawiono proces tworzenia i stosowania zasad, które można zastosować do serwera lokalnego. Zasady instalatora zarządzanego, generowane przy użyciu tych kroków, można scalić z zasadami dla całego obiektu zasad grupy i dystrybuować do wszystkich serwerów SQL w środowisku lub stosować je do lokalnych zasad jednego serwera. Zalecamy pracę z administratorem domeny w celu zastosowania zasad integralności kodu z poziomu domeny.
Użyj New-AppLockerPolicy, aby utworzyć regułę EXE dla pliku, który wyznaczasz jako zarządzany instalator. W tym przykładzie tworzona jest reguła dla generatora DLL Hekaton, korzystając z typu reguły wydawcy, ale można użyć dowolnego typu reguły AppLocker. Może być konieczne ponowne sformatowanie danych wyjściowych w celu zapewnienia czytelności.
#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
Ręcznie edytuj
AppLocker_HKDLLGEN_Policy.xml
i zmień następujące wartości atrybutów:-
RuleCollection Type
doManagedInstaller
-
EnforcementMode
doAuditOnly
-
BinaryVersionRange LowSection
do"*"
iHighSection
do"*"
Zmiana
<RuleCollection Type="Exe" EnforcementMode="NotConfigured">
do:
<RuleCollection Type="ManagedInstaller" EnforcementMode="AuditOnly">
Zmiana
<BinaryVersionRange LowSection="2022.160.4175.1" HighSection="2022.160.4175.1"/>
do:
<BinaryVersionRange LowSection="*" HighSection="*"/>
-
Wdróż zasady konfiguracji instalatora zarządzanego funkcji AppLocker. Zasady funkcji AppLocker można zaimportować i wdrożyć za pomocą zasad grupy lub użyć skryptu do wdrożenia zasad za pomocą polecenia cmdlet Set-AppLockerPolicy, jak pokazano w poniższym poleceniu programu PowerShell.
#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
W przypadku wdrażania zasad funkcji AppLocker za pomocą skryptu programu PowerShell użyj narzędzia appidtel.exe z wiersza polecenia administracyjnego, aby skonfigurować usługę tożsamości aplikacji funkcji AppLocker i sterownik filtru funkcji AppLocker.
appidtel.exe start [-mionly]
Włącz opcję zarządzanego instalatora w Kreatorze kontroli aplikacji usługi Windows Defender dla firm
Aby kontrola aplikacji usługi Windows Defender (WDAC) ufać bibliotekom DLL generowanym przez proces hkdllgen.exe
, w zasadach kontroli aplikacji należy określić opcję Włączone: Instalator zarządzany. To ustawienie można zdefiniować przy użyciu polecenia cmdlet Set-RuleOption z opcją 13.
Wygeneruj plik zasad integralności kodu z jednego z kreatorów zasad podstawowych WDAC zasad podstawowych szablonów.
Zaczynając od domyślnych zasad Windows i, oferowane jest mniej opcji, które zostały usunięte w tym przewodniku. Więcej informacji na temat domyślnego trybu systemu Windows i Zasad zezwalania na tryb firmy Microsoft można uzyskać za pośrednictwem artykułu Przykładowa kontrola aplikacji dla firm.
Podstawowe zasady szablonu
Po wybraniu szablonu podstawowego zasad systemu Windows nadaj zasadom nazwę i wybierz miejsce zapisania zasad kontroli aplikacji na dysku.
Wybierz typ zasad
Wybierz Format wielu polityk i Podstawową politykę jako typ polityki
Konfigurowanie szablonu zasad
Włącz tylko opcje zasad: Zarządzany Instalator, Aktualizacja bez ponownego uruchamiania, Niepodpisana Zasada Integralności Systemu oraz Zasada Integralności Kodu w Trybie Użytkownika. Wyłącz inne opcje reguły zasad. Można to zrobić, naciskając przycisk suwaka obok tytułów reguł zasad.
Poniższa tabela zawiera opis każdej reguły zasad, począwszy od lewej kolumny. Artykuł Reguły zasad zawiera pełniejszy opis każdej reguły zasad.
Opcja reguły | Opis |
---|---|
zarządzanego instalatora | Użyj tej opcji, aby automatycznie zezwalać na aplikacje instalowane przez rozwiązanie dystrybucji oprogramowania, takie jak generator bibliotek DLL Hekaton, który został zdefiniowany jako zarządzany instalator. |
Polityka aktualizacji bez ponownego uruchamiania | Użyj tej opcji, aby zezwolić na stosowanie przyszłych aktualizacji zasad kontroli aplikacji dla firm bez konieczności ponownego uruchamiania systemu. |
Niepodpisana polityka integralności systemu | Umożliwia pozostawienie polisy niepodpisanej. Po usunięciu tej opcji zasady muszą zostać podpisane i mieć dodane wartości UpdatePolicySigners, aby umożliwić przyszłe modyfikacje zasad. |
integralność kodu trybu użytkownika | Zasady kontroli aplikacji dla firm ograniczają zarówno pliki binarne trybu jądra, jak i trybu użytkownika. Domyślnie tylko pliki binarne trybu jądra są ograniczone. Włączenie tej opcji reguły weryfikuje pliki wykonywalne i skrypty trybu użytkownika. |
Najpierw należy włączyć tryb inspekcji, ponieważ umożliwia testowanie nowych zasad kontroli aplikacji dla firm przed ich wymuszeniem. W trybie inspekcji żadna aplikacja nie jest zablokowana— zasady rejestrują zdarzenie za każdym razem, gdy aplikacja poza zasadami zostanie uruchomiona. Z tego powodu wszystkie szablony mają domyślnie włączony tryb inspekcji.
Reguły plików
Usuń wszystkie reguły podpisywania zasad z listy.
(opcjonalnie) Dodaj regułę zasad niestandardowego wydawcy, która gwarantuje, że pliki, takie jak hkdllgen.exe, zostaną podpisane jako wydawca.
Typ reguły pliku Publisher używa właściwości w łańcuchu certyfikatów podpisywania kodu, aby tworzyć reguły plików.
Po wybraniu przycisku Utwórz regułę powinna istnieć jedna reguła podpisywania zasad.
Wdróż zasady kontroli aplikacji. Zobacz Wdrażanie zasad kontroli aplikacji dla biznesu.
Po utworzeniu zasad nowe zasady są zapisywane w ścieżce wybranej jako lokalizacja pliku zasad. Nowa wersja binarna nazwy pliku zasad zawiera wersję zasad dołączoną na końcu nazwy pliku. Plik .cip polityki można skopiować do podkatalogu C:\Windows\System32\CodeIntegrity\CiPolicies\Active
w instancji programu SQL Server.
Ręczne wdrażanie zasad integralności kodu
Aby utworzyć bardziej usprawnione zasady integralności kodu, można edytować bardziej ogólny plik .xml, który został wygenerowany po zakończeniu Kreatora zasad kontroli aplikacji WDAC. Ten scenariusz może wystąpić, jeśli Kreator zasad kontroli aplikacji WDAC nie jest wykonywany na serwerze SQL Server, ale ze stacji roboczej. Na przykład mniej dostosowany plik zasad integralności kodu może wyglądać następująco:
<?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>
W tym przykładzie nie ma podpisanej reguły wydawcy i założono, że plik zasad używa lokalnego katalogu roboczego (na przykład C:\Temp
) z nazwą pliku 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"
Aby zastosować zasady bez ponownego uruchamiania serwera i sprawdzić stan integralności kodu, uruchom ten skrypt programu PowerShell:
# 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*
Sprawdź, czy wygenerowane biblioteki DLL Hekaton są zaufane przez integralność kodu
Gdy Integralność Kodu działa w trybie kontroli lub trybie aktywnym, biblioteki DLL generowane przez generator DLL Hekaton są zaufane przez Windows i mają rozszerzony atrybut dodany do plików.
Oświadczenie Smartlockera jest dodawane jako część metadanych. Można to wyświetlić za pomocą polecenia fsutil w wierszu polecenia administracyjnego. Na przykład wybranie jednego z dynamicznie generowanych plików OLTP w pamięci z folderu \Data\xtp\<database_id>
i wykonanie następującego polecenia:
fsutil file queryea "D:\SQL\MSSQL17.MSSQLSERVER\MSSQL\DATA\xtp\5\xtp_t_5_64719283_196202718557591_1.dll"
Usuń funkcję instalatora zarządzanego
Aby usunąć funkcję Instalatora zarządzanego z urządzenia, należy usunąć zasady AppLocker dotyczące Instalatora zarządzanego, postępując zgodnie z instrukcjami w Usuń regułę AppLocker: Wyczyść zasady AppLocker na pojedynczym systemie lub systemach zdalnych.
Powiązana zawartość
- Automatycznie zezwalaj aplikacjom wdrażanym przez zarządzany program instalacyjny za pomocą "App Control for Business"
- In-Memory przegląd i scenariusze użycia OLTP
- przewodnik dotyczący przetwarzania zapytań dla tabel Memory-Optimized
- Przykładowa baza danych dla In-Memory OLTP
- Przewodnik wdrażania AppLocker
- wdrażanie zasad kontroli aplikacji dla firm