Migramos. Nuevas Publicaciones en Nuestro Nuevo Dominio.

Fortificar WordPress frente ataques de fuerza bruta

En mi trabajo estoy encargado de gestionar varios sistemas Wordpress con las distintas páginas web de la empresa en que trabajo, y allí vivo bajo la alerta de miles de ataques de fuerza bruta automatizados que últimamente está sufriendo la página de login de este sistema. Es por ello que decidí implantar, ya hace tiempo, el un plugin que limita los intentos de login y te envía un e-mail cada cierto número de bloqueos que se definen en la configuración.



En los ataques basados en fuerza bruta, los avisos que llegan son habitualmente intentos a usuarios por defecto de este tipo de sistemas, como adminadministrator o root... hasta que un día me encontré la desagradable sorpresa de que uno de los ataques ya había acertado con mi usuario válido. En ese momento decidí, por si alguno de ellos llegaba a tener suerte con mi contraseña, instalar el plugin de Latch para Wordpress y evitar problemas. Así, aunque alguien lograra dar con ella no podría entrar nunca en el sistema sin mi aprobación.


Figura 1: SDKs y Plugins de Latch. El plugin de WordPress es el primero.

Me puse a investigar cómo habían averiguado mi nombre de usuario y me sorprendió que no me hubiera fijado antes en esto. En aquel entonces no lo sabía, pero tras leer un poco ahora ya sé que es una debilidad conocida desde hace mucho tiempo, y que incluso muchos scanners automatizan la búsqueda de los usuarios de WordPress por defecto, como WPScan. Tras horas de búsquedas por la red no encontré información específica de cómo poder resolverlo, y parece que es algo que se asume por casi todo el mundo como una "feature".


Figura 2: Opciones de enumeración de usuarios en WordPress con WPScan 


El problema ya fue publicado por aquí hace tiempo en el artículo que se tituló "Regístrate en WordPress y evalúa su seguridad". Se trata de llamar por URL a la variable “author” y buscar el “id” manualmente comenzando por 1 y así sucesivamente para ver a qué nombre de usuario redirige y qué nombre de usuario aparece en el campo title de la página destino.

Figura 3: ?author=1 redirige a /author/admin


Cualquier usuario con privilegios de administrador normalmente estará entre los diez primeros, por lo que serán esos los que habrá que usar para hacer los ataques de fuerza bruta. El que puedan averiguar los nombres de los usuarios puede ser utilizado también para hacer ataques basados en contraseñas fijas y variaciones de usuarios, lo que me preocupaba bastante.



En primer lugar pensé que con cambiar el “alias” en la configuración de usuarios de WordPress - ya que el sistema asigna por defecto para el alias el mismo nombre del usuario del login dejándonos vendidos - bastaría para engañar a los malos que usen este tipo de scanners.

Figura 4: Alias cambiado a admin para ocultar el nombre de usuario administrador


Nada más lejos de la realidad. Después de poner un alias engañoso - lejos de este común "admin" - para el usuario válido administrator, comprobé que sí que se muestra en el title de la web el nuevo alias falso, pero no en la dirección URL, que sigue saliendo el usuario con el que se efectúa el proceso delogin.

Figura 5: Cambiar el alias cambia el title pero no la URL


Después de mucho buscar y probar cosas como bloquear desde el fichero .htaccess, modificar código fuente del propio motor de WordPress, etcétera... Ninguna solución era efectiva y funcional, hasta que me di cuenta de que modificando un campo de la tabla “users” en la base de datos que utiliza el motorWordPress se solucionaba el problema. Antes de ponerme a intentar solucionar este problema ni me había fijado en que estaba ahí ypor supuesto no podría conocer para que se podía utilizar. Dicho campo es el “user_nicename”, es decir, el "nombre bonito" para un usuario.

Figura 6: Establecimiento de user_nicename a un userfalso


Con solo este cambio en la base de datos es posible solucionar la forma con la que nuestros WordPressmuestran por defecto los nombres de usuarios. Si ahora hacemos la misma prueba, obtendremos que en el title aparece el alias, mientras que en la URL se puede ver en nicename del usuario.

Figura 7: Se ha conseguido ocultar el nombre de usuario en el title y en la URL


Tal vez existan otras soluciones, pero no me ha sido fácil encontrarla. Esta solución funciona perfectamente y me ha permitido que los últimos ataques de fuerza bruta no me afecten. Espero que  os sirva a todos los que no conocíais esta solución, y os evite unas horas trasteando como tuve que estar yo.



Si te sirve de algo mi experiencia, dedica tiempo a fortificar tu Linux, revisa los detalles de seguridad tu Apache, actualiza tu WordPress a la última versión y ponle pocos plugins que luego aparecen losbugs de XSS CSRF a la mínima que te descuidas - protege también el listado de los plugins que tienes instalados -, pon un plugin que te alerte de los ataques de fuerza bruta  , activa Latch y pon un bonito nombre a tus usuarios de WordPress.



Saludos!

Autor: Oscar Mogarra Hita