Asegurando WordPress

Publicado en Artículos, Seguridad,


Tweet about this on TwitterShare on Google+4Share on Facebook0Share on LinkedIn0

El tema de las inseguridades en gestores de contenido (CMS) es todo un clásico en nuestros días, CMS como WordPress son usados por millones de personas en todo el mundo, tanto gurús de la informática como usuarios sin mucho conocimiento, escriben a diario en sus blogs. Los sitios Web que trabajan con WordPress son un blanco potencial para cualquier atacante como todo lo que esté “en linea”, y un posible atacante lo primero que va a buscar son vulnerabilidades por donde colarse…y sitios Web inseguros abundan en la red.

Hablar de asegurar un sitio Web que funcione con WordPress incluye una serie de factores y buenas prácticas, que van desde su instalación, revisión, funcionamiento y chequeo periódico del mismo. En éste artículo daré algunos datos para mejorar la seguridad de un sitio gestionado con WordPress, y trataré de que sea una lectura amena tanto para usuarios avanzados como novatos.

Comenzaremos por decir que WordPress, como gestor de contenidos está desarrollado en PHP, y utiliza el motor de base de datos MySQL y se ha convertido en el CMS más popular de la actualidad. Esto se deben en gran parte a que tiene licencia de software libre (GPL), facilidad de uso, una enorme comunidad de desarrolladores y diseñadores que brinda soporte y la gran extensión de funcionalidades que se le puede dar a través de los plugins.

Como todo software, WordPress no está libre de vulnerabilidades, aunque en su mayoría, las vulnerabilidades que podemos encontrar en instalaciones de este CMS se deben, bien sea a una mala instalación o a algún plugin de terceros inseguro o mal desarrollado. He aquí la importancia de una buena instalación, el servidor Web donde tendremos nuestros archivos y de elegir con cuidado que plugins usaremos.

Instalación de WordPress

Una vez que tengamos nuestro proveedor de Hosting seleccionado, procederemos a instalar WordPress con su archiconocida instalación en 5 minutos. Creo que está demás decir que lo idóneo es instalar siempre la última versión.

No me voy a centrar en un “paso a paso” de la instalación, de eso hay cantidad de información en la red incluso en el mismo sitio de WordPress, nos vamos a enfocar en los tópicos relativos a la seguridad.

Lo primero que hay que saber es que WordPress necesita crear un archivo de nombre wp-config.php, en éste se guardará la información necesaria para poder realizar una conexión con la base de datos, que de igual forma se creará en los primeros pasos de la instalación. Este archivos es de suma importancia! (Ver Editando el archivo wp-config.php en el sitio oficial)

Analicemos algunos de sus campos:

Tenemos el nombre de la base de datos, que puede ser el que quieras, o el que tu proveedor de hosting te asigne en caso de ser un servidor Web gratuito. Lo ideal sería usar algo que no tenga que ver con tu sitio, es decir, si tu sitio Web se llama vendogatos.com NO uses vendogatos como nombre de base de datos, esto se lo hace más difícil a cualquier intruso que intente adivinar tus datos.

El nombre de usuario para la base de datos, otro campo importante. No uses admin o algo similar, aplica el mismo principio que en el punto anterior. Esto también dificultará cualquier posible intento de acceder a tu sitio. Recuerda que un posible atacante lo primero que buscará “romper” son estos datos.

También tenemos la contraseña de la base de datos, por favor no uses el nombre de tu gato o tu fecha de nacimiento! usa contraseñas complejas. Si no se te ocurre ninguna puedes usar servicios como el de http://password.es/ para generar contraseñas que tengan números, letras minúsculas y mayúsculas y símbolos especiales. Para este caso en particular, MySQL permite usar tanto números, letras (minúsculas y mayúsculas) y caracteres especiales (como @#$!?), y admite hasta 32 caracteres.

Tenemos otros campos que muchas veces (quizás por falta de conocimiento) pasamos por alto, son las claves de autentificación o claves secretas que puede usar WordPress para mejorar la seguridad. Estos campos son AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY y NONCE_KEY

El uso de estas claves secretas, dificultará el posible crackeo de la contraseña de WordPress. Estas claves no están en la base de datos, y añaden protección a las cookies de sesión de usuario, evitando que se detecte la contraseña principal usada para acceder a WordPress. Básicamente protegen de robo las cookies

WordPress pone a tu disposición un sistema generador de claves automático para ayudarte en este proceso. A modo de ejemplo copio las siguientes claves generadas automáticamente:

define('AUTH_KEY',        '7XD.AaTu0#okNkxx%m,OL)ps(*n3sD+k..7MBAQuQqfDcV^}f&90PV]{RFLCrn6O');
define('SECURE_AUTH_KEY', 'r),F-`Hi>-]}HfWA]Fq?cv9VF[u##r d=_sb+@r|AJ+J/|Bi|jvcc.1_&*#4xW#;');
define('LOGGED_IN_KEY',   '/?6RaV|,)gHxbLmR6T/XP`ytJn-a:[ -Wrk6])mQ+s8Qg[vsXfD 0B)|KD%RR2(#');
define('NONCE_KEY',       'FUKCi**iQ|V6>a1Yz3_jy;:-J{^|u+j^NhVYN^p_$ix!/GNz;X4jy^M[7c#?4X)^');

No uses estas, es solo un ejemplo. Genera las tuyas!

Otro campo a tener en cuenta es el prefijo de tabla $table_prefix='wp_'; que por omisión siempre será “wp_” pero DEBE ser cambiado por otro. El prefijo de tabla lo usa WordPress para el manejo de la base de datos, por ejemplo, la tabla users la usa WordPress para almacenar los datos de los usuarios, si le añadimos el prefijo ya tendríamos el nombre competo de la tabla: wp_users. Si cambiamos el prefijo se lo pondríamos más difícil a alguien que trate de obtener datos de los usuarios.

Todos estos datos que menciono, a excepción de las claves secretas, son ingresados al momento de instalar WordPress por primera vez, no es necesario editar directamente el archivo wp-config.php.

A parte de los datos básicos para la instalación de WordPress, también se necesitan los datos para el usuario principal o administrador del sitio. Igual que en los puntos anteriores, no uses por defecto el usuario admin y usa una contraseña robusta. El usuario puede tener letras y números, y la contraseña puede tener letras, números y símbolos especiales.

Asegurando directorios y archivos

Una vez realizada la instalación de WordPress, debemos asegurar todos los archivos de instalación y limitar el acceso a estos.

Para poder limitar el acceso a los archivos y directorios, hay que comprobar los permisos de los mismos, aclaremos esto para el que no lo sepa. Todo archivo (o programa) dentro de un computador tiene permisos de lectura, escritura y ejecución. En el caso de WordPress no es diferente, aunque “por lo general” al momento de instalar WordPress en un servidor Web, estos archivos toman de forma automática “permisos seguros” para evitar que sean leídos o modificados por personas no autorizadas, claro esto depende de las configuraciones de dicho servidor, de ahí la importancia de elegir un buen proveedor de hosting.

Estos permisos están denotados de forma simbólica, por ejemplo, r = lectura, w = escritura y x = ejecución. Pero también los podemos encontrar representados de forma numérica, por ejemplo 0755, el cual le permitirá leer-escribir-ejecutar al propietario de un directorio y leer-ejecutar a los miembros de un grupo.

En Internet se puede conseguir mucha información de como funcionan los permisos de archivos, en este artículo solo voy a tocar el punto superficialmente.

Como vemos en la imagen anterior, los directorios principales de WordPress son:

  • wp-admin: conjunto de código relacionado con la administración del sitio Web
  • wp-content: en el cual se almacena todo lo que el usuario incorpore a la instalación básica de WordPress, temas, plugins, imágenes, etc.
  • wp-includes: contiene el grueso del código que hace funcionar WordPress

Los directorios principales de WordPress deben tener permisos 0755 y el resto de archivos en 0644, aunque esto puede cambiar dependiendo del tipo de archivo, por ejemplo el archivo readme.html que usa WordPress para mostrar información relativa a sí mismo (incluyendo la versión de WordPress) debería tener permisos 0440, con esto se evita que alguien no autorizado pueda saber la versión instalada de WordPress.

Cada uno de los directorios principales tiene también una buena cantidad de directorios y archivos dentro de cada uno, una forma de proteger el acceso no autorizado a estos directorios es usando un archivo index.php, estos archivos evitan que se listen los archivos que puedan tener cada directorio, el código interno que llevan estos archivos es muy simple pero efectivo:

Cuando se trata de listar el contenido de un directorio sencillamente no muestra nada!

Hay que saber que no todo archivo con ese nombre hace lo mismo, WordPress incorpora (como la mayoría de aplicaciones Web) archivos con el mismo nombre pero funcionalidades diferentes. La pregunta entonces es ¿dónde tengo que poner los index.php mencionados anteriormente? Estos archivos deberán estar en los siguientes directorios:

  • wp-admin/index.php
  • wp-content/index.php
  • wp-content/plugins/index.php
  • wp-content/uploads/index.php

Para crear un index.php es sencillo, basta con abrir el bloc de notas y copiar el código que se mencionó anteriormente, se guarda con extensión .php y listo. Luego resta copiar estos archivos en los directorios mencionados y ya estamos.

Para alguien que no sepa mucho de este tema, le puede sonar complicado, pero más adelante veremos que con algunos plugins podemos cambiar los permisos y proteger los directorios y archivos de una forma sencilla; todo esto lo hago para que se entienda la importancia de cada cosa y el porque se debería hacer.

Los archivos .htaccess

La forma por excelencia de proteger sitios Web es a través de los archivos .htaccess, de acuerdo a la Wikipedia “un fichero .htaccess (hypertext access), también conocido como archivo de configuración distribuida, es un fichero especial, popularizado por el Servidor HTTP Apache que permite definir diferentes directivas de configuración para cada directorio (con sus respectivos subdirectorios) sin necesidad de editar el archivo de configuración principal de Apache“.

Los .htaccess ofrecen una gran cantidad de posibilidades, desde Autorización/Autenticación, creación de URLs amigables, restringir accesos, respuestas de error personalizadas, controles de cache, evitar hotlink, etc.

Este archivo se suele crear automáticamente en el directorio raíz cuando se instala WordPress, pero también se puede crear de forma manual. Hagamos hincapié en dos puntos: el archivo no tiene extensión como normalmente los vemos en nuestros computadores (archivo.txt por ejemplo); los permisos para este archivo deben ser 0644 para evitar que alguien pueda tener acceso al mismo.

Con un .htaccess podemos proteger prácticamente todo lo que tengamos en una instalación de WordPress (o cualquier aplicación Web), pero ojo! también la podemos embarrar si hacemos algo incorrecto, ya que con las directivas/instrucciones que contenga el archivo estamos controlando muchos de los comportamientos que tendrá nuestro sitio Web.

Este archivo lo podemos crear y editar con el bloc de notas, aunque también existen numerosas aplicaciones (mejores) para editar código como Notepad++ (Open source) y deberá estar en el directorio raíz de la instalación de WordPress. Veamos algunos ejemplos de como podríamos configurar nuestro .htaccess:

También podríamos usar el siguiente código para evitar el Hotlinking y así evitar que nos roben ancho de banda

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://tusitio.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://tusitio.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tusitio.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tusitio.com/.*$ [NC]
RewriteRule .*.(gif|jpg|jpeg|png|bmp)$ - [F,NC,L]

Es posible incluir muchas otras directivas, pero como mencioné antes, hay que hacerlo con cuidado

Usando Plugins para asegurar WordPress

El uso de plugins es necesario en WordPress si queremos ampliar sus capacidades, pero por otro lado no recomiendo el uso excesivo de estos, principalmente por dos factores: el tiempo de carga del sitio se verá afectado ya que tiene que cargar mucho más código; y en segundo lugar porque los plugins son desarrollado por terceros, con lo cual podríamos (no necesariamente) estar abriendo una brecha por donde instrusos se puedan colar. Así que antes de instalar plugins hay que probarlos en un entorno seguro, por ejemplo en nuestra máquina particular antes de subiros al servidor Web.

Better WP Security

Este plugin es uno de los mejores que he probado, básicamente lo que hace es comprobar todo el sitio web en busca de configuraciones erróneas que puedan crear vulnerabilidades, una vez detectadas muestra las diferentes opciones para corregir las mismas.

Está desarrollado por la gente de bit51.com, tiene ya bastante tiempo en los repositorios oficiales de WordPress y ha tenida muy buena acogida y muy buenas opiniones.

Es sumamente completo y sencillo de usar, en mi opinión es imprescindible.

  • Cambia las URLs para acceder al escritorio de Wordpres incluyendo login, admin y register por otras que solo el administrador del sitio conocerá
  • Puede evitar completamente el inicio de sesión por un período de tiempo
  • Evita que se muestren notificaciones de actualizaciones a los usuarios que no tengan permiso
  • Puede cambiar el prefijo de las tablas
  • Puede cambiar la ruta a wp-content
  • Evita que se muestren mensajes de error en el inicio de sesión
  • Puede banear a través de user agents, host o IPs
  • Previene contra ataques de fuerza bruta
  • Previene contra ataques del tipo inyecciones de código XSS, RFI, CSRF, Base64 e inyección SQL
  • Fuerza a que se usen contraseñas robustas
  • Fuerza al uso de SSl (en caso de que se disponga)
  • Monitorea si los archivos han sido modificados
  • Detecta errores 404
  • Detecta intentos fallidos de inicio de sesión con la posibilidad de banear automáticamente
  • Permite realizar respaldos de la base de datos de forma automática
  • Envía emails de alerta en caso de alguna posible brecha en la seguridad
  • …y más

Configurando Better WP Security

Con Better Wp Security se podría controlar todo el acceso a un sitio con WordPress, ya que se puede configurar un archivo .htaccess de forma muy cómoda, sin necesidad de hacer modificaciones manuales. Este punto es importante para los que no tienen mucho conocimiento de estos temas y solo buscan mejorar la seguridad de sus sitios web.

Una de las características que proporciona buena seguridad, es el hecho de que se puede configurar el sistema de detección de intrusos para evitar los ataques HTTP Error 404. Los errores del tipo 404 o “no encontrado” pueden ser muy comunes en sitios Web, básicamente indica que el navegador web ha sido capaz de comunicarse con el servidor, pero no existe el fichero que ha sido pedido. Esto como tal no es un tipo de taque, pero se le puede “sacar jugo” si se sabe como. Lo que se busca es controlar la cantidad de errores del tipo “página no encontrada”, esto además de consumir ancho de banda (bien se podría ahogar al servidor web con peticiones de este tipo) también podría proporcionar información a un posible atacante de los archivos que hay (o no hay) en nuestro sitio Web.

Mediante esta misma premisa, también se evita que se den excesivos y/o continuos intentos fallidos de inicio de sesión, con esto evitamos ataques de fuerza bruta.

Block-Spam-by-Math

Otro de los plugins que considero buenos. En términos básicos lo que hace es proteger el sitio web de spam, protege el área de registro, inicio de sesión y comentarios, agregando una pequeña operación matemática, de esta forma se comprueba que es una “persona” la que está interactuando con nuestro sitio y no un bot.

Es sencillo de usar y muy efectivo. A parte de proteger contra el spam también agrega algo más de protección contra ataques de fuerza bruta ya que protege el inicio de sesión y el registro de usuarios en WordPress.

Hay quienes prefieren los conocidos “captchas”, en mi caso prefiero usar una operación como la que realiza este plugin. Creo que esto ya depende de gustos, solo hay que tener dos consideraciones presentes: los captchas actuales pueden llegar a ser muy “ilegibles” haciendo el proceso bastante tedioso y en ocasiones no suelen ser tan efectivos al momento de frenar el spam. Lo otro a tener en cuente es que se debe probar antes de ser usado en un sitio web.

NoSpamNX

Este es otro plugin que recomiendo para evitar el spam en los comentarios. No tiene captcha ni ese tipo de comprobaciones, lo que hace es totalmente transparente al usuario, y lo hace bien.

NoSpamNX automáticamente añade un campo oculto al formulario de comentarios, si se detecta algún patrón de conducta típico de los spambot, el comentario no será enviado. A parte de esto, también permite configurar una lista negra con palabras usadas por spammers o spambots, de esta forma se amplia un poco más sus capacidades. También permite bloquear URLs, dominios y rangos de IPs

Bulletproof security

Este también es bastante completo, aunque en mi opinión muy engorroso y rebuscado. Es muy similar a Better Wp Security, con la salvedad de que puede resultar un poco complicado de usar.

Protege contra ataques del tipo XSS, RFI, CRLF, CSRF, Base64, inyección de código y SQL Injection hacking. Funciona también creando un .htaccess con el cual controlará los aspectos de acceso al sitio web.

Como decía al principio, en funcionalidad es bastante similar Better Wp Security, pero al (menos para mi) un poco más engorroso de usar, quizás por su presentación. Pero definitivamente este plugin tiene sus adeptos y buenas opiniones en la comunidad de WordPress. Tiene una versión gratuita y otra paga.

—–

Vale decir que de nada vale hacer una instalación correcta, proteger nuestros archivos o instalar cualquier cantidad de plugins que queramos sin tener en cuenta algo de suma importancia: actualizar continuamente a la última versión estable de WordPress y todos los plugins que tengamos en funcionamiento.

Es evidente que existen muchísimos métodos y plugins para mejorar la seguridad de WordPress, sin embargo no puedo hablar de lo que no he probado a fondo ni de lo que estoy seguro de que funciona. Le dejo al lector la tarea de buscar otros métodos que le puedan servir para contrarrestar los peligros que podemos encontrar en la red, que amenazan a diario nuestros sitios web.

Por último decir que existe un libro que resulta más que interesante para todos aquellos que quieran profundizar más en la seguridad de WordPress, el libro en cuestión es WordPress 3 Ultimate Security, escrito por Olly Conelly. La revisión de la obra se ha llevado a cabo conjuntamente con John Eckman y Kevin Kelly, dos pesos pesados en el desarrollo de aplicaciones. Este libro es considerado por muchos la Biblia de la Seguridad para WordPress.

Asegurando WordPress
4.5 (90%) 4 votos

Etiquetas: ,


Deja un comentario

Cuanto es 6 + 15 ?
Please leave these two fields as-is:
IMPORTANTE! Necesitas resolver la operación matemática para poder continuar.

Newsletter

Redes sociales

Centro de soporte

Centro de recursos