Seguridad en Redes y Sistemas


Francisco Cruz Argudo


Introducción

En este artículo se intenta describir de forma resumida algunas herramientas que pueden ayudar a mejorar el nivel de seguridad de una red integrada en Internet así como los sistemas que lo forman. Últimamente ha aparecido un gran número de herramientas de seguridad, para este artículo se han elegido las que parecían más representativas, aunque puede haber otras que es posible sean más útiles dependiendo de la funcionalidad que se les quiera dar. Todas las herramientas descritas han sido instaladas y algunas de ellas están en funcionamiento de forma continua en la Universidad Carlos III de Madrid.

Dividiremos las herramientas existentes en dos tipos: aquellas que nos alertan de conexiones no deseadas y que nos permiten hacer un seguimiento de éstas, así como poder decidir sobre qué conexiones permitimos y cuales no (herramientas de control y seguimiento de accesos), y aquellas que se centran más en la seguridad del sistema (herramientas que chequean la integridad del sistema), para detectar una vez que el sistema ha sido asaltado el alcance de los posibles daños.

Todas las herramientas de este documento son de dominio público y se encuentran en multitud de servidores de ftp anónimo y www.

1.- Herramientas de control y seguimiento de accesos

En este apartado se encuentran aquellas herramientas que nos permitirán tener una información (mediante ficheros de trazas) de todos los intentos de conexión que se han producido sobre ese sistema o sobre otro que nosotros hayamos señalado, así como intentos de ataque de forma sistemática a puertos tanto de TCP como de UDP (herramientas de tipo SATAN). Este tipo de herramientas nos permite tener un control sobre todos los paquetes que entran por el interfaz de red de la máquina: IP (TCP, UDP) e ICMP, o analizando paquetes a nivel de aplicaciones (TELNET, FTP, SMTP, LOGIN, SHELL...). Estas herramientas pueden ser utilizadas junto con otras que nos permitan definir desde qué máquinas permitimos ciertas conexiones y de cuales se prohiben. Algunas de las herramientas descritas en este apartado no necesitan estar instaladas en la máquina que se quiere controlar (ya que se puede poner en una máquina cuyo interfaz de red funcione en modo promiscuo, permitiendo seleccionar la dirección IP o máquina que queremos auditar).

Algunas de las herramientas descritas en este apartado pueden tener un doble uso, es decir nos permiten protegernos ante posibles ataques, pero también podrían ser utilizadas para intentar comprometer los sistemas. Por eso es importante que el uso de estas herramientas esté restringido (en la manera que se pueda) para que no todo el mundo esté utilizándolas de forma aleatoria y nos oculten realmente un ataque. También podrán ser utilizadas para hacer seguimientos en la red cuando creamos que alguna de nuestras máquinas ha sido comprometida.

Las herramientas que permiten este tipo de operatividad son: tcp-wrapper, netlog, argus, tcpdump, SATAN, ISS, courtney, gabriel, nocol, tcplist.

1.1.- tcp-wrappers

El tcp-wrappers es un software de domino público desarrollado por Wietse Venema (Universidad de Eindhoven, Holanda). Su función principal es proteger a los sistemas de conexiones no deseadas a determinados servicios de red, permitiendo a su vez ejecutar determinados comandos ante determinadas acciones de forma automática.

Con este paquete podemos monitorizar y filtrar peticiones entrantes a distintos servicios TCP-IP, como: SYSTAT, FINGER, FTP, RLOGIN, RSH, REXEC, TFTP, TALK. El software está formado por un pequeño programa que se instala en el "/etc/inetd.conf". Una vez instalado, se puede controlar los accesos (mediante el uso de reglas) y dejar una traza de todos los intentos de conexión tanto admitidos como rechazados (por servicios, e indicando la máquina que hace el intento de conexión).

Veamos primero el tema de las trazas que genera este software. El programa utiliza el syslogd (puerto 514 udp) para mandar esa información; por defecto utilizará la salida de mail, la cual estará indicada en el fichero de configuración de syslogd (/etc/syslog.conf) con la línea mail.debug. Esto se puede cambiar en los fuentes del programa y se puede redirigir a otro lugar mediante el uso de las variables de usuario que deja libres el syslogd (LOCAL_0,...LOCAL_7, estas variables vienen definidas en el fichero /usr/include/syslog.h). Una vez modificados los fuentes, se deberá indicar al syslogd donde debe dejar la información de esa variable local.

En referencia al control de conexiones a distintos servicios, el software utiliza dos ficheros de información (hosts.allow, hosts.deny) situados en el directorio "/etc". En estos ficheros es donde se le definirán las reglas que debe utilizar para el filtrado de los paquetes. El filtrado se puede realizar teniendo en cuenta tanto a máquinas como a servicios o una mezcla de ambos. En el caso de las máquinas hay varias formas de hacerlo, por ejemplo se le puede indicar que sólo se conecten las máquinas pertenecientes al mismo dominio (esto se puede ampliar a los que tengan el mismo rango de direcciones IP, para evitar que máquinas no definidas en el DNS no puedan conectarse), o sólo aquellas cuyos nombres sean especificados de forma explícita. Veamos un ejemplo que consiste en permitir las conexiones sólo de aquellas máquinas de mi dominio. Para ellos tendríamos que tener lo siguiente:


			hosts.deny
ALL: ALL
hosts.allow
ALL: LOCAL, .uc3m.es

La secuencia es la siguiente: en el primer fichero denegamos todas las conexiones; mientras que en el segundo, permitimos las conexiones de las máquinas definidas en mi mismo dominio.

Una utilidad que puede ser interesante a la hora de tener información de conexiones de forma automática es el uso de comandos en estos ficheros. Es decir, podemos decirle al programa que cuando se produzcan ciertas conexiones ejecute un comando. Veamos un ejemplo:


hosts.deny
ALL: ALL (/usr/ucb/finger -l @%h | /usr/ucb/mail -s %d%h e-mail) &
hosts.allow
ALL: LOCAL, uc3m.es

En este ejemplo, cuando se produzca una conexión no deseada, de forma automática se ejecutará un finger a la máquina que origine esa conexión y el resultado (del finger) se mandará vía correo electrónico al usuario especificado (el administrador de la máquina o el responsable de seguridad de la organización), indicando en el "subject" del mensaje el servicio intento de conexión y la máquina que lo originó, y como cuerpo el resultado del finger sobre esa máquina.

Además de estas reglas podemos incluir protocolos específicos de control, veamos un pequeño ejemplo de esta utilidad.


			hosts.deny
ALL: ALL
hosts.allow
in.ftpd: LOCAL, .uc3m.es

En este ejemplo sólo permitimos conexiones ftp desde nuestro dominio, prohibiendo las demás conexiones que estén filtradas por el programa. Estos ejemplos son muy básicos, pero el grado de complejidad de las reglas puede aumentar incluyendo distintos protocolos y listas de máquinas por protocolos.

Como decíamos anteriormente este tipo de programa genera trazas de las conexiones establecidas. Veremos a continuación unas recomendaciones referentes a las trazas que pueden extenderse a otro tipo de utilidades.

Es aconsejable disponer de una o varias máquinas para centralizar las trazas que creamos convenientes. Describiremos ahora una posible organización para tener información de todas las conexiones que se producen en nuestro grupo de máquinas. Podemos clasificar nuestras máquinas por sistema operativo o por funciones que realizan. A cada uno de estos grupos se le asigna una variable en el syslog (como veíamos anteriormente), y se envía (vía syslog) a una o varias máquinas (cuya finalidad es que tengan todas las conexiones que se produzcan en tiempo real). El disponer de varias máquinas de este tipo es muy útil ya que los hackers suelen correr programas del tipo "zap", que borran las huellas en el sistema asaltado, y este tipo de herramienta (tcp-wrapper) que deja las trazas en un fichero tipo texto, sería muy fácil su modificación editando el fichero con el "vi" para eliminar las huellas.

De hecho esto puede ser una pista de que un sistema ha sido asaltado (es decir, el que los ficheros de trazas relativos a una máquina sean distintos en la máquina que lo originan y en las máquinas que lo centralizan). Debemos tener en cuenta que las máquinas que centralizan esta información deben estar muy protegidas ante los posibles ataques.

Para terminar podemos decir que el tcp-wrappers es una simple pero efectiva herramienta para controlar y monitorizar la actividad de la red en nuestra máquina, y nos permite un control sobre las conexiones que se efectúan a nuestra red.

Veamos un pequeño ejemplo del fichero de trazas que genera este software.


May 29 13:21:22 lince.uc3m.es in.ftpd[237]: connect from acme.uc3m.es
May 29 13:52:00 lince.uc3m.es in.ftpd[557]: connect from acme.uc3m.es
May 29 13:54:21 lince.uc3m.es in.telnetd[561]: connect from acme.uc3m.es
May 29 14:50:20 lince.uc3m.es in.ftpd[8228]: refused connect from acme.uc3m.es
May 29 14:51:12 lince.uc3m.es in.ftpd[8232]: connect from acme.uc3m.es
May 29 14:57:33 lince.uc3m.es in.ftpd[8275]: connect from acme.uc3m.es
May 29 15:09:25 lince.uc3m.es in.telnetd[8631]: connect from acme.uc3m.es
May 29 15:35:34 lince.uc3m.es in.ftpd[8729]: connect from acme.uc3m.es
May 29 15:43:17 lince.uc3m.es in.ftpd[8754]: connect from acme.uc3m.es
Jul 25 13:47:45 lince.uc3m.es in.telnetd[338]: refused connect from acme.uc3m.es
Jul 25 13:48:16 lince.uc3m.es in.telnetd[351]: refused connect from acme.uc3m.es
Aug 7 10:20:27 lince.uc3m.es in.telnetd[3457]: connect from acme.uc3m.es
Sep 22 12:09:29 lince.uc3m.es in.telnetd[19795]: connect from acme.uc3m.es
Oct 2 09:43:03 lince.uc3m.es in.telnet[10836]: refused connect from arwen.uc3m.es
Oct 5 07:32:15 lince.uc3m.es in.telnet[2554]: refused connect from elrond.uc3m.es
Oct 10 17:51:18 lince.uc3m.es in.telnet[6959]: refused connect from arwen.uc3m.es

1.2.- Netlog

Este software de dominio público diseñado por la Universidad de Texas, es una herramienta que genera trazas referentes a servicios basados en IP (TCP, UDP) e ICMP, así como tráfico en la red (los programas pueden ejecutarse en modo promiscuo) que pudiera ser "sospechoso" y que indicara un posible ataque a una máquina (por la naturaleza de ese tráfico).

El paquete está formado por el siguiente conjunto de programas:

1.2.1.- tcplogger

Este programa escucha todos los servicios sobre TCP, dejando una traza de cada servicio en un fichero de trazas, indicando la hora, la máquina origen u y el puerto de esa conexión...Veamos un pequeño ejemplo de un fichero originado por este programa:


 
	04/25/95 14:23:50 6C016A00 arapaima.uc3m.es      1153 -> acme 		telnet
04/25/95 14:29:50 4D444600 elrond 3865 -> acme smtp
04/25/95 14:35:30 39665600 svin09.win.tue.nl ftp-data -> acme 2527
04/25/95 14:53:26 18DB4800 ordago 3268 -> acme smtp
04/25/95 14:54:49 58ECA600 elrond 3880 -> acme smtp
04/25/95 14:59:58 399B7801 siuX 1529 -> acme telnet
04/25/95 15:27:27 4562B200 sun.rediris.es 1617 -> acme domain
04/25/95 16:15:20 DE069664 pc_jj 1048 -> acme telnet
04/25/95 16:31:54 35C98800 nazgul 3215 -> acme domain
04/25/95 16:32:29 D87DE00 sauron 2038 -> acme domain
04/25/95 16:33:23 F760200 a16-unix 1200 -> acme domain
04/25/95 16:49:35 707E1A04 info.tamu.edu ftp-data -> acme 2536
07/05/95 14:24:18 34874400 elrond 4636 -> acme smtp
07/05/95 15:02:44 FBB5800 arapaima.uc3m.es ftp-data -> acme 1545
07/05/95 16:19:48 53C64A00 grande 2271 -> acme domain
07/05/95 17:36:40 4D09AE00 elrond 1112 -> acme smtp
07/05/95 17:55:53 2D816A00 chico.rediris.es 4499 -> acme domain
07/05/95 18:23:50 3DF64E01 selene.uc3m.es 1443 -> acme domain
07/05/95 18:57:21 A613A00 elrond 1149 -> acme smtp
09/13/95 14:44:51 4C5FC201 saruman 1023 -> acme printer
09/13/95 14:45:02 4C60BC01 saruman 1023 -> acme printer
09/13/95 17:03:02 7603EA00 sauron 1230 -> acme domain
09/13/95 17:04:37 95720601 fivos 1825 -> acme domain
09/13/95 17:08:28 18315C00 nazgul 2835 -> acme domain
09/13/95 17:22:12 786C2000 sauron 1252 -> acme domain

1.2.2.- udplogger

Es semejante al anterior pero para los servicios sobre UDP. Un ejemplo del fichero de trazas:


 
	10/23/95 11:25:04        0 d.root-servers.net    domain -> acme		domain

10/23/95 11:25:05 0 elrond 1659 -> acme domain

10/23/95 11:25:05 0 elrond 1660 -> acme domain

10/23/95 11:25:05 0 crl.dec.com domain -> acme domain

10/23/95 11:25:06 0 acme 4083 -> acme domain

10/23/95 11:25:06 0 acme 4084 -> acme domain

10/23/95 11:25:06 0 darkstar.isi.edu domain -> acme domain

10/23/95 11:25:06 0 acme 4087 -> acme domain

10/23/95 11:25:06 0 acme 4088 -> acme domain

10/23/95 11:25:07 0 sladw.arl.mil domain -> acme domain

10/23/95 11:25:09 0 gw.home.vix.com domain -> acme domain

10/23/95 11:25:10 0 ns-too.ripe.net domain -> acme domain

10/23/95 11:25:10 0 relay.bt.net domain -> acme domain

10/23/95 11:25:32 0 ns.mci.net domain -> acme domain

10/23/95 11:25:32 0 nazgul 1030 -> acme syslog

10/23/95 11:25:33 0 ordago 3661 -> acme domain

10/23/95 11:25:33 0 0.0.0.0 68 -> 255.255.255.255 67

10/23/95 11:25:51 0 zenon 4435 -> acme domain

10/23/95 11:25:51 0 zenon 4436 -> acme domain
10/23/95 11:25:54 0 vgr.arl.mil domain -> acme domain


Los ficheros que generan estas dos herramientas pueden ser útiles también para detectar ataques de tipo SATAN o ISS, ya que en los ficheros de trazas se aprecian intentos de conexión muy cortos en el tiempo a puertos (tcp o udp) de forma consecutiva.

1.2.3.- icmplogger

Se encarga de trazar el tráfico de icmp. Veamos un ejemplo del fichero de trazas:


	10/23/95 11:24:08        0 elrond                -> acme		portunreach
10/23/95 11:25:05 0 ES-s3.dante.bt.net -> acme hostunreach
10/23/95 11:25:05 0 elrond -> acme portunreach
10/23/95 11:25:39 0 elrond -> acme portunreach
10/23/95 11:26:25 0 163.117.138.60 -> acme portunreach
10/23/95 11:26:26 0 pc-11-58 -> acme portunreach
10/23/95 11:26:45 0 arpa-gw.hpc.org -> acme hostunreach
10/23/95 11:27:17 0 ES-s3.dante.bt.net -> acme hostunreach
10/23/95 11:27:18 0 192.157.65.82 -> acme hostunreach
10/23/95 11:27:41 0 elrond -> acme portunreach
10/23/95 11:28:16 0 elrond -> acme portunreach
10/23/95 11:28:16 0 arpa-gw.hpc.org -> acme hostunreach
10/23/95 11:28:22 0 elrond -> acme portunreach
10/23/95 11:28:26 0 192.157.65.82 -> acme hostunreach
10/23/95 11:28:51 0 192.157.65.82 -> acme hostunreach
10/23/95 11:29:05 0 192.157.65.82 -> acme hostunreach
10/23/95 11:29:46 0 arpa-gw.hpc.org -> acme hostunreach


Estos programas pueden guardar su información en ASCII o en formato binario, en este segundo caso el programa dispone de una herramienta (extract) que permite consultar los ficheros de trazas dándole patrones de búsqueda, como pueden ser tráfico desde una red concreta, intentos de conexión a puertos específicos, etc.

1.2.4.- etherscan

Es una herramienta que monitoriza la red buscando ciertos protocolos con actividad inusual, como puedan ser conexiones tftp (en este caso si se han realizado con éxito nos indica qué ficheros se han llevado), comandos en el puerto de sendmail (25 tcp) como vrfy, expn, algunos comandos de rpc como rpcinfo, peticiones al servidor de NIS (algunas herramientas utilizan este tipo de servidores para obtener el fichero de password, ej: ypx), peticiones al demonio de mountd, etc. Etherscan se ejecuta en modo promiscuo en la máquina utilizando (al igual que las anteriores) el NIT (Network Interface Tap de SunOs 4.1.x), y también el "Packet Filtering Interface" para realizar esas capturas. Veamos al igual que en los casos anteriores un ejemplo de fichero de trazas:


	04/25/95 14:32:29 [rpc]  pc_12B14B.uc3m.es.1500 acme RPC lookup for: pcnfsd
04/25/95 14:32:29 [rpc] pc_12B14B.uc3m.es.1501 acme RPC lookup for: pcnfsd
04/25/95 16:05:57 [rpc] tony.1500 acme RPC lookup for: ypserv
04/25/95 16:06:01 [rpc] tony.1502 acme RPC lookup for: ypserv
05/05/95 12:26:52 [tftp] router4.61892 acme Attempt to write `/tftpboot/L1'.
05/05/95 12:26:56 [tftp] router4.61892 acme Attempt to write `/tftpboot/L1'.
05/08/95 09:50:56 [smtp] arapaima.uc3m.es.1033 acme vrfy jose@acme
05/09/95 17:53:34 [rpc] paco.1501 acme RPC lookup for: pcnfsd
05/10/95 10:38:16 [smtp] saruman.1339 selene.uc3m.es unknown cmd: hello selene
05/11/95 16:26:00 [rpc] balleste.1500 acme RPC lookup for: pcnfsd
05/11/95 17:30:26 [smtp] bruno.cs.colorado.edu.4671 elrond EXPN rivera
05/11/95 19:58:22 [smtp] mudhoney.micro.umn.edu.1808 elrond EXPN cloquell
05/17/95 14:47:44 [smtp] elrond.2725 tidos.tid.es vrfy jason
05/17/95 15:27:31 [tftp] master.etsit.upm.es.1918 elrond Attempt to read`/etc/passwd'.
05/19/95 09:22:17 [rpc] paco.1501 acme RPC lookup for: ypserv
05/19/95 09:32:31 [smtp] tornasol.2748 acme vrfy jose
05/19/95 09:32:53 [smtp] tornasol.2748 acme vrfy jose@di
05/19/95 09:33:10 [smtp] tornasol.2748 acme vrfy jose@kk
05/26/95 09:29:13 [rpc] pc_12B15.uc3m.es.1500 acme RPC lookup for: pcnfsd
05/26/95 09:29:13 [rpc] pc_12B15.uc3m.es.1501 acme RPC lookup for: pcnfsd
09/26/95 09:32:23 [smtp] arapaima.uc3m.es.1063 elrond vrfy postmaster@uc3m.es
09/26/95 10:02:00 [rpc] paco.1500 acme RPC lookup for: ypserv
09/26/95 10:02:00 [rpc] paco.1500 acme RPC lookup for: ypserv

1.2.5.- nstat

Esta herramienta, que originariamente fue diseñada para obtener estadísticas de uso de varios protocolos, se puede utilizar para detectar cambios en los patrones de uso de la red, que nos puedan hacer sospechar que algo raro está pasando en la misma. Esta herramienta viene acompañada por dos utilidades que nos permiten analizar la salida que origina nstat, a saber: nsum, nload. La primera de ellas nos da información de ciertos periodos de tiempo, el segundo es un programa awk que produce una salida que puede ser vista de forma gráfica por herramientas como xvgr.

Para concluir este apartado podemos decir que esta herramienta es muy útil para detectar ciertos tipos de ataques, como hemos reflejado anteriormente (con etherscan), así como dar una idea de qué tipo de protocolos están viajando por la red. Además tiene la ventaja que al estar en modo promiscuo, con solo tenerlo en una máquina del segmento se puede tener monitorizado todo el segmento en el que esté conectada.

1.3.- argus

Es una herramienta de dominio público que permite auditar el tráfico IP que se produce en nuestra red, mostrándonos todas las conexiones del tipo indicado que descubre. Este programa se ejecuta como un demonio y escucha directamente del interfaz de red de la máquina, y su salida es mandada bien a un fichero de trazas o a otra máquina para allí ser leída. En la captura de paquetes IP se le puede especificar condiciones de filtrado como protocolos específicos, nombres de máquinas, etc. A la hora de leer esa información disponemos de una herramienta que incluye el software (llamado ra) y que nos permite también realizar filtros de visualización. Una característica de esta herramienta es la posibilidad de filtrar paquetes de acuerdo a las listas de acceso de los routers CISCO. Es posible por tanto decirle que nos capture aquellos paquetes que no cumplen las reglas de la lista de acceso definida para ese interfaz del router. Como en el caso anterior (netlog) es posible ejecutar el comando en modo promiscuo (si lo que queremos es auditar todo nuestro segmento). Este programa divide las transacciones en cuatro grupos: TCP, UDP/DNS, MBONE, ICMP.

Algunos ejemplos de captura pueden ser:

			argus -w NombreFicheroTraza &
En este ejemplo le indicamos que nos capture todas la transacciones que se producen en nuestra subred y que lo almacene en un fichero.

			argus -w FicheroSalida ip and not icmp &
Todo el tráfico ip pero no el icmp.

Como decíamos antes, el ra es el programa para leer la información generada por argus, veamos algunos ejemplos de utilización.

			ra -r FicheroSalida tcp and host galileo
Vemos todo el tráfico tcp (tanto de entrada como salida) en la máquina galileo.

			ra -C lista_acceso dst net 163.117.1.0
Vemos en tiempo real todas las transacciones a la red 163.117.1.0 que violan la lista de acceso de ese interfaz del router.

Veamos a continuación un pequeño ejemplo del fichero de trazas generado por esta utilidad:


Mon 10/23 11:25:36 ip router4 <- 255.255.255.255 CON Mon 10/23 11:31:58 ip router4 <- 255.255.255.255 CON Mon 10/23 11:24:02 udp acme.4075 -> acme.domai TIM Mon 10/23 11:24:02 udp acme.4076 -> acme.domai TIM Mon 10/23 11:24:02 udp acme.4079 -> acme.domai TIM Mon 10/23 11:24:44 udp leland.Stanford.domai -> acme.domai TIM Mon 10/23 11:24:48 udp acme.4081 -> acme.domai TIM Mon 10/23 11:24:49 udp acme.4082 -> acme.domai TIM Mon 10/23 11:25:36 udp julieta.2137 -> acme.domai TIM Mon 10/23 11:25:36 udp julieta.2138 -> acme.domai TIM Mon 10/23 11:25:37 udp karenina.2135 -> acme.domai TIM Mon 10/23 11:25:37 udp karenina.2136 -> acme.domai TIM Mon 10/23 11:25:37 udp karenina.2137 -> acme.domai TIM Mon 10/23 11:25:41 udp sparky.arl.mil.domai -> acme.domai TIM Mon 10/23 11:25:45 udp serv2.cl.msu.ed.domai -> acme.domai TIM Mon 10/23 11:25:12 udp wor-srv.wam.umd.domai -> acme.domai TIM Mon 10/23 11:26:04 udp a09-unix.1359 -> acme.domai TIM Mon 10/23 11:25:00 udp admii.arl.mil.domai -> acme.domai TIM Mon 10/23 11:25:35 udp sahara.upf.es.domai -> acme.domai CON Mon 10/23 11:26:17 udp sun.rediris.es.domai -> acme.domai TIM

Para terminar podemos decir que este software está disponible para SunOs 4.1.x, Solaris 2.3 y SGI IRIX5.2

1.4.- tcpdump

Es un software de dominio público que imprime las cabeceras de los paquetes que pasan por un interfaz de red. Este programa es posible ejecutarlo en modo promiscuo con lo que tendremos las cabeceras de los paquetes que viajan por la red. Tanto en la captura como en la visualización de la información es posible aplicar filtros por protocolo (TCP, UDP, IP, ARP, RARP ...), puertos (en este caso el puerto puede ser un número o un nombre especificado en el fichero/etc/services), direcciones fuente, direcciones destino, direcciones de red, así como realizar filtros con operadores (=, <, >, !=, and, not, ...). En la última versión es posible ver también los paquetes de datos.

1.5.- SATAN (Security Administrator Tool for Analyzing Networks)

Es un software de dominio público creado por Dan Farmer que chequea máquinas conectadas en red y genera información sobre el tipo de máquina, qué servicios da cada máquina y avisa de algunos fallos de seguridad que tengan dichas máquinas. Una de las ventajas de SATAN frente a otros paquetes es que utiliza un interfaz de WWW (como Mosaic, Netscape,..) y va creando una base de datos de todas las máquinas chequeadas y las va relacionando entre ellas (de forma que si encuentra una máquina insegura, y chequea otra máquina que está relacionada con ésta, automáticamente quedará marcada esta segunda también como insegura), además tiene la posibilidad de poder chequear las máquinas con tres niveles ("light", normal y "heavy"). Una vez realizado el chequeo de la máquina se genera una salida en formato html, y en el caso de encontrar fallos da una pequeña explicación sobre el fallo en concreto y si existe algún documento sobre ese fallo recogido en el CERT (advisory) tiene un enlace a ese documento, para que sobre la marcha pueda ser consultado. Además en el caso que el fallo de seguridad sea debido a versiones antiguas de software da la posibilidad (mediante un enlace) de instalar una versión de ese software.

Algunos de los servicios chequeados por SATAN son: finger, NFS, NIS, ftp, DNS, rexd así como tipo de sistema operativo, versión de sendmail, etc. La base de datos generada por SATAN puede ser luego consultada por varios campos: tipo de sistema operativo, tipo de servicio (servidores de NIS, ftp, NFS, X, etc).

SATAN ha sido diseñado como una herramienta de seguridad para ayudar a administradores de sistemas y redes, pero también puede ser utilizada para atacar a sistemas y descubrir la topología de la red de una organización (SATAN es capaz de chequear máquinas por subredes, con lo que quedan al descubierto todas las máquinas que se encuentran conectadas en dicha subred)

Para poder compilar y ejecutar SATAN basta con poseer la versión 5 de perl y un visualizador de WWW.

Para terminar, vamos a ver algunos de los fallos de seguridad que SATAN es capaz de detectar:

  • Acceso vía rexec

  • Vulnerabilidad en el sendmail

  • Acceso vía tftp

  • Accesos vía rsh

  • Acceso a servidores X no restringido

  • Exportar sistemas de ficheros no restringido

  • Acceso a ficheros de password vía NIS

1.6.- ISS(Internet Security Scanner)

Es una herramienta de dominio público que chequea una serie de servicios para comprobar el nivel de seguridad que tiene esa máquina. ISS es capaz de chequear una dirección IP o un rango de direcciones IP (en este caso se indican dos direcciones IP e ISS chequeará todas las máquinas dentro de ese rango). El programa viene acompañado de dos utilidades que son ypx y strobe, la primera nos permite la transferencia de mapas NIS a través de la red y la segunda nos chequea y describe todos los puertos TCP que tiene la máquina que chequeamos. Como podemos ver, con la primera herramienta es posible la transferencia de los ficheros de "password" en aquellas máquinas que hayan sido configuradas como servidores de NIS.

ISS se puede ejecutar con varias opciones y la salida se deja en un fichero. Además, si ha podido traerse el fichero de "password" de la máquina chequeada creará un fichero aparte con la dirección IP de la máquina

1.7.- Courtney

Este software de dominio público sirve para identificar la máquina origen que intenta realizar ataques mediante herramientas de tipo SATAN. El programa es un script perl que trabaja conjuntamente con tcpdump. Courtney recibe entradas desde tcpdump y controla la presencia de peticiones a nuevos servicios del stack TCP/IP (las herramientas de este tipo realizan ataques, chequeando de forma ordenada todos los puertos TCP y UDP que tiene el sistema, para poder ver qué servicios tiene instalados dicha máquina), si se detecta que se está produciendo un continuo chequeo de estos puertos en un breve intervalo de tiempo, Courtney da un aviso. Este aviso se manda vía syslog.

Courtney puede generar dos tipos de alarmas dependiendo del ataque que se esté produciendo (normal o "heavy", las herramientas como SATAN dispone de distintos grados de chequeo de la máquina).

Esta herramienta necesita el intérprete de PERL y el tcpdump.

1.8.- Gabriel

Software desarrollado por "Los Altos Technologies Inc" que permite detectar "ataques" como los generados por SATAN. Gabriel identifica el posible ataque y de forma inmediata lo notifica al administrador o responsable de seguridad. La notificación se puede realizar de varias formas (e-mail, cu, fichero de trazas). Este programa existe (en este momento) para SunOs 4.1.x y Solaris, y está formado por un cliente y un servidor. El cliente se instala en cualquier máquina de la red, recoge la información que se está produciendo y la envía al servidor vía syslog. Estos clientes además envían de forma regular información al servidor para indicarle que están en funcionamiento.

Gabriel en el caso de SunOs 4.1.x (Solaris 1) utiliza el programa etherfind para realizar su trabajo. Una característica interesante de este software es que no necesita programas adicionales (como en el caso anterior PERL y tcpdump). El software viene con los ejecutables para SunOs 4.1.x y Solaris (cliente y servidor) así como un programa para realizar un test de funcionamiento.

Veamos un ejemplo de una alerta generada por el programa ante un ataque con SATAN. Además de este fichero, se genera un mensaje de correo alertando del ataque.


	Mon 07/24/95 14:15:01 restrained attacks from acme
	Tue 07/25/95 10:15:01 restrained attacks from acme
	Tue 07/25/95 14:00:01 restrained attacks from acme

1.9.- tcplist

Es un pequeño programa de dominio público que nos informa de todas las conexiones TCP desde o hacia la máquina donde lo estamos ejecutando.

1.10.- nocol (Network Operations Center On-Line)

Es un conjunto de programas de monitorización de sistemas y redes. El software es un conjunto de agentes que recogen información y escriben la salida en un formato que se puede luego procesar. Cada dato procesado recibe el nombre de evento y cada evento tiene asociado una gravedad. Existen cuatro niveles de gravedad (CRITICAL, ERROR, WARNING, INFO), cada uno de estos niveles es controlado de forma independiente por cada agente. Existe un conjunto de herramientas que nos permiten ver toda la información generada por los agentes y que puede ser filtrada dependiendo de la gravedad del evento. Entre las cosas que pueden ser controladas por este software tenemos:

  • Monitor de ICMP (usando ping o multiping)

  • Carga en la red (ancho de banda)

  • Monitor de puertos TCP.

  • Monitor de SNMP y SNMP traps.

  • Monitor de servidor de Nombres.

  • Monitor de rpc.

  • Chequeo del bootpd

2.- Herramientas que chequean la integridad del sistema

Veremos a continuación una serie de herramientas que nos ayudarán a proteger nuestro sistema. Para conseguirlo tenemos dos tipos de herramientas. Las primeras se basan en chequeos a los ficheros y las segundas nos alertan de posibles modificaciones de ficheros, y, de programas "sospechosos" que puedan estar ejecutándose en la máquina de forma camuflada. Veremos primero las que chequean la integridad de los sistemas de ficheros.

2.1.- COPS (Computer Oracle and Password System)

Cops es un conjunto de programas diseñados por la Universidad de Purdue que chequean ciertos aspectos del sistema operativo UNIX relacionados con la seguridad. Existen dos versiones de este paquete: una versión escrita en "sh" y "C" y otra versión escrita en "perl", aunque su funcionalidad es similar. Este programa es fácil de instalar y configurar y se ejecuta en gran cantidad de plataformas UNIX. En el primer caso necesitaremos un compilador de lenguaje C y una shell estándar (sh), en el segundo nos bastará con tener instalado el interprete de perl (versión 3.18 o superior). Entre las funcionalidades que tiene Cops podemos destacar.

  • Chequeo de modos y permisos de los ficheros, directorios y dispositivos

  • Palabras de paso pobres (en el caso que tengamos una herramienta como crack, podemos comentar la línea de chequeo de palabras de paso)

  • Chequeo de contenido, formato y seguridad de los ficheros de "password" y "group"

  • Chequeo de programas con root-SUID.

  • Permisos de escritura sobre algunos ficheros de usuario como ".profile" y ".cshrc"

  • Configuración de ftp "anonymous".

  • Chequeo de algunos ficheros del sistema como "hosts.equiv", montajes de NFS sin restricciones, "ftpusers", etc.

Veamos un ejemplo del fichero creado por este programa:

	ATTENTION:

Security Report for Tue Apr 11 13:33:33 WET DST 1995 from host acme Warning! Root does not own the following file(s): /dev /usr/etc Warning! NFS file system exported with no restrictions! Warning! NFS file system exported with no restrictions! Warning! NFS file system exported with no restrictions! Warning! /dev/fd0 is _World_ writable! Warning! /dev/fd0 is _World_ readable! Warning! /etc/ethers is _World_ writable! Warning! /etc/motd is _World_ writable! Warning! /etc/utmp is _World_ writable! Warning! /usr/adm/snm is _World_ writable! Warning! File /etc/motd (in /etc/rc.local.orig) is _World_ writable!

Warning! User uucp's home directory /var/spool/uucppublic is mode 03777! Warning! Password file, line 12, user sysdiag has uid = 0 and is not root sysdiag:*:0:1:Old System Diagnostic:/usr/diag/sysdiag:/usr/diag/sysdiag/sysdiag Warning! Password file, line 13, user sundiag has uid = 0 and is not root sundiag:*:0:1:System Diagnostic:/usr/diag/sundiag:/usr/diag/sundiag/sundiag Warning! YPassword file, line 2, user sundiag has uid = 0 and is not root sundiag:*:0:1:System Diagnostic:/usr/diag/sundiag:/usr/diag/sundiag/sundiag Warning! YPassword file, line 3, user sysdiag has uid = 0 and is not root sysdiag:*:0:1:Old System Diagnostic:/usr/diag/sysdiag:/usr/diag/sysdiag/sysdiag Warning! /etc/ftpusers should exist! Warning! Anon-ftp directory pub is World Writable!

2.2.- tiger

Es un software desarrollado por la Universidad de Texas que está formado por un conjunto de shell scripts y código C que chequean el sistema para detectar problemas de seguridad de forma parecida a COPS. Una vez chequeado el sistema, se genera un fichero con toda la información recogida por el programa. Tiger dispone de una herramienta (tigexp) que recibe como parámetro dicho fichero y da una serie de explicaciones adicionales de cada línea que generó el programa anterior. El programa viene con un fichero de configuración donde es posible decirle qué tipo de chequeo se quiere realizar (podemos comentar las operaciones más lentas y ejecutar éstas de forma menos continuada, mientras que las más rápidas pueden ser ejecutadas más frecuentemente). Entre la información que chequea el programa tenemos.

  • Configuración del sistema.

  • Sistemas de ficheros.

  • Ficheros de configuración de usuario.

  • Chequeo de caminos de búsqueda.

  • Chequeos de cuentas.

  • Chequeos de alias.

  • Comprueba la configuración de ftp "anonymous".

  • Chequeo scripts de cron.

  • NFS.

  • Chequeo de servicios en el fichero /etc/inetd.conf

  • Chequeo de algunos ficheros de usuario (.netrc, .rhosts, .profile, etc)

  • Comprobación ficheros binarios (firmas). Para poder chequear éstos es necesario disponer de un fichero de firmas.

2.3.- crack

Este paquete de dominio público realizado por Alex Muffet permite chequear el fichero de contraseñas de UNIX y encontrar palabras de paso triviales o poco seguras. Para ello utiliza el algoritmo de cifrado (DES) utilizado por el sistema UNIX y va comprobando a partir de reglas y de diccionarios, las palabras de paso que se encuentran en el fichero de contraseñas, creando un fichero con todos los usuarios y palabras descubiertas. Se realizan una serie de pasadas sobre el fichero de contraseñas aplicando la secuencia de reglas que se especifique. Estas reglas se encuentran en dos ficheros (gecos.rules y dicts.rules) y pueden ser modificadas utilizando un lenguaje bastante simple. Para una mayor efectividad pueden utilizarse diccionarios complementarios (existen en gran diversidad en servidores ftp) en diferentes idiomas y sobre diversos temas. Experiencias realizadas en la Universidad Carlos III de Madrid sobre diversas máquinas han arrojado unos resultados de 16% de palabras de paso triviales en máquinas donde no se tenía ninguna norma a la hora de poner contraseñas de usuario.

Es una buena norma pasar de forma periódica el crack para detectar contraseñas poco seguras, además de tener una serie de normas sobre palabras de paso (tanto en su contenido como en la periodicidad con que deben ser cambiadas).

2.4.- Tripwire

Este software de dominio público desarrollado por el Departamento de Informática de la Universidad de Purdue, es una herramienta que comprueba la integridad de los sistemas de ficheros, y ayuda al administrador a monitorizar éstos frente a modificaciones no autorizadas. Esta herramienta avisa al administrador de cualquier cambio o alteración de ficheros en la máquina (incluido binarios). El programa crea una base de datos con un identificador por cada fichero analizado, y puede ser comparado en cualquier momento el actual con el registrado en la base de datos, avisando ante cualquier alteración, eliminación o inclusión de un nuevo fichero en el sistema de ficheros. La base datos está compuesta por una serie de datos como la fecha de la última modificación, propietario, permisos, etc. con todo ello se crea una firma para cada fichero en la base de datos.

Esta herramienta debería ser ejecutada después de la instalación de la máquina, para tener una "foto" de los sistemas de ficheros en ese momento, y puede ser actualizada cada vez que añadimos algo nuevo. Dispone de un fichero de configuración que permite decidir qué parte del sistema de ficheros va a ser introducida en la base de datos para su posterior comprobación.

2.5.- chkwtmp

Es un pequeño programa que chequea el fichero "/var/adm/wtmp" y detecta entradas que no tengan información (contienen sólo bytes nulos). Estas entradas son generadas por programas tipo "zap" que sobreescriben la entrada con ceros, para así ocultar la presencia de un usuario en la máquina. Este programa detecta esa inconsistencia y da un aviso de modificación del fichero y entre qué espacio de tiempo se produjo.

2.6.- chklastlog

Parecido al programa anterior. Éste chequea los ficheros "/var/adm/wtmp" y "/var/adm/lastlog". El primero es la base de datos de login, y el segundo la información del último login de un usuario. En el segundo fichero nos indica qué usuario ha sido eliminado del fichero.

2.7.- spar

Software de dominio público diseñado por CSTC (Computer Security Technology Center) realiza una auditoría de los procesos del sistema, mucho más flexible y potente que el comando lastcomm de UNIX. El programa lee la información recogida por el sistema y puede ser consultada con una gran variedad de filtros como. usuario, grupo, dispositivo, admitiendo también operadores (=, >, <, >=, &&...). Por defecto el programa obtiene la información del fichero "/var/adm/pacct". Pero se le puede indicar otro fichero. La información puede ser mostrada en ASCII o en binario para su posterior proceso con spar.

2.8.- lsof (List Open Files)

Este programa de dominio público creado por Vic Abell, nos muestra todos los ficheros abiertos por el sistema, entendiendo por fichero abierto: un fichero regular, un directorio, un fichero de bloque , fichero de carácter, un fichero de red (socket, fichero NFS). El programa admite varios parámetros que nos permiten filtrar información dependiendo qué tipo de procesos queramos ver en ese instante. Este software está disponible para una gran variedad de plataformas: Aix 3.2.3, HP-UX 7.x y 8.x, IRIX 5.1.1, SunOs 4.1.x, Ultrix 2.2 y 4.2, Solaris 2.3, NetBSD ...

Veamos a continuación un pequeño extracto de una salida de este programa:

   COMMAND    PID   USER FD   TYPE   DEVICE   SIZE/OFF  INODE NAME

0 root cwd VDIR 7, 0 1536 2 / (/dev/sd0a) init 1 root cwd VDIR 7, 0 1536 2 / (/dev/sd0a) init 1 root txt VREG 7, 0 65536 1252 / (/dev/sd0a) 2 root cwd VDIR 7, 0 1536 2 / (/dev/sd0a) portmap 57 root cwd VDIR 7, 0 1536 2 / (/dev/sd0a) portmap 57 root txt VREG 7, 6 24576 6115 /usr (/dev/sd0g) ypserv 62 root 12u unix 0xff64ee0c 0x0 ->(none) ypbind 66 root 8uW VREG 7, 0 14 1279 / (/dev/sd0a) rpc.ypupd 68 root cwd VDIR 7, 0 512 3670 /var/yp

rpc.ypupd 68 root txt VREG 7, 6 16384 6204 /usr (/dev/sd0g) rpc.ypupd 68 root txt VREG 7, 6 24576 7334 /usr (/dev/sd0g) named 83 root cwd VDIR 7, 0 512 2484 /etc/namedb named 83 root txt VREG 7, 0 106496 130 / (/dev/sd0a) named 83 root 7u inet 0xff64988c 0x0 UDP *:domain named 83 root 8r VREG 7, 0 2268 30 / (/dev/sd0a) named 83 roo 9u inet 0xff64958c 0x0 UDP *:681 syslogd 99 root 22w VREG 7, 14 102657 73779 /usr/local (/dev/sd1g) syslogd 99 root 23w VREG 7, 14 102657 73779 /usr/local (/dev/sd1g) syslogd 99 root 24w VREG 7, 14 280321 276653 /usr/local (/dev/sd1g) sendmail 107 root cwd VDIR 7, 0 512 2468 /var/spool/mqueue sendmail 107 root txt VREG 7, 6 172032 7302 /usr (/dev/sd0g)

2.9.- cpm (Check Promiscuous Mode)

Este pequeño programa realizado por la Universidad de Carnegie Mellon, chequea el interfaz de red de la máquina descubriendo si está siendo utilizado en modo promiscuo (escuchando todo el tráfico de la red). Está herramienta es muy útil, porque nos alerta de la posible existencia de un "sniffer" (olfateador) que intente capturar información en nuestra red como puedan ser las palabras de paso. Este programa debería ser ejecutado de forma periódica para detectar lo antes posible el estado promiscuo en la placa de red. Una forma útil de utilizarlo es mandarnos el resultado vía correo electrónico.

Es bueno tener en cuenta que muchos de los programas descritos en este documento pueden poner la placa en modo promiscuo con lo que deberemos asegurarnos que no son nuestros programas los que producen esa alerta. Generalmente los programas tipo "sniffer" suelen estar ejecutándose como procesos camuflados en el sistema.

2.10.- ifstatus

Software de dominio público creado por Dave Curry, permite (al igual que el anterior) descubrir si un interfaz de red está siendo utilizado en modo promiscuo para capturar información en la red. Sirven todas las recomendaciones dichas anteriormente.

Veamos un ejemplo del mensaje que genera esta aplicación, cuando encuentra un interfaz de red ejecutado en modo promiscuo.

		checking interface le0... flags = 0x163

WARNING: ACME INTERFACE le0 IS IN PROMISCUOUS MODE.

checking interface lo0... flags = 0x49

2.11.- osh (Operator Shell)

Creado por Mike Neuman, este software de dominio público es una shell restringida con "setuid root", que permite indicar al administrador mediante un fichero de datos qué comandos puede ejecutar cada usuario. El fichero de permisos está formado por nombres de usuario y una lista de los comandos que se permite a cada uno de ellos, también es posible especificar comandos comunes a todos ellos. Esta shell deja una auditoría de todos los comandos ejecutados por el usuario (indicando si pudo o no ejecutarlos), además dispone de un editor (vi) restringido. Este programa es de gran utilidad para aquellas máquinas que dispongan de una gran cantidad de usuarios y no necesiten ejecutar muchos comandos, o para dar privilegios a determinados usuarios "especiales" que tengan que ejecutar algún comando que en circunstancias normales no podrían con una shell normal.

Veamos un ejemplo de traza creada por el programa:

	LOGIN: acme ran osh at Wed Jun  7 12:09:09 1995

acme (6/7/95 12:09:11)pwd -

acme (6/7/95 12:09:13)ls +

acme (6/7/95 12:09:16)ls -la +

acme (6/7/95 12:09:20)elm -

acme (6/7/95 12:09:23)quit -

acme (6/7/95 12:09:25)exit -

acme (6/7/95 12:09:27)logout -

acme (6/7/95 12:09:31)exit -

logout: acme left osh at Wed Jun 7 12:09:32 1995

2.12.- noshell

Este programa permite al administrador obtener información adicional sobre intentos de conexión a cuentas canceladas en una máquina. Para utilizarlo basta sustituir la shell de usuario en el fichero /etc/password por este programa. A partir de ahora cada intento de conexión generará un mensaje (vía correo electrónico o syslog) indicando: usuario remoto, nombre del ordenador remoto, dirección IP, día y hora del intento de login y tty utilizado para la conexión.

Conclusión

Después de esta pequeña descripción (más bien enumeración) de este conjunto de herramientas y como final a este pequeño artículo, me gustaría comentar que hay aspectos de la seguridad muy importantes que por falta de espacio, no están recogidos en este documento. De todos ellos quizás los más importantes que no han sido tratados aquí, sean las herramientas de cifrado. Existen una gran cantidad de herramientas de dominio público que nos permiten cifrar la información como por ejemplo el correo electrónico (además de firmar el mensaje). El establecimiento de terminal remoto cifrados (esto es muy útil para defenderse de "sniffers").

También el tema de las palabras de paso es bastante importante, para esto disponemos a su vez de herramientas como pueden ser las "one time password" y algunas modificaciones del comando de "password" que permiten utilidades adicionales. Por último (pero no menos importante) los "firewalls" (cortafuegos) son de una gran ayuda para crear en nuestra organización redes seguras separadas de la red que directamente nos conecta a Internet, mediante una serie de filtros de los servicios TCP/IP.


Francisco Cruz Argudo
Técnico de redes
Centro de Cálculo
Universidad Carlos III de Madrid
dirección de correo paco [at] di [dot] uc3m.es
http://porky.uc3m.es/~paco/paco.html
Todas las herramientas mencionadas se pueden conseguir por FTP anónimo en el servidor lince.uc3m.es.

Apéndice - Lecturas recomendadas

- Bellovin, S, "There Be Dragons", Third Usenix UNIX Security Symposium, Baltimore, September 1992.

- Bellovin, S, "Security Problems in the TCP/IP Protocol Suite", Computer Communications Review 19 (2), 1989.

- CERT Advisories. CERT, Carnegie Mellon University

- Cheswick, B, "An Evening with Berfred In wich a Cracker is Lured, Endured, and Studied", Winter USENIX Conference (San Francisco), January 1992.

- Cheswick, W, R, Bellovin, S, M, "Firewalls ans Internet Security", Addison-Wesley Profesional Computing Series, 1994.

- Curry, D, "Improving the Security of your UNIX System", SRI International.

- Farmer, D, & Venema, W, "Improving the security of your site by breaking into it". USENET newsgroup comp.security.unix.

- Frederick, M, & Ranum, M, "A Network Perimeter With Secure External Access", Internet Society Symposium on Network and Distributed Systems Security, February 1994.

- Garfinkel, S, & Spafford, G, and Pooch, U, "Practical Unix Security" O'Reilly and Associates, Inc., 1992.

- Morrison, G, "UNIX Security Tools". Division of Information Technology. CSRIO Review of Computer Network Security.

- Pethia, R, D & van Wyk, K, R, "Computer Emergency Response-An International Problem", CERT, Carnegie Mellon Universitty

- Quinn, S, "Network Security Tools". NIST (National Institute of 2 Standars and Technology).

- Ranum, M, "Thinking About firewalls", Second Conference on systems and Network Security and Management, april, 1993.

- Venema, W, "TCP WRAPPER, Network monitoring, access control, and booby traps", UNIX Security Symposium III Procedings Baltimore), September 1992.