|
|
by Stéphane Aubert et Denis Ducamp (10/10/2000)
Voici une sélection de sniffers (logiciels d'écoute des réseaux) qui répond
à une question, qui nous est régulièrement posée, concernant les sniffers
que nous utilisons.
Remarque : Nous répondrons ultérieurement à une autre question souvent
posée qui est "Peut-on détecter un sniffer sur un réseau ?".
La liste que nous proposons n'est pas exhaustive, elle présente ceux que
nous jugeons importants de connaître lorsque l'on est confronté à des
réseaux IP.
Nous présentons les programmes suivants :
- tcpdump - ethereal - ipgrab
- nstreams - smbsnif - tcpflow
- sniffit - dsniff - netcat
Quelques sniffers que nous ne présentons pas mais qui peuvent aussi servir :
- windump (tcpdump pour windows)
- snoop (sous solaris)
- snort (bien plus qu'un sniffer : www.snort.org)
- buttsnif (sous NT sans installation de driver NDIS)
- snmpsnif (snmp est maintenant couvert par dsnif)
- ngrep
- iptraf
- ntop
--[ Préambule ]------------------------------------------------------------
Vous trouverez des informations plus générales sur les sniffers à l'adresse
http://www.robertgraham.com/pubs/sniffing-faq.html .
Si vous ne souhaitez lire que ce préambule vous devez au moins savoir qu'en
cas de problème ou de suspicion de problème (comme une attaque), si vous
êtes amenés à nous contacter il est important de nous fournir des traces
réseaux. Pour obtenir ces traces vous pouvez utiliser le sniffer tcpdump
avec les options suivantes :
# tcpdump -lnx -s 1500 -w trace
Le fichier trace contient alors une copie du trafic réseau que nous pouvons
analyser a posteriori.
--[ tcpdump ]--------------------------------------------------------------
URL: http://www.tcpdump.org/
Version stable pour les puristes : ftp://ftp.ee.lbl.gov/tcpdump.tar.Z
tcpdump est LE sniffer à connaître pour comprendre les réseaux IP.
Il permet de visualiser en temps réel le trafic réseau avec (ou sans) le
contenu des paquets.
Exemple de résultat :
11:44:05.261016 safe.hsc.fr.1567 > knossos.hsc.fr.ssh: . ack
21 win 32120 (DF) [tos 0x10]
11:44:05.517398 knossos.hsc.fr.ssh > safe.hsc.fr.1567: P
21:41(20) ack 28 win 17520 (DF) [tos 0x10]
On lit que la machine safe envoie un paquet ACK SSH (22/tcp) à la machine
knossos et la réponse de knossos.
Avec l'option -X pour afficher le contenu des paquets :
11:51:56.991408 104.97.182.103.2466 > 127.0.0.1.80: tcp 32 [ttl 1]
0x0000 4500 0048 30d8 0000 0106 eb0e 6861 b667 E..H0.......ha.g
0x0010 7f00 0001 09a2 0050 2f9c 727a 1bd5 e50d .......P/.rz....
0x0020 5018 0200 e812 0000 4745 5420 2f64 6566 P.......GET./def
0x0030 6175 6c74 2e61 7370 3a3a 2444 4154 4120 ault.asp::$DATA.
0x0040 4854 5450 2f31 2e30 HTTP/1.0
Ici on visualise un paquet à destination du port 80/tcp contenant la chaîne
/default.asp::$DATA.
Pour avoir plus de détails sur les paquets, il est possible d'envoyer le
résultat de tcpdump à tcpdumpx (programme écrit par Wietse Venema) ainsi :
# tcpdump -lnx -s 1500 | ./tcpdumpx
:58:30.459994 178.147.72.193.2898 > 127.0.0.1.80: tcp 30 [ttl 1]
IP_HDR=20 IP_OPT=0 TCP_HDR=20 TCP_OPT=0 DATA=30 FLAGS=PUSH ACK
IP_HDR 45 00 00 46 1d 16 00 00 01 06
vhl tos len len id id off off ttl pro
IP_HDR 22 47 b2 93 48 c1 7f 00 00 01
sum sum src src src src dst dst dst dst
TCP_HDR 0b 52 00 50 4f ee 06 a7 3a d1
src src dst dst seq seq seq seq ack ack
TCP_HDR bb 00 50 18 02 00 4c 9d 00 00
ack ack off flg win win sum sum urp urp
DATA 47 45 54 20 2f 63 67 69 2d 62
G E T / c g i - b
DATA 69 6e 2f 70 65 72 6c 2e 65 78
i n / p e r l . e x
DATA 65 20 48 54 54 50 2f 31 2e 30
e H T T P / 1 . 0
Et là, ça devient vraiment intéressant :)
URL de tcpdumpx :
ftp://ftp.porcupine.org/pub/debugging/ack-corruption.tar.gz
--[ ethereal ]-------------------------------------------------------------
URL: http://www.ethereal.com/
Très complet avec une interface graphique ou en mode texte (commande
tethereal), il permet de "décortiquer" de nombreux protocoles.
Exemple de résultat :
Frame 6 (84 on wire, 84 captured)
Arrival Time: Oct 8, 2000 15:55:18.5632
Time delta from previous packet: 0.000142 seconds
Frame Number: 6
Packet Length: 84 bytes
Capture Length: 84 bytes
Ethernet II
Destination: 00:00:0c:xxxxx (Cisco_07:ac:0a)
Source: 00:60:cf:xxx (00:60:cf:xxxx)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 70
Identification: 0x21b6
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 254
Protocol: UDP (0x11)
Header checksum: 0xae03 (correct)
Source: xxxxxxxxxxxxx (x.y.z.t)
Destination: yyyyyyyyyyyyyyyy (xx.yy.zz.tt)
User Datagram Protocol
Source port: 3273 (3273)
Destination port: domain (53)
Length: 50
Checksum: 0x778f
Domain Name System (query)
Transaction ID: 0xafe4
Flags: 0x0000 (Standard query)
0... .... .... .... = Query
.000 0... .... .... = Standard query
.... ..0. .... .... = Message is not truncated
.... ...0 .... .... = Don't do query recursively
.... .... ...0 .... = Non-authenticated data is unacceptable
Questions: 1
Answer RRs: 0
Authority RRs: 0
Additional RRs: 0
Queries
www.hsc.fr: type SOA, class inet
Name: www.hsc.fr
Type: Start of zone of authority
Class: inet
--[ ipgrab ]---------------------------------------------------------------
URL: http://ipgrab.sourceforge.net/
Exemple de résultat avec l'option -l :
-----------------------------------------------------------------
IP Header
-----------------------------------------------------------------
Version: 4
Header length: 20
Type of service: 16 (precedence=0, D=1, T=0, R=0, U=0)
Total length: 40
Identification #: 16502
Fragmentation offset: 0 (U=0, DF=1, MF=0)
Time to live: 64
Protocol: 6
Header checksum: 42281
Source address 192.70.106.82
Destination address 192.70.106.65
-----------------------------------------------------------------
TCP Header
-----------------------------------------------------------------
Source port: 2232
Destination port: 80 (www)
Sequence number: 3531645539
Acknowledgement number: 398528001
Header length: 20
Reserved bits: 0
Flags: ACK
Window size: 32120
Checksum: 14733
Urgent pointer: 0
Options: none
--[ nstreams ]-------------------------------------------------------------
URL: http://www.hsc.fr/ressources/outils/nstreams/index.html
nstreams permet de synthétiser (en nature) les flux. C'est à dire afficher
les protocoles utilisés sur un réseau indépendamment du nombre de fois où
ils ont été utilisés.
Cet outil permet de faire la cartographie des flux écoutés sur le réseaux.
--[ smbsnif ]--------------------------------------------------------------
URL: http://www.hsc.fr/ressources/outils/index.html
Bientôt disponible !...
Smbsnif est un utilitaire qui écoute le réseau et reconstitue les données
échangées par le protocole LanManager.
Cet utilitaire permet de recréer les fichiers partagés ainsi que les
documents imprimés dans les environnements Microsoft ou Samba.
Smbsnif peut écouter le réseau ou travailler à partir d'un fichier de log
de tcpdump.
--[ tcpflow ]--------------------------------------------------------------
URL: ftp://ftp.circlemud.org/pub/jelson/tcpflow/
Permet de visualiser en ascii le contenu des paquets et de rassembler les
sessions TCP sur disque.
Exemple de résultat avec l'option -c :
192.070.106.082.02157-192.070.106.033.00080: GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.75 [en] (X11; U; Linux 2.2.16 i686)
Pragma: no-cache
Host: www.hsc.fr
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
--[ sniffit ]--------------------------------------------------------------
URL: http://reptile.rug.ac.be/~coder/sniffit/sniffit.html
sniffit est assez générique. Il est cependant bien approprié pour
surveiller une session telnet par exemple.
Exemples d'utilisation :
Lancer 2 xterm, dans le premier taper la commande tty utiliser le résultat
avec l'option -D de sniffit : ./sniffit -i -D /dev/pts/3 (dans l'autre
xterm). Sélectionner dans cette fenêtre, avec la touche Enter, un flux
telnet (retour du serveur au client).
Autres exemples :
./sniffit -I
./sniffit -R trace -t chesnut
./sniffit -x -a -t chesnut
./sniffit -d -t chesnut
--[ dsniff ]---------------------------------------------------------------
URL: http://www.monkey.org/~dugsong/dsniff/
dsniff est un ensemble d'outils dont les sniffers suivants :
* dsniff : sniffer de mots de passe en clair pour FTP, Telnet, SMTP, HTTP,
POP, poppass, NNTP, IMAP, SNMP, LDAP, Rlogin, RIP, OSPF, NFS, YP/NIS,
SOCKS, X11, CVS, IRC, AIM, ICQ, Napster, PostgreSQL, Meeting Maker, Citrix
ICA, Symantec pcAnywhere, NAI Sniffer, Microsoft SMB, Oracle SQL*Net,
Sybase et Microsoft SQL auth info
* mailsnarf : compose une boite à lettre avec le mail sniffé sur le réseau
* urlsnarf : affiche les URL qui transitent sur le réseau au format CLF
(Common Log Format)
* webspy : envoi les URL sniffées sur le réseau à un netscape local
Exemple de résultat :
#./dsniff
listening on hme0
-----------------
10/02/00 00:15:32 tcp safe.1327 -> knossos.21
(ftp)
USER alice
PASS bobisgood
--[ NetRawIP ]-------------------------------------------------------------
URL: http://quake.skif.net/RawIP/
NetRawIP n'est pas un sniffer mais un module Perl qui permet de forger des
paquets et d'écouter le réseau.
Il est alors possible d'écrire facilement un sniffer en perl.
Exemple :
#!/usr/bin/perl
# sa/hsc
use Net::RawIP;
use Socket;
$a = new Net::RawIP;
$pcap=$a->pcapinit("eth0",
"proto \\tcp and ( dst port 80 or dst port 8080)",1500,30);
loop $pcap,-1,\&dumpit,\@a;
sub dumpit {
$a->bset(substr($_[2],14));
($ipsrc,$ipdst,$source,$dest,$data) = $a->get(
{ ip=>[qw(saddr daddr)],
tcp=>[qw(data source dest)]}
);
print inet_ntoa(pack("N",$ipsrc))," [$source] -> ",
inet_ntoa(pack("N",$ipdst))." [$dest]\n";
print $data,"\n" if($data =~ /^Proxy-authorization:/ );
};
--[ netcat ]---------------------------------------------------------------
URL: http://www.avian.org/
netcat n'est pas vraiment un sniffer mais permet toutefois de faire de
l'écoute sur une machine d'un service réseau. Ainsi il est possible de
visualiser (ou sauvegarder en hexa dans un fichier) le trafic sur un port
donné.
Remarque : pour windows vous trouverez aisément nc.exe.
URL: http://www.l0pht.com/~weld/netcat/
--[ EOF ]------------------------------------------------------------------
|