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.
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.
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.