Persistencia en el Registro de Windows: Cómo el Malware
Guía completa de técnicas de persistencia via registro de Windows usadas por malware. Run keys, Services, AppInit_DLLs, Image File Execution Options, COM.
El problema de la persistencia
TL;DR: La persistencia en el registro de Windows es el mecanismo que permite al malware sobrevivir a reinicios configurando su ejecución automática en el sistema. Mientras que las claves HKCU Run muestran una prevalencia muy alta sin requerir privilegios, los servicios en HKLM son la técnica dominante para atacantes con permisos de administrador. Se recomienda emplear herramientas como Sysmon y Autoruns para auditar y bloquear cambios sospechosos en estas rutas críticas.
El malware necesita sobrevivir a los reinicios. Sin persistencia, un simple reinicio elimina el malware de la memoria y la infección termina. El registro de Windows es el mecanismo de persistencia más usado por dos razones: está profundamente integrado en el proceso de arranque del sistema, y ofrece docenas de ubicaciones donde configurar la ejecución automática de programas.
Este artículo cataloga las técnicas de persistencia via registro organizadas por privilegio requerido, prevalencia en malware real, y dificultad de detección.
Mapa de persistencia en el registro
Vista general por privilegio
| Privilegio requerido | Técnica | Clave de registro | Prevalencia |
|---|---|---|---|
| Ninguno (usuario) | HKCU Run keys | HKCU\...\Run | Muy alta |
| Ninguno | HKCU RunOnce | HKCU\...\RunOnce | Alta |
| Ninguno | COM hijacking (HKCU) | HKCU\Software\Classes\CLSID | Media |
| Ninguno | Startup folder (via registro) | HKCU\...\Explorer\Shell Folders | Media |
| Admin | HKLM Run keys | HKLM\...\Run | Alta |
| Admin | Services | HKLM\SYSTEM\CurrentControlSet\Services | Muy alta |
| Admin | Winlogon | HKLM\...\Winlogon\Shell | Media |
| Admin | AppInit_DLLs | HKLM\...\Windows\AppInit_DLLs | Baja (deprecated) |
| Admin | Image File Execution Options | HKLM\...\Image File Execution Options | Media |
| Admin | Boot Execute | HKLM\SYSTEM\...\Session Manager\BootExecute | Baja |
| SYSTEM | LSA Authentication/Notification | HKLM\SYSTEM\...\Lsa | Baja (APTs) |
Técnica 1: Run y RunOnce Keys (T1547.001)
Las claves más comunes
Auto-ejecucion al login de cualquier usuario (requiere admin):
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
Auto-ejecucion al login del usuario actual (sin admin):
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
Versiones 32-bit en sistemas 64-bit (WoW64):
HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
HKCU\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
Cómo funciona
Cada valor en estas claves contiene un nombre (arbitrario) y una ruta al ejecutable. Windows ejecuta todos los programas listados en estas claves al iniciar sesión:
[HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"WindowsUpdate"="C:\Users\user\AppData\Roaming\svchost.exe"
"SecurityCenter"="powershell.exe -ep bypass -w hidden -f C:\ProgramData\update.ps1"
"OneDriveSync"="rundll32.exe C:\Users\user\AppData\Local\Temp\payload.dll,DllMain"
Valores sospechosos
| Indicador | Sospecha |
|---|---|
Ruta a %APPDATA%, %TEMP%, %LOCALAPPDATA% | Alta (software legítimo se instala en Program Files) |
| Nombre que imita software legítimo ("WindowsUpdate", "SecurityCenter") | Alta |
Uso de rundll32.exe, regsvr32.exe, mshta.exe | Alta (LOLBins) |
PowerShell con -enc o -ep bypass | Muy alta |
| Ejecutable sin extensión o con extensión doble | Alta |
| Ruta con espacios sin comillas | Media (puede ser explotable, no necesariamente malicioso) |
RunOnce vs Run
- Run: ejecuta el programa en cada inicio de sesión. El valor persiste
- RunOnce: ejecuta el programa una vez y luego elimina el valor. Usado por malware para una ejecución "silenciosa" que no deja rastro permanente en el registro
Prevalencia en malware
Prácticamente todo malware commodity usa Run keys: Agent Tesla, Remcos, NanoCore, FormBook, RedLine, AsyncRAT, y miles más. Es la técnica de persistencia más básica y más común.
Técnica 2: Servicios de Windows (T1543.003)
Claves de registro
HKLM\SYSTEM\CurrentControlSet\Services\[nombre_servicio]
Cada servicio tiene subclaves que definen:
| Valor | Tipo | Significado |
|---|---|---|
ImagePath | REG_EXPAND_SZ | Ruta al ejecutable del servicio |
Start | REG_DWORD | 0=Boot, 1=System, 2=Automatic, 3=Manual, 4=Disabled |
Type | REG_DWORD | 1=Kernel driver, 16=Win32 own process, 32=Win32 shared |
DisplayName | REG_SZ | Nombre visible en services.msc |
Description | REG_SZ | Descripción del servicio |
ObjectName | REG_SZ | Cuenta bajo la que corre (LocalSystem, etc.) |
Cómo lo usa el malware
sc create MalwareService binPath= "C:\ProgramData\payload.exe" start= auto
O via registro directo:
[HKLM\SYSTEM\CurrentControlSet\Services\WindowsTelemetryService]
"ImagePath"="C:\\ProgramData\\telemetry.exe"
"Start"=dword:00000002
"Type"=dword:00000010
"DisplayName"="Windows Telemetry Service"
"Description"="Provides telemetry data collection for Windows diagnostics"
Detección
| Indicador | Método |
|---|---|
| Servicio con ImagePath en directorio no estándar | Autoruns, sc query |
| Servicio sin descripción o con descripción genérica | Autoruns |
| Servicio creado recientemente (comparar con baseline) | Sysmon Event ID 12/13 |
| Servicio con binario sin firma digital | Autoruns (verificar firma) |
| Event ID 7045 (servicio instalado) | Security Event Log |
| Event ID 4697 (servicio instalado, audit) | Security Event Log |
Técnica 3: COM Hijacking (T1546.015)
Concepto
COM (Component Object Model) es el sistema de componentes reutilizables de Windows. Cada objeto COM se identifica por un CLSID (Class ID) y está registrado en el registro con la ruta a su DLL de implementación.
COM hijacking funciona así:
- Identificar un CLSID de un objeto COM que Windows o una aplicación cargan automáticamente
- Registrar una DLL maliciosa para ese CLSID en HKCU (que tiene precedencia sobre HKLM)
- Cuando el sistema o la aplicación intenta instanciar el objeto COM, carga la DLL maliciosa
Por qué es sigiloso
- No modifica Run keys (no aparece en los checks más básicos)
- No crea servicios visibles
- La DLL se carga en el contexto de un proceso legítimo
- HKCU no requiere privilegios de administrador
- Muchos objetos COM se cargan silenciosamente en procesos comunes como
explorer.exe
CLSIDs comúnmente abusados
| CLSID | Objeto | Proceso que lo carga |
|---|---|---|
{BCDE0395-E52F-467C-8E3D-C4579291692E} | MMDeviceEnumerator | explorer.exe, svchost.exe |
{42aedc87-2188-41fd-b9a3-0c966feab6a6} | MruPidlList | explorer.exe |
{F3DA0DC7-AFD4-44A0-A49D-92C8B22A0227} | Copy/Move/Rename Extension | explorer.exe |
{fbeb8a05-beee-4442-804e-409d6c4515e9} | Shell Folder | explorer.exe |
{b5f8350b-0548-48b1-a6ee-88bd00b4a5e7} | CAccPropServicesClass | Múltiples |
Ejemplo
; El CLSID existe en HKLM apuntando a una DLL legitima
[HKLM\SOFTWARE\Classes\CLSID\{BCDE0395-E52F-467C-8E3D-C4579291692E}\InProcServer32]
@="C:\\Windows\\System32\\MMDevAPI.dll"
; El malware crea la misma clave en HKCU (tiene precedencia)
[HKCU\SOFTWARE\Classes\CLSID\{BCDE0395-E52F-467C-8E3D-C4579291692E}\InProcServer32]
@="C:\\Users\\user\\AppData\\Roaming\\evil.dll"
Cuando explorer.exe carga el objeto COM, busca primero en HKCU, encuentra la DLL maliciosa y la carga.
Detección
- Sysmon Event ID 13: SetValue en
HKCU\Software\Classes\CLSID\(cualquier escritura aquí es sospechosa) - Autoruns: tab "Explorer" muestra COM objects registrados en HKCU
- Comparar CLSIDs registrados en HKCU con un baseline limpio
Técnica 4: Winlogon (T1547.004)
Claves clave
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
Valor por defecto: "explorer.exe"
Malware añade: "explorer.exe, C:\malware.exe"
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
Valor por defecto: "C:\Windows\system32\userinit.exe,"
Malware añade: "C:\Windows\system32\userinit.exe, C:\malware.exe"
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
Subclaves que registran DLLs para eventos de Winlogon
Impacto
Modificar Winlogon\Shell es particularmente destructivo: si el valor es incorrecto, Windows no puede iniciar el escritorio (explorer.exe no se lanza). Algunos malware explotan esto como mecanismo de bloqueo de tipo "locker ransomware".
Técnica 5: Image File Execution Options (T1546.012)
Concepto
IFEO (Image File Execution Options) es un mecanismo legítimo de Windows para depuración: permite especificar un debugger que se ejecute automáticamente cuando un programa específico se lanza.
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe
"Debugger"="C:\malware.exe"
Cuando el usuario ejecuta notepad.exe, Windows lanza C:\malware.exe notepad.exe en su lugar.
Uso malicioso
| Uso | Ejemplo |
|---|---|
| Reemplazar un programa legítimo | IFEO en taskmgr.exe para impedir que el usuario vea procesos |
| Persistencia sigilosa | IFEO en un programa que se ejecuta frecuentemente |
| Bloquear herramientas de seguridad | IFEO en MsMpEng.exe (Defender) apuntando a un binario vacío |
| Ejecución indirecta | IFEO en sethc.exe (Sticky Keys) para backdoor de accesibilidad |
Sticky Keys Backdoor
Técnica clásica de persistencia y backdoor:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe
"Debugger"="cmd.exe"
Presionar Shift 5 veces en la pantalla de login invoca sethc.exe, que ahora ejecuta cmd.exe con privilegios de SYSTEM. Acceso sin credenciales.
Variantes: utilman.exe (Win+U), osk.exe (teclado en pantalla), narrator.exe.
Técnica 6: AppInit_DLLs (T1546.010)
Clave de registro
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows
"AppInit_DLLs"="C:\evil.dll"
"LoadAppInit_DLLs"=dword:00000001
Comportamiento
Cuando LoadAppInit_DLLs es 1, Windows carga la DLL especificada en AppInit_DLLs en cada proceso que carga user32.dll (prácticamente todos los procesos GUI).
Estado actual
Microsoft deprecó AppInit_DLLs en Windows 8+ y lo deshabilitó por defecto con Secure Boot activo. Sin embargo, en sistemas legacy o con Secure Boot deshabilitado, sigue funcional.
Herramientas de detección
Autoruns (Sysinternals)
La herramienta definitiva para auditar persistencia en Windows:
- Muestra más de 40 ubicaciones de auto-arranque
- Verifica firmas digitales de cada entrada
- Permite comparar con un estado anterior (baseline)
- Exporta resultados para análisis
- Versión CLI (
autorunsc.exe) para automatización
autorunsc.exe -accepteula -a * -c -h -s -v -vt > autoruns_output.csv
Flags: -a * (todas las ubicaciones), -c (CSV), -h (hashes), -s (verificar firmas), -v (VirusTotal), -vt (submit a VT).
Sysmon para registro
| Event ID | Evento | Filtro recomendado |
|---|---|---|
| 12 | RegistryEvent (CreateKey) | Claves en Run, Services, CLSID |
| 13 | RegistryEvent (SetValue) | Valores en Run, Winlogon, IFEO |
| 14 | RegistryEvent (RenameKey) | Rename de claves de persistencia |
Regla Sigma: Run key modification
title: Suspicious Run Key Modification
id: a1234567-b2c3-d4e5-f678-9abcdef01234
status: stable
logsource:
category: registry_set
product: windows
detection:
selection:
TargetObject|contains:
- '\CurrentVersion\Run\'
- '\CurrentVersion\RunOnce\'
filter_legit:
Details|contains:
- 'C:\Program Files'
- 'C:\Program Files (x86)'
- 'C:\Windows\System32'
condition: selection and not filter_legit
level: high
tags:
- attack.persistence
- attack.t1547.001
Mapeo MITRE ATT&CK
| Técnica | ID | Persistencia via registro |
|---|---|---|
| Boot or Logon Autostart Execution | T1547 | Técnica padre |
| Registry Run Keys / Startup Folder | T1547.001 | Run, RunOnce, Startup folder |
| Winlogon Helper DLL | T1547.004 | Winlogon Shell, Userinit, Notify |
| Create or Modify System Process: Windows Service | T1543.003 | Services key |
| Event Triggered Execution: COM Object Hijacking | T1546.015 | CLSID en HKCU |
| Event Triggered Execution: IFEO Injection | T1546.012 | Image File Execution Options |
| Event Triggered Execution: AppInit DLLs | T1546.010 | AppInit_DLLs |
Checklist de auditoría de persistencia
Para una auditoría rápida de un sistema Windows sospechoso:
- Ejecutar Autoruns y exportar a CSV. Comparar con un baseline limpio
- Verificar firmas digitales de todas las entradas. Entradas sin firma = investigar
- Revisar Run keys en HKCU y HKLM. Rutas fuera de Program Files = sospechoso
- Listar servicios recientes:
Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045} | Select TimeCreated, Message - Verificar CLSID en HKCU:
reg query HKCU\SOFTWARE\Classes\CLSID /s. Cualquier entrada es sospechosa - Verificar IFEO:
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" /s /v Debugger - Verificar Winlogon:
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shelly/v Userinit
Fuentes y referencias
- Microsoft. "Run and RunOnce Registry Keys." Microsoft Docs.
- Microsoft. "Image File Execution Options." Microsoft Docs.
- Russinovich, M. "Autoruns for Windows." Sysinternals, Microsoft.
- Russinovich, M. et al. "Windows Internals Part 1." Microsoft Press, 2017.
- MITRE ATT&CK. "Boot or Logon Autostart Execution (T1547)." https://attack.mitre.org/techniques/T1547/
- MITRE ATT&CK. "Event Triggered Execution (T1546)." https://attack.mitre.org/techniques/T1546/
- Sikorski, M. & Honig, A. "Practical Malware Analysis." No Starch Press, 2012.
- Red Canary. "Persistence Techniques: Registry." 2024 Threat Detection Report.
- Elastic Security. "Persistence via Registry Detection Rules." Elastic SIEM.
- hasherezade. "PE-sieve and Hollows Hunter." https://github.com/hasherezade/
Preguntas frecuentes
Libros recomendados
Artículos relacionados
Windows API calls mas usadas por malware
DLL Injection en Windows: Técnicas, Variantes y Detección
Scheduled Tasks y COM Hijacking: Persistencia Avanzada
Registro de Windows en memoria: hivelist y printkey
Persistencia WMI y Event Subscription: Hunting en el SOC
De Alerta EDR a Informe Ejecutivo: Caso End-to-End Completo
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.