Como criar In-Memory políticas de Controlo de Aplicações OLTP e de Instalador Gerido
Aplica-se a:SQL Server
O SQL Server compila e vincula uma biblioteca de vínculo dinâmico (DLL) para cada tabela compilada nativa e procedimento armazenado que tem a implementação nativa desses objetos no código C. Embora as In-Memory DLLs OLTP sejam geradas dinamicamente, os próprios arquivos podem fornecer alguns desafios quando há requisitos de conformidade que têm a imposição de integridade de código como critério.
Qual é HKDLLGEN?
Na Atualização Cumulativa 17 do SQL Server 2022 (16.x) e versões posteriores, um componente conhecido como gerador de DLL Hekaton foi adicionado ao recurso OLTP In-Memory. Sem o novo processo de geração de DLL Hekaton (hkdllgen), o processo principal do SQL Server converte T-SQL em código C e, em seguida, inicia processos de compilador e vinculador para gerar DLLs OLTP In-Memory não assinadas.
Hkdllgen
, como um aplicativo intermediário, valida e aceita a saída do SQL Server e, em seguida, cria DLLs assinadas. Para impor políticas de integridade de código para essas DLLs, o processo de Hkdllgen
precisaria ser designado como Windows Defender Application Control (WDAC) Managed Installer.
O gerador de DLL Hekaton é o primeiro passo para garantir que os requisitos de conformidade regulamentar, como de integridade de código, possam ser atendidos com In-Memory DLLs geradas por OLTP. A integridade do código neste contexto garante que as DLLs que In-Memory OLTP gera sejam confiáveis pelo sistema operacional desde o momento em que são criadas até serem carregadas e executadas. A capacidade de designar o componente gerador Hekaton DLL como um instalador gerenciado permite que o sistema de integridade de código WDAC confie nas DLLs geradas e permite que elas sejam usadas.
Como funciona um instalador gerenciado?
O instalador gerenciado usa uma coleção de regras especiais no AppLocker para designar binários confiáveis pela sua organização como uma fonte autorizada para a instalação do aplicativo. Quando um desses binários confiáveis é executado, o Windows monitora o processo do binário (e qualquer processo filho iniciado por ele) e observa os arquivos que estão sendo gravados no disco. À medida que os ficheiros são escritos, é adicionada uma declaração ou etiqueta ao ficheiro, indicando que ele provém de um instalador gerido.
Com o AppLocker, o WDAC App Control pode ser configurado para confiar em arquivos instalados por um instalador gerenciado adicionando a opção Enabled:Managed Installer a uma política de Controle de Aplicativo. Quando essa opção é definida, o Controle de Aplicativo verifica se há informações de origem do instalador gerenciado ao determinar se um binário deve ou não ser executado. Contanto que não haja regras de negação para o binário, o Controle de Aplicativo permite que ele seja executado com base puramente em sua origem de instalador gerenciado. O AppLocker também controla a execução de arquivos executáveis que são designados como um instalador gerenciado, mas não oferece uma cadeia de confiança para executáveis e DLLs como WDAC. Neste artigo, explicamos como designar e configurar o processo de hkdllgen
como um instalador gerenciado que pode ser usado pelo AppLocker e pelo WDAC.
Habilite o gerador de DLL Hekaton
Exemplo
Neste exemplo, sp_configure
é usado para habilitar a opção do gerador de DLL Hekaton, que é chamada de external xtp dll gen util enabled
. Um banco de dados de teste é criado, juntamente com uma tabela otimizada para memória de teste.
Crie um banco de dados de teste.
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
Crie uma tabela de teste dentro do banco de dados de teste.
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
Um novo arquivo de comprimento zero com uma extensão
.gen
é gerado para cada.dll
dentro do subdiretório<path-to-data-directory>\xtp\<database_id>
. As DLLs agora estão assinadas.
Etapas para criar In-Memory políticas do OLTP AppLocker e do Managed Installer
A interface de criação de políticas do AppLocker no Editor do GPO (gpedit.msc) e os cmdlets do PowerShell do AppLocker não podem ser usados diretamente para criar regras para os conjuntos de regras do Managed Installer. No entanto, você pode usar um XML ou editor de texto para converter uma política de coleção de regras EXE em uma coleção de regras ManagedInstaller.
Importante
Uma política do AppLocker deve existir antes de adicionar o executável Hekaton DLL Generation a uma configuração de diretiva do AppLocker Control de servidores, caso contrário, há um risco de que as funções básicas do sistema operacional possam ser bloqueadas pelo Windows Defender. Para obter mais informações sobre criação, teste e manutenção de políticas de controle de aplicativos, consulte o guia de implantação do AppLocker.
Os exemplos restantes se aplicam ao Windows Server 2022 e Windows 11 e versões posteriores.
Para verificar se pelo menos um coleção de regras exe existe na configuração de política dos servidores do Controle do AppLocker, execute o seguinte comando do PowerShell:
Get-AppLockerPolicy -Effective
Ou para salvar a saída das políticas efetivas em um arquivo XML para visualização:
Get-AppLockerPolicy -Effective -Xml > effective_app_policy.xml
As etapas a seguir percorrem o processo de criação e aplicação de uma política que pode ser aplicada a um servidor local. Uma política do Managed Installer gerada usando essas etapas pode ser mesclada em uma política de GPO e distribuída a todos os SQL Servers em um ambiente ou aplicada à diretiva local de um único servidor. Recomendamos que você trabalhe com um Administrador de Domínio para que a política de Integridade de Código seja aplicada a partir do nível do domínio.
Use New-AppLockerPolicy para criar uma regra EXE para o arquivo que você está designando como um instalador gerenciado. Este exemplo cria uma regra para o gerador de DLL Hekaton usando o tipo de regra do Publisher, mas qualquer tipo de regra do AppLocker pode ser usado. Talvez seja necessário reformatar o resultado para melhorar a legibilidade.
#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
Edite manualmente o
AppLocker_HKDLLGEN_Policy.xml
e altere os seguintes valores de atributo:-
RuleCollection Type
aManagedInstaller
-
EnforcementMode
aAuditOnly
-
BinaryVersionRange LowSection
para"*"
eHighSection
para"*"
Mudança:
<RuleCollection Type="Exe" EnforcementMode="NotConfigured">
Para:
<RuleCollection Type="ManagedInstaller" EnforcementMode="AuditOnly">
Mudança:
<BinaryVersionRange LowSection="2022.160.4175.1" HighSection="2022.160.4175.1"/>
Para:
<BinaryVersionRange LowSection="*" HighSection="*"/>
-
Implante a política de configuração do instalador gerenciado do AppLocker. Você pode importar a política do AppLocker e implantar com a Política de Grupo ou usar um script para implantar a política com o cmdlet Set-AppLockerPolicy, conforme mostrado no seguinte comando do 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
Se estiver implantando a política do AppLocker por meio de um script do PowerShell, use o utilitário appidtel.exe de um prompt de comando administrativo para configurar o serviço de identidade de aplicativo do AppLocker e o driver de filtro do AppLocker.
appidtel.exe start [-mionly]
Habilite a opção de instalador gerenciado no Assistente do Controle de Aplicativo do Windows Defender para Empresas
Para do Windows Defender Application Control (WDAC) confiar nas DLLs geradas pelo processo hkdllgen.exe
, a opção Enabled: Managed Installer deve ser especificada na sua política de Controle de Aplicativo. Essa configuração pode ser definida usando o cmdlet Set-RuleOption com a Opção 13.
Gere um arquivo de política de integridade de código a partir de uma das políticas base de modelo WDAC Base Policy Wizard.
A começar pela política padrão do Windows, proporciona menos opções, que são removidas neste guia. Mais informações sobre as políticas Modo Padrão do Windows e Modo Permitir Microsoft podem ser acessadas através do artigo Exemplo de Políticas Básicas do Controle de Aplicativos para Empresas.
Política de modelo base
Depois que o modelo de base de política do Windows estiver selecionado, dê um nome à política e escolha onde salvar a política de Controle de Aplicativo no disco.
Selecione um tipo de política
Escolha o Formato de Política Múltipla e a Política Base como o Tipo de Política
Configurar modelo de política
Habilite apenas as opções de regra Instalador Gerenciado, Política de Atualização sem Reinicialização, Política de Integridade do Sistema Não Assinada e Política de Integridade do Código do Modo de Usuário. Desative as outras opções das regras de política. Isso pode ser feito pressionando o botão deslizante ao lado dos títulos das regras de política.
A tabela a seguir tem uma descrição de cada regra de política, começando com a coluna mais à esquerda. O artigo das regras da política fornece uma descrição mais completa de cada regra de política.
Opção de regra | Descrição |
---|---|
Instalador Gerido | Use esta opção para permitir automaticamente aplicativos instalados por uma solução de distribuição de software, como o gerador Hekaton DLL, que foi definido como um instalador gerenciado. |
Política de atualização sem reinicializar | Use essa opção para permitir que futuras atualizações da política do Controle de Aplicativo para Empresas sejam aplicadas sem exigir uma reinicialização do sistema. |
Política de Integridade de Sistema Não Assinada | Permite que a política permaneça não assinada. Quando essa opção é removida, a política deve ser assinada e ter UpdatePolicySigners adicionado à política para permitir futuras modificações na política. |
Integridade do Código do Modo de Usuário | As políticas do App Control for Business restringem os binários do modo kernel e do modo do usuário. Por padrão, apenas binários de modo kernel são restritos. Habilitar essa opção de regra valida executáveis e scripts do modo de usuário. |
Você deve habilitar Modo de Auditoria inicialmente, pois ele permite testar novas políticas do Controle de Aplicativo para Empresas antes de aplicá-las. Com o modo de auditoria, nenhum aplicativo é bloqueado - em vez disso, a política registra um evento sempre que um aplicativo fora da política é iniciado. Por esse motivo, todos os modelos têm o Modo de Auditoria habilitado por padrão.
Regras de arquivo
Remova todas as Regras de Assinatura de Política da lista.
(Opcional) Adicione uma regra de política do Custom Publisher que garanta que arquivos como hkdllgen.exe sejam assinados como publisher.
O tipo de regra de ficheiro do Publisher utiliza propriedades na cadeia de certificados de assinatura de código para formar a base das regras de ficheiro.
Depois de selecionar o botão Criar Regra, deve existir uma única regra de Assinatura de Política.
Implante sua política de Controle de Aplicativo. Consulte Implantando políticas do Controle de Aplicativo para Empresas.
Depois que a política é criada, a nova política é gravada no caminho que foi escolhido como o Local do Arquivo de Política. A nova versão binária do nome do arquivo de política tem a versão da política anexada ao final do nome do arquivo. O arquivo .cip da política pode ser copiado para o subdiretório C:\Windows\System32\CodeIntegrity\CiPolicies\Active
na instância do SQL Server.
Implantar manualmente uma política de integridade de código
Para criar uma política de Integridade de Código mais simplificada, pode-se editar um ficheiro de política mais genérico com.xml, que foi gerado após a conclusão do Assistente de Política de Controlo de Aplicação WDAC. Esse cenário pode surgir se o Assistente de Diretiva de Controle de Aplicativo WDAC não for executado em um SQL Server, e sim em uma estação de trabalho. Por exemplo, um arquivo de política de integridade de código menos personalizado pode se parecer com:
<?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>
Este exemplo não tem uma regra de editor assinada e pressupõe que o arquivo de política está usando um diretório de trabalho local (por exemplo, C:\Temp
) com um nome de arquivo de 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"
Para aplicar a política sem reinicializar o servidor e verificar o status da Integridade do Código, execute este script do 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*
Verifique se as DLLs Hekaton geradas são confiáveis pela integridade do código
Uma vez que a integridade do código está operando no modo de auditoria ou modo ativo, as DLLs geradas pelo gerador de DLL Hekaton são confiáveis pelo Windows e têm uma adição estendida atribuída aos arquivos.
Uma declaração Smartlocker é adicionada como parte dos metadados. Isso pode ser visualizado usando o comando fsutil numa linha de comando com privilégios de administrador. Por exemplo, selecionando um dos arquivos OLTP na memória gerados dinamicamente da pasta \Data\xtp\<database_id>
e executando o seguinte comando:
fsutil file queryea "D:\SQL\MSSQL17.MSSQLSERVER\MSSQL\DATA\xtp\5\xtp_t_5_64719283_196202718557591_1.dll"
Remover a funcionalidade Managed Installer
Para remover o recurso Managed Installer do dispositivo, é necessário remover a política do Managed Installer AppLocker do dispositivo seguindo as instruções em Excluir uma regra do AppLocker: Limpar políticas do AppLocker em um único sistema ou sistemas remotos.
Conteúdo relacionado
- Permitir automaticamente aplicações implementadas por um instalador gerido com o App Control for Business
- In-Memory visão geral do OLTP e cenários de uso
- Um guia para processamento de consultas para tabelas Memory-Optimized
- base de dados de exemplo para In-Memory OLTP
- Guia de implantação do AppLocker
- Implantando políticas do App Control for Business