Mengapa tcpdump tidak menulis file pcap?

8

Dalam proses men-debug bot python irc yang tampaknya tidak dapat terhubung, saya pikir, "Saya tahu, saya akan tcpdump saja dan lihat apa yang dilakukannya." Jadi saya menjalankan tcpdump seperti yang biasa saya lakukan dan dikatakan itu menangkap paket, tetapi sebenarnya tidak menulis 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 $ 
akraut
sumber
Apa yang terjadi jika Anda memberikannya jalur absolut?
Massimo
Apakah bot terhubung eth0? Jika menggunakan loopback atau antarmuka lain, tidak akan ada lalu lintas untuk dibuang ke file.
Chris S
1
@ Chris-s Jika itu menunjukkan 17 packets received by filterbukankah itu berarti menangkap beberapa traffic?
akraut
@ Massimo Mencoba menentukan keduanya ./blah dan / blah dan tidak ada yang menulis file.
akraut

Jawaban:

11

Anda mungkin ingin memeriksa perilaku tcpdump dengan strace, untuk melihat apakah ia melakukan sesuatu yang aneh seperti chroot, apakah itu dalam gentoo atau distribusi lain yang mungkin membuat biner biner.

Justin Lynn
sumber
Ah iya. Melihat ebuild, tampaknya menjatuhkan priv dan chroot /var/lib/tcpdump. Dan lihatlah, di situlah letak semua file topi saya.
akraut
10

Ok, saya sudah memecahkan misterinya. Ikuti bersama saya saat kami mengungkap TCPDump Funtoo dan Misteri File PCap Hilang .

Saya menggunakan strace untuk melihat apa yang terjadi dan garis yang relevan adalah:

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)

Begitu...

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

Hei lihat! Semua file batas yang saya coba buat!

Setelah melihat flag yang digunakan tcpdump, secara default, saya melihat ini:

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

Jadi mengapa demikian? Teori saya kira kira seperti ini:

  1. Banyak aplikasi yang berinteraksi dengan lalu lintas jaringan mentah harus dijalankan sebagai root.
  2. Lalu lintas jaringan mentah memiliki beragam nilai yang valid dan tidak valid di alam.
  3. Banyak eksploit yang ada untuk aplikasi tersebut. (Wireshark, Ethereal, tcpdump, dkk)
  4. Oleh karena itu, tcpdump mengambil akses ke antarmuka jaringan saat melakukan root, memenjarakan dirinya sendiri /var/lib/tcpdump, lalu menjatuhkan hak akses root dan mulai mengambil.

Akibatnya, ketika saya tentukan ./blahatau blahbekerja dengan baik. Tetapi /tmp/blahtidak karena /var/lib/tcpdump/tmptidak ada.

Fitur samping yang rapi dari semua ini adalah: ketika menggunakan bendera suid untuk menginstal tcpdump SetUID, Anda dapat memberikan pengguna akses dengan tcpdumpgrup tanpa memberi mereka sudo atau akses root. Kemungkinan penggunaan meliputi kotak tangkap untuk insinyur atau peneliti jaringan Anda.

Saya hanya berharap Gentoo / Funtoo memiliki pesan pada instalasi yang mengatakan semua ini.

tl; dr: Gentoo / Funtoo memasukkan file pcap Anda /var/lib/tcpdump.

akraut
sumber
3

Sintaksnya benar: Saya baru mencobanya (walaupun pada port 80) dan menghasilkan file pcap di direktori kerja saat ini, mengingat opsi yang sama yang Anda gunakan.

Mungkinkah ada hubungannya dengan direktori home Anda, yang Anda coba tulis sebagai root (karena sudo)? Apakah mungkin Anda menggunakan direktori home yang di-mount NFS dengan root-squashing? sudo touch ~akraut/pcaps/foo?

Bisakah Anda mencoba menuliskan pcap ke / tmp / atau sesuatu?

cjc
sumber
Dengan sudo tcpdump -w /tmp/blah -s 0 "port 6667"sepertinya itu berfungsi, tetapi jika saya lakukan sudo su -pertama maka jalankan tcpdump -w /tmp/blah -s 0 "port 6667"sebagai root mengatakan "Tidak ada file atau direktori". Misteri itu semakin dalam ...
akraut
1
Sepertinya Justin membantu Anda menemukan jawabannya. Dapatkah saya bertanya kepada Anda apa distro yang Anda gunakan, dan apakah itu instalasi tcpdump standar untuk distro itu?
cjc
Saya menjalankan Funtoo, yang merupakan varian dari Gentoo. Ya, secara default, ini mengatur flag chroot "use" (metode Gentoo untuk mengaktifkan / menonaktifkan fungsionalitas waktu kompilasi opsional). Saya sebenarnya sudah menyiapkan tulisan yang lebih panjang untuk dikirim ke sini segera.
akraut