¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Hacking y Forensic
  3. Red: la librería Scapy
Extrait - Hacking y Forensic Desarrolle sus propias herramientas en Python
Extractos del libro
Hacking y Forensic Desarrolle sus propias herramientas en Python Volver a la página de compra del libro

Red: la librería Scapy

Introducción

Según la documentación oficial (man Scapy), Scapy es un potente programa interactivo de manipulación de paquetes. Se pueden crear o decodificar paquetes de un gran número de protocolos, emitirlos, capturarlos, hacer corresponder peticiones y respuestas y mucho más. Permite manipular la mayoría de herramientas de scan, traceroute, sonda, pruebas unitarias, ataques o descubrimiento de red (que reemplaza fácilmente hping, el 85% de nmap, arpspoof, arp-sk, arping, tcpdump, tethereal, p0f, etc.). Se comporta igual de bien sobre un gran número de tareas que una cantidad considerable de programas no es capaz de manipular, como enviar tramas inválidas, inyectar sus propias tramas 802.11, combinar técnicas (VLAN hopping+ARP cache poisoning, VOIP decoding sobre canal codificado en WEP...), etc.

El autor de Scapy es Philippe Biondi. Es autor de muchas aplicaciones, la mayoría escritas en lenguaje Python. Encontrará el conjunto de sus publicaciones, conferencias y software en su sitio.

Scapy es una herramienta multi-uso, siendo un:

  • falsificador de paquetes;

  • snifer;

  • escaner;

  • herramienta de prueba (máquina/servicio activo);

  • herramienta de fingerprint;

  • herramienta de ataque (valores no previstos en los protocolos...).

images/03-01.png

Puede sustituir a muchas de las herramientas existentes: ethereal/wireshark, tcpdump, dsniff, excalibur, ping, traceroute, nmap, xprobe, ettercap...

No tiene...

Programación de red con Scapy

1. Lista de protocolos soportados

Scapy nos permitirá trabajar con muchos protocolos. Encontrará a continuación la lista de protocolos soportados por Scapy.

Si desea conocer todos los protocolos utilizados bastará, una vez lanzado Scapy (ponerse en consola shell y luego escribir scapy), con introducir el comando ls(IP).

ARP: ARP

ASN1_Packet: None

BOOTP: BOOTP

CookedLinux? : cooked linux

DHCP: DHCP options

DNS: DNS

DNSQR: DNS Question Record

DNSRR : DNS Resource Record

Dot11: 802.11

Dot11ATIM: 802.11 ATIM

Dot11AssoReq: 802.11 Association Request

Dot11AssoResp: 802.11 Association Response

Dot11Auth: 802.11 Authentication

Dot11Beacon: 802.11 Beacon

Dot11Deauth: 802.11 Deauthentication

Dot11Disas: 802.11 Disassociation

Dot11Elt: 802.11 Information Element

Dot11ProbeReq: 802.11 Probe Request

Dot11ProbeResp: 802.11 Probe Response

Dot11ReassoReq: 802.11 Reassociation Request

Dot11ReassoResp: 802.11 Reassociation Response

Dot11WEP: 802.11 WEP packet

Dot1Q: 802.1Q

Dot3: 802.3

EAP: EAP

EAPOL: EAPOL

Ether: Ethernet

GPRS: GPRSdummy

GRE: GRE

HCI_ACL_Hdr: HCI ACL header

HCI_Hdr: HCI header

HSRP: HSRP

ICMP: ICMP

ICMPerror: ICMP in ICMP

IP: IP

IPerror: IP in ICMP

IPv6: IPv6 not implemented here.

ISAKMP: ISAKMP

ISAKMP_class: None

ISAKMP_payload: ISAKMP payload

ISAKMP_payload_Hash: ISAKMP Hash

ISAKMP_payload_ID: ISAKMP Identification

ISAKMP_payload_KE: ISAKMP Key Exchange

ISAKMP_payload_Nonce: ISAKMP Nonce

ISAKMP_payload_Proposal: IKE proposal

ISAKMP_payload_SA: ISAKMP SA

ISAKMP_payload_Transform: IKE Transform

ISAKMP_payload_VendorID: ISAKMP Vendor ID

IrLAPCommand: IrDA Link Access Protocol Command

IrLAPHead: IrDA Link Access Protocol Header

IrLMP: IrDA Link Management Protocol

L2CAP_CmdHdr: L2CAP command header

L2CAP_CmdRej: L2CAP Command Rej

L2CAP_ConfReq: L2CAP Conf Req

L2CAP_ConfResp: L2CAP Conf Resp

L2CAP_ConnReq: L2CAP Conn Req

L2CAP_ConnResp: L2CAP Conn Resp

L2CAP_DisconnReq: L2CAP Disconn Req

L2CAP_DisconnResp: L2CAP Disconn Resp

L2CAP_Hdr: L2CAP header

L2CAP_InfoReq: L2CAP Info Req

L2CAP_InfoResp: L2CAP Info Resp

LLC: LLC

MGCP: MGCP

MobileIP: Mobile IP (RFC 3344)

MobileIPRRP: Mobile IP Registration Reply (RFC 3344)

MobileIPRRQ: Mobile IP Registration Request (RFC 3344)

MobileIPTunnelData: Mobile IP Tunnel Data Message (RFC 3519)

NBNSNodeStatusResponse: NBNS Node Status Response

NBNSNodeStatusResponseEnd: NBNS Node Status Response

NBNSNodeStatusResponseService: NBNS Node Status Response Service

NBNSQueryRequest:...

Scapy e IPv6

1. Nociones de IPv6

a. Aspectos generales

El número de direcciones IPv4 disponibles está limitado a 4 294 967 296, es decir 232. En su momento, este número parecía que nunca podría alcanzarse.

En 1992, estas direcciones IP se abrieron al comercio en Internet.

Un año más tarde fuimos testigos del inicio de un plan de emergencia, ya que no había más direcciones de clase B disponibles:

  • Se creó la notación CIDR, donde se consigue una disminución del desperdicio de espacio de direcciones y una disminución del tamaño de las tablas de enrutamiento.

  • Se procede a la creación y puesta en marcha de un plan de direccionamiento privado y NAT.

Las medidas técnicas provocan limitaciones y nuevos problemas, los protocolos dinámicos deben ser tratados independientemente (ej. FTP) y es obligatoria una capa de seguridad para garantizar la integridad de la confidencialidad.

Una primera versión de IPv6 se propone en 1995, y aparece una versión definitiva en 1998.

El RIPE anuncia el final de la distribución de IPv4 en febrero de 2011 (para la IANA) y el final de la distribución en noviembre para los representantes regionales de la IANA.

IPv6 está codificado en 128 bits (32 para IPv4), sus 64 bits de mayor peso representan la red y los 64 bits de menor peso representan la identificación de los hosts.

Las direcciones están representadas en forma de 8 dígitos hexadecimales; cada dígito representa 16 bits en formato hexadecimal.

b. IPv6: RFC 2373

Las direcciones IP se pueden escribir en esta forma:

  • 2001:470:1f14:10b9:0000:0000:0000:2

  • 2001:470:1F14:10b9::2

La escritura de un conjunto de ceros contiguos puede simplificarse, pero no más de una vez en una dirección:

  • 2:0000:0000:0000:2:0000:0000:2

  • 2::2::2 => no válida

  • 2::2:0000:0000:2 => válida

  • 2:0000:0000:0000:2::2 => válida

Parte de la red

Las direcciones están estructuradas según un modelo agregado.

La calificación utilizada para caracterizar los agregados es la notación CIDR (RFC 1519).

Con la dirección 2001:0DB8:ac4D:0001::

  • 2001:0DB8:ac4d se denomina...

Otros ejemplos

Deseamos escuchar los paquetes TCP en el puerto 80 del equipo y mostrar el resultado en la pantalla.

images/03-10.png

Queremos ahora aplicar una función a cada paquete recibido. Podríamos utilizar la variable prn que servirá para aplicar una función a en cada paquete. También podríamos, por supuesto, utilizar una función lambda para ayudarnos.

Necesitaremos hacer un MITM (Man in the Middle) para probar la red en una auditoría. Existen por supuesto herramientas especializadas, pero tenemos la posibilidad de hacerlo con Scapy. Esta técnica MITM utiliza ARP cache poisoning.

En un ataque de tipo ARP poisoning, un hacker se introducirá entre los datos enviados por el usuario y el router.

images/03-11.png

Debemos utilizar el protocolo ARP, de ahí el uso de la función ARP() con los siguientes parámetros:

  • Comando ARP (1).

  • dst: dirección MAC de destino (si es necesario).

  • hwsrc: dirección MAC que quiere poner en la tabla ARP remota (atacante).

  • pdst: dirección IP del equipo remoto cuya tabla ARP quiere infectar (víctima).

  • psrc: dirección IP de la pasarela (gateway).

images/03-12.png

Ahora debemos poner nuestro equipo en modo forward IP (/proc/sys/net/ipv4/ip_forward) y ejecutar el script anterior, así como un sniffer (con Scapy o directamente Wireshark) para capturar los paquetes.

Conclusión

Acabamos de descubrir las principales funcionalidades de Scapy. Existen muchas otras y si desea profundizar sus conocimientos puede encontrar en la red documentación y ejemplos de utilización.

Solo su imaginación puede frenarle en el uso de Scapy, es una herramienta potente, llena de recursos, y solo su uso frecuente le permitirá controlar sus recovecos. 

Puesta en práctica

1. Canal encubierto IP

Enunciado

Requisitos previos: Python, Scapy, conocimientos de red

Objetivo: realizar un script Python que utilice un canal encubierto IP.

Enunciado:

Un canal encubierto IP (covert channel IP) es un canal de comunicación entre dos equipos que utilizan el ancho de banda de otro canal con el objetivo de transmitir información sin la autorización o conocimiento del propietario de la información o el administrador de la red.

Prepare este script Python empleando Scapy.

Corrección

cap3_exo2.py


#!/usr/bin/env python   
# -*- coding: iso-8859-15 -*-   
  
from scapy.all import *   
conf.verb=0   
  
def trataPaquete(p):   
        if p[IP].ttl > 230:   
                print ""   
                sys.exit(0)   
        sys.stdout.write(chr(p[IP].id))   
  
sniff(   
        filter = "icmp and src //@victim//",   
        lfilter = lambda p: p.haslayer(ICMP) and p[IP].id < 256,  
        prn = trataPaquete,   
                                 #}Para tratamiento en vivo  
                                 store = 0,    
                                 #}   
) 
 

2. Detección de Rogue AP (Access Point)

Enunciado

Requisitos previos: Python, Scapy...