Scapy Generacin y manipulacin bsica de paquetes de
Scapy Generación y manipulación básica de paquetes de red
Índice ü ¿Qué es Scapy? ü Protocolos ü Comandos ü Generación de paquetes ü Apilado de capas ü Visualización ü Envío ü Manipulación de archivos ü Edición de paquetes capturados
¿Qué es Scapy? Ø Es un script escrito en Python Ø Genera paquetes de red Ø Permite manipular capturas Ø Es capaz de realizar ataques Ø Funciona con los principales protocolos de comunicación
¿Qué es Scapy? - Al ser un script, está disponible tanto para Linux como para Windows, ya que Python permite ambos sistemas Scapy < 2. X Python 2. 4 Scapy 2. X Python 2. 5 o superior -Para funcionar, necesita tener instalado Python junto con varias dependencias, según lo que necesitemos (dnet, pcap, pyreadline, pywin 32, winpcap) - Aparte, puede utilizar varias librerías para servicios avanzados (Plot, mostrar en pdf el paquete…)
ü Scapy puede hacer un montón de cosas adicionales, tales como proporcionar 3 D mapas, gráficos, tablas, etc, pero necesita algunos paquetes adicionales. Aquí está el comando de recibir todos esos beneficios extras: ü : ~$sudo apt-get install tcpdump graphviz imagemagick python-gnuplot python- crypto python -pyx
Protocolos Scapy es capaz de “diseccionar” la mayoría de protocolos que existen (IP, Ethernet, STP, HSRP…) Para ver todos los protocolos que soporta, se usa el comando ls()
Protocolos Scapy 1. 2. 0. 2 – 150 protocolos ARP ASN 1_Packet BOOTP Cooked. Linux DHCP DNSQR DNSRR Dot 11 ATIM Dot 11 Asso. Req Dot 11 Asso. Resp Dot 11 Auth Dot 11 Beacon Dot 11 Deauth Dot 11 Disas Dot 11 Elt Dot 11 Probe. Req Dot 11 Probe. Resp Dot 11 Qo. S Dot 11 Reasso. Req Dot 11 Reasso. Resp Dot 11 WEP Dot 1 Q Dot 3 EAPOL Ether GPRS GRE HCI_ACL_Hdr HCI_Hdr HDLC HSRP ICMPerror IP IPerror IPv 6 ISAKMP_class ISAKMP_payload_Hash ISAKMP_payload_ID ISAKMP_payload_KE ISAKMP_payload_Nonce ISAKMP_payload_Proposal ISAKMP_payload_SA ISAKMP_payload_Transform ISAKMP_payload_Vendor. ID Ir. LAPCommand Ir. LAPHead Ir. LMP L 2 CAP_Cmd. Hdr L 2 CAP_Cmd. Rej L 2 CAP_Conf. Req L 2 CAP_Conf. Resp L 2 CAP_Conn. Req L 2 CAP_Conn. Resp L 2 CAP_Disconn. Req L 2 CAP_Disconn. Resp L 2 CAP_Hdr L 2 CAP_Info. Req L 2 CAP_Info. Resp L 2 TP LLC MGCP Mobile. IPRRP Mobile. IPRRQ Mobile. IPTunnel. Data NBNSNode. Status. Response. End NBNSNode. Status. Response. Serv ice NBNSQuery. Request NBNSQuery. Response. Negative NBNSRequest NBNSWack. Response NBTDatagram NBTSession NTP Net. BIOS_DS Netflow. Header. V 1 Netflow. Record. V 1 No. Payload PPP_ECP_Option PPP_IPCP_Option PPPo. ED Packet Padding Prism. Header RIPEntry RTP Radio. Tap Radius Raw SMBMail. Slot SMBNegociate_Protocol_Req uest_Header SMBNegociate_Protocol_Req uest_Tail SMBNegociate_Protocol_Res ponse_Advanced_Security SMBNegociate_Protocol_Res ponse_No_Security_No_Key SMBNetlogon_Protocol_Resp onse_Header SMBNetlogon_Protocol_Resp onse_Tail_LM 20 SMBNetlogon_Protocol_Resp onse_Tail_SAM SMBSession_Setup_And. X_R equest SMBSession_Setup_And. X_R esponse SNAP SNMPbulk SNMPget SNMPinform SNMPnext SNMPresponse SNMPset SNMPtrapv 1 SNMPtrapv 2 SNMPvarbind STP Sebek. Head Sebek. V 1 Sebek. V 2 Sock Sebek. V 3 Sock Skinny TCPerror TFTP_ACK TFTP_DATA TFTP_ERROR TFTP_OACK TFTP_Options TFTP_RRQ TFTP_WRQ UDPerror X 509 Cert X 509 RDN X 509 v 3 Ext _IPv 6 Option. Header
Comandos Para el control de Scapy, disponemos de varios comandos, que pueden ser listados con el comando lsc()
Comandos Hay comandos que no se muestran en la ayuda, como los de gestión de archivos (rdpcap, wrpcap) o los de mostrar gráficos (psdump, pdfdump) La disponibilidad de muchos de los comandos, depende de si están instaladas librerías adicionales para dar esa funcionalidad (desencriptación WEP, dibujo, …) Algunas de las extensiones disponibles para Linux sólo están
Generación de paquetes Para generar paquetes, hay que utilizar los protocolos antes mencionados. Se pueden generar paquetes tanto de capa 2 (Ethernet) como de capa 3 (IP), necesarios para la comunicación. Después, se añaden el resto de protocolos que necesitemos.
Generación de paquetes Para generar datos de paquete de capa 2, utilizamos el protocolo Ethernet, abreviado como Ether(), indicando MAC de origen (src) y de destino (dst). Para introducir ambos campos, se separan por una coma (, ) capa 2=Ether(src=“ 00: 0 c: 12: 34: 56”, dst=“ 00: fa: ba: da: 00: 01”)
Generación de paquetes En capa 3, tenemos más campos dentro del comando, aparte de un campo de checksum. Éste campo puede rellenarse o no, ya que se puede generar al momento de enviarse capa 3=IP(src=“ 192. 168. 0. 1”, dst=“ 10. 200. 250. 18”)
Apilado de capas Crear un paquete desde cero, puede ser lioso si necesitamos introducir demasiados parámetros. paquete=Ether(src=“ 00: 0 c: 12: 34: 56”, dst=“ 00: fa: ba: da: 00: 01”)/IP(src= “ 192. 168. 0. 1”, dst=“ 10. 200. 250. 18”) Podemos trabajar con varios “paquetes” de datos, cada uno en un tipo de capa. Una vez creadas todas las capas, podemos apilarlas, generando un único paquete.
Apilado de capas paquete=Ether(src=“ 00: 0 c: 12: 34: 56”, dst=“ 00: fa: ba: da: 00: 01”)/IP(src=“ 192. 168. 0. 1 ”, dst=“ 10. 200. 250. 18”)
Apilado de capas capa 2=Ether(src=“ 00: 0 c: 12: 34: 56”, dst=“ 00: fa: ba: da: 00: 01”) capa 3=IP(src=“ 192. 168. 0. 1”, dst=“ 10. 200. 250. 18”) paquete=capa 2/capa 3
Visualización Evidentemente, es necesario ver de vez en cuando cómo está el paquete de datos en memoria y si lo hemos generado correctamente. Para visualizar los paquetes en memoria, tenemos 3 comandos: show(), show 2() y hexdump() Sintaxis: p. show() Muestra el paquete en memoria p. show 2() Muestra el paquete rellenando los campos que se deben autogenerar hexdump(p) Vuelca el contenido hexadecimal
Visualización El comando show() nos muestra el contenido del paquete tal y como lo hemos introducido al generarlo. Es una función heredada en cada paquete de datos automáticamente Nombre. Del. Paquete. show()
Visualización El comando show 2() rellena automáticamente los campos que deben autogenerarse al enviarlo, como el checksum, para ver el paquete exacto que saldrá a la red Nombre. Del. Paquete. show 2()
Visualización Mediante hexdump() obtenemos el paquete de datos en formato hexadecimal, tal y como se mostraría en cualquier captura de red. Se le pasa como variable el nombre del paquete de datos
Envío Una vez generado el paquete de datos, es necesario lanzarlo a la red, ya que para ello se ha creado. Podemos enviarlo como paquete de capa 2 o de capa 3, mediante los comandos sendp() y send() respectivamente. Estos comandos, generan automáticamente campos como el Checksum. Se le pasa como variable el nombre del paquete de datos. También podemos enviar varias veces el mismo paquete.
Envío sendp(Nombre. Del. Paquete) sendp(capa 2)
Envío send(Nombre. Del. Paquete) send(capa 3)
Envío send([Nombre. Del. Paquete]*Número. De. Veces) send([capa 3]*10)
Manipulación de archivos Generar tráfico mandando paquetes de uno en uno, es lioso y complicado, aparte de lento. Por ello, podemos cargar una captura hecha con un sniffer, tipo Wireshark o tcpdump. De la misma manera, capturas modificadas con scapy pueden ser guardadas a un archivo pcap. Para ello, disponemos de los comando rdpcap() y wrpcap(). También podemos capturar tráfico directamente con scapy, mediante sniff()
Manipulación de archivos rdpcap(Nombre. Delarchivo) rdpcap(“capt. pcap”)
Manipulación de archivo Para visualizar un único paquete, se trata como a un elemento de un array. Nombre. Del. Array[Numero. De. Paquete]. show() captura[0]. show()
Manipulación de archivo Para guardar un paquete o un conjunto de paquetes en un archivo pcap, usamos wrpcap() Debemos indicar el nombre del archivo y los datos a guardar. wrpcap(Nombre. Del. Archivo, Paquete/Array) wrpcap(“capt 2. pcap”, paquete)
Manipulación de archivo También es posible obtener directamente el tráfico de red con scapy, sin necesidad de importarlo de otros programas, mediante el comando sniff Podemos indicar el número máximo de paquetes queremos recibir o dejarlo obteniendo tráfico hasta pulsar Ctrl+c capturalarga=sniff() capturaacotada=sniff(50)
Manipulación de archivos capturalarga=sniff() capturaacotada=sniff(50)
Edición de paquetes capturados Cuando tenemos una captura completa y queremos modificar algún campo de algún paquete en concreto, tener que generar todo de nuevo mediante comandos sería extremadamente largo y tedioso. Tampoco podemos indicarle de nuevo el mismo protocolo, ya que lo duplicaría en el paquete o eliminaría el resto de capas. Para editar cualquier campo, es necesario indicar el paquete, el protocolo y el campo a editar. Nombre. Del. Paquete[Protocolo]. Campo=Nuevo. Valor
Edición de paquetes capturados paquete[IP]. src=“ 172. 16. 0. 1”
Edición de paquetes capturados capturalarga[0][Ether]. dst=“ff: ff: ff: ff”
Edición de paquetes capturados De esta manera, podemos capturar tráfico entre equipos (STP, HSRP, VRRP…) y replicarlo cambiando valores, para realizar ataques, contraataques, manipulaciones en la elección de servidores, envenenamientos ARP, etc. ) También generar paquetes desde cero para hacer ataques de flooding o de spoofing, ya sea en ARP, DHCP, DNS)
GRACIAS
Footprinting • La fase conocida como Footprinting en un proceso que consiste en la búsqueda y recolección de cualquier tipo de información de un objetivo que pueda ser capturada de forma pasiva, es decir, sin el uso de herramientas que realicen escaneos o ataques de reconocimiento de la plataforma objetivo. La información recolectada puede estar en el contexto publico o privado (información privada que por error u otros factores se ha hecho pública pero que no debería serlo). La fase de footprinting intenta obtener la mayor cantidad de detalles sobre el objetivo con el fin de conocer y aprender mejor su entorno, por ejemplo, en el caso de una organización la información relacionada con servidores, empleados, software instalado, proveedores, sedes, procesos de producción, etc. Puede considerarse como el objetivo de la etapa de footprinting. Se trata de una etapa muy importante en el proceso global de penetración contra un objetivo determinado dado que si un atacante conoce cada detalle de su víctima tendrá más oportunidades de conseguir vectores de ataque muy eficientes y exitosos. Estas son las herramientas: – -Netcraft – -Harverter – -Maltego – -Claves PGP – -Mediante Dorks de buscadores como Google o Bing. • -….
Fingerprinting • Esta etapa, consiste en recolectar información directamente del sistema de una organización, para aprender mas sobre su configuración y comportamiento. Esta etapa es aconsejable realizarla en una auditoría autorizada, ya que supuestamente el “atacante” tiene permisos para realizar dicha acción. • Para realizar dicha recogida de información del sistema debemos conocer algunas de las herramientas utilizadas en estos casos. • Las herramientas son estas: • -nmap • -nbtscan • -Mediante módulos auxiliares con Metasploit. • -…. .
- Slides: 36