Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Scapy: come creare e manipolare pacchetti di rete

Scapy è un tool in grado di creare pacchetti di rete, molto utile per effettuare penetration test ed effettuare attacchi mirati.
Scapy è un tool in grado di creare pacchetti di rete, molto utile per effettuare penetration test ed effettuare attacchi mirati.
Link copiato negli appunti

Scapy è un tool scritto in Python per la manipolazione dei pacchetti di rete. Con Scapy potremo assemblare o decodificare i pacchetti di un ampio numero di protocolli, inviarli, catturarli, filtrare richieste e risposte, e molto altro ancora.

Per l'utilizzo di Scapy sono richieste delle competenze nei seguenti ambiti:

  • conoscenza base dei protocolli di rete;
  • conoscenza base di Python;
  • conoscenza base di Unix;

Scapy non ha uno scopo principale, serve per diversi motivi dal testare la sicurezza della propria rete all'analisi di rete, tracerouting, probing, network discovery. Scapy supporta l'invio di invalid frames, l'iniezione di propri frames 802.11, l'ARP cache poisoning, la decodifica di un canale WEP crittato, etc. Per installare Scapy da source su una distro Debian like bastano pochi comandi:

sudo apt-get install -y tcpdump graphviz imagemagick python-gnuplot python-crypto python-pyx
cd
mkdir scapy-src
cd scapy-src
wget http://www.secdev.org/projects/scapy/files/scapy-latest.zip
unzip scapy-latest.zip
cd scapy-2.*
sudo python setup.py install

Se siete su Archlinux, potete installare scapy con i seguenti comandi:

su -
pacman -Syu python-scapy

Sempre una distro Debian like, esiste anche il pacchetto già pre-compilato, installabile con il seguente comando:

sudo apt-get install python-scapy

Questo tool di sicurezza è presente anche nelle principali distribuzioni di sicurezza, come BackBox.

Scapy può essere utilizzato da shell interattiva oppure come modulo python. Per utilizzare Scapy nei nostri script in python basterà importarlo con il seguente comando:

from scapy.all import *

Per utilizzare scapy da shell basta digitare il seguente comando:

sudo scapy

Una volta lanciato il comando, avremo a disposizione una shell interattiva. Per visualizzare un elenco di comandi scapy, è possibile lanciare il comando:

lsc()

Per avere ulteriori informazioni sul comando basta utilizzare la funzione help, con in argomento il comando di cui vogliomo avere altre info. Un esempio:

help(arping)

Per visualizzare tutti i protocolli supportati da Scapy, digitiamo:

ls()

Passando alla stessa funzione come argomento il nome di un layer, si ottiene invece la lista dei suoi specifici campi:

ls(ARP)

Scapy

Ad ogni istanza di Scapy vengono settate delle impostazioni di default. Per vedere le impostazioni di default basta digitare:

conf

Per modificare una di questi settaggi basta digitare conf.NOME_SETTAGGIO = NUOVO VALORE esempio:

conf.iface='wlan0'

Un pacchetto di rete è suddivisibile in layers separati, e ciascuno di essi viene rappresentato da una istanza Python, perci? la manipolazione avviene tramite gli attributi ed i metodi di tale istanza. La creazione di un pacchetto avviene attraverso la creazione di una pila di tante istanze quanti sono i layers coinvolti.
Ogni layer viene separato dal carattere "/". Per capire se è attivo uPNP su un certo dispositivo basta creare un nuovo pacchetto UDP.

ipInput = "192.168.0.1"
ip = IP();
ip.dst="%s" % ipInput
udp = UDP();
udp.dport= 1900
udp.sport= RandShort();
data="M-SEARCH * HTTP/1.1rnHost:%s:1900rnST: upnp:rootdevicernMan:"ssdp:discover"rn" % ipInput
risp=sr1(ip/udp/data,verbose=0);
risp.display();

Come si può vedere, viene creato il pacchetto IP() a cui viene definita la destinazione. Dopo viene creato il pacchetto UDP, con porta di destinazione 1900 e la porta sorgente random. Come dati mandiamo:

M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MAN: ssdp:discover
MX: 10
ST: ssdp:all

Per maggiori informazioni vi mando alla pagina di Wikipedia. Una volta eseguito lo script, se il dispositivo supporta uPNP avremo un output simile a questo:

###[ IP ]###
  version   = 4L
  ihl       = 5L
  tos       = 0x0
  len       = 290
  id        = 2382
  flags     =
  frag      = 0L
  ttl       = 255
  proto     = udp
  chksum    = 0x2d93
  src       = 192.168.1.1
  dst       = 192.168.1.152
  options
###[ UDP ]###
     sport     = 1900
     dport     = 44812
     len       = 270
     chksum    = 0x850d
###[ Raw ]###
        load      = 'HTTP/1.1 200 OKrnST:upnp:rootdevicernUSN:uuid:11111111-0000-c0a8-0101-000cf6312ddf::upnp:rootdevicernLocation:http://192.168.1.1:80/DeviceDescription.xmlrnCache-Control:max-age=480, no-cache="Ext"rnServer:Allegro-Software-RomUpnp/4.07 UPnP/1.0 IGD/1.00rnExt:rnrn'

Per visualizzare un pacchetto, basta digitare il suo nome seguito dalla funzione display().
Ad esempio:

  • La funzione sr() si occupa proprio di inviare pacchetti e ricevere pacchetti in risposta.
  • La funzione sr1() ne costituisce una variante che ritorna solamente il primo pacchetto di risposta.
  • Le funzioni srp() e srp1() operano allo stesso modo per i pacchetti layer 2 (Ethernet, 802.3, etc.).
  • La funzione sendp() invia un pacchetto di layer 2.
  • La funzione send() un pacchetto di layer 3.
  • Le funzione send() e sendp() non ricevono pacchetti.

Scapy è un tool molto potente e utilizzato spesso, sul Web sono presenti diversi tutorial, utili a capire come funziona la rete. Ecco alcuni video sull'utilizzo di Scapy in BackBox:

Ti consigliamo anche