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
admin,
administrator 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 de
login.
|
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 motor
WordPress 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
WordPress muestran 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 los
bugs de XSS o
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
Este comentario ha sido eliminado por el autor.
ResponderEliminarBuen trabajo Óscar. Tomando nota.
ResponderEliminarFelices Fiestas.
Muy interesante la entrada. Gracias por compartirla Oscar.
ResponderEliminarUn saludo
Buena info Oscar, gracias por compartirla.
ResponderEliminarMuchas gracias por la información.muy muy útil.
ResponderEliminarMuy útil, Óscar. Gracias por la aportación. Un saludo y felices fiestas
ResponderEliminar(En mi comentario anterior no me fijé en el autor, disculpa)
Interesante plugin.
ResponderEliminarPero si no usas comentarios o cosas muy dinamicas(solo publicación), pq no "httrack"iras o "wget"izas el wordpress?
Arkanox
salu2
Enhorabuena por la publicación. El Latch de Eleven Path es una gran utilidad, que nos hará más fácil la vida, sin duda. No obstante, permíteme un pequeño apunte: para el caso concreto de Wordpress existe un plugin que permite utilizar un segundo factor de autenticación de un solo uso (OTP) que funciona de maravilla. En "Expertos en Sistemas" podéis consultar un artículo donde explico de forma muy básica cómo instalarlo: http://www.expertosensistemas.com/otp-one-time-password-contrasena-de-un-solo-uso/
ResponderEliminarGracias por el artículo.
Muchas gracias a todos, y encantado de que os sea útil, saludos y felices fiestas!
ResponderEliminarOscar, hay un plugin de wordpress que se llama login lockdown y te permite limitar el número de inicios de sesión fallidos antes de bloquear la IP por un tiempo determinado.
ResponderEliminarTambién puedes proteger el archivo wp-login.php y la carpeta /wp-admin/ por medio de un archivo .htaccess
Santiago Bernal B, como ves al inicio del artículo precisamente comento lo de ese plugin o similares. La idea aquí era ocultar el nombre de usuario. Un saludo.
ResponderEliminarHola Oscar,
ResponderEliminarAcabo de probarlo y al cambiar el nicename de la base de datos y luego volver a ejecutar el comando preguntando por el author:
.../?author=1
Directamente no me muestra ninguna web, me dice sitio no encontrado. Os ha pasado esto a alguien?
Muchas gracias por todo,
Un saludo,
Oscar Padial
Hola Oscar Padial. Pues nunca me he encontrado con ese problema que me comentas, y he cambiado bastantes wordpress con este sistema, quizá algo en la configuración del .htaccess?? Saludos.
ResponderEliminarGracias Oscar, al final era un tema de refrescar la caché por eso no se hacían efectivos los cambios. Ya funciona perfectamente, gracias de nuevo.
ResponderEliminarEl enlace del artículo plugin de Latch para Wordpress https://www.returngis.net/2013/12/integrar-wordpress-con-latch-de-eleven-paths/ se encuentra roto.
ResponderEliminar