Hardening CMS Joomla (CentOS) #Parte1

Hola amigos continuando con el tema de hardening. esta vez les traigo una plantilla basica complementada por mi parte para los CMS Joomla en sistemas Linux (CentOS). basada en la guia basica de securizacion de Inteco.
http://www.inteco.es/file/WbpsPPREE7naXKiMJlkT_g


INDICE

1 Introducción
2 Prefijo de la base de datos
3 Usuario y contraseñas de administrador
4 Permiso de directorios y archivos
5 Área de administración (Back-end Administrator)
6 Htaccess y Robots.txt
6.1 Htaccess
6.2 Habilitar Htaccess
6.3 Denegar el acceso a los archivos .htaccess e impedir mostrar el contenido de directorios
6.4 Impedir el acceso no autorizado al back-end de joomla
6.5 Restringir el acceso a dominios e IP’s
6.6 Robots.txt
7 Eliminar Meta Generator de Joomla
8 URL’S Amigables
8 Respaldo de información
9 Extensiones de tercero
10 Servidor web (Apache)
11 Actualizaciones

1 Introducción

Joomla es un gestor de contenidos (CMS) orientado a la realización de páginas web, tanto a nivel público como portales de intranet, distribuido como software libre.
Joomla es una aplicación Open Source o de código abierto programada en lenguaje PHP bajo una licencia GPL y que utiliza una base de datos por default MySQL para almacenar el contenido y los parámetros de configuración del sitio.
Es importante destacar que esta herramienta al ser un software totalmente libre el código fuente es conocido y de aquí parte una parte del compromiso de asegurar los portales diseñados con joomla para evitar posibles vulnerabilidades y ataques.

2 Prefijo de la base de datos

Este es un aspecto de seguridad importante a la hora de crear la estructura de tablas ya que Joomla, hasta la versión 2.X por defecto creaba el prefijo jos_ en el nombre de las tablas por lo que un posible atacante lo tenía muy fácil para conocer el nombre de las mismas ya que el resto del nombre es común para todas las instalaciones (ejemplo: jos_users). A partir de la versión 3.X Joomla genera un prefijo aleatorio, pero es recomendable modificarlo por uno que el usuario considere y que preferiblemente, no tenga relación con el nombre del sitio.

3 Usuario y contraseñas de administrador

Joomla por defecto rellena el formulario correspondiente al Usuario del Administrador con el nombre admin.

Por razones de seguridad es altamente recomendable modificar este nombre por otro diferente. En caso de mantener el usuario admin hay que considerar que si un usuario malintencionado quisiera acceder a la zona de administración, ya conoce la mitad de la barrera existente. Si además no se crea una contraseña robusta, es relativamente fácil que por medio de un ataque de fuerza bruta se acceda a la zona de administración.

4 Permiso de directorios y archivos

Es muy importante proteger los directorios y archivos de joomla con los permisos adecuados todo el árbol de directorios y archivos que componen la estructura de Joomla. Puesto que la aplicación web se encuentra en un directorio con acceso de lectura para todo los usuarios (777), como mínimo se ha de verificar que los permisos se han establecido adecuadamente.

Teniendo en cuenta lo anterior y como medida general, para toda la estructura de carpetas (no archivos) donde está instalado Joomla serían aplicables los permisos 755 que se traducen como:
  • Los propietarios, es decir el usuario que ha facilitado el hosting al contratar el servicio, tendrán control total (lectura, escritura y ejecución) sobre las carpetas del servidor (7).
  • Los miembros del grupo tendrán permisos de lectura y ejecución (5). En el caso de alojamiento web, el grupo (Group) en el caso de un alojamiento web pertenece al propietario (Owner).
  • El resto de usuarios, los que acceder a la página web y sus servicios, tendrán permisos de lectura y ejecución (5).
Para los archivos la configuración será distinta. Hay que aplicar permisos 644 que se traducirían, siguiendo la información de la tabla, como:

  • Los propietarios tendrán permiso de lectura y escritura sobre los archivos del servidor (6).
  • Los miembros del grupo tendrán permisos de lectura (4).
  • El resto de usuarios, los que acceder a la página web y sus servicios, tendrán permisos de lectura (4).
En resumen y como recomendación, se deben aplicar los permisos:
755 para directorios o carpetas.
644 para archivos.

5 Área de administración (Back-end Administrator)

Joomla como la mayoría de gestores de contenidos, cuenta con dos partes diferentes en su sistema. Por un lado encontramos la parte pública o Front-end y por otro, la parte privada/de administración o Back-end.

La parte de administración está reservada para aquellos usuarios que gestionaran la plataforma como son los administradores o los usuarios que van a publicar contenidos o realizar tareas de mantenimiento. Joomla tiene su propio directorio en el árbol de carpetas donde se ubican todos los archivos necesarios para la presentación web, gestión, etc.

Puesto que la zona de administración debe ser considerara un punto clave a proteger con el objetivo de impedir lo máximo posible accesos no autorizados, es necesario implementar los mecanismos adecuados que aporten seguridad en este aspecto. Como se comentó en el punto de la instalación, la primera acción a tomar sería modificar el nombre de usuario administrador por defecto (admin) y utilizar una contraseña robusta.

Una segunda acción seria esconder el Back-end de administración que por defecto es www.portal.com/administrator
Para esto se recomienda hacer uso de autenticación htaccess o bien del plugin Jsecure.

veremos mas adelante el tema de asegurar el back-end por httaces y/o el plugin jsecure el punto 6.3

6 Htaccess y Robots.txt

En este punto se tratará cómo restringir el acceso a determinados directorios y archivos mediante la configuración de .htaccess y cómo evitar que los buscadores indexen archivos o rutas del sitio web que no queremos que sean visibles a través de las búsquedas como por ejemplo URLs de administración, de configuración, etc.

6.1 Htaccess
La mayoría de opciones de configuración de un servidor web dentro de un alojamiento basado en Apache están solo accesibles para el administrador del servidor en el ISP, es posible aplicar determinadas configuraciones editando el archivo .htaccess. Estas configuraciones, denominadas directivas, permiten aportar funcionalidades que variarán el comportamiento de sitio web pudiendo implementar varios archivos .htaccess sobre distintos directorios y archivos en base a las necesidades.

Cuando se finaliza la instalación de Joomla el CMS crea por defecto el archivo htaccess.txt que no tendrá efecto hasta que se modifique su nombre, de htaccess.txt a .htaccess



Inicialmente en Joomla, este archivo está configurado para facilitar la reescritura de las URL y optimizar el sitio en los motores de búsqueda para el SEO, pero a través de ciertos parámetros, será posible aplicar diferentes configuraciones que aportarán mayor seguridad al sitio web.

6.2 Habilitar Htaccess

Al tratarse de un servidor en ambiente local (No hosting) debemos realizar una modificación a la configuración del apache para la lectura de estos archivos.

Nos ubicamos a la siguiente carpeta /etc/httpd/conf y abrimos el archivo httpd.conf en ella encontraremos que las opciones AllowOverride se encontraran en None, editamos el None por All, guardamos y reiniciamos el servicio de apache.
service httpd restart

6.3 Impedir mostrar el contenido de directorios

En algunas ocasiones también interesará que la estructura de directorios de Joomla, a pesar de ser bastante conocida, no sea mostrada y ocultar así los archivos y carpetas que componen el sitio. Para ello basta con añadir al archivo .htaccess la siguiente línea:

Options All –Indexes.

6.4 Impedir el acceso no autorizado al back-end de joomla

Anteriormente mencionamos y recomendamos el restringir el acceso al back-end por httacces o por elplugins JSecure para darle un segundo factor de protección al acceso del back-end de administración además de otras funcionalidades de seguridad que proporciona el componente. 

Podemos asignar un segundo factor de protección (autenticación HTTP) mediante el archivo .htacces si no se cuenta con el componente JSecure.

Ami realmente me gusta mas el funcionamiento de segundo factor de la autenticacion HTTP y combinarla con los logs de JSecure.

En el archivo .htaccess indicaremos la configuración siguiente
   1: AuthType Basic
   2: AuthName Area de Administracion
   3: AuthUserFile /htpasswds/users.pwd
   4: require valid-user
Hay que indicar que esta configuración se debe aplicar en un archivo .htaccess en el directorio /administrator. Para que la configuración funcione correctamente adicionalmente, hay que crear un archivo de texto con los usuarios y contraseñas que podrán acceder al directorio (en el ejemplo users.pwd) y ubicarlo en un directorio, a ser posible oculto y fuera de la carpeta pública (en el ejemplo /.htpasswds). Puesto que el formato de la contraseña para apache se ha de cifrar, el archivo users.pwd que contiene el usuario y contraseña, tendría el siguiente formato:

============================================
antony:$apr1$Exo2qw2s$xG7V/Va.A9w5dMA9J6Wcm/
============================================

Para ayudarnos a generar las listas de usuarios podemos utilizar servicios como http://www.htaccesstools.com/htpasswd-generator/ que convierten la contraseña al formato adecuado o bien usando el comando htpasswd en consola.

Implementando esta medida, cuando un usuario trate de acceder a la URL portal.com/administrator, previa a la aparición del formulario de acceso a la administración del portal, se mostrará otro solicitando las credenciales del archivo users.pwd.

cuando intentemos nuevamente ingresar al back-end veremos algo similar a la imagen:

Recuerden tener la ultima version del apache por que en versiones anteriores existe un bypass para HTTP Authentication

6.5 Restringir el acceso a dominios e IP’S

Cuando nos percatamos en los logs algun ataque a nuestro sitio web lo primero que hacemos es denegar esa IP, esto cuando no contamos con un web firewall que nos automatice el trabajo.

Denegar la IP la podemos realizar mediante el archivo .httaccess  o bien con Jsecure

con JSecure simplemente nos vamos a componente-->JSecure Authentication

y dentro del menu de este seleccionamos IP y agregamos las IP q les vamos a denegar Acceso


Y por un archivo .Htaccess seria con una configuracion como la siguiente:

   1: order deny,allow
   2: deny from xxx.xxx.xxx.xxx
   3: deny from .dominio.com
   4: allow from all

para no extender el post continuamremos con la segunda parte en otro

seguir leyendo #Parte2