ASET
ASET (
Automated Security Enhancement Tool) es un conjunto de herramientas integradas dentro de Solaris que permiten monitorizar ciertos valores de parámetros de los ficheros del sistema, desde atributos ubicados en los inodos (permisos, propietario...) hasta el contenido de cada archivo. Estas herramientas se encuentran en el directorio
/usr/aset/, y su utilidad es evidente: permite detectar cualquier cambio en uno de nuestros ficheros, cambio que si no ha sido realizado por un usuario debidamente autorizado puede esconder desde un troyano hasta una puerta trasera de entrada al sistema.
De todas las utilidades de que dispone ASET, la más importante es sin duda
/usr/aset/aset, un
shellscript encargado de invocar al resto de herramientas. Desde línea de comandos, este programa puede recibir como parámetro el nivel de seguridad deseado en la comprobación:
`low', que se limita a informar de las vulnerabilidades potenciales,
`mid', que modifica ciertos parámetros que considera incorrectos, y
`high', el más restrictivo, que modifica más aún dichos parámetros, y que es recomendable en sistemas en los que la seguridad de Solaris sea un elemento por encima de cualquier otro, como el funcionamiento; incluso en la página
man de
aset se advierte que algunas aplicaciones pueden dejar de funcionar si utilizamos este nivel de seguridad.
Podemos invocar a
/usr/aset/aset indicándole mediante el parámetro
`-l' el nivel de seguridad deseado:
anita:/# /usr/aset/aset -l low
= ASET Execution Log
=
ASET running at security level low
Machine = anita; Current time = 0628_03:11
aset: Using /usr/aset as working directory
Executing task list ...
firewall
env
sysconf
usrgrp
tune
cklist
eeprom
All tasks executed. Some background tasks may still be running.
Run /usr/aset/util/taskstat to check their status:
/usr/aset/util/taskstat [aset_dir]
where aset_dir is ASET's operating directory,currently=/usr/aset.
When the tasks complete, the reports can be found in:
/usr/aset/reports/latest/*.rpt
You can view them by:
more /usr/aset/reports/latest/*.rpt
anita:/#
La orden anterior habrá generado un directorio de informes cuyo nombre hace referencia a la fecha y hora de ejecución, y que al ser el último se enlaza también con el nombre
latest; todos los
reports generados por
aset tienen extensión
`.rpt' (son simples ficheros ASCII), y se guardan en
/usr/aset/reports/. Cada uno de ellos contiene el informe de las potenciales vulnerabilidades que
aset ha encontrado durante su ejecución, así como de los cambios que haya realizado en función del nivel de seguridad especificado. Como
aset indica, el hecho de que la ejecución del comando haya finalizado no implica que los informes se hayan realizado completamente; podemos ejecutar
/usr/aset/util/taskstat para ver que tareas no han finalizado aún.
Además de los informes de los que acabamos de hablar, la primera ejecución de
aset genera una serie de archivos en el directorio
/usr/aset/master/: en ellos se guarda una imagen del estado que la herramienta ha encontrado en el sistema, de forma que una ejecución posterior del programa - dentro del mismo nivel de seguridad - puede comprobar qué parámetros han cambiado en cada uno de los ficheros analizados; evidentemente, es vital para nuestra seguridad evitar que un atacante pueda modificar esta imagen, ya que de lo contrario podría `engañar' sin problemas a
`aset'. Por ejemplo, al ejecutar
`/usr/aset/aset' con un nivel de seguridad
`low' se ha guardado en esa imagen cierta información sobre un fichero importante como
/etc/inittab (en
/usr/aset/asetenv se define la lista de directorios de los que se guarda una imagen en cada nivel de seguridad); parte de esta información se encuentra en
/usr/aset/masters/cklist.low:
anita:/usr/aset/masters# grep inittab cklist.low
-rw-r--r-- 1 root sys 1087 Jan 5 23:38 2000 /etc/inittab 26732 3
anita:/usr/aset/masters#
Podemos ver que los parámetros registrados de este archivo: propietario y grupo, permisos, número de enlaces, tamaño, fecha y hora de la última modificación y un
checksum. Si ahora un atacante decidiera modificar ese fichero (por ejemplo para situar un troyano en él) casi con total seguridad modificaría alguno de esos parámetros, por lo que la siguiente ejecución de la herramienta reportaría este hecho:
anita:/# grep inittab /usr/aset/reports/latest/cklist.rpt
< -rw-r--r-- 1 root sys 1087 Jan 5 23:38 2000 /etc/inittab 26732 3
> -rw-r--r-- 1 root sys 1237 Jun 28 19:58 2001 /etc/inittab 37235 3
anita:/#
Quizás una práctica recomendable para incrementar nuestra seguridad pueda ser planificar la ejecución de
`aset' para que se ejecute a intervalos periódicos desde
`crond' y para que nos avise (por ejemplo, mediante correo electrónico) de cualquier anomalía detectada en la máquina. Si lo hacemos así, hemos de tener siempre presente que el nivel
`high' prima la seguridad por encima de cualquier otra cosa, por lo que tras una ejecución planificada de
`aset' es posible que alguna aplicación puntual deje de funcionar.
JASS
JASS (
JumpStart Architecture and Security Scripts, también conocido como
Solaris Security Toolkit) es un paquete
software formado por diferentes herramientas cuyo objetivo es facilitar y automatizar la creación y el mantenimiento de entornos Solaris seguros; ha sido desarrollado por Alex Noordergraaf y Glenn Brunette, dos expertos en seguridad de Sun Microsystems conocidos - especialmente el primero de ellos - por los
BluePrints que periódicamente publican. Se puede ejecutar sobre una máquina donde previamente hemos instalado Solaris (
Standalone Mode), o bien durante la propia instalación del operativo (
JumpStart Technology Mode): conseguimos así una instalación por defecto segura, algo que se echa de menos en casi cualquier Unix.
Probablemente la parte más importante de JASS son los denominados
drivers, ficheros ón que especifican diferentes niveles de ejecución de la herramienta, definiendo qué
scripts se han de ejecutar en cada uno de esos niveles y qué archivos se instalarán como resultado de la ejecución. Cada uno de estos
drivers está ubicado en el subdirectorio
Drivers/ del programa, y tiene tres partes bien diferenciadas ([NB01b]): la primera se encarga de inicializar ciertas variables de entorno necesarias para una correcta ejecución del
driver, la segunda de definir qué ficheros se han de modificar y qué
scripts se han de ejecutar, y una tercera parte es la encargada final de llevar a cabo los cambios correspondientes.
En un sistema Solaris ya instalado podemos invocar desde línea de órdenes a JASS pasándole como parámetro el
driver que deseemos ejecutar, por ejemplo
secure.driver (un
driver que implementa por sí sólo todas las funcionalidades de JASS):
anita:/var/tmp/jass-0.3# ./jass-execute -d secure.driver -o jass.log
./jass-execute: NOTICE: Executing driver, secure.driver
./jass-execute: NOTICE: Recording output to jass.log
anita:/var/tmp/jass-0.3#
Todos los cambios que la ejecución anterior provoca (en el ejemplo anterior podemos verlos en el archivo
`jass.log', o en salida estándar si no utilizamos la opción
`-o') quizás convierten a nuestro sistema en uno `demasiado seguro': es posible que perdamos parte de la funcionalidad de la que disponíamos, debido al elevado número de restricciones llevadas a cabo en el sistema; es necesario que cada administrador revise sus necesidades y los
scripts a los que va a invocar antes de ejecutar JASS. Afortunadamente, una de las características más importantes de esta herramienta es su capacidad para deshacer los cambios que cualquiera de sus ejecuciones haya llevado a cabo:
anita:/var/tmp/jass-0.3# ./jass-execute -u -o jass-undo.log
./jass-execute: NOTICE: Executing driver, undo.driver
Please select a JASS run to restore through:
1. July 06, 2001 at 03:59:40 (
var/opt/SUNWjass/run/20010706035940)
Choice? 1
./jass-execute: NOTICE: Restoring to previous run var/opt/SUNWjass/run/\
20010706035940
./jass-execute: NOTICE: Recording output to jass-undo.log
anita:/var/tmp/jass-0.3#
Podemos ver que la desinstalación de los cambios llevados a cabo previamente, mediante la opción
`-u' del programa, nos pregunta qué ejecución de JASS queremos desinstalar; como sólo lo habíamos lanzado una vez, hemos elegido
`1', pero si ya hubiéramos ejecutado la herramienta en diferentes ocasiones se nos mostrarían todas ellas, con lo cual siempre podemos devolver a la máquina a un estado previo a cualquier ejecución de JASS. Esta característica es bastante importante, ya que volvemos a insistir en que, en función del
driver al que invoquemos, el sistema puede quedar incluso demasiado `securizado': por poner un ejemplo, la ejecución de
secure.driver eliminaría cualquier acceso estándar al sistema (
telnet, FTP,
rsh...), con lo que sería necesario de disponer de una consola o de SSH para acceder remotamente a la máquina tras la ejecución de JASS.
Como hemos dicho antes, también es posible integrar JASS en la propia instalación del sistema operativo Solaris; para ello hemos de basarnos en la arquitectura
JumpStart de Sun Microsystems ([Noo01]), copiando el paquete de
software en el directorio raíz del servidor
JumpStart y siguiendo unos pasos simples explicados con detalle en [NB01c]. Con unas sencillas modificaciones de algunos ficheros, conseguiremos una instalación por defecto segura, lo que evitará que el administrador de los sistemas tenga que ir máquina a máquina para realizar el típico
hardening postinstalación (cerrar puertos, configurar accesos...).
La que acabamos de ver es una herramienta
muy recomendable en cualquier sistema Solaris, ya que consigue automatizar muchas tareas que de otra forma el administrador debería realizar manualmente. Su potencia, unida a su sencillez de uso (y `desuso'), la convierten en algo si no imprescindible sí muy importante en nuestros sistemas; incomprensiblemente no se utiliza de forma extendida, aunque es previsible que con sus nuevas versiones (actualmente está disponible la 0.3) esto comience a cambiar pronto. Podemos obtener información adicional de esta herramienta en los BluePrints publicados por Sun Microsystems y que se distribuyen, aparte de vía
web, en el directorio
Documentation/ de la misma: [NB01b], [NB01a], [NB01c], [NB01d]...
sfpDB
La base de datos sfpDB (
Solaris Fingerprint Database) es un servicio gratuito de Sun Microsystems que permite a los usuarios verificar la integridad de los archivos distribuidos con Solaris, tanto con la base del operativo como con productos concretos de Sun o parches; esto permite por una parte verificar que lo que acabamos de instalar en una máquina es realmente una distribución de Solaris oficial de Sun, y por otra detectar si un pirata ha logrado modificar alguno de los ficheros del sistema (como
/bin/login), típicamente para situar troyanos o puertas traseras en una máquina atacada: se trata de un sistema de detección de intrusos basado en
host, como veremos a la hora de hablar de IDSes.
Para lograr su objetivo, desde
http://sunsolve.sun.com/#∞# se puede comparar la función resumen MD5 de determinados archivos que tenemos en nuestra máquina con el resumen almacenado por Sun Microsystems. Para ello en primer lugar hemos de generar el resumen de los ficheros que deseemos verificar, mediante la orden md5
(instalada como parte del paquete SUNWkeymg
o de forma independiente):
anita:/# pkgchk -l -p /usr/sbin/md5
Pathname: /usr/sbin/md5
Type: regular file
Expected mode: 0755
Expected owner: root
Expected group: sys
Expected file size (bytes): 24384
Expected sum(1) of contents: 12899
Expected last modification: Nov 11 20:19:48 1999
Referenced by the following packages:
SUNWkeymg
Current status: installed
anita:/# md5 /bin/su
MD5 (/bin/su) = 79982b7b2c7576113fa5dfe316fdbeae
anita:/#
Una vez hecho esto, introduciremos este resumen en un formulario web, y se nos proporcionará información sobre el mismo; si no hay problemas, el resultado será similar al siguiente:
Results of Last Search
79982b7b2c7576113fa5dfe316fdbeae - (/bin/su) - 1 match(es)
canonical-path: /usr/bin/su
package: SUNWcsu
version: 11.8.0,REV=2000.01.08.18.17
architecture: i386
source: Solaris 8/Intel
Mientras que si el resumen que hemos obtenido no se corresponde con el de ningún fichero de las diferentes versiones de Solaris u otro software de Sun, se nos dará el error Not found in this database. Este error de entrada implica que en nuestra máquina tenemos algo cuanto menos `extraño', ya que es extremadamente raro que un archivo del sistema como /bin/su
, /bin/ps
o /bin/ls
sea modificado en un sistema. Si fuera este el caso, y como administradores desconocemos a qué puede ser debida esa modificación, con una alta probabilidad nos han instalado un rootkit, un conjunto de herramientas utilizadas por los piratas principalmente para ocultar su presencia y garantizarse el acceso en una máquina donde han conseguido privilegios de root
; un rootkit instala versiones troyanizadas de casi todos los programas que pueden ayudar en la detección del pirata, como `ls'
o `netstat'
, lo que provoca que si no ponemos un mínimo de interés sea muy difícil detectar la intrusión.
Existen además ciertas extensiones a la sfpDB cuyo objetivo es facilitar el uso de la base de datos [DNO01]; una de ellas es sfpC (Solaris Fingerprint Database Companion), que automatiza el proceso de generar y verificar los resúmenes MD5 de un número considerable de archivos mediante un script en PERL (recordemos que un simple interfaz web que invoca a un CGI no es apropiado para todas las aplicaciones, por lo que Sun Microsystems está estudiando la posibilidad de publicar de otra forma el contenido completo de la base de datos). Para conseguirlo, sfpC acepta como entrada un fichero que contiene una lista de resúmenes, dividiéndola en diferentes partes para enviarlas por separado a la sfpDB, y generando resultados globales en función de cada uno de los resultados individuales obtenidos.
Otra de estas herramientas es sfpS (Solaris Fingerprint Database Sidekick), un sencillo shellscript que funciona en conjunción con la propia sfpDB y con sfpC y cuyo objetivo es simplificar la detección de troyanos; para ello, almacena una lista de ejecutables comúnmente troyanizados por cualquier rootkit, y es el contenido de dicha lista el que se compara contra la base de datos mediante el script en PERL de sfpC.
Evidentemente esta base de datos de Sun Microsystems y sus utilidades asociadas (que podemos descargar libremente desde las páginas web de esta compañía), como cualquier otro producto a la hora de hablar de seguridad, no es la panacea, sino sólo una herramienta más que nos puede ayudar a detectar intrusiones en una máquina. También tiene puntos débiles, ya que por ejemplo un atacante que sea capaz de modificar ciertas utilidades del sistema podrá hacer lo mismo con el ejecutable `md5'
, de forma que simule generar resultados similares a los originales cuando verificamos la integridad de utilidades troyanizadas; contra esto, una solución efectiva puede ser utilizar un `md5'
estático y guardado en una unidad de sólo lectura, y por supuesto generado a partir de fuentes confiables. Sin ser una herramienta excluyente, mediantes consultas automatizadas a la base de datos proporcionada por Sun Microsystems tenemos la posibilidad de descubrir intrusiones graves en nuestros sistemas en un tiempo mínimo, y de forma sencilla.