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]