Почему tcpdump не пишет файл pcap?


8

В процессе отладки бота python irc, который не может подключиться, я подумал: «Я знаю, я просто tcpdump и посмотрю, что он делает». Поэтому я запустил tcpdump, как обычно, и он говорит, что он захватывает пакеты, но на самом деле не записывает файл 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 $ 

Что произойдет, если вы дадите ему абсолютный путь?
Массимо

Бот подключается eth0? Если он использует loopback или другой интерфейс, не будет никакого трафика, который будет выгружен в файл.
Крис С

1
@ Chris-s Если это показывает 17 packets received by filter, значит ли это, что он захватил некоторый трафик?
Акраут

@Massimo Попытался указать оба ./blah и / blah, и ни один из них не написал файл.
Акраут

Ответы:


11

Возможно, вы захотите проверить поведение tcpdump с помощью strace, чтобы узнать, делает ли он что-то странное, например chrooting, в gentoo или другом дистрибутиве, который может подойти для двоичных файлов.


О да. Глядя на ebuild, кажется, что он сбрасывает privs и chroot /var/lib/tcpdump. И вот, там лежат все мои файлы шапки.
Акраут

10

Хорошо, я разгадал тайну. Следуйте за мной, пока мы разгадываем TCPDump от Funtoo и файл Mystery of the Missing pcap .

Я использовал strace, чтобы увидеть, что происходит, и соответствующие строки:

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)

Так...

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

Эй смотри! Все файлы шапки, которые я пытался создать!

Посмотрев на флаги использования, с которыми по умолчанию собрана tcpdump, я вижу это:

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

Так почему же так? Моя теория выглядит примерно так:

  1. Многие приложения, которые взаимодействуют с необработанным сетевым трафиком, должны запускаться с правами root.
  2. Необработанный сетевой трафик имеет широкий спектр допустимых и недопустимых значений.
  3. Для этих приложений существует множество эксплойтов. (Wireshark, Ethereal, tcpdump и др.)
  4. Поэтому tcpdump получает доступ к сетевому интерфейсу, в то время как root, помещает себя в тюрьму /var/lib/tcpdump, затем отбрасывает привилегии root и начинает захват.

В результате когда я уточнил ./blahили blahвсе заработало нормально. Но /tmp/blahне потому, /var/lib/tcpdump/tmpчто не существует.

Отличительной особенностью всего этого является то, что при использовании флага suid для установки tcpdump SetUID вы можете предоставить пользователям доступ с tcpdumpгруппой, не предоставляя им sudo или root-доступ. Возможное использование включает блок захвата для ваших сетевых инженеров или исследователей.

Я просто хотел бы, чтобы Gentoo / Funtoo получил сообщение об установке, в котором все это сказано.

tl; dr: Gentoo / Funtoo помещает ваши файлы pcap /var/lib/tcpdump.


3

Синтаксис правильный: я только что попробовал (хотя и на порту 80), и он сгенерировал файл pcap в текущем рабочем каталоге, учитывая те же параметры, которые вы используете.

Может ли это быть как-то связано с вашим домашним каталогом, который вы пытаетесь записать как root (из-за sudo)? Возможно ли, что вы используете смонтированные по NFS домашние каталоги с root-squashing? sudo touch ~akraut/pcaps/foo?

Можете ли вы попробовать записать pcap в / tmp / или что-то еще?


С sudo tcpdump -w /tmp/blah -s 0 "port 6667"это выглядит как это работает, но если я sudo su -первый затем запустить tcpdump -w /tmp/blah -s 0 "port 6667"как корень не говорит «Нет такого файла или каталога». Тайна углубляется ...
Акраут

1
Похоже, Джастин помог тебе найти ответ. Могу я спросить, какой дистрибутив вы используете, и является ли это стандартной установкой tcpdump для этого дистрибутива?
CJC

Я использую Funtoo, который является вариантом Gentoo. Да, по умолчанию он устанавливает флаг chroot «use» (метод Gentoo, включающий / отключающий дополнительные функции времени компиляции). Я на самом деле подготовил более длинную статью, чтобы опубликовать здесь в ближайшее время.
Акраут
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.