UTILISATION DE TCPDUMP


I. QU'EST CE QUE TCPDUMP?

tcpdump permet de « capturer » les paquets qui transitent par une interface et d'en analyser le contenu.
Voici comment s'affiche un paquet dans tcpdump.

1023873914.125606 secure.admin.srs.org.ssh > secure.ids.srs.org.1145: P 3066603742:3066603806(64) ack 1646168027 win 17520 [tos 0x10]
4510 0068 7e87 4000 4006 3862 c0a8 011e
c0a8 0128 0016 0479 b6c8 a8de 621e 87db
5018 4470 1813 0000 e492 152f 23c3 8a2b
4ee7 dbf8 0d48 88e8 0110 2b01 4295 39f4
52c9 a05b 31d7 e3ae 1c62 2dbd d955 d604
b5d2 63d1 8fbc 4ab7 1615 b382 571c 70e0
a368 a03f 425b 6211

II UTILISATION DE TCPDUMP

II.1 Utilisation basique

Lancer tcpdump basiquement:

# tcpdump
Donne:
13:25:32.590340 IP secure.hacker.srs.org.61405 > 192.168.0.13.34754: . ack 0 win 1024
13:25:32.590354 IP 192.168.0.13.tcpmux > secure.hacker.srs.org.61402: S 4017961237:4017961237(0) ack 4047677013 win 5
13:25:32.590374 IP 192.168.0.13.tcpmux > secure.hacker.srs.org.61403: R 4020357956:4020357956(0) win 32768
13:25:32.590404 IP 192.168.0.13.34754 > secure.hacker.srs.org.61404: S 4023353855:4023353855(0) ack 4047677013 win 5
13:25:32.590432 IP 192.168.0.13.34754 > secure.hacker.srs.org.61405: R 4023953034:4023953034(0) win 32768
13:25:32.590464 IP secure.hacker.srs.org.61393 > 192.168.0.13.34754: UDP, length: 300
13:25:32.590464 IP 192.168.0.13.tcpmux > secure.hacker.srs.org.61400: S 4014965339:4014965339(0) ack 4047677013 win 5
13:25:32.590547 IP 192.168.0.13.34754 > secure.hacker.srs.org.61404: S 4023353855:4023353855(0) ack 4047677013 win 5
13:25:32.590547 IP secure.hacker.srs.org.61400 > 192.168.0.13.tcpmux: R 4047677013:4047677013(0) win 0
13:25:32.590613 IP 192.168.0.13.34754 > secure.hacker.srs.org.61405: R 4023953034:4023953034(0) win 32768
13:25:32.590656 IP secure.hacker.srs.org.61404 > 192.168.0.13.34754: R 4047677013:4047677013(0) win 0
13:25:33.363711 IP 192.168.1.15.32772 > ns-server.epita.fr.4242: P 257386501:257386532(31) ack 1414533839 win 6432
13:25:33.363856 IP zztop.srs.org.32786 > non-secure.admin.srs.org.domain: 56549+[|domain]
13:25:33.364157 IP non-secure.admin.srs.org.domain > zztop.srs.org.32786: 56549[|domain]
13:25:33.364229 IP zztop.srs.org.32786 > non-secure.admin.srs.org.domain: 56550+[|domain]
13:25:33.364383 IP non-secure.admin.srs.org.domain > zztop.srs.org.32786: 56550 NXDomain*[|domain]
13:25:33.370655 IP ns-server.epita.fr.4242 > 192.168.1.15.32772: P 1:82(81) ack 31 win 17520
13:25:33.370757 IP 192.168.1.15.32772 > ns-server.epita.fr.4242: . ack 82 win 6432

Pour logger les trace de tcpdump:

# tcpdump > textfile

Pour mettre les logs dans un fihcier, tout en affichant les trames à l'écran.

# tcpdump -l | tee textfile

Faire des fichiers de dump

# tcpdump -w tracefile &

Pour lire un fichier de dump

# tcpdump -r tracefile

II.2 Utilisation avancèe

Pour écouter sur un interface ré spécifique

# tcpdump -i rl0

Tcpdump permet de cpaturer le traffic en se basant sur:

Filtres par adresses:

On récupère seulement les paquets provenant de secure.admin.srs.org
# tcpdump host secure.admin.srs.org

On récupère seulement les paquets en direction de secure.admin.srs.org

# tcpdump dst host secure.admin.srs.org
Il est possible de mettre des IP à la place des noms de machine.

La source ou la destination peut être un adresse MAC

# tcpdump ether src host 0:a0:3b:3:e1:1d


Filtres par protocoles:

Les 5 protocoles les plus communs, peuvent être spécifié par leur nom: Le reste des protocoles peuvent être spécifié par leur numero.

Pour capturer tousles paquets udp:

# tcpdump udp

Pour faire la même chose, sauf que l'on sauve 300 octets de données des 1000 premiers paquets arrivés survr0 dans un fichier de dump:

# tcpdump -c 1000 -i vr0 -s 300 -w udp1000hits.dump udp

Pour capturer les paquets relatifs au protocole esp:
# tcpdump proto 50
Syntaxe: proto {protocol number} (voir /etc/protocols)

Filtres sur des paquets caractéristiques:

tcpdump "{protocole}[{saute n bytes}] = {numero}"
Les protocoles disponibles sont: ip, tcp, udp, icmp, ether, arp, rarp, and fddi.

Une facon indirecte de capturer tout le trafic icmp peut être:

# tcpdump "ip[9]=1"
Cela marche car le protocole est donné par le 10ème octet de l'entête IP et le numéro du protocol icmp est 1.

Le commande suivante capturera seulement les echo reply de secure.admin.srs.org:

# tcpdump -x "icmp[0]=0"
04:20:22.056929 secure.admin.srs.org > secure.ids.srs.org: icmp: echo reply
4500 0054 c20e 0000 8001 f4db c0a8 0128
c0a8 0146 0000 6354 d87b 0000 3d09 a7a8
000d f46d 0809 0a0b 0c0d 0e0f 1011 1213
1415 1617 1819 1a1b 1c1d 1e1f 2021 2223
2425 2627 2829 2a2b 2c2d 2e2f 3031 3233
3435

Filtres combinés:

Pour composer des filtres, on dispose de 3 opérateurs;

  1. Negation -- (not or !)
  2. Concatenation -- (and or &&)
  3. Alternation -- (or or ||)
Pour ne pas capturer le traffic d'une session en ssh:
# tcpdump -w tracefile not port 22

Exemple de filtre composé:

# tcpdump -w tracefile not port 22 and host spider and host fulton
# tcpdump -w tracefile not (port 22 and host spider and host fulton)
# tcpdump -w tracefile not "(port 22 and host spider and host fulton)"

Il est possible de mettre des filtres dans un fichier et de les utiliser à partir de tcpdump:

# cat > filterfile
dst host non-secure.ids.srs.org and "(udp or proto 51)" and not "(src host secure.ids.srs.org or src host secure.admin.srs.org)"
Ctrl-D
# tcpdump -F filterfile