Detección de Intrusos Linux

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 30

Linux Avanzado Ing.

Jefferson Paguay Seguridad en Sistemas de Informacin Deteccin de intrusos

QUE ES UNA INTRUSIN?


Una intrusin puede ser definida como un conjunto de acciones que intentan comprometer o poner en peligro la integridad, la confidencialidad o la disponibilidad, aunque de forma ms sencilla Seguridad en Sistemas de Informacin Deteccin de intrusos se podra definir como cualquier actividad inadecuada, incorrecta, o anmala que detectemos en nuestro sistema.

TIPOS DE INTRUSIONES
Si se tiene en cuenta la naturaleza de la intrusin se puede hacer una primera clasificacin o categorizacin de la siguiente manera: Intrusiones de uso errneo. Se definen como ataques bien definidos contra puntos dbiles sabidos de un sistema. Este tipo de intrusiones pueden ser detectadas observando ciertas acciones que son llevadas a cabo sobre ciertos objetos de dicho sistema. Intrusiones de anomala. Se podran definir como desviaciones de los patrones normales de uso del sistema. Pueden ser detectadas guardando y revisando peridicamente un perfil del sistema, en el cual se detectan desviaciones o alteraciones significativas. Independientemente de si la intrusin est clasificada como una intrusin anmala o como de uso errneo, existen diferentes maneras primarias en que los intrusos pueden acceder a un sistema informtico, en base a las cuales se puede establecer una segunda clasificacin para intrusiones: 1. Intrusin fsica. En este caso el intruso tiene acceso fsico a la mquina (puede utilizar el teclado, etc...) 2. Intrusin del sistema. El intruso tiene una cuenta de usuario en el sistema con pocos privilegios pero puede llevar a caboestrategias para que le sean asignados privilegios administrativos adicionales. 3. Intrusin alejada. Tentativa de penetrar un sistema remotamente, a travs de la red. Seguridad en Sistemas de Informacin Deteccin de intrusos

QUIN ES UN INTRUSO Y TIPOS


Los intrusos son usuarios no autorizados en un sistema. Si queremos diferenciar tipos de intrusos, una posible clasificacin sera la siguiente: 1. Externos. Este tipo de usuarios no est autorizado para usar ningn recurso del sistema. Comnmente son denominados intrusos (aunque intrusos lo son todos)

Linux Avanzado Ing. Jefferson Paguay y son el objetivo central de la seguridad fsica y de las tcnicas de cortafuegos, por ejemplo. 2. Interno. A diferencia de los usuarios externos, este tipo de usuarios estn autorizados para usar solamente algunos de los recursos del sistema. A su vez, podemos dividirlos en:

2.1 Enmascarados: Imitan o se hacen pasar por otros usuarios. 2.2 Clandestinos: Evaden todo tipo de control y constituyen, sobre todo, una amenaza para sistemas dbiles y sistemas mal manejados. 3. Misfeasors: Este tipo de usuarios incluye a aquellos que emplean mal los privilegios que tienen asignados. Todo usuario de un sistema constituye una amenaza potencial har el mismo, independientemente de su origen o de la forma en que se hayan autentificado.

CMO INTENTAN ENTRAR LOS INTRUSOS EN LOS SISTEMAS?


Un intruso suele seguir unos pasos para entrar en el sistema. Primero recopila informacin general de fallos de seguridad (bugs) y de mensajes oficiales que muestran los pasos que hay que dar para Seguridad en Sistemas de Informacin Deteccin de intrusos aprovechar un determinado fallo de seguridad, incluyendo los programas necesarios (exploits). Dichos fallos se aprovechan para conseguir introducirse en el sistema y estn basados casi siempre en los protocolos TCP/IP, en servicios de red como NFS o NIS, o en los comandos remotos UNIX. Los protocolos basados en TCP/IP que se suelen aprovechar son TELNET, FTP, TFTP, SMTP, HTTP, etc. Cada uno de ellos tiene sus propios agujeros de seguridad que se van parcheando con nuevas versiones, aunque siempre aparecen nuevos bugs. Toda esa informacin est en Internet y slo es necesario saber buscarla. Por lo tanto, el proceso de hacking sigue las siguientes etapas:

Obtencin de la informacin del equipo a atacar. Entrada en el equipo. Obtencin de la cuenta de root. Mantener los privilegios de root. Borrar las huellas. Generalmente la informacin que se recopila del equipo a atacar ser: El tipo de sistema operativo a atacar. La versin de Sendmail usada, informacin que se consigue tecleando telnet <equipo> 25. El nmero 25 es el nmero de puerto que utiliza normalmente dicho daemon. Una vez conectados para salir, basta utilizar QUIT o, para la obtencin de ayuda, HELP. Para evitar esto, basta configurar el enrutador de manera que todas las conexiones procedentes de fuera pasen a un equipo central y que sea desde ste desde donde se distribuya el correo internamente. Qu servicios RPC tiene, para lo que basta con escribir rpcinfo p <equipo>. Informacin de todo el dominio, es decir, de los equipos que lo integran. Normalmente se usa WHOIS para descubrir cual es el dominio.

Linux Avanzado Ing. Jefferson Paguay


Seguridad en Sistemas de Informacin Deteccin de intrusos Login de los usuarios que tienen acceso al equipo. Muchas veces esto se obtiene a travs del servicio FINGER si el host atacado tiene este servicio disponible. Otra manera es encontrar direcciones de correo electrnico que apunten a esa mquina o usar mecanismos de ingeniera social.

En cuanto a la penetracin en el sistema podemos diferenciar dos formas bsicas de introducirse:


Entrar directamente, sin necesidad de poseer una cuenta en el sistema. Una opcin es hacerlo como se detallaba al principio, con los comandos remotos. Conseguir el fichero de contraseas del equipo y crackearlo. Para crackearlo existen varios programas, tanto para UNIX como para Windows.

Una vez introducidos en el equipo, los hackers intentarn obtener privilegios de root y para ello explotarn los bugs encontrados para el sistema en el primer paso. Lo que tambin hacen es intentar explotar bugs que afecten a sistemas UNIX en general. Si siguen sin funcionar, explotarn el sistema (hasta donde le permitan sus privilegios) para tener una visin general de cmo est protegido, por ejemplo, viendo si los usuarios tienen ficheros .rhosts, si determinados ficheros tienen permisos SUID qu usuario tiene determinados ficheros, etc. Y a partir de ah existirn dos opciones principalmente: la primera es que se olviden durante unos das del equipo para poder recopilar ms informacin sobre bugs actualizados y la segunda es la de hackear otra mquina del mismo dominio, que sea algo ms insegura. Una vez hackeado el equipo inseguro, colocarn un sniffer para conseguir una cuenta para el otro equipo. Un sniffer no es ms que un programa que captura todo lo que pasa por la red, poniendo al equipo en modo promiscuo. La obtencin de un sniffer es tan sencilla como navegar por Internet, pero incluso programas como Etherfind, Tcpdump o Ethereal pueden ser usados Seguridad en Sistemas de Informacin Deteccin de intrusos para este fin, aunque no hayan sido concebidos para ello. La manera de comprobar si un sistema est en modo promiscuo es tecleando ifconfig -a. Una manera de evitar los sniffers es mediante switches en la redes de acceso general del resto de la red. Una vez que los intrusos consiguen privilegios de root deben conseguir mantenerlos. Existen diversas formas de conseguirlo, es decir, asegurar que la prxima vez que los hackers entren en el sistema con la cuenta de un usuario que posee privilegios normales, puedan conseguir los privilegios de root de forma ms fcil y sin complicaciones. Para ello, la forma ms empleada es el sushi (set-uidshell), ms conocida como huevo. El sushi consiste en copiar un shell a un directorio pblico, en el que un usuario normal pueda ejecutar los ficheros, y cambiar el nombre al que ellos quieran. Hay que asegurarse de que el shell copiado tenga como propietario al root y, posteriormente cambiar los permisos del fichero con las cifras 4755. El 4 significa que cualquier usuario que ejecute dicho fichero lo estar ejecutando con los privilegios del propietario. Como en este caso el propietario es root y el fichero en cuestin es un shell, el sistema les abrir a los hackers un shell con privilegios de root. Con esta operacin, la prxima vez que accedan al sistema con la cuenta de un usuario normal, slo tendrn que ejecutar el shell antes mencionado y se convertirn en root.

Linux Avanzado Ing. Jefferson Paguay Por ltimo, un intruso con unos conocimientos mnimos siempre intentar eliminar sus huellas. El sistema operativo guarda varios registros de las conexiones de los usuarios al equipo, por lo que los hackers intentarn eliminarlos. Existen varios modos de borrar sus huellas en estos ficheros. La primera es que, como la mayora no son ficheros de texto, no podrn editarlo con un editor de texto, pero si existen programas conocidos con el nombre de zappers (los ms habituales son los siguientes: marry.c, zap.c, zap2.c, remove.c, cloak.c, ...), que pueden borrar los datos relativos a un usuario en particular dejando el resto de la informacin intacta. La segunda manera es mucho ms radical, que consiste en dejar el fichero con cero bytes o Seguridad en Sistemas de Informacin Deteccin de intrusos incluso borrarlo. Esta manera slo se utiliza como ltimo recurso, ya que suscita muchas sospechas por parte de los administradores.

DESCUBRIENDO AL INTRUSO
Ante la sospecha de que nuestro sistema haya sido objeto de un ataque, se ha de determinar lo siguiente: Si realmente el sistema ha sido atacado. Si el ataque ha tenido xito. En qu grado se ha comprometido nuestro sistema en caso de que haya sido atacado. La tarea de detectar posibles intrusos ser ms o menos fcil en funcin del sistema operativo del que dispongamos puesto que algunos sistemas operativos modernos son complejos y poseen numerosos sitios en los cuales los intrusos pueden ocultar sus actividades. La mayor parte de los intrusos dejan seales de sus actividades en el sistema. En principio, si estamos al da en materia de seguridad, as como de fallos que van surgiendo, no tendremos problemas de que un intruso nos entre en nuestro sistema. Realmente con un poco de esfuerzo podemos tener un servidor altamente seguro que nos evitara alrededor del 85% de los intentos de acceso no autorizados a nuestro sistema, pero en muchas ocasiones el peligro viene de los propios usuarios internos del sistema, los cuales presentan un gran riesgo debido a que ya tienen acceso al sistema, pero como siempre existen mtodos de seguridad para controlar a los usuarios legtimos. Lo fundamental es descubrir si realmente ha entrado un intruso, ya que en muchas ocasiones pensamos que ha entrado alguien pero no es cierto. Por eso, ante todo calma, esto es lo ms importante para un buen administrador. Seguridad en Sistemas de Informacin Deteccin de intrusos.

DETECCIN EN SISTEMAS UNIX/LINUX.


CMO SABER SI HAY UN INTRUSO ACTUALMENTE EN EL SISTEMA. Cuando sospechamos que un intruso puede que se encuentre actualmente en el sistema debemos realizar dos pasos fundamentales:

Linux Avanzado Ing. Jefferson Paguay 1. Comprobar si los usuarios que se encuentran actualmente en el sistema son sospechosos. 2. Comprobar que procesos se estn ejecutando y quin los ejecuta. 3. Las sospechas de que un intruso se encuentra en nuestro sistema pueden venir fundamentadas porque en el intento de comprobar si dicho intruso ha atacado el sistema (apartado 2.1.3.) nos damos cuenta, por ejemplo en las fechas de los logs o en las fechas de procesos (o ficheros), que existe una gran posibilidad que se encuentre en l en ese mismo instante. Por ello a continuacin se va a explicar los dos pasos fundamentales comentados anteriormente. Visualizacin de los usuarios logged en el sistema. Si creemos que hay intrusos en nuestro sistema, lo primero a determinar es dnde estn y qu estn haciendo. Existen diversos comandos que permiten conocer los usuarios que estn actualmente en el sistema: Comando w. Este comando muestra una visin general de todos los usuarios que se encuentran en el sistema as como los programas que estn ejecutando. A continuacin se muestra un ejemplo:
$w 3:47pm up 18 days, 3:02, 7 users, load average: 0.02, 0.00, 0.00 User tty login@ idle JCPU PCPU what user1 ttyp0 25Mar94 2:08 39:15 4 -tcsh user2 ttyp1 5Apr94 8 5:51 5:28 emacs user2 ttyp2 3:46pm w user3 ttyp3 Mon 2pm 2:04 1 -csh user3 ttyp4 Mon 3pm 41 21 -csh user2 ttyp6 5Apr94 3 1:38 6 -tcsh user2 ttyp7 Wed 2pm 5:31 17 1 tcsh

La primera lnea muestra informacin general del sistema (la hora actual, el nmero de usuarios conectados,...). El resto de la salida muestra los usuarios que estn actualmente en el sistema, el terminal en el que estn conectados y lo que estn haciendo. Ante esta informacin se ha de prestar atencin a los siguientes aspectos:

Validar si todos los usuarios son vlidos. Validar que no llevan conectados en el sistema una cantidad de tiempo excesiva Asegurarnos de que los usuarios no estn ejecutando programas que puedan resultar sospechosos.

Comando finger. Este es un comando similar al anterior. Un ejemplo de su ejecucin es el siguiente:


$ finger Login Name TTY Idle When Where user1 user name p0 26 Fri 11:46 host1.sub.domain user2 user name p1 34 Tue 10:42 host2.sub.domain

Linux Avanzado Ing. Jefferson Paguay


user4 user name p2 Mon 14:04 host3.sub.domain user3 user name p3 44 Mon 14:06 host5.sub.domain user2 user name p4 Mon 16:43 host4.sub.domain user2 user name p6 3:45 Tue 11:06 host2.sub.domain user2 user name p7 1 Wed 14:47 host2.sub.domain user3 user name p8 3:04 Thu 11:04 host5.sub.domain user3 user name p9 1:02 Fri 13:52 host5.sub.domain

Al igual que w, finger muestra los usuarios que estn en el sistema, el terminal en el que se encuentran y el tiempo que llevan conectados. Adems, muestra tambin desde dnde se han conectado estos. Tambin podemos hacer un finger que nos indique quin est conectado en un ordenador remoto, esta peticin se realiza por el puerto 79 (se explicar en el siguiente apartado como se puede hacer esto). Al igual que con la salida del comando w una vez visto el resultado de la ejecucin de finger se ha de determinar:

Que todos los usuarios son vlidos. Que los usuarios no estn conectados en el sistema una cantidad de tiempo excesiva Y a diferencia de w tambin se puede determinar que los usuarios se han conectado desde una localizacin vlida

Comando who. El comando who muestra informacin almacenada en el fichero /etc/utmp. Su salida es muy similar a la de finger y por lo tanto se han de verificar los mismos puntos expuestos para dicho comando. Un ejemplo de salida es el siguiente:
$ who user1 ttyp0 Mar 25 11:46 (host1.sub.domain) user2 ttyp1 Apr 5 10:42 (host2.sub.domain) user4 ttyp2 Apr 18 14:04 (host3.sub.domain) user3 ttyp3 Apr 11 14:06 (host5.sub.domain) user2 ttyp4 Apr 18 16:43 (host4.sub.domain) user2 ttyp6 Apr 5 11:06 (host2.sub.domain) user2 ttyp7 Apr 6 14:47 (host2.sub.domain) user3 ttyp8 Apr 14 11:04 (host5.sub.domain) user3 ttyp9 Apr 15 13:52 (host5.sub.domain)

Nota: Los comandos anteriores pueden ser modificados por los intrusos de manera que quede oculta su presencia en el sistema. Por lo que debemos estar seguros que los comandos no han sido sustituidos por troyanos con el mismo nombre. Visualizacin de los procesos activos. Un intruso puede dejar una tarea ejecutndose en el sistema sin haber estado un tiempo excesivo en el mismo, de modo que puede haber pasado desapercibido por alguien que haya querido detectar intrusos mediante los comandos citados en el apartado anterior. Incluso el intruso podra estar en este mismo instante ejecutando procesos del sistema. Para descubrir procesos que puedan realizar tareas que atenten contra el sistema se pueden emplear los siguientes comandos:

Linux Avanzado Ing. Jefferson Paguay

Comando ps. Este comando muestra los procesos que actualmente se estn ejecutando en el sistema y posee diversas opciones:

-a: muestra una lista de todos los procesos que ejecuta el sistema (no slo los propios). -u: muestra los procesos pertenecientes a un determinado usuario. -x: muestra procesos que no han sido ejecutados desde un terminal.

Un ejemplo de salida para este comando es el que se muestra a continuacin.


$ ps aux USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND user5 28206 8.1 0.4 48 280 p4 S 13:55 0:00 man inetd.conf user5 28208 3.9 0.5 56 312 p4 S 13:55 0:00 more -s /usr/man/cat5/in root 2 0.0 0.0 0 0 ? D Mar 25 0:02 pagedaemon root 87 0.0 0.0 176 0 ? IW Mar 25 0:16 sendmail: accepting conn root 1 0.0 0.0 56 0 ? IW Mar 25 0:04 /sbin/init -user3 15547 0.0 0.0 88 0 ? IW Apr 5 0:00 selection_svc user1 184 0.0 0.0 192 0 p0 IW Mar 25 0:06 -tcsh (tcsh) user2 28209 0.0 0.8 208 520 p5 R 13:55 0:00 ps -agux user2 21674 0.0 0.4 112 248 p5 S 16:24 0:00 -tcsh (tcsh) user3 16834 0.0 0.0 88 0 ? IW Apr 5 0:00 selection_svc user3 27350 0.0 0.0 112 0 p3 IW Apr 11 0:01 -csh (csh) user4 23846 0.0 0.0 80 0 pa IW 11:12 0:00 -csh (csh) user3 23801 0.0 0.0 80 0 p8 IW 11:04 0:00 -csh (csh) user2 18590 0.0 0.0 120 0 p7 IW Apr 6 0:01 -tcsh (tcsh) user2 15591 0.0 0.0 120 0 p6 IW Apr 5 0:06 -tcsh (tcsh) user2 15588 0.0 0.1 9288 72 p1 I Apr 5 7:08 emacs user2 15496 0.0 0.0 112 0 p1 IW Apr 5 0:00 -tcsh (tcsh)

Una vez ejecutado el comando y visualizada su salida, debemos fijarnos en los siguientes aspectos:

Hay que prestarle especial atencin a los procesos que se ejecutan durante un perodo largo de tiempo. Tambin suelen ser sospechosos los procesos que comienzan a ejecutarse a horas inusuales (por ejemplo, de madrugada). Como no se debe desconfiar de los procesos con nombres que pueden resultar extraos. Procesos que consumen un porcentaje elevado de CPU(esto probablemente indique la existencia de un programa sniffer en nuestro sistema). Procesos que no se ejecutan desde un terminal (en estos casos, en la columna TT de la salida se visualiza el smbolo ?).

Puede darse el caso de que un sistema contenga una versin modificada del comando ps, para que no se visualicen procesos intrusos. Tambin puede darse que un proceso intruso se est ejecutando bajo el nombre de un proceso lido; en este caso resultara difcil identificarlo como proceso sospechoso. Como ejemplo, decir que algunos

Linux Avanzado Ing. Jefferson Paguay intrusos, a menudo, ejecutan programas sniffers bajo nombres tan comunes como puede ser sendmail o inetd. Nota: La salida de este comando, al igual que la de los anteriores puede ser modificada a favor del intruso. CMO DETECTAR QUE YA HA OCURRIDO UNA INTRUSIN. Este apartado solo tratar el punto de vista de cuando un intruso ya ha invadido nuestro sistema Unix/Linux. La utilizacin de los comandos y consejos a los que se hace referencia a continuacin es aconsejable ante la sospecha de que un intruso haya estado en nuestro sistema pero que sabemos que ya lo ha abandonado. Ante dicha sospecha debemos buscar una serie de seales que nos permitan encontrar huellas de que el intruso haya dejado tras de s en el sistema. Estas seales se pueden enumerar en una serie de pasos como: 1. Examinar los archivos log. 2. Buscar archivos setuid y setgid. 3. Chequear los archivos binarios del sistema. 4. Comprobar puertos abiertos. 5. Chequear si hay sniffers. 6. Examinar archivos que estn ejecutndose como 'cron' y 'at'. 7. Chequear si hay servicios no autorizados. 8. Examinar el archivo /etc/passwd. 9. Chequear la configuracin del sistema y la red. 10. Buscar todos lados archivos escondidos o inusuales. 11. Examinar todas las mquinas en la red local. Examinar los archivos log. Lo primero que se debe de hacer siempre que se tenga la sospecha de que el sistema ha sido atacado (y lo ms importante) es examinar los archivos log a conexiones de lugares inusuales u otra actividad inusual. Por ejemplo, se debe buscar el ltimo acceso al sistema de un usuario, el conteo de procesos, todos los accesos generados por syslog y otros accesos de seguridad. Hay que tener en cuenta que esto no es infalible ya que muchos intrusos modifican los archivos log para esconder su actividad. A continuacin se har un listado de los principales logs que se deben revisar, de herramientas que muestran algunos logs e incluso de cmo un intruso podra modificarlos para borrar sus huellas:

Xferlog
Si el sistema comprometido tiene servicio FTP, este fichero contiene el loggeo de todos los procesos del FTP y su localizacin suele ser el directorio /var/adm/. Podemos examinar que tipo de herramientas ha subido el intruso y que ficheros ha bajado de nuestro servidor. Suele ser bastante interesante revisar este log ya que un intruso puede

Linux Avanzado Ing. Jefferson Paguay usar carpetas ocultas del directorio del FTP para guardar la informacin y aplicaciones que necesite para atacar el sistema.

La informacin que almacena este log suele ser la siguiente: La hora y la fecha a la que se transfiere. Nombre del host remoto que inicia la transferencia. Tamao de fichero transferido. Nombre del fichero transferido. Modo en que el archivo fue transferido (ASCII o binary). Flags especiales (C para comprimidos, U para descomprimidos, T para un archivo tar). Direccin de transferencia. El tipo de usuario que entr en el servicio (a para un usuario annimo, g para un invitado y r para un usuario local). Un ejemplo del fichero puede ser:
Sat Mar 11 20:40:14 1995 329 CU-DIALUP-0525.CIT.CORNELL.EDU 426098 /pub/simson/scans/91.Globe.Arch.ps.gz b _ o a [email protected] ftp 0* Mon Mar 13 01:32:29 1995 9 slip-2-36.ots.utexas.edu 14355 /pub/simson/clips/95.Globe.IW.txt a _ o a [email protected] ftp 0 * Mon Mar 13 23:30:42 1995 1 mac 52387 /u/beth/.newsrc a _ o r bethftp 0 * Tue Mar 14 00:04:10 1995 1 mac 52488 /u/beth/.newsrc a _ i r bethftp 0 *

Secure
Algunos sistemas Unix loggean mensajes al fichero secure, ya que utilizan algn software de seguridad para ello, como el TCP Wrapper. En todo momento una conexin establecida con uno de los servicios que se estn ejecutando bajo inetd (ahora, xinetd) y que usan TCP Wrappers, un mensaje de logeo es aadido a al fichero secure que se suele encontrar en /var/secure. Cuando examinemos el fichero log, debemos buscar anomalas tales como servicios a los que se accedi por un mtodo no habitual y desde host desconocidos. Un ejemplo del fichero sera:
# Registro de las conexiones aceptadas. Mar 14 23:03:11 mardg1 in.telnetd[25178]: connect from marad1.in2p3.fr Mar 14 23:03:21 mardg1 in.telnetd[25179]: connect from marad1.in2p3.fr # Registro de las conexiones rechazadas. Mar 12 00:41:01 mardg1 in.ftpd[6801]: refused connect from 64.224.121.65 Mar 12 08:41:55 mardg1 in.ftpd[21508]: refused connect from 137.138.33.48

Wtmp
Guarda un log cada vez que un usuario se introduce en el equipo, sale de l o la mquina resetea. Dicho fichero se ubica normalmente en /etc/wtmp, /var/log/wtmp

Linux Avanzado Ing. Jefferson Paguay /var/adm/wtmp y contiene la informacin en formato usuario con la hora de conexin, IP origen del usuario, por lo que podemos averiguar de donde provino el intruso.

ste puede ser mostrado con el comando who <localizacin del fichero>, con lo que se obtendr una salida parecida a la siguiente:
esper ttyp3 Mar 26 12:00 (afrodita.ei.uvigo.es) ttyp3 Mar 26 12:10 esper ttyp3 Mar 26 12:10 (afrodita.ei.uvigo.es) ttyp3 Mar 26 13:00 pepe ttyp2 Mar 30 17:00 (atenea.ei.uvigo.es) ttyp2 Mar 30 17:59

Tambin puede obtenerse informacin este log con el comando last que permite conocer el tiempo durante el cual el intruso ha estado en el sistema y el momento en el que lo ha abandonado. La opcin -n nos permite personalizar la salida asociada al comando, de manera que se visualizarn nicamente las ltimas n entradas en el /var/adm/wtmp. Un ejemplo de salida para este comando podra ser la siguiente:
$ last 20 user1 ftp host1.sub.domain Fri Apr15 15:09 - 15:10 (00:00) user3 ttyp9 host5.sub.domain Fri Apr 15 13:52 still logged in user6 ttyp2 host7.sub.domain Fri Apr 15 13:45 - 14:1 (00:26) user6 ttyp2 host7.sub.domain Fri Apr 15 10:34 - 10:34 (00:00) user6 ftp host7.sub.domain Fri Apr 15 10:32 - 10:33 (00:01) user4 ttyp4 host3.sub.domain Fri Apr 15 10:17 still logged in user5 ttyp2 host6.sub.domain Fri Apr 15 09:20 - 10:29 (01:09) user1 ttyh1 Thu Apr 14 20:33 - 22:00 (01:26) user4 ftp host3.sub.domain Thu Apr 14 14:21 - 14:22 (00:01) user4 ttyp2 host3.sub.domain Thu Apr 14 14:01 - 16:36 (02:35) user4 ftp host3.sub.domain Thu Apr 14 13:43 - 13:44 (00:00) user5 ttyp4 host6.sub.domain Thu Apr 14 13:38 - 14:56 (01:18) user4 ttyp2 host3.sub.domain Thu Apr 14 13:37 - 13:47 (00:10) user4 ftp host3.sub.domain Thu Apr 14 13:16 - 13:18 (00:01) user4 ttyp2 host3.sub.domain Thu Apr 14 13:12 - 13:18 (00:05) user4 ttypa host3.sub.domain Thu Apr 14 11:13 - 15:05 (03:52) user4 ttyp9 host3.sub.domain Thu Apr 14 11:12 - 13:08 (01:55) user3 ttyp8 host5.sub.domain Thu Apr 14 11:04 still logged in user1 ftp host1.sub.domain Thu Apr 14 11:01 - 11:02 (00:00)

El formato de la salida es el siguiente: La primera columna muestra el login asociado a cada usuario, seguida del terminal desde el cual dicho usuario se ha conectado. En el caso de que la conexin haya sido establecida mediante un dispositivo de red, se visualiza el nombre del sistema remoto. Finalmente se visualiza informacin del momento en que se produce la entrada y la salida (en caso de que ya haya abandonado el sistema) del usuario en el sistema. Una vez visualizada la salida tras la ejecucin se debe:

Linux Avanzado Ing. Jefferson Paguay Examinar las entradas registradas alrededor de la hora en la que se sospecha que el sistema pudo ser atacado, las que tienen un login que no resulta familiar, los logins de lugares inusuales, etc. Examinar la posibilidad de que se perdiera el fichero /var/adm/wtmp o que fuera cambiado por uno con agujeros en su salida con la finalidad de ocultar la presencia del intruso.

Utmp
Guarda un registro de los usuarios que estn utilizando el equipo mientras estn conectados a l. Este fichero se encuentra en: /var/log/utmp, /var/adm/utmp o /etc/utmp. Para mostrar la informacin de este fichero basta con teclear who y saldr algo como lo siguiente:
esper tty0c Mar 13 12:31 pepe tty03 Mar 12 12:00 jlrivas ttyp2 Mar 1 03:01

lastlog
En l se encuentra el momento exacto en que entr el usuario en el equipo por ltima vez. En algunas versiones de Unix tambin almacena el ltimo acceso fallido en la cuenta de un usuario. Se ubica en /var/log/lastlog o en /var/adm/lastlog y su contenido suele ser visualizado cada vez que se entra en el sistema:
login: jb password: jb Last login: Tue May 12 07:49:59 on tty01

Tambin se puede visualizar su contenido con el comando finger:


$ finger tim Login name: tim In real life: Tim Hack Directory: /Users/tim Shell: /bin/csh Last login Tue Jul 12 07:49:59 on tty01 No unread mail No Plan. $

Syslog
Esto no es un log sino una aplicacin que viene con el sistema operativo UNIX. Dicha aplicacin genera mensajes que son enviados a determinados ficheros donde quedan registrados. Estos mensajes son generados cuando se dan unas determinadas condiciones relativas a seguridad, informacin, etc. Los mensajes de errores tpicos estn ubicados en /var/log/messages, /usr/adm/messages, /var/adm/messages o incluso /var/syslog. Un fichero tpico, por ejemplo /var/syslog, sera:

Linux Avanzado Ing. Jefferson Paguay

Apr 20 13:04:22 host8 sendmail[15026]: NAA15025:[email protected],[email protected],[email protected], delay=00:00:02, mailer=smtp, relay=computer.sub.domain. [128.xxx.xx.xx], stat=Sent (Mail accepted) Apr 20 13:04:23 host8 sendmail[15026]: NAA15025: to=user5,user2, delay=00:00:03, mailer=local, stat=Sent Apr 20 13:04:23 host8 sendmail[15026]: NAA15025: [email protected], delay=00:00:03, mailer=smtp, relay=host1.sub.domain. [198.128.36.1], stat=Sent (Ok) Apr 20 13:06:20 host8 in.telnetd[15032]: connect from computer.sub.domain (198.xxx.xx.xx)

De esta informacin se puede obtener lo siguiente:

Informacin de direccin de E-mail que provengan de hosts sospechosos. Pues esto puede indicar que un intruso est enviando informacin a tu sistema desde otro remoto. Conexiones va Telnet, tanto de entrada como de salida, deberan ser examinadas. Un pequeo archivo puede ser sospechoso si en el log se indica que el archivo ha sido editado o borrado.

En muchos casos, los logs del syslog guardan informacin que puede ser sospechosa y realmente no los sea. Esto nos resta mucho tiempo a la hora de examinar lo logs. Adems estos logs suelen ser muy largos y examinarlos puede resultar complicado. Otro fichero podra ser /var/adm/messages:
Mar 21 10:36:04 host8 su: su root failed for user1 on /dev/ttyp2 Mar 21 10:36:08 host8 su: su aaa succeeded for user1 on /dev/ttyp2 Mar 21 16:00:59 host8 xntpd[121]: Previous time adjustment didnt complete Mar 24 15:01:44 host8 login: REPEATED LOGIN FAILURES ON console, user3 Mar 25 11:42:51 host8 shutdown: reboot by user1 Mar 25 11:42:53 host8 syslogd: going down on signal 15 Mar 25 11:48:04 host8 su: su aaa succeeded for user1 on /dev/ttyp0 Mar 28 15:47:19 host8 login: ROOT LOGIN REFUSED ON ttyp3 FROM machine.sub.domain Mar 28 16:12:12 host8 login: ROOT LOGIN console Apr 13 15:58:35 host8 su: su aaa failed for user1 on /dev/ttyp0 Apr 13 15:58:55 host8 su: su aaa succeeded for user1 on /dev/ttyp0 Apr 15 08:48:22 host8 named[2682]: starting. named 4.9.2 Wed Nov 17 13:17:49 PST 1993 Apr 15 08:48:22 host8 named[2683]: Ready to answer queries.

En este fichero se puede encontrar actividades no deseadas:


Una autorizacin de entrada en un directorio de root no autorizado. Intento de entrar como root en el sistema (mediante su) o en una cuenta privilegiada.

Linux Avanzado Ing. Jefferson Paguay Si un hacker intenta borrar las huellas que deja dicho daemon, necesita tener privilegios de root, por lo que los intrusos mirarn el fichero de configuracin /etc/syslogd.conf para saber en qu ficheros estn guardando la informacin. Cuando lo averigen, los visualizarny buscarn algn mensaje de la intromisin en el equipo, de la forma Login: ROOT LOGIN REFUSED on ttya. Cuando los encuentran, los borran y cambian la fecha del fichero con el comando touch, de forma que coincida con la fecha del ltimo mensaje con la fecha del fichero, ya que si no lo hacen, al comprobar las fechas stas no coincidiran y se deducir que alguien ha modificado el fichero. Por lo dicho en este ltimo prrafo y en algunos de los superiores, un administrador que intente detectar una intrusin no debe pensar que la revisin de los logs es definitiva para determinar si el sistema ha sido comprometido, aunque si que es aconsejable revisarlos todos. Precisamente para evitar una modificacin de los logs se pueden usar anti-zappers (ver apartado de herramientas) o seguir alguno de los siguientes consejos:

Mandar la parte ms sensible del registro a una impresora, de forma que al intruso le sera imposible borrar estas entradas. Aunque si se da cuenta del truco, puede colapsar la impresora mandndole imprimir basura. Utilizar otra mquina como registro, necesitar atacar esta otra mquina para eliminar todas sus huellas. Mandar los logs por correo electrnico. Cualquier otra posibilidad que se os ocurra. Existen varios sistemas de registro de log, mucho ms potentes y seguros que el syslog tpico de Linux, como por ejemplo:

Modular Syslog de la empresa Core. Por culpa de que los logs no son definitivos en la deteccin de intrusos se recomienda seguir los pasos que vienen a continuacin. Buscar archivos setuid y setgid. Los sistemas Unix permiten a los usuarios elevar temporalmente sus privilegios a travs de un mecanismo llamado setuid. Cuando un archivo con el atributo setuid es ejecutado por un usuario, el programa se va a ejecutar con los permisos del propietario del mismo. Por ejemplo, el programa login es un programa con el atributo setuid y propiedad del root. Cuando un usuario lo invoca se habilita el acceso al sistema con privilegios de super usuario en lugar de los del propio usuario. Los ficheros setuid aparecen en el listado de directorios con una s en lugar de una x en la posicin correspondiente al bit de ejecucin. Por ejemplo, la salida de ls -l .sh sera:

Linux Avanzado Ing. Jefferson Paguay


$ ls l .sh -r-sr-xr-x 1 root other 86012 Jun 2 01:09 .sh

Los intrusos frecuentemente dejan copias setuid de /bin/sh o /bin/time para que as les sea autorizado el acceso como root en una ocasin posterior. Para la bsqueda de este tipo de archivos, tenemos disponible el comando find (el comando find puede ser sustituido por un troyano para esconder ficheros del intruso, por lo que no es totalmente fiable). Un ejemplo de uso de find puede ser el siguiente:
find / -user root -perm -4000 -print find / -group kmem -perm -2000 print

Estos dos comandos se emplean para encontrar archivos setuid root y archivos setgid kmem en el sistema de archivos completo. Muchas veces no interesa que los comandos anteriores busquen en el directorio completo incluyendo NFS montados en el sistema de archivos. Algunos comandos find soportan la opcin "-xdev" para evitar buscar esas jerarquas. Por ejemplo:
find / -user root -perm -4000 -print xdev

Existen ms modos para buscar archivos setuid. Uno es usar el comando ncheck en cada particin de disco. Un ejemplo de uso de este comando es el siguiente:
ncheck -s /dev/rsd0g # Busca archivos setuid en la particin de disco /dev/rsd0g.

Otra manera de detectar los cambios en los ficheros del equipo sera tecleando el comando:
ls -aslgR /bin /etc /usr >ListaPrincipal

El archivo ListaPrincipal deber estar en alguna ubicacin que no pueda ser detectada por el intruso. Despus se deben ejecutar los comandos:
ls -aslgR /bin /etc /usr > ListaActual diff ListaPrincipal ListaActual

Con lo que saldr un informe. Las lneas que slo estn en la ListaPrincipal saldrn precedidas por el carcter <, mientras que las que slo estn en ListaActual irn precedidas por >. Chequear los archivos binarios del sistema En ocasiones, los intrusos modifican los programas del sistema para ocultar su intrusin. Es aconsejable revisar los archivos binarios del sistema para asegurarnos que no han sido modificados. Algunos administradores con experiencia ya han descubierto numerosos programas como por ejemplo: ps, login, su, telnet, netstat, ifconfig, ls, find,

Linux Avanzado Ing. Jefferson Paguay du, df, libc, sync, archivos binarios referentes a /etc/inetd.conf, otros programas crticos de sistema y de la red, y libreras de objetos compartidas han sido sustituidas por troyanos. Existen varias herramientas conocidas como RootKit que permite a un intruso cambiar los binarios del sistema por troyanos que son copias exactas de los originales. Los programas troyanos pueden producir el mismo checksum y timestamp estndar como la versin legtima. Debido a esto, el comando estndar sum de UNIX y los timestamps asociados con los Seguridad en Sistemas de Informacin Deteccin de intrusos programas no son suficientes para determinar si han sido reemplazados. El uso de herramientas checksum como cmp, MD5, tripwire y otras herramientas checksum criptogrficas son suficientes para detectar estos programas troyanos. Adicionalmente, se puede considerar usar una herramienta (PGP por ejemplo) para "firmar" la salida generada por MD5 o Tripwire, para futura referencia. Adems tambin se puede comparar con las copias de seguridad aunque puede que estas copias tambin hayan sido sustituidas por un troyano. Por ejemplo, los binarios encontrados en localizaciones inusuales pueden ser comparados mediante el ejecutable cmp:
$ cmp /home/jdoe/sed /usr/bin/sed

Comprobar puertos abiertos. Un intruso que ha atacado nuestro sistema puedo haber dejado puertos o conexiones abiertas de procesos. Para poder comprobar esto se puede usar el comando netstat, que principalmente nos da informacin de las conexiones abiertas. Lo que se debera hacer es comparar la salida de este comando con la de last -n para poder comprobar si existe relacin entre los usuarios que se conectaron al sistema y las conexiones abiertas. Adems el comando netstat tiene el parmetro -a que es usado para mostrar el estado de todos los sockets del equipo. Un ejemplo de la salida de este comando puede ser:
$ netstat -a Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp 0 0 host6.sub.domain.pop host1.sub.domain.1809 TIME_WAIT tcp 0 78 host6.sub.domain.telne host9.sub.domain.54641 ESTABLISHED tcp 0 0 host6.sub.domain.telne host7.sub.domain.1434 ESTABLISHED tcp 0 0 host6.sub.domain.login host3.sub.domain.1022 ESTABLISHED tcp 0 0 host6.sub.domain.login host3.sub.domain.1023 ESTABLISHED tcp 0 0 host6.sub.domain.login host5.sub.domain.1021 ESTABLISHED tcp 0 0 host6.sub.domain.telne host5.sub.domain.1957 ESTABLISHED tcp 0 0 host6.sub.domain.login host2.sub.domain.1023 ESTABLISHED tcp 0 0 *.printer *.* LISTEN tcp 0 0 *.731 *.* LISTEN tcp 0 0 *.pop *.* LISTEN tcp 0 0 *.chargen *.* LISTEN tcp 0 0 *.daytime *.* LISTEN tcp 0 0 *.discard *.* LISTEN tcp 0 0 *.echo *.* LISTEN

Linux Avanzado Ing. Jefferson Paguay


tcp 0 0 *.time *.* LISTEN tcp 0 0 *.finger *.* LISTEN udp 0 0 *.1022 *.* udp 0 0 *.1023 *.* udp 0 0 *.16517 *.* udp 0 0 *.16516 *.* udp 0 0 *.16515 *.* udp 0 0 *.772 *.* udp 0 0 *.16514 *.* udp 0 0 *.16513 *.* Active UNIX domain sockets Address Type Recv-Q Send-Q Vnode Conn Refs Nextref Addr ff65340c dgram 0 0 0 0 0 0 ff653e8c dgram 0 0 0 0 0 0 ff64978c dgram 0 0 0 0 0 0 ff648d8c dgram 0 0 ff151508 0 0 0 /dev/log ff64920c dgram 0 0 0 0 0 0 ff64808c dgram 0 0 0 0 0 0

Leyendo esta salida se puede obtener informacin de:


Si se tiene una conexin telnet que no est relacionada con la salida de los comandos who o w. Conexiones a otras redes.

En algunos casos, en los sistemas comprometidos se ha introducido una versin troyana de netstat que no ensea las conexiones hacia o desde el origen del intruso. Chequear si hay sniffers. Es importante comprobar que en los sistemas no existe el uso no autorizado de un programa de monitoreo de red, comnmente llamado como sniffer. Los intrusos pueden usar un sniffer para capturar informacin de la cuenta y password de un usuario. Los sniffers son la mayor fuente de ataques hoy en da. Muchos adaptadores ethernet estn configurados (y deben estarlo) para aceptar solo mensajes que son pedidos por ellos mismos. Un atacante o un sniffer puede establecer su adaptador de red en modo promiscuo para escuchar todas las tramas de ethernet, de esta forma TODOS los paquetes de datos que llegan a la placa son aceptados (no slo los destinados a esa PC) de modo que se puede "espiar" las "conversaciones, passwords. Normalmente cuando la interfaz pasa a modo promiscuo, queda reflejado en el fichero de logs, tal y como podemos ver aqu.
# cat /var/log/messages Nov 20 08:51:20 maquineta /kernel: fxp0: promiscuous mode enabled

Uno de los comandos que se puede usar para determinar si un sniffer fue instalado en nuestro sistema es ifconfig (existen otros como ifstatus o cpm). Dicho comando muestra la configuracin actual de nuestra interfaz de red. Una salida simple de un sistema en modo promiscuo puede ser:

Linux Avanzado Ing. Jefferson Paguay


$ ifconfig a ie0: flags=63<UP,BROADCAST,NOTRAILERS,RUNNING,PROMISC> inet 987.654.32.1 netmask ffffff00 broadcast 987.654.32.255 lo0: flags=49<UP,LOOPBACK,RUNNING> inet 127.0.0.1 netmask ff000000

El modo promiscuo se puede ver activado en como el ltimo parmetro de la descripcin de flags. Como otros comandos ifconfig tambin puede ser un troyano. Si realmente tenemos sospechas de que un sniffer ha sido instalado se debera instalar la herramienta cpm y ejecutarla. Esta herramienta testear la interfaz de red directamente y nos mostrar un informe si est en modo promiscuo. Otras posibles medidas, adems de los programas antes mencionados, para detectar el sniffer son:

Controlar y detectar los logs que genera el sniffer. Controlar las conexiones al exterior, por ejemplo, el envo sospechoso de e-mail a cuentas extraas. Utilizar la herramienta lsof (LiSt Open Files), de forma que tengamos monitorizados los programas que acceden al dispositivo de red.

Por otra parte, en caso de que no podamos acceder y consultar el estado de las interfaces de red, puesto que el sniffer no esta en nuestra mquina sino que se encuentra en alguna otra mquina de la red. Lo que tendremos que hacer, es utilizar algn defecto en la implementacin concreta del protocolo TCP/IP por algn programa/comando (tal y como hace el programa neped respecto al arp) o ingenirnoslas para averiguar de alguna forma si tenemos algn sniffer corriendo en la red. Por ejemplo, una de las posibles tcnicas, consiste en enviar paquetes a una mquina inexistente y cuya direccin no est dada de alta en el servidor de nombres. Sabremos que tenemos un sniffer en nuestra red si posteriormente detectamos cualquier intento de acceso a la mquina ficticia. Examinar archivos que estn ejecutndose como cron y at. Otro paso a seguir es examinar todos los archivos que estn siendo ejecutados por cron y at. Se sabe que los intrusos dejan puertas traseras en archivos corriendo como cron o como at. Estas tcnicas pueden permitir a un intruso volver a entrar en el sistema aunque lo hayamos echado. Adems se debe verificar que todos los archivos o programas relacionados con tareas del cron y at, y las tareas se archiven por si mismas sean nuestras y que no tienen permiso de escritura. Chequear si hay servicios no autorizados. Es interesante chequear si hay servicios no autorizados dados de alta en el sistema. Se debe inspeccionar /etc/inetd.conf por si se le ha aadido algn servicio sin nuestra autorizacin o cualquier tipo de cambio. En particular hay que buscar entradas que ejecuten un programa shell (por ejemplo /bin/sh o /bin/csh ) y chequear todos los

Linux Avanzado Ing. Jefferson Paguay programas que estn especificados en /etc/inetd.conf para verificar que son correctos y que no han sido reemplazados por troyanos. Adems se debe comprobar la legitimidad de los servicios que nosotros mismos hemos dado de alta en el archivo /etc/inetd.conf. Los intrusos pueden habilitar un servicio que pensemos que previamente lo habamos deshabilitado, o reemplazar el programa inetd con un programa troyano. Examinar el archivo /etc/passwd. Otro de los pasos a seguir en la deteccin de intrusos es chequear el archivo /etc/passwd en el sistema y buscar posibles modificaciones que se pudieran realizar en el mismo. En particular debemos buscar:

La creacin no autorizada de nuevas cuentas. Cuentas sin password. Cambios de UID (especficamente UID 0 que es el root) a cuentas existentes. Una entrada como +::.

El formato del fichero /etc/passwd:


root:x:0:0:root,,,:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/adm: gogoju1:x:5015:500: GOMEZ JUAN ANTONIO:/correo/gogoju1:/bin/bash roaldi1:x:5016:500: ALVAREZ DIEGO:/correo/roaldi1:/bin/bash peblfe1:x:5017:500: BLANCO FERNANDO:/correo/peblfe1:/bin/bash pirovi1:x:5018:500: RODRIGUEZ VICTOR MANUEL:/correo/pirovi1:/bin/bash

Actualmente las contraseas no se guardan en este fichero sino que se hace en otro llamado /etc/shadow. A continuacin se muestra un script que imprime en la salida por defecto del sistema la lista de todos los usuarios del /etc/passwd:
$ cat /etc/passwd | awk -F':' '{print $1}'

Chequear la configuracin del sistema y la red. Otro paso es examinar las entradas no autorizadas en los archivos de configuracin de nuestro sistema y de nuestra red. En particular hay que buscar entradas con signo '+' y nombres de host no locales inapropiados en /etc/hosts.equiv, /etc/hosts.lpd y en todos los archivos .rhosts (especialmente root, uucp, ftp, ...) del sistema. Estos ficheros no deberan tener atributo de escritura para todo el mundo. Ms especficamente, el fichero .rhosts es empleado para permitir el acceso remoto a un sistema y en algunas ocasiones es usado por los intruso como puertas traseras. Si el fichero fue modificado recientemente puede que se haya usado para sabotear el sistema. Inicialmente y peridicamente debemos verificar que el host remoto y el nombre de los usuarios en dichos ficheros son consistentes.

Linux Avanzado Ing. Jefferson Paguay Buscar todos lados archivos escondidos o inusuales. A menudo, la mejor manera de averiguar si nuestro sistema ha sido o no comprometido es a travs del chequeo de los archivos del mismo. Los intrusos suelen ocultar su presencia en un sistema usando archivos o directorios ocultos o inusuales (ficheros que empiezan por un '.' (punto), que no salen con un simple ls), ya que pueden ser usados para esconder herramientas que le permitan romper la seguridad del sistema o incluso pueden contener el /etc/passwd del sistema o de otros sistemas a los cuales ha entrado el intruso. Muchos intrusos suelen crear directorios ocultos utilizando nombres como '...' (puntopunto-punto), '..' (punto-punto), '..^g' (punto-punto control+G). En algunos casos un intruso ha utilizado nombres como '.x' o '.hacker' o incluso '.mail' (algunos de ellos pueden parecer normales para el usuario o el administrador). De nuevo el comando find puede ser usado para buscar archivos ocultos, por ejemplo:
find / -name ".. " -print -xdev find / -name ".*" -print -xdev | cat v

Tambin puede usarse para listar todos los ficheros que fueron modificados en los ltimos das:
$ find / -mtime -ndays ls

Este comando es tambin interesante para localizar fichero que han cambiado de inode en los ltimos n das:
$ find / -ctime -ndays -ls.

Tambin deberamos examinar los directorios ~/ftp los cuales pueden ser escritos por usuarios annimos (que sean intrusos) que almacenen y cambien ficheros. Examinar todas las mquinas en la red local. Se debe examinar cuidadosamente todos los ordenadores de nuestra red local en busca de indicios de que nuestra red ha sido comprometida. En particular, aquellos sistemas que compartan NIS+ o NFS, o aquellos sistemas listados en el /etc/hosts.equiv. Lgicamente tambin hay que revisar los sistemas informticos que los usuarios comparten mediante el acceso del .rhost. Lgicamente si nuestro ordenador ha sido atacado, probablemente los sistemas de nuestra red tambin hayan sido atacados. QU HACER CUANDO SE DETECTA UN INTRUSO? Una vez vistas diferentes tcnicas para detectar que hemos sido atacados por un intruso vamos a establecer los pasos que se deben seguir cuando hemos ya estamos seguros de que estamos siendo atacados. Si hemos pillado al intruso en el momento, tenemos varias opciones:

Linux Avanzado Ing. Jefferson Paguay

Hablar con el, usando el comando talk, aunque debemos tener en cuenta que puede contestar de forma amistosa (ayudndonos con la seguridad del sistema) o agresiva (borrando el sistema para no dejar rastro). Desconectarle del sistema, usando el comando kill, pero para evitarnos que vuelva a entrar, antes de usar kill, usaremos el comando passwd para cambiar el password de la cuenta por la cual el intruso entr, por ejemplo, podemos ejecutar los siguientes comandos:

# Averiguamos los procesos del intruso en cuestin. $ ps aux USER PID %CPU %MEN VSIZE RSIZE TT STAT TIME COMMAND ROOT 1434 20.1 1.4 968K 224K 01 R 0:00 ps aux intruso 147 1.1 1.9 1.02K 304k p3 S 0:07 ~ (csh) intruso 321 10.0 8.7 104k 104k P3 S 0:09 cat /etc/passwd intruso 339 8.0 3.7 2.05K 456k P3 S 0:09 crack # Cambiamos la password del intruso. $ passwd intruso Changing password for intruso New password: noentrasmas Retype new password: noentrasmas # Matamos los procesos pertenecientes al intruso. # kill -9 147 321 339

Debemos utilizar las utilidades del sistema para recopilar informacin del intruso, en caso de denuncia ser necesaria. Por lo que trataremos de tracearle, usando los siguientes comandos: who, w, last, lastcomm, netstat, snmpnetstat. Tambin sera interesante examinar los ficheros history del shell, como el .history, .rchist y ficheros similares. Adems ejecutando el comando finger, intentaremos sacar informacin del host de donde provino el ataque, como por ejemplo:
$ finger @intruso.es _ Comprueba los usuarios conectados en una mquina. $ finger [email protected] _ Comprueba un usuario conectado a una mquina.

Tambin podemos dirigirnos a Internic (http://www.internic.net) donde podemos pedir informacin de cualquier servidor del mundo, siempre y cuando no sea militar. All ponemos el dominio del servidor donde provino el ataque, y podremos ver con quien debemos ponernos en contacto con el servidor atacante. Si existe un telfono de contacto, lo mejor sera llamar a la persona encargada, ya que si enviamos un mail informndole que tiene un pirata puede que el intruso intercepte el mensaje y se haga pasar por el administrador. A parte de Internic tambin podemos conectar va Telnet para solicitar informacin de un servidor. Ahora que tenemos bastante informacin del atacante, lo mejor sera desconectar nuestro servidor de Internet y dedicarnos unos das a repasar cuidadosamente lo

Linux Avanzado Ing. Jefferson Paguay sucedido. Deberamos hacer una copia de seguridad, por lo que ejecutaremos la siguiente sentencia:
# dd if=/dev/sda of=/dev/sdb

Por ltimo, tan solo nos queda realizar un exhaustivo anlisis mediante los pasos descritos en el apartado anterior. QUE HERRAMIENTAS PODEMOS USAR PARA DETECTAR INTRUSOS. Ahora se explicarn algunas de las diferentes herramientas que estn disponibles a lo largo de Internet, y adems casi todas son freeware, por lo que no existe excusa alguna para no usarlas. Adems usando habitualmente estas herramientas mantendremos nuestro sistema seguro. Las herramientas que se describirn a lo largo de este apartado, van desde anti-zapper's, detectores de sniffers, detectores de troyanos, as como algunas herramientas que tambin utilizan los intrusos y que nosotros emplearemos para nuestro propio beneficio. Algunas de estas herramientas ya se han ido explicando a lo largo de este documento y debido a la gran cantidad de herramientas disponibles no se explican aqu todas las que existen. Detectores de Sniffers. A la hora de detectar un sniffer se pueden emplear numerosos programas. Un sniffer se encarga de monitorear la red y su explicacin ya fue introducida en el apartado 2.1.3.5. Los intrusos pueden usar un sniffer para capturar informacin de la cuenta y password de un usuario. Uno de los comandos que se pueden emplear para detectar si un intruso est usando un sniffer es netstat pero no es 100% fiable. Otro es el comando ifconfig (ambos comandos fueron comentados con anterioridad). Tambin podemos usar otros comandos y herramientas como las que se detallan a continuacin:

cpm
La herramienta cpm (Check Promiscuous Mode), cuya funcionalidad es similar a la de ifstatus permite testear el estado de una interfaz de red y determinar si est en modo promiscuo (como ya comentamos anteriormente, esto es un claro sntoma de deteccin de sniffers), un sntoma de una posible actividad de un sniffer en el sistema. Un salida de cpm puede ser:
$ cpm 8 network interfaces found: eth0:7: Normal eth0:6: Normal eth0:5: Normal eth0:3: Normal eth0:2: Normal eth0:1: Normal eth0: *** IN PROMISCUOUS MODE ***

Linux Avanzado Ing. Jefferson Paguay


lo: Normal Como

se puede ver en el cuadro una de las interfaces est en modo promiscuo.

ifstatus El programa ifstatus puede correrse en los sistemas UNIX para identificar interfaces de red que estn en depuracin o en modo promiscuo. Las interfaces de red en estos modos pueden ser una seal que un intruso est supervisando la red para robar passwords y otra informacin. Sera interesante que se ejecutara el ifstatus con el cron una vez por hora mas o menos. Adems, si se tiene un cron moderno que manda por correo el rendimiento de trabajos del cron a su propietario. El programa no imprime ninguna salida (con el argumento -v si muestra un salida siempre) a menos que encuentra las interfaces en "malos" modos. Empleando el argumento v y suponiendo que la interfaz no se encuentra en modo promiscuo, la salida del programa sera la siguiente:
checking interface le0... flags = 0x863 checking interface le1... flags = 0x862 checking interface le2... flags = 0x862

Ahora bien, en el caso de que la interfaz se encuentre en modo promiscuo o si dichas interfaces estn en depuracin, la salida con la opcin v sera:
checking interface le0... flags = 0x963 WARNING: COMP1.SMPL.COM INTERFACE le0 IS IN PROMISCUOUS MODE. checking interface le1... flags = 0x866 WARNING: COMP1.SMPL.COM INTERFACE le1 IS IN DEBUG MODE. checking interface le2... flags = 0x966 WARNING: COMP1.SMPL.COM INTERFACE le0 IS IN PROMISCUOUS MODE. WARNING: COMP1.SMPL.COM INTERFACE le1 IS IN DEBUG MODE.

Como se puede ver ifstatus en este ltimo caso alerta de una situacin anmala.

Antisniff
Es una de las mejores herramientas de deteccin de sniffer de forma remota, aunque quizs este un poco obsoleto, sobretodo porque no contempla la nueva generacin de sniffers. Antisniff escanea una red y detecta si sus ordenadores estn en modo promiscuo. Con antisniff se puede saber quin est escuchando el trfico de nuestra red.

Sentinel
Es otra interesante herramienta, cuyo objetivo principal es la deteccin remota de sniffers. Utiliza las libreras libcap y libnet y tenemos el cdigo fuente disponible.

Linux Avanzado Ing. Jefferson Paguay

Otros programas para detectar sniffers:


Promisc.c: Es un programa escrito en lenguaje C. NePED

Debido a que muchos sniffers logean las conexiones de la misma forma, la cual es la siguiente:
TCP/IP LOG -- TM: Tue Nov 15 15:12:29 PATH: not_at_risk.domain.com(1567) => at_risk.domain.com(telnet)

podemos fcilmente podemos escribir un pequeo shell script que busque ficheros de sniffers:
$ grep PATH: $sniffer_log_file | awk '{print $4}' | \ awk -F\( '{print $1}'| sort u

Lgicamente debemos ajustar este script a nuestras necesidades. Detectores de troyanos. Un troyano es una aplicacin que consta de dos mdulos, uno servidor y otro cliente, el atacante tiene la parte cliente y la vctima el mdulo servidor, de esta manera el intruso ejecuta una orden sobre su modulo, y este hace un "eco" al otro modulo (el de la vctima), y lo ejecuta en local, de esa manera se puede ejecutar cualquier comando (que te permita la aplicacin) si necesidad de tener permisos en la mquina vctima. Se sabe de casos en los que los intrusos han reemplazado los siguientes programas por un caballo de troya para facilitar su ataque: /usr/etc/in.telnetd, /bin/login, ps, netstat, ifconfig, su,... y as una larga lista de ellos. Ya que los intrusos pueden instalar variaciones de diferente comandos de Unix se pueden utilizar algunos de los siguientes programas para detectarlos: Podemos usar el comando sum pero tampoco es 100% fiable. Tambin podemos usar el comando cmp, pero lo mismo que el comando anterior. Otra opcin es verificar los programas usando informacin de chequeo criptogrfico:

Tripwire
Tripwire es una herramienta que verifica la integridad de un conjunto de archivos y directorios seleccionados por el usuario. Los archivos y directorios actuales se comparan con la informacin almacenada en una base de datos previamente generada. Cualquier diferencia es sealada por medio de una bandera y se registra, incluyendo entradas agregadas o suprimidas. Cuando se ejecuta contra los archivos del sistema sobre una base regular, Tripwire nos permite descubrir los cambios en los archivos del

Linux Avanzado Ing. Jefferson Paguay sistema crticos y toma inmediatamente medidas apropiadas de los daos. Adems la herramienta detecta e informa al administrador del sistema de los posibles cambios, adiciones o borrados de dichos ficheros. Una vez inicializada su base de datos, puede ejecutarse la herramienta y en consecuencia generar los siguientes informes segn los eventos que ocurrieran en el sistema: a) Informe que se muestra cuando no han ocurrido cambios: La salida que se muestra a continuacin indica que no han ocurrido cambios en los archivos y directorios. En la siguiente salida se habilita el modo verbose v para mostrar el escaneo realizado por tripwire de cada directorio y fichero. Adems, se configur para que solo se escanearan los ficheros de /etc.
# ./tripwire -v -c ./tw.config -d ./databases/tw.db_<the local system's host name> ### Phase 1: Reading configuration file ### Phase 2: Generating file list ./tripwire: /etc/dfs/sharetab: No such file or directory ./tripwire: /etc/hosts.equiv: No such file or directory ./tripwire: /etc/named.boot: No such file or directory ./tripwire: /etc/rmtab: No such file or directory ### Phase 3: Creating file information database scanning: /etc scanning: /etc/TIMEZONE scanning: /etc/aliases scanning: /etc/autopush scanning: /etc/clri (... resto de la salida borrada ...) scanning: /etc/printers.conf scanning: /etc/shells scanning: /etc/one-time.sh scanning: /etc/mkgroup scanning: /etc/mkpasswd scanning: /etc/mkshadow ### Phase 4: Searching for inconsistencies ### ### Total files scanned: 461 ### Files added: 0 ### Files deleted: 4 ### Files changed: 454 ### ### After applying rules: ### Changes discarded: 454 ### Changes remaining: 0

En la fase 4 Tripwire contabiliza sus bsquedas. La salida muestra 454 archivos que han cambiado, pero segn las reglas que han sido definidas, ninguno de los cambios ha sido considerado como inesperado. Si realmente las modificaciones sobre ficheros fueran inesperadas, el informe sera como el del siguiene punto. b) Informe que se muestra cuando han ocurrido cambios: A continuacin se muestra la salida de Tripwire despus de que se haya aadido un nuevo usuario en el sistema. En la fase 4 se puede ver como tripwire muestra 5

Linux Avanzado Ing. Jefferson Paguay cambios inesperados. En la siguiente salida aparece una nueva fase 5, esta fase nos aporta informacin sobre las modificaciones detectadas.

# ./tripwire -c ./tw.config -d ./databases/tw.db_<the local system's host name> ### Phase 1: Reading configuration file ### Phase 2: Generating file list ./tripwire: /etc/dfs/sharetab: No such file or directory ./tripwire: /etc/hosts.equiv: No such file or directory ./tripwire: /etc/named.boot: No such file or directory ./tripwire: /etc/rmtab: No such file or directory ### Phase 3: Creating file information database ### Phase 4: Searching for inconsistencies ### ### Total files scanned: 463 ### Files added: 2 ### Files deleted: 4 ### Files changed: 456 ### ### After applying rules: ### Changes discarded: 455 ### Changes remaining: 5 ### added: -rw------- root 0 Apr 19 16:21:14 1997 /etc/.pwd.lock added: -rw------- root 0 Apr 19 16:21:13 1997 /etc/.group.lock changed: drwxr-xr-x root 3584 Apr 19 16:21:14 1997 /etc changed: -r--r--r-- root 6982 Apr 19 16:20:58 1997 /etc/passwd changed: -r-------- root 1571 Apr 19 16:20:59 1997 /etc/shadow ### Phase 5: Generating observed/expected pairs for changed files ### ### Attr Observed (what it is) Expected (what it should be) ### ============================================================ /etc st_mtime: Sat Apr 19 16:21:14 1997 Sat Apr 19 14:00:09 1997 st_ctime: Sat Apr 19 16:21:14 1997 Sat Apr 19 14:00:09 1997 /etc/passwd st_ino: 74339 74305 st_size: 6982 6932 st_mtime: Sat Apr 19 16:20:58 1997 Sat Apr 19 14:00:08 1997 st_ctime: Sat Apr 19 16:20:58 1997 Sat Apr 19 14:00:08 1997 md5 (sig1): 1k0No.UNC9mCJglGMtPk4O 0D5zziXYpwvXxOzy.DrYCx snefru (sig2): 0ENvBIiHddw3tJMRQUMFHy 3ilRZc:dY2NFYLu3CAEXVI /etc/shadow st_ino: 74305 74338

Las dos primeras lneas de la fase 4 muestran el nmero de ficheros creados cuando la herramienta de administracin aade el nuevo usuario. Las tres lneas siguientes muestran los ficheros y directorios que ya existan previamente y que han sido cambiados como resultado de la adicin. Ya en la fase 5 se visualizan las siguientes modificaciones:

Las marcas de tiempo de la creacin de un inode en /etc Los atributos del fichero /etc/passwd El nmero de inode del fichero /etc/shadow

Es evidente que el contenido de /etc/passwd ha sido modificado ya que como se puede ver en el informe, su tamao y el checksum criptogrfico (md5) han cambiado.

Linux Avanzado Ing. Jefferson Paguay c) Informe que se muestra cuando se pierden ficheros:

En los dos ejemplos anteriores se muestra, en la fase 2, que se perdieron 4 ficheros. Esto ocurre porque los ficheros estaban especificados en el archivo de configuracin de Tripwire y por el contrario no se encuentran en la base de datos que ha generado antes de realizar el informe. Si los ficheros fueron borrados, se especifica en la fase 4 junto con la cantidad de ficheros:
### Files deleted: 4

Similarmente, tambin se muestra un lnea en la que se indica cual es el fichero que se borr:
deleted: -rw-r----- 0 36 Jul 3 10:48:26 1997 /etc/testdir/testfile

d) Informe que se muestra los nuevos ficheros y directorios: Si se aaden ficheros o directorios se especifica, junto con el nmero de ellos, en una lnea de la fase 4 como la siguiente:
### Files added: 2

Como con los ficheros perdidos o cambiados, sus nombres y atributos son tambin listados.
added: -rw------- root 0 Apr 19 16:21:14 1997 /etc/.pwd.lock added: -rw------- root 0 Apr 19 16:21:13 1997 /etc/.group.lock

MD5 MD5 es el programa de checksum criptogrfico, ms popular y ms aconsejable, que toma como entrada un mensaje de longitud arbitraria y produce como salida una "huella digital" de 128 bits o un "mensaje asimilado" de la entrada.

Chkrootkit
chkrootkit es otra herramienta que nos permite verificar que tenemos la versin original de nuestros ficheros y no la versin troyanizada. En su ltima versin disponible detecta troyanos en todos estos ficheros: aliens, asp, bindshell, lkm, rexedcs, sniffer, wted, z2, amd, basename, biff, chfn, chsh, cron, date, du, dirname, echo, egrep, env, find, fingerd, gpm, grep, hdparm, su, ifconfig, inetd, inetdconf, identd, killall, login, ls, mail, mingetty, netstat, named, passwd, pidof, pop2, pop3, ps, pstree, rpcinfo, rlogind, rshd, slogin, sendmail, sshd, syslogd, tar, tcpd, top, telnetd, timed, traceroute, write. Siendo capaz de detectar los siguientes RootKits: Solaris rootkit, FreeBSD rootkit, lrk3, lrk4, lrk5, lrk6, t0rn (and t0rn v8), some lrk variants, Ambient's Rootkit for Linux (ARK), Ramen Worm, rh[67]- shaper, RSHA, Romanian rootkit, RK17, Lion Worm, Adore Worm, LPD Worm, kenny-rk, Adore LKM, ShitC Worm, Omega Worm, Wormkit Worm, dsc-rootkit.

Linux Avanzado Ing. Jefferson Paguay Una vez compilados los programas (chkwtmp, chklastlog, chkproc, chkwtmp, ifpromisc) que utiliza el chkrootkit para realizar parte de sus trabajos (chkrootkit en s mismo es un shell script), la utilizacin del mismo es como se puede observar a continuacin:
# ./chkrootkit ROOTDIR is `/' Checking `amd'... not found Checking `basename'... not infected Checking `biff'... not infected Checking `chfn'... not infected Checking `chsh'... not infected Checking `cron'... not infected Checking `date'... not infected Checking `du'... not infected Checking `dirname'... not infected Checking `echo'... not infected Checking `egrep'... not infected Checking `env'... not infected Checking `find'... not infected Checking `fingerd'... not found Checking `gpm'... not infected Checking `grep'... not infected Checking `hdparm'... not infected Checking `su'... not infected Checking `ifconfig'... not infected Checking `inetd'...

Solo puede darse un problema y es que al ser un shell script, se basa en las siguientes herramientas: awk, cut, echo, egrep, find, head, id, ls, netstat, ps, strings, sed, uname y estas pueden contener algn troyano. La solucin nos la da el propio programa, ya que por medio de un simple parmetro, le indicaremos donde debe de buscar y ejecutar esos programas que necesita: Si los tenemos un CD-ROM:
./chkrootkit -p /cdrom/bin

En caso de tener los binarios originales de la distribucin en un diskette:


./chkrootkit -p /floppy

Tambin podemos verificar algn determinado fichero indicndolo directamente:


# ./chkrootkit ps login sendmail ROOTDIR is /' Checking 's'... not infected Checking 'login'... not infected Checking 'sendmail'... not infected

Chkrootkit tambin permite verificar la alteracin de los logs mediante los programas chkwtmp y chklastlog:
# ./chkwtmp

Linux Avanzado Ing. Jefferson Paguay


# ./chklastlog

Detectores de zapper's. Un atacante, cuando termine su intrusin, querr borrar sus huellas e intentar acceder a los logs mediante unas utilidades para eliminar la parte correspondiente a su ataque. Estas utilidades se llaman zappers. Para descubrir el uso de los zappers existen unos programas (antizappers) que los detectan. Los ms nombrados en la bibliografa son:

Antizap.c Antizap2.c

Aunque estos dos programas se mencionan numerosas veces, en la bibliografa, es complicado encontrarlos, e incluso en diversos documentos se llega a indicar tal circunstancia. Pero tambin podemos tomar medidas para complicar a los intrusos la modificacin de los logs. Por ejemplo, en el sistema operativo Linux y concretamente en su sistema de archivos, ext2 (Second Extended File System) y ext3, existen unos bits especiales (a parte del setuid, setguid, x [ejecucin], w [escritura] y r [lectura]) e inexistentes en otros sistemas Unix para proteger an ms los ficheros. Uno de ellos es el bit a, este bit indica que slo se podr acceder al fichero en modo escritura para aadir datos, nunca para borrar. Este bit es extremadamente til para los ficheros de log, ya que cuando un atacante quiera borrar sus huellas de los logs no le estar permitido. Obviamente, si el usuario ha conseguido privilegios de root, podr resetear este bit, pero no olvidemos que la mayora de los usuarios que acceden a los sistemas de forma fortuita, son gente sin experiencia, sin conocimientos de Unix y posiblemente, utilizando alguna utilidad que ni siquiera sabe cmo funciona, de modo que con este bit activado, tenemos una posibilidad ms de que se queden registrados su actos. Herramientas de Anlisis. Continuando con la deteccin de intrusos tambin existen una serie de herramientas de anlisis que pueden resultar bastante tiles. Algunas de las ms importantes se nombran a continuacin:

Satan
Posiblemente la herramienta mas conocida. SATAN es una herramienta de prueba y reporte que colecciona una gran variedad de informacin sobre los hosts conectados a una red de computadoras. SATAN registra informacin sobre unos hosts y redes especficas mediante la recoleccin de informacin de los servicios de red (por ejemplo: finger, NFS, NIS, ftp, ). Puede realizar informes con los resultados de su propia investigacin sobre los posibles problemas de seguridad.

Linux Avanzado Ing. Jefferson Paguay SATAN tambin puede ser usado para detectar vulnerabilidades en host. Esto puede ser usado tanto en la deteccin de intrusos como para realizar ataques. SATAN est disponible de ftp://ftp.win.tue.nl/pub/security/satan_doc.tar.Z muchos sitios, incluyendo

Lsof (List Open Files)


Es un programa que lista todos los ficheros abiertos, incluidos los sockets abiertos. Con el uso de lsof, podemos detectar la presencia de un sniffer. No encuadramos esta herramienta dentro de los detectores de sniffers porque en realidad ese no es su cometido, aunque se pueda usar para intentar localizarlos. Un sniffer, que se encuentra instalado en nuestro sistema, guarda en un archivo log la informacin que va recolectando y adems puede tener conexiones de red abiertas. Con lsof podemos visualizar todos los ficheros abiertos, incluyendo los sockets, lo cual nos ser muy til para detectar a dicho sniffer. El comando muestra por la salida por defecto la siguiente informacin:
# lsof COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Init 1 root cwd DIR 3,1 1024 2 / Init 1 root rtd DIR 3,1 1024 2 e Kerneld 20 root 1u CHR 4,0 0t0 10174 /dev/console Kerneld 20 root 2u CHR 4,0 0t0 10174 /dev/console

Podemos obtener esta herramienta de la siguiente URL: ftp://vic.cc.purdue.edu/pub/tools/unix/lsof/

Otras herramientas:

TCP_Wrapper: Es un conjunto de utilidades para controlar nuestro servidor. Netcat 1.10: Para saber por donde nos puede entrar un intruso, ya que este programa es capaz de crear cualquier tipo de conexin. COPS: Otro conjunto de herramientas ftp://info.cert.org/pub/tools/cops. que se puede encontrar en

Roses Software Check Tool V.1.2.2: Interesante herramienta de anlisis para servidores Linux. Stalker Audit-Trail Tool: Herramienta para auditar los log's. IDES/NIDES (Intrusion-Detection Expert System/Next-Generation IDES): Una herramienta de deteccin de intrusos en tiempo real. Saint (Security Analisys INtegration Tool): Herramienta en espaol para auditar. NetSuite Professional Audit: Herramienta profesional para auditar.

Linux Avanzado Ing. Jefferson Paguay

Tcplist: Lista todos los puertos abiertos que tenemos, adems de diversa informacin ms. Se puede conseguir en ftp://ftp.cdf.toronto.edu/pub/tcplist.

Crackeadores de passwords.

Crack V5
Posiblemente el crakeador mas conocido. Crack es un programa libremente disponible diseado para identificacin. En UNIX, el algoritmo DES encripta passwords que se pueden encontrar en diccionarios extensamente disponibles. Las tcnicas de encriptacin estn descritas en la documentacin del Crack. Muchos administradores del sistema ejecutan el Crack como un sistema regular de procedimiento de administracin y notifica a dueos de cuentas a quienes les han "crackeado" passwords. El Crack est disponible en: ftp://coast.cs.purdue.edu/pub/tools/unix/crack/.

John The Ripper


Es un crackeador de passwords que un administrador puede usar para ver si una password de un usuario es fcilmente crackeable. Seguridad en Sistemas de Informacin Deteccin de intrusos

También podría gustarte