La seguridad de credenciales es uno de los pilares fundamentales en la protección de sistemas Windows. Sin embargo, diversas herramientas y funciones nativas del sistema pueden ser utilizadas para obtener información sensible, ya sea por administradores en auditorías autorizadas o por actores maliciosos en actividades de reconocimiento, escalado de privilegios y movimiento lateral.
A continuación se describen varias técnicas relevantes para la extracción de credenciales o información relacionada, junto con su funcionamiento, sus implicaciones y las medidas defensivas recomendadas.
1. Enumeración de servicios que usan cuentas específicas
Ejemplo:
Get-WmiObject win32_service |
Where-Object { $_.StartName -like '*@*' } |
Select-Object Name, StartName, DisplayName
Este comando lista los servicios de Windows que se ejecutan bajo cuentas de dominio o cuentas personalizadas (por ejemplo, usuario@dominio). En algunos casos, las credenciales quedan almacenadas junto a la configuración del servicio.
Riesgos
- Puede revelar servicios configurados con cuentas privilegiadas.
- Si la contraseña del servicio está débil o es reutilizada, facilita el movimiento lateral.
- Permite identificar objetivos con permisos elevados (p. ej. cuentas de servicio de SQL, IIS, backups).
Mitigación
- Revisar periódicamente las cuentas asignadas a servicios.
- Usar Managed Service Accounts (gMSA) para evitar credenciales almacenadas.
- Aplicar políticas de rotación de contraseñas en cuentas de servicio.
2. Extracción de credenciales guardadas de RDP
Ejemplo:
cmdkey /list | Select-String 'Target: TERMSRV' |
ForEach-Object { cmdkey /delete:($_ -split ' ')[-1] }
cmdkey administra credenciales almacenadas en Windows. Este comando permite listar credenciales guardadas para conexiones RDP y eliminarlas.
Riesgos
- Las credenciales guardadas pueden permitir acceso directo a otros equipos.
- Usuarios suelen almacenar credenciales por comodidad.
- Un atacante podría usarlas para escalar acceso en la red.
Mitigación
- Prohibir almacenamiento de credenciales mediante directivas de grupo.
- Exigir autenticación multifactor (MFA) para conexiones remotas.
- Realizar auditorías periódicas con
cmdkey /list.
3. Acceso a cookies del navegador
Ejemplo:
$env:USERPROFILE + '\AppData\Local\Google\Chrome\User Data\Default\Cookies' | Get-Item
Chrome almacena las cookies en una base de datos SQLite. Algunas pueden contener tokens de sesión que, si se obtienen, pueden permitir secuestro de sesión.
Riesgos
- Posible acceso a cuentas web sin conocer la contraseña.
- Las cookies persistentes de aplicaciones corporativas representan un riesgo crítico.
- Si el atacante tiene acceso al sistema, puede copiar el archivo para análisis offline.
Mitigación
- Usar políticas de seguridad en Chrome para cifrar cookies obligatoriamente.
- Activar autenticación fuerte en aplicaciones corporativas.
- Evitar accesos locales no autorizados mediante hardening del endpoint.
4. Obtención de cuentas de Application Pools en IIS
Ejemplo:
Import-Module WebAdministration
Get-IISAppPool | Select-Object Name, ProcessModel
Los Application Pools pueden utilizar cuentas personalizadas. Si están mal configuradas, pueden contener credenciales administradas manualmente.
Riesgos
- Cuentas privilegiadas ejecutando aplicaciones web.
- Contraseñas almacenadas en la configuración.
- Elevación de privilegios a partir de servicios web vulnerables.
Mitigación
- Sustituir cuentas manuales por ApplicationPoolIdentity siempre que sea posible.
- Revisar configuraciones sensibles mediante auditorías de IIS.
- Usar gMSA para aplicaciones que requieren cuentas específicas.
5. Búsqueda de contraseñas en archivos de configuración
Ejemplo:
Get-ChildItem -Path C:\ -Include *.config -Recurse |
Select-String -Pattern 'password='
Archivos .config se utilizan frecuentemente en aplicaciones .NET y, en ocasiones, contienen credenciales en texto plano.
Riesgos
- Credenciales incrustadas (hardcoded) pueden comprometer bases de datos, servicios o APIs.
- Riesgo especialmente alto en aplicaciones legacy.
- Facilita movimiento lateral si las credenciales son privilegiadas.
Mitigación
- Seguridad de desarrollo: prohibir credenciales en texto plano.
- Implementar Azure Key Vault, AWS Secrets Manager, o equivalentes on-premise.
- Revisar y cifrar secciones sensibles mediante
aspnet_regiis.
6. Extracción de credenciales desde tareas programadas
Ejemplo:
Get-ScheduledTask |
Where-Object { $_.Principal.UserId -notlike 'S-1-5-18' } |
Select-Object TaskName, TaskPath, Principal
Las tareas programadas pueden ejecutarse bajo cuentas personalizadas, cuyas credenciales quedan almacenadas en el sistema.
Riesgos
- El atacante identifica tareas que usan cuentas privilegiadas.
- Si las contraseñas se reutilizan, permite acceso a otros sistemas.
- Cuentas de servicio débiles permiten persistencia y escalado.
Mitigación
- Revisar tareas programadas no estándar.
- Cambiar tareas a Service Accounts administradas.
- Proteger el acceso al sistema donde la tarea está configurada.
Conclusión
Estas técnicas muestran cómo distintas funcionalidades legítimas del sistema pueden ser reutilizadas para obtener credenciales o información sensible. Para proteger adecuadamente un entorno Windows, es indispensable establecer prácticas sólidas de hardening y monitorización.
