Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Restringir el Directorio Raíz de un Proceso

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en Aix 6.1 al restringir el acceso al directorio raíz. Este procedimiento mejora la seguridad de la aplicación evitando ataques de tipo directorio transversal.

Necesidad

Restringir el directorio raíz de un proceso en AIX.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se dispone de un sistema operativo conforme con la especificación UNIX.

  2. Se tiene acceso a la interfaz de comandos (CLI) del sistema en cuestión.

Solución

  1. En situaciones en las cuales se desea restringir la visibilidad que un proceso tiene del sistema de archivos, se puede optar por cambiar el root del proceso. Podemos entender como root la propiedad de un proceso que indica cuál directorio del sistema de archivos será interpretado como directorio /.

  2. Por defecto, para todos los procesos, el directorio / corresponde al directorio / del sistema de archivos. Sin embargo es posible indicarle a un proceso que el directorio / para él, corresponde a un directorio diferente, como /home/jail.

  3. De este modo, dicho proceso solo podrá acceder a directorios y archivos hijos de dicho directorio, y en ningún momento retroceder hacia directorios externos.

  4. El proceso anterior se conoce como encarcelamiento o enjaulamiento y cuando se ha parametrizado dicha configuración para un proceso, se dirá que se ha creado una jaula chroot.

  5. Esto es particularmente util cuando:

    • Se quiere compartir información por FTP o SFTP y por ende se debe dar acceso al sistema de archivos del servidor. Con las jaulas chroot el servidor FTP solo mostrará al cliente la información necesaria.

    • Se quiere crear una shell restringida con acceso a un conjunto de comandos externos reducidos.

  6. Para crear dicho ambiente es necesario crear el directorio que contendrá la jaula chroot:

    creación de la jaula chroot
    1
    $ mkdir ~/jail
    
  7. Posteriormente reproducir en dicho directorio la estructura típica de un sistema UNIX:

    1
    2
    3
    $ mkdir -p ~/jail/lib
    $ mkdir -p ~/jail/bin
    $ mkdir -p ~/jail/tmp
    
  8. Luego se copian los comandos que se quieren tener disponibles en la jaula:

    1
    2
    $ cp /bin/ls ~/jail/bin
    $ cp /usr/bin/ksh ~/jail/bin
    
  9. A continuación se identifican las bibliotecas que requieren los comandos anteriores:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    $ ldd /bin/ls
    /bin/ls needs:
      /usr/lib/libc.a(shr.o)
      /unix
      /usr/lib/libcrypt.a(shr.o)
    $ ldd /usr/bin/ksh
    /usr/bin/ksh needs:
      /usr/lib/libc.a(shr.o)
      /unix
      /usr/lib/libcrypt.a(shr.o)
    
  10. En la anterior salida no se copia la dependencia /unix, correspondiente al núcleo de AIX, pues como tal las funciones del núcleo no se acceden como bibliotecas, sino como llamadas al sistema mediante la instrucción de interrupción del procesador.

  11. También cabe anotarse que no es necesario copiar las bibliotecas a la ruta actual donde se encuentran /usr/lib, sino que pueden ser copiadas a otro directorio perteneciente al PATH de bibliotecas, por ejemplo, /lib.

  12. Si el directorio de la jaula y los comandos que se quieren autorizar se encuentran en la misma partición, se puede evitar la copia de los comandos mediante la creación de enlaces duros a los mismos.

  13. Hecho esto se tendrá una jaula chroot básica configurada en el directorio ~/jail, con una shell korn (ksh). Utilizando el comando ls se obtiene lo siguiente:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ ls -R jail
    bin  lib  tmp
    ./bin:
    ksh  ls
    
    ./lib:
    libc.a      libcrypt.a
    
    ./tmp:
    
  14. El comando chroot encargado de cambiar el directorio raiz de un proceso, viene protegido para que solo el root pueda ejecutarlo. Para efectos de pruebas con usuarios se pueden otorgar permisos a los usuarios mediante:

    1
    2
    3
    4
    5
    6
    # ls -l /usr/sbin/chroot
    -r-xr--r--    1 bin     bin            2988 Mar 30 2009  /usr/sbin/chroot
    # chown root /usr/sbin/chroot
    # chmod 4755 /usr/sbin/chroot
    ls -l /usr/sbin/chroot
    -rwsr-sr-x    1 root     bin            2988 Mar 30 2009  /usr/sbin/chroot
    
  15. Finalmente un usuario puede iniciar el proceso enjaulado, mediante el siguiente comando:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    $ chroot ~/jail /bin/ksh
    $ pwd
    /
    $ typeset -x PATH=/bin
    $ ls -al
    total 0
    drwx------    5 0        0               256 Jun 24 21:13 .
    drwx------    5 0        0               256 Jun 24 21:13 ..
    drwx------    2 0        0               256 Jun 24 21:13 bin
    drwx------    2 0        0               256 Jun 24 21:13 lib
    drwx------    3 0        0               256 Jun 24 21:13 usr
    
  16. Así puede observarse que el directorio raíz del nuevo proceso es el directorio ~/jail, pero el proceso en cuestión no es consciente de dicha situación.

  17. Adicionalmente se puede ver que los nombres de usuario dueño y grupo dueño no se observan, sino que corresponden a los UID y GID correspondientes. Esto ocurre debido a que el archivo/etc/passwd no se encuentra en la jaula y por ende no se puede hacer la resolución de nombres.




Haz un comentario

Estado de los servicios - Términos de Uso