Tcpdump: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: =Geschichte= Tcpdump ist die bekannteste Software zur Überwachung und Auswertung von Netzwerkverkehr. Sie wurde von Van Jacobson, Craig Leres und Steven McCanne geschr...) |
|||
Zeile 124: | Zeile 124: | ||
!Match | !Match | ||
|- | |- | ||
− | | | + | |host IP |
|IP-Adresse | |IP-Adresse | ||
|- | |- | ||
− | | | + | |port PORT |
|Port-Nummer | |Port-Nummer | ||
|- | |- | ||
− | | | + | |net NET/CIDR |
|Netz und Netznummer in CIDR Schreibweise | |Netz und Netznummer in CIDR Schreibweise | ||
|- | |- | ||
− | | | + | |src <nowiki>(host IP|port PORT|net NET/CIDR)</nowiki> |
|Quellen IP-Adresse, Port-Nummer oder Netz | |Quellen IP-Adresse, Port-Nummer oder Netz | ||
|- | |- | ||
− | | | + | |dst <nowiki>(host IP|port PORT|net NET/CIDR)</nowiki> |
|Ziel IP-Adresse,Port-Nummer oder Netz | |Ziel IP-Adresse,Port-Nummer oder Netz | ||
|- | |- | ||
− | | | + | |! oder not |
|Negation | |Negation | ||
|- | |- | ||
− | | | + | |&& oder and |
|Und Verknüpfung | |Und Verknüpfung | ||
|- | |- | ||
− | | | + | |<nowiki>|</nowiki> oder or |
|Oder Verknüpfung | |Oder Verknüpfung | ||
|} | |} |
Version vom 1. August 2011, 11:19 Uhr
Geschichte
Tcpdump ist die bekannteste Software zur Überwachung und Auswertung von Netzwerkverkehr. Sie wurde von Van Jacobson, Craig Leres und Steven McCanne geschrieben, wird aber mittlerweile von vielen anderen weiterentwickelt. Tcpdump arbeitet im Textmodus und wird über die Kommandozeile gesteuert.
Verfügbarkeit
Tcpdump ist verfügbar für die meisten Unix-Systeme und Unix-Derivate und wird von vielen Herstellern bereits im Grundsystem mitgeliefert. Für Windows steht die Portierung WinDump zur Verfügung. Aufgrund des direkten Zugriffs auf die Hardware, benötigt der Benutzer zur Ausführung der Software unter Unix und vielen anderen Systemen die privilegierten Rechte des root-Benutzers.
Möglichkeiten
Das Programm liest Daten in Form von Paketen, die über das Netzwerk gesendet werden und stellt diese auf dem Bildschirm dar oder speichert sie in Dateien. Durch die Umstellung eines Netzwerkadapters in den Promiscuous Mode ist es darüber hinaus möglich, Pakete die nicht für diesen Netzwerkadapter bestimmt sind, zu empfangen und auszuwerten.
Zusätzlich ermöglicht tcpdump die Auswertung von vorher in Dateien gespeicherten Paketen. Mittels Parametern, die bei Programmstart auf der Kommandozeile angegeben werden müssen, steuert der Benutzer das Verhalten von tcpdump und übergibt Filter an das Programm, nach denen die Pakete ausgewertet werden.
Anwendungsbereiche
Haupteinsatzgebiete von tcpdump sind:
- Fehlersuche in Programmen, die über das Netzwerk kommunizieren.
- Fehlersuche im Netzwerkaufbau selbst.
- Aufzeichnung und Darstellung der Kommunikation anderer Benutzer und Computer. Benutzern, die Zugriff auf Router oder Gateways innerhalb eines Netzwerkes haben, wird es hiermit ermöglicht, die Kommunikation zwischen verschiedenen Teilnehmern des Netzwerkes zu überwachen und mitzuschneiden. Da einige Protokolle ihre Übertragung unverschlüsselt abwickeln, ist es auf diese Weise möglich, Passwörter und Benutzerdaten aus dem Netzwerk zu erhalten.
Benutzung
Standartmäßig fängt tcpdump alle Pakete ab die von der niedrigst nummerierten Netzwerkschnittstelle irgendwohin gehen oder empfangen werden mit einer maximalgröße von 96 bytes bis man es mit STRG+C abbricht:
root@zero:~# tcpdump tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 12:05:16.338867 IP zero.alpha.quadrant.48309 > rr.esams.wikimedia.org.www: P 1:463(462) ack 1 win 92 <nop,nop,timestamp 45865445 47813930> 12:05:16.361841 IP rr.esams.wikimedia.org.www > zero.alpha.quadrant.48309: . ack 463 win 14 <nop,nop,timestamp 47813933 45865445>
Da tcpdump viel zuviele Pakete aufzeichnet um in Echtzeit etwas damit anfangen zu können muss man es über Optionen steuern.
Standartoptionen
Einige der Optionen die sich mit jeder Benutzung von tcpdump als hilfreich erweisen sind:
-s | size | Legt die Maximale Größe der abgefangenen Pakete fest. Empfohlener Wert is 1500 bytes, das entspricht der maximalen Paketgröße eines Ethernet-Pakets |
-c | count | Bestimmt die Anzahl an Paketen die abgefangen werden sollen |
w | write | Speichert die Ausgabe in einer Datei. Da tcpdump eine Menge Daten abfängt, ist es oft ratsam die Daten in einer Datei unterzubringen |
-r | read | Liest mit tcpdump erstellte Dateien |
-n | numeric | Versucht nicht IP-Adressen in Hostnamen umzuwandeln, das beschleunigt die Ausgaberate erheblich |
-t | time | Entfernt den Zeitstempel am Anfang jedes Pakets. Steigert die Übersichtlichkeit fals man nicht an Zeitstempeln interessiert ist |
Beispiele:
Schreiben aller Pakete in eine Datei:
root@zero:~# tcpdump -w traffic.cap tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
Schreiben von 100 Paketen mit einer maximalen Größe von 1500 byte in eine Datei:
root@zero:~# tcpdump -c 100 -s 1500 -w traffic.cap tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes
Lesen der Datei:
root@zero:~# tcpdump -r traffic.cap reading from file traffic.cap, link-type EN10MB (Ethernet) 14:02:53.324049 IP zero.alpha.quadrant.48309 > 192.168.255.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST 14:02:53.597526 IP zero.alpha.quadrant.48309 > 192.168.255.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
Gefiltertes Lesen der Datei:
root@zero:~# tcpdump -ntr traffic.cap reading from file traffic.cap, link-type EN10MB (Ethernet) IP 192.168.242.12.43045 > 192.168.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST IP 192.168.242.12.43045 > 192.168.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
Weitere Optionen
-A | ASCII | Zeigt die Pakete ohne ihre Header in ASCII an |
-D | Devices | Zeigt eine Liste der Netwerkschnittstellen an auf denen tcpdump laufen könnte |
-e | ethernet | Zeigt den Ethernet Header jedes Pakets an |
-i | interface | Tcpdump benutzt das angegebene Interface ( -i eth0 ) |
-p | promiscuous | Tcpdump fängt nur Pakete ab die auch für den Rechner bestimmt sind |
-q | quick | Zeigt weniger Protokoll-Informationen |
-v | verbose | Zeigt mehr Informationen an, steigerbar bis -vvv |
Filter
Da man jetzt immernoch mit allen Pakete die in unserer Netzwerkkarte so ankommen zu kämpfen hat, hat man unter vielen anderen folgende Filter-Optionen zur Hand:
Optionen
Filter | Match |
---|---|
host IP | IP-Adresse |
port PORT | Port-Nummer |
net NET/CIDR | Netz und Netznummer in CIDR Schreibweise |
src (host IP|port PORT|net NET/CIDR) | Quellen IP-Adresse, Port-Nummer oder Netz |
dst (host IP|port PORT|net NET/CIDR) | Ziel IP-Adresse,Port-Nummer oder Netz |
! oder not | Negation |
&& oder and | Und Verknüpfung |
| oder or | Oder Verknüpfung |
Nach IP-Adressen/Domains filtern
Um nach einer bestimmten IP-Adresse oder Domain zu filtern muss man sie mit mit host angeben
root@zero:~# tcpdump -nts 1500 host 192.168.247.222
Tcpdump filtert nun den Verkehr so das entweder der Sender oder der Empfänger unsere IP-Adresse ist.
Man kann aber auch diese 2 getrennt festlegen mit src und dst vor dem jeweiligen host, man muss sie alerdings wie alle Filter-Optionen mit z.B. and voneinander abgrenzen.
root@zero:~# tcpdump -nts 1500 src host 192.168.247.222 and dst host www.google.de
Jetzt sehen wir nurnoch Pakete die von uns an den bestimmten host gesendet werden.
Nach Ports filtern
Will man darüber hinaus den Traffic auf einen bestimmten Port begrenzen, so kann man das mit port (welches auch dem src/dst prinzip folgt):
root@zero:~# tcpdump -nts 1500 src host 192.168.247.222 and dst host www.google.de and port 80
Wenn Sie ein anderes Protokoll, als das standardmäßig eingesetzte TCP verwenden möchten, können Sie dies ebenfalls angeben mit :
root@zero:~# tcpdump -nts 1500 src host 192.168.247.222 and dst host www.google.de and udp port 80
Jetzt sehen wir nurnoch den Traffic der von uns an www.google.de über den HTTP-Port geht und das sieht dann so aus:
root@zero:~# tcpdump -nts 1500 src host 192.168.247.222 and dst host www.google.de and port 80 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes IP 192.168.247.222.58031 > 209.85.227.147.80: P 3171948303:3171948924(621) ack 4293284400 win 1002 <nop,nop,timestamp 46815127 2256160305> IP 192.168.247.222.58031 > 209.85.227.147.80: . ack 1419 win 1002 <nop,nop,timestamp 46815155 2256167438>
Nach Netzen filtern
Hier werden die Netze 192.168.200.0 bis 192.168.207.255 angezeigt
root@zero:~# tcpdump -ni eth0 net 192.168.200.0/21
Hier werden die Ziel Netze 192.168.200.0 bis 192.168.207.255 angezeigt
root@zero:~# tcpdump -ni eth0 dst net 192.168.200.0/21
Nach Flags filtern
Um die Filter jetzt noch zu vertiefen sollte man sich mit den Protokoll Headern auskennen.
Wenn man jetzt z.B. nur die Pakete sehen will in denen Daten gesendet werden, muss man sie nach dem PUSH-Flag filtern, und das geht mit dem Zusatz:
tcp[13] == 8
Das bedeutet tcpdump soll ein Paket nur anzeigen wenn das 13te Oktet des tcpheaders 8 ergibt.
Da das aber bedeuten würde das keine Pakete angezeigt werden bei denen PUSH mit irgendwelche anderen Flags aktiv ist, müssen wir das Oktett mit 8 verUNDen um das gewünschte Ergebnis zu erzielen:
'tcp[13] & 8 == 8'
Man beachte die ' Zeichen um den Filter die dazu dienen das tcpdump das & auch anerkennt.
Fallbeispiel
Wir wollen jetzt versuchen herauszufinden nach welchen Worten denn so gegoogelt auf unserem Rechner. Also fangen wir an den Verkehr beliebig lange in einer Datei zu speichern damit wir ihn anschließend ohne viel Stress filtern können.
root@zero:~# tcpdump -s 1500 -w beispiel.cap tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes 199 packets captured 199 packets received by filter 0 packets dropped by kernel
Nachdem wir jetz nach ein paar Worten gegoogelt haben machen wir uns an die Arbeit. Zuerst einmal stellen wir mit dem Host-Filter klar das wir Pakete die von uns kommen sehen wollen.
root@zero:~# tcpdump -ntr beispiel.cap src host 192.168.247.222
Das sind aber noch viel zu viele Pakete deswegen addieren wir die Ziel-Adresse
root@zero:~# tcpdump -ntr beispiel.cap src host 192.168.247.222 and dst host www.google.de
Das sollte das Ergebnis schon einigermaßen eingegrenzt haben.
Als nächstes fügen wir noch hinzu das wir Pakete die Daten enthalten suchen, durch den Flag-Filter
root@zero:~# tcpdump -ntr beispiel.cap src host 192.168.247.222 and dst host www.google.de and 'tcp[13] & 8 == 8'
Wir sehen nurnoch die Pakete die Daten enthalten in der Ausgabe. Aber noch nicht die Daten. Das ist machbar mit der Option -A, die die Pakete in ASCII anzeigt.
root@zero:~# tcpdump -Antr beispiel.cap src host 192.168.247.222 and dst host www.google.de and 'tcp[13] & 8 == 8'
Damit sind wir unserem Ziel greifbar Nahe.
Wenn man sich das Ergebnis ansieht kann man schon ein Muster und unsere gesuchten Worte erkennen kann.
Jetzt nurnoch unsere tcpdump Ausgabe mit einer Pipe durch grep laufen lassen und wir haben was wir wollten:
root@zero:~# tcpdump ... | grep search reading from file beispiel.cap, link-type EN10MB (Ethernet) ......U(GET /search?hl=de&q=baum&btnG=Suche&meta= HTTP/1.1 Referer: http://www.google.de/search?hl=de&q=auto&btnG=Suche&meta= Referer: http://www.google.de/search?hl=de&q=baum&btnG=Suche&meta= ......X2GET /search?hl=de&q=haus&btnG=Suche&meta= HTTP/1.1 Referer: http://www.google.de/search?hl=de&q=baum&btnG=Suche&meta= Referer: http://www.google.de/search?hl=de&q=haus&btnG=Suche&meta= ......`.GET /search?hl=de&q=auto&btnG=Suche&meta= HTTP/1.1 Referer: http://www.google.de/search?hl=de&q=haus&btnG=Suche&meta= Referer: http://www.google.de/search?hl=de&q=auto&btnG=Suche&meta=
Hier sieht man deutlich die benutzten Worte heraus.