Identificar el alcance del compromiso
Cuando un sitio web ha sido hackeado, la prioridad inmediata es determinar el alcance del ataque antes de comenzar la limpieza. Actuar sin evaluar el alcance puede resultar en una limpieza incompleta que permita al atacante mantener acceso al sitio a traves de backdoors ocultos no detectados.
Las primeras acciones deben ser: poner el sitio en modo de mantenimiento para proteger a los visitantes, hacer un respaldo del estado actual (infectado) como referencia, y revisar los logs de acceso del servidor para identificar cuando ocurrio el ataque y que archivos fueron modificados.
Herramientas de diagnostico inicial
- Sucuri SiteCheck (sitecheck.sucuri.net): Escaneo externo que detecta malware, listas negras y anomalias visibles.
- Google Search Console > Seguridad: Muestra si Google ha detectado contenido malicioso y que URLs estan afectadas.
- ImunifyAV en cPanel: Escaneo interno de todos los archivos del servidor.
- Visor de logs de cPanel: Permite revisar el historial de acceso al servidor.
Proceso de limpieza completo
| Paso | Accion | Herramienta |
|---|---|---|
| 1 | Respaldar el sitio infectado (referencia) | cPanel Backup o FTP |
| 2 | Cambiar todas las contrasenas inmediatamente | cPanel, phpMyAdmin, panel CMS |
| 3 | Escanear con ImunifyAV o Wordfence | ImunifyAV, Wordfence |
| 4 | Restaurar archivos del nucleo del CMS | FTP / Administrador de archivos |
| 5 | Eliminar archivos PHP en carpeta uploads | SSH o Administrador de archivos |
| 6 | Revisar y limpiar la base de datos | phpMyAdmin |
| 7 | Eliminar usuarios administradores desconocidos | Panel del CMS |
| 8 | Actualizar CMS, plugins y temas | Panel del CMS |
| 9 | Instalar firewall WAF | Wordfence, Cloudflare WAF |
| 10 | Solicitar revision a Google y Sucuri | Google Search Console |
Revisar la base de datos en busca de inyecciones
El malware frecuentemente inserta codigo malicioso en la base de datos, especialmente en campos de contenido como articulos y opciones del CMS. Desde phpMyAdmin, buscar patrones sospechosos:
SELECT * FROM wp_options WHERE option_value LIKE '%eval(%'; SELECT * FROM wp_posts WHERE post_content LIKE '%
