Guía antihackeo para WordPress【2019】

«Solo es necesario un segundo para perder la reputación de un proyecto construido durante años». Y es que nadie está a salvo de sufrir una pérdida de datos o un ataque que deje fuera de línea un sitio web o proyecto. Por eso, es tan importante tomar todas las pedidas posibles para proteger tu sitio hecho en WordPress o para poder restablecer su funcionamiento si sucede un imprevisto.

Si eres el administrador de un sitio web, hay muchas medidas fáciles de llevar a cabo con las que puedes hacer tu WordPress mucho más seguro. Para enseñártelas las he dividido en 7 secciones que abarcan tanto el propio WordPress como otros aspectos que afectan a la seguridad: el alojamiento web, la base de datos o el sistema de archivos:


1 - Elegir un alojamiento seguro
2 - Asegurar WordPress
Actualizaciones
Política de contraseñas
Temas y plugins
Modera los comentarios
Desactiva los pingbacks
Desactiva el registro de usuarios
3 - Proteger el escritorio
Escritorio con SSL
Restringir el acceso por IP
Desactivar el API Rest
4 - Proteger los ficheros
Comprueba los permisos de los ficheros
Elimina ficheros innecesarios
Restringir el listado de directorios
5 - Asegurar la base de datos
6 - Protégete de los robots
7 - Copias de seguridad

1. Elegir un alojamiento seguro

El alojamiento web es el elemento básico para cualquier proyecto en Internet. Proporciona un espacio —para los ficheros y la base de datos— dónde guardar toda la información de la página web. A modo de símil, es tu “casa” en Internet.

Así, al contratar un alojamiento web, no solo hay que valorar aspectos como el espacio o la transferencia, hay que tener en cuenta la importancia que dan a la seguridad. Es un aspecto difícil de cuantificar, bien por una falta de conocimiento, o bien por la poca información que ofrecen los proveedores de alojamiento (el casero de tu sitio).

Algunas pistas para saber si tu proveedor se preocupa realmente por la seguridad:

  • Realiza actualizaciones automáticas
    No solo ofrece versiones actualizadas de WordPress y PHP, también mantiene actualizado WordPress, sus temas y plugins.
  • Proporciona certificados de seguridad
    Un certificado de seguridad —el candado verde— sirve para cifrar las conexiones entre los visitantes y el servidor del alojamiento.
  • Usa un WAF (Web Application Firewall)
    Es el cortafuegos que supervisa todo el tráfico del sitio web y bloquea las peticiones que le resultan sospechosas en base a patrones de ataque o vulnerabilidades conocidas.
  • Hace copias de seguridad
    De forma periódica y automáticas. Aunque no son una medida de seguridad en sí misma, sirven para recuperar el funcionamiento del sitio ante un desastre. No tener copias recientes supone la pérdida del trabajo de los últimos días o incluso meses si ocurre un desastre.
  • Registra todas las actividades
    Almacena en un registro todas las llamadas que se hacen a un sitio —en ficheros de log— y, que sirven para averiguar que ha sucedido en la página web y por quién (a través de las direcciones IPs).

2. Asegurar WordPress

La importancia de las actualizaciones

Mantener WordPress, sus plugins y temas actualizados es fundamental para mantener un sitio seguro.

Contraseñas seguras

El ataque de fuerza bruta basado en diccionario —en el que un atacante prueba consecutivamente contraseñas habituales— es el ataque más común que sufre un sitio hecho con WordPress. Y la mejor manera de protegerse es emplear una contraseña considerada fuerte: larga y con símbolos, mayúsculas y números.

Temas y plugins: los imprescindibles

Desinstala los temas y plugins que no uses. Es una medida fácil de llevar a cabo y tiene dos ventajas: Evitas vulnerabilidades que puedan introducir los temas y plugins instalados —aunque no estén activos— y ganarás en rendimiento y velocidad en el sitio.

En general, te recomiendo no sobrepasar el total de 20 plugins instalados y, si no es posible, procura ceñirte a los realmente imprescindibles.

Aprovechando que haces mantenimiento en los plugins, revisa todos los que estén activos. Es posible que alguno ya no te haga falta. En esto caso, lo recomendable es que lo desactives y desinstales.

Para hacerte una idea de como afectan los plugins al rendimiento del sitio instala el plugin P3 (Plugin Performace Profiler). De este modo, puedes evaluar mejor la conveniencia de mantener o desinstalar un determinado plugin.

A la hora de escoger temas y plugins de WordPress confía solo en los plugins del repositorio oficial o de tiendas conocidas.

Ten en cuenta:

  • Escoge temas y plugins del repositorio oficial de WordPress como primera opción.
  • Comprueba la puntuación, los comentarios de los usuarios y el foro de soporte.
  • Revisa el número de versión y la fecha de la última actualización.
  • Verifica que sea compatible con la última versión de WordPress.

Modera los comentarios

Un atacante usa el sistema de comentarios para colocar spam en el propio sitio o para mandar spam a través del sistema de notificaciones por correo electrónico.

Así, es mejor desactivar los comentarios si no los vas a usar. Y si son imprescindibles piensa en moderar los comentarios antes de publicarlos.

En sitios con noticias de actualidad puedes valorar desactivar los comentarios transcurridos 20 o 30 días desde la publicación de la noticia.

Y si por algún motivo se te hace muy laborioso moderar los comentarios, usa Akismet que es un plugin antispam que gestiona automáticamente los comentarios.

Desactiva los pingbacks

En el apartado «Ajustes de comentario» es posible desactivar los pingbacks. Los pingbacks son un tipo de comentario especial que sirve para avisar al autor de un artículo cuando alguien lo enlaza desde otro WordPress.

Conviene desactivarlos ya que un atacante puede usar los pingback para hacer un ataque de denegación de servicio y dejar fuera de línea tu sitio.

Desactiva el registro de usuarios

WordPress permite crear usuarios con distintos roles —administrador, editor, autor, suscriptor—y sus correspondientes permisos. Aunque esta característica esta activa por defecto, muy pocos sitios la necesitan y lo normal es que solo tengan un usuario que es el administrador. En esta situación conviene desactivar el registro de usuarios.

Puedes desactivar el registro de nuevos usuarios desde el escritorio de WordPress. Pulsa en «Ajustes» y luego en «Generales». Comprueba que no esta marcada o desmarca la casilla «Cualquiera puede registrarse».

Protección con cabeceras HTTP

A través de las cabeceras de respuesta HTTP enviadas desde el servidor es posible establecer opciones de seguridad en el navegador del visitante. Es una capa extra de seguridad fácil de realizar.

Algunas de las más importantes:

  • Con la cabecera X-Frame-Options indicas al navegador que no cargue la página si está dentro de iframe.
  • X-Content-Type-Options sirve para indicar al navegador que no cargue los CSS o Javascript que no tengan el tipo MIME correcto.
  • X-XSS-Protection establecer un filtrado XSS que protege a los visitantes del robo de cookies o de información delicada.

Para establecer las 3 cabeceras añade estas líneas al principio del fichero .htaccess:

# Añadir cabeceras de seguridad
<IfModule mod_headers.c>
	Header set X-XSS-Protection "1; mode=block"
	Header always append X-Frame-Options SAMEORIGIN
	Header set X-Content-Type-Options nosniff
</IfModule>

3. Proteger el acceso al escritorio

Escritorio con conexión segura (SSL)

Aunque siempre es mejor proteger todo el sitio con el candado verde, si no fuera posible, al menos configura el escritorio (/wp-admin) para que las conexiones estén cifradas.

Hay que tener en cuenta que para poder usar el certificado de seguridad —SSL— antes debe estar instalado en el alojamiento. El método de instalarlo depende del proveedor de alojamiento. Lo habitual es encontrar una aplicación para la gestión de certificados dentro del panel de control cPanel.

Para comprobar que esta instalado, visita una página por protocolo https. Por ejemplo:

https://example.org/readme.html

O utiliza la herramienta online SSL Server Test para comprobar el estado de certificados SSL.

Revisa los protocolos de seguridad que admite el servidor. Solo debe utilizar TLS v1.2 y TLS v1.3 ya que los anteriores son inseguros. Si la prueba de SSL Server Test indica que utilizas alguna versión de SSL o TLS 1.0 avisa al proveedor de tu alojamiento para que mejore la seguridad.

Aquí te explico las mejoras de seguridad que trae TLS v1.3

Tras comprobar el estado del certificado, añade estas líneas al fichero wp-config.php:

define('FORCE_SSL_LOGIN', true);

define('FORCE_SSL_ADMIN', true);

Restringir el acceso a IPs no autorizadas

Una forma sencilla y efectiva de limitar el acceso al escritorio es permitir el acceso al escritorio solo desde tu conexión a Internet: la de tu casa u oficina.

En este artículo encontrarás como hacerlo usando del fichero .htaccess que tienen los alojamientos web:

Desactivar REST API

El API REST de WordPress es una herramienta pensada para que la utilicen los programadores de temas y plugins aunque no esta muy extendida. Por eso, conviene deshabilitarla a menos que la utilice alguno de los plugins instalados en el sitio.

Más información en este artículo:

Desactivar el api XML-RPC

Los atacantes utilizan el api XML-RPC para hacer ataques de pingback y ataques de fuerza bruta amplificados.

El api está activa por defecto a partir de la versión 3.5 de WordPress y conviene deshabilitarla o limitar su uso.

En este artículo te explico cómo funcionan los ataques de fuerza bruta y como deshabilitar el api:

4. Proteger los ficheros

Comprueba los permisos de los ficheros

Unos permisos de ficheros inadecuados son un riesgo de seguridad importante, sobretodo si estas alojado en un alojamiento compartido, donde hay mas usuarios que no tienen nada que ver con tu proyecto.

Los permisos de los ficheros se pueden revisar y cambiar —si es necesario— usando Filezilla, Cyberduck o cualquier cliente FTP.

Todos los ficheros deben pertenecer a tu usuario —normalmente el usuario con el que te conectas por FTP— y tendrán los permisos 755 para los directorios y 644 para los ficheros. Significa que otorgas permiso completo a tu usuario y permiso de solo lectura al resto.

Para una mayor protección pon permiso 400 a los ficheros wp-config.php y .htaccess que dan a tu usuario permisos de lectura y ninguno al resto. Recuerda que si necesitas editar estos ficheros tendrás que volver a dar permisos de escritura al fichero.

Elimina ficheros innecesarios

La instalación de WordPress deja algunos ficheros innecesarios de los que un atacante puede extraer información valiosa para realizar posteriormente un ataque.

Borra los ficheros readme.html y license.txt que muestran la versión de WordPress instalada en el sitio y el fichero wp-admin/install.php que es un resto de la instalación y sirve para reinstalar el sitio.

Ojo con los archivos de log —el acceso externo debe estar restringido—, los ficheros de prueba y scripts de utilidad. Los atacantes escanean los sitios buscando cualquier archivo que hayas olvidado y que les sirva para obtener más información sobre el sitio.

Un WAF —cortafuegos de aplicación— a nivel de servidor protege el sitio web de muchos de estos descuidos. De ahí la importancia de escoger un buen alojamiento que se tome en serio la seguridad.

Restringir el listado de directorios

Un servidor web mal configurado —en términos de seguridad— permite ver y descargar el contenido de los directorios cuando no existe un fichero índice (index.html o index.php).

En WordPress puedes comprobar si tu sitio permite el listado de directorios visitando la carpeta wp-content/uplodas:

http://example.org/wp-content/uploads

Es habitual que el proveedor del alojamiento haya desactivado el listado de directorios. Aún así, conviene reforzar la protección añadiendo esta línea al fichero .htaccess en la raíz (carpeta public_html/) del sitio:

# public_html/.htaccess
Options All -Indexes

5. Asegurar la base de datos

Cambia el prefijo de la base de datos

Como WordPress es un sistema abierto y conocido, es posible conocer de antemano el nombre de las tablas de la base de datos. Así, sabemos que las tablas más importantes son: wp_users o wp_options. Del mismo modo, un atacante también conoce la estructura de la base de datos y utiliza esta información para hacer modificaciones usando plugins vulnerables a ataques de inyección SQL.

Una técnica para dificultar los ataques de inyección SQL consiste en cambiar el prefijo de las tablas de la base datos. En lugar de usar el prefijo wp_ genera uno aleatorio y único para el sitio, por ejemplo ej3mpl0_.

Puedes cambiar el prefijo durante la instalación de WordPress o usar el plugin Change Table Prefix para un sitio que ya esta instalado.

6. Protégete de los robots

Un fichero robots.txt a medida

Google o Bing guardan mucha información de tu sitio web que utilizan para sus buscadores. El problema viene cuando un atacante utiliza el buscador para encontrar agujeros de seguridad en tu sitio. Estas técnicas se llaman Google Dorks.

Un ejemplo. Este Google Dork sirve para encontrar los ficheros de Database Search and Replace que sirven para modificar la base de datos de WordPress sin estar autorizado.

inurl:searchreplacedb2.php

Para proteger los sitios web surge el fichero robots.txt que sirve para dar instrucciones a Google sobre que debe y que no debe indexar. WordPress no tiene un fichero robots.txt por defecto por eso es importante crear uno a medida de las necesidades de tu sitio.

Puedes basarte en este robots.txt que hemos preparado para proteger nuestros propios WordPress:

7. Copias de seguridad

Las copias de seguridad son un salvavidas —y a veces el último recurso— ante una perdida de datos o un hackeo. Hay que realizarlas con una periodicidad acorde a cada sitio web. Un blog con una o dos publicaciones semanales necesita salvaguardar los datos de forma semanal, mientras una tienda online con pedidos diarios necesita copias diarias o cada pocas horas.

Una copia de seguridad completa consiste en hacer una copia de todos los ficheros desde la raíz del sitio y de la base de datos. Aunque para la mayoría de los casos solo es necesario copiar las carpetas que son propias de cada sitio web:

  • Imágenes (wp-content/uploads)
    Es la carpeta donde están almacenadas las imágenes y todo el contenido multimedia del sitio.
  • Temas (wp-content/themes)
    Que contiene los temas instalados en el sitio. Las modificaciones son menos habituales pero es importante tener copias ya que puede ser un tema comprado o tener personalizaciones de código.
  • Plugins (wp-content/plugins)
    Es la carpeta donde están los plugins ya procedan del repositorio oficial o comprados.

Algunos proveedores ofrecen copias de seguridad al contratar un alojamiento. Es importante conocer con que periodicidad, durante cuanto tiempo almacenan las copias y como es posible recuperarlas. Hoy, lo habitual es que el proveedor ofrezca una copia diaria, otra semanal y una mensual que, para algunos sitios con publicaciones frecuentes resulta insuficiente.

Si es tu caso, o quieres gestionar por ti mismo las copias de seguridad puedes ayudarte de plugins de copias de seguridad para WordPress:

  • BackUpWordPress
    Es rápido —tarda solo unos minutos en un sitio de varios cientos de megas— y esta pensado para que pueda funcionar en alojamientos compartidos.
    Las copias están almacenadas en el propio alojamiento —en la carpeta /wp-content/backups— que resulta un inconveniente si es el propio alojamiento el que tiene problemas.
  • UpdraftPlus
    Surge para evitar el problema de almacenar las copias en el propio alojamiento, ya que pueden resultar inaccesibles si el alojamiento tiene problemas y ocupan mucho espacio. La solución de Updraft es realizar las copias de seguridad en la nube: Dropbox, Google Drive o Amazon S3.
  • All-in-One WP Migration
    Aunque es utilizado para hacer migraciones también sirve para hacer copias de seguridad. Ten en cuenta que para utilizar la versión gratuita tu sitio debe estar por debajo de los 512Mb.

Una vez hechas las copias —y dada su importancia— comprueba periódicamente que se están realizando y son correctas.

Ahora ya sabes cómo mejorar la seguridad de WordPress para proteger tu sitio y proyecto.

César Maeso


Creative Commons License

Esta obra está bajo una licencia de Creative
Commons Reconocimiento-NoComercial-CompartirIgual
4.0 Internacional
.