Aqui va uno;

http://www.securityfocus.com/infocus/1694

y la ``mega traducción´´ resumida personal adjunto......

Un saludo




From: [EMAIL PROTECTED]
Reply-To: Seguridad0 <[email protected]>
To: "Seguridad0" <[email protected]>
Subject: Re: [Seguridad0] apache - chroot
Date: Sat, 4 Feb 2006 17:00:14 +0100 (CET)
MIME-Version: 1.0
Received: from alpha.routhost.com ([67.15.192.2]) by bay0-mc3-f14.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.211); Sat, 4 Feb 2006 08:01:31 -0800 Received: from localhost([127.0.0.1]:34814 helo=alpha.routhost.com ident=[U2FsdGVkX18vljxWOLPzBKLHrzcyHEreCEKLhOrOwqo=])by alpha.routhost.com with esmtp (Exim 4.52)id 1F5Pp8-000748-SV; Sat, 04 Feb 2006 10:59:43 -0500 Received: from [66.111.58.51] (port=59304 helo=socios.momona.org)by alpha.routhost.com with esmtp (Exim 4.52) id 1F5Pp5-00073v-31for [email protected]; Sat, 04 Feb 2006 10:59:39 -0500 Received: from localhost (unknown [66.111.58.51])by socios.momona.org (Postfix) with ESMTP id 59C2527EC0Afor <[email protected]>; Sat, 4 Feb 2006 17:00:15 +0100 (CET) Received: from socios.momona.org ([66.111.58.51])by localhost (momona2 [66.111.58.51]) (amavisd-new, port 10024)with ESMTP id 09863-05 for <[email protected]>;Sat, 4 Feb 2006 17:00:14 +0100 (CET) Received: from correo.eurodev.net (momona2 [66.111.58.51])by socios.momona.org (Postfix) with ESMTP id 9CE5D27EC02for <[email protected]>; Sat, 4 Feb 2006 17:00:14 +0100 (CET) Received: from 84-122-121-85.onocable.ono.com ([84.122.121.85])(SquirrelMail authenticated user [EMAIL PROTECTED])by correo.eurodev.net with HTTP; Sat, 4 Feb 2006 17:00:14 +0100 (CET)
X-Message-Info: zVLtYL4CdkmwxnV/XxSyRzba7u+V+9aKP+WNJJOH46Q=
References: <[EMAIL PROTECTED]><[EMAIL PROTECTED]><[EMAIL PROTECTED]><[EMAIL PROTECTED]>
User-Agent: SquirrelMail/1.4.4
X-Virus-Scanned: by amavisd-new-20030616-p10 (Debian) at socios.momona.org
X-BeenThere: [email protected]
X-Mailman-Version: 2.1.6
Precedence: list
List-Id: Seguridad0 <seguridad0_seguridad0.info.seguridad0.info>
List-Unsubscribe: <http://seguridad0.info/mailman/listinfo/seguridad0_seguridad0.info>,<mailto:[EMAIL PROTECTED]> List-Archive: <http://seguridad0.info/mailman/private/seguridad0_seguridad0.info>
List-Post: <mailto:[email protected]>
List-Help: <mailto:[EMAIL PROTECTED]>
List-Subscribe: <http://seguridad0.info/mailman/listinfo/seguridad0_seguridad0.info>,<mailto:[EMAIL PROTECTED]>
Errors-To: [EMAIL PROTECTED]
X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
X-AntiAbuse: Primary Hostname - alpha.routhost.com
X-AntiAbuse: Original Domain - hotmail.com
X-AntiAbuse: Originator/Caller UID/GID - [0 0] / [47 12]
X-AntiAbuse: Sender Address Domain - seguridad0.info
X-Source: X-Source-Args: X-Source-Dir: Return-Path: [EMAIL PROTECTED] X-OriginalArrivalTime: 04 Feb 2006 16:01:31.0694 (UTC) FILETIME=[43E2A4E0:01C629A4]

> En OpenBSD viene enjaulado por defecto  ;)
>
>
>>

 Sí, se que con OpenBSD viene enjaulado y que con *BSD en general es algo
mas sencillo, de hecho la mayoría de los howtos que hay por internet son
para *BSD, pero necesito información para Linux. Tampoco me vale makejail
:) tengo que hacerlo a pelo. Un saludo listeros.




_______________________________________________
Seguridad0(arroba)seguridad0.info
http://seguridad0.info/mailman/listinfo/seguridad0_seguridad0.info
Busqueda y archivos de mensajes http://www.mail-archive.com/[email protected]/
_______________________________________________
[Hospedado y patrocinado por Seguridad0 - http://www.seguridad0.biz]

Poner los servidores en CHROOT.

-       En primer lugar debemos crear un grupo y un usuario en nuevo sistema:

# groupadd apache
# useradd apache -c "Apache Server" -d /dev/null -g apache -s /sbin/nologin

Hay que decir que por defecto los procesos de apache trabajan con privilegios nobody, excepto el proceso principal que funciona con privilegios de root. Esto puede plantear un problema de seguridad, de cara a que un intruso entre en el sistema y pueda acceder a los demás procesos debajo del mismo UID/GID. Por lo tanto, la solución más óptima es arrancar Apache debajo del UID/GID de un user/group regular único, dedicado a ese software.

-       Lo siguiente es elegir los módulos mas adecuados de cara a la seguridad.

A continuación una lista de los módulos más importantes;

httpd_core:
mod_access: Suministra control de acceso basada en nombre de cliente, ip y otras características mod_auth: Requerido para poner usuarios con autenticación usando archivos de texto (autenticación basica) mod_dir: Requerido para buscar y para mostrar archivos del índex del directorio: "index.html", "default.htm", etc.. mod_log_config: Requerido para registrar las peticiones realizadas al servidor. mod_mime: Requerido para fijar el juego de caracteres, character set, content- encoding, handler, content-language, a y los tipos de documentos MIME.

Todos los demás módulos deben estar deshabilitados, con esta medidas estamos previniendo que un intruso se pueda aprovechar de la mala configuración de cualquier modulo.

- Una vez elegido los módulos adecuados y que no suponen un problema de seguridad, hay que proceder a la compilación de los mismos y configuración básica:

#./configure --prefix=/usr/local/apache --disable-module=all --server-
    uid=apache --server-gid=apache --enable-module=access --enable-

module=log_config --enable-module=dir --enable-module=mime --enable-module=auth

make
su
umask 022
make install
chown -R root:sys /usr/local/apache

-       El siguiente paso es empezar con la configuración de CHROOT;

Mediante CHROOT conseguiremos que los procesos de Apache no lleguen a los ficheros del sistema. La técnica de chroot, consiste el la creación de un nuevo conjunto de directorios raiz, y moviendo los demonios a esa estructura, gracias a esto, sólo el demonio elegido y sus procesos hijo, tendrán acceso sólo a esta nueva parte de directorios.

Comenzaremos este nuevo proceso, con la creación de un conjunto de directorios en:
/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

El dueño de todos estos directorios debe ser root, y los derechos de acceso de deben fijar a 0775; Después nosotros crearemos el archivo especial: /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

Se tiene que utilizar un diferente método para crear el /chroot/httpd/dev/log, que también se necesita para que el servidor trabaje correctamente; En el caso de los sistemas Freebsd, hay que añadir esta línea en el fichero /etc/rc.conf

syslogd_flags="-l /chroot/httpd/dev/log"

Debemos restar el demonio, para que el demonio syslog cargue la nueva configuración.
Si hay algún problema se puede mirar el  man de syslogd.

El paso siguiente es copiar el programa principal del httpd en el árbol nuevo del directorio con todos los binaries y bibliotecas necesarios. 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):
En nuestro caso nos interesan estos comandos:
Ldd y strace/ltrace

Un ejemplo puede ser este:

localhost# ldd /usr/local/apache/bin/httpd
/usr/local/apache/bin/httpd:
       libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x280bd000)
       libc.so.4 => /usr/lib/libc.so.4 (0x280d6000)

localhost# strings /usr/local/apache/bin/httpd | grep lib
/usr/libexec/ld-elf.so.1
libcrypt.so.2
libc.so.4

Los anteriores comandos, no sólo deben ser usados contra el httpd, sino que también a todas las bibliotecas y binarios requeridos, una vez localizados todos, tenemos que trasladar todos al nuevo directorio chroot.


Importante: en el fichero /chroot/httpd/etc/passwords tenemos que quitar todas las líneas excepto "nobody" y "apache". De una manera similar, debemos quitar todas las líneas excepto "apache" y "nogroup" de /chroot/httpd/etc/group. Después, tenemos que construir la base de datos de la contraseña como sigue:

cd /chroot/httpd/etc
pwd_mkdb -d /chroot/httpd/etc passwords
rm -rf /chroot/httpd/etc/master.passwd

El paso siguiente es probar si el funcionamiento del servidor httpd es correcto con la nueva configuración CHROOT. Para realizar eso, tenemos que copiar el archivo y la muestra index.html de la configuración de Apache por defecto:

cp /usr/local/apache/conf/httpd.conf /chroot/httpd/usr/local/apache/co
nf/
cp /usr/local/apache/htdocs/index.html.en /chroot/httpd/www/index.html


Después tenemos que cambiar el documento raiz del directorio; /chroot/httpd/usr/local/apache/conf/httpd.conf:

DocumentRoot "/www"

Después probamos a arrancar el servidor:

chroot /chroot/httpd /usr/local/apache/bin/httpd




-       Configuración de Apache.

El primer paso es quitar el archivo de /chroot/httpd/usr/local/apache/conf/httpd.conf y crear un nuevo en su lugar, con similar contento al siguiente:

# =================================================
# Basic settings
# =================================================
ServerType standalone
ServerRoot "/usr/local/apache"
PidFile /usr/local/apache/logs/httpd.pid
ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard
ResourceConfig /dev/null
AccessConfig /dev/null

# =================================================
# Performance settings
# =================================================
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 150
MaxRequestsPerChild 0

# =================================================
# Apache's modules
# =================================================
ClearModuleList
AddModule mod_log_config.c
AddModule mod_mime.c
AddModule mod_dir.c
AddModule mod_access.c
AddModule mod_auth.c

# =================================================
# General settings
# =================================================
Port 80
User apache
Group apache
ServerAdmin [EMAIL PROTECTED]
UseCanonicalName Off
ServerSignature Off
HostnameLookups Off
ServerTokens Prod
<IfModule mod_dir.c>
   DirectoryIndex index.html
</IfModule>
DocumentRoot "/www/vhosts"

# =================================================
# Access control
# =================================================
<Directory />
   Options None
   AllowOverride None
   Order deny,allow
   Deny from all
</Directory>
<Directory "/www/vhosts/www.ancert1.com">
   Order allow,deny
   Allow from all
</Directory>
<Directory "/www/vhosts/www.ancert2.com">
   Order allow,deny
   Allow from all
</Directory>

# =================================================
# MIME encoding
# =================================================
<IfModule mod_mime.c>
   TypesConfig /usr/local/apache/conf/mime.types
</IfModule>
DefaultType text/plain
<IfModule mod_mime.c>
   AddEncoding x-compress Z
   AddEncoding x-gzip gz tgz
   AddType application/x-tar .tgz
</IfModule>

# =================================================
# Logs
# =================================================
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
ErrorLog /usr/local/apache/logs/error_log
CustomLog /usr/local/apache/logs/access_log combined

# =================================================
# Virtual hosts
# =================================================
NameVirtualHost *
<VirtualHost *>
        DocumentRoot "/www/vhosts/www.ancert1.com"
        ServerName "www.ancert1.com"
        ServerAlias "www.ancert1-1.com"
        ErrorLog logs/www.ancert1/error_log
        CustomLog logs/www.ancert1.com/access_log combined
</VirtualHost>
<VirtualHost *>
        DocumentRoot "/www/vhosts/www.ancert2.com"
        ServerName "www.ancert2.com"
        ErrorLog logs/www.ancert2.com/error_log
        CustomLog logs/www.ancert2.com/access_log combined
</VirtualHost>

La información de los dos dominios presentados en el anterior fichero de configuración están en:

- /chroot/httpd/www/vhosts/www.ancert1.com
- /chroot/httpd/www/vhosts/www.ancert2.com
Y los logs de los mismos están:

- /chroot/httpd/usr/local/apache/logs/www.ebank.lab
- /chroot/httpd/usr/local/apache/logs/www.test.lab


Los directorios anteriormente comentados deben ser creados antes de arrancar el Apache la primera vez, el Apache no funcionará de otra manera. El dueño de los directorios debe ser root:sys, y los derechos se deben fijar a 0755.

Debemos ahora crea un script de arranque: “apache.sh”

#!/bin/sh

CHROOT=/chroot/httpd/
HTTPD=/usr/local/apache/bin/httpd
PIDFILE=/usr/local/apache/logs/httpd.pid

echo -n " apache"

case "$1" in
start)
        /usr/sbin/chroot $CHROOT $HTTPD
        ;;
stop)
        kill `cat ${CHROOT}/${PIDFILE}`
        ;;
*)
        echo ""
        echo "Usage: `basename $0` {start|stop}" >&2
        exit 64
        ;;
esac

exit 0

Con esto ya tendremos nuestro apache bien asegurado y protegido.

4.- Recomendaciones para proteger los servidores webs:

- Utilizar un sistema de autenticación para las aplicaciones que estén proporcionando datos críticos - Bloquee las cuentas después de que se produzcan varios intentos fallidos de inicio de sesión.
-       Fuerce el empleo de contraseñas
- Cifrar las cadenas de consulta que contengan nombres de usuario y contraseñas, pase información de autenticación - La no separación de la raiz web, permitirá a un hacker acceder a la raiz de los documentos sin más que solicitar archivos del tipo ../../../../../etc/passwd - Asignar permiso apropiados a los archivos para impedir que los usuarios puedan acceder a aquellos a los que no deberían acceder. - Forzar a la aplicación para que compruebe los permisos del usuario en cada URL y no sólo en la página inicial. - Emplear roles y derechos de usuario para garantizar una adecuada autorización de los usuarios. - Forzar los tiempos de validez de la sesión eliminando la información de sesión del servidor. - Proteja las claves de la sesión utilizando SSL para cifrar los datos que se encuentren en circulación

_______________________________________________
Seguridad0(arroba)seguridad0.info
http://seguridad0.info/mailman/listinfo/seguridad0_seguridad0.info
Busqueda y archivos de mensajes 
http://www.mail-archive.com/[email protected]/
_______________________________________________
[Hospedado y patrocinado por Seguridad0 - http://www.seguridad0.biz]

Responder a