Descargar

Detección de intrusos en Unix (página 2)


Partes: 1, 2

  1. El comando "finger"

Otro comando que permite descubrir intrusos conectados actualmente a su sistema, es "finger". Un ejemplo de su salida es el siguiente:

Login Name TTY Idle When Where

rmt ??? console 8 Mon 13:29 :0

ramon ??? pts/21 16 Wed 11:26 caballero

ramon ??? pts/1 1 Thu 09:22 suntiago

ramon ??? pts/22 Thu 09:23 suntiago

El comando "finger" muestra quién está conectado al sistema, qué terminales está utilizando, cuándo se conectaron y desde dónde están operando.

Debe comprobar que:

  • Todos los usuarios son válidos.
  • Los usuarios llevan conectados un intervalo de tiempo normal.
  • El sitio desde dónde se conecta el usuario es válido.

El problema que presenta el comando "finger" es que puede ser fácilmente modificado para ocultar la existencia de un intruso. Este comando, además, no sólo muestra información útil para el administrador, sino también para el posible intruso. Por ejemplo, éste podría utilizar finger para encontrar el momento oportuno para atacar el sistema, utilizando "finger" para determinar la actividad de usuarios como root, manager, bin, etc.

  1. El comando "who"

Con el comando "who" se obtiene información sobre los usuarios conectados al sistema en el momento de su ejecución. Ésta información es mantenida en el fichero "/etc/utmp". Un ejemplo de su salida es presentado continuación:

rmt console Jun 28 13:29 (:0)

ramon pts/21 Aug 18 11:26 (caballero)

rmt pts/5 Jun 28 13:30 (:0.0)

ramon pts/1 Aug 19 09:22 (suntiago)

ramon pts/22 Aug 19 09:23 (suntiago)

El comando devuelve una lista con los usuarios conectados actualmente al sistema, qué terminal están utilizando, cuándo se conectaron, y desde donde están operando.

Deberá verificar que:

  • Los usuarios son válidos.
  • Los usuarios llevan conectados un intervalo de tiempo normal.
  • El sitio desde donde se conecta el usuario es válido.

De nuevo éste comando es vulnerable. Su salida puede ser fácilmente modificada para ocultar la existencia de un intruso, puesto que el comando obtiene la información del fichero "/etc/utmp".

Determinar los procesos activos

Incluso si un intruso ya no está conectado a una máquina Unix ajena, puede haber dejado un proceso en ejecución para continuar con sus tareas de usurpación de información o de ataque al sistema. Esta sección enseña cómo utilizar estos comandos para comprobar cuáles son los procesos activos en el sistema:

  • El comando "ps".
  • El comando "crash".
  1. El comando "ps"

El comando "ps –ef" devuelve una lista con los procesos que están siendo ejecutados en el sistema. Las opciones seleccionadas son las siguientes:

  • El parámetro "e" muestra todos los procesos ejecutándose en el sistema, no sólo los pertenecientes a usted.
  • El parámetro "f" muestra información detallada sobre los procesos.

El comando "ps -ef" es una manera segura de ver qué programas están en ejecución en el sistema. Un fragmento de su salida es la presentada a continuación:

Lo siguiente podría indicar una actividad indeseada:

  • Procesos que llevan ejecutándose mucho tiempo.
  • Tiempos de comienzo inusuales.
  • Nombres inusuales.
  • Procesos que están consumiendo un alto porcentaje de CPU (podría tratarse de sniffers).
  • Procesos sin un terminal de control que están ejecutando programas inusuales.
  • Elevado número de procesos en ejecución sin causa justificada.

En algunos casos, se ha encontrado en los sistemas atacados, versiones alteradas de "ps" que no muestran los procesos del intruso. Además, si está ejecutándose un proceso inválido pero con un nombre válido, es difícil distinguir los procesos sospechosos. Por ejemplo, los intrusos a menudo ejecutan procesos sniffers con nombres como "sendmail" o "inetd".

  1. El comando "crash"

El comando "crash" puede ser utilizado, sólo por el usuario root, para listar todos los procesos ejecutándose en el sistema. Debería utilizarlo para confirmar la validez del resultado del comando "ps". Es decir, para encontrar un proceso a su salida que no aparece en la salida proporcionada por "ps" (buscando la correspondencia entre los pids). Una vez que ejecute "crash", recibirá el prompt ">". Teclee "proc" y, una vez ejecutado, teclee "quit". La salida del comando "crash" se muestra a continuación:

Lo siguiente podría indicar una actividad indeseada:

  • Procesos que no aparecen en la lista devuelta por "ps" (utilice el pid para identificarlos).
  • Un valor muy alto en la columna donde se muestra el consumo de CPU por el proceso.
  • Comandos inusuales en la columna donde se muestra el nombre del proceso en ejecución.

No obstante, como puede ocurrir con cualquier comando, "crash" puede haber sido sustituido por otro comando semejante pero alterado.

Encontrando las huellas dejadas por un intruso

Si sospecha que un intruso estuvo conectado a su sistema, pero ya no lo está, deberá utilizar los comandos y ficheros descritos en esta sección para encontrar las huellas que pudiera haber dejado. En esta sección aprenderá a cómo utilizar estos comandos y ficheros:

  • El comando "last".
  • El comando "lastcomm".
  • El fichero "/var/log/syslog".
  • El fichero "/var/adm/messages".
  • El comando "netstat".
  • Buscar ficheros olvidados por el intruso.
  • Examinar otros ficheros importantes del sistema.
  1. El comando "last"

El comando "last" muestra información sobre las conexiones y desconexiones al sistema, a través de los datos almacenados en el fichero "/var/adm/wtmp". Si puede descubrir el nombre de usuario que el intruso utilizó para conectarse, este comando puede mostrarle cuánto tiempo estuvo en el sistema y desde dónde se conectó.

La opción "-n" es utilizada para ver las últimas n entradas del fichero "/var/adm/wtmp". Seguidamente se muestra un ejemplo de su salida:

La primera columna es el nombre de usuario, seguido por el terminal desde el que está conectado. Si la conexión se realizó a través de un dispositivo de red, el nombre del sistema remoto aparecerá en la siguiente columna. En el caso de que la conexión se realizase a través de un módem esta columna estaría en blanco. Finalmente nos encontramos con el instante en que el usuario se conectó y se desconectó y el tiempo total que estuvo en el sistema.

Deberá fijarse en lo siguiente:

  • Examine las entradas al sistema cercanas al día y hora en que se sospecha que se efectuó el ataque para aquellos casos que no parezcan normales, incluyendo conexiones a cuentas que han estado previamente inactivas, conexiones desde ubicaciones inesperadas, conexiones a horas inusuales, y conexiones por cortos intervalos de tiempo.
  • La inexistencia del fichero "/var/adm/wtmp" o su existencia con huecos en su salida (esto podría indicar que un intruso trató de ocultar su existencia). Como regla general los administradores nunca borran este fichero. Por consiguiente, puede ser bastante grande y contener la actividad del sistema desde que fue arrancado por primera vez.

El problema es que un intruso puede ocultar sus huellas en el sistema borrando o modificando el fichero "/var/adm/wtmp".

  1. El comando "lastcomm" muestra los últimos comandos ejecutados por cualquier persona en el sistema. Este comando está disponible sólo si tiene procesos de contabilidad en ejecución, sobre lo cual puede informarse en el manual "man" accediendo a la entrada "acct".

    La orden "lastcomm" es excelente para percatarse de lo que hizo el usuario, ya que lista todos los comandos ejecutados por todos los usuarios. Por ejemplo, una salida con ejecuciones repetidas del programa "tftp", podría indicar el intento de robar ficheros de claves.

    Este comando produce un fichero que tiende a crecer muy deprisa, por lo que debería renombrarlo cada cierto tiempo, manejando así ficheros de un tamaño menor.

    La debilidad de "lastcomm" es que sólo guarda información de comandos que ejecutan un programa, pero no las acciones que fueron tomadas después de que el programa comenzase (por ejemplo, podría mostrar que el editor fue utilizado, pero no qué ficheros fueron abiertos con él).

    Muchas veces, los ataques no son descubiertos hasta pasados unos días de ocurrir los daños o descubrir la presencia de intrusos. En estos casos, el problema está en que el intruso puede haber borrado las huellas dejadas en el sistema, ya que la salida de "lastcomm" se basa en los datos almacenados en el fichero /var/adm/pacct, el cual puede ser fácilmente borrado y modificado si pueden ser obtenidos los privilegios adecuados.

    Determinados shells, como por ejemplo "tcsh", mantienen un registro de los comandos ejecutados recientemente por cada usuario. Esta información es generalmente almacenada en un fichero en el directorio casa del usuario denominado ".history". Mediante su análisis se podrían reconstruir la actividad de dicho usuario y verificar la información obtenida mediante "lastcomm".

  2. El comando "lastcomm"
  3. El fichero "/var/log/syslog"

El fichero "/var/log/syslog" contiene mensajes relativos a varios tipos de conexiones al sistema. El contenido de este fichero está definido por el fichero "/etc/syslog.conf".

La mayoría de los mensajes son del programa "sendmail", y muestran el estado de los mensajes enviados y recibidos en el sistema. Este fichero también contiene mensajes de conexión de in.telnetd y otros mensajes previamente definidos.

Cuando observe el contenido de "/var/log/syslog", debe fijarse en las observaciones enumeradas seguidamente:

  • Puesto que este fichero guarda información sobre datos entrantes y salientes al sistema, especialmente la información correspondiente a "sendmail", una de las cosas a buscar son los emails enviados a servidores sospechosos. Esto podría indicar que un intruso ha traspasado información desde su sistema a otro sistema remoto.
  • Examine las conexiones vía "telnet", tanto entrantes como salientes.
  • Un fichero pequeño puede ser sospechoso, pues podría ser un indicio de que ha sido editado o borrado. Un hueco en blanco en el fichero (un largo intervalo de tiempo durante el cual no han aparecido mensajes) puede indicar que un intruso borró los mensajes relacionados con él durante el intervalo de tiempo que estuvo conectado.
  • En general, busque cosas que parezcan poco normales.

En muchos casos, el fichero "/var/log/syslog" tiene derechos de escritura para todos los usuarios y debe permanecer así por razones operativas. Por lo tanto, sus datos pueden ser alterados fácilmente.

Este fichero suele ser muy grande, por lo que investigar todas las conexiones, sobre todo los mensajes originados por "sendmail", puede resultar tedioso. Esto es debido a que, para cada mensaje de correo electrónico, al menos una línea es escrita en el archivo "/var/log/syslog". Además, los usuarios acostumbran a borrar los mensajes y olvidan quiénes se los enviaron, cuando fueron recibidos, y sobre que trataban.

  1. El fichero "/var/adm/messages"

El fichero "/var/adm/messages" contiene, por lo general, una lista de todos los mensajes enviados a la consola. Su contenido está definido en el fichero "/etc/syslog.conf".

Lo siguiente podría indicar una actividad indeseada:

  • Un usuario no autorizado conectándose al directorio root.
  • Intentos de hacer un "su" al root o a una cuenta con privilegios.
  • Intentos fallidos de conexión podrían proceder de un usuario válido cometiendo errores o de un intruso.

Una vez que un intruso obtiene el acceso como root, este fichero puede ser modificado o borrado fácilmente. Además, por medio del fichero "syslog.conf", se pueden suprimir las conexiones de este fichero.

  1. El comando "netstat"

El comando "netstat" muestra las conexiones abiertas en el sistema. Es interesante comparar la salida de este comando con la correspondiente a "last –n".

Utilizando la opción "-a" se muestra el estado de todos los sockets abiertos. Un ejemplo de su uso es el mostrado a continuación:

Lo siguiente podría indicar una actividad indeseada:

  • Tiene una conexión vía "telnet" que no se corresponde con la salida de los comandos "who" y "w".
  • Otras conexiones de red.

No obstante, es posible que el intruso haya suplantado la versión original de "netstat" por otras que no muestran las conexiones a y desde el sistema donde se desarrolla el ataque.

  1. Buscar ficheros olvidados por el intruso

Normalmente, el mejor indicador de si el sistema ha ido atacado es examinar los ficheros del sistema, viendo si han sido modificados o creados otros nuevos. No obstante, el intruso podría haber alterado los programas del sistema para ocultar su ataque. Por ejemplo, muchos administradores han descubierto que comandos como "ps" han sufrido cambios para ignorar los procesos lanzados por el intruso.

El comando "find", ejecutado preferentemente como root, lista todos los ficheros que han sido modificados en los n días anteriores:

find / -mtime –ndays -ls

El intruso podría cambiar el instante de modificación del fichero, para ocultar los cambios hechos. Muchas de estas modificaciones podrían aún ser detectadas, comparándolas con el instante en que fue cambiado el nodo-i del fichero. El siguiente comando lista todos los ficheros cuyo instante de modificación del nodo-i ha variado en los últimos n días:

find / -ctime –ndays –ls

Cuando examine los resultados generados por estos comandos, preste atención a los ficheros y directorios ocultos (ficheros cuyo nombre empieza por "." y que no son mostrados con el comando "ls", a menos que se utilice la opción "-a". También debe prestar atención a ficheros con extensiones poco comunes o software para la captura de claves de acceso.

Los sistemas Unix permiten elevar sus privilegios a los usuarios mediante un mecanismo conocido por setuid. Cuando un fichero con el atributo setuid es ejecutado por un usuario, el programa da los permisos de acceso correspondientes al propietario de dicho fichero. Los ficheros setuid aparecen en los listados de los directorios con una "s", en lugar de la "x", en la posición correspondiente al bit de ejecución. No obstante, tenga en cuenta que los sistemas Unix contienen varios programas setuid necesarios para la operación normal del sistema. Por ejemplo, el programa "login" es típicamente un fichero setuid perteneciente al usuario root.

Los intrusos a menudo crean ficheros setuid que los permiten obtener rápidamente el acceso como root durante posteriores visitas al sistema. Generalmente, el fichero se guarda en un directorio oculto, o se trata de un fichero oculto. Los ficheros setuid potencialmente sospechosos son:

  • Ficheros que han sido modificados recientemente.
  • Ficheros que no le son familiares.
  • Ficheros almacenados en directorios de usuario o temporales.

Para listar los ficheros setuid en su sistema, deberá utilizar el siguiente comando:

find / -user root –perm – 4000 –print

  1. Examinar otros ficheros importantes del sistema

Para examinar ficheros puede utilizar la orden "cat" seguida por el nombre del fichero en cuestión. También es interesante el comando "cmp", gracias al cual podrá comparar dos ficheros. Éste último es interesante para determinar, por ejemplo, si existen copias de ejecutables del sistema en directorios de usuario, lo cual puede ser un indicio de ataque al sistema.

El primer fichero a considerar es "/etc/passwd". Deberá buscar en él, lo siguiente:

  • Nuevas cuentas de usuario.
  • Identificadores de usuario (uid) cambiados.
  • Usuarios sin passwords.
  • Una entrada "+::".

Otro fichero importante es "~ /.forward", que sirve para reenviar mensajes de correo electrónico. Deberá fijarse en entradas sospechosas.

El fichero "~ /.rhosts" puede ser utilizado para permitir el acceso remoto al sistema y es usado algunas veces por intrusos, para crear fácilmente una puerta de acceso oculta al sistema. Compruebe periódicamente que los servidores remotos y los nombres de usuarios a los que deja conectarse son correctos. Fíjese detenidamente en la entrada "+", pues permitiría a todos los usuarios acceder al sistema local desde cualquier servidor.

Es recomendable sacar un listado del fichero /etc/inetd.conf en condiciones totalmente seguras y compararla en situaciones posteriores, cuando se hayan añadido nuevos servicios.

Busque en "/etc/aliases", alias inusuales o aquellos que redireccionan el correo electrónico a lugares indeseados. Fíjese también en comandos sospechosos.

Compruebe también que no aparecen nuevas entradas en el fichero de "cron", especialmente las relativas al root. Mire los comandos que son lanzados periódicamente por el sistema y por quién ha sido solicitada su ejecución.

Detectar un sniffer

El comando "ifconfig" muestra la configuración de la interfaz de red del sistema. La mayoría de los adaptadores Ethernet deberían estar configurados para aceptar sólo los mensajes destinados a ellos. La persona que ataca su sistema, podría establecer el adaptador de un ordenador a modo promiscuo, para escuchar (y grabar) todo lo que circula por ese segmento de red.

Un ejemplo de la salida proporcionada por este comando es la siguiente:

lo0: flags=849<UP,LOOPBACK,RUNNING,MULTICAST> mtu 8232

inet 127.0.0.1 netmask ff000000

hme0: flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 1500

inet 1.0.20.222 netmask ff000000 broadcast 1.255.255.255

ether 8:0:20:9e:9b:14

En conjunción con la aparición del en el campo flags del argumento PROMISC, lo siguiente podría indicar una actividad indeseada:

  • Nuevos ficheros creados.
  • Un proceso que utiliza un porcentaje de CPU muy alto.

El problema es que como cualquier comando, "ifconfig" puede ser suplantado. Una forma fácil de asegurar su correcto funcionamiento, y el de todos los comandos estudiados, es hacer una copia de seguridad del ejecutable y renombrarlo en una ubicación conocida sólo por el administrador del sistema, siendo utilizada esta versión en caso de sospecha. Sería conveniente comprimir todos los comandos y ficheros juntos, para evitar que la copia de seguridad de uno de ellos sea detectada por el intruso mediante el comando "cmp".

 

Datos autor

Ramón Jesús Millán Tejedor

Ingeniero de Telecomunicación y Master en Tecnologías de Información

http://ramonmillan.blogspot.com

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente