¿Por qué tcpdump no escribe un archivo pcap?

8

En el proceso de depuración de un robot irc de Python que parece que no puede conectarse, pensé "Lo sé, simplemente lo ejecutaré y veré qué está haciendo". Así que ejecuté tcpdump como lo hago habitualmente y dice que es paquetes capturados, pero en realidad no escribe el archivo 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
fuente
¿Qué pasa si le das un camino absoluto?
Massimo
¿Está conectado el bot eth0? Si usa el loopback u otra interfaz, no habría tráfico para volcar al archivo.
Chris S
1
@ Chris-s Si se muestra, 17 packets received by filter¿no significa que capturó algo de tráfico?
akraut
@Massimo Intentó especificar tanto ./blah como / blah y ninguno escribió un archivo.
akraut

Respuestas:

11

Es posible que desee verificar el comportamiento de tcpdump con strace, para ver si está haciendo algo extraño como chrooting, si está en gentoo u otra distribución que pueda sumar los binarios.

Justin Lynn
fuente
Ah, sí. Al mirar el ebuild, parece que cae privs y chroot /var/lib/tcpdump. Y he aquí, yacen todos mis archivos cap.
akraut
10

Ok, he resuelto el misterio. Síganme mientras desentrañamos TCPDump de Funtoo y el archivo pcap Mystery of the Missing .

Solía ​​strace para ver qué está pasando y las líneas relevantes son:

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)

Entonces...

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

¡Hey Mira! ¡Todos los archivos cap que intenté crear!

Después de echar un vistazo a las banderas de uso con las que se crea tcpdump de forma predeterminada, veo esto:

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

Entonces, ¿por qué hacerlo de esta manera? Mi teoría es algo como esto:

  1. Muchas aplicaciones que interactúan con el tráfico de red sin procesar deben ejecutarse como root.
  2. El tráfico de red sin procesar tiene una gran variedad de valores válidos e inválidos en estado salvaje.
  3. Existen muchos exploits para esas aplicaciones. (Wireshark, Ethereal, tcpdump, y otros)
  4. Por lo tanto, tcpdump toma acceso a la interfaz de red mientras es root, se encerra en sí mismo /var/lib/tcpdump, luego suelta los privilegios de root y comienza la captura.

Como resultado, cuando especifiqué ./blaho blahfuncionó bien. Pero /tmp/blahno lo hizo porque /var/lib/tcpdump/tmpno existe.

Una característica clara de todo esto es: cuando se usa el indicador suid para instalar tcpdump SetUID, puede otorgar a los usuarios acceso con el tcpdumpgrupo sin darles acceso a sudo o root. Los posibles usos incluyen un cuadro de captura para los ingenieros o investigadores de su red.

Solo desearía que Gentoo / Funtoo hubiera tenido un mensaje en la instalación que dijera todo esto.

tl; dr: Gentoo / Funtoo puso sus archivos pcap /var/lib/tcpdump.

akraut
fuente
3

La sintaxis es correcta: acabo de probarlo (aunque en el puerto 80) y generó un archivo pcap en el directorio de trabajo actual, dadas las mismas opciones que está utilizando.

¿Podría tener algo que ver con su directorio de inicio, que está tratando de escribir como root (debido al sudo)? ¿Es posible que esté utilizando directorios de inicio montados en NFS con aplastamiento de raíz? sudo touch ~akraut/pcaps/foo?

¿Puedes intentar escribir el pcap en / tmp / o algo así?

cjc
fuente
Con sudo tcpdump -w /tmp/blah -s 0 "port 6667"todo apunta a que de trabajo, pero si yo sudo su -primero y luego ejecutar tcpdump -w /tmp/blah -s 0 "port 6667"como root dice "No existe el fichero o directorio". Las profundiza misterio ...
akraut
1
Parece que Justin te ayudó a encontrar la respuesta. ¿Puedo preguntarte qué distribución estás usando y si esa es una instalación estándar de tcpdump para esa distribución?
cjc
Estoy ejecutando Funtoo, que es una variante de Gentoo. Sí, de forma predeterminada, establece el indicador de "uso" chroot (un método de Gentoo para habilitar / deshabilitar la funcionalidad opcional en tiempo de compilación). De hecho, he preparado un artículo más extenso para publicar aquí en breve.
akraut