Scapy - Dirk Loss | Personal...

34
Scapy Experimentieren mit Netzwerkpaketen Dirk Loss pyCologne, 2010-01-13 1

Transcript of Scapy - Dirk Loss | Personal...

Page 1: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

ScapyExperimentieren mit Netzwerkpaketen

Dirk Loss

pyCologne, 2010-01-13

1

Page 2: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Wer kennt

Wireshark?

2

Page 3: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Was ist Scapy?

Sniffer

Paketgenerator– ähnlich hping2, nemesis, ...

Python-Library + interaktiv nutzbar

>>> _

3

Page 4: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Wozu?

Experimentieren mit Netzwerkprotokollen auf Paketebene– Sicherheitstests

– TCP/IP lernen in der Praxis

4

Page 5: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Analyse des Skype Protokolls[Biondi, Desclaux 2006]

5http://www.heise.de/newsticker/meldung/Skype-unter-die-Lupe-genommen-111559.html

Page 6: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

IPv6 Type 0 Routing Header DoS[Biondi, Ebalard 2007]

https://www.kb.cert.org/vuls/id/267289

6

Page 7: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Grundfunktionen

Dekodieren Sniffen

SendenBauenObj → Str

Str → Obj

Netz

7

Page 8: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Demo

8

Page 9: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Bauen

Objekte instanziieren– IP(dst='192.168.1.1')

Verschachteln– Ether()/IP()/UDP()/DNS()

Scapy wandelt in Strings um– Default Werte werden einsetzt, Layer für Layer

– Checksummen, Längen, etc. werden berechnet

9

Page 10: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Sniffen und Dekodieren

10

Page 11: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Sniffen und Dekodieren

sniff()

Empfangene Bytes werden als String an Objekt-Konstruktoren übergeben– Ether('\x00\x1cJ\x1d\xad\xc9\x00"\xfb%\x14\xf6\x08\x00E\x00\x0

0\x14\x00\x01\x00\x00@\x00z\xc5\xc0\xa8\xb2+\xd8"\xb5-‘)

Überschüssige Bytes sind Payload– Wird rekursiv ebenfalls dekodiert

– Automatische Ermittlung des Objekttyps anhand des darüberliegenden Layers

11

Page 12: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Senden

Intern grundsätzlich auf Layer 2– PF_PACKET oder libdnet

Bei Senden auf Layer 3 generiert Scapyden Layer 2 selbst– Auswahl des Netzwerkinterfaces

• conf.route

– ARP Anfrage• conf.netcache.arpcache

12

Page 13: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Funktionen zum Senden

Layer 3

send()

sr()

sr1()

srloop()

srflood()

Layer 2

sendp()

srp()

srp1()

srploop()

srpflood()

13

Senden

Senden/Erste Antwort empfangen

Senden/Empfangen

Loop

Flooding

Page 14: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

sr1()

14[PacSec05]

Page 15: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Rückgabewerte von sr()

15

Page 16: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

High-Level Funktionen

arping()

traceroute()

get_mac_by_ip()

tshark()

...

16

Page 17: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

traceroute()

17[PacSec05]

Page 18: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

arping()

18[PacSec05]

Page 19: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

High-Level Funktionenauf Paketen/Paketlisten

p.conversations()

p.plot()

p.pdfdump()

p.make_table()

...

19

Page 20: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

.conversations()

20[PacSec05]

Page 21: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Werkzeuge

hexdump(), hexedit()

rdpacp(), wrpcap()

fragment()

fuzz()

...

21

Page 22: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Fortgeschrittene Features

IPv6 SNMP und ASN.1

Automaten

22

Page 23: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Internes

PacketList

Packet

Layer

Field

23

Page 24: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Aufbau eines IP Pakets

24[PacSec05]

Page 25: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Eigene Layer implementieren

25[PacSec05]

Page 26: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Nachteile

Geringe Performance

TCP basierte Protokolle umständlich– Kein Zusammensetzen von TCP-Streams

– TCP/IP Stack weiß nichts von Scapy

Relativ wenige Layer implementiert– zumindest im Vergleich mit Wireshark...

26

Page 27: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Das Projekt

Philippe Biondi

Mercurial Repositories

Trac für Bugtracking und Wiki

Mailingliste

27

Page 28: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Quellcode

GNU GPL v2

~28.000 Zeilen Python Code– inkl. Kommentare, etc.

Seit Scapy v2 aufgeteiltin mehrere Module– Problem: Zirkuläre Imports

28

Page 29: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Scapy und ich...

Nutzer seit ~2005

Windows Port, seit 2007

Dokumentation

OSPF Extension

Bug fixes

29

Page 30: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Fazit

Flexibles Werkzeug zum Manipulieren von Netzwerkpaketen– Für Security Tests oder zum Lernen

– Ersetzt viele Spezialtools

Python als Domain Specific Language– Elegante Definition neuer Layer

– Integration in eigene Programme

30

Page 31: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Vielen Dank für die Aufmerksamkeit!

Dirk Loss

mail at dirk-loss de

http://dirk-loss.de

http://twitter.com/dloss

31

Page 32: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Links

Scapy-Homepage– http://www.secdev.org/projects/scapy/

Wiki, Mercurial-Repository– http://trac.secdev.org/scapy

– http://hg.secdev.org/scapy/

Mailingliste– http://news.gmane.org/gmane.comp.security.scapy.general

– scapy.ml-subscribe at secdev org

32

Page 33: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Quellen

[PacSec05]:

Philippe Biondi: Network packet forgery with Scapy http://www.secdev.org/conf/scapy_pacsec05.pdf

33

Page 34: Scapy - Dirk Loss | Personal Homepagedirk-loss.de/scapy/Scapy_pyCologne_2010-01-13_DirkLoss_v1.1.pdf · Wozu? Experimentieren mit Netzwerkprotokollen auf Paketebene –Sicherheitstests

Dieses Werk ist unter einem Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenzvertrag lizenziert. Um die Lizenz anzusehen, gehen Sie bitte zu http://creativecommons.org/licenses/by-sa/3.0/de/ oder schicken Sie einen Brief an Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.