
Neutralização de EDR baseada em AppLocker
Após meu artigo sobre Fairy-Law, onde usei mitigações em modo kernel para desabilitar soluções de Detecção e Resposta de Endpoint (EDR), diversenok apontou que as exclusões de IFEO (Image File Execution Options) eram invasivas demais para aplicações de terceiros. Isso levou a uma abordagem melhor: aproveitar o poder inerente que os administradores já possuem através do AppLocker.
O conceito foi inspirado por diversenok, que destacou que administradores podem controlar legitimamente qualquer software em seus sistemas. A partir dessa percepção, desenvolvi uma técnica usando o AppLocker como um mecanismo de controle nativo do Windows. Esta pesquisa explora a implementação técnica do AppLocker para controle de EDR, comparando-o com WDAC e apresentando uma ferramenta prática de prova de conceito.
O AppLocker foi introduzido com o Windows 7 e aprimorado no Windows 8.1, 10 (Enterprise) e Windows Server 2012/R2/2016+. É uma estrutura de lista de permissões de aplicativos que permite aos administradores definir precisamente quais executáveis, scripts ou instaladores podem ser executados para usuários ou grupos específicos.
AppIDSvc (Serviço de Identidade de Aplicativo)
LocalServiceAppID.sys (Driver do Kernel)
SeSrpAccessCheckEsclarecimento:
Embora oAppID.sysrealize a avaliação de regras em modo kernel, a aplicação de regras de DLL não é autônoma.
O driver do kernel não monitora ativamente os carregamentos de DLL por conta própria. Em vez disso, componentes em modo de usuário devem consultar explicitamente o driver via IOCTL para determinar se um carregamento de DLL é permitido.
Como resultado, as regras de DLL do AppLocker atuam efetivamente como um mecanismo de proteção no lado do cliente.
O AppLocker suporta duas categorias principais de regras:
Regras de Permissão: Permitem explicitamente que aplicativos definidos sejam executados
Regras de Negação: Bloqueiam explicitamente que aplicativos definidos sejam executados
C:\Program Files\Security\*.exeHKLM\Software\Policies\Microsoft\Windows\SrpV2 (Armazenamento de política XML, persistente)
HKLM\SYSTEM\CurrentControlSet\Control\Srp\Gp\Exe (Formato binário SDDL, aplicação ativa)
HKLM\SYSTEM\CurrentControlSet\Control\AppID\CertStore (Cache de certificados)
Por padrão, o AppLocker não aplica regras em serviços ou processos SYSTEM.
Não há opção de interface gráfica para habilitar esse comportamento.
A aplicação para serviços só pode ser habilitada via política XML usando RuleCollectionExtensions.
A seguinte seção de política é necessária para aplicar as regras do AppLocker em serviços:
<RuleCollectionExtensions>
<ThresholdExtensions>
<Services EnforcementMode="Enabled"/>
</ThresholdExtensions>
<RedstoneExtensions>
<SystemApps Allow="Enabled"/>
</RedstoneExtensions>
</RuleCollectionExtensions>
Como indicado pelos nomes das extensões, essas opções são suportadas apenas no Windows 10+ e não estão disponíveis em versões anteriores. Consulte Microsoft - Extensões de coleção de regras do AppLocker
AppID.sys avalia os atributos da aplicaçãoSTATUS_ACCESS_DISABLED_BY_POLICY_OTHER⚠️ O AppLocker NÃO finaliza processos em execução.
A aplicação do AppLocker se aplica apenas a eventos de criação de novos processos. Processos EDR já em execução continuam operando até a reinicialização do sistema. Esta é uma restrição arquitetural fundamental.
Ressalva sobre Telemetria de Drivers de Kernel:
Mesmo após bloquear os executáveis em modo de usuário do EDR, os drivers de kernel (*.sys) permanecem ativos e operacionais. Esses drivers continuam:
No entanto, testes extensivos revelam que essa telemetria se torna funcionalmente ineficaz. Sem os mecanismos de análise em modo de usuário, sistemas de correlação e relatórios, os dados brutos de telemetria não podem ser processados em detecções acionáveis. As soluções EDR dependem fortemente de componentes em modo de usuário para:
GhostLocker é uma implementação em C++ que automatiza a implantação de políticas do AppLocker para bloquear executáveis de EDR.
O GhostLocker fornece duas variantes de implementação:
main.cpp – Versão de Enumeração DinâmicaEsta versão enumera os processos em execução e resolve seus caminhos completos de imagem usando APIs nativas (NtQuerySystemInformation).
Os caminhos absolutos resolvidos são então usados para gerar regras de negação precisas do AppLocker.
A ferramenta usa CreateToolhelp32Snapshot com TH32CS_SNAPPROCESS para enumerar todos os processos em execução. Ela compara os nomes dos processos com uma lista de alvos predefinida usando correspondência sem diferenciação de maiúsculas/minúsculas (_wcsicmp).
Por que essa abordagem?
FindTargetsAndQueryPaths)const wchar_t* targetNames[] = {
L"MpDefenderCoreService.exe",
L"MsMpEng.exe",
L"WinDefend.exe",
L"EDR_Component_Name.exe",
};
SYSTEM_PROCESS_ID_INFORMATION spi = { 0 };
spi.ProcessId = PID;
spi.ImageName.MaximumLength = 1024;
spi.ImageName.Buffer = (PWSTR)allocBuffer;
status = NtQuerySystemInformation(
SystemProcessIdInformation,
&spi,
sizeof(spi),
0
);