miércoles, 16 de enero de 2008

HARDENING APACHE

INTRODUCCION


Servidor.

Un servidor es un tipo de software que realiza ciertas tareas en nombre de los usuarios. El término servidor ahora también se utiliza para referirse el hardware en el cual funciona ese software, una máquina cuyo propósito es proveer datos de modo que otras máquinas puedan utilizar esos datos.

Los archivos para cada sitio de Internet se almacenan y se ejecutan en el servidor. Hay muchos servidores en Internet y muchos tipos de servidores, pero comparten la función común de proporcionar el acceso a los archivos y servicios.Un servidor sirve información a los equipos que se conecten a él. Cuando los usuarios se conectan a un servidor pueden acceder a programas, archivos y otra información del servidor.

En la web, un servidor web es un ordenador que usa el protocolo http para enviar páginas web al ordenador de un usuario cuando el usuario las solicita. Los servidores web, servidores de correo y servidores de bases de datos son a lo que tiene acceso la mayoría de la gente al usar Internet.

Algunos servidores manejan solamente correo o solamente archivos, mientras que otros hacen más de un trabajo, ya que un mismo ordenador puede tener diferentes programas de servidor funcionando al mismo tiempo.

Los servidores se conectan a la red mediante una interfaz que puede ser una red verdadera o mediante conexión vía línea telefónica o digital.

Apache
Servidor web de código abierto. Su desarrollo comenzó en febrero de 1995, por Rob McCool, en una tentativa de mejorar el servidor existente en el NCSA. La primera versión apareció en enero de 1996, el Apache 1.0. Hacia el 2000, el servidor Web Apache era el más extendido en el mundo. El nombre «Apache» es un acrónimo de «a patchy server» -un servidor de remiendos-, es decir un servidor construido con código preexistente y piezas y parches de código. Es la auténtica «kill app» del software libre en el ámbito de los servidores y el ejemplo de software libre de mayor éxito, por delante incluso del kernel Linux. Desde hace años, más del 60% de los servidores web de Internet emplean Apache.


DESARROLLO

Los pasos para realizar el Hardening de Apache son los siguientes:
Funcionalidad
Suposiciones de Seguridad
Descargar la versión de Apache adecuada.
Preparando el Software
Módulos de Apache
Compilando el Software
Chrooting el servidor
Configurando Apache, editando el archivo httpd.conf.
Cambiar los permisos de los archivos y directorios
Eliminar archivos y directorios no necesarios.
HTTP Logging.
Monitoreo de trafico al servidor
Prevención contra ataques.

La descripción de cada uno de los puntos es:

Funcionalidad
Se debe especificar qué funcionalidad tendrá el servidor, que tecnologías utilizara: PHP, JSP, cgi, ASP, Perl, etc.

Suposiciones de Seguridad
Se deben considerar elementos que son seguros por default, como son:
· El sistema operativo se debe asegurar tanto cuanto sea posible, contra ataques del local y del telnet;
· El servidor no debe ofrecer ningún otro servicios de red excepto el HTTP: (80/TCP);
· El acceso alejado al servidor se debe controlar por un cortafuego, que debe bloquear todas las conexiones de salida, y permite conexiones de entrada solamente al puerto 80/TCP del web server;
· El servidor Apache debe ser el único servicio disponible en el sistema;
· Se deben instalar los módulos absolutamente necesarios de Apache deben ser permitidos;
· El servidor debe divulgar la menos cantidad de información sobre sí mismo (seguridad por oscuridad);
· El servidor de Apache debe funcionar debajo de un UID/GID único, no usado por cualquier otro proceso del sistema;
· Los procesos de Apache deben tener acceso limitado a los archivos de sistema (el chrooting); y,
· Ningunos programas de la cáscara pueden estar presentes en el Apache chrooted el ambiente (/bin/sh, /bin/csh etc.).

El sistema operativo
· Antes de instalar Apache debemos elegir un sistema operativo, sobre el cual el servidor funcionará.
· El primer paso es asegurar el sistema operativo.

Usuarios:
· Es necesario crear un nuevo grupo de usuarios y usuarios que sean necesarios.

Descargar la versión de Apache adecuada.
El paso siguiente es descargar la versión más última del web server de Apache. Algunas de las opciones de Apache se pueden permitir solamente durante tiempo de compilación, así es importante descargar el código de fuente en vez de la versión binaria.

Preparando el Software
Después de descargar el software, debemos desempaquetarlo. Entonces debemos decidir qué módulos deben seguir permitidos.

Módulos de Apache
La opción de módulos es uno de los pasos más importantes de asegurar Apache. Debemos ir por la regla: menos es el mejor. Satisfacer las asunciones de la funcionalidad y de la seguridad, los módulos siguientes deben seguir permitidos:


Nombre del módulo
Descripción
httpd_core
Las características de Apache de la base, requeridas en cada instalación de Apache.
mod_access
Proporciona el control de acceso basado en el hostname del cliente, el IP address, u otras características de la petición del cliente. Porque este módulo es necesario utilizar “orden”, “permitir” y “negar” los directorios, él debe seguir permitido.
mod_auth
Requerido para poner la autentificación del usuario en ejecución usando los archivos de texto (autentificación básica del HTTP), que fue especificada en asunciones de la funcionalidad.
mod_dir
Requerido para buscar y para servir archivos del índice del directorio: “index.html”, “default.htm”, etc.
mod_log_config
Requerido para poner la registración en ejecución de las peticiones hechas al servidor.

mod_mime
Requerido para fijar el juego de caracteres, la codificación del contenido, el tratante, la contenido-lengua, y los tipos del MIME de documentos.

El resto de los módulos de Apache deben ser eliminados. Podemos daros vuelta con seguridad apagado, principalmente porque no los necesitamos. Inhabilitando los módulos innecesarios, podemos evitar robos potenciales cuando las nuevas vulnerabilidades de la seguridad se encuentran en uno de ellos.
Modulos a deshabilitar
info.
status
autoindex
imap
include
userdir
auth
Modulos a habilitar
· ssl
· auth_ldap

Es también valor para observar que dos de los módulos de Apache pueden ser más peligrosos que otros: mod_autoindex y mod_info. El primer módulo preve la indexación de direcciones automática del directorio, y es permitido por el defecto. Es muy fácil utilizar este módulo para comprobar si Apache funciona en un servidor (e.g. http://server_name/icons/) y conseguir el contenido de los directorios del web server, cuando no se encuentra ningunos archivos del índice en ellos. El segundo módulo, mod_info, debe nunca ser accesible del Internet, principalmente porque revela la configuración del servidor de Apache.

Chrooting el servidor
Es decir limitar el acceso de los procesos de Apache a los filesystems. La técnica chrooting significa crear una nueva estructura del directorio de raíz, moviendo todos los demonios a este directorio, y correr al demonio apropiado en ese nuevo ambiente.

Comenzaremos este proceso creando una nueva estructura del directorio de raíz bajo directorio de /chroot/httpd:

mkdir -p /chroot/httpd/dev
mkdir -p /chroot/httpd/etc
mkdir -p /chroot/httpd/var/run
mkdir -p /chroot/httpd/usr/lib
mkdir -p /chroot/httpd/usr/libexec
mkdir -p /chroot/httpd/usr/local/apache/bin
mkdir -p /chroot/httpd/usr/local/apache/logs
mkdir -p /chroot/httpd/usr/local/apache/conf
mkdir -p /chroot/httpd/www

Se debe realizar con privilegios de root, con permisos de acceso 0755. Posteriormente se debe crear un archivo especial del dispositivo: /dev/null:

ls -al /dev/null
crw-rw-rw- 1 root wheel 2, 2 Mar 14 12:53 /dev/null
mknod /chroot/httpd/dev/null c 2 2
chown root:sys /chroot/httpd/dev/null
chmod 666 /chroot/httpd/dev/null

En el caso de un sistema de FreeBSD, la línea siguiente se debe agregar a /etc/rc.conf:
syslogd_flags= " - l /chroot/httpd/dev/log "

El paso siguiente es copiar el programa principal del httpd en el árbol nuevo del directorio con todos sus binarios y librerias necesarias. Para hacer eso, debemos elaborar la lista de todos los archivos requeridos. Podemos hacer tal lista usando los comandos siguientes (su presencia depende de sistema operativo particular):

Comando
Disponibilidad
Ion de Descript
ldd
Todos
Dependencias dynamiic de las listas de ficheros ejecutables o de librerías compartidas
ktrace/ktruss/kdump
*BSD
Permite el trazo de proceso del kernal, exhibe datos del rastro del kernal
sotruss
Solaris
Llamadas del procedimiento de la librería compartida de los rastros
strace/ltrace
Linux
Llamadas y señales del sistema de los rastros
String
Todos
Encuentra las secuencias imprimibles en archivos binarios
trace
AIX
Los expedientes seleccionaron acontecimientos del sistema
trace (freeware)
HP-UX <10.20>11
Remonta las llamadas del sistema que un proceso invoca en HP-UX 11

Configurando Apache, editando el archivo httpd.conf.
El primer paso es quitar el archivo de hroot/httpd/usr/local/apache/conf/httpd.conf y crear un nuevo en su lugar. Comparado con el archivo de la configuración de Apache del defecto, se han realizado los cambios siguientes:
El número de módulos permitidos se ha reducido perceptiblemente
Apache no divulga la información sobre su número de versión (directorios: ServerTokens, ServerSignature)
Los procesos de Apache (excepto el proceso de la raíz) se fijan para ser ejecutados con los privilegios regulares únicos del usuario/del grupo (directorios: Usuario, grupo)
Apache permitirá el acceso solamente a los directorios, a los subdirectories y a los archivos, que se especifican explícitamente en el archivo de la configuración (directorios: El directorio, permite); el resto de las peticiones serán negadas por el defecto
Apache registrará más información sobre peticiones del HTTP


Directive and setting
Description/rationale
ServerSignature Off
Evita dar información de versión y errores en pagina Web
ServerTokens Prod
Evita dar la versión del Servidor en encabezados de http.
Listen 80 (remove)
Borra la directiva “Listen” , solo disponible en ssl.conf, es decir, el servidor solo estara disponible en https.
User webserv (or whatever you created in step 2 above)
Todos los proceso hijo correran con privilegios de usuario no root.
Group webserv (or whatever you created in step 2 above)
Todos los proceso hijo correran con privilegios de grupo no root
ServerAdmin -webmaster@xianco.com
Use un alias de mail
UserDir disabled root
Deshabilitar comando para acceso archivos

Order Deny, Allow
deny from all

Denegar acceso a archivos de sistema.


Cambiar los permisos de los archivos y directorios
Se debe verificar el control de acceso al directorio de principal de Apache, tal como se ha visto en los incisos principales; si estamos el sistemas Unix los permisos deben ser 0775. En los siguientes archivos:
· Htdocs
· Cgi-bin
· Logs-dir
· Bin-dir

Eliminar archivos y directorios no necesarios.
Todos aquellos directorios y archivos no validos deben ser eliminados.

HTTP Logging.
Los servidores del Web normalmente permiten registrar el tráfico en el mismo a través de bitacoras, sin embargo no tienen la capcidad de analizar el cuerpo de las peticiones de servicio, por lo que se explota la vulnerabilidad en POST para realizar ataques.
A la fecha ya existe software adicional que permite un registro completo de peticiones y respuestas con una granularidad mayor que la que permite el mismo servidor.

Monitoreo de trafico al servidor
Además es de contar con elementos de registro proporcionar, se puede supervisar el trafico en la red hacia el servidor, para evitar ataques

Prevención contra ataques.
El firewall debe contar con las reglas necesarias a fin de minimizar loas vulnerabilidades, en base a peticiones usuarios, direcciones IP, sesiones, aceptando en general solo peticiones validas.


ANALISIS

El método mencionado permite el alcanzar de un nivel más alto de la seguridad del servidor de Apache que el ofrecido en la instalación por defecto.

Permite solamente los módulos absolutamente necesarios de Apache, encontrando una nueva vulnerabilidad en uno de ellos no tiene que indicar que nuestro servidor es vulnerable. El número de versión de Apache que oculta, dando vuelta del servicio de la indexación de direcciones del directorio, el chrooting y la configuración restricta hacen un robo acertado muy difícil.
Además si se habilita el protocolo SSL para asegurar Apache, se necesitan crear los certificados necesarios para utilizar la encripcion de las comunicaciones, los certificados se deben instalar en el servidor Web.

La opción LDAP (Lightweight Directory Access Protocol) se puede habilitar en el servidor Apache agregando las directivas de autenticación adecuadas en un archivo aparte o en el mismo httpd.conf, LDAP almacena la información de login (usuario y contraseña) y es utilizado para autenticarse aunque es posible almacenar otra información (datos de contacto del usuario, ubicación de diversos recursos de la red, permisos, certificados, etc).

No hay comentarios: