Categorías
Hacking

Cómo crear jaulas CHRoot en OpenSSH y restringir el acceso de los usuarios – Parte 2 de 2

Demostración en vídeo de este post.

 

Las jaulas CHRoot representan una buena forma de securizar el acceso a servidores SSH, sin embargo, su creación y gestión en ocasiones se puede complicar.
En el post anterior se ha explicado cómo configurar una jaula en OpenSSH, pero dicha jaula a efectos prácticos, no es funcional. Como has podido comprobar, no es posible ejecutar ningún comando de los que habitualmente lanzamos en sistemas Linux, tales como ps, mv, cp, ls, entre muchos otros. El motivo de esto, es que en la jaula es necesario incluir dichas utilidades en el directorio correcto y, además, se deben copiar todas las librerías y dependencias necesarias.

En este post, verás cómo incluir en la jaula creada anteriormente todas las dependencias necesarias.

Incluir utilidades y dependencias en la Jaula.

De hecho, este procedimiento ya se ha explicado en el post anterior cuando copiamos el interprete /bin/bash en la jaula. Para otras utilidades se debe hacer exactamente lo mismo.
Vamos a empezar con uno de los comandos más útiles en Linux, el comando ls.

Como se puede apreciar, se copian cada una de las librerías que enseña el comando «ldd» en el directorio correspondiente en la jaula CHRoot. No se nos puede escapar ninguna librería, ya que si eso ocurre, el binario no funcionará correctamente, estas librerías son dependencias necesarias para que el programa se pueda ejecutar.

Finalmente, basta con copiar el binario dentro de la jaula y con esto, estará todo preparado para que el usuario con acceso restringido pueda ejecutar esas herramientas.

Utilidades «core» en la jaula

Se sigue el mismo procedimiento con otros programas que son fundamentales para que el usuario pueda interactuar con el sistema, tales como «cp», «mv», «ps» y «top». Como se puede apreciar, se siguen los mismos pasos, no es muy complicado pero no se nos puede escapar ninguna librería o dependencia.

Dado que en este caso, se han copiado 4 utilidades al directorio «bin» de la jaula, para poder usarlas es necesario copiar también las dependencias necesarias y como se puede apreciar en la siguiente imagen, son unas cuantas.

El comando utilizado para copiar todas las librerías anteriores en la aula es el siguiente:

cp -v /lib/x86_64-linux-gnu/{libproc2.so.0,libtinfo.so.6,libc.so.6,libsystemd.so.0,libcap.so.2,libgcrypt.so.20,liblzma.so.5,libzstd.so.1,liblz4.so.1,libgpg-error.so.0,libpcre2-8.so.0,libattr.so.1,libacl.so.1,libselinux.so.1} /home/chroot/lib/x86_64-linux-gnu/

de esta manera puedes copiar y pegar en tu terminal, sin necesidad de ir una a una. Ahora bien, otra forma de hacer que esto funcione consiste en simplemente copiar todas las librerías que hay en el directorio /lib/x86_64-linux-gnu, pero lo que se pretende con una jaula, es que el usuario cuente con la menor cantidad de elementos disponibles en su entorno y reducir drásticamente las posibilidades de elevación de privilegios.

Una vez que ya se encuentran todas las librerías en su sitio, es el momento de comprobar que todo funciona correctamente y para ello, basta con establecer una conexión SSH y verificar que es posible ejecutar los programas que se han incorporado en la jaula.

Comandos tales como «cp», «mv» y «ls» funcionan correctamente, sin embargo, los programas «top» y «ps» necesitan acceso a los procesos que se encuentran disponibles en el sistema y, tal como se enseña en el mensaje de error, es necesario montar el directorio «/proc». En este caso, basta con ejecutar el siguiente comando en el sistema Kali

mount -t proc proc /home/chroot/proc

Esto, siempre y cuando sea deseable que el usuario pueda listar todos los procesos que se encuentran en ejecución, algo que posiblemente no sea lo mejor y por lo tanto, es posible que no sea conveniente incluir dichas utilidades.

Debes realizar exactamente el mismo procedimiento para cualquier otra utilidad que quieras incluir en la jaula, simplemente incluir el programa en la ruta que le corresponda y, si requiere librerías compartidas, hay que incluirlas también. Con otros programas e interpretes, tales como Python, Ruby o PHP hay que hacer lo mismo, pero en esos casos, las dependencias suelen ser muchas más, además, dichos interpretes podrían ser utilizados para escapar de la jaula por lo que normalmente no se instalan.

Espero que este post te haya gustado y si es así, te leo en los comentarios.

Un saludo y Happy Hack!
Adastra.

Categorías
Hacking Networking Services - Software

Cómo crear jaulas CHRoot en OpenSSH y restringir el acceso de los usuarios – Parte 1 de 2

Demostración en vídeo de este post.

OpenSSH es una de las implementación más extendidas del protocolo SSH y entre otras muchas cosas, soporta la creación de jaulas para usuarios. Esta característica resulta especialmente útil cuando se pretende restringir el acceso a ciertas cuentas de usuario en el sistema. En este post, verás cómo crear una jaula chroot con OpenSSH.

¿Qué necesito para implementar una jaula CHRoot con OpenSSH?

Solamente necesitas editar el fichero de configuración del servidor, el cual por defecto se encuentra ubicado en «/etc/ssh/sshd_config». En este fichero se encuentra la configuración maestra del servidor, por lo tanto, cualquier cambio que hagas debe ser válido, de lo contrario tu servidor no arrancará.
Las jaulas o “chroot” están pensadas para implantar sobre una cuenta de usuario e impedir que éste tenga acceso a información, potencialmente sensible, que se encuentra en directorios tales como «/etc», «/bin», «/usr», etc. En versiones anteriores a la 4.8 de OpenSSH, era necesario utilizar soluciones desarrolladas por terceros para poder implementar jaulas sobre los usuarios autenticados, pero en las versiones más recientes del servidor OpenSSH, es posible utilizar la directiva ChrootDirectory para “enjaular” a los usuarios autenticados en un directorio indicado y, de esta manera, impedir que tengan una imagen global de todo el sistema. Solo verán lo que se establezca en dicho fichero.

Procedimiento para crear una jaula.

A continuación se describe el procedimiento, paso a paso, para crear una «jaula» plenamente funcional.

Paso 1: Crear la estructura de directorios.

En primer lugar, hay que crear la estructura de directorios que tendrá todo lo que le necesita el usuario para trabajar en el sistema.

Lo primero que hay que tener en cuenta, es que para que el usuario, una vez autenticado, pueda crear una sesión interactiva, necesita contar con un interprete como bash en su jaula, por ese motivo en la imagen anterior se aprecian los nodos necesarios para ello.

Paso 2. Copiar las librerías necesarias para crear una shell interactiva con bash

A continuación, es necesario establecer los permisos adecuados en el directorio de la jaula creado anteriormente y, además, crear el directorio «bin», el cual contendrá el programa «bash» que permitirá crear una sesión interactiva. Como te imaginarás, no basta simplemente con copiar el programa, es necesario incluir también sus dependencias y librerías compartidas, las cuales deben ubicarse dentro de la jaula. Para realizar todo el procedimiento, se ejecutan los comandos que ves en la siguiente imagen.

Como se puede apreciar, es necesario ejecutar el comando «ldd» para saber exactamente, cuáles son las librerías que necesita el programa «/bin/bash». Una vez tenemos el listado de dichos ficheros, basta simplemente con copiarlos dentro de la jaula, eso sí, respetando los nombres de los directorios, que en este caso son «lib/x86_64-linux-gnu» y «lib64».

El último paso para tener un entorno chroot mínimo, consiste en copiar los ficheros «/etc/passwd» y «/etc/group» dentro de la jaula y habilitar la opción «ChrootDirectory» en el fichero de configuración de OpenSSH. Además, antes de copiar dichos ficheros, es importante editar el «/etc/passwd» y cambiar el interprete que viene por defecto, que es «/usr/bin/zsh», por «/bin/bash».

Con lo anterior, ahora se puede establecer una conexión SSH y, en este caso concreto, si el usuario que intenta iniciar sesión es «kali», éste se encontrará en un entorno muy restringido y, cómo se aprecia en la siguiente imagen, no podrá ejecutar prácticamente ningún comando ya que no tiene acceso a ninguna herramienta típica en sistemas Linux, de momento.

Como se puede apreciar en la imagen anterior, se tiene acceso remoto mediante SSH y, aunque se puede interactuar con el interprete de bash, no se puede ejecutar prácticamente ninguna utilidad ya que no se encuentra disponible en la jaula. Si bien es un entorno muy seguro, no es nada funcional y a efectos prácticos, es poco útil para el usuario. En este punto, es necesario incluir las herramientas que se pretende compartir con el usuario, el administrador podrá elegir las utilidades que podrá usar el usuario «kali», aportando un entorno con el que podrá interactuar de forma totalmente controlada.

En el siguiente artículo describiré el proceso para diseñar la jaula e incluir en ella las utilidades mínimas que necesitaría cualquier usuario.

Un saludo y Happy Hack!
Adastra.