lunes, septiembre 15, 2014

WPHardening: Automatizar la Fortificación de WordPress

La seguridad en WordPress es un tema más que importante hoy en día. Constantemente vemos bugs en plugins como el RFU de MailPoet o el 0day de TimThumb que ponen en riesgo las instalaciones de estos frameworks. Pero no solo eso, hay ataques de fuerza bruta contra WordPress, ataques de elevación de privilegios en WordPress, fallos de privacidad con la indexación de borradores, configuraciones inseguras que permiten el registro de usuarios, configuraciones inseguras que permiten listar los plugins instalados y un montón más de exploits conocidos para atacarlos.

Figura 1: WP Hardening ayuda a mejorar la seguridad de tu WordPess

Cada instancia de WordPress, una vez implantada, puede ser fortificada - igual que se fortifica el servidor Linux donde se esté ejecutando - cambiando permisos, borrando archivos de instalación, cambiando configuraciones o instalando plugins de seguridad.

WPHardening es una herramienta creada en Python, bajo licencia libre GNU/GPLv3, con la idea de no ser un plugin como tal de este framework, de esos que estamos acostumbrados a instalar y que en muchos casos extienden su funcionalidad. Es una herramienta de auditoria diseñada con la idea concreta de poder automatizar la eliminación de archivos innecesarios, dar recomendaciones de plugins de seguridad, aportar un asistente para la creación del archivo de configuración y algunas cosas más que paso a contaros.

¿Que se puede hacer con WPHardening?

Está diseñada como una herramienta de consola, con el objetivo de ser versátil y que pueda ser utilizada con diferentes argumentos de invocación - con los que se podrán realizar diferentes acciones - y desde diferentes scripts automatizados en procesos completos de cumplimientos de seguridad.

Figura 2: WPhardening en su GitHub

Para comenzar a utilizar esta herramienta, lo primero que vamos a hacer es descargar WPHardening desde su repositorio en GitHub de la siguiente manera:

$ git clone https://github.com/elcodigok/wphardening
Cloning into 'wphardening'...
remote: Counting objects: 534, done.
remote: Total 534 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (534/534), 121.84 KiB | 93 KiB/s, done.
Resolving deltas: 100% (370/370), done.


$ cd wphardening/

Ahora vamos a necesitar tener descargado y descomprimido en algún directorio de nuestro equipo una versión de WordPress, hasta la fecha de hoy se recomienda la última versión estable 4.0 llamada “Benny”  y que fue liberada hace unos días. En estos ejemplos, la copia de WordPress 4.0 que hemos descargado está en el siguiente PATH:

/home/cspammers/wordpress

Con estos dos componente ya podemos utilizar WPHardening y automatizar su fortificación sin necesidad que el framework de WordPress se encuentre instalado o esté en ejecución dentro del servidor.

Para obtener ayuda sobre la herramienta y cuáles los parámetros que podemos utilizar hay que ejecutar:

$ ./wphardening.py -h

El único flag obligatorio es ( -d ) donde se indica el PATH en el que se encuentra la instancia de WordPress previamente descargado. Haciendo uso de este único argumento podemos validar que realmente sea un proyecto de WordPress. Se hace de la siguiente manera:

$ ./wphardening.py -d /home/cspammers/wordpress -v

Si no se especifica ningún archivo de Log para guardar los resultados salida con la opción ( -o ), todos los cambios van a ir almacenándose en el archivo wphardening.log de esa forma vamos a poder seguir todo lo que se fue ejecutando.

Para evitar el síndrome 777 en donde el usuario regala permisos a los archivos y directorios, wphardening tiene la posibilidad de hacer un control de permisos de seguridad adecuado utilizando la opción -c ó --chmod. Este sería un ejemplo de uso para mejorar los permisos de los archivos de WordPress:

$ ./wphardening.py -d /home/cspammers/wordpress --chmod

En cada proyecto que utilizamos de WordPress podemos encontrar archivos de documentación o presentación como son los ficheros de readme.html o de licencias que son muy utilizados en fases de fingerprinting para detectar la versión exacta de nuestra instalación, rutas dentro del servidor y hasta posibles configuraciones inseguras. Para evitar tener que ir eliminando manualmente todos estos archivos dentro de un proceso de fortificación, podemos utilizar la opción -r o --remove con WPhardening:

$ ./wphardening.py -d /home/cspammers/wordpress --remove

Figura 3: Ejemplo de borrado de archivos de licencia e información en WordPress

Para dificultar aún más los procesos de fingerprinting se puede eliminar la versión de WordPress de todos los lugares en los que se encuentra y con ( -f ) las marcas buscadas por las herramientas populares de scanning de WordPress, para ello se puede utilizar las opción de ( -v es el modo verbose ):

$ ./wphardening.py -d /home/cspammers/wordpress --delete-version -f -v

También es posible crear y personalizar el archivo robots.txt en donde le indicamos a las arañas de los motores de búsqueda cuáles los límites y permisos que vamos a asignar usando la opción -b o --robots:

$ ./ wphardening.py -d /home/cspammers/wordpress --robots

En este último tiempo la libreria TimThumb, una de las más usadas para manipular imágenes en PHP fue vulnerada en varias oportunidades. El problema radica en que los usuarios no acostumbran a actualizarla cuando esta incluida en su tema del sitio, por lo que wphardening cuenta con un diccionario de búsqueda para alertar al usuario sobre la existencia del mismo:

$ ./wphardening.py -d /home/cspammers/wordpress --timthumb -v

Una herramienta que se incorporó en estas últimas versiones es la posibilidad de contar con un asistente para la creación del archivo de configuraciones wp-config.php, que va a generar un archivo llamado wp-configu-wphardening.php para que sea renombrado en la instalación. Esto se puede activar de la siguiente manera:

$ ./wphardening.py -d /home/cspammers/wordpress --wp-config

La popularidad de WordPress llegó por la gran facilidad que tiene para extender sus funcionalidades y crear los plugins. Es por ello que desde WPHardening recomendamos varios plugins específicamente de seguridad, tales como: AntiVirus, Bad Behavior, Block Bad Queries, Exploit Scanner, Latch, Limit Login Attempts, One-Time Password, UPDATE NOTIFICATIONS, User Locker, WordPress File Monitor Plus, WP Login Security 2, WP Security Scan y WP-DBManager.


Figura 4: Vídeo Tutorial de integración de Latch para WordPress.
También puede ser usado para gestionar muchos WordPress con un solo Latch.

Para comprobar si puedes mejorar la seguridad de tu WordPress con alguno de ellos puedes usar la siguiente opción:

$ ./wphardening.py -d /home/cspammers/wordpress --plugins

Finalmente, en caso que nuestro servidor acepte la navegación entre sus directorios, podemos crear - con un solo comando - todos sus archivos index.php y una directiva en el archivo .htaccess para evitar que alguien liste el contenido de alguno de nuestros directorios:

$ ./wphardening.py -d /home/cspammers/wordpress --indexes

Dijimos al principio, que WPHardening es una herramienta muy versátil que nos va a permitir ejecutar la cantidad de opciones previas a una instalación o actualización, por lo cual podríamos llegar a combinar todos sus argumentos de la siguiente manera:

$ ./wphardening.py -d /home/cspammers/wordpress -c -r -b -f -t --wp-config --delete-version --plugins --indexes -o wordpress4.log -v

Conclusiones

WPHardening es un proyecto muy joven, en una fase muy temprana, pero que está siendo cuidado con mucho cariño e ilusión, por lo que aceptamos cualquier sugerencia o idea de mejora. Están todos invitados a colaborar y probar WPHardening, reportar fallos o cambios desde el repositorio en GitHub, para que puedan seguir creciendo con mejoras y nuevas funcionalidades. Ya estamos comenzando a ver que es lo nuevo para su version 1.4 así que cualquier idea será bienvenida.

Saludos!

Autor: Daniel Maldonado (@elcodigok)
http://caceriadespammers.com.ar

5 comentarios:

Anónimo dijo...

Muy interesante.
Quizás algo parecido para Joomla! algún día? :)
Un saludo

Daniel Maldonado dijo...

Quizas algún día pero no con el nombre de wphardening

Adastra dijo...

Estupendo trabajo Daniel, he estado mirando por encima el código de tu proyecto y lo he visto muy currado, Enhorabuena!.
Lo único que te podria "recomendar", si me lo permites, es que en lugar de utilizar el "OptionParser" para crear grupos y una infinidad de "if" para el parseo de las opciones, utilices una librería que sea más idiomatica o como suelen decir los desarrolladores de Python, más "Pythonic", siguiendo un poco la filosofia/Zen de python con respecto a la simplicidad. En ese sentido, una librería como Plumbum (http://plumbum.readthedocs.org/en/latest/cli.html), puede ser de gran ayuda.
Poco más podria agregar.
De verdad, muy buen trabajo!

Daniel Maldonado dijo...

Adastra muchas gracias por tu recomendación Zen voy a ponerme a leer para luego mejorar esa implementación!

Daniel dijo...

Hola, me gustaría agradeceros todo lo nos estáis enseñando acerca de seguridad en el despliegue de blogs que teneis.
Hace 1 semana que leí este artículo y una de las cosas que hace este programa de fortificación de wp (entre otras muchas) es borrar los archivos readme.txt para que estos no puedan ser infectados. Tengo latch instalado en mi dominio y, para mi sorpresa, esta mañana he recibido el siguiente mensaje del plugin de defensa que corre en mi sitio: This email was sent from your website "Mi Dominio" by the Wordfence plugin. Wordfence found the following new issues on "Mi Dominio". Alert generated at Saturday 10th of January 2015 at 08:05:38 AM Warnings: * Modified plugin file: wp-content/plugins/latch/readme.txt NOTE: You are using the free version of Wordfence. Upgrading to the paid version of Wordfence gives you two factor authentication (sign-in via cellphone) and country blocking which are both effective methods to block attacks.
Como sólo soy un aficionado a la informática y no se "ponerme guantes" para tratar con archivos infectados, lo más probable es que termine borrando el archivo txt que ha sido modificado. Quería comentarlo aquí por si conocéis la causa de esto o por si borrarlo podría suponer una oportunidad perdida para ver como ha sido infectado (si es que lo ha sido).
Gracias de nuevo y un saludo.

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares