Scapy. Manipulación avanzada e interactiva de paquetes. Parte 2

Seguimos con la serie dedicada a Scapy. Ya vimos como instalar Scapy y estudiamos, en forma de primeros pasos, alguna de sus funcionalidades en la primera parte: Scapy. Manipulación avanzada e interactiva de paquetes. Parte 1.
scapy como capturador de paquetes sniffer en seguridad y redes alfon
En esta segunda parte vamos a profundizar un poco más en la  visualización de datos, función sniff, formateo de datos, decodes, modo offline de Sniff y condicionales.

Visualizando datos con show() y show2().

Vamos a ver la diferencia entre estas funciones de muestra de datos de un paquete, como siempre, con un ejemplo. Construimos un paquete de la forma:
scapy27.png
NOTA:

  • La barra  \  sirve para escribir en varias líneas.
  • La barra / sirve para la composición entre capas a lconstruir nuesdtro paquete. En este caso IP/TCP.

Visualizamos ahora los datos con show():
scapy como capturador de paquetes sniffer en seguridad y redes alfon
y a continuación mostramos con show2():

scapy como capturador de paquetes sniffer en seguridad y redes alfon

Tenemos vatias diferencias. La más importante es la carga de datos Raw que hemos introducido com la función Raw() y argumento RandString(size=75), es decir generación de datos de forma aleatoria. También tenemos diferencia en campos como Version, cheksum, etc.

Show2() muestra los datos, en caso de ser enviados mediante scapy, tal como serían ser transmitidos pero de forma legible, con el checksum y el paquete ensamblado. Show() nos mostrará el paquete tal como lo hemos construido.

Sniff(). Visualización y formateo de datos.

Ya estudiamos en la primera parte algo de la función de captura de paquetes de scapy Sniff(). Vamos a profundizar un poco más con prn lambda y sprintf.

Vimos que  podíamos ver los campos de las cabeceras de un paquete y protocolos encapsulados:

scapy como capturador de paquetes sniffer en seguridad y redes alfon

Pues bien, podemos formastear la salida de Sniff() de tal forma que se adapte justo a los datos de queremos ver y ordenarlos como queramos. Por ejemplo. Vamos a capturar una sesión  SMTP. En principio queremos captura con el filtro activado: «tcp and (port 25 or port 110)» y usando prn=lamba x: x.sprintf. queremos mostrar los siguientes datos y de la siguiente forma:

  • IP origen y puerto origen
  • IP destino y puerto destino
  • una separación x entre columnas
  • Banderas TCP o Flags
  • y la carga o playload del segmentto TCP

Mientras capturamos, escribo un correo a mis lectores.

Entonces introducimos las siguientes líneas:

scapy como capturador de paquetes sniffer en seguridad y redes alfon

El resultado:

scapy como capturador de paquetes sniffer en seguridad y redes alfon

Efectivamente, vemos las datos que qeríamos, el diálogo SMTP con el servidor y haasta el cuerp del mensaje.

Otro ejemplo. queremos formatear los datos de salida y mostrar con claridad los datos en columnas, introduciendo la separación entre ellas. Ojo con los detalles:

scapy como capturador de paquetes sniffer en seguridad y redes alfon

scapy como capturador de paquetes sniffer en seguridad y redes alfon

….digo ojo con los detalles, porque la salida informativa del protocolo no es ahora de forma TCP, UDP, etc. si no su valor hexadecimal:

  • 006 se refiere al campo IP PROTOCOL: 06 Protocolo. Se refiere al protocolo de siguiente nivel que se usa en la parte de datos. Longitud 8 bits. En este caso hex(06) (00000110) = TCP en decimal sería 6.
  • 2, 16, 18, 24, etc. se refiere a los Flags de la cabecera TCP que se expresan en esta caso en hexadecimal. Por ejemplo 18 sería en binario 11000 que, como ya sabemos,sería para ACK+PSH activados.

Todo lo anterior está reflejado en las directivas.

Directivas de sprintf()

Son las que comienzan y finalizan por %. Ya lo vimos en la primera parte de esta serie. Son directivas:

  • %.time%
  • %IP.chksum%
  • etc,

Otras formas de directivas.

Si cambiamos, por ejemplo %-15s por %-5s… veremos que la distancia entre columnas cambia. También observamos %r para que nos muestre los datos en formato raw. Vemos, entonces como se aplica todo esto para formar una directiva:

  • %-15s,IP.src%
  • %03xr,IP.proto%
  • etc,

Me preguntareis que significa eso de  %03rx. Haced la prueba y cambiais un valo, por ejemplo a %09xr …..:

scapy como capturador de paquetes sniffer en seguridad y redes alfon

La clase decode_payload_as()

Otra forma de sacar o filtrar datos de nuestras capturas es usando las clases. Vimos en la primera parte que usando la función ls():

scapy como capturador de paquetes sniffer en seguridad y redes alfon

Hay mucho mas. Nos centraremos en la decodificación del payload relativo a, por ejemplo, sesiones SMB, para ilustrar el uso de decode_payload_as:

scapy como capturador de paquetes sniffer en seguridad y redes alfon

De esta forma si usamos Sniff() mientras usamos algún recurso de nuestra red:

scapy como capturador de paquetes sniffer en seguridad y redes alfon

Sniff()  en modo offline

Podemos usar Sniff() de modo offline leyendo un fichero .pcap como de usáramos la función rdpcap() que ya viemos en la primera parte. Usaremos las siguientes líneas que además incluyen formateo de los datos.:

scapy como capturador de paquetes sniffer en seguridad y redes alfon

scapy como capturador de paquetes sniffer en seguridad y redes alfon

Añadiendo notas informativas a nuestras capturas. Trabajando con condicionales.

Tanto para Sniff() en modo online u offline, podemos añadir carteles o notas informativas a la salida de los datos. Lo ilustramos con un caso, quizá poco práctico, pero que da ide de lo que podemos hacer para capturas más complicadas o para añadir información en presentaciones ,etc.


scapy como capturador de paquetes sniffer en seguridad y redes alfon

scapy como capturador de paquetes sniffer en seguridad y redes alfon

Observamos, fácilmente, como trabaja scapy con las condicionales usando las formas:

  • {TCP: TCP}  para el caso en que se trate de un paquete TCP
  • {UDP: UDP} caso en que se trate de un paquete UDP
  • {ICMP:n ICMP} caso en que se trate de un paquete ICMP

Profundizaremos sobre las condicionales más a delante.

————————————————————————-

Esto es todo por  hoy. Nos vemos en la Parte 3 de esta serie.

Esta entrada fue publicada en Scapy, Seguridad y redes y etiquetada , , , , , , , . Guarda el enlace permanente.

Una respuesta a Scapy. Manipulación avanzada e interactiva de paquetes. Parte 2

  1. Pingback: Seguridad Python (manipulación de paquetes) | darkuskyo.net

Deja un comentario