sábado, marzo 24, 2007

FreeBSD Jail Experience (Parte Uno)

Introduccion:
En este experimento trataremos de descubrir si es posible detectar una que una maquina es en realidad un jail, a partir de solo estar logueados en la misma.
Este experimento nos permitira determinar si la utilizacion de jails es segura.
Vamos a proceder en primer lugar a configurar un ambiente JAILed, y luego desde afuera, nos loguearemos mediante SSH, y trataremos de descubrir con algunos programitas muy sencillos donde es que estamos, o que es que estamos.
Vamos a ver que sale de todo esto...
Have FUN!!!


Configuracion Inicial:
La experiencia sera realizada sobre un VM Ware 5.0.0 build 13124, en una estacion de trabajo Intel Core DUO 1.8 Ghz, 1Gb de RAM. La configuracion de la VM es de 256 Mb de VRAM, lectora conpartida de DVD-RW. Un VDisk montado cuya particion / es de 5.5Gb, y otro VDisk montado en /mnt cuya particion es de 7.9Gb.
La version de FreeBSD utilizada para esto es: FreeBSD 6.1-RELEASE GENERIC i386.
Dicho FreeBSD, se lo esta accediendo en una private network entre la maquina real y el VM Ware, donde el FreeBSD se encuentra en la direccion 192.168.0.3, y tenemos como gateway a la maquina real en 192.168.0.1, asi las cosas...
Esto es lo conserniente a la maquina host del VM Ware, y la VM host del FreeBSD donde realizaremos las pruebas.


Configuracion del Jail:
El jail fue hecho en un espacio de disco asignado del segundo VDisk, y se ralizo de la siguiente manera, consultar jail(8) de las paginas man,
# mkdir /mnt/JAILS/jail_vm1
# set JAILED=/mnt/JAILS/jail_vm1
# cd /usr/src
# make world DESTDIR=$JAILED
# make distribution DESTDIR=$JAILED
# mount_devfs devfs $JAILED/dev

Con esos comandos damos los primeros seteos y armamos el jail_fs que vamos a necesitar para nuestro sistema.
Una vez realizados estos pasos, pasaremos entonces a configurar nuestro entorno.
Veamos, en primer lugar para que este pueda ponerse a disposicion en la red deberemos de defiir una IP alias para nuestra jail, con el siguiente comando.
# ifconfig lnc0 inet 192.168.0.20 netmask 255.255.255.0
Podemos tambien poner esto dentro de /etc/rc.conf de nuestro sistema base, pero por el momento esto lo definiremos como una tarea local en /etc/rc.local, y no como parte de nuestra configuracion.
Una vez hecho esto, debemos montar el sistema de archivos para los procesos, asi:

# mount -t procfs proc $JAILED

Y finalmente, podemos hacer una copia de la base de datos de usuarios de nuestro sistema, para poder asegurarnos una entrada para acciones administrativas posteriores.
Para hacer esto hagamos una copia, como sigue, de los archivos necesarios.
# cd /etc
# cp group passwd pwd.db passwd.bak spwd.db $JAILED/etc
Terminado l proceso de seteo inicial, finalmente podemos levantar nuestra jail, con el siguinete comando:

# jail $JAILED bsd.jvm1.com 192.160.0.20 /bin/sh /etc/rc
Lo que veremos a continuacion de esto es algo como lo que sigue:

Loading configuration files.
Setting hostname: bsd.jvm1.com.
Generating nsswitch.conf.
Generating host.conf.
Creating and/or trimming log files:.
ln: /dev/log: Operation not permitted
Starting syslogd.
ELF ldconfig path: /lib /usr/lib /usr/lib/compat
a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout
Starting local daemons:.
Updating motd.
/etc/rc: WARNING: Setting entropy source to blocking mode.
====================================================
Type a full screenful of random junk to unblock
it and remember to finish with . This will
timeout in 300 seconds, but waiting for
the timeout without typing junk may make the
entropy source deliver predictable output.

Just hit for fast+insecure startup.
====================================================
kern.random.sys.seeded: 1

Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
5d:e1:de:d4:31:45:66:3f:d9:7d:1f:d5:26:36:15:a4 root@bsd.jvm1.com
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
d0:57:c4:c4:9a:a3:cf:ce:7a:6c:bd:dd:7b:d0:6f:16 root@bsd.jvm1.com
Generating public/private rsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_rsa_key.
Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub.
The key fingerprint is:
ed:35:d9:5b:8a:c3:41:5e:81:c8:31:3f:b7:04:f3:b5 root@bsd.jvm1.com
Starting sshd.
Starting cron.
Local package initialization:.

Sun Mar 25 02:45:48 UTC 2007


Lo que nos indicara al fin que la JAIL esta funcionando y lista para ser probada, podemos entonces logonearnos bien desde la misma consola con el comando ssh, o bien desde afuera de la VM de VMWare, que seria lo mas correcto.
Vale la pena destacar que dentro del jail, al que ahora llamaremos como indica su hostname, JVM1, todo es como en una maquina normal, de hecho tenemos varios archivos de los que al menos seria recomendable tener unas copias vaciar, lo que veremos en el proximos apartado.

En el caso de la configuracion, tenemos que poner especia atencion a los seteos previo o si permitiremos que se hagan una vez arrancado el jail.
En lo personal, creo que una politica mas rigida seria de mucha ayuda, y preferiria dejar que los seteos de nombres del jail se hagan fuera de este y no permitir que se tenga acceso al hardware jailed desde este.



Procedimientos Iniciales: I feel safe in the jail!!!
Para loguearnos desde fuera del VM Ware, debemos apuntar a la direccion de ip 192.168.0.20, que la que le hemos definido al JVM1.
Lo primero que notamos es que es identico a un FreeBSD normal, pero tiene muchas fallas que nos darian la pauta de un jailed a primera vista, lo que no nos conviene.
Antes comenzar la experiencia vamos a tener que aplicar las politicas de seguridad habituales para estos juguetes de kernel.
En primer lugar no debemos permitir que se hagan seteos dentro de la jail, eso se puede controlar desde la variable
    security.jail.set_hostname_allowed: 0
almacenada en el archivo $JAILED/etc/sysctrl.conf. Otra de las variables que deberiamos bloquear es:

security.jail.allow_raw_sockets: 0

La que tambien se encuentra dentro del mismo archivo seria conveniente que podamos mantenerla quiera si desemos limitar las acciones de los usuarios.
Una cosa mas, lo cual se descuritira en la proxima entrega, que es, podemos reconocer los procesos que correr dentro del jail sin tener que estar dentro de este ambito por que podemos reconocer en la columna de estado una "J" mayuscula.

Finalmente, debemos decidir que es lo que montaremos en el jail, en esta ocacion, y por ser una tarea mas que apacionante, veremos como montar un Apache, pero en este caso a diferencia de mi articulo Montando una Red BSD con VM-Ware(tm) , en este caso hare especial incapie en la serguridad del apache.


Montando un Apache Server: Secure Web Jailed
Para mas informacion sobre apache, dirigirse a httpd.apache.org, donde encontraran toda la ayuda, o mas de la que voy a publicar sobre el mismo, al menos en esta ocacion.
Habiendo procedido con la instalacion estandar, segun indica el manual de instalacion de Apache, en su version mas simplista, tenemos varias cosas para sacarle al Apache antes de ponerlo a funsionar.
Lo primero que vamos a pensar es "Para que quiero este Apache?", la respuesta a esta pregunta nos lleva automativamente a quitar todos los modulos que no vayamos a usar y a optimar lo mejor posible el uso de este. Podemos visitar Apache Tuning para mas informacion.

Conviene tener en cuenta los accesos por htpaswd file bien resguardados, no pensemos en este server como un sevidor para montar grandes proyectos, tengamos en cuenta que si tenemos varias de estas jail, vamos a tener asi mismo varios servicios corriendo de mas, no solo los del host, sino ademas algunas copias jailed, de varios procesos necesarios.

A primera vista, veremos que acceder a nuestro Apache Jailed, en la direccion 192.168.0.20 de nuestro jailed machine, es todo normal, y de hecho, si logramos corromper el Apache a drede, como por ejemplo escribiendo algu CGI que nos muestre el sistema de achivo, o al gun backDoOr de ejecucion web, veremos que en lo absoluto notamos diferencia con otro sistema.


Consideraciones Finales: mmmmm...
Como veremos en la proxima entrega, cuando tenemos una cuenta shell, todo cambia, pero tenemos varias formas de prevenirnos, aun dando el root del jail a quien sea, pero ojo!!!
No hay que confiarse por que, todo tiene su trampa.

Nos queda entonces ver, como se vera esto desde una cuenta shell, como prevenir que las cuentas de usuarios limitados puedan ver, entre otras cosas, los procesos que no les pertenecen, y hasta poder hacer esto con root.

Hasta la proxima...

D4rkCore Hell

jueves, marzo 22, 2007

Vulnerabilidades del Dia

Vulnerabilidades del dia... O al menos las que considero peligrosas.
S eñores hay un monton de paginas llenas de fuentes para poder testear las mismas.
Aqui les paso los problemas como aparecen el SecurityFocus.com, depues lo demas queda por
cuenta de ustedes. Bye...

En mi caso, solo pude observar la de JS IFRAME, y la verdad que puede convertirse en un problema severo, mas que nada en pequeñas empresas donde vamos a encontrar varios productos mozilla.

Saludos.
D4rkCore Hell