3 plugins gratis para la seguridad de WordPress

Hoy en día, la explosión en popularidad de la plataforma de blogging más completa del mundo no nos permite tener una instalación descuidada. Hasta el sitio menos comercial tendrá que tener en cuenta las vulnerabilidades encontradas en el gigantesco repositorio de plugins y themes. Para aquellos con un presupuesto ajustado, es posible instalar estos tres plugins gratis para la seguridad de WordPress y dormir más tranquilos.

Tres plugins gratis para la seguridad de WordPress
Tres plugins gratis para la seguridad de WordPress

Todos ellos son gratuitos (o freemium), pero ninguna de las funciones descriptas a continuación requieren una licencia comercial.

 

Balabolka ¿Prefieres escuchar este artículo? Dale play (powered by Balabolka)

 

 

 

Lo primero que hay que hacer en un proyecto en línea es activar el logging de errores PHP. El archivo con la salida no tiene que quedar disponible para un navegador.

Las directivas en la configuración de wp-config.php quedarían así:

// No estamos en un ambiente de desarollo, por lo tanto desactivamos el debugging
define ( 'WP_DEBUG', false );
// Sin embargo, activamos la salida silenciosa de errores a texto plano
define ( 'WP_DEBUG_LOG', true );
...
if ( WP_DEBUG_LOG ) {
    @ini_set ( 'log_errors', 'On' );
    // Notar que el path tiene que estar por fuera de la raíz WWW (requiere FTP)
    @ini_set ( 'error_log', '/ruta/al/dominio/en/el/sistema/logs/php-errors.log' );
}

Configurar un nivel básico de seguridad instalando plugins gratis para la seguridad de WordPress: Acunetix WP Security

Acunetix WP Security nos ayuda a tomar las primeras medidas básicas para empezar a proteger nuestra instancia de WordPress.

En su página principal nos provee de un checklist que escanea la instalación por problemas conocidos, informándonos de si ya se han solucionado.

Un ícono verde indica que no hace falta tomar acción. De lo contrario, éste aparecerá como rojo o amarillo.

Acunetix WP Security
Página principal del plugin Acunetix WP Security, uno de los tres plugins gratis para la seguridad de WordPress

Mientras que muchos de estos ajustes son menores, como vaciar el archivo readme, otros son significativos.

Ocultar los mensajes de error en la página de login es uno de ellos. Ya que, si se trata de un atacante, no podrá adivinar fácilmente un nombre de usuario válido. Imposible saber dónde estuvo el fallo de ingreso: si en el username o en la contraseña.

Ahora bien, muchas de estas acciones son implementadas por el propio plugin a través de su sección de Settings (Configuraciones). Pero otras requieren una activa intervención.

Menu de Acunetix
Menu del Dashboard de Acunetix, uno de los tres plugins gratis para la seguridad de WordPress

Las configuraciones que implementa Acunetix WP Security, uno de los tres plugins gratis para la seguridad de WordPress

Al acceder al formulario de Settings, Acunetix nos facilita unas 13 acciones a ejecutar inmediatamente. Las más importantes están subrayadas:

  1. Oculta la versión de WordPress para todos menos administradores.
  2. Quitar varias etiquetas meta de la etiqueta <head>. Evita la salida de esta tag de tipo generator en el encabezado HTML.
  3. … Really Simple Discovery: ídem. Elimina este innecesario metadato.
  4. …Windows Live Writer: ídem. Requerido sólo por este editor de blogs de escritorio de Microsoft.
  5. Deshabilitar el reporte de errores PHP y la base de datos para todos, menos administradores. A decir verdad, esta opción no debería estar activa desde la misma configuración de WordPress.
  6. Desactivar notificaciones de actualizaciones de plugins. Sólo los admins pueden ver qué plugins necesitan un upgrade.
  7. … de themes: ídem.
  8. No mostrar errores de conexión al Dashboard. Permite oscurecer un nombre de usuario válido al omitir cuál de los campos, si éste o la contraseña, falló en la página del login.
  9. Esconder notificaciones de administración para no administradores. No especifica aquí el plugin a qué tipo de mensajes se refiere, pero los escritores no deberían realizar tareas de administrador.
  10. Intentar crear archivos index.php en los directorios wp-content, wp-content/plugins, wp-content/themes y wp-content/uploads para prevenir el listado de directorios.
  11. Cortar el parámetro de versión de URLs. Relacionada con la primera opción, se recomienda activarla para prevenir ataques de inyección de parámetros HTTP.
  12. Vaciar de contenidos el archivo readme.html del directorio raíz. Un detalle trivial para no indicar la versión de WordPress.
  13. Habilitar la herramienta Live Traffic. Permite ver todos los hits del sitio en tiempo real. Puesto que puede afectar seriamente la performance de la web, es recomendable sólo para casos en los que sea necesario ver quién accede a ella en el mismo momento.
Opciones activas de Acunetix, uno de los tres plugins gratis para la seguridad de WordPress
Opciones activas de Acunetix, uno de los tres plugins gratis para la seguridad de WordPress

El checklist de Acunetix, uno de los tres plugins gratis para la seguridad de WordPress, que diagnostica el estado actual de la instalación

Una vez aplicados los cambios deseados, Acunetix realiza un escaneo de la instancia de WordPress al volver a la página principal. Allí detectar{a cuáles de las medidas de seguridad han sido efectivamente aplicadas.

Es posible que algunas de ellas tarden unos minutos en reportarse. Muchas ya fueron solucionadas en el paso anterior pero otras no, aunque sean igualmente relevantes.

Las acciones ya aplicadas tienen que tener un ícono verde a su izquierda. Pero hay algunas de ellas que requieren nuestra iniciativa, como el caso de proteger el acceso a la carpeta wp-admin.

Son éstos los puntos fundamentales a realizar:

Subir directivas de Apache en el directorio del back-end, wp-admin

Acunetix recomienda crear un fichero .htaccess aquí, sin extensión y con punto precedente. Este es el formato utilizado por Apache para procesar directivas adicionales.

Es posible que el cliente FTP no lo muestre inicialmente, por lo que hay que forzarlo a mostrar archivos ocultos.

En este documento, incluir estas líneas:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Es complicado saber exactamente qué hacen. Básicamente, dicen al servidor que utilice el motor de rescritura de URLs en la primera línea (con “RewriteEngine On”), para redireccionar a la frontpage (última línea) todo pedido HTTP que apunte a un recurso inexistente (fichero o directorio, tercera y cuarta línea respectivamente).

Cambiar el prefijo de las tablas de la base de datos

Por defecto este fragmento es “wp_”, pero se puede cambiar a lo que sea mediante la siguiente directiva en la configuración (wp-config.php):

// Emplea solo números, letras y guión bajo
define ( 'TABLE_PREFIX', 'mi_cadena_' ); 

Según ciertos especialistas en seguridad, de nada sirve en términos de protección. Originalmente permitía desplegar varias instancias de WordPress en una sola base de datos.

Edición de wp-config.php
Edición de wp-config.php con SUPERCHARGED

Hay innumerables constantes más para agregar a este fichero, como se profundiza en la entrada Configurar WordPress con la máxima potencia.

Cambiar el superadministrador por defecto

Admin es el nombre de usuario preestablecido para facilitar la instalación.

El problema que ello genera es el aumento de las posibilidades de acierto de un ataque por fuerza bruta al Dashboard. Por eso será mejor cambiarlo a alguna otra variable, que no sea tan fácil de prever.

WordPress admite algunos caracteres especiales en este campo, como _ (guión bajo) o ,  (coma),  . (punto), \ (barra invertida), – (guión corto) y @ (arroba).

Es muy importante que este paso sea realizado al instalar WordPress, ya desde el ambiente de desarrollo.

NOTA: a partir de la versión 4.7, WordPress incorpora la llamada REST API. Su objetivo es convertirla en una plataforma de aplicaciones. La primera versión de este módulo permite a cualquier persona obtener una lista de nombres de usuario activos. Para evitarlo recomiendo instalar el plugin Disable REST API, que sólo la bloquea para usuarios anónimos.

Borrar los scripts de instalación y actualización del back-end

Es necesario conectarse al servidor y localizar los siguientes ficheros en el directorio wp-admin para ser borrados: install.php y upgrade.php. ¡Atención!, no confundir con update.php.

Consejo extra: no permitir la edición en línea de plugins

Este ítem no lo incopora Acunetix, pero es una de las más útiles medidas preventivas.

WordPress facilita editar en línea vía el Dashboard cualquier componente de los plugins instalados. Se puede reducir este acceso tan abierto (para cualquier tipo de usuario) agregando esta constante a la configuración:

// Deshabilita el Editor de Plugins y Themes
define ( 'DISALLOW_FILE_EDIT', true );
Evitar la edición de plugins en línea en conjunto con la instalación de tres plugins gratis para la seguridad de WordPress
¿Para qué editar plugins en línea cuando ni siquiera deberían ser modificados?

No hay que cambiar los plugins nunca; menos en producción.

La regla número uno de una instalación segura es mantener al día lo más posible tanto las versiones del núcleo como plugins y themes. Es la única manera de contar con los últimos parches, y hacerlo implica pisar cualquier cambio.

Acunetix WP Security es desarrollado por Acunetix.

Monitorear la actividad con plugins gratis para la seguridad de WordPress: WP Security Audit Log

Este plugin utiliza un modelo freemium. Pero la versión gratuita cuenta con una funcionalidad notable: saber qué sucede en la instalación durante las 24 horas del día.

WP Security Audit Log registra las acciones de usuarios conectados y visitantes incluyendo el username, IP, día y hora del hit y una breve descripción.

Ahora bien,  éstas son de las más triviales a las más críticas, abarcando diferentes categorías. Entradas, comentarios, páginas, posts, plugins, themes, menúes, widgets, sistema y bases de datos.

Revisar cada una sería demasiado largo. El plugin ofrece su propia documentación.

A los fines prácticos sólo conviene tener en cuenta que cada entrada tiene un ícono bajo la columna Type que indica su seriedad.

Especialmente útiles son los pedidos HTTP que dan errores 404. Es la primera forma de detectar un IP que escanea la instancia de WordPress en busca de vulnerabilidades conocidas. Tanteando, por ejemplo, URIs predeterminados que comprueben la existencia de ciertos plugins.

Las ventajas de utilizar WP Security Audit Log, uno de los tres plugins gratis para la seguridad de WordPress

Una máquina está corriendo las 24 horas del día. Un sitio web también. Imposible estar atento a un potencial ataque durante un fin de semana a la noche.

Al tener todos los últimos rastros de la actividad a nivel general, podemos anticiparnos lo más pronto posible a una intrusión exitosa.

Lo bueno de este plugin es también su simplicidad: no necesita ninguna configuración específica para empezar a andar.

Un par de cambios a sus opciones como, por ejemplo, los permisos de usuario para administrar el plugin, o el límite por defecto de grabación de errores para un mismo URL, bastan para cualquier caso en particular.

WP Security Audit Log es desarrollado por WP White Security.

Configuración de WP Security Audit Log
Configuración de WP Security Audit Log, uno de los tres plugins gratis para la seguridad de WordPress que permite funciones avanzadas de monitoreo

Bloquear números de IP con plugins gratis para la seguridad de WordPress: IP Blacklist Cloud

En combinación con WP Security Audit Log, este plugin permite bloquear los números IP cuyos registros de acceso indiquen ataques posibles. Que pueden ser de fuerza bruta, intentos de subida de archivos ejecutables o envíos de peticiones malformadas a propósito.

IP Blacklist Cloud también usa un modelo freemium, pero las capacidades de la versión gratuita son sorprendentes.

No sólo mantiene una lista de IP individuales sino que para casos extremos puede añadir rangos enteros en el formato 1.0.0.0-1.20.255.255.

Cómo rastrear visitantes con malas intenciones

Lo primero que hay que hacer es añadir el IP propio a la lista blanca, cosa que es recordada de inmediato en la parte superior del Dashboard. Algo muy útil también cuando cambie nuestro número.

Configuración de IP Blacklist Cloud, uno de los tres plugins gratis para la seguridad de WordPress
Configuración de IP Blacklist Cloud, uno de los tres plugins gratis para la seguridad de WordPress que permite bloquear bots malignos

Ahora bien, no es difícil establecer cuándo un IP es malicioso. Si intenta acceder a un recurso inexistente (usualmente bajo wp-content, wp-includes o wp-admin), como este:

GET /wp-includes/js/tinymce/plugins/textcolor/ajax-requests.new.php

o bien a algún otro que correspondería a un plugin (por ejemplo alguna hoja de estilos), sería el caso sin dudas.

El URI escrito arriba es real y no corresponde a ningún fichero del núcleo de WordPress. Era malware tratando de comprobar si el payload que había intentado crear había sido exitoso.

Los pedidos HTTP diseñados por malware

Este tipo de errrores 404 se repiten de manera serial. La realidad es que esa lista de direcciones seguramente proviene de una base de datos utilizada por algún software oscuro en busca de vulnerabilidades conocidas.

Otros casos son menos ambiguos y se explican por sí mismos. Como cuando hay un intento de upload de algún archivo PHP o un pedido POST o GET con basura como datos.

Cualquier número de IP añadido desde la página Add IP to blacklist en el menú (“Añadir IP a la lista negra”) es bloqueado automáticamente, sin demoras.

Lo único que tal vez habría que lamentar es si el número es agregado por error. Porque no hay manera de personalizar el mensaje de salida.

Si es que, eventualmente, llega a haber alguien del otro lado (probablemente no). Un simple “… has sido baneado”, en inglés, es todo.

Menú del Dashboard de IP Blacklist Cloud
Menú del Dashboard de IP Blacklist Cloud, uno de los tres plugins gratis para la seguridad de WordPress que permite bloquear bots malignos

Más características a tener en cuenta

En la sección de Ajustes o Settings del segundo apartado, titulada Failed Login Settings (Auto Blacklist), se puede regular la opción de autobloqueo de IPs que intenten conectarse a la administración.

Esto sucede cuando se falle un número de veces mayor a Maximum attempts (“Número máximo de intentos”). Quizá menos de cinco sea problemático.

El siguiente es un ejemplo real de esta característica. Un agente de usuario ha intentado realizar un ataque por diccionario muy básico.

Dejo los datos casi abiertamente visibles, porque de todas maneras se trata de un IP bloqueado por más de 500 sitios web:

199.15.233.XXX blacklisted on https://kaidanstudio.com due to failed login attempts:
Attempts: 5 (max)
Time for max attempts: 60
Total attempts made: 5
Failed Attempts Details (Max 5)

log => admin
pwd => root
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0
Dec 06, 2016
---------------------------------------------
log => admin
pwd => adminpass
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0
Dec 06, 2016
---------------------------------------------
log => admin
pwd => adminpwd
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0
Dec 06, 2016
---------------------------------------------etc.

Asimismo, se puede incluir un lapso de tiempo de reanudación de acceso al formulario en minutos (60 no está mal). Es para evitar ataques automatizados que envían peticiones varias veces por segundo.

Finalmente, el administrador puede dejar una dirección de email para recibirlos en caso de un evento de autobloqueo.

Aprovechamiento de otros datos acerca de los números de IP

La versión comercial utiliza una característica muy atractiva, que es mantener un repositorio de IPs bloqueados en la nube.

Igualmente, es posible realizar un backup de las listas (aunque no de otros datos) utilizando el apartado siguiente, Import/Export Blacklisted IP and Usernames Database (“Importar/Exportar base de datos de IPs bloqueados y nombres de usuario”). Esto genera un fichero CSV para respaldar y restaurar posteriormente.

La vista general de los IP peligrosos también ofrece columnas con información útil, como la fecha del último ataque o el número de veces que intentaron regresar.

Si por alguna razón surge algún problema con determinados usuarios, sobretodo en instalaciones con muchos de ellos, el plugin también permite denegarles el acceso mediante un User Blacklist. Sólo requiere identificadores válidos de WordPress.

Desbloquear números de IP es igual de importante

IP viejos en IP Blacklist
IP viejos en IP Blacklist, uno de los tres plugins gratis para la seguridad de WordPress que permite bloquear bots malignos

Y puesto que no todo se trata de prohibir, la página llamada Old IPs (Viejos IPs) registra aquéllos que no hayan sido reportados por ningún sitio de WordPress en los últimos tres meses, sugiriendo desbloquearlos.

Esto es tan importante como su acción contraria. No sólo porque loss IP son muy cambiantes, también porque una lista demasiado extensa incidiría negativamente en la eficiencia de la web. La razón es que obliga a hacer una larga comparación compleja con cada petición.

IP Blacklist Cloud es desarrollado por Adeel Ahmed.

Conclusión

Con sólo estas tres herramientas no es posible asegurar por completo una instancia de WordPress, pero en combinación con otras pueden ser un buen punto de partida.

En los tiempos que corren será necesario instalar un firewall (WAF), un filtro antispam y un detector de crawlers mailicosos.

Existen soluciones gratuitas, pero muy profesionales, para cada una de estas áreas. Como por ejemplo Shield, Bad Behavior o Blackhole for Bad Bots.

¡Si esta información te resulta útil, tus comentarios y sugerencias son bienvenidos!

5.03.2018 (26.10.2018)

Suscribite para recibir lo último en Design & WordPress

Dejá un comentario

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

Do NOT follow this link or you will be banned from the site!