Hace algún tiempo publiqué un video mostrando cómo se podría realizar un ataque de fuerza bruta a un sitio bajo WordPress con una herramienta gratuita llamada WPScan. Un ataque de este tipo básicamente consiste en una lista de palabras que se van probando una tras otra como posibles passwords hasta que alguno permita el acceso.
Es por ello que una protección básica contra este tipo de ataques es utilizar contraseñas poco comunes que incluyan letras mayúsculas, minúsculas, números y signos. De esta forma la probabilidad de que la contraseña se encuentre en un diccionario (lista de palabras) serían casi nula y un atacante tendría que dedicarle tantas horas al asunto que no tendría sentido.
Pero para poder loguearnos también es necesario conocer el usuario y conseguir este dato puede ser sencillo ya que no se encuentra oculto por defecto. Incluso WPScan puede con un escaneo rápido listar todos los usuarios configurados en un blog.
Pero otra forma efectiva de obtenerlo manualmente es ingresar las variables id y author en la URL de esta forma www.spamloco.net/?author=1
Como resultado se mostrarán los artículos escritos por el autor con id=1 y en la URL o el título el nombre de usuario que utiliza para el login:
No necesariamente el usuario 1 tiene que ser el administrador del blog y de hecho puede que no exista el valor 1, así que se puede ir aumentando el número para ir descubriendo nuevos usuarios creados.
¿Cómo se podría ocultar el usuario en la URL author=id?
La solución es bastante sencilla y Oscar Mogarra la comenta en este artículo del blog de Chema Alonso.
Se trata simplemente de una variable en la base de datos llamada user_nicename y que permite modificar el enlace permanente de la página de autor. Es decir que al modificarlo en la URL ya no se mostraría el usuario que sirve para el login.
Me pareció útil comentarlo como una protección extra para los sitios, además puede ser útil en caso estar utilizando el mismo usuario en otros servicios online.
Para modificar este valor es necesario acceder a la base de datos, así que antes les recomiendo hacer un respaldo. Si utilizan cPanel es muy sencillo de hacerlo con la opción Backup Wizard y luego descargando la base de datos MySQL del blog.
Para modificar la base datos, podemos acceder a phpMyAdmin desde el mismo cPanel y buscar la tabla wp_users:
Luego hacemos clic en Editar sobre el usuario que se quiera modificar:
Y finalmente cambiamos el valor de la columna user_nicename por otro nombre bonito o un «usuario falso» para mostrar en la URL de autor:
Por supuesto existen otras formas más elegantes de protegerse contra los ataques de fuerza bruta en WordPress, esta sólo es una capa más de seguridad. Y de nada serviría ocultar el usuario en la URL si al final utilizamos un usuario obvio como admin, root o algo por el estilo, lo ideal sería cambiar de usuario por uno poco común que nadie pueda adivinar.
Con la ayuda de plugins también podemos limitar los intentos de login que se puedan realizar desde una misma IP, uno que funciona muy bien es Limit Login Attempts; otro es Better WP Security el cual además permite cambiar fácilmente las URLs de login para que los atacantes no las puedan encontrar fácilmente.
También es posible agregar una doble verificación con plugins como Google Authenticator y Latch, uno de los mejores que permite activar o desactivar desde afuera el login del sitio cuando lo necesitemos. Latch además funciona con otras plataformas muy utilizadas hoy en día como Joomla, Drupal y PrestaShop.
Por último, para situaciones extremas en las que los intentos de login no se detienen les dejo este código que pueden incluir en el archivo .htaccess para bloquear todos los intentos de login:
# ATAQUE
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_REFERER} !^http://(.*)?spamloco\.net[NC]
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteRule ^(.*)$ – [F]
</IfModule>
# FINATAQUE
Nota: cambiar spamloco.net por tu sitio.
Este código también nos bloquearía a nosotros y para loguearnos tendríamos que acceder por FTP para editar el archivo, por lo cual no es muy práctico pero puede ser útil para emergencias.
Les dejo también un excelente artículo de Security by Default donde se explica como bloquear el acceso al login por IP para que sólo desde la nuestra se pueda acceder aunque sea una IP dinámica.
Relacionado: Al iniciar sesión en WordPress cuidado con las WiFi públicas
Una información que se agradece bastante.