actualidad sobre consultoria, normas y seguridad de la informacion
Guias, procesos y manuales sobre Ethical Hacking
Mostrando entradas con la etiqueta robots. Mostrar todas las entradas

Hardening CMS Joomla (CentOS) #Parte2

Continuando con la plantilla de aseguramiento de CMS Joomla
Leer la #Parte1

6.6 Robots

Generalmente, una vez que se implementa un sitio web y se pone en producción, el siguiente paso es la promoción. Ésta generalmente se realiza añadiendo el dominio en los buscadores más populares y aplicando ciertas técnicas (SEO y SEM) para hacer que nuestra página sea mostrada en los primeros puestos de las búsquedas. Para facilitar el rastreo e indexación por los crawlers (arañas o robots de los motores de búsqueda) se debe configurar adecuadamente el archivo robots.txt. A través de este fichero, mediante una serie de directivas, le indicaremos al crawler qué páginas puede indexar el buscador y cuáles no. Por lo general no nos interesa que el buscador añada las páginas de administración, configuración, etc. La última versión de Joomla por defecto genera en la carpeta raíz del sitio web un archivo robots.txt:


Que tiene la siguiente configuración:

   1: Disallow: /administrator/
   2: Disallow: /cache/
   3: Disallow: /cli/
   4: Disallow: /components/
   5: Disallow: /images/
   6: Disallow: /includes/
   7: Disallow: /installation/
   8: Disallow: /language/
   9: Disallow: /libraries/
  10: Disallow: /logs/
  11: Disallow: /media/
  12: Disallow: /modules/
  13: Disallow: /plugins/
  14: Disallow: /templates/
  15: Disallow: /tmp/

Inicialmente es una configuración válida siempre que se cumplan nuestras necesidades. Si queremos añadir un nuevo directorio o ruta a proteger contra la indexación de los buscadores, la incluiremos en la lista.

7 Eliminar Meta Generator de Joomla

Joomla por defecto genera en el código fuente de las web una etiqueta como la siguiente:

< meta name="generator" content="Joomla! - Open Source Content Management" / >

Esto revela la plataforma bajo la cual se encuentra desarrollada la web.

Para esto vamos a modificar el contenido a mostrar, el siguiente ejemplo está basado en Joomla 3.0.X.
Nos dirigimos al archivo “index.php” de la plantilla instalada y usada en el gestor Joomla
Ejemplo:

“/var/www/html/masa/templates/xxx_xxx”

En el buscaremos e insertamos el siguiente código

   1: // Ocultar Generator Tag
   2: $this->setGenerator(null);

8 URL'S Amigables

El usar URL amigables es una gran ayuda para el aseguramiento de Joomla ya que si se deja la opción que trae por defecto el gestor de contenido Joomla genera códigos arbitrarios que pueden llegar a presentar una vulnerabilidad.

Para esto en primer lugar cambiaremos las opciones  por defecto en la  configuración global de Joomla.



Para que surga efecto deberiamos haber ya renombrado el archivo htaccess.txt  a .htaccess. y el archivo web.config.txt a web.config.

9 Respaldo de información

Como todo sistema este no es la excepción y se debe contar con respaldo de la información de la carpeta del sitio como de la base de datos del mismo para cambio de versiones entre otras acciones.
para esto existen diversos modulos y/o Plugins o bien siempre existira ftp y un script.

10 Extensiones de tercero

Uno de los aspectos más atractivos de los gestores de contenidos y por lo tanto de Joomla es que mediante extensiones, plugins o módulos es posible ampliar las funcionalidades del sitio web que se implemente sobre esta plataforma.

En algunos casos estas extensiones son una vulnerabilidad para los sitios web ya que posiblemente se traten de extensión que carecen de procesos de revisión de código y seguridad.
Las premisas esenciales para instalar este tipo de aplicaciones serían:

  • Verificar el historial de vulnerabilidades. Evidentemente lo más recomendable es utilizar aplicaciones que no se encuentren en la lista de extensiones vulnerables (para más antiguas consultar esta otra lista). En caso contrario se está asumiendo un riesgo elevado del compromiso de la seguridad de la web.
  • Comprobar si está incluída en el Directorio de Extensiones de Joomla. En este portal se realiza un primer filtrado comprobando que la aplicación cumple unos estándares mínimos (tanto de usabilidad como de seguridad).
  • Página del desarrollador y comunidad de soporte. Este es un punto a tener en cuenta ya que aportará información acerca de cuánto tiempo lleva desarrollándose y el tipo de soporte con el que cuenta (foros, etc.). Adicionalmente en las web de los desarrolladores es posible comprobar el funcionamiento a través de una Demo antes de su instalación.
  • Versión nativa. Siembre se debe verificar que la extensión esté disponible para la versión de Joomla que se ha instalado. Esto evita tener que activar el modo herencia.
Como siempre realizar un analisis de vulnerabilidades al sitio. existen muchas herramientas para realizar esta accion y algunas especialmente dirigida para este CMS como pueden ser

Entre otros.

11 Servidor web

Para una mayor seguridad de los portales web se debe implementar el aseguramiento del servidor web APACHE en un post anterior comentabamos sobre hardening sobre los servidores web apache y nginx.
En el punto 7 de la #Parte2_Hardening_CentOS podemos encontrar mayor información sobre el aseguramiento en APACHE y en el punto 8 de la #Parte3_Hardening_CentOS podemos encontrar mayor información sobre aseguramiento a NGINX.

12 Actualizaciones

Como en cualquier aplicación o software que se precie, el mantener una política de actualizaciones es esencial con el objetivo de cubrir los agujeros de seguridad que se vayan descubriendo. En el caso de Joomla se debe proceder del mismo modo previa evaluación del impacto que una actualización pueda provocar como la incompatibilidad entre complementos, plugins, plantillas, etc. No obstante se debe considerar adecuadamente estos aspectos primando sobre todas los relacionados con la seguridad.

Generalmente, los procedimientos para actualizar el CMS Joomla suelen ser sencillos y varían ligeramente en función de si se trata de actualizaciones dentro de la misma rama (por ejemplo de de la v3.0.1 a la v3.0.2), o si es un cambio de versión (de la v3.0x a la 4.0.x). Los primeros únicamente requieren la sustitución de los archivos antiguos por los de la nueva versión. En el caso de la segunda opción, en ocasiones es posible hacerlos directamente pero por lo general requieren de una instalación limpia de la versión de Joomla! que se quiere instalar y realizar una migración de datos.
En el sitio oficial http://docs.joomla.org o en el proyecto en español http://www.joomlaspanish.org/ se puede encontrar información útil acerca de cómo actualizar entre las distintas versiones del gestor de contenidos.

De igual manera en esta plantilla de aseguramiento se recomienda suscribirse a servicios de información que nos permitan estar al día en relación a la aparición de nuevas versiones de Joomla! o el descubrimiento de agujeros de seguridad, que nos permitan actualizar o corregir los problemas lo más rápido posible.



Read more

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


Read more