Panorama: qué se hace con el primer apoyo#
El acceso inicial entrega un punto de apoyo: un proceso ejecutándose en un host Windows, casi siempre con los privilegios de un usuario común. La post-explotación (post-exploitation) es todo lo que el operador hace a partir de ahí, y sigue un guion reconocible: consolidar el acceso (entender dónde está, con qué privilegios), recolectar (credenciales, información del dominio), pivotar hacia otros hosts, y —la pieza que este capítulo trata— persistir, para que el acceso sobreviva a un reinicio, a un cierre de sesión o a la eliminación del proceso original. Sin persistencia, un apoyo es efímero: basta que la máquina se reinicie para perderlo.
La primitiva que gobierna toda persistencia es la misma que la persistencia en Linux enunció, y conviene repetirla porque es lo que unifica un catálogo que de otro modo parece una lista de trucos: persistir es suscribir código propio a un disparador de ejecución que el sistema operativo ya honra. No se inventa un mecanismo nuevo; se abusa de uno legítimo —«cuando pase X, ejecuto lo que haya aquí»— colocando el propio código donde el sistema ya va a mirar. Lo que cambia entre sistemas operativos es la riqueza del catálogo de disparadores, y Windows tiene uno especialmente amplio, heredado de décadas de compatibilidad. Cada mecanismo se ubica según tres ejes: el privilegio que exige para instalarlo, el momento en que dispara (al iniciar sesión, al arrancar la máquina, ante un evento) y la visibilidad del artefacto que deja (un archivo, una clave de registro, una entrada en una base de datos interna).
flowchart TB P["primitiva: suscribir código\na un disparador que Windows ya honra"] P --> U["sin admin (HKCU)\nRun keys · Startup · tarea de usuario · COM hijack"] P --> A["admin / SYSTEM (HKLM)\nservicio · tarea SYSTEM · IFEO · DLL search-order · accesibilidad"] P --> F["fileless / sigilo\nsuscripción de eventos WMI (repositorio, sin archivo)"] U -.->|"escalar privilegios (3.9)"| A A -.-> F
Antes de recorrerlo, una distinción que evita confusiones a lo largo del capítulo. Existe una persistencia a nivel de dominio, que abusa del Active Directory —cuentas, delegaciones, tickets forjados, listas de control de acceso— y que vive en la Parte 4. Este capítulo trata la persistencia a nivel de host: los mecanismos del propio Windows en una máquina, que funcionan igual esté o no en un dominio. Son planos complementarios, y un operador maduro combina ambos; aquí nos quedamos en la máquina.
Sin privilegios de administrador#
Un error común es creer que la persistencia exige privilegios altos. Buena parte del catálogo funciona con los permisos de un usuario común, escribiendo solo en su propia porción del sistema, y por eso es la primera que un operador instala: asegura el apoyo antes de intentar escalar.
Las claves Run del registro son el mecanismo arquetípico. En la rama del usuario actual (HKCU) existen ubicaciones
—...\CurrentVersion\Run y RunOnce— cuyo contenido el sistema ejecuta automáticamente cada vez que ese usuario inicia
sesión. Escribir ahí un valor que apunte al propio payload garantiza su ejecución en cada inicio de sesión, sin tocar nada
que requiera administrador. La carpeta de inicio (Startup folder) es la versión en disco de la misma idea: cualquier
acceso directo o ejecutable colocado ahí corre al iniciar sesión. Las tareas programadas de usuario ofrecen más
control sobre el disparo —a una hora, cada cierto intervalo, ante un evento del sistema— y también se crean sin privilegios
elevados para el propio usuario.
Más sutil es el secuestro de objetos COM (COM hijacking). El modelo de componentes de Windows resuelve qué código cargar para un componente dado consultando el registro, y consulta primero la rama del usuario antes que la de la máquina. Un operador que registra en su propia rama un componente que el sistema o una aplicación legítima cargan con frecuencia logra que su código se ejecute cada vez que ese componente se invoca, sin sobrescribir nada global —solo se adelanta en el orden de búsqueda—. Es persistencia sigilosa porque no crea un artefacto obvio de arranque, sino que se esconde en la maquinaria de resolución de componentes.
Con administrador o SYSTEM#
Cuando el operador ha escalado —por las vías de la escalada de privilegios— se abre la mitad
más poderosa y más sigilosa del catálogo, la que escribe en la porción de la máquina (HKLM) y afecta a todos los usuarios
y al arranque del sistema.
Los servicios de Windows son el mecanismo clásico: un servicio es un programa que el sistema arranca automáticamente al iniciar la máquina, potencialmente como SYSTEM —el privilegio máximo del host— y con reinicio automático si se lo mata. Registrar un servicio malicioso da persistencia con el privilegio más alto y una gran resistencia. Las tareas programadas del sistema, creadas con privilegios elevados, ofrecen lo mismo con disparadores más flexibles.
El mecanismo que merece más atención, porque es el favorito de los adversarios avanzados y el más difícil de ver, es la suscripción permanente a eventos de WMI (WMI event subscription). WMI (Windows Management Instrumentation) es la infraestructura de administración del sistema, y permite registrar de forma permanente un vínculo entre un filtro de eventos —una condición, por ejemplo «cada vez que el sistema lleva cierto tiempo encendido» o «cuando se inicia tal proceso»— y un consumidor —una acción, típicamente ejecutar un comando—. Ese vínculo se almacena en el repositorio interno de WMI, no en un archivo del disco ni en una clave de arranque obvia, y dispara el payload cuando la condición se cumple. Es persistencia fileless —sin archivo— en el sentido fuerte: el artefacto vive en una base de datos de administración que las herramientas de arranque tradicionales no inspeccionan. Por eso es a la vez tan usada por los atacantes sofisticados y tan importante de conocer para el defensor.
A su lado hay una familia de abusos de rutas de ejecución. Las opciones de ejecución de imágenes (Image File Execution Options, IFEO) permiten asociar un «depurador» a un ejecutable por su nombre, de modo que al lanzarse el programa se lance en su lugar el del atacante. El secuestro del orden de búsqueda de DLL (DLL search-order hijacking) coloca una biblioteca maliciosa en una ruta que una aplicación legítima consulta antes que la correcta, logrando que la aplicación cargue el código del atacante al iniciarse. Y las puertas traseras de accesibilidad —reemplazar utilidades como las teclas especiales o el administrador de utilidades por un intérprete de comandos— dan una consola con privilegios de sistema disponible incluso desde la pantalla de inicio de sesión.
Fileless y el sigilo del post-breach#
Un rasgo atraviesa la mitad avanzada del catálogo y conviene nombrarlo: la tendencia a no tocar el disco. El registro y el repositorio de WMI funcionan como almacenes donde esconder tanto el disparador como, a veces, el propio payload codificado, de modo que no haya un archivo malicioso que un antivirus pueda encontrar. Es la lógica que frameworks de post-explotación llevaron al extremo: mantener la carga en memoria y en almacenes de administración, dejando en disco lo mínimo. Vale notar un detalle que conecta con el capítulo anterior: la marca de la web que gobierna el acceso inicial es irrelevante aquí. Esa marca protege contra lo que entra de afuera; una vez el operador ejecuta código dentro del host, escribe en el registro y en WMI como cualquier proceso local, sin ninguna marca que lo delate. La defensa del post-breach es, por eso, enteramente distinta de la del acceso inicial: ya no se trata de filtrar lo que llega, sino de observar lo que ocurre.
Conviene, por último, señalar los puentes con otras Partes sin rehacerlas. Una webshell —código en un servidor web comprometido que da ejecución remota— es persistencia del lado servidor y nace de la explotación web; la persistencia de dominio que sobrevive a la reinstalación de un host —un golden ticket, una delegación abusiva— vive en la Parte 4. Este capítulo se queda en los mecanismos del host, que son el sustrato sobre el que esas otras persistencias se apoyan.
Defensa y detección: el artefacto que sobrevive al reinicio#
La debilidad estructural de toda persistencia es la misma que en Linux, y es la buena noticia para el defensor: para sobrevivir a un reinicio, el operador tiene que dejar un artefacto que sobrevive al reinicio —y por lo tanto es enumerable—. Los disparadores son finitos y conocidos; la defensa consiste en inventariarlos y vigilar los cambios.
El primer plano es la línea de base de puntos de arranque. Herramientas de inventario de puntos de auto-ejecución —al estilo de Autoruns de Sysinternals— enumeran de una vez todas las claves Run, servicios, tareas, entradas de inicio, secuestros de COM y demás ubicaciones desde las que Windows ejecuta código al arrancar o al iniciar sesión. Comparar ese inventario contra una línea de base conocida (autoruns diffing) revela lo que se agregó. Lo que es difícil de encontrar a mano se vuelve trivial cuando se conoce la lista completa de dónde mirar.
El segundo plano es la telemetría de eventos, y aquí la correlación en el SIEM tiene firmas de alta fidelidad para cada mecanismo. La creación de un servicio genera eventos característicos (identificadores 7045 en el registro del sistema, 4697 en el de seguridad); la creación de una tarea programada, el evento 4698; la escritura en las claves Run del registro se captura con la telemetría de registro de Sysmon (identificadores 12 y 13). Y para el mecanismo más sigiloso, el más importante: las suscripciones a eventos de WMI tienen su propia telemetría dedicada en Sysmon —los identificadores 19, 20 y 21 registran la creación de filtros, consumidores y sus vínculos—. Habilitar esa telemetría es lo que convierte la persistencia fileless de invisible en detectable, y es una de las configuraciones de mayor retorno que un defensor puede activar.
El tercer plano es la actitud: asumir la brecha (assume breach). La misma postura que cierra la persistencia en Linux aplica aquí, con los identificadores de eventos de Windows en lugar de las rutas de Unix. La cacería de persistencia no espera una alerta; enumera periódicamente los puntos de auto-ejecución, correlaciona la aparición de un servicio o una suscripción de WMI nueva con el resto de la actividad del host, y trata cualquier disparador que no reconoce como una hipótesis a investigar. Porque la persistencia, por sigilosa que sea, tiene que existir en algún lugar enumerable para poder disparar —y ese es el punto donde el defensor la alcanza—.
Referencias#
red-infra/hacker-playbook3/cap-04(Peter Kim, The Hacker Playbook 3, «The Drive»): la fase de post-explotación en el host, la consolidación del acceso y la recolección tras el compromiso.red-infra/pen200/cap-01(OffSec PEN-200, «Windows Privilege Escalation») yred-infra/pen200/cap-05(«The Metasploit Framework»): la enumeración del host Windows tras el apoyo y los módulos de post-explotación que automatizan la persistencia.- El encuadre de la persistencia como primitiva de suscripción a disparadores, el detalle de las suscripciones de WMI como persistencia fileless y el mapeo púrpura por identificador de evento son enriquecimiento propio a partir del dominio actual y de ATT&CK (TA0003 Persistence: T1547.001 Registry Run Keys / Startup Folder, T1053.005 Scheduled Task, T1543.003 Windows Service, T1546.003 WMI Event Subscription, T1546.012 IFEO Injection, T1546.008 Accessibility Features, T1546.015 COM Hijacking, T1574.001 DLL Search Order Hijacking, T1505.003 Web Shell). Es el espejo Windows de la persistencia en Linux; se apoya en el apoyo del acceso inicial y en la escalada de privilegios, estabiliza el command and control y se detecta desde la correlación en el SIEM; la persistencia de dominio complementaria vive en la Parte 4.