Inicio » Blog

El peligroso e irreparable daño de los “mágicos” plugins de WordPress/ Joomla y OsCommerce25, Oct

Actualmente, los sistemas de diagramación y orden web llamados CMS, nos ofrecen innumerables oportunidades si hablamos de agregarle pequeñas regalías que mostrarán a nuestros clientes un sitio ideal y con toda la tecnología actual del mercado. Pero ¡Cuidado!, no todo lo gratuito es bueno, podemos encontrarnos con bastantes Plugins que contiene material malicioso y peligroso para nuestro sitio web y seguridad personal en la red. Hoy te comentamos un poco de como protegernos de estos ataques que nosotros mismos podemos provocar en unos de CMS más preferidos como lo es WordPress

¿Cómo incrementar la seguridad de WordPress en 10 pasos?

1.- Cambiar el prefijo de las tablas

Al momento de empezar el proceso de una nueva instalación de WordPress, es necesario hacer algunas ediciones en el archivo wp-config.php, el cual, como su nombre lo indica, contiene parámetros de configuración que permitirán la correcta implementación y posterior funcionamiento del CMS.

Entre las ediciones que se deben hacer, se nos solicita indicar un prefijo para las tablas que se crearán en la base de datos, las cuales contendrán toda la información relativa a nuestros artículos, comentarios de los usuarios, opciones y más.  Por defecto, WordPress nos indica el prefijo wp_, el cual a pesar de que se nos recomienda cambiar, mucha gente opta por dejarlo, teniendo como resultado tablas en la base de datos como: wp_comments, wp_options y más.

Está demás decir que este prefijo se debe cambiar por alguna cadena de texto aleatoria que decidamos (por ej: iehr23_). Esto hará más difícil el acceso a posibles atacantes, ya que al asumir que hay un prefijo por defecto definido como wp_, existen hoy en día múltiples scripts preparados para detectar esa falla de seguridad.

Ahora, lo importante, ¿Cómo cambiarlo?

  1. a) Previo a la instalación de WordPress:

Es el caso más sencillo. Tan simple como ir al archivo wp-config.php (en caso de que recién hayamos descargado, es wp-config-sample.php que posteriormente se renombra a wp-config.php) donde veremos aproximadamente en la línea 56:

texto planocopiar codigoimprimir?

  1. $table_prefix = ‘wp_’;

$table_prefix = ‘wp_’;

Y cambiar wp_ por la cadena que hayamos ideado. Por ej, si nuestra cadena fuera iehr23, lo dejaríamos como:

texto planocopiar codigoimprimir?

  1. $table_prefix = ‘iehr23_’;

$table_prefix = ‘iehr23_’;

Y luego seguimos con el proceso normal de instalación.

  1. b) Posterior a la instalación de WordPress:

Este proceso es un poco más largo, pero no presenta una gran dificultad, por lo que si es su caso, recomendamos seguirlo.

Ya que nuestra instalación de WordPress está completa y corriendo, debemos hacer varias ediciones para asegurarnos de que todas las referencias al prefijo por defecto sean cambiadas al nuevo que vamos a definir.

  1. Al igual que para el caso previo a la instalación, debemos editar la misma línea del archivo wp-config.php, pero en este caso el que ya está arriba en nuestro hosting corriendo y hacer el cambio del prefijo por el nuevo.
  2. Luego, debemos acceder a nuestra base de datos (a través de un interfaz de administración, como por ejemplo phpMyAdmin)y debemos renombrar todas las tablas que contienen el prefijo wp y cambiarlos al nuevo. Por ejemplo, la tabla wp_comments pasaría a ser iehr23_comments si elegimos ese prefijo como nuevo.
  3. A continuación, debemos entrar a editar valores en la tabla wp_options (que ya a este punto debe estar con el nuevo prefijo)y buscar en el campo option_name el valor wp_user_roles y cambiarlo a nuestro nuevo prefijo, o sea, para el caso del ejemplo sería iehr23_user_roles.
  4. Y finalmente debemos entrar a editar valores en la tabla wp_usermeta(o iehr23_usermeta si ya cambiamos los prefijos) y buscar en el campo meta_key los valores wp_autosave_draft_idswp_capabilities y wp_user_level y cambiarlos por los nuevos prefijos, o sea, para el caso del ejemplo serían: iehr23_autosave_draft_idsiehr23_capabilities e iehr23_user_level. En algunos casos encontrarán también en la misma tabla otros valores con el prefijo wp. Asegúrense de cambiarlos al nuevo prefijo.

Y listo. Así de simple.

  1. c) Automatizando el proceso:

Si nos complica mucho hacer los cambios de forma manual, la gente de BlogSecurity ha creado un plugin que se encarga de llevar a cabo todo el proceso. Este plugin se llama WP Prefix Table Changer.

2.- Accesos a la base de datos

Un aspecto que por lo general se descuida mucho, pero que es de tremenda importancia. Para acceder a la base de datos donde tenemos nuestra instalación de WordPress, es necesario contar con un usuario, el cual a su vez tiene una serie de privilegios para operar sobre ella (crear tablas, insertar datos, seleccionar, actualizar, eliminar, etc.), con el fin de poder cumplir los procedimientos básicos de WordPress, como la creación y despliegue de artículos, recepción de comentarios y más.

Es de tremenda importancia que a este usuario le dejemos habilitados solo los privilegios necesarios y nada más que eso. De la misma manera, el usuario debiese tener acceso solo a la base de datos donde tenemos nuestra instalación de WordPress y no a otras que pudiesemos tener (en caso de que nuestro proveedor de hosting nos entregue múltiples bases de datos o schemas).  La razón de esto es que si tenemos una vulnerabilidad que le permita a un atacante acceder a la base de datos con ese usuario, no solo afectará la base de datos correspondiente a WordPress, si no que pudiese afectar otros proyectos que tuviésemos alojados ahí, haciendo el daño mucho mayor.

De la misma forma, nunca, pero nunca debemos dejar el usuario root para nuestra instalación de WordPress, ya que el por defecto tiene accesos y privilegios para hacer cualquier cosa. Siempre debemos crear un nuevo usuario y restringir sus privilegios.

En caso de que se nos permita tener un solo usuario en nuestro sistema de gestión de bases de datos, con que habilitemos los siguientes permisos basta y sobra:

  • Para manipulación de datos:SELECT, INSERT, UPDATE, DELETE.
  • Para definición de datos:CREATE, ALTER, DROP.

Ahora, si es que nuestro proveedor de hosting nos permite crear múltiples usuarios, lo que podemos hacer es habilitar uno nuevo para tareas rutinarias y habilitarle los siguientes permisos:

  • Para manipulación de datos:SELECT, INSERT, UPDATE, DELETE.
  • Para definición de datos:

Y luego cambiamos el usuario en el archivo wp-config.php. Ojo que este usuario nos limitará la creación de tablas, por lo que si implementamos algún plugin que requiera crear una nueva tabla en la base de datos, deberemos habilitar el privilegio.

Para manejar nuestros usuarios, debemos acceder a algún interfaz de administración como phpMyAdmin y dirigirnos a la pestaña Privilegios, en donde podremos definir todo lo anteriormente descrito.

3.- Eliminar archivos de instalación

Hemos comentado en numerosas ocasiones lo sencillo que es hacer una instalación de WordPress. Mediante su interfaz, solo agregando algunos datos podemos contar con nuestro CMS implementado y funcional en solo minutos.

No obstante, posterior a la instalación, normalmente dejamos los archivos de instalación ahí, en nuestro servidor, lo cual puede provocar fallas de seguridad. Por ende, una vez que tengamos nuestro sitio corriendo, es bueno quitarlos, con la ayuda de algún cliente FTP y dirigiéndonos al directorio wp-admin, en donde debemos eliminar los siguientes archivos:

  • php
  • install-helper.php
  • php

4.- Cambiar el usuario por defecto

Al instalar WordPress, se nos crea un usuario por defecto (admin), el cual tiene todos los privilegios habilitados para administrar la plataforma por completo. Al igual que en el caso de los prefijos, al ser un usuario por defecto, es tremendamente vulnerable para scripts automatizados, tanto por su nombre como por su id (el cual siempre es 1). Es por esto que es tremendamente recomendable habilitar un nuevo usuario con privilegios de administración y eliminar este usuario admin, con el fin de no caer en las vulnerabilidades antes indicadas.

En caso de que tengamos una instalación de WordPress  andando y ya hayamos utilizado el usuario admin para publicar artículos y/o comentarios, luego de crear el nuevo usuario, debemos actualizar las tablas wp_posts y wp_comments y cambiar los id por el nuevo.

5.- Elección de contraseñas

Algo que va mucho más allá de WordPress, pero de la misma forma aplicable. Creo que nunca se puede hablar lo suficiente de la importancia de definir contraseñas fuertes y dificiles de descifrar. Hace algún tiempo una importante red de medios sufrió un ataque debido a que sus principales administradores poseían contraseñas débiles y que además utilizaban en otros servicios, lo que hizo que los ataques sufridos las descifraran de manera bastante sencilla.

Es por esto que hay que poner especial cuidado al momento de definir las contraseñas para nuestros usuarios. Algunos tips importantes para tener en consideración:

  1. No repetir la contraseña con la que usemos en otros servicios.
  2. Definir una cadena de texto de mínimo 8 a 10 caracteres.
  3. Mezclar letras y números.
  4. No utilizar palabras fácilmente reconocibles en algún lenguaje.
  5. No utilizar palabras relacionadas al nombre de usuario, nombre del blog o contenido.

Adicionalmente, debemos preocuparnos de cambiar las contraseñas de forma frecuente.

Un buen consejo es utilizar algún servicio como The Password Meter , el cual nos informará sobre la seguridad de nuestra contraseña y los aspectos de ella que la hacen vulnerable.

6.- Usuarios independientes para publicar y administrar

Ya que hemos hablado bastante de los usuarios y sus accesos, es importante recordar que WordPress nos permite definir roles y privilegios para cada uno de ellos. Desde el más bajo (suscriptor) hasta el más alto (administrador), cada uno de ellos tiene distintos accesos y se les permite diferentes funcionalidades.

Considerando que el usuario que utilizamos para publicar está expuesto y puede ser visto facilmente por todos aquellos que visitan nuestro sitio, es importante que este no tenga accesos como administrador y que solo tenga los permisos necesarios para publicar. Así, en caso de que este usuario sea utilizado como base para algún tipo de ataque, es posible limitar el daño que finalmente se haga.

Por otro lado dejamos un usuario administrador para tareas de mantención en el sitio, el cual no es conocido ni visto publicamente por nuestros visitantes.

Un plugin muy útil para hacer esto es Role Manager, el cual además de fijar niveles, nos permite añadir o quitar privilegios a cada usuario de forma independiente.

7.- Restringir accesos a wp-admin, wp-content y wp-includes

Los tres directorios principales de WordPress son wp-admin, wp-content y wp-includes, ellos manejan tanto el aspecto de administración, como las plantillas, plugins y archivos necesarios para el funcionamiento normal del CMS.

Por ende, es importante restringir el acceso a ellos y solo habilitar lo que sea necesario, para así impedir que estos puedan ser vistos por usuarios malintencionados.

  1. a) Restringiendo el acceso a wp-admin:

Aquí se puede aplicar una utilidad muy buena, en caso de que tengamos acceso a Internet mediante una IP fija (todo depende del método que utilice nuestro proveedor de servicios de Internet), ya que podemos bloquear el acceso a este directorio a todas las direcciones IP excepto la nuestra, solo añadiendo lo siguiente a nuestro archivo .htaccess:

Order deny, allow
Allow from 127.0.0.1
Deny from all

Reemplazamos 127.0.0.1 por nuestra IP Pública y eso restringirá el acceso a cualquier dirección IP que no sea la nuestra.

  1. b) Restringiendo el acceso a wp-content y wp-includes:

Otra restricción que podemos habilitar es a nuestros directorios wp-content y wp-includes, los cuales contienen nuestra plantilla, plugins y otros archivos de importancia para el funcionamiento normal de WordPress. Mediante una pequeña restricción en el .htaccess podemos definir que se limite el acceso a los directorios y que solo se acepten peticiones por cierto tipo de archivos, como hojas de estilo, imágenes y scripts de Javascript, los que serán requeridos para mostrar la plantilla.

Para esto, deberemos crear un archivo .htaccess dentro de cada directorio en el cual incluiremos:

Order Allow,Deny
Deny from all
<Files ~ “.(css|jpe?g|png|gif|js)$”>
Allow from all
</Files>

8.- Restricciones de autentificación

Junto a lo anterior, también es posible realizar restricciones y exigir una autentificación adicional para poder acceder a ciertos directorios, como wp-admin. Esto lo haremos creando 2 archivos, un .htaccess que ubicaremos dentro de wp-admin y un .htpasswd que ubicaremos en algún directorio fuera de la raíz de nuestro sitio (usualmente un nivel más arriba que el directorio public_html o www).

En el archivo .htaccess incluiremos:

AuthUserFile ruta absoluta hacia nuestro archivo/.htpasswd
AuthType Basic
AuthName “Algun nombre para nuestro sitio”
require user nombre-de-usuario-que-pediremos

La primera línea corresponde a la ruta, en nuestro servidor, donde tenemos el archivo .htpasswd. Si la desconocemos podemos verla facilmente subiendo un archivo .php que contenga el siguiente código:

texto planocopiar codigoimprimir?

  1. <?php
  2. die($_SERVER[“DOCUMENT_ROOT”]);
  3. ?>

<?php

die($_SERVER[“DOCUMENT_ROOT”]);

?>

La linea 4 es donde debemos indicar que usuario se pedirá y se buscará en el .htpasswd.

Luego, debemos crear un archivo .htpasswd y almacenarlo en la misma ruta que indicamos en AuthUserFile de nuestro .htaccess y esta archivo debe contener el usuario y contraseña que podrá ser autentificado en formato usuario:contraseñaEso si, la contraseña debe estar codificada. Para ayudarnos, podemos acceder a este sitio que nos permite ingresar los datos en texto plano y nos entrega el resultado directo a pegar en nuestro .htpasswd.

Por ejemplo, si tuviésemos un usuario ejemplo y una contraseña 1234, el resultado a pegar en el .htpasswd sería:

ejemplo:Dmrb3P4VUgfdw

Con eso, cada vez que ingresemos al directorio wp-admin nos solicitará una autentificación adicional, que será validada con el archivo .htpasswd.

Como consejo adicional, en lo posible traten de darle un nombre distinto al archivo .htpasswd , por ejemplo .jeio23 , haciendo el cambio respectivo en la primera línea del .htaccess. Eso hará aún más difícil la detección.

9.- Actualizar, actualizar y actualizar

Adicionalmente a todas las medidas indicadas, una muy básica y que siempre debemos tener en cuenta: Siempre actualizar a la última versión disponible de WordPress. Este CMS, como cualquier software existente en el mercado, siempre se le detectan fallas o posibles vulnerabilidades que son corregidas con una nueva versión, por lo que estando siempre actualizados disminuimos el riesgo de ser víctimas de alguna de esas fallas.

Para eso es conveniente estar al tanto de las noticias en el sitio oficial de WordPress o ver en nuestro mismo tablero, donde se nos avisa apenas se ha lanzado una nueva versión.

10.- Plugins

Los queridos y nunca bien ponderados plugins. Es realmente sorprendente la cantidad de funcionalidades y su extensibilidad, además de la simpleza para nosotros como administradores de plataforma.

Sin embargo, hay que tener 2 cosas en cuenta que nos ayudarán a mantener todo de forma mucho más segura.

  1. a) No abusar de los plugins:

Es cierto, nos ayudan de sobremanera, pero tal como eso es que no debemos abusar e implementar todo lo que se nos ocurra. Además de sobrecargar innecesariamente el sitio, siempre debemos recordar que cada plugin es un script que se ejecuta, el cual puede poseer vulnerabilidades que pueden afectar nuestro sistema. Por eso, debemos ser cuidadosos con cual de ellos utilizar, fijándonos principalmente en el tipo de operaciones que ejecutan y las referencias/revisiones que hayan tenido por parte de los usuarios.

¿Qué tipo de plugins evitar? Por una parte los que ejecuten operaciones automáticas sobre nuestras bases de datos, como el caso de los respaldos. En caso de que estos plugins presenten alguna vulnerabilidad, estaríamos otorgando acceso directo a lo más preciado de nuestro sistema, por lo que hay que ser cuidadosos. Sabemos que es tremendamente cómodo automatizar nuestros respaldos, pero hay veces que ciertas operaciones es mejor hacerlas de forma manual.

  1. b) Actualizar siempre a la última versión:

El mismo caso que WordPress. Al incluir scripts, es muy probable que presenten vulnerabilidades que son corregidas mediante lanzamientos de nuevas versiones. Así que a estar atentos y siempre utilizar las versiones más recientes.

Comentarios

Opina con nosotros