Recibe actualizaciones por: rss | twitter | email

Seguridad para Wordpress

Escrito por:
Fecha: 2015-05-01 15:30:00 00:00

Seguridad de Wordpress

Durante los últimos días he estado viendo incontables ataques de fuerza bruta a un par de sitios Wordpress que mantengo, y que además no son nada populares, si estos sitios nada populares llaman tanto la anteción de los atacantes, no quiero ni imaginar lo que pasará con sitios populares. Como anécdota, debo contarles que veo ataques de fuerza bruta a este sitio, que es un sitio estático, es decir un montón de archivos de puro html.

Lo primero que debo decir es que la seguridad de Wordpress es al parecer bastante buena, pues no se de muchos sitios que sean crackeados diariamente, y sabemos que hay millones de sitios Wordpress.

Prácticas para proteger tu instalación de Wordpress

Debido a que Wordpress ya no viene con una cuenta de administrador por defecto, quienes intentan "adueñarse" de tu sitio Wordpress tienen que adivinar dos datos, el primero es el nombre de la cuenta de administrador y el segundo su contraseña. Lo primero no es muy dificil en la mayoría de los casos, pues la mayoría de las personas una vez que terminan con la instalación del sitio crean la primer cuenta, que viene a ser la cuenta del administrador, y de inmediato crean su primer post (la verdad Wordpress incluso lo hace por tí), y utiliza la cuenta de administrador, por lo tanto. Una de las mejores prácticas que puedes tener es la de no crear una cuenta llamada admin para la de administrador. Otra cosa que debes hacer es la de no postear con la cuenta de administrador, crea una cuenta para administrar el sitio y otra para publicar contenido, y elimina el contenido creado automáticamente al instalar Wordpress.

Con esas dos sencillas reglas ya hiciste bastante complicando el trabajod de quienes quieren hacerse con el control de tu Wordpress, pero hay muchas otras medidas que puedes tomar, vamos a ver un par de ellas, tal vez las más eficientes.

Usa Captcha en el registro y login

CAPTCHA es un acrónimo que significa Completely Automated Public Turing test to tell Computers and Humans Apart y en español: prueba de Turing completamente automática y pública para diferenciar computadoras de humanos

Ahora en términos claros, es una prueba para diferenciar humanos de máquinas, y generalmente consiste en texto distorcionado, que un OCR (reconocimiento óptico de caracteres) no puede detectar, y que un humano si puede hacerlo. Luego tiene que escribir lo que lee en un formulario, y el máquina de este modo determina que quien esta del otro lado es humano.

Para lograr esto se tiene que instalar un plugin, y tenemos varias opciones, veamos unas tres de ellas:

Better Wordpress reCaptcha

Este plugin habilita Google reCaptcha para los comentarios, el formulario de registro y el formulario de ingreso al sitio. Aunque este artículo es sobre seguridad en Wordpress vale la pena mencionar que este plugin será muy util para bajar el nivel de spam en los comentarios de tu blog, y puedes establecer distintos niveles de usuarios o visitantes que serán enfrentados a la prueba.

WP Login reCAPTCHA

Esta opción es más sencilla, pues solo agrega la opción de reCAPTCHA al formulario de ingreso, y no a los comentarios o de registro. Muy útil si tu blog no tiene comentarios, o utiliza Facebook o Disqus, u otro similar. En este caso solo nos interesaría verificar la autenticidad de quienes ingresan al sitio. Al igual que el anterior, requiere de una cuenta Google reCAPTCHA que es gratis, y que ahora ofrece la opción de No CAPTCHA reCAPTCHA.

No CAPTCHA reCAPTCHA

Precisamente, hablando de No CAPTCHA reCAPTCHA es que viene este nuevo plugin, el cual lo único que hace es agregar el nuevo método de verificación de Google a los formularios de registro, ingreso y comentarios de tu sitio Wordpress.

Comentarios finales

Como se puede ver, usar CAPTCHA incrementa la seguridad del sitio, la verdad es bastante seguro, y se evita el problema de ataque por fuerza bruta, si además tienes en cuenta las primeras recomendaciones de este artículo tendras un sitio casi inviolable, y digo casi, por que no existe la seguridad total.

Autenticación de dos pasos

Otra opción presente en el arsenal de seguridad es la autenticación de dos factores, que se basa en el principio que para ingresar en un lugar debes contar con:

  • Algo que sabes (una contraseña)
  • Algo que tienes (una llave)

Por lo general la llave es una aplicación para tu smartphone que generará un código que cambia cada n segundos, y que por lo tanto debes poseer para que pueda ser usado.

Veamos ahora algunos plugins para Wordpress que habilitan la autenticación en dos pasos. Existen varias opciones de autenticadores de dos pasos para Wordpress, como puedes ver en este listado

Two Factor Authentication

Este plugin bastante nuevo, tuvo su primera versión el 20 de marzo 2015 como un clone de Two Factor Auth. Su desarrollo ha ido bastante rápido, y esperemos no se detenga.

Soporta los protocolos TOTP + HTOP, tambien Google Authenticator y Authy considerado como uno de los mejores prestando el servicio.

Otro que me ha gustado mucho es Clef, en realidad aqui no existe authenticación de dos factores, es solo uno, tu celular, no se requiere password.

Tienes una aplicacion en tu celular, que lee (con la cámara) unas barras danzantes en la pantalla, y mediante la API al aplicacion en tu celular te abre la seción en Wordpress. Parece sacado de una película, pero ahora ya nada nos sorprende.

El servicio es gratuito para usarse con Wordpress y lo he estado usando en algunos sitios Wordpress.

Nginx

Mira mamá sin plugins!!, la verdad, soy de esos que prefieren no utilizar plugins, y trato de usar Wordpress lo más básico posible (sin plugins). La verdad si puedo, evito el uso de plugins en Wordpress, ejemplo

Vamos a usar limit_req_zone para lograr esto, esta función de Nginx limita el acceso a un recurso desde una IP a cierta cantidad de ingresos por segundo, minuto, hora, etc.

Lo que haremos es limitar el acceso al recurso /wp-login.php a 1 cada 4 segundos, más que suficiente para que un usuario legítimo pueda ingresar, pero que le hará la vida complicada a un bot que intenta romper nuestro sitio.

Para ello colocamos esta línea en la sección http del archivo /etc/nginx/nginx.conf

limit_req_zone $binary_remote_addr zone=security:10m rate=15r/m

Y luego en la configuración del sitio virtual, en general /etc/nginx/sites-enabled/sitio-virtual.conf (en Ubuntu), podemos colocar esto:

location ~ \.php$ {
	location ~* wp\-login\.php {
    		limit_req   zone=security  burst=1 nodelay;
    		include fastcgi_params;
    		fastcgi_pass unix:/var/run/php5-fpm.sock;
		}
	try_files $uri =404;
	fastcgi_split_path_info ^(.+\.php)(/.+)$;
	fastcgi_cache  detecnologia;
	fastcgi_cache_key $scheme$host$request_uri$request_method;
	fastcgi_cache_valid 200 301 302 5s;
	fastcgi_cache_use_stale updating error timeout invalid_header http_500;
	fastcgi_pass_header Set-Cookie;
	fastcgi_pass_header Cookie;
	fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
	fastcgi_pass unix:/var/run/php5-fpm.sock;
	fastcgi_index index.php;
	include fastcgi_params;
}

Estas son las líneas importantes:

location ~* wp\-login\.php {
    limit_req   zone=security  burst=1 nodelay;
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

Estas líneas enviaran a los usuarios la zona security cuando intenten ingresar a /wp-login.php y esta zona como esta configurada arriba, solo permite 15 accesos por minuto, lo que equivale a 1 acceso cada 4 segundos, esto y un buen password (largo y con caracteres especials, mayusculas y números) hará que el bot requiera de demasiado tiempo para romper la seguridad, lo que seguramente hará que busque otra víctima más fácil.

Conclución

Tal como se puede ver, existen muchas formas de proteger el acceso a tu sitio Wordpress, debes mantener las buenas prácticas de todo administrador, tener contraseñas fuertes, no dar más privilegios que los necesarios para los usuarios de tu sitio, asegurarte de tener modos de protección al area de acceso, mejor si no es a expensas del usuario, es decir que el sitio siga siendo amigable con el usuario final.

Puedes combinar un par de ellos, depende de ti.