DESS SSI
Fonctionnalités des logiciels :
· Ethereal
· Nmap
· Dsniff
· Nessus
· X
Table des
matières
1.
Le
sniffer Ethereal p
3
1.1.
Introduction p
3
1.2.
Installation p
3
1.3.
Le programme p
4
1.4.
Les filtres p
7
2.
Options usuelles de Nmap p
9
3.
Options usuelles de Dsniff p
13
3.1.
Dsniff p
13
3.2.
Filesnarf p
13
3.3.
Mailsnarf p
13
3.4.
Urlsnarf p
14
3.5.
Webspy p
14
3.6.
Arspoof p
14
3.7.
Dnsspoof p
14
3.8.
Macof p
15
3.9.
Sshmitm p
15
3.10.
Webmitm p
15
4. Le logiciel Nessus p
16
4.1.
Installation p
16
4.2.
Utilisation p
17
5. Le
logiciel X p
21
5.1.
Installation p
21
5.2.
Utilisation p
21
6. 1.
Le sniffer Ethereal
Pour analyser finement le trafic réseau lorsqu'il y a, par exemple, un problème que l'on n'arrive pas à déterminer, il peut être utile de voir ce qu'il se passe réellement sur le réseau. Pour cela il existe des sniffers qui sont des outils qui permettent de récupérer les paquets qui passent physiquement sur un réseau (quelque soit la destination de ces paquets). Il existe un outil sous licence GNU qui permet de faire cela et qui permet d'interpréter la structure des paquets, cela de façon graphique. Il s'appelle Ethereal et est disponible sur le site d'Ethereal.
1.2. Installation
l’archive ethereal-0.9.11.tar.bz2 se trouve à
l'URL www.ethereal.com, il faut la
télécharger et la décompresser en tapant :
bunzip2 ethereal-0.9.11.tar.bz2
tar xvf ethereal-0.9.11.tar
Cela va nous
donner le répertoire ethereal-0.9.11.
Il faut installer préalablement les packages suivants libglib1.2-devel et libgtk+1.2-devel.
Dans le répertoire
d'ethereal, tapez :
./configure
A la fin de la
commande, on obtient un résumé des principales options choisies :
The Ethereal package has been configured with the
following options.
Build ethereal : yes
Build tethereal : yes
Build editcap : yes
Build mergecap : yes
Build text2pcap : yes
Build idl2eth : yes
Build randpkt : no
Build dftest : no
Install setuid : no
Use plugins : yes
Use GTK+ v2 library : no
Use pcap library : yes
Use zlib library : yes
Use IPv6 name resolution : yes
Use UCD SNMP/NET-SNMP library : no
Puis :
make
En tant que root, tapez maintenant:
make
install
Un répertoire contenant divers fichiers (plugins et autres) a été installé sous /usr/local/lib/ethereal, et les exécutables se trouvent sous /usr/local/bin.
1.3. Le programme
Il est aussi nécessaire de connecter cette
machine avec une carte réseau sur le réseau à sniffer, a priori en la
connectant sur un hub. On ne peut voir que les paquets qui passent physiquement
sur le réseau auquel est connecté la carte réseau. De ce fait, si l'on veut
analyser des paquets qui ne sont pas à destination de notre machine, il faut
que l'on soit sur un réseau à collisions (tout le monde utilise le même câble
réseau à tour de rôle) : c’est le cas des réseaux 10 base 2 (coax) ou
10/100 base T avec l'utilisation d'un concentrateur Ethernet ou HUB.
L'installation de ce logiciel dépendra du
format dans lequel vous vous l'êtes procuré. Dans tous les cas, il n'y a pas
vraiment de problèmes si vous disposez d'une installation standard de Linux. Il
faut être sous une session graphique (X Window) pour utiliser ce logiciel et le
lancer sous le compte root.
Pour lancer ce logiciel, il suffit
d'utiliser un terminal et d'y taper la commande /usr/local/bin/ethereal ou /usr/bin/ethereal
(ethereal devrait d'ailleurs suffire). Si vous n'êtes pas sous le compte root, utilisez la commande su - puis le mot de passe du root avant de lancer ethereal. Pour de plus amples
informations sur l'utilisation même du produit, tapez man ethereal à l'invite de commande d'un shell.
Le principe est simple, vous lancez une
session de capture à l'aide du menu Capture
(figure ci-dessous). Cette session peut être interactive ou pas. En
d'autres termes, les paquets capturés peuvent être affichés au fur et à mesure
ou à la fin de la capture.
La
boîte de dialogue suivante apparaît alors. Elle permet de spécifier ce qui doit
être analysé.
· Le champ Interface permet de choisir l'interface sur laquelle on va
écouter. Sur un portable, l'interface doit être eth0 car c'est la seule. Si
cette interface n'est pas disponible vérifiez que vous êtes bien sur le
compte root. Il n'y a que le root qui peut sniffer les paquets. · Le champ Count permet de spécifier le nombre des paquets sniffés. La
valeur 0 (Infinite) indique
qu'ethereal captera des paquets jusqu'à ce qu'on lui demande d'arrêter.
Vient ensuite un champ intéressant.
· Le champ Filter limite les paquets qui seront conservés. Seuls les paquets
pour lesquels cette expression est vraie seront conservés. Dans l'exemple
donné, on ne conservera que les paquets dont le protocole est udp avec le port source ou destination 53 qui correspond au protocole DNS. Pour des détails sur les filtres,
se référer à la partie sur Les filtres.
· Le champ File
spécifie un fichier dans lequel se trouve les paquets. Ceci peut-être utile si
l’on veut analyser une trace faite avec tcpdump par exemple.
· Update liste of
packets in realtime permet (s'il est coché) de voir les paquets s'afficher
en temps réel (pendant la capture) dans la fenêtre des paquets disponibles.
Cette option ne doit être utilisée que si il n'y a pas trop de paquets
conservés.
· Automatic scrolling in
live capture permet (s'il est coché) de voir les derniers paquets s'afficher
en temps réel (pendant la capture) dans la fenêtre des paquets disponibles en
faisant défiler la liste de ceux-ci. Cette option ne doit être utilisée que
s'il y a peu de paquets.
· Enable name resolution permet (s'il est coché) de demander une traduction des adresses IP en noms. Cette option doit aussi être manipulée avec "précaution" car elle génère des requêtes DNS qui peuvent "encombrer" le réseau et prendre du temps (surtout si l’on a de nombreuses machines différentes dans les paquets et qu'elles ne sont pas connues dans les DNS).
Durant la capture, une boîte de dialogue récapitule les
paquets qui sont conservés. En même temps, les paquets apparaissent dans la
fenêtre principale (voir figure ci-dessous) si l'option Update liste of packets in realtime
a été cochée. Le bouton Stop
permet d'arrêter la capture. Les paquets deviennent alors disponibles dans
la fenêtre principale s'ils ne l’étaient pas déjà.
L'affichage
des résultats se décompose en trois parties :
·
La liste des
paquets capturés disponibles en dessous de la barre de menu avec un affichage
synthétique du contenu de chaque paquet.
·
La
décomposition exacte du paquet actuellement sélectionné dans la liste. Cette
décomposition permet de visualiser les champs des entêtes des protocoles ainsi
que l'imbrication des différentes couches de protocoles connus.
·
La troisième
zone contient le paquet (le début s'il est trop gros) affiché en hexadécimal et
en ASCII.
Tout en bas du programme se trouve un
champ filter. Il permet de
n'afficher que les paquets qui correspondent aux critères spécifiés dans ce
champ. C'est un filtre qui permet de temporairement cacher une partie des
paquets.
Voici un exemple des détails que l'on peut obtenir pour un paquet. La vision synthétique du paquet est disponible en haut, la zone du milieu nous donne l'éclaté des protocoles en jeu dans celui-ci (les différentes couches avec les champs associés). Dans la partie du bas, on retrouve le paquet en format "brut" affiché en hexadécimal et en ASCII. Un clic sur un des champs de celui-ci (dans la zone centrale) met en gras les octets correspondant dans la vision brut du paquet.
1.4. Les
filtres
Il y a deux sortes de filtres : Les
filtres à la capture et les filtres à l'affichage. Ces filtres n'ont pas la
même syntaxe.
La syntaxe des filtres à la capture est la
même que celle utilisée pour les filtres de la commande tcpdump. Pour en connaître le format, il faut donc utiliser man tcpdump.
Quand aux filtres à l'affichage, la syntaxe
est propriétaire à ethereal. Pour la
connaître, il faut utiliser la commande man
ethereal. La section suivante donne des exemples pour ces deux types de
filtres.
Ne
seront gardés que les paquets pour lesquels le filtre est vrai. Les filtres se
décomposent en 3 parties :
·
le protocole qui peut être ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp ou udp,
·
la direction qui peut être src ou dst,
·
un champ qui peut être host, net ou port suivi d'une
valeur.
Les opérateurs and, or et not peuvent être utilisés pour combiner des filtres.
Filtre
|
Fonction
|
host 172.16.0.1 and tcp |
ne conserve que les paquets TCP à destination ou en provenance de la machine 172.16.0.1 |
udp port 53 |
ne conserve que les paquets UDP en provenance ou en destination du port 53 |
udp port 53 and dst host 172.16.0.1 |
ne conserve que les paquets UDP en provenance ou en destination du port 53 à destination de la machine 172.16.0.1 |
tcp dst port 80 and dst host 172.16.0.1 and src net
172.16.0.0 mask 255.255.255.0 |
ne conserve que les paquets TCP en destination de la machine 172.16.0.1 sur le port 80 et en provenance des machines du réseau 172.16.0/24 |
Filtres d'affichage :
Les filtres d'affichage sont un peu plus
fin que ceux de la capture. Seuls les paquets pour lesquels l'expression du
filtre est vraie seront gardés. Les expressions sont basées sur les champs
disponibles dans un paquet. Le simple ajout d'un champ veut dire que l'on garde
le paquet si celui-ci est disponible. On peut aussi utiliser les opérateurs ==, !=, >, <, >= et <= pour
comparer les champs avec des valeurs. Les expressions ainsi fabriquées peuvent
être combinées avec les opérateurs &&
(pour un et logique), || (pour un ou logique), ^^ (pour le
ou exclusif) et ! (pour la négation).
L'usage des parenthèses est possible.
Voici quelques
exemples de champs disponibles (tapez man
ethereal pour une liste exhaustive) :
Champ |
Type |
Signification |
ip.addr |
Adresse IPv4 |
adresse IP
source ou destination |
ip.dst |
Adresse IPv4 |
adresse IP
destination |
ip.flags.df |
Booléen |
Drapeau IP, ne
pas fragmenter |
ip.flags.mf |
Booléen |
Drapeau IP,
fragments à venir |
ip.ttl |
entier non signé
sur 8 bits |
Time to live |
Voici quelques
exemples de filtres :
Filtre
|
Signification
|
ip.addr ==
172.16.0.100 |
tous les paquets
IP en provenance ou à destination de la machine 172.16.0.100. |
(ip.addr == 172.16.0.100) && (dns.response) |
tous les paquets
IP en provenance ou à destination de la machine 172.16.0.100 qui sont des
réponses à des requêtes DNS. |
(ip.addr >= 172.16.0.100) && (ip.addr
<= 172.16.0.123) |
tous les paquets
IP en provenance ou à destination des machines comprises entre l'adresse IP
172.16.0.100 et l'adresse IP 172.16.0.123 (comprises). |
2. Options usuelles de Nmap
Les
options peuvent parfois être combinées, et sont très spécifiques à certaines
opérations. Toutefois il peut arriver que certaines options ne cohabitent pas
ensemble ; dans ce cas-là, Nmap essaye d'avertir l'utilisateur des erreurs, et
des incompatibilités de la commande demandée. Les options possibles sont :
-sT |
Analyse le port TCP connect( ) ; c'est le mode le plus courant,
et l'issue du scan est facilement interprétable. En effet, si le port est en
écoute, alors la connexion sur le port a de grandes chances de réussir ! De
plus cette option n'a pas besoin de privilège root . |
-sU |
Analyse le port UDP. L'astuce consiste en l'envoi d'un paquet
UDP de 0 octets sur chaque port de la machine distante ; si on reçoit un
message ICMP injoignable, cela signifie que le port est fermé. Autrement, on
le considère comme ouvert. |
-sF |
Cela correspond aux scans de FIN furtif, d'arbre Xmas, et de
NULL . Je ne détaillerai pas les significations de chacun, mais ce qu'il faut
retenir, c’est que Microsoft (comme d' habitude) n'a pas tenu compte des RFC
concernant ces protocoles, et par conséquent ces commandes ne répondront pas
sur un système Windows. Mais d'un autre coté, cela aide à identifier l'OS,
car si la commande nous répond que tous les ports sont fermés, c’est qu'il
s'agit probablement d'un système Windows. |
-sP |
Effectue un ping, sans scanner, pour vérifier si l'hôte est
toujours en ligne. Nmap détermine si l'hôte est toujours "en vie "
par 3 méthodes : un ping comme d'habitude, grâce aux paquets ICMP, un envoi
de paquets TCP ACK sur le port 80
pour la réception d'un retour RST, ou alors par l'envoi de paquets SYN en
attendant une réponde de type RST ou SYN/ACK . |
-s0 |
Analyse du protocole IP ; cette méthode permet de déterminer
quel protocole IP est supporté par la plate-forme distante. La technique est
d'envoyer des rangées de paquets ICMP pour chaque protocole identifié. Si
l'on reçoit un message injoignable d'un protocole, c’est que ce dernier n'est
pas utilisé. Autrement nous considérerons qu'il est ouvert. Il faut toutefois
noter que certaines plates-formes, telles que AIX, HP-UX, ou certains
firewalls, peuvent ne pas nous envoyer des messages d'injoignabilité pour les
protocoles inutilisés. Cela fera apparaître les protocoles ouverts . |
-sA |
Analyse de l'ACK. Cette méthode est habituellement utilisée pour
analyser les règles sortantes des firewalls. En particulier, cela nous aide à
déterminer dans quel état est le firewall : protection complète, ou simple
filtrage de paquets provenant de requêtes SYN. La technique consiste à
envoyer un paquet ACK, avec un numéro de séquence aléatoire, sur le port
spécifié. Si une réponse RST nous parvient, c’est que le port est
"non-filtré" ; le contraire signifiera "filtré" ; cette
analyse ne montrera jamais les ports ouverts. |
-sW |
Analyse
avancée identique à celle d'ACK, excepté qu'elle peut détecter les ports
ouverts, aussi bien "filtré" que "non-filtré". |
-sR |
Analyse
du port RCP. Il prend tous les ports TCP/UDP trouvés ouverts et les inonde
ensuite avec des commandes de NULL du programme SunRPC pour déterminer s'ils
sont des ports RPC. Ainsi, il indique quel programme et numéro de version
sont utilisés. Vous pouvez alors obtenir les mêmes renseignements que le
coupe-feu (ou protection par des couches TCP). |
-b <ftp relay
host> |
Analyse
par attaque-retour ftp. Une
fonction intéressante du protocole ftp (RFC 959) est l'appui pour des
connexions ftp "par procuration". Autrement dit, on devrait être capable
de se connecter à lien.com par le serveur FTP attaqué et demander que le
serveur envoie un fichier n'importe où sur Internet ! Maintenant cela peut
avoir bien fonctionné en 1985 où le RFC a été écrit. Mais dans l'Internet
d'aujourd'hui, nous ne pouvons pas avoir de détournement de serveurs ftp. |
-P0 |
Permet de ne pas pinguer les hôtes avant leurs balayages. Cela
permet le balayage des réseaux qui ne permettent pas de demandes d'écho ICMP
(ou des réponses) par leur coupe-feu. Microsoft.com est un exemple d'un tel
réseau : vous devriez toujours utiliser -p0 ou -pt80 quand vous scannez les
ports de microsoft.com. |
-PT |
Utilise le ping TCP pour déterminer quels hôtes sont en
services. Au lieu d'envoyer des échos ICMP en paquets de demande et attendre
de réponse, il envoie des paquets TCP ACK partout dans le réseau cible (ou à
une machine). Il attend ensuite des réponses au goutte à goutte. Les hôtes
qui sont « ok » devraient répondre par un RST. Cette option
préserve l'efficacité pour parcourir seulement les hôtes « ok », en
permettant d’explorer des réseaux/hôtes. Pour les utilsateurs non-root, il
utilise coonect(). Pour mettre le port de destination en vue de paquets
d'investigation, utilisez -PT<numero port>. Le port par défaut est 80,
puisque ce port n'est pas souvent filtré. |
-PS |
Cette option utilise des paquets SYN (demande de connexion) au
lieu des paquets ACK pour des utilisateurs root. Les hôtes « ok »
devraient répondre par un RST (ou, rarement, un SYN|ACK). |
-PI |
Cette option utilise un véritable paquet ping (demande ICMP). Il
trouve les hôtes « ok » et cherche aussi des adresses d'émission
sous-adressées sur votre réseau. Ceux-ci sont les adresses IP qui sont
extérieurement accessibles et sont traduites en paquets IP à un sous-réseau
d'ordinateurs. Ceux-ci devraient être éliminés s’ils sont trouvés car ils
tiennent compte des nombreuses attaques de service (Smurf est le plus
commun). |
-O |
Cette option active l'identification d'hôtes éloignés via
l'empreinte TCP/IP. Autrement dit, il utilise une liasse de techniques pour
détecter des subtilités dans la pile réseau de système d'exploitation des
ordinateurs que vous parcourez. Il utilise cette information pour créer une
empreinte qu'il compare avec sa base de données d'OS connus (le fichier
nmap-os-fingerprints) pour connaître le type de système. Ca permet également l'utilisation d'une des mesures
"Uptime", qui utilise l'option d'horodatage de TCP (RFC 1323) pour
deviner quand une machine était réamorcée. Avec l'association de l'option -V, un numéro d'IDIP est généré :
la plupart des machines sont dans la classe "progressive". Cela
signifie qu'il incrémente le champ "ID" dans l'en-tête IP pour
chaque paquet qu'il envoie. Cela les rend vulnérables lorsqu’on les réunit à
d'autres informations et à des attaques de spoofing. |
-I |
Cela permet de changer complètement le balayage d'ident par TCP
. Comme noté par Dave Goldsmith à un poste de Bugtraq 1996, le protocole
ident (rfc 1413) tient compte de la révélation de l'username qui possède
n'importe quel processus connecté via TCP, même si celui-ci n'a pas amorcé la
connexion. Donc vous pouvez, par exemple, vous connecter au port http et
utiliser ensuite identd pour découvrir si le serveur est démarré en root.
Cela peut seulement être fait avec une pleine connexion TCP au port cible
(comme le -sT). Quand -I est utilisé, identd de l'hôte distant est vérifié
pour chaque port ouvert trouvé. Évidemment cela ne marchera pas si l'hôte n'a
pas lancé identd. |
-f |
Cette option entraîne l'analyse des requêtes SYN, FIN, XMAS, or
NULL pour utiliser des paquets IP fragmentés minuscules. L'idée est de
partager l'en-tête TCP en plusieurs paquets pour les rendre indécelables pour
les filtres de paquets, des systèmes de détection d'intrusion et d'autres
techniques qui détectent ce que vous faites. Soyez prudent avec cela !
Quelques programmes ont des difficultés à traiter ces paquets minuscules. |
-oN <logfilename> |
Cela enregistre les résultats de votre commande sous forme
lisible dans le fichier que vous spécifiez comme un argument. |
-oX <logfilename> |
même
chose que -oN, sauf que là c’est dans un format XML . |
-p <port_number> |
Cette option indique quels ports vous voulez spécifier. Par
exemple '-p 23 ' essayera seulement le port 23 de l'hôte(s) cible. '-p
20-30,139,60000-' ports entre 20 et 30, port 139 et tous les ports plus
grands que 60000. Le "défaut " parcourt tous les ports entre 1 et
1024 aussi bien que n'importe quels ports inscrits dans le fichier de
services qui vient avec nmap. Pour le balayage de protocole IP (-sO), cela
spécifie que le numéro de protocole que vous désirez parcourir (0-255). |
-F |
Permet de scanner uniquement les ports listés dans le fichier de
services joint avec nmap ; ce qui est beaucoup plus rapide que les 65535
ports . |
-D
<decoy1 [,decoy2][,ME],...> |
Entraîne l'analyse d'un appât pour être exécuté en le faisant
apparaître à l'hôte éloigné comme étant l'hôte(s) que vous spécifiez (d'où
appâts) et parcourt le réseau cible aussi. Ainsi ils ne sauront pas quels IP
est en train de les parcourir . Tandis que cela peut être défait par le
traçage du chemin de routeur, l'omission de réponse et d'autres mécanismes
"actifs", c'est généralement une technique extrêmement efficace
pour cacher votre adresse IP. |
-S
<IP_Address> |
Dans quelques circonstances, nmap peut ne pas être capable de
déterminer votre adresse source. Dans cette situation, utilisez -S avec votre
adresse IP. Une autre utilisation possible de cet option est de détourner
l'analyse pour faire croire aux cibles que quelqu'un d'autre les parcourt.
Imaginez une société étant à plusieurs reprises parcouru par un concurrent! |
-e <interface> |
Indique à nmap quel interface utiliser pour envoyer et recevoir
les données .. -g <portnumber> indique à nmap quel port utiliser . |
-n |
Dit à Nmap de NE JAMAIS faire la résolution DNS inverse sur les
adresses IP actives qu'il trouve. Puisque le DNS est souvent lent, cela peut
aider. |
-R |
Dit à Nmap de TOUJOURS faire la résolution DNS inverse sur les
adresses IP cibles. Normalement il le fait seulement quand une machine est
trouvée. |
-r |
Dit à Nmap de ne pas modifier l'ordre dans lequel les ports sont
parcourus. |
-M |
Indique
à Nmap la taille des sockets à utiliser avec TCP connect(). |
--randomize_hosts |
Dit à Nmap de brouiller chaque groupe de plus de 2048 hôtes
avant qu'il ne les parcoure. Cela permet des analyses moins évidentes à
percevoir aux systèmes de contrôle de réseau divers, particulièrement quand
vous le combinez avec des options, de choix du temps, lentes (voir
ci-dessous). |
-M
<max sockets> |
Met le nombre maximal de sockets qui seront utilisées en
parallèle pour une analyse TCP connect() . Cela est utile pour ralentir l'analyse
de peu de ports et éviter de saturer des machines distantes. Une autre
approche est d'utiliser -sS, qui
est généralement plus facile pour des machines à manipuler. |
-T
<Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> |
Ceux-ci sont les principes de choix du temps pour exprimer vos
priorités à Nmap. Le mode paranoïd
parcourt le réseau très lentement dans l’espoirs d'éviter la détection par
des systèmes IDS. Il adapte les analyses (aucun balayage parallèle) et attend
généralement au moins 5 minutes entre l'envoi de paquets. Sneaky est semblable, sauf qu’il
attend seulement 15 secondes entre l'envoi de paquets. Ceci permet de
soulager la charge sur le réseau et réduire les chances de mettre à bas les
machines. Il adapte les investigations et attend au moins 0.4 secondes entre
eux. Normal est le comportement par
défaut de Nmap , qui essaie de tourner aussi rapidement que possible sans
surcharger le réseau ou les hôtes/ports manquants (disparus). Le mode agressif ajoute un temps de 5 mn par
hôte et il n'attend jamais plus de 1.25 secondes dans les réponses
d'investigation. Insane est
seulement approprié pour des réseaux très rapides ou où vous ne risquez pas
de perdre une certaine information. Il a des temps d'hôtes de 75 secondes et
attend seulement 0.3 secondes dans les investigations individuelles. |
--host_timeout
<milliseconds> |
Spécifie que l'on permet à Nmap avec un temps t de passer le
balayage d'un hôte simple dans le but d'obtenir son IP. Le mode par défaut ne
prévoit pas temps de fin pour l'hôte. |
--initial_rtt_timeout
<milliseconds> |
Spécifie
le temps d'investigation initial. C'est généralement utile lors du parcourt
du firwall des hôtes avec -p0. Normalement Nmap peut obtenir une bonne
estimation du RTT par le ping. Le mode par défaut utilise 6000. |
--scan_delay
<milliseconds> |
Spécifie
le temps minimal que Nmap doit attendre entre chaque investigation. C'est
utile pour réduire la charge du réseau ou ralentir l'analyse dans le but de
se glisser sous des seuils IDS. |
3. Options usuelles de dsniff
3.1. Dsniff
Syntaxe : dsniff [-c] [-d] [-m] [-n] [-i interface] [-s snaplen] [-f services] [-t trigger[,...]]] [-r|-w savefile] [expression]
-c |
Procède
à un ré assemblage en half-duplex du flux TCP, pour supporter le trafic routé
de façon asymétrique (comme lors de l'utilisation de arp spoof(8) pour
intercepter le trafic client à destination de la passerelle locale). |
-d |
Active
le mode débugage. |
-m |
Active
la détection automatique du protocole. |
-n |
Ne
pas résoudre les adresses IP en noms de machines. |
-i interface |
Spécifie
l'interface sur laquelle écouter. |
-s snaplen |
Analyse
au maximum les premiers snaplen octets de chaque connexion TCP, plutôt que
les 1024 par défaut. |
-f services |
Charge
les numéros de ports de chaque service depuis un fichier
« services ». |
-t trigger[,...] |
Charge
les numéros de ports de chaque service depuis une liste séparée par des
virgules, spécifiée ainsi port/proto=service (e.g. 80/tcp=http). |
-r savefile |
Lit
les sessions reniflées depuis le fichier « savefile » créé avec
l'option -w. |
-w file |
Écrit
les sessions reniflées vers le fichier « savefile » plutôt que de
les analyser et de les imprimer. |
Expression |
Spécifie
l'expression d'un filtre tcpdump(8) pour sélectionner le trafic à renifler. |
3.2. Filesnarf
Syntaxe : filesnarf [-i interface] [[-v] pattern [expression]]
-i interface |
Spécifie
l'interface sur laquelle écouter. |
-v |
mode
"Versus". Inverse le sens de correspondance, pour sélectionner les
fichiers qui ne correspondent pas. |
Pattern |
Spécifie
l'expression régulière pour la sélection de noms de fichiers. |
Expression |
Spécifie
l'expression du filtre tcpdump(8) pour sélectionner le trafic à renifler. |
3.3. Mailsnarf
Syntaxe : mailsnarf [-i interface] [[-v] pattern [expression]]
-i interface |
Spécifie
l'interface sur laquelle écouter. |
-v |
mode
"Versus". Inverse le sens de correspondance, pour sélectionner les
messages qui ne correspondent pas. |
Pattern |
Spécifie
l'expression régulière pour les entêtes/corps de messages correspondants. |
Expression |
Spécifie
l'expression du filtre tcpdump(8) pour sélectionner le trafic à renifler. |
3.4. Urlsnarf
Syntaxe : urlsnarf [-n] [-i interface] [[-v] pattern
[expression]]
-i interface |
Spécifie
l'interface sur laquelle écouter. |
-v |
mode
"Versus". Inverse le sens de correspondance, pour sélectionner les
URL qui ne correspondent pas. |
Pattern |
Spécifie
l'expression régulière pour la sélection de noms d’URL. |
Expression |
Spécifie
l'expression du filtre tcpdump(8) pour sélectionner le trafic à renifler. |
-n |
Ne
pas résoudre les adresses IP en noms de machines. |
3.5. Webspy
Syntaxe : webspy [-i interface] host
-i interface |
Spécifie
l'interface sur laquelle écouter. |
-host |
Spécifie le
client web à espionner. |
3.6. Arpspoof
Syntaxe : arpspoof [-i interface] [-t target] host
-i interface |
Spécifie
l'interface à utiliser. |
-t target |
Spécifie
une machine particulière à empoisonner en ARP (si non spécifié, toutes les
machines sur le LAN). |
Host |
Spécifie
la machine pour laquelle vous désirez intercepter des paquets (usuellement la
passerelle locale). |
3.7. Dnsspoof
Syntaxe : dnsspoof [-i interface] [-f hostfile] [expression]
-i interface |
Spécifie
l'interface à utiliser. |
-f hostfile |
Spécifie
le chemin d'un fichier au format hosts(5). Seul un nom de machine est
autorisé par ligne (pas d'alias), mais les noms de machine peuvent contenir
des caractères spéciaux (comme *.doubleclick.net). |
Expression |
Spécifie
une expression de filtre tcpdump(8) pour choisir le trafic à renifler. |
Si aucun fichier hostfile n'est spécifié, des réponses seront forgées pour toutes les requêtes d'adresses sur le LAN avec en réponse l'adresse IP de la machine locale.
3.8. Macof
Syntaxe : macof [-i interface] [-s src] [-d dst] [-e tha] [-x sport] [-y dport]
[-n times]
-i interface |
Spécifie
l'interface sur laquelle envoyer. |
-s src |
Spécifie
l'adresse IP source. |
-d dst |
Spécifie
l'adresse IP destination. |
-e tha |
Spécifie
l'adresse hardware cible. |
-x sport |
Spécifie le port
TCP source. |
-y dport |
Spécifie le port
TCP destination. |
-n times |
Spécifie le
nombre de paquets à envoyer. |
Les valeurs pour les options laissées non spécifiées seront générées aléatoirement.
3.9. Sshmitm
Syntaxe : sshmitm [-d] [-I] [-p port] host [port]
-d |
Active la sortie
de débugage. |
-I |
Se met à
l'écoute ou détourne une session interactive. |
-p port |
Spécifie le port
local à écouter. |
Host |
Spécifie la
machine distante vers laquelle les connexions sont relayées. |
port |
Spécifie le port
distant vers lequel les connexions sont relayées. |
3.10. Webmitm
Syntaxe : webmitm [-d]
-d |
Active la sortie
de débugage. |
4. Installation et configuration de
Nessus
Dans cette partie,
je vais présenter l'installation et l'utilisation pour le client et le serveur
sur Linux.
4.1.
Installation de Nessus
Téléchargez la
distribution source de Nessus du site Web http://www.nessus.org/
topic "Download" et suivez les instructions ci-dessous :
Installez Nessus en utilisant le script appelé
nessus-installer.sh situé dans le répertoire nessus-installer. Tapez la
commande suivante :
#sh nessus-installer.sh.
Celle-ci
téléchargera la compilation suivante de logiciels :
· nessus-libraries-x.x.tar.gz.
· libnasl-x.x.tar.gz .
· nessus-core.x.x.tar.gz .
· nessus-plugins.x.x.tar.gz .
(x
représente la version du logiciel au moment où vous le téléchargez.)
Il
faut alors décompresser tous les fichiers en utilisant les commandes
suivantes :
#tar
xvfz nessus-libraries-x.x.tar.gz
#tar xvfz libnasl-x.x.tar.gz
#tar xvfz nessus-core.x.x.tar.gz
#tar xvfz nessus-plugins.x.x.tar.gz
Compilez
chaque fichier dans l'ordre chronologique en commençant par nessus-libraries :
#cd nessus-libraries
#./configure
#make
#make install
NB : pour la dernière commande make
install, vous devez être identifié en tant que root
Compilation
de libnasl :
#cd libnasl
#./configure
#make
#make install
Compilation
de nessus-core :
#cd nessus-core
#./configure
#make
#make install
Compilation
des plugins de Nessus :
#cd nessus-plugins
#./configure
#make
#make install
Une
fois toutes les compilations effectuées, deux fichiers importants vont se
créer : nessusd le serveur et nessus son client.
Dans
le cadre de son utilisation sous Linux, ajoutez la ligne :
/usr/local/libau fichier
/etc/ld.so.conf
pour incorporer la bibliothèque de Nessus (comme compilé ci-dessus), de sorte que Nessus, une fois démarré, puisse la trouver.
Utilisez la commande suivante pour mettre à jour le nouveau chemin d'accès :
#"echo/usr/local/lib" >
>/etc/ld.so.conf
# ldconfig
4.2. Utilisation de Nessus
Pour
utiliser Nessus, deux choses à faire :
La première est de créer un nouveau compte utilisateur, ainsi que la configuration de ses droits d'accès. La seconde est de configurer le client Nessus.
Etape 1 : Utilisez le script
"nessus-adduser" localisé dans le répertoire /usr/local/sbin pour la
génération d'un nouveau compte utilisateur. L'utilisateur pourra alors se
connecter à Nessus via ce compte.
Login : ->indiquez un nouveau nom d'utilisateur : X
Etape 2 : Choisissez la méthode pour enregistrer le mot de passe sur le serveur. Choisissez le "plaintext" (texte pur) si le mot de passe doit être sauvegardé tel quel (en clair). Choisissez "cipher" (chiffré) si le mot de passe doit être sauvegardé chiffré.
Authentication Method (cipher / palintext ) : -> indiquez la méthode : cipher
Etape 3 : L'administrateur du système peut assigner
des privilèges pour permettre à un utilisateur de se connecter sur une partie
du réseau et celles où il ne pourra pas.
Etape 4 : Demande de saisie du mot de passe pour le
compte X. Ce mot de passe est demandé par le serveur seulement une fois.
C'est-à-dire que lors de la première connexion pour l’utilisation de Nessus, X
demandera le mot de passe et pour les prochaines fois ce ne sera plus
nécessaire.
One time password : -> indiquez le mot de
passe : secret
Etape 5 : Spécifier les privilèges de scan du réseau permis à l’utilisateur X. Par exemple, nous pouvons permettre à X de scanner seulement une adresse IP ou un sous-réseau. Quand ceci est fait, pressez Ctrl-D pour arrêter le processus. Si le privilège n'est pas spécifié, on permet alors à X de parcourir l'intégralité du réseau. Plus de détails sur la spécification des privilèges sont disponibles dans les pages de man "nessus-adduser".
Login :
X
Auth. Method :
Cipher, can connect from anywhere
One time
password : secret
Rules :
Is that ok ? (y/n) [y]
Nessus demande
confirmation pour valider les informations saisies précédemment.
Le fichier de
configuration nessusd /usr/local/etc/nessusd.conf
peut être modifié par l'administrateur du système pour peaufiner (règler avec
précision) le serveur.
La commande nessus –D permet de démarrer le serveur.
2.
Configuration du client Nessus :
Le programme
nessus est placé dans /usr/local/bin/nessus. Employez la commande suivante pour
démarrer le client : /usr/local/bin/nessus
& ;
la fenêtre ci-après apparaît :
Quand l'utilisateur démarre le client nessus pour la
première fois, Nessus crée une clé privée pour l'utilisateur, en accord
avec le nom utilisateur Linux, snort dans ce cas. C'est-à-dire qu'à chaque
« nom d'utilisateur » sur Linux correspond une clef privée
unique, on appelle cela le rapport un à un. Ayant déjà créé la clef privée, Nessus demandera à
l'utilisateur d'entrer un mot de passe pour cette clef. L'utilisateur doit
la garder secrète. La deuxième ligne du schéma est là pour la confirmation
du mot de passe.
·
Fenêtre de connexion Nessus :
Avant la connexion pour l’utilisation de Nessus avec un
compte, l'utilisateur doit fournir l'adresse IP où nessusd fonctionne, le
port de nessusd et la méthode de chiffrage employés dans la communication
entre un client et le serveur. Dans le schéma, nessusd (le serveur) est à
l'adresse xxx.xxx.xxx.xxx et utilise le port 1241 (qui est le port de
défaut de Nessus) et utilise twofish/ripemd160:3
comme méthode de chiffrage.
·
La configuration :
·
Fenêtre utilisateur :
Après avoir contrôlé tous les onglets de la fenêtre de
configuration (Nessus Setup), l'utilisateur peut maintenant scanner le
réseau cible comme indiqué dans la fenêtre de sélection en cliquant sur le
bouton « Start the scan » situé en bas. À tout moment, l'utilisateur peut cesser de scanner une
machine individuelle en cliquant sur « Stop » au côté droit ou
même arrêter tous les scans complètement en cliquant sur « Stop the
whole test ».
·
Exemple de résultat de scan :
5. Le logiciel X
5.1.
Installation
licence:
GNU/GPL
plate-forme(s): Linux, *BSD, Mac OS X, Windows, Solaris
Il faut
télécharger l’archive et la décompresser.
Voici
la liste des librairies nécessaires avant de l’installer :
· LibX
= 0.6.7-1mdk · libform.so.5 · libssl.so.0
· ld.so.1 · libgpm.so.1 · libresolv.so.2
· libcrypto.so.0 · libncurses.so.5 · libdl.so.2
5.2. Utilisation
Utilisation de X sur un reseau
SWITCHER :
X est un logiciel
qui permet de faire de multiples applications dans un réseau local. En effet,
vous pouvez sniffer les connections de la machine de votre choix vers celle que
vous voulez. On peut aussi ne pas spécifier d’adresse IP et donc récupérer tout
ce qui passe sur une machine.
Au démarrage, nous
le voyons envoyer des requêtes ARP à l’ensemble du réseau local, afin de savoir
quels sont les machines présentes sur celui-ci.
Une fois ceci fait, nous arrivons sur Main du programme avec tous les hôtes
détectés :
A partir de là,
plusieurs applications sont possibles :
Pour cela, lorsque
vous êtes sur le Main du programme, appuyez sur la touche « o ». Vous
aurez alors une liste de toutes les adresses IP sources et destinations passant
par le switch.
A partir de là,
sélectionnez l’adresse que vous voulez pour obtenir l’OS associé à celle-ci.
Appuyez sur la
touche « h » pour obtenir le panneau d'aide. Aucune option n'est
vraiment intéressante sauf peut-être le fait d'appuyer sur la touche
« d » qui permet d'obtenir les host de toutes les machines.
Les connections :
L’interface du sniffing :
L’interface du « sniffing » montre le port source et destination. On peut voir les données en ascii ou en hexadécimales, injecter des caractères en établissant une connexion telnet, …
ARP Poisoning :
X a donc cette
fabuleuse fonction.
Qu'est ce que
c'est ?
L' « arp poison » est une attaque par déni de service dont le but est de duper des postes sur le même réseau ethernet en falsifiant des adresses ARP (MAC) pour des adresses IP données.
L'attaque
peut porter sur deux axes :
· Le premier est une attaque massive sur un réseau afin de remplir les tables ARP des postes sur le réseau. Ceci peut provoquer rapidement une saturation du réseau au niveau des requêtes ARP « arp who-has » (à quelle adresse correspond cette adresse ARP) et engendrer des disfonctionnements des communication sur le LAN.
· La seconde attaque vise une connexion entre deux postes en particulier sur lequel on va porter une attaque pour couper la connexion.
Méthode
d'action :
La méthodologie de
l'attaque de déni de service sur un poste est la suivante :
On
fournit à l'outil d'attaque une adresse IP source (un des postes cible de
l'attaque) et son adresse MAC. On fournit ensuite l'adresse IP de l'autre poste
et une adresse MAC falsifiée (n'importe laquelle) ; le processus répondra
ensuite (le plus rapidement possible) à une requête d' « arp who-has ».
Le poste ciblé par l'attaque mettra à jour sa table ARP avec une fausse adresse MAC et ne pourra plus communiquer avec l'autre poste.
En partant donc du
principe que l’on est sur le Main du programme, sélectionnez le poste que vous
voulez sniffer (sélectionnez le sur la colonne de droite, en DEST), et appuyez
sur la touche « a ».
Une liste des
connections s’affiche. Il est alors possible d’effectuer plusieurs
actions :
· La touche « d » permet d’obtenir
des informations sur une connexion.
· La touche « k » permet de tuer
une connexion.
· Pour Sniffer
les paquets, il suffit de sélectionner une connexion et d'appuyer sur la
touche « entrée ».
· Les
Plugins : ils permettent par exemple d’isoler une machine du réseau,
flooder le réseau....