Inicio > Hacking, Networking, Services - Software > Herramientas para Hacking en Entornos de Red – Hacking con SSH – Parte XI

Herramientas para Hacking en Entornos de Red – Hacking con SSH – Parte XI


ChrootJail con OpenSSH

Cuando se presta un servicio como SSH a usuarios externos (o incluso internos), existen una gran cantidad de riesgos que pueden causar daños importantes desde el robo de información sensible hasta la perdida de control sobre maquinas pertenecientes al segmento de red (cuando un atacante logra comprometer una red interna por medio de ataques inside-out). Todos estos indeseables efectos pueden ser causados simplemente por tener usuarios que “pueden acceder a mas recursos de los deberían”, por ejemplo si un desarrollador necesita ingresar a un servidor SSH, cabe preguntarse que directorios y que comandos podrá ejecutar dicho usuario en la maquina remota, es justo aquí donde entra en juego el concepto de “chroot-jail” el cual consiste básicamente en la definición de comandos, privilegios y directorios a los que puede acceder cada usuario que ingrese al sistema por medio de SSH. Esta no es una tarea trivial y requiere esfuerzo en determinar “la caja de herramientas” que tendrá el usuario enjaulado y los recursos a los que podrá acceder, por este motivo aunque aquí se indique un procedimiento básico para la creación un entorno chrooted, es necesario un análisis previo para determinar “que puede” y “que no puede” hacer el usuario enjaulado..

El procedimiento para conseguir esto en OpenSSH sigue los siguientes pasos:

  1. En primera instancia es necesario crear un grupo y un usuario que estarán “enjaulados” y que podrán acceder solamente a determinados recursos, ahora bien, para conseguir esto normalmente se debe crear una estructura de directorios que incluyen los comandos y directorios a los que el usuario podrá acceder, se trata de un procedimiento un poco engorroso, sin embargo se puede optimizar utilizando un script que permite crear “jaulas” de usuarios con acceso limitado. Para descargar dicho script es necesario dirigirse a la siguiente ruta:

    http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh

    Este script se encarga de copiar todos los recursos y librerías necesarios para la generación de la estructura de la jaula. No obstante bajo plataformas Debian y derivados no funciona correctamente y es necesario realizar algunas modificaciones que consisten básicamente en la definición del tipo de shell a utilizar y algunas librerías que tienen un nombre distinto en el script a las que maneja Debian, en el caso de que la plataforma del lector sea Debian o alguno de sus derivados, las modificaciones necesarias para que este script funcione las he subido aquí:

    http://www.fileserve.com/file/CfZNwqc
    (Recordar que para que el fichero SH contenido en el paquete comprimido sea ejecutable hay que establecer los permisos adecuados con “chmod 755 make_chroot_jail.sh”)

    Ahora, el primer paso será utilizar este script para crear un usuario y la estructura de directorios, para esto solamente basta con ejecutar lo siguiente:

    >make_chroot_jail.sh usuario_ssh /bin/bash /home/usuario_ssh

    Con lo anterior el script intentará crear el usuario “usuario_ssh” (algo que también es posible hacer con el comando “adduser” sin embargo el script ya lo hace por nosotros) además de esto, se habilitará un interprete de comandos que en este caso será “/bin/bash” también creará un directorio que será el directorio raíz del usuario, en este caso “/home/usuario_ssh”. Durante la ejecución del script se solicitará confirmación para la creación de directorios y recursos además también se solicitará el ingreso de la contraseña para el nuevo usuario que esta siendo creado.
    NOTA: Los comandos que el usuario podrá ejecutar el usuario enjaulado son aquellos que se encuentran definidos por defecto en el script, en concreto se encuentran almacenados en la linea 118 y corresponden al siguiente contenido:

    elif [ "$DISTRO" = DEBIAN ]; then APPS=”/bin/bash /bin/cp /usr/bin/dircolors /bin/ls /bin/mkdir /bin/mv /bin/rm /bin/rmdir /bin/sh /bin/su /usr/bin/groups /usr/bin/id /usr/bin/rsync /usr/bin/ssh /usr/bin/scp /sbin/unix_chkpwd”

    Si dependiendo de las necesidades del servicio, estos comandos son insuficientes o demasiados, siempre se pueden adicionar o eliminar del script.

  2. Con la estructura de la jaula creada, ahora es necesario establecer los permisos necesarios para que el usuario pueda acceder al servicio SSH sin problemas. Una chrootjail necesita cumplir con ciertos requerimientos para su correcto funcionamiento estos son:

    1. El usuario root debe ser el propietario del directorio home del usuario enjaulado

    2. El grupo del usuario y otros no deben tener permisos de escritura sobre el directorio home.

    3. Un usuario no puede ser enjaulado en un fichero, debe apuntar a un directorio.

      Con las reglas anteriormente indicadas, se procede a la ejecución de cada uno de los comandos necesarios para establecer de forma correcta los permisos a nivel de directorios y recursos, partiendo de la base que el directorio raíz del usuario enjaulado es “/home/usuario_ssh”

      >addgroup grupo_jaula

      Añadiendo el grupo `grupo_jaula’ (GID 1002) …

      Hecho.

      >chown root:usuario_ssh /home/usuario_ssh/

      >chmod 750 /home/usuario_ssh/

      >mkdir /home/usuario_ssh/ficheros

      >chown usuario_ssh: /home/usuario_ssh/ficheros/

      >adduser usuario_ssh grupo_jaula

      Añadiendo al usuario `usuario_ssh’ al grupo `grupo_jaula’ …

      Añadiendo al usuario usuario_ssh al grupo grupo_jaula

      Hecho.

    Con la ejecución de los comandos anteriores la estructura de la jaula ha quedado finalizada, solamente falta configurar el servicio SSH para habilitarla.

    NOTA: Si las reglas anteriores no se cumplen, OpenSSH cortará automáticamente la conexión con el servidor remoto indicando el error “Write Failed: Broken Pipe” posteriormente en el fichero de eventos de sistema (/var/og/auth.log) en la maquina donde se ejecuta el servicio SSH se podrán ver las siguientes lineas que detallan en mayor profundidad la causa del problema:

    Jul 29 01:21:09 debian sshd[2644]: pam_unix(sshd:session): session opened for user usuario_ssh by (uid=0)
    Jul 29 01:21:09 debian sshd[2644]: User child is on pid 2649
    Jul 29 01:21:09 debian sshd[2649]: fatal: bad ownership or modes for chroot directory “/home/usuario_ssh”
    Jul 29 01:21:09 debian sshd[2644]: pam_unix(sshd:session): session closed for user usuario_ssh

  3. En las ultimas versiones de OpenSSH es posible habilitar entornos “enjaulados” por usuario y/o grupos, de esta forma cada uno de los usuarios que intenta ingresar al servicio SSH pasará por una validación para determinar cual es la consola adecuada, su directorio de acceso y sus privilegios de acuerdo a la configuración establecida en el sistema. Para crear un entorno “jaula” filtrando por grupo:

Match Group grupo_jaula

ChrootDirectory /home/usuario_ssh
AllowTCPForwarding no
X11Forwarding no

Para hacerlo filtrando por usuario:

Match User usuario_ssh

ChrootDirectory /home/usuario_ssh
AllowTCPForwarding no
X11Forwarding no

Estas lineas deben ubicarse en el fichero de configuración del servidor SSH ubicado en /etc/ssh/sshd_config

Con los pasos anteriores es suficiente para tener un entorno chrooted para limitar las acciones de los usuarios que acceden a un sistema utilizando SSH. Posteriormente desde una maquina remota el usuario creado “usuario_ssh” podrá acceder al servicio SSH y solamente podrá navegar por la estructura creada anteriormente

>ssh usuario_ssh@192.168.1.34

usuario_ssh@192.168.1.34’s password:

Linux debian 2.6.32-5-amd64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 x86_64

The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

Last login: Sun Jul 31 00:58:34 2011 from galileo.local

-bash-4.1$

Una vez se ha autenticado el usuario en el servicio, OpenSSH ha verificado que el usuario pertenece al grupo “grupo_jaula” y automáticamente le ha enviado a su directorio “enjaulado” desde donde no tendrá acceso a ningún otro recurso del sistema, solamente aquellos que se encuentran en el directorio chroot, del mismo modo solamente podrá ejecutar algunos comandos que se han habilitado exclusivamente para el grupo “grupo_jaula” cualquier otro comando ingresado no será reconocido por el interprete de comandos.

-bash-4.1$ pwd

/

-bash-4.1$ whoami

-bash: whoami: command not found

-bash-4.1$ ps

-bash: ps: command not found

-bash-4.1$ cd ficheros/

Este mecanismo será uno “defensivo” para proteger los recursos e información contenida en la maquina de accesos no autorizados, por otro lado el mecanismo “ofensivo” será precisamente escapar de la jaula, esto se verá en próximas entradas de esta serie.

Si por alguna razón algo no ha quedado claro, puede dejar su comentario en cualquiera de las entradas o bien contactar conmigo por medio de correo electrónico.

  1. mcun
    marzo 24, 2012 en 8:39 pm

    el parche para Debian ya no esta disponible ne fileserver ….

  2. lalo
    julio 4, 2012 en 1:02 pm

    muy buen aporte

  1. septiembre 7, 2011 en 4:28 pm

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 922 seguidores

%d personas les gusta esto: