HP-UX (tanto en su versión Trusted como en la habitual) posee un
interesante mecanismo que nos permite verificar si ciertos ficheros han
sido o no modificados: se trata de PDF (aquí no significa Portable
Document Format sino Product Description File), que no es más que un
repositorio de información acerca de todos y cada uno de los archivos que un
determinado fileset instala en una máquina. Aunque el uso de los PDFs
está desfasado desde la versión 10.20 del operativo (ha sido
sustituido por el Software Distributor), la información que contienen es
bastante interesante desde el punto de vista de la seguridad, ya que incluye
características como el grupo, el propietario, los permisos, el tamaño o
un checksum de cada archivo.
En el directorio /system/ de un sistema HP-UX encontramos un
subdirectorio por cada fileset instalado en la máquina; dentro de cada
uno de estos subdirectorios existe - o ha de existir - un fichero denominado
pdf, que contiene justamente la información de la que estamos hablando:
marta:/system/UX-CORE# pwd
/system/UX-CORE
marta:/system/UX-CORE# ls -l pdf
-r--r--r-- 1 bin bin 36199 Jan 10 1995 pdf
marta:/system/UX-CORE# head pdf
% Product Description File
% UX-CORE fileset, Release 9.05
/bin/alias:bin:bin:-r-xr-xr-x:160:1:70.2:4285122165:
/bin/basename:bin:bin:-r-xr-xr-x:16384:1:70.5:3822935702:
/bin/bg:bin:bin:-r-xr-xr-x:151:1:70.2:735613650:
/bin/cat:bin:bin:-r-xr-xr-x:16384:1:70.2:1679699346:
/bin/cd:bin:bin:-r-xr-xr-x:151:1:70.2:525751009:
/bin/chgrp:bin:bin:-r-xr-xr-x:20480:1:70.2:203825783:
/bin/chmod:bin:bin:-r-xr-xr-x:24576:1:70.6:1826477440:
/bin/chown:bin:bin:-r-xr-xr-x:20480:1:70.2:1796648176:
marta:/system/UX-CORE#
Como vemos, cada línea de este fichero (excepto las que comienzan con el
carácter `%') es la entrada correspondiente a un cierto archivo que
el fileset instala en la máquina; su formato es el siguiente:
- pathname: Ruta absoluta del fichero.
- owner: Propietario (nombre o UID) del archivo.
- group: Grupo (nombre o GID) al que pertenece.
- mode: Tipo y permisos (en formato `ls -l').
- size: Tamaño del fichero en bytes.
- links: Número total de enlaces en el filesystem.
- version: Versión del archivo.
- checksum: Comprobación de errores según el algoritmo IEEE 802.3
CRC.
- linked_to: Nombres adicionales del fichero (enlaces duros o
simbólicos).
Para comprobar que los archivos de un determinado fileset no han sufrido
modificaciones que afecten a alguno de los campos anteriores podemos
programar un sencillo shellscript que utilizando la salida de órdenes
como `ls -l', `what', `ident' o `cksum' compruebe el
resultado de las mismas con la información almacenada en el PDF
correspondiente:
marta:/# grep ^/bin/cat /system/UX-CORE/pdf
/bin/cat:bin:bin:-r-xr-xr-x:16384:1:70.2:1679699346:
marta:/# ls -l /bin/cat
-r-xr-xr-x 1 bin bin 16384 Jan 10 1995 /bin/cat
marta:/# what /bin/cat
/bin/cat:
$Revision: 70.2 $
marta:/# cksum /bin/cat
1679699346 16384 /bin/cat
marta:/#
De la misma forma, podemos ejecutar la orden `pdfck', que nos informará
de cualquier cambio detectado en los ficheros de un fileset:
marta:/# pdfck /system/UX-CORE/pdf
/etc/eisa/HWP0C70.CFG: deleted
/etc/eisa/HWP0C80.CFG: deleted
/etc/eisa/HWP1850.CFG: deleted
/etc/eisa/HWP2051.CFG: deleted
/etc/eisa/HWPC000.CFG: deleted
/etc/eisa/HWPC010.CFG: deleted
/etc/eisa/HWPC051.CFG: deleted
/etc/newconfig/905RelNotes/hpuxsystem: deleted
/etc/newconfig/inittab: size(848 -> 952), checksum(214913737 -> 2198533832)
/usr/lib/nls/POSIX: owner(bin -> root), group(bin -> sys)
marta:/#
La aproximación a los verificadores de integridad que ofrece HP-UX es
interesante, pero tiene también importantes carencias; en primer lugar, los
algoritmos de CRC están pensados para realizar una comprobación de errores
pura, especialmente en el tránsito de datos a través de una red (de hecho,
el utilizado por los PDFs es el mismo que el definido por el estándar IEEE
802.3 para redes Ethernet), no para detectar cambios en el contenido de
un archivo. Así, es factible - y no difícil - que un atacante
consiga modificar sustancialmente un fichero sin afectar a su CRC global, con
lo cual este hecho no sería detectado; si realmente queremos verificar que
dos archivos son iguales hemos de recurrir a funciones hash como MD5. Por si esto fuera poco, pdfck es incapaz de detectar la presencia
de nuevos ficheros en un directorio, con lo que algo tan simple como la
aparición de un archivo setuidado en el sistema no sería notificado
por esta utilidad; incluso ciertos cambios sobre los archivos de los cuales
sí tiene constancia pasan desapercibidos para ella, como la modificación
de listas de control de acceso en los ficheros:
marta:/# lsacl /bin/ps
(bin.%,r-x)(%.sys,r-x)(%.%,r-x) /bin/ps
marta:/# chacl "toni.users+rwx" /bin/ps
marta:/# lsacl /bin/ps
(toni.users,rwx)(bin.%,r-x)(%.sys,r-x)(%.%,r-x) /bin/ps
marta:/#
Como vemos, la orden anterior está otorgando a un usuario un control total
sobre el archivo /bin/ps, con todo lo que esto implica; evidentemente,
si esto lo ha realizado un atacante, estamos ante una violación muy grave de
nuestra seguridad. Sin embargo, pdfck ejecutado sobre el PDF
correspondiente no reportaría ninguna anomalía, con lo que la
intrusió pasaría completamente desapercibida para el administrador.
A la vista de estos problemas, parece evidente que si necesitamos un
verificador de integridad `de verdad' no podemos limitarnos a utilizar las
facilidades proporcionadas por los PDFs de HP-UX; no obstante, ya que este
mecanismo viene `de serie' con el sistema, no está de más usarlo, pero sin
basarnos ciegamente en sus resultados. Siempre hemos de tener en cuenta que la
información de cada fichero registrada en los archivos /system//pdf
se almacena igual que se está almacenando el propio archivo, en un cierto
directorio de la máquina donde evidentemente el administrador puede escribir
sin poblemas. Por tanto, a nadie se le escapa que si un atacante consigue el
privilegio suficiente para modificar una herramienta de base (por ejemplo, /bin/ls) y troyanizarla, no tendrá muchos problemas en modificar también
el archivo donde se ha guardado la información asociada a la misma, de forma
que limitándonos a comparar ambas no nos daremos cuenta de la
intrusión. Así, es una buena idea guardar, nada más instalar el
sistema, una copia del directorio /system/, donde están los PDFs, en una
unidad de sólo lectura; cuando lleguemos al tema dedicado a la detección de
intrusos hablaremos con más detalle de los verificadores de integridad y la
importancia de esa primera copia, sobre un sistema limpio, de toda la
información que posteriormente vamos a verificar.
© 2002 Antonio Villalón Huerta