Pourquoi tcpdump n'écrira-t-il pas un fichier pcap?

8

Dans le processus de débogage d'un bot irc python qui ne semble pas se connecter, je me suis dit "je sais, je vais juste le tcpdump et voir ce qu'il fait." J'ai donc exécuté tcpdump comme d'habitude et il indique que ce sont des paquets capturés, mais n'écrit pas réellement le fichier de 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
la source
Que se passe-t-il si vous lui donnez un chemin absolu?
Massimo
Le bot se connecte- eth0t-il? S'il utilise le bouclage ou une autre interface, il n'y aura pas de trafic à vider dans le fichier.
Chris S
1
@ Chris-s Si cela montre que 17 packets received by filtercela ne signifie pas qu'il a capturé du trafic?
akraut
@Massimo Essayé de spécifier à la fois ./blah et / blah et aucun des deux n'a écrit de fichier.
akraut

Réponses:

11

Vous voudrez peut-être vérifier le comportement de tcpdump avec strace, pour voir s'il fait quelque chose d'étrange comme le chrootage, s'il est dans gentoo ou dans une autre distribution qui pourrait provoquer les binaires.

Justin Lynn
la source
Ah oui. En regardant l'ebuild, il semble laisser tomber des privs et chroot dedans /var/lib/tcpdump. Et voilà, se trouvent tous mes fichiers de casquettes.
akraut
10

Ok, j'ai résolu le mystère. Suivez-moi pour découvrir le TCPDump de Funtoo et le mystère du fichier pcap manquant .

J'ai utilisé strace pour voir ce qui se passe et les lignes pertinentes sont les suivantes:

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)

Donc...

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

Hé regarde! Tous les fichiers de casquettes que j'ai essayé de créer!

Après avoir regardé les drapeaux d'utilisation avec lesquels tcpdump est construit par défaut, je vois ceci:

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

Alors pourquoi faire comme ça? Ma théorie va quelque chose comme ceci:

  1. De nombreuses applications qui interagissent avec le trafic réseau brut doivent s'exécuter en tant que root.
  2. Le trafic réseau brut a une grande variété de valeurs valides et non valides dans la nature.
  3. De nombreux exploits existent pour ces applications. (Wireshark, Ethereal, tcpdump, et al)
  4. Par conséquent, tcpdump saisit l'accès à l'interface réseau pendant que root, s'enferme dans /var/lib/tcpdump, puis abandonne les privilèges root et commence la capture.

En conséquence, quand j'ai spécifié ./blahou blahcela a bien fonctionné. Mais /tmp/blahpas parce qu'il /var/lib/tcpdump/tmpn'existe pas.

Une caractéristique latérale intéressante de tout cela est: lorsque vous utilisez le drapeau suid pour installer tcpdump SetUID, vous pouvez accorder aux utilisateurs l'accès au tcpdumpgroupe sans leur donner un accès sudo ou root. Les utilisations possibles incluent une boîte de capture pour vos ingénieurs réseau ou vos chercheurs.

Je souhaite juste que Gentoo / Funtoo ait eu un message sur l'installation qui dit tout cela.

tl; dr: Gentoo / Funtoo mettez vos fichiers pcap dedans /var/lib/tcpdump.

akraut
la source
3

La syntaxe est correcte: je viens de l'essayer (quoique sur le port 80) et il a généré un fichier pcap dans le répertoire de travail actuel, étant donné les mêmes options que vous utilisez.

Cela pourrait-il avoir quelque chose à voir avec votre répertoire personnel, que vous essayez d'écrire en tant que root (à cause du sudo)? Est-il possible que vous utilisiez des répertoires de départ montés sur NFS avec un root-squashing? sudo touch ~akraut/pcaps/foo?

Pouvez-vous essayer d'écrire le pcap dans / tmp / ou quelque chose?

cjc
la source
Avec sudo tcpdump -w /tmp/blah -s 0 "port 6667"ça on dirait que ça marche, mais si je sudo su -commence par l'exécuter puis en tcpdump -w /tmp/blah -s 0 "port 6667"tant que root il dit "Pas de fichier ou répertoire". Le mystère s'approfondit ...
akraut
1
On dirait que Justin vous a aidé à trouver la réponse. Puis-je vous demander quelle distribution vous utilisez et s'il s'agit d'une installation standard de tcpdump pour cette distribution?
cjc
J'utilise Funtoo, qui est une variante de Gentoo. Oui, par défaut, il définit l'indicateur "use" du chroot (une méthode Gentoo d'activation / désactivation de la fonctionnalité de compilation facultative). J'ai en fait préparé un article plus long à publier ici sous peu.
akraut