Ejecutar archivos en sistemas de ficheros noexec
Publicado el 18 de Enero ,2008 por ekhtorEn muchos casos, nos podemos encontrar con sistemas muy bien configurados por los adminitradores, que para aumentar la protección del sistema añaden la opción noexec en el /etc/fstab. Esto nos impide ejecutar cualquier archivo que se encuentre en un sistema de ficheros.
A continuación, un ejemplo del uso de la opción noexec:
/dev/hda2 on /home/type ext3 (rw,noexec,nosuid)
En el ejemplo anterior podemos ver que el directorio /home tiene opciones de lectura-escritura, no permite ejecuciones de programas a ningún usuario desde el $HOME, y además no permite la asignación del bit suid. Con estas opciones es muy difícil realizar un ataque desde este directorio.
En el caso de ejecutar un script cualquiera, podemos observar el resultado:
/home/ekhtor
ekhtor@servidor$ ./script.sh
bash: ./script.sh: Permission denied
Para saltarnos esta protección, lo más fácil es hacer una llamada al intérprete y especificar el argumento:
/home/ekhtor
ekhtor@servidor$ sh script.sh
hola mundo
Simplemente con el comando anterior podremos ejecutar todos los scripts que queramos, pero no programas compilados porque no requieren de un intérprete. Para estos usamos lo siguiente:
/home/ekhtor
ekhtor@servidor$ ./ejecutable
bash: ./ejecutable: Permission denied
ekhtor@servidor$ /lib/ld-linux.so.2 ./ejecutable
hola mundo
Quizá la opción noexec pueda detener a los atacantes noveles, pero no a uno experimentado, asi que la mejor forma de no permitir la ejecución de archivos, será proporcionando a todos los usuarios una shell restrictiva, como rbash o rksh.
Éstas shells impiden que los usuarios ejecuten archivos que no se encuentran en su variable $PATH y por supuesto impiden la modificación de ésta.


2 Respuestas to “Ejecutar archivos en sistemas de ficheros noexec”
Por karlinux el 19 Ene, 2008 | Responder
Por favor a ver si me puedes explicar mejor la última parte:
“Quizá la opción noexec pueda detener a los atacantes noveles, pero no a uno experimentado, asi que la mejor forma de no permitir la ejecución de archivos, será proporcionando a todos los usuarios una shell restrictiva, como rbash o rksh.
Éstas shells impiden que los usuarios ejecuten archivos que no se encuentran en su variable $PATH y por supuesto impiden la modificación de ésta.”
Como hacerlo porque me interesa el tema, y por cierto ekhtor, no se me ha olvidado lo que tenemos pendiente, ahora tengo mucho trabajo y no he podido seguir con ello.
Abrazos
Por ekhtor el 19 Ene, 2008 | Responder
Lo primero que necesitamos para crear un shell restricto es el siguiente comando:
/bin/bash -r
Esto nos crear un enlace simbólico de /bin/bash a /bin/rbash:
lrwxrwxrwx 1 root root 4 2007-12-30 11:09 rbash -> bash
Con esto ya tenemos la bash restricta que queríamos, y ahora sólo hace falta asignarsela al usuario que queramos que no ejecute archivos:
# usermod -s /bin/bash usuario
Por último hay que cambiar la variable PATH en su archivo $HOME/.profile para asignarle un directorio donde se encontrarán los programas que pueda ejecutar(se suelen hacer enlaces simbólicos a los programas dentro de estos directorios).
Ahora ponemos el archivo .profile del usuario con el root como propietario para que no pueda modificarlo:
# chown root /home/usuario/.profile
Y para restringir aún más el archivo .profile, puedo modificar los atributos también para impedir la modificación del archivo:
# chattr +i the /home/usuario/.profile
Espero que te haya servido de ayuda, para cualquier duda no dudes en comentar.
Un saludo Carlos!!