ecoestadistica.com

lunes, junio 19, 2006

Tutorial: 20 maneras de asegurar la configuracion de Apache...

Las 20 maneras de hacer a tu apache mas seguro.Tengan en cuenta que en materia de seguridad no hay garantias ni absolutos.

1.-Instalar los ultimos parches de seguridad:No hay sentido en poner cerraduras en las ventanas, si tu puerta esta abierta de par en par.

2.-Ocultar el número de versión de Apache, y otra información sensible:Por defecto muchas instalaciones de Apache dicen qué versión de Apache estás funcionando, qué sistema operativo, y los módulos de Apache que están instalados en el servidor. Los atacantes pueden utilizar esta información a su ventaja al realizar un ataque.Hay dos directorios que necesitas agregar, o corregir en tu archivo de ¨httpd.conf¨:
ServerSignature Off
ServerTokens Prod


El ServerSignature aparece en las páginas generadas por apache tal como ¨error 404¨, ¨listados del directorio¨, etc.

El directorio de ServerTokens se utiliza para determinar lo que pondrá Apache en el servidor en respuesta del HTTP header.

3.-Cerciorarte de que apache esté funcionando bajo tu cuenta y grupo de usuario:Varias instalaciones de apache hacen que funcione como usuario a ¨Nobody¨. Suponer un Apache, y tu mail server funcionando como nobody puede permitir un ataque,a través de Apache, comprometiendo tu mail server también:
User apache
Group apache


4.-Asegurarte de que los archivos fuera de web root no estén servidos:No quisiéramos que apache pudiera tener acceso a ningún de los archivos fuera de su web root.Si se asume que tu Web site se coloca bajo un directorio (llamaremos a este /web), tú lo instalaras como sigue:





Observamos que fijamos Options None y AllowOverride None esto pondra off a todas las opciones y se eliminan para el servidor. Ahora tienes que agregarlas explícitamente para cada directorio que requiera una opción o una invalidación.

5.- Poner Off al directory browsing:Puedes hacer esto con las opciones directivas dentro de una etiqueta del directorio.Fijar las ¨Options¨ a ¨None¨ o -¨Indexes¨.
Options -Indexes

6.- Poner Off server side includes:Tambien Puedes hacer esto con las opciones directivas dentro de una etiqueta del directorio.Fijar las ¨Options¨ a ¨None¨ o ¨-Includes¨.
Options -Includes

7.- Poner Off la ejecucion de CGI:Fijar las ¨Options¨ a ¨None¨ o ¨-ExecCGI¨
Options -ExecCGI

8.- No permitir que apache siga acoplamientos simbólicos:Fijar las ¨Options¨ a ¨None¨ o ¨-FollowSymLinks¨
Opciones - FollowSymLinks

9.- Poner Off multiples opciones:Si deseas apagar a todas las opciones simplemente usa:
Options None
Si solo deseas poner Off algunas opciones, solo pon un espacio en el directorio:
Options -ExecCGI -FollowSymLinks -Indexes

10.- Poner Off a la ayuda para los archivos de .htaccess:Esto se hace en una etiqueta del directorio pero con el directorio de ¨AllowOverride¨. Fijarlo a ¨None¨.
AllowOverride None
Si deseas asegurarte de que no pueden ser descargados, y/o eliminados cambias el nombre por algo con excepción de .htaccess. Por ejemplo podríamos cambiarlo a .httpdoverride, y bloqueamos todos los archivos que comienzan con .ht de ser descargado de la siguiente forma:


11.- Ejecutar mod_security: mod_security es un módulo práctico y estupendo de Apache escrito por Ivan Ristic, el autor de Apache Security desde O'Reilly press.
Puedes hacer lo siguiente con mod_security:

* Filtración simple
* Filtración basada expresión regular
* Validación de codificación del URL
* Validación de Unicode Encoding
* Auditoria
* Prevención del ataque de Null byte
* Upload memory limits
* Enmascarar la identidad del servidor
* Built in Chroot support
* Y más

12.- Inhabilitar cualquier módulo innecesario:Apache viene típicamente con varios módulos instalados. Estudia la documentación de los módulos de apache y aprenderas lo que hace cada módulo. Muchas veces encontrarás que no necesitas tener activados algunos modulos.
Buscar las líneas en tus ¨httpd.conf¨ que contengan ¨LoadModule¨. Para inhabilitar el módulo solo debes agregar un # al principio de la línea. Para buscar los módulos que estan funcionando:
grep LoadModule httpd.conf
Aquí están algunos módulos que se instalan típicamente pero a menudo no son necesarios: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.

13.- Cerciorarte de que solamente Root tenga acceso a los config y a los binaries de apache: Esto se puede hacer si asumimos que la instalacion de tu apache está situada en ¨/usr/local/apache¨ como sigue:
chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache


14.- Bajar el valor del time out:Por el defecto el directorio del ¨Timeout¨ es fijado a 300 segundos. Puedes disminuirlo ayudando a atenúar los efectos potenciales de un ataque de denial of service.
Timeout 45

15.- Limitación de peticiones grandes:Apache tiene varios directorios que permiten que limites el tamaño de una petición, ésto puede también ser útil para atenuar los efectos de un ataque denial of service.
Un buen lugar a comenzar es el directorio de ¨LimitRequestBody¨. Este directorio es fijado a ilimitado por defecto. Si estás permitiendo uploads de archivos de no más de 1MB, podrías fijar este ajuste en algo como:
LimitRequestBody 1048576
Algunos otros directorios a mirar son ¨LimitRequestFields¨, ¨LimitRequestFieldSize¨ y ¨LimitRequestLine¨. Estos directorios se fijan a los defectos razonables para la mayoría de los servidores, pero puedes desear limitarlos para adaptarlos lo mejor posible a tus necesidades.

16.- Limitación del tamaño de XML Body: Si estás ejecutando el ¨mod_dav¨entonces puedes desear limitar el tamaño máximo de un cuerpo de la petición de XML. El directorio de ¨LimitXMLRequestBody¨ está solamente disponible en Apache 2, y su valor prefijado es 1 millón de octetos (aproximadamente 1mb). Muchos tutoriales tendrán fijado este valor a 0 lo que signifiqua que los archivos de cualquier tamaño pueden subidos,lo que puede ser necesario si estás utilizando WebDAV para subir archivos grandes, pero si lo estás utilizando simplemente para el control del source, puedes fijar un límite superior, tal como 10mb:
LimitXMLRequestBody 10485760

17.- Limitación de concurrencia:Apache tiene varios ajustes de la configuración que se pueden utilizar para ajustar la dirección de peticiones concurrentes. El ¨MaxClients¨ es el número máximo de los pequeños procesos que serán creados para servir peticiones. Esto se puede fijar demasiado alto si tu servidor no tiene bastante memoria para manejar una gran cantidad de peticiones del concurrente.
Otros directorios tales como ¨MaxSpareServers¨, ¨MaxRequestsPerChild¨, y sobre Apache2 ¨ThreadsPerChild¨, ¨ServerLimit¨, y ¨MaxSpareThreads¨ son importantes de ajustar para emparejar tu sistema operativo, y el hardware.

18.- Acceso de restricción por el IP:Si tienes un recurso que deba ser accesado por cierta red, o IP address puedes hacer cumplir esto en tu configuración de apache. Por ejemplo si deseas restringir el acceso a tu Intranet para permitir solamente la red 176.16:
Order Deny,Allow
Deny from all
Allow from 176.16.0.0/16

O por el IP:
Order Deny,Allow
Deny from all
Allow from 127.0.0.1


19.- Ajustando la configuracion de KeepAlive:KeepAlive es activado por defecto y debes dejarlo encendido, pero puedes considerar el cambiar¨MaxKeepAliveRequests¨ que por defecto esta fijado en 100, y ¨KeepAliveTimeout¨ que por defecto esta en 15. Analizando tus ficheros a diario podras determinar los valores apropiados.

20.- Hacer Funcionar Apache en un ambiente de Chroot:¨el chroot¨ permite que ejecutes un programa en su propio ambiente aislado. Esto evita que un defecto dentro en un servicio pueda afectar todo lo demás en el servidor.mod_security se ha construido en ayuda del chroot. Hace el proceso tan simple como agregar un directorio del mod_security a tu configuración:
SecChrootDir /chroot/apache

Referencias:
http://www.dealazon.com/product/0596007248

ecoestadistica.com