Seguridad en Joomla!

  • Por
  • y  
Desterramos el mito de la inseguridad de Joomla!, a la par que ofrecemos diversas técnicas y extensiones que ayudan a incrementar la seguridad en el célebre CMS.
Este artículo está dedicado a la seguridad en el CMS Joomla!, ofreciendo algunos datos interesantes y sobre todo explicando cuáles son las tareas que puedes realizar para incrementar la seguridad del sistema.

Este texto surge como apéndice al programa #joomlaIO, emitido en DesarrolloWeb.com, en el que por algo más de una hora se estuvo debatiendo el tema de la seguridad y aportando diversas técnicas y herramientas que incrementarán la fiabilidad y seguridad de los sitios web basados en este CMS. La autoría de este artículo es comunitaria, pertenece a todo el equipo de #joomlaIO, representado por Javier Mendoza @cyxmedia, Manolo Aguado @bolemc e Isidro Baquero @isidrobaq, que estuvieron acompañados por Guillermo Bravo @jwillin y Miguel Ángel Álvarez @midesweb.

Mucho se ha hablado de que Joomla! inseguro, y lo cierto es que muy pocas veces se han aportado datos que puedan confirmar esas hipótesis. La desinformación muchas veces ha provocado que asumamos como ciertas algunas opiniones de profesionales que no se han molestado en buscar la raíz de los problemas. Si te lo quieres demostrar a ti mismo, en este artículo se especificarán al final diversas acciones que podrás implementar para que Joomla! pueda ser utilizado con toda seguridad.

Por qué no se debe decir que Joomla es inseguro

Partamos del hecho que la inseguridad es una constante de todo sistema informático. Nunca podemos decir que un software es completamente seguro, igual que nadie puede asegurar que esté completamente libre de errores. La inseguridad existe, en Joomla!, igual que en cualquier otro CMS o pieza de software en general. Existen en Internet multitud de sitios basados en Joomla! que son inseguros ¿Pero realmente se puede generalizar y decir que por ello Joomla! es inseguro?

La seguridad o la inseguridad es realmente una responsabilidad de los desarrolladores, que muchas veces no hacemos correctamente nuestro trabajo. Pero no me refiero a la comunidad que realiza el propio CMS, sino más bien a quienes lo utilizamos para construir sitios basados en él. Los desarrolladores muchas veces dejamos huella de nuestro trabajo y con ello a veces quedan piezas de software que pueden comprometer un sistema. El ejemplo más típico, que ocurre en Joomla igual que en otros CMS, es el uso de determinadas extensiones que tienen un problema de seguridad o el uso de versiones antiguas de Joomla que no están actualizadas y que contienen agujeros de seguridad.

Pero hay casos todavía más básicos. Un sistema puede ser tremendamente seguro y sin embargo, escoger una clave corta o predecible lo puede dejar vulnerable. Aunque ojo, no solo debemos escoger claves complejas, sino realizar otras optimizaciones como cambiar los nombres a las tablas, tener cuidado con los permisos de los archivos o directorios, ofuscar las versiones del CMS o los nombres de los archivos que contienen código. Todas esas recomendaciones las revisaremos enseguida.

A veces se critica a Joomla diciendo que al ser software libre cualquiera puede saber los errores de seguridad que tiene, pero eso podría ser un crítica contra todas las herramientas de código abierto y sabemos que no es cierto. Existe una numerosa comunidad detrás que apenas aparece un agujero de seguridad publica nuevas versiones del software para solucionarlo. Nuevamente somos los desarrolladores los que debemos, concienzudamente, actualizar el CMS siempre que aparecen nuevas versiones estables seguras.

Durante el evento de seguridad en Joomla! #joomlaIO también se mencionó una estadística interesante. Solo el 5% de los errores de seguridad de Joomla! se dieron en el "core", o sea, en la arquitectura básica del CMS. Esto quiere decir que el 95% de los agujeros de seguridad detectados en Joomla! pertenecen a otras piezas de software externas, con complementos como extensiones o plugins, temas, etc. En este sentido se puso énfasis en señalar que habitualmente los desarrolladores instalamos temas "piratas" que realmente tienen caballos de troya con scripts que roban contraseñas u otros datos sensibles. Por ello hay que tener siempre en cuenta descargar complementos o plantillas de fuentes seguras y desconfiar cuando un sitio web ofrece gratuitamente temas gratuitos que son de pago en otros sitios.

Nota: no es nuestra intención entrar en comparaciones sobre la seguridad con otros CMS populares, sean o no de código abierto. Solo decir que el 5% de agujeros en el core de Joomla! contrastan con el 20% de agujeros encontrados en el core de otro popular CMS.

Checklist de seguridad básica en Joomla!

A continuación encontraremos una serie de items fundamentales que tenemos que observar a la hora de implementar Joomla en un ambiente seguro. Es apenas un listado, que a buen seguro servirá de mucha utilidad, sin embargo, si se desea obtener mayores explicaciones, recordamos que está disponible el hangout donde el equipo de #joomlaIO ofreció muchos otros detalles, consejos y guías para implementación de estos items de seguridad.

Primeros pasos / Seguridad en el core de Joomla!:

  • Descargar desde joomla.org o sitios de absoluta confianza
  • Comprobar que estamos instalando la última versión estable de Joomla!
  • Comprobar que no estamos utilizando el nombre de superusuario por defecto (admin)
  • No establecer la contraseña de FTP (establecerla constituiría una vulneración de la seguridad)
  • Activar el fichero .htaccess en servidores Linux (para ello debemos renombrar el fichero htacess.txt a .htaccess). Podemos ampliar la seguridad con docs.joomla.org Htaccess_examples_(security)
  • Habilitar las URLs amigables para los motores de búsqueda (SEF)
  • Comprobar que la duración de la sesión no excede de 15 minutos
  • Eliminar plantillas que no sean necesarias
  • Comprobar que los permisos de directorios están en 755 y los permisos de archivos en 644
  • Utilizar un usuario de base de datos para la configuración de Joomla que no tenga acceso externo a la misma
Primeros pasos / Seguridad durante la instalación y mantenimiento de las extensiones Joomla!:
  • Realizar un backup de la estructura FTP y la base de datos antes de instalar cualquier extensión. Utilizar Akeeba Backup / Admin Tools
  • Descargar extensiones solo de sitios de confianza extensions.joomla.org
  • Comprobar que las extensiones que instalamos son la última versión estable disponible
  • Eliminar las extensiones que no vayan a ser utilizadas y no formen parte del CORE (conviene revisar manualmente que los directorios y archivos asociados a la extensión se han borrado correctamente)
Configuración del servidor / Directivas de PHP:
  • Comprobar que register_globals está desactivada
  • Comprobar que allow_url_fopen está desactivada
  • Comprobar que allow_url_include está desactivada
  • Comprobar que open_basedir está activada y las rutas asociadas (esta directiva limita los archivos que se pueden abrir por PHP al árbol de directorios especificado)
  • Comprobar que están desactivadas show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open
  • Comprobar que safe_mode está desactivado
Configuración del servidor / Estructura de archivos:
  • Comprobar que las carpetas del sitio están en 755
  • Comprobar que los archivos del sitio están en 644
  • Comprobar que no existen ficheros en la carpeta temporal /tmp
Configuración del servidor / Protección de archivos y carpetas críticas:
Para obtener una mejor protección del sitio web en Joomla, es conveniente sacar fuera de la estructura httpdocs el fichero configuration.php , para ello debemos modificar los siguientes archivos:

Motivo:Sacar fuera de la estructura httpdocs el fichero configuration.php y definir la ruta en la constante para que el fichero sea accesible por Joomla!

Ruta de los ficheros a modificar: /includes/defines.php y /administrator/includes/defines.php Línea de código a modificar: define('JPATH_CONFIGURATION', JPATH_ROOT);

Extensiones recomendadas para mejorar la seguridad de Joomla

Hay varias extensiones que nos permiten añadir una capa extra de protección en Joomla! muchas de ellas son muy conocidas, algunas no tanto. Nombramos algunas de ellas con una pequeña descripción.

RSFirewall
RSFirewall es una extensión que todos deberían usar. Correctamente configurada nos alertará de los intentos de intrusión en el sitio y nos permitirá realizar acciones como la denegación de IPs, o definir las ubicaciones desde la que se podrá acceder al backend, entre muchas otras funciones.

Admin Tools
Una navaja suiza para la administración del sitio web en Joomla. Verificar y corregir los permisos de carpetas y directorios, proteger el acceso al panel de administración con una contraseña adicional, cambiar el prefijo de la base de datos o realizar su mantenimiento son algunas de las excelentes características de esta extensión. Además es del creador de Akeeba Backup, sin duda toda una garantía de la limpieza de su código y de sus posibilidades.

Akeeba Backup
Un sitio web al que no asociamos ninguna política de backups es como un barco a la deriva. Es cuestión de tiempo que un fallo nos haga pasar un mal rato. Akeeba es una de esas extensiones que merece la pena pagar sin ningún género de dudas. La versión gratuita ya nos permite la realización de backups, pero es en la versión Pro donde encontramos todo el potencial de la extensión.

Aquí, Akeeba nos permitirá lanzar los backups directamente a diversos servicios de almacenamiento en nube, desvinculando la copia del servidor donde tenemos el sitio web. Creo recordar que su creador (Nicholas Dionysopoulos) en el manual de Akeeba nos indica en tono “jocoso” que una buena copia de seguridad es la que se realiza en una placa tectónica diferente (por si los terremotos).
Algo altamente recomendable es instalar o solicitar que nos instalen en el servidor la extensión MyCript.php, ya que es utilizada por akeeba para encriptar los paquetes de copia de seguridad aportando mayor seguridad.

Encrypt configuration
A menos que utilicemos un certificado de seguridad SSL, un usuario que se registra en Joomla enviará su contraseña en texto plano a través de la red. Un usuario malintencionado podría aprovechar esta vulnerabilidad y obtener acceso al back-end.
Este plugin es una alternativa a SSL. Se utiliza RSA para cifrar las contraseñas o cualquier otra información que desees en los componentes.
Hay que tener la extensión bcmath. Funciona con nombre de señal, Login JTP Horizontal, PWC sesión, inicio de sesión en línea y módulos VTJ inicio de sesión. Para otras extensiones de Joomla, como Alpha Registro, Community Builder, Core Design Módulo sesión, Yoo sesión, YJ Módulo Login Pop puedes encontrar plugins en www.ratmilwebsolutions.com/downloads/encryption-plugins.html. No hay necesidad de configurar. Sólo tienes que instalar los plugins necesarios.

Conclusión

Creemos que después de estas notas se habrán despejado algunas dudas y mitos sobre la seguridad en Joomla!. Quizás los desarrolladores que critican el popular CMS no lo hacen con mala intención, pero sí por desinformación.

Aquellos profesionales que implementan Joomla son los mayores responsables de crear sistemas seguros, mediante la meticulosa revisión de diversas recomendaciones comentadas anteriormente y el uso de alguna que otra extensión de enorme utilidad. Esperamos que este documento haya resultado de utilidad y os citamos dentro de poco para nuevas emisiones de #joomlaIO.

Autor

Manolo Aguado

Desarrollador web con profundos conocimientos del CMS Joomla!, también de Wordpress y sobre todo impulsor de tecnologías de estándares abiertos como HTML5, CSS3. Diseñador siempre bajo Responsive Web Design. Apasionado del Social Media, realiza las tareas de coordinador del podcast @smediapodcast y es co-presentador del hangout #joomlaIO de emisión quincenal.
Desarrollador web independiente experto en CMS Joomla y estándares abiertos.

Autor

Javier Mendoza

Javier es una "mente inquieta", creativo que siempre imprime pasión a sus proyectos, con conocimientos sólidos en las distintas áreas que un desarrollador web debe dominar, SEO y analítica web, gestión de proyectos, tecnologías abiertas. Es un impulsor del CMS Joomla! que implementa y mantiene en diversas iniciativas y además es uno de los profesionales más destacados de la comunidad Jooma! en España.
Desarrollador Web y CEO de Cyxmedia

Compartir

Comentarios

Gustavo Amarista

15/10/2015
Excelente material
excelente matrial, voy a poner en practica algunos topicos de este articulo, esta mañana mi sitio joomla fue atacado por sultan-f6, modicaron el index.php en la raiz y en la carpeta administrator, tambien cambiaron los datos del administrador, lo que ice para reestabloecer el sitio fue cambian el index.php a la version anterior y en phpmyadmind los datos nuevamente del administrator... Alguien tiene idea de ocmo lo hicieron?