Visualización gráfica Nmap / Scapy Scan con Afterglow / Argus racluster. Clustering y gráficas fdp. Parte 1

Seguimos con la serie dedicada a la representación / visualización de tráfico de red  y más concretamente a la representación de scan de puertos mediante AfterGlow.

afterglow protocolos

En esta ocasión vamos a usar, a parte de nmap, scapy / python para crear barridos de puertos desde múltiples orígenes. Esto se supone generará un gráfica bastante engorrosa y compleja. Para evitar este problema usaremos una carcterística de AfterGlow: clustering y la representación gráfica del tipo fdp. Veremos otras aplicaciones de la visualización con Argus (Auditoría tráfico red).

Scans nmap. Ordenando y clusterizando datos.

Tenemos un fichero de captura de red .pcap que nos dicen corresponde a un scan de puertos nmap detectado. Se quiere graficar dicho sca nde puertos atendiendo a

  • ip origen
  • puerto tdp destino
  • ip destino

Como ya hemos estudiado, este esquema se corresponderá con:

  • nodos source
  • nodos event
  • nodos target

Realizamos las operaciones oportunas como siempre (en este caso en windows):

tshark -r captura_nmap_5.cap -R «tcp» -T fields -E separator=, -e ip.src -e tcp.dstport -e ip.dst > captura_nmap_5.csv

abajo usamos un fichero de propiedades  como el que viene por defecto con AfterGlow:

type captura_nmap_5.csv | perl afterglow.pl -c color.properties > captura_nmap_5.dot

neato -Tpng -o captura_nmap_5.png ./captura_nmap_5.dot

El resultado es este:

caos en afterglow

No sé ustedes,  pero yo no lo veo claro. Un poco caótico. Vamos a limpiar y ordenar los datos para una gráfica más amigable.

Lo primero que vamos a hacer es ordenar los datos fuente .csv y eliminar líneas duplicadas. Para ello usaremos sort -u para UNIX/Linux y Windows (herramietna portada sort.exe):

tshark -r captura_nmap_5.cap -R «tcp» -T fields -E separator=, -e ip.src -e tcp.dstport -e ip.dst | sort -u > captura_nmap_5.csv

Clustering.

Ahora para los nodos event vamos a realizar clustering.

¿ Qué es clusteríng ?.

Se trata de agrupar un determinado tipo de nodo etiquetándolo de una forma generíca. Es decir, para nuestro caso: Me da igual los números de puertos menores de 1024. Los quiero agrupar todos en un solo nodo y ponerle una etiqueta que diga >1024. Para ello creamos un nuevo fichero de porpiedades (ejercicio.properties) y modificamos la parte de nodos event, dejando tal como están source y target:

color.event=»blue» if ($fields[1]<1024);
cluster.event=»<1024" if ($fields[1]<1024);
color.event=»lightblue»;

Esto significa que creamos un cluster llamado «<1024 " que agrupe todos los nodos event (tcp.dstport) que seran menores que 1024.

Ahora parseamos los datos con estas propiedades (ejercicio.properties):

type captura_nmap_5.csv | perl afterglow.pl -c ejercicio.properties > captura_nmap_5.dot 

Gráfica fdp.

Un tipo de gráfica que cuando clarifica un poco más los resultados:

fdp -Tpng -o captura_nmap_5.png ./captura_nmap_5.dot

El resultado:

ordenando el caos clustering fdp afterglow

Ahora todos los nodos azules que correspondian a los puertos destino <1024 se integran en un solo nodo azul. El nodo amaillo de abajo es el host que realiza el scan de puertos.

Un zoom para ver mejor el cluster:

afterglow_clu_03.png

Otro ejemplo.

Tenemos otra captura cuyo destino del scan de puertos es toda una red local 102.168.1.0/24. No sé ahora cuantos host tiene esa red pero si son muchos es posible que la gráfica resulte muy engorrosa. Ni lo intento. Directamente voy a realizar clustering con las IP destino. Para este ejemplo no me interesan los puertos mayores de 1024, lo reflejaré en un cluster si exiten, solo los menores que los dejaré  tal cual para saber cuales son. Vamos a tomar como base el anterior archivo de propiedades ejercicio.properties y realizamos la siguiente modificaciónes:

#para los nodos origen

color.source=»green» if ($fields[0]=~/^192\.168\..*/);
cluster.source=»Red Local origen» if ($fields[0]=~/^192\.168\..*/);
color.source=»red»

#para los nodos eventos

color.target=»yellow» if ($fields[2]=~/^192\.168\..*/);
cluster.target=»Red Local destino» if ($fields[2]=~/^192\.168\..*/);
color.target=»yellow»;
cluster.target=»Red Externa» if ($fields[2]!~/^192\.168\..*/);

#para los nodos destino

color.event=»lightcyan» if ($fields[1]<1024);
color.event=»lighsalmon» if ($fields[1]>1024);
cluster.event=»>1024» if ($fields[1]>1024);
shape.event=»box»

He marcado en negrita donde os tenéis que fijar.

He creado:

  • un cluster para la red local de origen
  • un cluster parala red local de destino
  • cluster la Red Externa destino
  • cluster para eventos de puerto destino mayor que 1024

Y usaré grafica fdp.

Empezamos:

tshark -r captura_nmap_3.cap -R «tcp» -T fields -E separator=, -e ip.src -e tcp.dstport -e ip.dst | sort -u > captura_nmap_3.csv

type captura_nmap_3.csv | perl afterglow.pl -c ejercicio.properties > captura_nmap_3.dot

fdp -Tpng -o captura_nmap_5.png ./captura_nmap_3.dot

El resultado:

afterglow otro ejemplo

Según hemos configurado en ejercicio.properties, tenemos una serie de nodos rojos que son IPs externas de origen. Cuadros azul claro son puertos menores de 1024. no parece el cluster para mayor de 1024, entonces que no existen. Se realizó el scan en un rango de 1-1024. Tenemos un nodo amarillo con una etiqueta de «Red local destino», así que el destino del escan fue toda la red local. El resto de cluster no aparecen luego no existen.

Por cierto, ¿ existe un solo puerto de origen o hay varios ?:

En el archivo de propiedades ejercicio.properties modificamos solo los nodos event. Nodo event con circulo para diferenciar algo más:

color.event=»lightcyan»
shape.event=»circle»

En la línea tshark el event lo cambiamos de tcp.dstport a tcp.srcport.

En la línea de fdp añado -s250 para dar más resluciñon a la imagen resultante.

El resultado, ampliado a una zona es:

puertos de origen afterglow

El puerto de origen usado por los hosts externos es 56. Vemos el nodo red local amarillo. Una serie de conexiones entre cluster red local origen y destino, es decir entre hosts de la red local. Uno de estos puertos es 445.

Otros ejemplos.

Como curiosidad y aplicando lo aprendido.

¿ Cómo se relacionan los host de una red entre ellos y la red externa atendiendo al protocolo usado ?.

Creamos un archivo de propiedades color.proto:

color.source=»green» if ($fields[0]=~/^192\.168\..*/);
color.source=»invisible»; # solo me interesa la red local

color.target=»yellow» if ($fields[2]=~/^192\.168\..*/);

#crear cluster si la IP destino es distinta a la local

color.target=»greenyellow» if ($fields[2]!~/^192\.168\..*/);
cluster.target=»Red Externa» if ($fields[2]!~/^192\.168\..*/);
shape.target=»circle«;

label.event=»ICMP» if ($fields[1] eq «0x01«);
color.event=»salmon» if ($fields[1] eq «0x01«);
label.event=»TCP» if ($fields[1] eq «0x06«);
color.event=»orange» if ($fields[1] eq «0x06«);
label.event=»UDP» if ($fields[1] eq «0x11«);
color.event=»red» if ($fields[1] eq «0x11«);
color.event=»gray»;
shape.event=»box»;

color.edge=»lightblue»;

Generando los datos y gráfica:

Usamos un fichero de captura de un laboratorio de pruebas, algunos hosts son virtuales.

tshark -r 031110Vrt.cap -T fields -E separator=, -e ip.src -e ip.proto -e ip.dst | sort -u > protocolos.csv

type protocolos.csv | perl afterglow.pl -c color.proto > protocolos.dot

circo -Tpng -o protocolos.png protocolos.dot

El resultado:

afterglow protocolos

Duración y total bytes transmitidos de las conexiónes.

Ya lo hemos visto en otros artículos. Con Argus y «dur» podemos representar el tráfico según la duración de la sconexiones.

racluster -m saddr daddr -c, -r lan031110.arg -s saddr dur daddr > lan031110b.csv

O por bytes o total de bytes transmitidos por cada conexión:

racluster -m saddr daddr -c, -r lan031110.arg -s saddr bytes daddr > lan031110c.csv

.

Enlaces Relacionados:

==================

Hasta aquí por hoy.  En la Parte II vermos todo lo relacionado con las graficas scan scapy con clustering, variables, labels y funciones nuevas como regex_replace().

==================

Esta entrada fue publicada en AfterGlow., Argus, Nmap, Scapy, Security Onion, Visualización Gráfica Tráfico red.. Guarda el enlace permanente.

4 respuestas a Visualización gráfica Nmap / Scapy Scan con Afterglow / Argus racluster. Clustering y gráficas fdp. Parte 1

  1. Grijalvo dijo:

    alfonn se agradece un poco de aire fresco con tus aportes tan interesantes y distintos a lo habitual en la blogosfera respecto a temas de seguridad se refiere. Sigue así.

  2. Pingback: Visualización interactiva de tráfico de red con INAV. | Seguridad y Redes

  3. Liyuan dijo:

    Muy buen artículo, este blog me ha sido de mucha ayuda, gracias por compartir

  4. Pingback: Argus. Auditando el tráfico de red. Parte 6. Argus y Geolocalización con GeoIP. | Seguridad y Redes

Deja un comentario