Perché tcpdump non scrive un file pcap?


8

Nel processo di debug di un bot irc Python che non sembra connettersi, ho pensato "Lo so, lo scaricherò e vedrò cosa sta facendo." Quindi ho eseguito tcpdump come faccio di solito e dice che sono pacchetti acquisiti, ma in realtà non scrive il file cap.

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 $ 

Cosa succede se gli dai un percorso assoluto?
Massimo

Il bot si sta connettendo eth0? Se sta usando il loopback o un'altra interfaccia, non ci sarebbe traffico da scaricare sul file.
Chris S,

1
@ Chris-s Se mostra 17 packets received by filternon significa che ha catturato un po 'di traffico?
akraut,

@Massimo Ho provato a specificare sia ./blah che / blah e nessuno dei due ha scritto un file.
akraut,

Risposte:


11

Potresti voler controllare il comportamento di tcpdump con strace, per vedere se sta facendo qualcosa di strano come il chrooting, se è in gentoo o in un'altra distribuzione che potrebbe fare causa ai binari.


Ah sì. Guardando l'ebuild, sembra cadere privs e chroot in /var/lib/tcpdump. Ed ecco, ci sono tutti i miei file di cappellini.
akraut,

10

Ok, ho risolto il mistero. Seguitemi mentre sveliamo il TCPDump di Funtoo e il File pcap Mystery of the Missing .

Ho usato strace per vedere cosa sta succedendo e le linee rilevanti sono:

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)

Così...

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

Ehi guarda! Tutti i file cap che ho provato a creare!

Dopo aver dato un'occhiata ai flag di utilizzo con cui tcpdump è costruito di default, vedo questo:

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

Quindi perché farlo in questo modo? La mia teoria va in questo modo:

  1. Molte applicazioni che interagiscono con il traffico di rete non elaborato devono essere eseguite come root.
  2. Il traffico di rete non elaborato presenta un'ampia varietà di valori validi e non validi in circolazione.
  3. Esistono molti exploit per quelle applicazioni. (Wireshark, Ethereal, tcpdump, et al)
  4. Pertanto, tcpdump ottiene l'accesso all'interfaccia di rete mentre si esegue il root, esegue il jailing in se stesso /var/lib/tcpdump, quindi rilascia i privilegi di root e inizia l'acquisizione.

Di conseguenza, quando ho specificato ./blaho blahha funzionato bene. Ma /tmp/blahnon perché /var/lib/tcpdump/tmpnon esiste.

Una caratteristica laterale di tutto ciò è: quando si utilizza il flag suid per installare SetUID di tcpdump, è possibile concedere agli utenti l'accesso con il tcpdumpgruppo senza fornire loro l'accesso sudo o root. I possibili usi includono una scatola di acquisizione per i tuoi ingegneri di rete o ricercatori.

Vorrei solo che Gentoo / Funtoo avesse avuto un messaggio sull'installazione che dicesse tutto questo.

tl; dr: Gentoo / Funtoo inserisce i tuoi file pcap /var/lib/tcpdump.


3

La sintassi è corretta: l'ho appena provato (anche se sulla porta 80) e ha generato un file pcap nella directory di lavoro corrente, date le stesse opzioni che stai usando.

Potrebbe avere qualcosa a che fare con la tua home directory, che stai cercando di scrivere come root (a causa del sudo)? È possibile che tu stia utilizzando le home directory montate su NFS con il root-squashing? sudo touch ~akraut/pcaps/foo?

Puoi provare a scrivere il pcap su / tmp / o qualcosa del genere?


Con sudo tcpdump -w /tmp/blah -s 0 "port 6667"lo sembra di lavoro, ma se lo faccio sudo su -prima quindi eseguire tcpdump -w /tmp/blah -s 0 "port 6667"come root si dice "No such file or directory". Il mistero si approfondisce ...
akraut

1
Sembra che Justin ti abbia aiutato a trovare la risposta. Posso chiederti quale distro stai usando e se si tratta di un'installazione standard di tcpdump per quella distro?
cjc,

Sto eseguendo Funtoo, che è una variante di Gentoo. Sì, per impostazione predefinita, imposta il flag "usa" chroot (un metodo Gentoo per abilitare / disabilitare la funzionalità di compilazione opzionale). In realtà ho preparato un articolo più lungo per pubblicare qui a breve.
akraut,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.