Esta es la segunda parte del hilo sobre:
Analizando la red con TCPDump
/ Windump que se encuentra en:
Hilo de la primera parte.
Ya comenté que Windump / TCPDump tiene filtros para su mejor manejo. Estos filtros pueden llegar a ser tan sofisticado como queramos y extrar cualquier tipo de datos de los apquetes que circulen a través de nuestra red.
Como la mejor manera de explicar el funcionamiento de los filtros es la practica, vamos a analizar una combinación y encadenamiento de filtros coun un ejemplo:
Tenemos el servidor de correos un tanto colapsado, este servidor no aguanta demasiadas conexiones, o el tráfico es mayor de lo previsto. Analicemos entonces que es lo que pasa. Vamos a crear un filtro para averiguar las conexionesal puerto 110 de nuestro servidor.
Código:
C:\scan>windump -qn -X -s 0 tcp[13] = 2 and port 110
Aquí vemos algunas opciones ya comentadas y otras nuevas:
–q estableceremos el indicador de salida rápida que hará que nos devuelva menos información y que las líneas sean más cortas.
Esto es así porque en realidad sólo nos interesa los host/IP y las amrcas de tiempo, ya que como veremos más adelante estamos filtrando establecimientos de conexión TCP al puerto 110.
-n no resolver nombres de host
-X vuelca en la consola los datos.
- s 0 es el snaplen. A cero estamos cogiendo los paquetes completos. Si hubiéramos puesto -s 512 se capturarían sólo los primeros 512 bytes del paquete tcp.
tcp[13] = 2 esta es la madre del cordero. con este filtro estamos diciendo a windump que queremos escoger los paquetes TCP cuyo indiccador, bandera o flag sea SYN "S". Para entender esto hay que tener en cuenta como es el formato de un paquete TCP, que los indicadores o flags se encuentran en el octeto 13.
Vamos a echarle un ojo a ese octeto 13 y simulemos que el flag SYN está activo:
U A P R S F
------------------
0 0 0 0 0 0 1 0
------------------
7 6 5 4 3 2 1 0
vemos que el byte 7 y 6 estánm reservados., el 5 es para URGENT, 4 es para ACK, 3 es para PUSH, 2 es para RESET y el byte o para FIN. Tenemos entonces el octeto completo. En binario quedaría como acabamos de ver:
0 0 0 0 0 0 1 0
si pasamos este binario a decimal nos da 2
de ahí viene tcp[13] = 2.
Es facil deducir entonces que para detectar un SYN/ACK:
0 0 0 1 0 0 1 0
si pasamos este binario a decimal nos da 18
entonces tcp[13] = 18
Seguimos con el resto de opciones....
and port 110 esto es que unido a lo anterior analice el puerto 110.
Podriamos añadir que lo hiciera sólo para un dterminado host:
and port 110 and host ALFON.
Usando esta técnica, con windump o tcpdump odríamos detectar escaneos y otras intrusiones en nuestros sistemas.
Siguiendo con el ejemplo práctico y quitando la opción -X que ahora es irelevante:
C:\scan>windump -qn -s 0 tcp[13] = 2 and port 110
windump: listening on\Device\Packet_{604C8AE3-5FAC-45A5-BFAA-81175A8C32BF}
19:11:20.914698 192.168.2.71.1117 > 192.168.4.15.110: tcp 0 (DF)
19:11:22.442635 192.168.4.10.3531 > 192.168.4.15.110: tcp 0 (DF)
19:11:29.321747 192.168.2.90.2310 > 192.168.4.15.110: tcp 0 (DF)
19:11:29.350083 192.168.4.9.1392 > 192.168.4.15.110: tcp 0 (DF)
19:11:30.167786 192.168.2.9.1118 > 192.168.4.15.110: tcp 0 (DF)
19:11:40.848757 192.168.2.90.2311 > 192.168.4.15.110: tcp 0 (DF)
19:11:47.603914 192.168.2.70.1400 > 192.168.4.15.110: tcp 0 (DF)
19:11:48.692990 192.168.4.2.2349 > 192.168.4.15.110: tcp 0 (DF)
19:11:48.946846 192.168.4.2.2350 > 192.168.4.15.110: tcp 0 (DF)
19:11:49.167414 192.168.4.2.2351 > 192.168.4.15.110: tcp 0 (DF)
19:11:53.689934 192.168.4.11.2360 > 192.168.4.15.110: tcp 0 (DF)
19:12:21.576147 192.168.2.71.1118 > 192.168.4.15.110: tcp 0 (DF)
19:12:22.885469 192.168.4.10.3532 > 192.168.4.15.110: tcp 0 (DF)
19:12:29.776688 192.168.2.90.2312 > 192.168.4.15.110: tcp 0 (DF)
19:12:29.799274 192.168.4.9.1393 > 192.168.4.15.110: tcp 0 (DF)
19:12:41.142773 192.168.2.90.2313 > 192.168.4.15.110: tcp 0 (DF)
19:12:42.594882 192.168.4.2.2352 > 192.168.4.15.110: tcp 0 (DF)
19:12:42.828622 192.168.4.2.2353 > 192.168.4.15.110: tcp 0 (DF)
19:12:43.060723 192.168.4.2.2354 > 192.168.4.15.110: tcp 0 (DF)
19:12:47.896352 192.168.2.70.1401 > 192.168.4.15.110: tcp 0 (DF)
faltan muchas trazas pero podemos ver en s´lo unas pocas que algunos tenian sus clientes de correo configurado para "mirar" el correo cad minuto. En la realidad fueron casi todos, con lo cual tenían el servidor bastante atareadillo.
ETHEREAL:
Como nota final decir, para los que me comentan por mail, que el ethereal es mejor en algunos aspectos por ser gráfico y más intuitivo, que tanto Etheral como TCPDUMP y WINDUMP se basan en la misma librería de captura de paquetes y por tanto para filtrara usan la MISMA sintaxis. Es decir, todo esto que os escribo es válido también para Etheral.