next up previous contents
Next: Encriptación de ficheros Up: Seguridad en el Previous: El Sticky bit

Seguridad en las bibliotecas compartidas

Las bibliotecas compartidas son muy comunes en Solaris[Sun88]. Permiten ahorrar memoria a la hora de ejecutar los procesos. Los programas que usan las mismas funciones, no precisan, merced a ellas, tened su propia copia de las mismas en memoria. Se enlazan en tiempo de ejecución. La mayor parte de los comandos de /etc/bin usan esta característica. El comando ldd permite conocer qué bibliotecas usa cada programa. Por ejemplo:

% ldd /usr/bin/cat
libintl.so.1 => /usr/lib/libintl.so.1
libw.so.1 = > /usr/lib/libw.so.1
libc.so.1 => /usr/lib/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1

Un usuario puede crear su propia versión de una de ellas y alterar el camino de la misma. Por ejemplo:
% cp /usr/lib/libc.so.1 /tmp
% touch /tm/libc.so.1
% setenv LD_LIBRARY_PATH /tmp
% ldd /usr/bin/cat
libintl.so.1 => /usr/lib/libintl.so.1
libw.so.1 = > /usr/lib/libw.so.1
libc.so.1 => /tmp/libc.so.1
libdl.so.1 => /usr/lib/libdl.so.1

Esto, para el comando cat, no es importante, pero si fuese un programa setuid, el creador de la nueva biblioteca podría ejecutar la parte de código que quisiese, como un usuario más privilegiado. Para evitar esto, es posible, hacer que un programa ignore la variable LD_LIBRARY_PATH usando una nueva variable denominada LD_RUN_PATH:
% setenv LD_RUN_PATH /usr/lib
% unsetenv LD_LIBRARY_PATH
% cc -o prog prog.c
Si ahora ``prog'' tiene el bit setuid activo se ignorará el valor de LD_LIBRARY_PATH. Todos los programas de /usr/bin están compilados de esta forma. Es una buena idea examinar cúales de nuestras aplicaciones que corren con setuid activo ignoran LD_LIBRARY_PATH.

Celestino Gomez Cid (adm)
Fri Mar 22 16:20:52 MET 1996