Hosting Equipo Avantys 6 min

VPS Hackeado: Guía de Recuperación

Tu VPS ha sido comprometido. Guía paso a paso para detectar intrusiones, limpiar malware, recuperar el control y prevenir futuros ataques.

// Compartir

VPS Hackeado: Guía de Recuperación
VPS hackeado - guía de recuperación

Tu proveedor te ha notificado actividad sospechosa. O peor: tu web muestra contenido que no pusiste. Tu VPS ha sido comprometido.

No entres en pánico, pero actúa rápido. Esta guía te lleva paso a paso desde la detección hasta la recuperación completa.

Señales de que tu VPS está comprometido

Señales de VPS hackeado

Señales evidentes

SeñalQué indica
Web con contenido extrañoDefacement o inyección
Emails de spam saliendoBot de spam instalado
Proveedor te avisaActividad maliciosa detectada
IP en blacklistsUsado para ataques
Archivos .php extrañosWebshell instalado

Señales sutiles

SeñalQué indica
CPU alta sin razónMinero de crypto
Tráfico de red inusualBotnet o exfiltración
Usuarios nuevosBackdoor creado
Procesos desconocidosMalware corriendo
Archivos modificadosSistema comprometido
Cron jobs extrañosPersistencia

Verificación rápida

# Usuarios con shell
cat /etc/passwd | grep -E '/bin/(bash|sh)$'

# Usuarios con UID 0 (root)
awk -F: '$3 == 0 {print $1}' /etc/passwd

# Conexiones activas sospechosas
netstat -tlnp
ss -tlnp

# Procesos consumiendo CPU
top -bn1 | head -20

# Cron jobs de todos los usuarios
for user in $(cut -f1 -d: /etc/passwd); do 
    crontab -u $user -l 2>/dev/null
done

# Archivos modificados recientemente
find /var/www -mtime -1 -type f
find /tmp -type f -executable

Paso 1: Contener el daño

Pasos recuperación hackeo

Decisión crítica: ¿Aislar o apagar?

Aislar (recomendado para análisis):

# Bloquear todo tráfico excepto tu IP
iptables -F
iptables -A INPUT -s TU_IP -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -d TU_IP -j ACCEPT
iptables -A OUTPUT -j DROP

Apagar (si es urgente):

  • Desde panel del proveedor
  • Evita que siga causando daño
  • Pierdes evidencia volátil (RAM, conexiones)

Cambiar credenciales inmediatamente

# Cambiar contraseña de root
passwd root

# Cambiar contraseñas de todos los usuarios
passwd usuario

# Regenerar claves SSH del servidor
rm /etc/ssh/ssh_host_*
ssh-keygen -A

# Revocar claves SSH de usuarios
# Revisar y limpiar:
cat /root/.ssh/authorized_keys
cat /home/*/.ssh/authorized_keys

Notificar al proveedor

Si tu VPS está enviando spam o ataques, notifica al proveedor antes de que te suspendan.

Paso 2: Análisis forense básico

Revisar logs de autenticación

# Logins exitosos
grep "Accepted" /var/log/auth.log | tail -50

# Intentos fallidos
grep "Failed" /var/log/auth.log | tail -50

# Escaladas de privilegios (sudo)
grep "sudo" /var/log/auth.log | tail -50

# Logins por fecha sospechosa
grep "Accepted" /var/log/auth.log | grep "Feb  1"

Buscar usuarios sospechosos

# Usuarios creados recientemente
ls -la /home/

# Usuarios con UID 0 (además de root)
awk -F: '$3 == 0 {print}' /etc/passwd

# Usuarios en grupo sudo
grep sudo /etc/group

# Usuarios con shell válido
grep -E '/bin/(bash|sh|zsh)' /etc/passwd

Buscar procesos maliciosos

# Procesos corriendo
ps auxf

# Procesos con conexiones de red
netstat -tlnp

# Procesos ocultos (comparar)
ps aux | wc -l
ls /proc | grep -E '^[0-9]+$' | wc -l
# Si difieren mucho, hay procesos ocultos

# Buscar mineros de crypto
ps aux | grep -E "(xmrig|minerd|cryptonight|stratum)"

Buscar archivos maliciosos

# Archivos en /tmp ejecutables
find /tmp -type f -executable -ls

# Archivos PHP sospechosos en web
find /var/www -name "*.php" -mtime -7

# Archivos con nombres sospechosos
find / -name "*.php.suspected" 2>/dev/null
find / -name "*.ico" -size +10k 2>/dev/null  # ICO grandes = shells

# Webshells comunes
grep -r "eval(" /var/www --include="*.php" | head -20
grep -r "base64_decode" /var/www --include="*.php" | head -20
grep -r "shell_exec" /var/www --include="*.php" | head -20
grep -r "passthru" /var/www --include="*.php" | head -20

Revisar cron jobs y servicios

# Cron del sistema
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.daily/

# Cron de usuarios
for user in $(cut -f1 -d: /etc/passwd); do 
    echo "=== $user ===" 
    crontab -u $user -l 2>/dev/null
done

# Servicios systemd sospechosos
systemctl list-units --type=service --state=running
ls -la /etc/systemd/system/

# Buscar servicios nuevos
find /etc/systemd -mtime -7

Verificar archivos de sistema modificados

# Verificar integridad con dpkg (Debian/Ubuntu)
dpkg --verify | grep -v missing

# Archivos SUID/SGID (pueden ser backdoors)
find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null

# Comparar con lista conocida
dpkg -S $(find / -perm -4000 -type f 2>/dev/null)

Paso 3: Eliminar el malware

Matar procesos maliciosos

# Identificar PID del proceso sospechoso
ps aux | grep sospechoso

# Matar proceso
kill -9 PID

# Si reaparece, buscar el padre
pstree -p PID

Eliminar archivos maliciosos

# Eliminar webshells encontrados
rm /var/www/site/shell.php

# Eliminar archivos en /tmp
rm -rf /tmp/sospechoso

# Eliminar cron jobs maliciosos
crontab -r -u usuario_sospechoso

Limpiar usuarios backdoor

# Eliminar usuario sospechoso
userdel -r usuario_malicioso

# Limpiar authorized_keys
echo "" > /root/.ssh/authorized_keys
# Añadir solo TU clave
echo "tu_clave_publica" >> /root/.ssh/authorized_keys

Eliminar servicios maliciosos

# Parar y deshabilitar
systemctl stop servicio_malicioso
systemctl disable servicio_malicioso

# Eliminar archivo de servicio
rm /etc/systemd/system/servicio_malicioso.service
systemctl daemon-reload

Paso 4: Determinar el vector de entrada

¿Cómo entraron?

Vector comúnCómo verificar
SSH con contraseña débilgrep "Accepted password" /var/log/auth.log
Vulnerabilidad en CMSRevisar versiones de WordPress, plugins
Aplicación vulnerableRevisar logs de aplicación
Credenciales filtradasRevisar si contraseñas estaban en repos públicos
Vulnerabilidad de sistemaRevisar si había actualizaciones pendientes

Verificar WordPress

# Versión de WordPress
grep "wp_version" /var/www/site/wp-includes/version.php

# Plugins instalados
ls /var/www/site/wp-content/plugins/

# Temas
ls /var/www/site/wp-content/themes/

# Buscar archivos modificados recientemente
find /var/www/site -mtime -3 -type f -name "*.php"

Paso 5: Decidir - Limpiar o reinstalar

Cuándo limpiar

  • Sabes exactamente qué fue comprometido
  • El malware es simple (webshell, script)
  • Tienes tiempo limitado
  • Compromiso fue reciente y limitado

Cuándo reinstalar (recomendado)

  • No estás 100% seguro de qué tocaron
  • Encontraste rootkit o modificaciones de sistema
  • El atacante tuvo acceso root
  • No puedes determinar el alcance

Proceso de reinstalación segura

  1. Backup de datos (solo datos, no código)
# Solo base de datos
mysqldump -u root -p --all-databases > /backup/db.sql

# Solo uploads de usuarios
tar -czf /backup/uploads.tar.gz /var/www/site/wp-content/uploads
  1. Reinstalar el VPS desde panel del proveedor

  2. Configurar con seguridad desde cero

  1. Restaurar solo datos limpios
# Restaurar base de datos
mysql -u root -p < /backup/db.sql

# Restaurar uploads (escanear antes)
clamscan -r /backup/uploads.tar.gz
tar -xzf /backup/uploads.tar.gz -C /var/www/site/wp-content/
  1. Instalar CMS/aplicación desde cero (no restaurar código)

Paso 6: Fortalecer la seguridad

Checklist post-incidente

# 1. Actualizar todo
sudo apt update && sudo apt upgrade -y

# 2. Configurar firewall
sudo ufw default deny incoming
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable

# 3. Instalar fail2ban
sudo apt install fail2ban -y
sudo systemctl enable fail2ban

# 4. Deshabilitar login root por SSH
# En /etc/ssh/sshd_config:
PermitRootLogin no
PasswordAuthentication no

# 5. Solo claves SSH
# Generar nueva clave en tu máquina
ssh-keygen -t ed25519

# 6. Instalar y configurar antimalware
sudo apt install clamav -y
sudo freshclam

Monitorización continua

# Instalar herramientas de detección
sudo apt install rkhunter chkrootkit -y

# Escanear rootkits
sudo rkhunter --check
sudo chkrootkit

# Configurar escaneos automáticos
# En cron:
0 3 * * * /usr/bin/rkhunter --check --skip-keypress
0 4 * * * /usr/bin/clamscan -r /var/www --quiet --infected

Alertas de cambios

# Instalar AIDE (detección de intrusiones)
sudo apt install aide -y
sudo aideinit
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# Verificar cambios (ejecutar periódicamente)
sudo aide --check

Qué NO hacer

No hagas estoPor qué
Ignorar el problemaEmpeorará, te suspenderán
Solo borrar archivos visiblesPuede haber backdoors ocultos
Restaurar backup sin verificarEl backup puede estar infectado
Usar mismas contraseñasYa están comprometidas
No investigar el vectorVolverán a entrar
Ocultar al proveedorTe suspenderán igual

Prevención futura

Medidas esenciales

  1. Actualizaciones automáticas
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure unattended-upgrades
  1. Backups verificados
  • Diarios
  • Almacenados fuera del VPS
  • Probados regularmente
  1. Monitorización
  • Alertas de CPU/RAM inusuales
  • Alertas de login
  • Escaneos de malware
  1. Principio de mínimo privilegio
  • No usar root para todo
  • Usuarios separados por aplicación
  • Permisos estrictos

Preguntas frecuentes

¿Debo pagar si me piden rescate (ransomware)?

No. No hay garantía de que recuperes nada. Mejor reinstalar desde backups. Si no tienes backups, aprende la lección y empieza de cero.

¿Cómo sé si el hacker sigue dentro?

Si limpiaste pero ves actividad sospechosa de nuevo, probablemente dejó backdoors. La opción más segura es reinstalar el VPS completamente.

¿Debo denunciar el hackeo?

Depende de tu jurisdicción y del daño. Si hubo robo de datos de clientes, puede ser obligatorio. Consulta con un abogado si es un caso serio.

¿Mis backups están infectados también?

Posiblemente los más recientes sí. Usa backups de antes del compromiso si es posible. Escanea todo antes de restaurar.

¿Cuánto tiempo tarda recuperarse de un hackeo?

Limpieza básica: 2-4 horas. Reinstalación completa con migración: 4-8 horas. Investigación forense completa: días.

Nuestra recomendación

Ante un hackeo:

  1. No entres en pánico
  2. Aísla el servidor
  3. Determina el alcance
  4. En caso de duda, reinstala

Para prevenir:

  • Actualizaciones al día
  • Contraseñas fuertes + 2FA
  • Backups fuera del servidor
  • Monitorización activa

¿Necesitas ayuda con un servidor comprometido? La administración gestionada de Avantys incluye respuesta a incidentes de seguridad y hardening profesional.


Conclusión

Un VPS hackeado es serio, pero recuperable. La clave es actuar rápido, investigar el vector de entrada, y asegurar que no vuelva a pasar.

Si tienes dudas sobre el alcance del compromiso, reinstalar es siempre la opción más segura.

¿Necesitas un VPS seguro desde el inicio? Explora los VPS de Avantys con configuración de seguridad incluida.


¿Quieres que lo hagamos por ti?

En Avantys gestionamos tu web, hosting y crecimiento digital de punta a punta. Tú a lo importante.

Hablar con Avantys
// Boletín

Suscríbete al boletín

Guías nuevas, sin spam. Cancela cuando quieras.