Blog

IaaS, tecnología, internet y cloudi.ng rss

WordPress: cómo bloquear los escaners de enumeración de usuarios

Wordpress

En este tutorial en Clouding.io, tu Servidor VPS, te explicamos cómo bloquear los escaners de enumeración de usuarios en WordPress, para que tu gestor de contenidos funcione como la seda :)

La enumeración de usuarios ocurre cuando un script malicioso escanea un site de WordPress para datos de usuario mediante la solicitud de números de identificación usuarios. Por ejemplo, las peticiones para ?author=1 a través de algún número, digamos, ?author=1000, puede revelar los nombres de usuario para todos los usuarios asociados. Con un simple script de enumeración, un atacante puede escanear tu site y obtener una lista de nombres de usuario en cuestión de segundos.

Cómo funciona

Cuando escanea el site buscando los IDs de los usuarios, la revelación de los datos de los usuarios ocurre de dos formas.

Primero, para sites que tienen permalinks, las peticiones ? author=n (donde n es igual a cualquier número entero) son dirigidas a la versión permalink de la URL para ese usuario, lo que por defecto incluye el nombre de usuario del autor.Así, por ejemplo, en un site que permite permalinks, las siguientes peticiones de URI:

http://example.com/?author=1

http://example.com/?author=2

http://example.com/?author=3

son redirigidas automáticamente por WordPress a sus parejas de “permalink bonito”:

http://example.com/author/admin-user/

http://example.com/author/wordpress-user/

http://example.com/author/some-other-user/

por supuesto, los nombres de usuario actuales variarán dependiendo de tu site, pero ya pillas la idea.

El segundo motivo de la enumeración funciona para revelar datos de usuarios es que las plantillas de temas típicamente muestran el nombre de autor en páginas de archivo de autor, en información post meta, y posiblemente en otras localizaciones, dependiendo del tema.

¿Deberías preocuparte?

Si estás seguro de que todos tus usuarios están usando buenas contraseñas, las cuales se actualizan de forma regular, entonces no hay nada de lo que preocuparse. Este tutorial está dirigido a sites con múltiples autores que puede que no sean “password savvy”. Si un autor está siendo vago con sus contraseñas, entonces la enumeración de usuarios podría poner definitivamente tu site en riesgo. Equipado con un nombre de usuario conocido, un perpetrador podría conseguir acceso rápidamente usando un simple ataque de fuerza bruta.

Así que para estar a salvo, echa un vistazo a las siguientes técnicas para proteger tu site contra la enumeración de usuarios y los ataques de fuerza bruta. Sólo te llevará un minuto implementarlas y servirá para endurecer el empoderamiento de WordPress de tu site con capas adicionales de seguridad.

Paso 1: Deshabilita los scans

La primera cosa que vamos a hacer es bloquear el escaneo de enumeración maliciosa. Esto puede hacerse de una de las siguientes maneras:

  • Añade un fragmento de código al archivo de tus temas: functions.php
  • Añade un fragmento de código al archivo de root de tu site:.htaccess

Echemos un vistazo a cada uno de estos métodos:

  1. Cómo bloquear la enumeración de usuarios via functions.php

  2. Añade el siguiente código a tu archivo con la temática de “funciones”:

    // block WP enum scans
    // http://m0n.co/enum
    if (!is_admin()) {
    // default URL format
    if (preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING'])) die();
    add_filter('redirect_canonical', 'shapeSpace_check_enum', 10, 2);
    }
    function shapeSpace_check_enum($redirect, $request) {
    // permalink URL format
    if (preg_match('/\?author=([0-9]*)(\/*)/i', $request)) die();
    else return $redirect;
    }

    No se requiere de ninguna edición para que esto funcione. Así es como tienes que hacer:

    1. Comprueba si la petición es para cualquier página en el WP Admin Area.
    2. Bloquea la petición si es para un archivo de cadena de consulta de autor.

  3. Cómo bloquear la enumeración de usuarios via .htaccess

Si prefieres bloquear peticiones a nivel de servidor, puedes añadir la siguiente linea de .htaccess al archivo root .htaccess de tu site:

# Block User ID Phishing Requests
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* http://example.com/? [L,R=302]

La única edición que es necesaria es el dominio/URI, http://ejemplo.com/ el cual deberías cambiar para que coincida con el tuyo.

Paso 2: asegúrate de que tus temas no revelan el nombre de usuario

En este punto, hemos añadido un trozo de código (en functions o .htaccess) que bloqueará esos feos escáneres de enumeración de usuarios. La segunda parte de la ecuación es asegurarse de que tus temas no revelan el nombre de usuario de ningún autor o usuario. Desafortunadamente, no hay una solución rápida para este paso, ya que requiere un examen cuidadoso de tu tema. Aquí tienes algunas de las cosas que debes comprobar:

  • Nombre de autor mostrado para cada post
  • Nombre de autor mostrado para vistas de auto-archivo
  • Nombre de autor mostrado en cualquier sitio en el front-end

Si tu tema muestra nombres de autor en cualquier sitio (como lo hacen la mayoría de los temas), hay unas cuantas formas de prevenir el disclosure del nombre de usuario:

  • Cambia todos los Nombres Mostrados de usuario a cualquier otra cosa que no sea el nombre de login
  • Asegúrate de que cualquier etiqueta de plantilla de autor/usuario no muestran el nombre de login
  • Quita cualquier etiqueta de plantilla que muestre nombres de login o de autor
  • Deshabilita los archivos de autor completamente (si no son necesarios)

Por supuesto, ésta es una guía general que no sirve para todos los temas sobre la faz de la Tierra (sólo hay como un billón más o menos). Pero debería ser suficiente para darte una idea y ayudarte a implementar la mejor solución posible para tu site.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>