Warum schreibt tcpdump keine pcap-Datei?

8

Beim Debuggen eines Python-IRC-Bots, der scheinbar keine Verbindung herstellen kann, dachte ich: "Ich weiß, ich werde es einfach tcpdumpen und sehen, was es tut." Also habe ich tcpdump wie gewohnt ausgeführt und es heißt, es sind erfasste Pakete, aber die Cap-Datei wird nicht geschrieben.

akraut@lance ~/pcaps $ sudo tcpdump -w pyhole -s 0 "port 6667"
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C17 packets captured
17 packets received by filter
0 packets dropped by kernel
4294966881 packets dropped by interface
akraut@lance ~/pcaps $ ls -la
total 8
drwxr-xr-x 2 akraut akraut 4096 Feb  6 11:50 .
drwxr-xr-x 8 akraut akraut 4096 Feb  6 11:50 ..
akraut@lance ~/pcaps $ 
akraut
quelle
Was passiert, wenn Sie ihm einen absoluten Weg geben?
Massimo
Ist der Bot verbunden eth0? Wenn der Loopback oder eine andere Schnittstelle verwendet wird, muss kein Datenverkehr in die Datei ausgegeben werden.
Chris S
1
@ Chris-s Wenn es zeigt, 17 packets received by filterheißt das nicht, dass es etwas Verkehr erfasst hat?
Akraut
@Massimo Versucht, sowohl ./blah als auch / blah anzugeben, und keiner hat eine Datei geschrieben.
Akraut

Antworten:

11

Vielleicht möchten Sie das Verhalten von tcpdump mit strace überprüfen, um festzustellen, ob es etwas Seltsames wie Chrooting tut, ob es sich um eine Gentoo-Distribution oder eine andere Distribution handelt, die die Binärdateien in Frage stellt.

Justin Lynn
quelle
Ah ja. Wenn man sich das Ebuild ansieht, scheint es Privs fallen zu lassen und sich darin niederzulassen /var/lib/tcpdump. Und siehe da, da liegen alle meine Cap-Dateien.
Akraut
10

Ok, ich habe das Rätsel gelöst. Folgen Sie mir, während wir Funtoos TCPDump und das Geheimnis der fehlenden PCAP-Datei enträtseln .

Ich habe Strace verwendet, um zu sehen, was los ist und die relevanten Zeilen sind:

chroot("/var/lib/tcpdump")              = 0
chdir("/")                              = 0
--- SNIP ---
open("/tmp/lol.wat", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 ENOENT (No such file or directory)

Damit...

lance ~ # ls /var/lib/tcpdump/
blah  blah.cap  irc.cap  pyhole

Guck mal! Alle Cap-Dateien, die ich erstellt habe!

Nachdem ich mir die Use Flags angesehen habe, mit denen tcpdump standardmäßig erstellt wurde, sehe ich Folgendes:

lance ~ # grep tcpdump /usr/portage/profiles/use*desc
use.local.desc:net-analyzer/tcpdump:chroot - Enable chrooting when dropping privileges

Warum also so? Meine Theorie geht ungefähr so:

  1. Viele Anwendungen, die mit dem unformatierten Netzwerkverkehr interagieren, müssen als Root ausgeführt werden.
  2. Roher Netzwerkverkehr weist in freier Wildbahn eine Vielzahl gültiger und ungültiger Werte auf.
  3. Für diese Anwendungen gibt es viele Exploits. (Wireshark, Ethereal, tcpdump et al.)
  4. Daher greift tcpdump während des Root-Vorgangs auf die Netzwerkschnittstelle zu, sperrt sich selbst ein, löscht /var/lib/tcpdumpdann Root-Berechtigungen und beginnt mit der Erfassung.

Als Ergebnis, wenn ich angegeben habe ./blahoder blahes gut funktioniert hat. Aber /tmp/blahnicht, weil /var/lib/tcpdump/tmpes nicht existiert.

Eine nette Nebenfunktion von all dem ist: Wenn Sie das suid-Flag verwenden, um tcpdump SetUID zu installieren, können Sie Benutzern Zugriff auf die tcpdumpGruppe gewähren , ohne ihnen Sudo- oder Root-Zugriff zu gewähren. Mögliche Verwendungszwecke sind eine Erfassungsbox für Ihre Netzwerktechniker oder -forscher.

Ich wünschte nur, Gentoo / Funtoo hätte bei der Installation eine Nachricht erhalten, die all dies besagt.

tl; dr: Gentoo / Funtoo legen Ihre PCAP-Dateien ab /var/lib/tcpdump.

akraut
quelle
3

Die Syntax ist korrekt: Ich habe es gerade versucht (allerdings an Port 80) und es wurde eine PCAP-Datei im aktuellen Arbeitsverzeichnis generiert, mit den gleichen Optionen, die Sie verwenden.

Könnte es etwas mit Ihrem Home-Verzeichnis zu tun haben, in das Sie als Root schreiben möchten (wegen des Sudo)? Ist es möglich, dass Sie NFS-gemountete Home-Verzeichnisse mit Root-Squashing verwenden? sudo touch ~akraut/pcaps/foo?

Können Sie versuchen, die PCAP in / tmp / oder so etwas zu schreiben?

cjc
quelle
Mit sudo tcpdump -w /tmp/blah -s 0 "port 6667"sieht es aus, es funktioniert wie, aber wenn ich sudo su -dann läuft zuerst tcpdump -w /tmp/blah -s 0 "port 6667"als root heißt es „Keine solche Datei oder das Verzeichnis“. Das Geheimnis vertieft sich ...
Akraut
1
Justin hat dir anscheinend geholfen, die Antwort zu finden. Kann ich Sie fragen, welche Distribution Sie verwenden und ob dies eine Standard-TCPDump-Installation für diese Distribution ist?
CJC
Ich verwende Funtoo, eine Variante von Gentoo. Ja, standardmäßig wird das chroot-Flag "use" gesetzt (eine Gentoo-Methode zum Aktivieren / Deaktivieren der optionalen Funktionen zur Kompilierungszeit). Ich habe tatsächlich ein längeres Schreiben vorbereitet, um es in Kürze hier zu veröffentlichen.
Akraut