scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/main/pr...scapy:...

29
Scapy: outil de manipulation avancée des paquets réseaux Nesrine Ammar – ProgRes 2018 [email protected]

Upload: others

Post on 08-Sep-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Scapy:outildemanipulationavancéedespaquetsréseaux

NesrineAmmar– ProgRes [email protected]

Page 2: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Objectivesdemanipulationdespaquetsréseaux

Packet forging tool

Forgedespaquetsetenvoientlesdansleréseaux

Sniffing tool

Capturedespaquetsréseaux

Testing tool

Essayederépondreàunequestionprécise(oui/non)ex.ping

Page 3: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Objectivesdemanipulationdespaquetsréseaux

Scanningtool

Fairedestestsutilisantdifférentsparamètres

Fingerprintingtool

Fairedestestsprédéfinisafindediscriminerunpair

Attacking tool

Utilisedesvaleursinattendusd’unprotocole

Page 4: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Bibliothèqued’analysedetrafic

Pcap• Interfacedeprogrammation(API)permettantdecapturerletraficréseau• ImplémentésousUnixetMacOSparlabibliothèqueLibpcap etsouswindows parlabibliothèqueWinpcap

Libpcap et winpcap:• Assure le filtrage, la capture et l’analyse de paquets,• Supporte plusieurs protocoles: IP(), UDP(), DNS(), DHCP(), HTTP()…

Page 5: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Libpcap

ProgrammeutilisantLibpcap:• Tcpdump• Wireshark• Nmap

Bibliothèqued’enveloppepourLibpcap(wrapper librairies):• Python:pylibpcap,scapy• Java:jpcap,jNetPcap• Ruby:PacketFu…

Page 6: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Python

• Thisisan int (signed,32bits):42• Thisisalong (signed,infinite):42L• Thisisastr :"bell\x07\n"or’bell\x07\n’("⇐⇒ ’)• Thisisatuple :(1,4,"42")• Thisisalist :[4,2,"1"]• Thisisadict :{"one":1,"two":2}

Page 7: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Python

Ifcond1:instrinstr

Elif cond2:instr

Elseinstr

Try:instr

Except exception:instr

Elseinstr

Forvarinset:instr

Def func(x):ifx==0:return1

elsereturnx*2

While cond:instrinstr

Page 8: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Scapy

Unoutildemanipulationavancéedespaquetsréseaux,écritenpython

Objectives:

IntercepterletraficsurunsegmentréseauGénérerdespaquetsRéaliseruneprised’empreinte(fingerprinting)FaireunetracerouteAnalyserletraficréseau…

Page 9: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Scapy• Pointsforts:LangageinteractifdehautniveauForgeetanalysedepaquetstrèssimplesPasse lefirewalllocal

• Pointsfaibles :Fournitlesrésultatsbruts,nelesinterprètepasSupportpartieldecertainsprotocolescomplexes

Page 10: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Scapy

Listedecouches

>>>ls()ARP:ARPDHCP:DHCPoptionsDNS:DNSDot11:802.11[...]

Listedecommandes

>>>lsc()sr :Sendandreceivepacketsatlayer3sr1:Sendpacketsatlayer3andreturnonlythefisrp :Sendandreceivepacketsatlayer2[...]

Valeurspardéfautpourlepacket IP

>>>ls(IP)version:BitField =(4)ihl :BitField =(None)tos :XByteField =(0)len :ShortField =(None)id:ShortField =(1)flags:FlagsField =(0)frag:BitField =(0)ttl :ByteField =(64)proto:ByteEnumField =(0)chksum :XShortField =(None)src :Emph =(None)dst :Emph =(’127.0.0.1’)options:IPoptionsField =(’’)

Page 11: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Scapy• Chaquepaquetestcréecoucheparcouche• Chaquecouchepeutêtreempilersuruneautre• Chaquecoucheetchaquepaquetpeuventêtremanipulésindépendamment• Chaquechampdansl’entêtedesprotocolespossèdeunevaleurpardéfaut• Chaquechamppeutcontenirunevaleurouplusieursàlafois

>>>a=IP(dst="www.target.com",id=0x42)>>>a.ttl=12>>>b=TCP(dport=[22,23,25,80,443])>>>c=a/b

Page 12: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Scapy:valeurspardéfaut

• IPsourceestchoisieselonl’adressedestinationetlatablederoutage• Lavaleurdechecksumestcalculée• MACsourceestchoisieselonl’interfacedesortie• LetypedupaquetEthernetetleprotocoleIPestchoisieselonlescouchessupérieures• …D’autreschampslesplusutilisés:• PortTCPsourceest20,TCPdestinationest80• PortUDPsourceetdestinationest53• LetypedeICMPestecho request• …

Page 13: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Créationd’unetrame>>>ma_trame =Ether()>>>ma_trame.show()###[Ethernet]###WARNING:Macaddresstoreachdestinationnotfound.Usingbroadcast.dst=ff:ff:ff:ff:ff:ffsrc=00:00:00:00:00:00type=0x0>>>

>>>ma_trame =Ether(dst='00:19:4b:10:38:79')>>>

Page 14: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Sniffer

>>>rep=sniff(filter="host192.168.1.10")>>>

$ ping 192.168.1.10 -c 1

>>>rep.show()0000Ether/IP/ICMP192.168.1.14>192.168.1.10echo-request0/Raw0001Ether/IP/ICMP192.168.1.10>192.168.1.14echo-reply0/Raw>>>

Page 15: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Ecrireetlireunfichierpcap

>>>wrpcap(‘file_name.pcap’,packet)>>>

>>> packet<Etherdst=00:19:4b:10:38:79src=00:26:5e:17:00:6etype=0x800 |<IPversion=4L ihl=5L tos=0x0 len=64id=37095 flags=DF frag=0L ttl=64 proto=udp chksum=0x2666 src=192.168.1.14 dst=192.168.1.1options=[]|<UDPsport=38897 dport=domain len=44 chksum=0x65a |<DNSid=28184qr=0Lopcode=QUERY aa=0L tc=0L rd=1L ra=0L z=0L rcode=ok qdcount=1 ancount=0 nscount=0 arcount=0qd=<DNSQRqname='www.siteduzero.com.'qtype=Aqclass=IN |>an=Nonens=Nonear=None|>>>>

>>>packet=rdpcap(‘file_name.pcap’)

>>>packet[Ether].dstà adressemacdstPacket[IP].dstà adresseip dst

Page 16: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Navigationentrelescouchesréseaux

àPermetdevérifierlaprésencedelacoucheUDPàPermetderetournerlacouchedemandée(UDP)àLecodeestindépendantdescouchesinférieures

If UDPinpkt:print pkt[UDP].chksum

If pkt.haslayer(UDP):print pkt[UDP].chksum

Page 17: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

CalculerlenombredepaquetsUDP

#!/usr/bin/pythonFrom scapy.all import *

Def compter(filename):nb_paquets =0file=rdpcap(filename)for pkt infile:if pkt.haslayer(UDP):nb_paquets+=1

print nb_paquets

compter(‘captures.pcap’)

Page 18: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Pourunevuedéveloppéedupaquet

#!/usr/bin/pythonFrom scapy.all import *

def afficher_tcp(filename):file=rdpcap(filename)for pkt infile:if pkt.haslayer(TCP):pkt.show()break:

afficher_tcp(‘captures.pcap’)

Page 19: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Pourunevuedéveloppéedupaquet

Page 20: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Pourunevuedéveloppéedupaquet

Flag=SYN

Adressedestination

Adressesource

VersionIP

Portsource

Portdestination

Page 21: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

AffichersportdupremierpaquetTCP

#!/usr/bin/pythonFrom scapy.all import *

File=rdpcap(‘captures.pcap’)for pkt infile:try:if pkt.haslayer(TCP):print pkt[TCP].sportbreak:

Page 22: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Scapy:commandes

Page 23: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Sprintf()

Grâceàlamethode sprintf():• Créernotreproprerésumédupaquet• Extrairelesdifférentescouchesetfocalisersurleschampsnécessaires

• “%”,“{”and“}”sont descaractères spéciaux• Ils sont remplacés par“%%”,“%(”and“%)”

>>>pkt =IP(dst="192.168.8.1",ttl=12)/UDP(dport=123)>>>pkt.sprintf("Thesourceis%IP.src%")’Thesourceis192.168.8.14’

Page 24: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

pdfdump()

>>>pkt.pdfdump()

Page 25: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Summary()

>>>file=rdpcap("test.pcap")>>>pkt =file[0]>>>pkt.summary()Ether/IP/TCP42.2.5.3:3021>192.168.8.14:22PA/Raw

>>>bytes(pkt[IP])b'E\x00\x00\x14\x00\x01\x00\x00@\x00|\xe7\x7f\x00\x00\x01\x7f\x00\x00\x01'

Bytes()

Page 26: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Hexdump()

Lafonctionhexdump()donneunereprésentationhexadécimaledupaquet(ainsiqu'unereprésentationASCII)ets'utiliseainsi:

>>>hexdump(packet)

000000194B10387900265E17006E08004500..K.8y.&^..n..E.0010004090E7400040112666C0A8010EC0A8.@..@.@.&f......0020010197F10035002C065A6E1801000001.....5.,.Zn.....0030000000000000037777770A7369746564.......www.sited0040757A65726F03636F6D0000010001uzero.com.....

Page 27: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Python:CSV

importcsv

withopen('example.csv',newline='')asFile:

reader=csv.reader(File)

forrowinreader:

print(row)

Page 28: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Python:CSVimportcsv

myData =[["first_name","second_name","Grade"],

['Alex','Brian','A'],

['Tom','Smith','B']]

myFile =open('example2.csv','w')

withmyFile:

writer=csv.writer(myFile)

writer.writerows(myData)

print("Writingcomplete")

Page 29: Scapy: outil de manipulation avancée des paquets réseauxtixeuil/m2r/uploads/Main/PR...Scapy: valeurs par défaut •IP source est choisie selon l’adresse destination et la table

Python:CSV