A la hora de estudiar la seguridad en Joomla debemos tener en cuenta diferentes tipos de factores. En este artículo vamos a hacer un repaso para enseñaros algunos consejos de seguridad para Joomla, desde el punto de vista de la administración del servidor, el desarrollo de extensiones propias o el uso de extensiones de terceros, sin olvidarnos de ver algunas extensiones que ayudarán a mejorar y aumentar la seguridad de vuestros sitios Joomla.
1. Índice
- 1. Índice
- 2. Introducción
- 2.1. Conceptos base
- 2.2. Tareas principales de seguridad
- 3. Infraestructuras web
- 3.1. Servidor
- 3.2. Servidor web - APACHE
- 3.3. Servidor de aplicaciones - PHP
- 3.4. Servidor de base de datos - MySQL
- 3.5. Aplicación Web - Joomla!
- 4. Ataques más comunes
- 4.1. Autenticación
- 4.2.Autorización
- 4.3.Ataques en la parte de cliente
- 4.4. Revelación de información
- 5. Seguridad básica en Joomla
- 5.1. Conceptos básicos
- 5.2. Seguridad en la programación
- 6. Comprobación de la seguridad
- 7. Comprobación de la seguridad
2. Introducción
2.1. Conceptos base
- Vulnerabilidad: Debilidad o defecto de un sistema que puede ser aprovechada para atacar-lo.
- Exploit: Es un fragmento de datos o una secuencia de comandos con la finalidad de automatizar el aprovechamiento de un error, fallo o vulnerabilidad.
- Fuentes de información: Secunia, Exploit-Db, JoomlaExploit, etc.
2.2. Tareas principales de seguridad
- Escoger buenas contraseñas (que no se puedan encontrar a diccionarios de contraseñas)
- Mínimo de 8 caracteres
- Tendría que contener un mínimo de símbolos de los grupos [0-9], [a-z], [A-Z].
- Gestionar las contraseñas con algún software, ya que tendrían que ser diferentes para cada proyecto (ftp, administrador, ssh, etc.)
- No compartir usuarios entre varias personas.
3. Infraestructuras web
3.1. Servidor
- Una pregunta muy común a la hora de escoger un servicio de hosting es que cojo un servidor compartido o dedicado.
Compartido | Dedicado |
|
---|---|---|
Ventajas |
- Económico. - No es necesario el mantenimiento. |
- Podemos hacerlo tan seguro como queramos. |
Desventajas |
- Si la administración del servidor no es buena nos pone en riesgo. |
- Requiere conocimientos avanzados. - Requiere mucho tiempo y dedicación. |
- Administrar el servidor de manera segura.
- Utilizar SSH, no Telnet.
- Utilizar SCP, SFTP o FTPS, no FTP.
- Utilizar HTTPS, no HTTP para tratar datos de confidencialidad.
- Tareas básicas.
- Solo abrir los puertos imprescindibles (80 y 443).
- Actualizar el sistema operativo de manera constante (Windows Update, apt-get update, up2date, yum, etc.) y el resto de software (PHP, Joomla, extensiones, etc.).
- Hacer copias de seguridad diarias (Totales, incrementales, diferenciales, etc.)
3.2. Servidor web - APACHE
- SSL.
- Permite transferir datos entre cliente y servidor de forma segura.
- Permite al usuario verificar la identidad del servidor.
- Es recomendable comprar certificado digital de una CA (Autoridad Certificadora) de confianza.
- También nos permite autentificar a los usuarios con certificados.
- Seguridad del APACHE
- Quitar los banners.
- Reducir el número de módulos utilizando el mínimo.
- Utilizar un firewall de aplicación como ModSecurity.
- Monitorizar los logs (ie. Splunk) //Requiere mucho tiempo
3.3. Servidor de aplicaciones - PHP
- Reducir los módulos al mínimo.
- Directivas a tener en cuenta (PHP5):
- register_globals = Off
- display_errors = Off
- log_errors = On
- allow_url_fopen = Off
- allow_url_include = Off
- expose_php = Off
3.4. Servidor de base de datos - MySQL
- Medidas básicas
- Asignar una contraseña al usuario root.
- Crear un usuario con los permisos necesarios para Joomla! (SELECT, UPDATE, DELETE, INSERT).
- Borrar las base de datos de pruebas.
3.5. Aplicación Web - Joomla!
-
¿Es Joomla es el más seguro o más seguro que los otros CMS?
- Según veremos más adelante es algo inseguro.
- Es debido, muchas veces, a la gran variedad de extensiones que no son seguras.
4. Ataques más comunes
4.1. Autenticación
- Fuerza bruta: Es un proceso automatizado de prueba y error utilizado para adivinar un nombre de usuario, contraseña, numero de tarjeta de crédito, etc.
- Autenticación insuficiente: La autenticación insuficiente ocurre cuando un lugar web permite a un atacante acceder a contenido sensible o funcionalidades sin haberse autenticado correctamente. (ej. poder acceder a una UDL escondida sin una autentificación correcta).
- Débil validación en recuperación de contraseñas: Se produce cuando un lugar web permite a un atacante obtener, modificar o recuperar, de forma ilegal, la contraseña de otro usuario.
4.2.Autorización
- Predicción de credenciales/sesión: Es un método de secuestro o suplantación de un usuario del lugar web. (ej. poner contraseñas como el nombre o apellidos, fecha de nacimiento, ciudad o población de residencia, etc.)
- Autorización insuficiente: Se produce cuando un lugar web permite acceso a contenido sensible o funcionalidades que tendrían que requerir de un aumento de restricciones y de un control de acceso.
- Expiración de sesion insuficiente: Se produce cuando un lugar web permite a un atacante reutilizar credenciales de sesión o identificaciones de sesión antiguas para llevar a cabo la autorización.
4.3.Ataques en la parte de cliente
- Suplantación de contenido: Es una técnica de ataque utilizada para engañar al usuario haciendo creer que cierto contenido que aparece en el lugar web es legítimo, cuando en realidad no lo es.
- Coss-site scriptiong (XSS):
- Es una técnica de ataque que fuerza a un lugar web a repetir código ejecutable facilitado por el atacante y que se cargará en el navegador del usuario.
- No se limita solo a los lugares web ya que pueden haber aplicaciones locales vulnerables a XSS, o incluso el navegador web en si.
- Hay dos tipos:
- Directa (persistente): Consiste en invadir código HTML peligroso en lugares que así lo permitan; incluyendo así etiquetas como son o .
- Indirecta (reflejada): Modifica valores que la aplicación web utiliza para pasar variables entre dos páginas, sin hacer servir sesión y sucede cuando hay un mensaje o una ruta en la URL del navegador, en una Cookie o en cualquier otro cabecera HTTP.
- Desbordamiento del buffer: Es un ataque que altera el flujo de una aplicación sobreescribiendo parte de la memoria.
- Ataque de formatos de cadena: Alteran el flujo de una aplicación utilizando las capacidades proporcionadas por las librerías de formato de cadenas para acceder a otro espacio de memoria.
- Inyección LDAP: Es una técnica de ataque para explotar lugares web que construyen sentencias LDAP a partir de datos de entrada subministrados por el usuario.
- Inyección de código SQL: Es una técnica usada para explotar lugares web que construyen sentencias SQL a partir de entradas facilitadas por el usuario.
- Inyeccion de código SSI: Es una técnica de explotación a la parte servidora que permite a un atacante enviar código a una aplicación web, que posteriormente será ejecutado localmente por el servidor web.
- Inyección XPath: Es una técnica de ataque utilizada para explotar lugares web que construyan consultas XPath con datos de entrada facilitadas por el usuario.
4.4. Revelación de información
- Fuga de información: Se produce cuando un lugar web revela información sensible, como comentarios de los desarrolladores o mensajes de error, que puede ayudar a un atacante para explotar el sistema.
5. Seguridad básica en Joomla
5.1. Conceptos básicos
- Borrar los ficheros de instalación y ejemplos.
- Register_Globals = Off
- Ninguna extensión que necesite la característica Register_Globals = On querrá decir que tenemos una puerta de entrada para los hackers.
- Es muy importante aunque ha veces no se tiene en cuenta.
- Eliminar el archivo configuration.php-dist.
- Es importante eliminar este archivo ya que es el que utiliza Google para anunciar que su sitio web está desarrollada en Joomla.
- Mover el fichero configuration.php fuera del espacio público.
- No necesita estar en el espacio público para ejecutarse, por lo tanto, aconseguiremos que nadie pueda obtener los datos del servidor o base de datos.
- Cambiar el nombre de la carpeta "administrator"
- Cualquier referencia a este directorio supone una menor seguridad.
- Este paso requiere muchas modificaciones al núcleo del sistema por lo que existen algunos plugins para dificultar la entrada a la administración que ya comentaremos más adelante en este tutorial.
- Eliminar el usuario admin por defecto.
- Cuando instalamos Joomla! 1.5.x nos crea un usuario admin por defecto que tendríamos que eliminar y crear otro de nuevo con el nombre de usuario diferente.
- En Joomla! 1.6 nos deja escoger un nombre diferente en el proceso de instalación.
- Dar permisos 644 a todos los ficheros.
- Dar permisos 755 a todos los directorios.
- Cambiar las iniciales de las tablas "jos" por otro distinto.
- Esto será posible cambiarlo en el proceso de instalación.
- Proteger el directorio "administrator" con una contraseña.
- Esto lo podemos hacer creando un archivo .htpasswd.
- Utilizar una conexión segura SSL con el servidor.
- Asegurar que el .htaccess tenga las lineas siguientes:
order allow,deny |
Deny from all |
5.2. Seguridad en la programación
- No crear ficheros individuales o independientes de la estructura de Joomla.
- Añadir la restricción de acceso directo a los ficheros.
// Check to ensure this file is included in Joomla! |
defined( '_JEXEC' ) or die ( 'Restricted access' ); |
- Añadir "hash" para la descarga o visualizar ficheros adjuntos al sitio web.
- Asegurarse que los botones utilicen tokens.
6. Aumentar la seguridad
7. Comprobación de la seguridad
- Existen diferentes herramientas para comprobar la seguridad, por ejemplo:
- Joomscan: Script en PERL.
- GuardXT: Componente de Joomla. *SOLO JOOMLA! ?1.5*
- RSFirewall: Componente de Joomla.
Por WebActualizable (www.webactualizable.com), empresa especializada en el desarrollo de proyectos sobre Joomla.
En AyudaJoomla | Seguridad con RSFirewall, Mejorar seguridad con Admin Tools , Tutorial Akeebabackup