II.5. 3.4 SNIFFING
Le sniffing consiste simplement à capturer une image du
trafic qui circule sur un brin d'un réseau. Le but du sniffing est
d'exploiter le fait que beaucoup de méthodes d'authentification
transmettent les mots de passe en clair sur le réseau. Le sniffing est
typiquement utilisé par les pirates pour étendre leurs attaques.
Une fois qu'ils ont pris possession d'une machine, le sniffing leur permet de
trouver des mots de passe leur donnant accès à des machines
supplémentaires. Le sniffing est le plus efficace dans des
réseaux locaux qui utilisent un média partagé (par
exemple, l'Ethernet classique sans commutation). Dans ce cas le sniffer peut
voir le trafic de toutes les machines connectées au réseau local
et sa chance de trouver un mot de passe est plus grande. Les réseaux
locaux récents sont souvent commutés plutôt que
partagés. Dans ce cas chaque machine est connectée
séparément à un commutateur. Le commutateur ne propage les
paquets que vers les machines qui peuvent potentiellement être leur
destinataire. Ceci augmente largement les performances du réseau,
puisque chaque machine a à sa disposition la bande passante totale du
média. L'efficacité du sniffer est par contre fortement
réduite puisqu'il ne voit que le trafic concernant la machine sur
laquelle il est installé. Certains sniffers avancés permettent de
forger des messages du protocole de résolution d'adresses Ethernet (ARP)
afin de recevoir du trafic qui ne leur est pas destiné, même sur
un réseau commuté. On parle alors d'empoisonnement de la
résolution d'adresses (ARP poisoning).
La plupart des systèmes d'exploitation ne permettent
l'exécution de sniffers que par des utilisateurs ayant des
privilèges d'administrateur. En utilisant un sniffer sur une machine, le
pirate peut éventuellement trouver le mot de passe d'un administrateur
d'une autre machine et installer un sniffer sur cette nouvelle cible.
Plus souvent, le pirate découvre des mots de passe
d'utilisateurs qui ne sont pas administrateurs. Ces mots de passe lui donnent
accès à de nouvelles machines, mais il doit encore trouver une
vulnérabilité dans sa nouvelle cible et d'obtenir les
privilèges d'administrateur.
Pour information, les protocoles d'authentification les plus
courants qui transmettent des mots de passe en clair sont donnés dans le
tableau 1
Figure 1 : PROTOCOLES
ÉCHANGEANT DES MOTS DE PASSE EN CLAIR
II.5.1. IP SPOOFING
Le terme "IP Spoofing" se réfère à la
falsification d'adresses source IP. Dans de nombreux cas, des paquets de
données sont traités différemment en fonction de leur
adresse source. Dans les réseaux, un routeur ou un firewall peut laisser
passer des paquets dont l'adresse source indique qu'ils proviennent d'un site
ami. De même, certaines applications offrent des privilèges aux
connexions qui émanent de sites connus. Par exemple
rsh, sous Unix, peut permettre l'exécution de commandes
sans demander de mot de passe, à condition que la requête vienne
d'un site se trouvant sur une liste de sites amis.
Typiquement, les attaques de Spoofing exploitent des relations de
confiance entre des machines qui appartiennent à une même
entité. Par exemple, les machines d'une salle informatique peuvent
être configurées de manière à ce qu'on n'ait pas
besoin de s'authentifier si on se connecte à une machine de la salle
à partir d'une autre machine de la salle. Un pirate peut exploiter cette
relation de confiance en essayant de se faire passer pour une machine de la
salle lorsqu'il se connecte à une autre machine de la salle. La
difficulté avec le Spoofing est que le pirate qui envoie des paquets
avec des adresses source falsifiées ne voit pas les réponses
à ces paquets, puisque la cible répondra à l'adresse
falsifiée se trouvant dans les paquets. Ceci est d'autant plus difficile
que la plupart des attaques se basent sur des connexions TCP et que pour
établir une connexion, TCP exige que trois paquets soient
échangés.
Pour comprendre les tenants et aboutissants d'une telle attaque
il faut se rappeler quelques notions de base de TCP. TCP est un protocole
à fenêtre coulissante. Il utilise donc un numéro de
séquence pour chaque direction, indiquant le numéro du premier
byte envoyé dans la trame courante et le numéro du prochain byte
attendu. Pour éviter que des paquets retardés d'une ancienne
connexion soient confondus avec des paquets d'une connexion courante, les
numéros de séquence ne commencent pas à zéro, mais
à une valeur initiale qui est incrémentée dans le temps.
Lors de l'établissement d'une connexion, la machine initiante envoie une
demande de synchronisation (paquet syn.) en indiquant le numéro de
séquence initial qu'elle va utiliser. La machine destination
répond avec une confirmation de synchronisation (synack) qui contient
son numéro de séquence initial. La machine initiante peut ensuite
envoyer le premier paquet faisant partie du protocole à fenêtre,
un acquittement (ack), qui contient le numéro de séquence du
prochain byte attendu, éventuellement des données et le
numéro de séquence du premier byte transmis (ou à
transmettre). Cet échange est décrit à la figure
Imaginons maintenant le cas d'un pirate sur la machine A qui veut
se faire passer pour un utilisateur sur la machine C. Dans ce cas il
crée des paquets TCP dont l'adresse source est
C.
Quand la machine B va recevoir les paquets du pirate, elle va,
de bonne foi, répondre à la machine C. Le pirate ne verra donc
pas le numéro de séquence initial de B et ne peut continuer le
dialogue que s'il est capable de le deviner. Ce dialogue de sourds est
illustré à la figure 2
Pour réussir son attaque le pirate a besoin de deux
informations :
1. Le numéro de séquence initial utilisé
pour la dernière connexion établie par la cible
2. L'incrément qui va être utilisé pour
générer le numéro de séquence initial de la
prochaine connexion.
Pour obtenir la première information, le pirate n'a
qu'à faire une tentative de connexion en donnant sa vraie adresse source
(si le réseau est surveillé alors il sera démasque).
L'acquittement que la cible lui envoie contient le numéro de
séquence initial actuel. La deuxième information,
Figure 2 : ECHANGE
DES NUMÉROS DE SÉQUENCE INITIAUX LORS DE L'ÉTABLISSEMENT
D'UNE CONNEXION TCP
Figure 3 : TENTATIVE
D'ETABLISSEMENT D'UNE CONNEXION PAR UN PIRATE. POUR QUE L'ATTAQUE REUSSISSE, LE
PIRATE DOIT DEVINER LE NUMERO DE SEQUENCE INITIAL PROPOSE PAR
B.
Pour obtenir la deuxième information, l'incrément,
est plus difficile à obtenir. Initialement, la plupart des
implémentations de TCP utilisaient des incréments fixes. Suite
aux attaques de Spoofing, les incréments fixes ont été
remplacés par des incréments aléatoires. Quand le
générateur de nombres aléatoires utilisé est trop
simple, le pirate arrive quand-même à prédire le prochain
numéro de séquence initial. Il faut noter que le pirate n'a pas
besoin de connaître la valeur exacte du numéro de séquence.
Il peut envoyer une multitude de paquets avec une série de
numéros de séquence initiaux parmi lesquels il suppose que se
trouve le bon numéro. Les paquets avec les mauvais numéros seront
rejetés, et le paquet avec le bon numéro établira la
connexion.
Il existe une difficulté supplémentaire à
part le fait que le pirate doive deviner le numéro de séquence
initial de sa cible. En effet, la machine pour laquelle le pirate se fait
passer va recevoir un acquittement de synchronisation (syn-ack), alors qu'elle
n'a jamais demandé de synchronisation. Dans ce cas elle va envoyer un
paquet d'annulation (reset, rst), pour invalider la connexion. Le pirate doit
donc soit envoyer son paquet de données avant que la machine C ait pu
répondre, soit choisir comme machine C une machine hors service (mais
tout de même amie de B), quitte à mettre hors service cette
machine lui-même.
|