Como criar políticas de Controle de Aplicativos OLTP e de Instalador Gerenciado In-Memory
Aplica-se a:SQL Server
O SQL Server compila e vincula uma DLL (biblioteca de link dinâmico) para cada tabela compilada nativa e procedimento armazenado que tem a implementação nativa desses objetos no código C. Embora os In-Memory DLLs OLTP sejam gerados dinamicamente, os próprios arquivos poderão fornecer alguns desafios quando houver requisitos de conformidade que tenham a imposição da integridade do código como critério.
O que é HKDLLGEN?
No SQL Server 2022 (16.x) Atualização Cumulativa 17 e versões posteriores, um componente conhecido como gerador DLL hekaton foi adicionado ao recurso OLTP In-Memory. Sem o novo processo de geração de DLL do Hekaton (hkdllgen), o processo principal do SQL Server converte o T-SQL em código C e, em seguida, inicia processos de compilador e vinculador para gerar DLLs OLTP não assinadas In-Memory. Hkdllgen
, como um aplicativo intermediário, valida e aceita a saída do SQL Server e então cria DLLs assinadas. Para impor políticas de integridade de código para essas DLLs, o processo de Hkdllgen
precisaria ser designado como WDAC (Windows Defender Application Control) Managed Installer.
O gerador de DLL do Hekaton é o primeiro passo para garantir que os requisitos de conformidade regulatória, como integridade de código, possam ser atendidos com DLLs geradas por OLTP In-Memory. A integridade do código nesse contexto garante que as DLLs que In-Memory o 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 do gerador de DLL hekaton como instalador gerenciado permite que o sistema de integridade de código WDAC confie nas DLLs geradas e permita que elas sejam usadas.
Como funciona um instalador gerenciado?
O instalador gerenciado usa uma coleção de regras especial no appLocker para designar binários confiáveis pela sua organização como uma fonte autorizada para instalação do aplicativo. Quando um desses binários confiáveis é executado, o Windows monitora o processo do binário (e todos os processos filho que ele inicia) e observa os arquivos que estão sendo gravados em disco. À medida que os arquivos são escritos, uma identificação ou etiqueta é adicionada ao arquivo, indicando sua origem a partir de um instalador gerenciado.
Com o AppLocker, o Controle de Aplicativos WDAC 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 as informações de origem do instalador gerenciado ao determinar se um binário deve ou não ser executado. Desde que não haja regras de negação para o binário, o Controle de Aplicativo permite que ele seja executado com base apenas na origem do instalador gerenciado. O AppLocker também controla a execução de arquivos executáveis designados como instalador gerenciado, mas não oferece uma cadeia de confiança para executáveis e DLLs como o 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.
Habilitar o gerador de DLL Hekaton
Exemplo
Neste exemplo, sp_configure
é usado para habilitar a opção de gerador DLL hekaton, que é chamada de external xtp dll gen util enabled
. Um banco de dados de teste é criado, juntamente com uma tabela com otimização de 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 no 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 políticas de Instalador Gerenciado e do AppLocker OLTP in-memory
A interface de criação de políticas do AppLocker no Editor de GPO (gpedit.msc) e os cmdlets do PowerShell do AppLocker não podem ser usados diretamente para criar regras na coleção de regras do Instalador Gerenciado. No entanto, você pode usar um editor de texto ou XML 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 de geração de DLL do Hekaton à configuração de política de controle do AppLocker nos servidores; caso contrário, funções básicas do sistema operacional correm o risco de ser bloqueadas pelo Windows Defender. Para obter mais informações sobre criação, teste e manutenção de políticas de controle de aplicativo, consulte o guia de implantação do AppLocker.
Os exemplos restantes se aplicam a windows server 2022 e windows 11 e versões posteriores.
Para verificar se existe pelo menos uma coleção de regras exe dentro da configuração da política de Controle do AppLocker nos servidores, execute o seguinte comando do PowerShell:
Get-AppLockerPolicy -Effective
Ou para salvar a saída das políticas efetivas em um arquivo XML para exibiçã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 Instalador Gerenciado gerada usando essas etapas pode ser mesclada em uma política GPO abrangente e distribuída a todos os servidores SQL em um ambiente ou aplicada à política 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 de domínio.
Use New-AppLockerPolicy para criar uma regra EXE para o arquivo que você está designando como instalador gerenciado. Este exemplo cria uma regra para o gerador de DLL Hekaton usando o tipo de regra do Publicador, mas qualquer tipo de regra do AppLocker pode ser usado. Talvez seja necessário reformatar a saída 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
emManagedInstaller
EnforcementMode
emAuditOnly
BinaryVersionRange LowSection
a"*"
eHighSection
a"*"
Altere:
<RuleCollection Type="Exe" EnforcementMode="NotConfigured">
para:
<RuleCollection Type="ManagedInstaller" EnforcementMode="AuditOnly">
Altere:
<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 comando do PowerShell a seguir.
#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 do Aplicativo AppLocker e o driver de filtro AppLocker.
appidtel.exe start [-mionly]
Habilitar a opção de instalador gerenciado no Assistente de Controle de Aplicativos do Windows Defender para Empresas
Para o WDAC (Controle de Aplicativos do Windows Defender) confiar nas DLLs geradas pelo processo de hkdllgen.exe
, a opção Habilitado: Instalador Gerenciado deve ser especificada em 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 de uma das políticas base de modelo do Assistente de políticas de base do WDAC.
Começar com a política padrão do Windows oferece menos opções, que são removidas neste guia. Mais informações sobre as políticas de Modo Padrão do Windows e de Modo Permitido da Microsoft podem ser acessadas por meio do artigo sobre as políticas base do Controle de Aplicativos para Empresas de Exemplo.
Política de modelo base
Depois que o modelo base de política do Windows for selecionado, dê um nome à política e escolha onde salvar a política de Controle de Aplicativo no disco.
Selecionar um tipo de política
Escolha o Formato de Política Múltipla e a Política Base como Tipo de Política
Configurar o modelo de política
Habilite apenas o Instalador Gerenciado, a Política de Atualização sem Reinicialização, a Política de Integridade do Sistema Não Assinada e as opções da política de integridade de código no modo de usuário. Desabilite as outras opções de regra de política. Isso pode ser feito pressionando o botão controle deslizante ao lado dos títulos da regra 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 de regras do Policy fornece uma descrição mais completa de cada regra de política.
Opção de regra | Descrição |
---|---|
Instalador Gerenciado | Use essa opção para permitir automaticamente aplicativos instalados por uma solução de distribuição de software, como o gerador de DLL hekaton, que foi definido como um instalador gerenciado. |
Atualizar a política sem reinicialização | Use essa opção para permitir que futuras atualizações de política do Controle de Aplicativos para Empresas se apliquem sem a necessidade de 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 adicionados à política para habilitar futuras modificações de política. |
Integridade de Código do Modo de Usuário | As políticas do Controle de Aplicativo para Empresas restringem binários do modo kernel e do modo de usuário. Por padrão, somente binários no modo kernel são restritos. Habilitar esta opção de regra valida executáveis e scripts em modo de usuário. |
Você deve habilitar o modo de auditoria inicialmente, pois ele permite testar novas políticas de 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) Adicionar uma regra de política de Publicador Personalizado que garantiria que arquivos como hkdllgen.exe sejam assinados como sendo de um publicador.
O tipo de regra de arquivo do Publicador usa propriedades na cadeia de certificados de assinatura de código para definir regras de arquivo.
Depois de selecionar o botão Criar regra, uma única regra de Assinatura de Política deve existir.
Implante sua política de Controle de Aplicativo. Consulte Implantar políticas do Controle de Aplicativos para Empresas.
Depois que a política é criada, a nova política é gravada no caminho 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 acrescentada 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, um arquivo .xml de política mais genérico que foi gerado após a conclusão do Assistente de Política do Controle de Aplicativo do WDAC pode ser editado. Esse cenário poderá surgir se o Assistente de Política de Controle de Aplicativo do WDAC não for executado em um SQL Server, mas em uma estação de trabalho. Por exemplo, um arquivo de política de integridade de código menos personalizado pode ser semelhante a:
<?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 esteja 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
Depois que a Integridade do Código estiver operando no Modo de Auditoria ou no Modo Ativo, as DLLs geradas pelo gerador de DLL Hekaton são confiadas pelo Windows e têm um Atributo Estendido adicionado aos arquivos.
Uma declaração Smartlocker é adicionada como parte dos metadados. Isso pode ser exibido usando o comando fsutil de um prompt de comando administrativo. Por exemplo, selecionar um dos arquivos gerados dinamicamente do In-memory OLTP na pasta \Data\xtp\<database_id>
e executar o seguinte comando:
fsutil file queryea "D:\SQL\MSSQL17.MSSQLSERVER\MSSQL\DATA\xtp\5\xtp_t_5_64719283_196202718557591_1.dll"
Remover o recurso Instalador Gerenciado
Para remover o recurso Instalador Gerenciado do dispositivo, você precisa remover do dispositivo a política do AppLocker do Instalador Gerenciado seguindo as instruções em Excluir uma regra do AppLocker: limpar políticas do AppLocker em um único sistema ou em sistemas remotos.
Conteúdo relacionado
- Permitir automaticamente aplicativos implantados por um instalador gerenciado com o Controle de Aplicativos para Empresas
- Visão geral e cenários de uso do OLTP in-memory
- Um guia para processamento de consulta de tabelas com otimização de memória
- Banco de dados de exemplo para OLTP in-memory
- Guia de implantação do AppLocker
- Implantação de políticas do Controle de Aplicativos para Negócios