
Process Explorer controlador vulnerable elusión de PPL
Aunque es bien sabido que las versiones antiguas (anteriores a la 17.x) de los controladores de SysInternals Process Explorer (PSEXP152.sys) son vulnerables y pueden ser abusadas para abrir identificadores de proceso con acceso completo a procesos PPL (IOCTL: 0x8335003c), las versiones más recientes (17.x en adelante) siguen siendo vulnerables y capaces de hacer lo mismo con una función de controlador diferente (IOCTL: 0x83350014). Esta función IOCTL duplica identificadores arbitrarios y también recibió un parche para filtrar el proceso del sistema y cualquier proceso protegido (PP/PPL) en la versión 17.00 del controlador. Pero hubo un descuido importante con esta función, ya que todavía era posible duplicar cualquier identificador de proceso e hilo desde tu propio proceso no PPL. Simplemente abrir un proceso PPL con permisos bajos como PROCESS_QUERY_LIMITED_INFORMATION y luego duplicar este identificador desde tu propio proceso a través del controlador de Process Explorer era suficiente para eludir el filtro y recibir un identificador con acceso completo a un proceso PPL. Usé este método hace años para eludir la protección de procesos PPL, pero Microsoft parcheó este bypass con la versión 17.11 del controlador al comprobar ahora si el identificador objetivo es un identificador de proceso o hilo PPL. Aun así, las versiones del controlador desde la 17.00 hasta la 17.09 (la 17.10 no existe) no están incluidas en la lista de bloqueo de controladores vulnerables de Microsoft y sospecho que algunos proveedores de EDR tampoco marcan estas versiones (por ahora).
Esta es solo una implementación de PoC para matar procesos PPL. El mismo y potente IOCTL de duplicación de identificadores también se puede usar para duplicar otros tipos de identificadores como hilos y para inyectar shellcode en otros procesos PPL.
Uso:
1. Descarga una versión antigua de SysInternals Process Explorer (17.00 a 17.10)
2. Ejecuta procexp64.exe como administrador para cargar el controlador vulnerable
3. Busca en Process Explorer el PID de, por ejemplo, MsMpEng.exe (ej: 3660)
4. Ejecuta ps_ppl_bypass.exe PID ("ps_ppl_bypass.exe 3660") como administrador para matar el proceso objetivo
También sigue siendo posible obtener una versión antigua del controlador desde el sitio web oficial de SysInternals extrayéndola de la herramienta SysInternals Handles: https://learn.microsoft.com/en-us/sysinternals/downloads/handle