Hace un tiempo expliqué cómo funcionan los bits SETUID y SETGID. Sin embargo, al final de dicho artículo mencioné los riesgos involucrados al utilizar estos bits de modo, por ello es recomendable evitar o minimizar su uso. Una buena práctica al momento de realizar el hardening de un servidor es listar todos los archivos que tengan SETUID o SETGID, para evitar configuraciones inseguras.

Este artículo explica cómo utilizar find para buscar y encontrar todos los archivos y directorios que tengan SETUID y/o SETGID. Y de yapa cómo encontrar archivos y directorios con el STICKY bit habilitado (protección contra el borrado).

De acuerdo al manual de find, la opción -perm se utiliza para buscar archivos de acuerdo a sus permisos Unix. Es posible buscar permisos exactos (mode) o buscar archivos que cumplan ciertos requisitos (-mode):

       -perm -mode
              All of the permission bits mode are set for the file.   Symbolic
              modes  are accepted in this form, and this is usually the way in
              which would want to use them.  You must specify `u', `g' or  `o'
              if  you use a symbolic mode.   See the EXAMPLES section for some
              illustrative examples.

Buscar archivos y directorios que tengan SETUID

Para buscar todos los archivos y directorios que tengan seteado el SUID (Set User ID), es posible buscar archivos cuyo primer dígito octal sea al menos igual a 4:

find /bin -perm -4000

Por ejemplo:

root@linuxito:~# find /bin -perm -4000
/bin/umount
/bin/su
/bin/mount
/bin/ping6
/bin/ping

Es posible realizar esta misma búsqueda mediante una expresión más amigable, utilizando el modo simbólico. Para ello basta buscar archivos cuyo permiso para el usuario sea al menos s (SETUID):

root@linuxito:~# find /bin -perm -u=s
/bin/umount
/bin/su
/bin/mount
/bin/ping6
/bin/ping

Si se lista uno de los archivos encontrados, es posible verificar que el usuario tiene el permiso s (SETUID):

root@linuxito:~# ls -l /bin/mount
-rwsr-xr-x 1 root root 94776 Dec 11  2012 /bin/mount

Si se desea filtrar sólo archivos o sólo directorios, agregar la opción -type con el parámetro f o d respectivamente.

Buscar archivos y directorios que tengan SETGID

Para buscar todos los archivos y directorios que tengan seteado el SGID (Set Group ID), es posible buscar archivos cuyo primer dígito octal sea al menos igual a 2:

find /bin -perm -2000

Por ejemplo:

root@linuxito:~# find /sbin -perm -2000
/sbin/unix_chkpwd

Nuevamente, se puede llegar al mismo resultado con el modo simbólico para los permisos:

root@linuxito:~# find /sbin -perm -g=s
/sbin/unix_chkpwd

Notar cómo aparece s en los permisos para el grupo al listar el archivo encontrado:

root@linuxito:~# ls -l /sbin/unix_chkpwd
-rwxr-sr-x 1 root shadow 35408 Apr 29  2012 /sbin/unix_chkpwd

Buscar archivos y directorios que tengan SETUID y SETGID

Si se requiere encontrar los archivos y directorios que tengan seteado tanto SETUID como SETGID, se debe buscar un permiso octal igual a 6:

find / -perm -6000

O sino:

find / -perm -g=s -perm -u=s

Buscar archivos que tengan seteado el STICKY bit

Para buscar archivos con STICKY bit, es necesario especificar un permiso octal al menos igual a 1:

find / -perm -1000

Por ejemplo:

root@linuxito:~# find /* -prune -perm -1000
/tmp

Esto impide que se borre el directorio temporal.

Con los modos simbólicos, es necesario buscar archivos y directorios cuyo permiso para others sea t:

root@linuxito:~# find /* -prune -perm -o=t
/tmp

Notar cómo aparece t en los permisos para others al listar el archivo encontrado:

root@linuxito:~# ls -ld /tmp/
drwxrwxrwt 2 root root 4096 Dec 17 07:33 /tmp/

Referencias

man find


Tal vez pueda interesarte


Compartí este artículo