Este documento está disponible en los siguientes idiomas: English Castellano Deutsch Francais Nederlands Portugues Russian Turkce |
por Danilo Lujambio Sobre el autor: Contenidos: |
Resumen:
¿ Porqué poseen importancia los barredores o scanners en seguridad dentro de redes ?. Fundamentalmente porque son herramientas esenciales para aquellos que desean atacar un sistema. Las metodologías para la preparación de un ataque pueden ser :
Por ello para un administrador preocupado por la seguridad de su sistema le es importante realizar un barrido de su red, y buscar vulnerabilidades antes que lo hagan otros con no muy buenas intenciones
Existen varios barredores para esta finalidad , en el artículo se trabajará sobre el nmap que es seguramente uno de los más completos
El nmap permite a los administradores de sistemas y a los curiosos poder "scannear" ( o barrer ) las redes y poder determinar que servidores están activos y que servicios están ofreciendo.
El nmap ofrece varias técnicas de barrido. En este artículo se pretende trabajar sobre un número limitado de ellas , aprovechándolas para repasar ( ¿ quizás aprender ? ) aspectos del protocolo TCP
La idea es que se pueda observar algunas de las formas de uso del nmap para obtener información sobre los sistemas y a la vez observar como se puede encontrar huellas del barrido realizado por el nmap desde el lado del objetivo
El nmap se obtiene de www.insecure.org , una vez bajado :
tar zxvf nmap-2.30BETA17.tgz cd ...../nmap-2.30BETA17/ ./configure make make installcon lo cual queda instalado
El resultado que arroja el nmap es comunmente una lista de los puertos "interesantes" ( puertos activos) en la máquina que está siendo barrida . Para dichos puertos da el nombre del servicio conocido , el estado y el protocolo
La forma de barrido mas común que posee es utilizando la
opción -sT . Este modo se basa en la metodología de inicio
de conexión que posee el TCP , conocida como three way handshake.
Describiéndolo resumidamente sucede la siguiente secuencia [1]
a) El servidor tiene que estar preparado para recibir una conexión
( en general utilizando las funciones socket , bind y listen)
b) El cliente lanza una conexión activa - llama a connect() -
Con esto envía un segmento SYN para informarle al server el numero
inicial de secuencia para los datos que el cliente va a enviar en la conexión.
El SYN normalmente contiene un IP Header - un TCP Header y puede ser algún
opción TCP
c) El servidor debe dar por conocido el SYN enviando un ACK y a su vez
envía un SYN con su número de secuencia ( todo en un sólo
paquete TCP)
d) El cliente debe dar por conocido el SYN enviado con un ACK
Este modo de barrido posee dos ventajas :
Se analiza a continuación el proceso que general el nmap
con la opción -sT , corriendo el tcpdump en la máquina objetivo.
Para ello se ejecuta el nmap en la máquina 192.168.255.20 y se dirige
hacia la máquina casa2.xxx.xxx.xxx, en una red ethernet
1) 08:24:18.393108 192.168.255.20.1024 > casa2.xxx.xxx.xxx.653: S 2632227152:2632227152(0)
win 16060 <mss 1460,sackOK,timestamp 232602[|tcp]> (DF)
2) 08:24:18.393167 casa2.xxx.xxx.xxx.653 > 192.168.255.20.1024: R 0:0(0)
ack 2632227153 win 0
3) 08:24:18.393227 192.168.255.20.1025 >
casa2.xxx.xxx.xxx.6141: S 2644226118:2644226118(0) win 16060 <mss 1460,sackOK,timestamp
232602[|tcp]> (DF)
4) 08:24:18.393258 casa2.xxx.xxx.xxx.6141 > 192.168.255.20.1025: R
0:0(0) ack 2644226119 win 0
5) 08:24:18.453343 192.168.255.20.1298 > casa2.xxx.xxx.xxx.pop3: S 2640612362:2640612362(0)
win 16060 <mss 1460,sackOK,timestamp 232608[|tcp]> (DF)
6) 08:24:18.453542 casa2.xxx.xxx.xxx.pop3
> 192.168.255.20.1298: S 1658259980:1658259980(0) ack 2640612363 win 16060
<mss 1460,sackOK,timestamp 243353[|tcp]> (DF)
7) 08:24:18.458667 192.168.255.20.1298 >
casa2.xxx.xxx.xxx.pop3: . ack 1 win 16060 <nop,nop,timestamp 232609
243353> (DF)
8) 08:24:18.461280 192.168.255.20.1298 >
casa2.xxx.xxx.xxx.pop3: F 1:1(0) ack 1 win 16060 <nop,nop,timestamp
232609 243353> (DF)
La numeración de líneas se ha agregado para una mejor explicación:
en la línea 1) la máquina "atacante" 192.168.255.20 lanza desde
el puerto 1024 un segmento SYN hacia el puerto 653 de la máquina objetivo
casa2.xxx.xxx.xxx . Se reconoce que se trata de un segmento SYN por la
S que se observa después del 653. Se estaría hasta allí
en el punto b) del three way handshake explicado.
en la línea 2) la máquina objetivo responde con un paquete RESET (
nótese la R luego del 1024) indicando esto que no posee un proceso "escuchando"
sobre el puerto 653
las líneas 3 y 4 son similares a las dos primeras , lo fundamental que
varia es que se chequea si hay un proceso en el puerto 6141 de la máquina
objetivo, como nuevamente no lo hay , se vuelve a responder con un RESET
la línea 5) muestra como la máquina 192.168.255.20 lanza un segmento
SYN al puerto pop 3 de la máquina objetivo ( puerto 110) , esta vez la
máquina objetivo responde con un ACK dando por reconocido el SYN y el número
de secuencia enviado ( se envía el numero de secuencia propio de
la máquina objetivo , en este caso 1658259980 y el nro de secuencia enviado
por la máquina 192.168.255.20 , + 1 es decir 2640612363) . Fíjese
que el paquete que responde casa2 posee los bits de control SYN y ACK activos
. Esto se observa en la línea 6) y se estaría en el paso
c) del three way handshake.
La línea 7) muestra el reconocimiento del último paquete recibido
en la máquina 192.168.255.20 con un segmento ACK , llegando así
al punto d) del handshake . La línea 8) es la finalización de la
conexión por parte de 192.168.255.20 , cuestión que se realiza
enviando un segmento FIN ( notese la F luego de pop3)
Este proceso permitió al nmap ejecutado detectar que el puerto 110 ( pop3) de casa2 es un puerto activo en dicha máquina
Se mencionó que esta forma de barrido es facilmente detectable , notese las huellas que dejaron en el archivo /var/log/messages ( esto depende de como esté configurado el syslog.conf) la conexión vista en la línea 5 , 6 , 7 y 8 :
May 6 08:24:01 casa2 in.pop3d[205]: connect from root@192.168.255.20
Este tipo de barrido se obtiene ejecutando al nmap con la opción -sS . La técnica que utiliza es abrir una "media conexión" , es decir envía un segmento SYN y si recibe un ACK es porque ha detectado un puerto activo en la máquina objetivo , después de lo cual envía un RESET para cortar en forma abrupta la comunicación. Si en vez de un ACK recibe un RST es porque el puerto de la máquina objetivo no se encuentra activo. Este modo de barrido posee la desventaja que se deben tener privilegios de root para ejecutarlo . Pero posee la ventaja que es de difícil detección en la máquina que es barrida
Veamos ahora un análisis similar de la tarea desarrollada por
el nmap con esta opción, analizandola con el tcpdump ( nuevamente
las líneas se numeran por comodidad)
1) 22:25:45.856936 192.168.255.20.40175 >
casa2.tau.org.ar.946: S 1292785825:1292785825(0) win 3072
2) 22:25:45.857078 casa2.tau.org.ar.946 >
192.168.255.20.40175: R 0:0(0) ack 1292785826 win 0
las líneas 1) y 2) son muy similares a las líneas 1) y 2) del apartado anterior , simplemente se ve el segmento SYN enviado por la máquina 192.168.255.20 al puerto 946 de la máquina casa2 y la respuesta de esta enviando un RESET por no ser ese un puerto activo de ella
3) 22:25:45.970365 192.168.255.20.40175 >
casa2.tau.org.ar.pop3: S 1292785825:1292785825(0) win 3072
4) 22:25:45.976022 casa2.tau.org.ar.pop3
> 192.168.255.20.40175: S 185944428:185944428(0) ack 1292785826 win 16080
<mss 536> (DF)
5) 22:25:45.979578 192.168.255.20.40175 >
casa2.tau.org.ar.pop3: R 1292785826:1292785826(0) win 0
las líneas 3) 4) y 5) son obtenidas por el hallazgo exitoso del puerto 110 ( pop3) en la máquina casa2 . Como se mencionó , no se desarrolla completo el three way handshake sino que al recibir el nmap el reconocimiento de su segmento SYN ( mediante el segmento ACK enviado por casa2 , línea 4 ), envía un segmento RESET que fuerza la interrupción de la comunicación.
Este barrido sobre casa2 no dejó huella en el archivo /var/log/messages , tal como se había anticipado
La idea sobre la que se basa este tipo de barrido es que los puertos no activos de la máquina objetivo responden a un paquete FIN con un paquete RST. Los puertos activos, por otra parte ignoran dichos paquetes. Por lo tanto se obtiene la lista interesante de puertos observando cuales son los que no han "contestado". Las máquinas corriendo sistemas operativos microsoft no son vulnerables a este tipo de barrido, ya que realizan una implementación no standard de lo que debería ser la forma correcta de operación del TCP.
Hay tres formas de operación del nmap utilizando técnicas parecidas , ellas se obtienen con las opciones -sF , -sX y -sN.
Analizamos en este articulo el comportamiento
bajo la opción -sF. Realizamos para ello un trabajo similar al hecho
para las otras opciones
1) 06:50:45.643718 192.168.255.20.35600 >
casa2.tau.org.ar.864: F 0:0(0) win 2048
2) 06:50:45.643865 casa2.tau.org.ar.864 >
192.168.255.20.35600: R 0:0(0) ack 0 win 0
en las líneas 1) y 2) se observa el envío del segmento FIN ( notese la F luego del 864 en la línea 1) a la máquina objetivo y la respuesta de ella con un paquete RST ( notese la R en la línea 2 luego del 35600). nmap concluye entonces que el puerto 864 de casa2 no se encuentra activo.
3) 06:50:47.933227 192.168.255.20.35600 >
casa2.tau.org.ar.pop3: F 0:0(0) win 2048
4) 06:50:48.251147 192.168.255.20.35601 >
casa2.tau.org.ar.pop3: F 0:0(0) win 2048
las líneas 3) y 4) vuelven a tomar como ejemplo al puerto pop3 de casa2 .En la línea 3 se ve el envío del segmento FIN , segmento que no obtiene respuesta por parte de casa2 . La línea 4) constituyó una sorpresa y debe ser una seguridad que toma el nmap para puertos que "no contestan" , vuelve a enviarle un segmento FIN al cabo de un lapso para ver si realmente ese puerto no esta contestando. En ambos casos, casa2 ignoró los paquetes , mostrándole así al nmap que su puerto pop3 se encuentra activo.
En el apartado "barrido utilizando el three way handshake del tcp" se mencionó y se mostró las huellas que puede dejar el barrido del nmap con la opcion -sT . En los dos siguientes apartados se vió que las opciones -sS y -sF no dejan huellas. Podemos utilizar el programa tcpdump para detectar este tipo de barridos en una máquina que esta conectada a la red y que puede recibir ataques. El inconveniente es que el programa tcpdump genera una cantidad de información enorme que trae dificultades de espacio de almacenamiento y luego también de análisis. Se ofrecen aquí algunas expresiones que actúan sobre el tcpdump como filtros de manera que la información obtenida por él sea menor y más sencilla de analizar.
Para entender las expresiones utilizadas , se muestra en la siguiente figura como es el formato del paquete TCP [2]
TCP (RFC 793)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgement Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Offset | Reserver |U|A|P|R|S|F| Window |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Como puede observarse es en el byte 13 es donde se encuentran las banderas que identifican al paquete como un segmento SYN , FIN , etc. Conociendo esto y utilizando la expresión and (&) con máscaras para detectar cuales son los bits activos podemos realizar las siguientes expresiones
tcpdump 'tcp[13] & 7 !=0 and dst 192.168.255.20' > /tmp/salida7así se filtraran y se obtendrán los paquetes que poseen los bits R , S o F ( la máscara es 00000111) activos y que tiene por destino la máquina 192.168.255.20 ( obviamente este número IP será el de la máquina a proteger)
Utilizando
tcpdump 'tcp[13] & 1 !=0 and dst 192.168.255.20' > /tmp/salida1obtendremos los paquetes que poseen el bit FIN activo ( la máscara es 00000001). Nos puede servir para detectar los barridos del nmap que utilizan la opción -sF . Y realizando
tcpdump 'tcp[13] & 2 !=0 and dst 192.168.255.20' > /tmp/salida2obtendremos solo los paquetes que poseen el bit SYN activo , sirviéndonos para detectar los barridos con opción -sS
Para este último tipo ( el barrido nmap -sS ) existen programas de detección disponibles [3]
Programas como el nmap son muy útiles para mejorar la seguridad de un sistema verificando que partes débiles posee. Aquí solo se ha mostrado el funcionamiento de una parte muy reducida de él, pero creo que sirve para entender un poco más, desde adentro como funcionan los scanner
[1] W. Richard Stevens Unix Network Programming Volume 1
[2] RFC 793
[3] ver la documentación del nmap
|
Contactar con el equipo de LinuFocus
© Danilo Lujambio, FDL LinuxFocus.org Pinchar aquí para informar de algún problema o enviar comentarios a LinuxFocus |
2001-05-16, generated by lfparser version 2.9