
Neutralización de EDR basada en AppLocker
Tras mi artículo sobre Fairy-Law, donde usé mitigaciones del kernel para deshabilitar soluciones de Detección y Respuesta de Puntos Finales (EDR), diversenok señaló que las exclusiones IFEO (Image File Execution Options) eran demasiado invasivas para aplicaciones de terceros. Esto llevó a un mejor enfoque: aprovechar el poder inherente que los administradores ya poseen a través de AppLocker.
El concepto fue inspirado por diversenok, quien destacó que los administradores pueden controlar legítimamente cualquier software en sus sistemas. A partir de esa idea, desarrollé una técnica que utiliza AppLocker como mecanismo de control nativo de Windows. Esta investigación explora la implementación técnica de AppLocker para el control de EDR, comparándola con WDAC y presentando una herramienta práctica de prueba de concepto.
AppLocker se introdujo con Windows 7 y se mejoró en Windows 8.1, 10 (Enterprise) y Windows Server 2012/R2/2016+. Es un marco de lista blanca de aplicaciones que permite a los administradores definir con precisión qué ejecutables, scripts o instaladores pueden ejecutarse para usuarios o grupos específicos.
AppIDSvc (Servicio de Identidad de Aplicaciones)
LocalServiceAppID.sys (Controlador del Kernel)
SeSrpAccessCheckAclaración:
Si bienAppID.sysrealiza la evaluación de reglas en modo kernel, la ejecución de DLL no es autónoma.
El controlador del kernel no monitorea activamente las cargas de DLL por sí mismo. En su lugar, los componentes de modo usuario deben consultar explícitamente al controlador mediante IOCTL para determinar si se permite la carga de una DLL.
Como resultado, las reglas de DLL de AppLocker actúan efectivamente como un mecanismo de protección del lado del cliente.
AppLocker soporta dos categorías principales de reglas:
Reglas de Permiso: Permiten explícitamente la ejecución de aplicaciones definidas.
Reglas de Denegación: Bloquean explícitamente la ejecución de aplicaciones definidas.
C:\Program Files\Security\*.exeHKLM\Software\Policies\Microsoft\Windows\SrpV2 (Almacenamiento de política XML, persistente)
HKLM\SYSTEM\CurrentControlSet\Control\Srp\Gp\Exe (Formato binario SDDL, aplicación activa)
HKLM\SYSTEM\CurrentControlSet\Control\AppID\CertStore (Caché de certificados)
Por defecto, AppLocker no aplica reglas en servicios o procesos del sistema.
No hay una opción de interfaz gráfica para habilitar este comportamiento.
La ejecución para servicios solo se puede habilitar mediante la política XML usando RuleCollectionExtensions.
La siguiente sección de política es necesaria para aplicar reglas de AppLocker en servicios:
<RuleCollectionExtensions>
<ThresholdExtensions>
<Services EnforcementMode="Enabled"/>
</ThresholdExtensions>
<RedstoneExtensions>
<SystemApps Allow="Enabled"/>
</RedstoneExtensions>
</RuleCollectionExtensions>
Como indican los nombres de las extensiones, estas opciones solo son compatibles con Windows 10+ y no están disponibles en versiones anteriores. Consulte Microsoft - Extensiones de colección de reglas de AppLocker
AppID.sys evalúa los atributos de la aplicación.STATUS_ACCESS_DISABLED_BY_POLICY_OTHER⚠️ AppLocker NO termina procesos en ejecución.
La ejecución de AppLocker solo se aplica a eventos de creación de nuevos procesos. Los procesos EDR que ya estén en ejecución continúan funcionando hasta que se reinicie el sistema. Esta es una restricción arquitectónica fundamental.
Advertencia sobre la Telemetría del Controlador del Kernel:
Incluso después de bloquear los ejecutables de espacio de usuario de EDR, los controladores del kernel (*.sys) permanecen activos y operativos. Estos controladores continúan:
Sin embargo, pruebas exhaustivas revelan que esta telemetría se vuelve funcionalmente ineficaz. Sin los motores de análisis de espacio de usuario, los sistemas de correlación y los mecanismos de reporte, los datos de telemetría sin procesar no pueden convertirse en detecciones procesables. Las soluciones EDR dependen en gran medida de los componentes de espacio de usuario para:
GhostLocker es una implementación en C++ que automatiza el despliegue de políticas de AppLocker para bloquear ejecutables de EDR.
GhostLocker proporciona dos variantes de implementación:
main.cpp – Versión de Enumeración DinámicaEsta versión enumera los procesos en ejecución y resuelve sus rutas de imagen completas usando APIs nativas (NtQuerySystemInformation).
Las rutas absolutas resueltas se utilizan luego para generar reglas de denegación precisas de AppLocker.
La herramienta usa CreateToolhelp32Snapshot con TH32CS_SNAPPROCESS para enumerar todos los procesos en ejecución. Compara los nombres de los procesos contra una lista objetivo predefinida usando coincidencia sin distinción de mayúsculas/minúsculas (_wcsicmp).
¿Por qué este enfoque?
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;