- 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.
- 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".
- 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".
- 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.
- 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".
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".- El comando "lastcomm"
- 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.
- 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.
- 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.
- 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
- 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
Página anterior | Volver al principio del trabajo | Página siguiente |