Securizando WordPress

Como bien sabéis, los sistemas de gestión de contenidos (CMS) son cada vez más utilizados para la elaboración de páginas y blogs tanto personales como corporativos. Estos sistemas permiten mantener una página actualizada sin tener conocimientos avanzados de programación web, y pudiéndose instalar en un servidor de manera fácil y rápida. Uno de los sistemas más extendidos es WordPress. WordPress es un gestor de contenido libre, diseñado especialmente para gestionar blogs, y que contiene multitud de plantillas personalizables. Además destaca por su facilidad de uso, que permite que cualquier persona sea capaz de mantener actualizada la página en pocos pasos.

Hay dos opciones para utilizar WordPress. La primera de ellas es un servicio a través de la página wordpress.com y donde fácilmente cualquier persona puede crear su propio blog. La otra opción es instalarse la aplicación en un servidor propio o en un servicio de hosting. Son muchas las ventajas que podemos obtener al instalar un gestor de contenidos como WordPress en nuestro servidor, pero también son muchos los riesgos a los que nos exponemos. No han sido pocas las vulnerabilidades que se han ido encontrando en las diferentes versiones de WordPress, y muchas las personas que intentan sacar provecho de esas vulnerabilidades ya sea para insertar código malicioso, para obtener información o simplemente como un reto para ver de que son capaces de hacer.

Por tanto es conveniente tomar una serie de medidas para prevenir posibles ataques. Hace unos meses, desde CSIRT-cv INTECO ofrecían una guía bastante completa con una serie de recomendaciones y que os animamos a leer. Pero en este post queremos añadir alguna medida y resaltar alguna de las que en esa guía ya nos recomendaban nuestros compañeros del CSIRT, teniendo no obstante en cuenta que no son las únicas medidas a aplicar.

1. La primera es la más obvia y en la que siempre se hace especial hincapié, pero a la vez una de las más importantes, es la de mantener actualizada la versión de WordPress ya que el equipo de desarrollo del sistema va solucionando las vulnerabilidades que se van encontrando y además mejorando las funcionalidades del gestor. El principal problema en este caso es el tiempo y problemas que generan las actualizaciones del wordpress, cuyo proceso, a pesar de haber mejorado mucho a lo largo de los últimos años, no puede realizarse mediante el típico “siguiente-siguiente” o también conocido como guía-burros. A eso hay que añadir los aspectos de compatibilidad con plugins, por lo que aunque es un proceso totalmente recomendable y necesario, puede no ser trivial.

2. Cambiar el directorio web por defecto donde nuestro sistema carga los ficheros. Generalmente el directorio es httpdocs pero en algunos sistemas se permite cambiarlo. Para esto habría que cambiar los ficheros manualmente de directorio y después cambiar en el servidor la ruta del directorio principal de ese dominio en cuestión.

3. Otra medida es la de cambiar los puertos por defecto del servidor, tanto el FTP (por defecto 21) como el de SSH (por defecto 22). Esto no afecta solo a WordPress sino que es una medida que influye a todo el servidor pero que previene ataques automatizados.

4. Por otro lado también es posible extraer el directorio wp-content del directorio de la aplicación WordPress. En wp-content es donde se encuentran los temas, plugins y ficheros propios del blog. En http://codex.wordpress.org/Editing_wp-config.php#Moving_wp-content_folder se pueden encontrar los cambios que hay que hacer si queremos aplicar esta u otras medidas. Pero básicamente consiste en insertar estas líneas en el fichero de configuración wp-config.php:

define( 'WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] . '/blog/wp-content' );
define( 'WP_CONTENT_URL', 'http://example/blog/wp-content');
define( 'WP_PLUGIN_DIR', $_SERVER['DOCUMENT_ROOT'] . '/blog/wp-content/plugins' );
define( 'WP_PLUGIN_URL', 'http://example/blog/wp-content/plugins');
define( 'PLUGINDIR', $_SERVER['DOCUMENT_ROOT'] . '/blog/wp-content/plugins' );

5. Otra de las medidas a implantar es cambiar el prefijo con el que se crearán las tablas de la base de datos de WordPress. Por defecto es WP_, por lo que si no se cambia se corre el riesgo de sufrir ataques de inyección de código.

Además de estas recomendaciones, os remitimos a la guía que como hemos comentado al principio del artículo publicó el CSIRT-cv y donde se completan algunas de estas medidas y se comentan muchas otras que pueden hacer que nuestro WordPress sea menos vulnerable y evitarnos así más de un disgusto.

Si tenéis otras medidas o consejos que pueden ayudar a proteger un sistema WordPress, os invitamos a que las escribáis en los comentarios.

Comments

  1. Yo recomiendo cambiar el sitio completo de instalación y cambiar el archivo .htaccess de WordPress.
    Por ejemplo, si realizamos la instalación del WordPress bajo un directorio llamado wordpress, en lugar de directamente bajo “/htdocs”, añadiremos el siguiente grupo de líneas al “.htaccess”

    [code]
    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /wordpress/
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /wordpress/index.php [L]

    # END WordPress
    [/code]

  2. Muy buenas noches a todos,

    En mi experiencia, el problema principal con WordPress es la actualización tanto del core como de los distintos plugins que los usuarios instalan.

    WordPress como tal tiene una gestión bastante razonable de sus vulnerabilidades (detección, tiempo de resolución, etc…), pero no se puede decir lo mismo de los plugins, en los que como en botica … hay de todo. Y si tenemos en cuenta además que muchos plugins están hechos “de andar por casa”, no es de extrañar que se produzcan de cuando en cuando incidentes graves en los blogs de WordPress.

    Mi consejo fundamental: core y plugins actualizados. Al día. Y para ello la salvación es este pluging: Automatic Updater for WordPress (http://pento.net/projects/automatic-updater-for-wordpress/). Se encarga de detectar e instalar automáticamente nuevas versiones tanto de WordPress como de los plugins (que es lo realmente importante). Y además, te avisa por correo cuando realiza una actualización, por lo que es un verdadero salvavidas (yo lo tengo como obligatorio para instalar en todos los WordPress que administro).

    En segunda derivada, podríamos discutir acerca de cuándo o no instalar un plugin. Una de las mayores ventajas que tiene WP es que a día de hoy, hay plugins para prácticamente todo. Y gratis. El problema es que no todos están programados en condiciones … y luego pasa lo que pasa. Yo recomendaría antes de instalar un plugin el buscar el número de versión, el número de descargas y ojear un poco al autor para intentar estimar la calidad del plugin.

    Y como extra, os adjunto otra guía muy completa para bastionar WP:

    http://build.codepoet.com/2012/07/10/locking-down-wordpress/

    Un saludo,

    Antonio Sanz
    I3A – Universidad de Zaragoza

  3. Gracias a los dos por las ideas y las referencias.

    El principal problema que yo veo con WordPress, después de unos años de trabajar con este blog, es el proceso de actualización a una nueva versión, que aunque no sé cómo ha evolucionado en los últimos tiempos (en la última migración no intervine), en su día tenía cierta complejidad.

    Esto evita muchas veces que el usuario se plantee actualizar por todas las molestias que ello implica, aun asumiendo que pueden existir problemas de seguridad o carencias funcionales.

  4. Gracias HenryGR y Antonio por vuestros comentarios y sugerencias.

    Antonio, respecto a los plugins tienes toda la razón. Lo que ocurre es que en muchas ocasiones los usuarios de WordPress se fijan más en la funcionalidad que les puede dar un determinado plugin que en la seguridad, asumiendo los riesgos que pueda producir el tenerlo instalado.

    Manolo, respecto a las actualizaciones de WordPress últimamente yo no he tenido ningún problema haciéndolas con la herramienta automática, que además facilita mucho la actualización.

  5. Oye Antonio gracias por la info del plugin…lo acabo de instalar y menuda pasada, tiene muy buena pinta

  6. Muy buenas noches a todos,

    Y como ando preparando un taller de Seguridad en WordPress, os paso un feed de vulnerabilidades que he cocinado con Yahoo Pipes y unos cuantos sitios de exploits/advisories:

    http://pipes.yahoo.com/pipes/pipe.run?_id=265f2ecf5399cf75829c62dfb6ccb8a8&_render=rss

    Un saludo,

    Antonio Sanz
    I3A/Universidad de Zaragoza

  7. Una opción muy interesante para hacer más seguro un sitio mantenido con WordPress sería prescindir de la ejecución de PHP en el sitio de producción (sí, digo bien), albergándolo como contenido estático en una CDN y manteniendo toda la dinámica del sitio sólo con JavaScript y la inclusión de widgets de terceros (por ejemplo, Disqus para los comentarios).

    No lo he probado, pero si algún valiente se ha atrevido y nos cuenta su experiencia será curioso.

  8. Hola, en primer lugar felicitarte por el artículo, está muy bien. Sólo añadiría un par de cosas:

    1) A lo de cambiar los puertos por defecto del FTP y SSH, añadiría alguna técnica de Port-Knocking, levantando los servicios sólo cuando sean necesarios, y parándolos con una combinación de “llamada” a puertos.

    2) Proteger el acceso del wp-login.php (admin) por franjas horarias. Mediante mod-rewrite y htaccess se puede hacer fácilmente.

    Seguro que hay más cosas que añadir, pero es lo que se me ha ocurrido después de leer el artículo.

    Un saludo a todos y enhorabuena por el blog!

  9. Gracias a todos por seguir aportando valor a este artículo con vuestros comentarios.

    Antonio el feed que has aportado es una buena herramienta para estar al día de las vulnerabilidades de la plataforma. Gracias.

    laProbeta, desconocía la opción que comentas. Puede ser una opción interesante, pero que probablemente variaría toda la estructura de WordPress. Las otras medidas comentadas aquí son más “superficiales” y me atrevería a decir que menos complejas, pero considero que bastante efectivas también. De todos modos si alguien se atreve a probarlo que cuente la experiencia que seguro que es más que interesante.

    Miguel A. Arroyo, gracias a ti por las aportaciones. Son dos medidas que sin duda añaden más seguridad a WordPress.

  10. Muy buenas tardes a todos,

    Lo prometido es deuda … así que aquí tenéis tanto las slides como un Google Docs con una buena cantidad de enlaces de seguridad en WordPress:

    http://www.slideshare.net/ansanz/seguridad-wordpress-22549797

    https://docs.google.com/spreadsheet/ccc?key=0AlPapENd2rJydGNIQVdWUjhqQ2ctVkYwZU5oOE42TFE#gid=0

    Un saludo,

    Antonio Sanz
    I3A/Universidad de Zaragoza

  11. De nuevo, muchas gracias Antonio por tu comentario. Muy interesante tanto la presentación como el documento con enlaces sobre seguridad de WordPress. Estoy preparando un nuevo post con la información que habéis dejado en los comentarios (que es mucha y muy valiosa) y alguna cosa más para ponerlo al alcance de más gente.
    Gracias de nuevo por vuestra aportación.

    Un saludo.

  12. Enhorabuena por el artículo. Yo recomendaría emplear wphardening ( http://www.caceriadespammers.com.ar/2013/04/wphardening-1-0.html ) que automatiza el proceso aplicar algunas de las medidas expuestas por vosotros. Un saludo

Trackbacks

  1. […] Accede al artículo original para que puedas leer los comentarios. MeneameBitacorasciencialinksDeliciousGoogle BuzzFacebookTwitter Este artículo fue publicado en CMS, El desvan por Taranis. Enlace permanente. […]