La mayoría de la gente limpia un sitio hackeado, ve que el spam ha desaparecido y sigue adelante. Una semana después, vuelve. A menudo la causa es una puerta trasera: un pequeño fragmento de código que el atacante plantó para poder volver a voluntad, hayas eliminado lo que hayas eliminado. Si acabas de limpiar un sitio, o la misma infección sigue volviendo, este puede ser el paso que se te pasó.

Antes de buscar: haz una copia de seguridad completa del sitio tal como está ahora, archivos y base de datos. Es una prueba y te permite deshacer un error. Si todavía no has confirmado que el sitio está hackeado, empieza por la comprobación de cinco minutos.

Qué es una puerta trasera

Una puerta trasera es cualquier forma de volver a entrar en un sitio que no pase por el acceso normal. Puede ser un archivo que acepta comandos del atacante, una cuenta de administrador adicional, una tarea programada que descarga nuevo malware o unas pocas líneas escondidas dentro de un archivo legítimo. Lo que comparten es su propósito: existen para sobrevivir a tu limpieza.

Por eso borrar solo las páginas de spam o el script de redirección rara vez arregla un hackeo. Son los síntomas. La puerta trasera es cómo el atacante mantiene el control.

Dónde se esconden las puertas traseras

Los atacantes eligen lugares que parecen normales o que la gente rara vez abre. Estos son los habituales:

  • La carpeta uploads. Solo debería contener medios. Un archivo PHP en wp-content/uploads casi nunca es legítimo, y nombres como image.jpg.php son un disfraz común.
  • La carpeta de plugins de uso obligatorio. Los archivos de wp-content/mu-plugins se cargan en cada petición y no aparecen en la lista normal de plugins.
  • Plugins y temas falsos o modificados. Una carpeta con un nombre creíble que nunca instalaste, o líneas añadidas al final de functions.php en tu tema activo.
  • Las carpetas del núcleo de WordPress. Un archivo ajeno en wp-includes o wp-admin, a menudo con un nombre que parece el de un archivo del núcleo.
  • wp-config.php. Código colocado antes de la primera línea o después de la última.
  • Archivos de configuración del servidor. Un ajuste auto_prepend_file en .user.ini o php.ini ejecuta un archivo antes de cada página. Las reglas inyectadas en .htaccess son otro favorito.
  • Cuentas de administrador adicionales. Un administrador que no creaste, a veces con un correo que parece parte de tu propio dominio.
  • Tareas programadas. Un evento cron de WordPress que llama a una función desconocida puede recrear una puerta trasera borrada según un calendario.
  • La base de datos. Código guardado en una opción o una entrada, con un pequeño cargador en otro lugar que lo ejecuta. Un escaneo de archivos nunca lo ve.

Cómo buscar puertas traseras

Los comandos de abajo solo leen tu sitio. Ejecútalos por SSH desde la carpeta de WordPress, normalmente public_html. Necesitan WP-CLI, que la mayoría de los hostings gestionados incluyen.

1. Comparar los archivos del núcleo y de los plugins con las copias oficiales

wp core verify-checksums
wp plugin verify-checksums --all

Cualquier archivo listado como modificado, o como uno que no debería existir, merece una mirada. Los plugins premium que no están en wordpress.org no se pueden comprobar así.

2. Buscar archivos PHP donde no debería haber ninguno

find wp-content/uploads -name "*.php"
ls -la wp-content/mu-plugins

Cada resultado en uploads necesita una explicación. Cualquier cosa en mu-plugins que no añadieras tú es una señal de alerta fuerte.

3. Comprobar qué cambió recientemente

find . -type f -name "*.php" -mtime -14

Compara la lista con tu historial de actualizaciones. Vale la pena abrir un archivo modificado un día en que no hiciste nada, sobre todo en una carpeta de plugin que nunca tocaste.

4. Revisar las cuentas y las tareas programadas

wp user list --role=administrator
wp cron event list

Busca un administrador que no reconozcas y eventos cron con nombres que no puedas ubicar.

5. Leer los archivos de configuración

cat .htaccess
cat .user.ini
head -n 20 wp-config.php

El archivo .htaccess solo debe contener las reglas estándar de WordPress y lo que hayas añadido a propósito. .user.ini no debería existir salvo que lo creara tu hosting o tú. En wp-config.php, nada debe aparecer antes de la línea de apertura.

6. Buscar funciones sospechosas y luego leer el archivo

grep -RIl --include="*.php" -E "eval\(|base64_decode\(" wp-content

Estas funciones también aparecen en muchos plugins legítimos, así que una coincidencia es una pista, no una prueba. Abre cada archivo y léelo. Una puerta trasera suele combinar una función así con datos que vienen de la petición del visitante, algo que un plugin legítimo rara vez hace.

Lo que un escáner puede y no puede decirte

Un escáner que compara con patrones de malware conocidos detecta muchas puertas traseras, pero no las hechas a medida, y no puede demostrar que un sitio esté limpio. Trata un resultado limpio como una buena noticia, no como una garantía, y sigue comprobando con el tiempo.

Qué hacer cuando encuentras una

  1. No la borres sin más. Copia el archivo a una carpeta de cuarentena fuera de la raíz web para poder leerlo más tarde. Después quítalo del sitio.
  2. Cierra la vía por la que entró. Una puerta trasera se planta a través de algo, normalmente un plugin desactualizado, una contraseña robada o un acceso de hosting débil. Si lo dejas abierto, el atacante planta otra.
  3. Cambia todas las credenciales. Hosting, SFTP y claves SSH, contraseña de la base de datos, cada administrador de WordPress y las claves de seguridad de wp-config.php. Hazlo en ese orden.
  4. Reemplaza, no repares. Reinstala el núcleo, los plugins y los temas desde copias limpias, como se describe en Cómo eliminar malware de un sitio WordPress.
  5. Vuelve a comprobar. Repite los comandos de arriba a las 24 horas y a la semana. Un archivo o un administrador que reaparece significa que se pasó algo por alto.

Si el sitio guarda datos de clientes, o la infección sigue volviendo a pesar de todo esto, un especialista puede reconstruir el sitio desde fuentes limpias. Es más lento, pero es la forma más segura de eliminar una puerta trasera que no logras encontrar.

Cómo ayuda SiftWP

SiftWP realiza cada semana por SSH comprobaciones como estas, sin ningún plugin en tu sitio. Examina la integridad de los archivos del núcleo, los archivos nuevos en uploads/, los cambios en la base de datos y los patrones de malware, y un agente de IA investiga cada hallazgo. Los archivos sospechosos se ponen en cuarentena, nunca se borran, y todo lo arriesgado espera tu aprobación.

Empieza con créditos gratis, sin tarjeta