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

Ya hemos visto en los cinco artículos dedicados a Scapy. Manipulación avanzada e interactiva de paquetes. casi todo lo relacionado con esta herramienta. En esta ocasión vamos a ir aplicando los conocimientos adquiridos a casos prácticos como el escaneo de puertos y, además, veremos los resultados en gráficas proporcionadas por las herramientas ya estudiadas como, en este caso, Afterglow.

scapy haslayeer() getlayer()

Usaremos algunos métodos ya estudiados para el formateo de salida de datos con Scapy y añadiremos métodos nuevos como haslayer() y getlayer().

Índice de artículos dedicados a Scapy: https://seguridadyredes.wordpress.com/post/2010/07/02/scapy-manipulacion-avanzada-e-interactiva-de-paquetes

NOTA: Veremos como usar en la práctica algunos conceptos aprendidos con Scapy. No se trata de un artículo exahustivo sobre port scanning. Veremos algunas técnicas solo para ilustrar los ejemplos prácticos.

.

Sobre los Flags o banderas TCP.  Usaremos términos tales como SYN, ACK, RST, etc. Todo esto lo vimos en Análisis capturas tráfico de Red. Interpretacion segmento TCP (II). Establecimento conexión TCP. Concretamente:

URG. El campo Puntero de urgencia contiene información válida.

ACK. El campo Número de acuse de recibo contiene información válida, es decir, el segmento actual lleva un ACK. Hay que observar que un mismo segmento puede transportar los datos de un sentido y las confirmaciones del otro sentido de la comunicación.

PSH. La aplicación ha solicitado una operación push(enviar los datos existentes en la memoria temporal sin esperar a completar el segmento).

RST. Interrupción de la conexión actual.

SYN. Sincronización de los números de secuencia. Se utiliza al crear una conexión para indicar al otro extremo cual va a ser el primer número de secuencia con el que va a comenzar a transmitir (veremos que no tiene porqué ser el cero).

FIN. Indica al otro extremo que la aplicación ya no tiene más datos para enviar. Se utiliza para solicitar el cierre de la conexión actual.

.

Scapy. Escaneo de puertos.

Es escaneo de puerto o port scanning es una técnica para la obtención activa de información de una red. Puede ser indicio de un ataque posterior, pero también, una técnica para la obtención lícita de información y auditoría.

Daré ya por conocido el funcionamientode Scapy. Para más información:  Scapy. Manipulación avanzada e interactiva de paquetes.

ACK Scan.

No es exactamente una comprobación de puertos abiertos. Vamos a enviar un paquete con el flag ACK activado al host 192.168.1.233.

NOTA: Podemos usar también la notación para un scan de red 192.168.1.0/24 .

ans,unans = sr(IP(dst=192.168.1.233)/TCP(dport=[80,23],flags=”A”))

ack scan

Como veis hemos enviado dos paquetes ACK a los puertos 80 y 23. En ambos casos  la respuesta es un RST (restet). Esto significa que estos puertos no están filtrados.Tanto si lo puertos están abiertos como si están cerrados recibiremos el RST ya que se intepreta como paquete erróneo, no hubo establecimiento de conexión previo. Ahora bien, de no haber recibido respuesta, podemos preveer que el puerto está filtrado:

ans,unans = sr(IP(dst=192.168.x.xxx)/TCP(dport=[143,80],flags=”A”))

ack scan

Seguimos aplicando lo aprendido con Scapy. Vamos a mostrar los resultados obtenidos:

port_codigo_00.png

el resultado:  
ack scan scapy
En el primer caso y con Afterglow:
.

port_codigo_01.png

afterglow ack scan scapy
TCP SYN Scan.

En este caso, enviamos un paquete o varios con el flag SYN activado. Sería como simular un establecimiento de conexión. El host remoto puede responder con un paquete con SYN+ACK activado con lo que el puerto está abierto o con RST+ACK con lo que el puerto estára cerrado.

Lo vemos:

syn scan scapy
Aquí podemos observar que:
  • Usamos la función RandonShort() en puerto de origen para generar puertos aleatorios.
  • Formateamos para ver los flags de los paquetes de respuesta. Tenemos dos puertos (80 y 143) abiertos y los otros dos cerrados (RST+ACK).
Si capturamos el port scan con Wireshark vemos:
.
port_s_06.png
  • 192.168.1.100 envia tres paquetes SYN a los puertos 80,143,69 y 1234.
  • de los puertos abiertos 80,143 se reciben SYN-ACK
  • 192.168.1.100 responde con un RST para terminar
  • de los puertos cerrados se recibem RST-SCK
Ahora vamos a ver con Afterglow la gráfica. Usaremos Tshark vez de Windump:
.
tshark scapy afterglow port scanning
.
Observad que hemos añadido para obtener más información en la gráfíca:
Usaremos circo para la gráfica:
.
tshark scapy afterglow port scanning circo

Formarteo de datos con haslayer() y getlayer()

Vamos a usar dos métodos nuevos haslayer() getlayer(). La mejor manera de explicar restos métodos e usando un ejemplo. Vamos a contruir un paquete, como ya hemos visto en otros capítulos:

>>> ip=IP(dst=”192.168.1.5″,src=”192.168.1.45″,flags=1)
>>> udp=UDP(sport=2048,dport=445)
>>> payload=“Estoy construyendo un paquete”
>>> paquete=
ip/udp/payload
>>> paquete.display()
###[ IP ]###
version= 4
ihl= None
tos= 0x0
len= None
id= 1paquete
flags= MF
frag= 0
ttl= 64
proto= udp
chksum= None
src= 192.168.1.45
dst= 192.168.1.5
\options\
###[ UDP ]###
sport= 2048
dport= microsoft_ds
len= None
chksum= None
###[ Raw ]###
load= ‘Estoy construyendo un paquete’

Bien, ahora haced lo siguiente y vereis para que sirven estos dos métodos:
.
scapy haslayeer() getlayer()
.
Ahora si buscamos por campo proto y dst de IP o sport de UDP:
.
scapy haslayeer() getlayer()
.
Sobre el valor 17 del protocolo recordad que:
1 ICMP, 2 IGMP, 6 TCP, 9 IGRP, 17 UDP, 47 GRE, 50 ESP, 51 AH, 88 EIGRP, 89 OSPF, 115 L2TP.
.
Creo que está claro. Sobre haslayer() si existe es 1 si no existe es 0.
.
El resultado de todo esto aplicado a escaneo:
.
>>> res,unans = sr(IP(dst=”192.168.1.250″)/TCP(flags=”S“, dport=(1,1024)))
>>> res.nsummary( lfilter=lambda (s,r): (r.haslayer(TCP) and (r.getlayer(TCP).flags & 2)))
0079 IP / TCP 192.168.1.100:ftp_data > 192.168.1.250:www S ==> IP / TCP 192.168.               1.250:www > 192.168.1.100:ftp_data SA / Padding
0134 IP / TCP 192.168.1.100:ftp_data > 192.168.1.250:loc_srv S ==> IP / TCP 192.               168.1.250:loc_srv > 192.168.1.100:ftp_data SA / Padding
0138 IP / TCP 192.168.1.100:ftp_data > 192.168.1.250:netbios_ssn S ==> IP / TCP                192.168.1.250:netbios_ssn > 192.168.1.100:ftp_data SA / Padding
0442 IP / TCP 192.168.1.100:ftp_data > 192.168.1.250:https S ==> IP / TCP 192.16               8.1.250:https > 192.168.1.100:ftp_data SA / Padding
0444 IP / TCP 192.168.1.100:ftp_data > 192.168.1.250:microsoft_ds S ==> IP / TCP                192.168.1.250:microsoft_ds > 192.168.1.100:ftp_data SA / Padding
.
Vemos que estamos escanenado los rangos de puertos de 1 a 1024, también que en las respuestas de 192.168.1.250 los puertos abiertos SYN-ACK. que es lo que estábamos buscando con (r.haslayer(TCP) and (r.getlayer(TCP).flags & 2).
.
Xmas Scan.
.
con esta técnica lo que hacemos es enviar un segmento TCP con los flags FIN, URG y PSH activados. De esta forma si:
  • si el puerto está cerrado, el host recepetor del scan responde con un segmento con los flag RST-ACK activados, indicando que se resetee la conexión en cliente.
  • si el puerto está abierto, ignora el paquete recibido y el host receptor no responde nada.
Lo vemos:
.
scapy xmas scan
.
Hemos enviado el segmento TCP con los flags FPU (FIN-PSH,URG) activados a los puertos 22,25,80,143. El host remoto responde con un RST-ACK en solo tres casos que corresponden a los puertos cerrados 25,80,143. Y no responde al enviado al puerto 22 que es el que está abierto.
====
Hasta aquí por hoy. En la proxima analizaremos técnicas de envío de paquetes malformados, otros tipos de escaneos y ataques a una red, etc,.
Esta entrada fue publicada en Nmap, Scapy, Seguridad y redes, Wireshark . Tshark. Guarda el enlace permanente.

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

  1. Juan Carlos Arango Gutiérrez dijo:

    Que bonito portal, mil gracias..
    Les solicito orientación, como puedo crear una sesión pop3 con scapy , por ejemplo con gmail??
    gracias!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s