Puertas traseras ocultas en WordPress: cómo encontrarlas antes de que te encuentren

Las puertas traseras de WordPress están diseñadas para permanecer ocultas, a menudo durante meses. Aquí te explicamos cómo las colocan los atacantes y cómo encontrarlas en tu propio sitio.

Streams of code representing hidden WordPress backdoors

Una puerta trasera es un fragmento de código que un atacante deja para poder volver más tarde, incluso después de que se haya cerrado el punto de entrada original. El primer ataque es la puerta. La puerta trasera es la segunda llave, escondida en algún lugar de tu sitio, esperando a ser usada. Las puertas traseras de WordPress son uno de los artefactos más comunes que se encuentran durante las auditorías forenses, y la mayoría de los propietarios nunca las ha considerado como una categoría.

Este artículo explica cómo se colocan las puertas traseras, dónde suelen esconderse y cómo encontrarlas en tu propio sitio.

Por qué los atacantes colocan puertas traseras

Entrar por primera vez en un sitio WordPress requiere esfuerzo: encontrar un plugin vulnerable, explotarlo y navegar por el sitio. Una vez dentro, los atacantes quieren asegurarse de poder volver sin repetir todo ese trabajo. Una puerta trasera es un seguro frente a que se parchee la vulnerabilidad original.

Por eso, limitarse a parchear el punto de entrada tras un ataque no es suficiente. Es probable que el atacante siga en el servidor. Hasta que encuentres y elimines la puerta trasera, cada limpieza será temporal.

Las formas clásicas de puerta trasera en WordPress

Las puertas traseras más habituales responden a un número reducido de patrones reconocibles.

  • PHP ofuscado. Un pequeño fragmento de código, a menudo de solo unas líneas, que usa eval combinado con base64_decode, gzinflate o str_rot13 para ejecutar una carga enviada como parámetro. A primera vista el código parece un sinsentido, y esa es justamente la idea. Hay variantes con patrones como eval, assert con entrada controlada por el usuario, preg_replace con el ya eliminado modificador e, y llamadas directas a shell_exec o system con datos de $_GET, $_POST, $_REQUEST, $_COOKIE o $_SERVER.
  • Web shells. Un archivo PHP dedicado que ofrece al atacante un gestor de archivos o un ejecutor de comandos a través de la web. Nombres como c99shell, r57shell, WSO y FilesMan son tristemente célebres. Una web shell es un pequeño panel de administración instalado en tu servidor que tú no pusiste ahí.
  • Cuentas de administrador fraudulentas. Un nuevo usuario con rol de administrador creado durante el ataque original, a menudo con un nombre de usuario que parece algo raro o un correo en un dominio que no reconoces. El atacante puede volver cuando quiera iniciando sesión con esa cuenta.
  • Reinfección mediante cron. Una tarea programada de WordPress que vuelve a crear los archivos maliciosos si se eliminan. Aunque limpies los archivos dañinos, el cron los repone en silencio la próxima vez que se ejecuta.
  • Archivos del núcleo, el tema o los plugins modificados. El atacante edita un archivo legítimo para incluir un pequeño bloque de código malicioso. El archivo sigue funcionando como se espera, pero también ejecuta la carga del atacante cuando se activa.

Dónde se esconden

Las puertas traseras prefieren los rincones más olvidados de una instalación de WordPress. Conviene conocer algunos escondites habituales.

  • El árbol wp-content/uploads. La carpeta de subidas debería contener archivos multimedia. Los archivos PHP que aparezcan ahí son casi siempre sospechosos. Una auditoría reciente en el sitio de una agencia de Sídney revisó expresamente esta carpeta y solo encontró un puñado de stubs triviales de refuerzo de WordPress. Cualquier cosa más allá de eso debería investigarse.
  • Archivos con nombres que imitan al núcleo. wp-loadx.php, wp-shell.php, wp-cron-extra.php, wp-log.php. Un nombre que casi coincide con un archivo real de WordPress es una decisión deliberada de camuflaje.
  • Imágenes con PHP incrustado. Un archivo con extensión .jpg o .png que en realidad contiene código PHP al principio. Si algo en el servidor incluye ese archivo como PHP, la carga se ejecuta. Es poco frecuente, pero real.
  • Dentro de archivos legítimos de plugins o temas. El atacante añade un pequeño bloque al principio o al final de un archivo existente. El archivo sigue funcionando, pero también ejecuta la puerta trasera.
  • wp-config.php y sus variantes. A veces mediante una directiva auto_prepend_file que incluye una carga maliciosa antes de cada petición. Otras veces inyectando directamente una constante o una instrucción include.

Cómo buscar puertas traseras

No hace falta ser un profesional de la seguridad para realizar comprobaciones útiles. Un plugin de seguridad de confianza como Wordfence hará un análisis profundo e informará de cualquier coincidencia con su base de datos de firmas. La versión gratuita lo hace bien. La versión de pago actualiza sus firmas con mayor rapidez y añade monitorización de vulnerabilidades.

Más allá de los plugins, puedes hacer un barrido manual. Revisa todos los archivos .php fuera de wp-admin, wp-includes y las carpetas de plugins y temas. Fíjate en las fechas de modificación recientes para detectar archivos cambiados en las últimas semanas que no puedas justificar. Busca en el código los patrones sospechosos mencionados antes. Todo lo que coincida merece una segunda mirada.

Compara los archivos del núcleo de WordPress con las versiones oficiales. Varias herramientas lo hacen, incluidas Wordfence y la herramienta oficial wp cli. Cualquier diferencia en los archivos del núcleo es una señal de alarma.

Cómo limpiar tras encontrar una puerta trasera

Encontrar una puerta trasera rara vez significa que sea la única. Los atacantes suelen colocar varias, en distintas ubicaciones y formas, para que encontrar una no los deje fuera. Después de identificar una puerta trasera, amplía la búsqueda. Mira en todos los lugares similares, busca patrones parecidos y revisa cada archivo modificado por las mismas fechas.

Rota todas las credenciales: salts y claves, contraseñas de WordPress, contraseña de la base de datos, claves de API, claves SFTP. Cierra todas las sesiones. Vuelve a auditar los usuarios. Vuelve a auditar los plugins. Restaura una copia de seguridad limpia anterior al ataque si puedes identificar la fecha.

Cómo prevenir las puertas traseras desde el principio

Las puertas traseras son la segunda capa de un ataque. La prevención consiste sobre todo en evitar la primera capa. Mantén actualizados el núcleo, los temas y los plugins. Elimina los gestores de archivos y los plugins de acceso por shell que no necesites. Limita el acceso de administrador. Usa 2FA. Ejecuta un plugin de seguridad que vigile la aparición de archivos nuevos en lugares inesperados.

Si haces estas cosas de forma constante, la probabilidad de que se coloque una puerta trasera en tu sitio se reduce drásticamente. Una vez que un sitio está bien defendido, los atacantes pasan a objetivos más fáciles.

¿Necesitas ayuda?

Si sospechas que puede haber una puerta trasera en tu sitio WordPress, o si acabas de completar una limpieza y quieres una segunda opinión para verificarla, en Defyn podemos realizar un análisis forense y decirte exactamente qué encontramos. Ponte en contacto con nosotros y te daremos una respuesta clara en cualquier caso.

Avatar de Claire Smith
Sponsored Loved this story? Defyn turns articles like this into the websites your competitors wish they had. Talk to us → defyn.com.au