Seguridad en WordPress

seguridad-01

Son muchas las ventajas que han permitido a WordPress convertirse en el principal gestor de contenidos de Internet. Un aspecto a tener en cuenta, ya que lo convierte en un target ante posibles ataques. Los papeles de Panamá son un claro ejemplo de cómo la explotación de un plugin sin actualizar provocó la liberación de material que ha supuesto la mayor filtración de información de la historia, según algunos titulares. Dejando a un lado la moral y lo que es o no ético, no deja de ser un hecho la mala gestión que hubo a la hora de cuidar la seguridad del sitio. Y es que el principal motivo de sufrir los ataques se debe a que no estamos concienciados de que es un aspecto que debemos tratar. Estos casos los vemos como si fuera un problema ajeno y que nunca nos va a ocurrir, es el primer error. Y se están dando casos de empresas que han tenido que pagar rescates a sus bases de datos porque no las han protegido como deben.

En este artículo pasaré a hablar de los aspectos que tratamos en la pasada meetup celebrada el 2 de junio sobre seguridad en WordPress.

No existe la seguridad perfecta

seguridad-02Cualquier experto en seguridad informática coincidirá en lo mismo, siempre habrá una vulnerabilidad en nuestra aplicación. Por mucho tiempo e inversión que hagamos a la hora de buscar el sistema de seguridad perfecto, siempre habrá alguna forma para poder saltárselo. Esto no quiere decir que tiremos la toalla y echemos a perder todo el trabajo realizado, la seguridad informática se enfoca en poner las cosas más difíciles para aquellos que pretendan dar un uso inadecuado a los servicios que pretendamos ofrecer. Imaginemos que en un parque tenemos un cofre del tesoro, cualquiera puede acceder a él. Si ahora le ponemos un muro en medio habrá gente que lo verá y pasará de largo, y habrá gente que perfectamente podrá saltarlo y acceder al cofre. De esta manera estamos reduciendo a la mitad las probabilidades de que la gente acceda o no a nuestro querido tesoro. A esto se le llama la regla del 50%, viene a decir que cada medida que pongamos en nuestra página su seguridad aumentará la mitad. Si al muro le ponemos cámaras de vigilancia estaríamos aumentando la seguridad a un 75% y así por cada nueva medida que apliquemos. Nunca llegaríamos al 100% absoluto.

Por eso, a la hora de invertir en la seguridad es importante hacer un análisis del tipo de información que se va a tratar, el coste que va a suponer, hasta que punto se puede asumir y estudiar otras alternativas.

Entorno

Dónde se va a ejecutar nuestra aplicación, qué frameworks utiliza, en qué servidor se pondrá en marcha. Son características a tener en cuenta y es que una mala elección puede suponer problemas a largo plazo. El entorno de nuestra página se puede dividir en dos partes, servidor y aplicación.

cloud-computingServidor

Viene a ser el lugar dónde se ejecuta nuestra aplicación, el host. Aquí tenemos que analizar las características que nos ofrece y ver si se adapta a nuestras necesidades. Sistema operativo, copias de seguridad, tipos de acceso, recuperación de datos, almacenamiento disponible, etc… Es importante tener en cuenta la opciones que tenga nuestro servidor, porque a la hora de resolver problemas será importante contar con las herramientas que puedan ofrecernos. Además del soporte que podamos recibir por parte del personal. Servidores que WordPress recomienda por su optimización y características ante son:

siteground

dream

blue-host

fly


browser

Aplicación

Es nuestro programa en sí,  el conjunto de herramientas y recursos que lo forman. Bien es sabido en el mundo del desarrollo que no es necesario reinventar la rueda si ya existe. Para ello tenemos ese conjunto de librerías que implementan las funciones más cotidianas, los famosos frameworks y los gestores de contenidos como lo es WordPress en nuestro caso. Cuando creamos una página web, al optar por estas herramientas, gozamos de una extensa documentación y un apoyo por parte sus comunidades que nos ayudan a alcanzar nuestros objetivos. Ahora bien, debemos tener cuidado sobre cómo hacer uso de estas herramientas, ya que una mala práctica puede llevar al desastre. La mayoría de las vulnerabilidades se deben a un mal uso de las aplicaciones.

Aplicaciones

Supongamos que queremos introducir publicidad en nuestra web,  realizar una modificación de un fichero, cambiar algún dato de nuestro perfil, etc… Situaciones con las que necesitamos interactuar con nuestra aplicación ya sea para realizar mejoras, modificaciones, etc… Estas acciones requieren el uso de otras aplicaciones, por ejemplo, cuando vamos abrir una página necesitamos de un navegador como Google Chrome o Firefox. O si queremos subir un fichero a nuestro servidor, será necesario un cliente FTP.  Son aspectos a tener en cuenta porque si no se controlan pueden suponer un problema.

browserapp

Software

El entramado que forma nuestra aplicación y todo lo que le rodea. Cuando desarrollamos una aplicación por un lado tenemos la obligación de que nuestro código cumpla con la seguridad requerida. Aún así, en la mayoría de los casos, acabaremos dependiendo de herramientas de terceros en las que tendremos que depositar nuestra confianza.

  • Los servidores donde se aloja nuestra web tendrán sus aplicaciones que controlen los recursos necesarios para que pueda funcionar correctamente.
  • Frameworks o recursos de los que dependa nuestra aplicación.
  • Los navegadores serán los responsables de que se establezca la comunicación con el servidor de cara al usuario final.

keyAcceso

Las diferentes formas que tendrán los usuarios finales de acceder a nuestra página web. Por ejemplo si queremos que los visitantes hagan comentarios, estamos permitiendo que puedan crear un registro en su correspondiente tabla de nuestra base de datos. El control de cualquier tipo de acceso a nuestra web debe ser controlado al más mínimo detalle, ya que cada uno tiene diferentes formas de interactuar con nuestra aplicación dependiendo de su planteamiento. Una mala ejecución puede convertirse en una puerta ante posibles hackers.

  • Panel del hosting: Dónde tendremos el control completo de nuestra página mediante un gestor como puede ser CPanel, configuración de ficheros, dirección del dominio, etc…
  • Servidor FTP, SFTP, SSH: Acceder a los archivos de nuestra web mediante un protocolo de intercambio de ficheros, FTP (File Transfer Protocol) o SFTP (Secure File Transfer Protocol ). También podemos acceder al servidor mediante una consola para ejecutar comandos de forma remota (Secure SHell).
  • Website: Las formas que tenga un administrador o usuario de acceder a la web, por ejemplo un login.
  • Social Media: Los diferentes formularios que habilitemos en nuestra web. Por ejemplo el de contacto, hacer comentarios, valoraciones, etc…
  • Ordenador: Sonará raro mencionarlo, pero nuestro propio ordenador personal o de trabajo, es un acceso donde acostumbramos a guardar información sobre nosotros que puede ser utilizada para nuestra contra.  Imagina por ejemplo que tienes la sesión de una página abierta o guardas la contraseña para agilizar el login.

puzzle

Third Parties

Ya lo he mencionado varias veces pero quizás no de una forma tan importante como quiero remarcar. Muchas veces tendremos que depositar nuestra confianza en herramientas de terceros. Independientemente de tu rol profesional y dependiendo de las necesidades que tengas, tendrás que depender de alguien en mayor o menor medida. Por ejemplo si necesitas un plugin concreto, tendrás que asegurarte de que la compañía que te lo facilita tenga unos requisitos de calidad que tú mismo debes marcar. Con qué frecuencia lo actualizan, qué tipo de soporte pueden darte, si pueden hacer modificaciones, etc. Asegurarte de que cumple con la seguridad necesaria para lo que quieres hacer. No siempre tendremos que depender de terceros, dependerá hasta que punto nos interesa invertir en el desarrollo de una nueva herramienta que haga lo que queramos o comprar la licencia.

  • Plugins: WordPress es conocido por su versatilidad y la gran variedad de opciones que pueden ofrecer sus plugins. Hay que tener en cuenta el fabricante, la frecuencia de sus actualizaciones y las valoraciones de los usuarios finales.
  • Publicidad: Imagina que quieres poner publicidad en tu web a través de otra página que se encargue de gestionar este tipo de contenidos. No deja de ser código que se cargará en tu web y por tanto hay que tener en cuenta qué hace en cada momento.
  • Servicios: Son aplicaciones que pueden ejecutarse en segundo plano y que pueden ayudar a mejorar la experiencia del usuario o la nuestra. Motorización de visitas, contador de resultados, estadísticas, etc…

Fallos de seguridad en WordPress

Con el objetivo de mejorar la experiencia del usuario, las nuevas tecnologías se enfrentan a un mundo de cambio constante. De aquí a seis meses pueden surgir nuevas costumbres o tendencias y quien no está a la altura puede quedarse atrás. Es por ello que las actualizaciones deben estar al orden del día para poder integrar las mejoras que se estimen oportunas. Esto puede suponer en algunas ocasiones se produzcan fallos de seguridad que han de ser corregidos por sus desarrolladores desde que son detectados. Recientemente tenemos dos casos importantes dónde la seguridad de WordPress o su entorno se ha visto comprometida.

Vulnerabilidad XSS persistente en WordPress 4.2

comment
Comentario con el código javascript.

El pasado año (2015), el CMS no estuvo exento de polémica debido a las constantes actualizaciones que estaban relacionadas a los fallos de seguridad, que se fueron corrigiendo a lo largo del año. Entre ellas destacar una del tipo Cross-site scripting (XSS). Con poner un sencillo comentario lo suficientemente largo en javascript se podía acceder al blog y ejecutar código en el servidor y en la web. Los atacantes, podían cambiar los privilegios del administrador y hacerse con el control de la página. Inmediatamente el equipo de WordPress lanzó un actualización urgente para corregir este fallo.

 panamapapers

Los papeles de Panamá

El caso más conocido recientemente. Su repercusión mediática lo cataloga como la mayor filtración de la historia. Más de 2 terabytes y 11’5 millones de documentos fueron publicados por el Consorcio Internacional de Periodistas de Investigación el pasado 9 de mayo del 2016. El bufete de abogados Mossak Fonseka tenía sus servicios en Drupal y en WordPress. Debido a que no actualizaron su versión de Drupal pudieron acceder a material sensible de los clientes. En el caso de WordPress, la vulnerabilidad se debió a un plugin desactualizado llamado Revolution Slider. La compañía encargada del plugin, ThemePunch, había corregido el error hace dos años. El fallo permitía acceder a la shell del servidor y ejecutar todo tipo de comandos.

Buenos hábitos

Suena repetitivo, pero es importante hacer hincapié en que no existe el sistema perfecto. El tema de la seguridad tiene que ver más con los buenos hábitos que nosotros mismos imponemos para prevenir los ataques. Seguir un protocolo en el caso de que alguien externo nos pida información y no darla porque esta persona diga ser una autoridad por ejemplo. Nos ayudaría a evitar casos dónde la ingeniería social puede conseguir de nosotros lo que quiere.

Actualizar el Software

updatesYa lo hemos visto con el caso de los Papeles de Panamá. Debido a la falta de actualizaciones, los atacantes pudieron acceder al sistema y hacerse con información sensible. Mantener nuestra página al orden del día, nos permite corregir fallos de seguridad descubiertos en versiones anteriores. Es importante leerse la documentación de las actualizaciones, de esta forma podremos saber hasta qué punto puede afectar a nuestra aplicación y adaptarla ante los nuevos cambios. Previamente, antes de realizar la actualización en producción habrá que probarla en un entorno de pruebas.

Limitar los accesos

keylimitDefinir bien los roles y sobre todo qué puede hacer cada uno. No importa en que ámbito, los accesos son por una forma de decirlo la puerta principal por la que nosotros entramos a nuestra página web. Hacerse con un usuario con determinados privilegios puede provocar un desastre. El pasado mes de febrero la plataforma SWIFT, sistema de comunicación segura entre entidades bancarias, se vio comprometida porque los piratas consiguieron hacerse con unas credenciales. Lo que les permitió hacerse con 81 millones de euros.

Fuentes seguras

fuentessegurasAsegurarnos de que los servicios de los que dependemos están a la altura de lo que queremos. Actualizaciones constantes, facilidad de comunicación, buen soporte, etc. Que puedan ayudarte en cualquier momento, no deja de ser un servicio por el que estás pagando y están en la obligación de atenderte como deben. Utilizar la alternativa más barata a largo plazo resulta siempre más caro. Si por ejemplo vemos que un plugin lleva más de un año sin actualizarse, debemos ir pensando en otra alternativa.

Mantenimiento

cardiogramLas actualizaciones de por sí son una forma de mantener nuestra página al día. Pero además es importante tener copias de seguridad, revisar la actividad de los usuarios, tener de alguna forma monitorizado los cambios que se hagan ya sea en la base de datos como en nuestro servidor. Tener siempre un control de lo que se hace y cómo nos permitirá saber cuando algo no funciona bien y proceder a solucionarlo.

Contención

wallSiempre es bueno ser previsor y tener en cuenta la mayoría de las circunstancias. En el caso de se produjera una vulnerabilidad, reaccionar de una manera determinada para poder solucionarla. De esta forma minimizamos los daños que puedan producirse. Elaborar un plan de contención nos ayuda a tener en cuenta las peores situaciones y cómo enfrentarlas para evitar en la mayoría de los casos males mayores.

Mejorando la seguridad de WordPress

WordPress es un excelente CMS con el que podemos hacer muchas cosas. Su instalación es muy sencilla, pero incluso con esto debemos de tener en cuenta algunos aspectos a la hora de tener una página segura.

Calidad del Servidor

server plusElegir un servidor con recursos optimizados para WordPress no sólo mejora en seguridad, nuestra página conseguirá aumentar su rendimiento. Analizar las características de nuestra web, su flujo de clientes, escalabilidad, etc… Son aspectos que, una vez analizados nos ayudarán a definir mejor qué tipo de servidor necesitamos. En algunos casos el precio puede resultar elevado, pero teniendo en cuenta las ventajas que tenemos a largo plazo puede suponer un ahorro. Dependerá de lo que queramos hacer.

Permisos

file&folderCuando configuremos nuestro servidor, es posible que la configuración de los permisos de los directorios y archivos estén por defecto. Es por ello que deberemos asegurarnos de que los directorios y ficheros tengan los siguientes tipos según los sistemas Linux:

  • El propietario puede leer, escribir y ejecutar. El grupo y otros sólo pueden leer y ejecutar. Estos permisos equivaldrían a 755 y se aplicaría a los directorios.
  • El propietario sólo puede leer y escribir, el grupo y otros pueden tan sólo leer. Estos permisos equivaldrían a 644 y se aplicarían a los ficheros.

Discreción

ninjaLa famosa instalación de WordPress en 5 minutos se ha convertido en una gran ventaja. Sobretodo, a la hora de crear una página de manera rápida y sencilla. Hay que tener especial cuidado con esto, no por la propia instalación en sí, es una maravilla. Por defecto viene con una serie de parámetros que pueden dejarnos expuestos a vulnerabilidades. Cierto es que si tenemos las actualizaciones al día, se reducen los problemas. Pero imagina que se descubre un fallo para una versión concreta y en tu código puede leerse claramente qué versión de WordPress estás utilizando. Esto puede ayudar a los atacantes a detectar qué páginas son vulnerables. Es mejor evitarlo ocultando la información.

  • Eliminar o cambiar el usuario admin por defecto.
  • Usar un prefijo diferente al wp_.
  • Esconder la versión de WordPress.
function remove_src_version ( $src ) {

global $wp_version;

$version_str = '?ver='.$wp_version;
$version_str_offset = strlen( $src ) - strlen( $version_str );

if( substr( $src, $version_str_offset ) == $version_str )
    return substr( $src, 0, $version_str_offset );
else
    return $src;
}

add_filter( 'script_loader_src', 'remove_src_version' );
add_filter( 'style_loader_src', 'remove_src_version' );

Para ocultar la versión de WordPress hay que agregar el presente código a nuestro fichero functions.php.

Seguridad de la contraseña

fingerprint-scan

Es importante tener en cuenta las claves y contraseñas que establecemos cuando instalamos WordPress. Sobretodo poner un nivel de seguridad elevado, en las últimas versiones del CMS nos indica qué nivel de seguridad tiene nuestra contraseña en el momento de crearla. En cuanto a este tema hay que seguir una serie de consejos:

  • Cambiar la claves del wp_config.php. La instalación de WordPress nos pone por defecto unas claves en el archivo wp_config.php. Que es obligatorio cambiar cuando instalamos WordPress. Para ello deberemos acceder a este enlace,  nos generará unas claves aleatorias que tendremos que reemplazarlas por las que estén en wp_config.php.
  • Contraseñas siempre robustas.
  • Limitar el número de logins.

Proteger las partes sensibles

cpanel

  • Cada servidor tiene su propia configuración. Dependerá del panel de administración que tenga instalado. Ya sea CPanel o Plesk, por poner algunos ejemplo. En el caso de este último, existe una útil herramienta que salió recientemente llamada WordPress Toolkit. Gracias a ella podremos automatizar los procesos mencionados anteriormente, como es el de ocultar la versión de WordPress, cambiar las claves del wp_config.php, los prefijos de nuestras tablas, etc…

htaccess2

  • Mejorar la seguridad con el fichero .htaccess.  Este fichero es muy importante, ya que con él podremos establecer los permisos sobre quién puede acceder a nuestra carpeta, qué puede hacer. Cómo va a interactuar con nuestra web. Qué tipo de redirecciones hacer, ficheros a cargar, etc.

scan

  • Monitorizar los cambios de los ficheros. Existen multitud de herramientas que nos permiten tener un control sobre qué se está haciendo en cada momento en nuestro sitio. Es importante de que si alguien hace algo que no debe, nos llegue alguna notificación para poder controlarlo cuanto antes.
  • firewallProteger el wp-login y wp-admin con contraseña. Cuando accedemos al login de nuestra página, previamente podemos protegerlo con una ventana de usuario y contraseña antes de que se cargue.
  • Tener un firewall. En cierta forma no se trata del típico cortafuegos que tenemos instalado en nuestros ordenadores. Básicamente se suelen basar en un plugin que contiene características de seguridad, como la monitorización de logins, bloqueo de direcciones maliciosas, entre otras muchas.

Fuentes y enlaces de interés

Documentación

Seguridad

Recursos