Faiblesse des générateurs de nombres aléatoires pour les ISN du protocole TCP
Date : 06 Juillet 2005
La faiblesse des générateurs de nombres aléatoires utilisés pour le choix de l'ISN (Initial Sequence Number) du protocole TCP génère, à intervalle régulier, des avis de sécurité (voir par exemple CERT-IST/AV-2001.133, CERT-IST/AV-2001.060, ou CERT-IST/AV-2000.243).
Nous examinons dans cet article cette problématique, et montrons pourquoi, selon nous, ces anomalies ne représentent pas un danger majeur. Nous sommes bien sur tout à fait prêts à discuter avec vous de ce point de vue (en particulier si votre avis diffère du notre), et nous rappelons à cette occasion qu'un forum de discussion (forum@cert-ist.com) existe pour échanger sur tout sujet relatif à la sécurité (pour vous y inscrire, envoyez une demande à cert@cert-ist.com, avec copie à votre représentant au Cert-IST).
Rappels sur la notion d'ISN
Afin de garantir que tous les paquets envoyés ont été correctement reçus, TCP repère les octets échangés au moyen de numéros, appelés " numéros de séquence " (" sequence numbers "). A chaque octet envoyé, ce numéro de séquence est incrémenté, et le destinataire confirme la bonne réception d'un octet donné, en retournant dans le champ " Acknowledgement " son numéro de séquence. Les numéros de séquence ne débutent pas à zéro, mais à une valeur arbitraire, choisie lors de l'établissement de la connexion, et appelé " Initial Sequence Number " (ISN).
L'ISN doit être choisi aléatoirement. Le fait qu'il change pour chaque nouvelle communication minimise la possibilité que des paquets en retard interfèrent avec une communication en cours. Le fait qu'il soit aléatoire rend surtout impossible sa prédiction.
Dangers des ISN prédictibles
Le premier danger (le plus médiatisé) des ISN prédictifs est qu'un attaquant est capable dans ce cas de réaliser des attaques de type " TCP blind spoofing ", c'est-à-dire d'insérer des paquets dans une communication TCP déjà établie par un tiers, ou d'initialiser en se faisant passer pour ce tiers une nouvelle connexion TCP, bien qu'il ne soit pas physiquement sur le chemin entre ce tiers et la machine cible (c'est cette dernière contrainte qui impose de faire l'attaque " en aveugle ", et qui nécessite d'avoir la capacité de prédire les ISN). Bien que possible (cette technique a été fortement médiatisée lorsqu'en 1994 Kevin Mitnick a utilisé cette attaque contre Tsutomu Shimomura), cette vulnérabilité reste difficilement réalisable :
- elle n'est réaliste que si la machine cible utilise une authentification basée sur l'adresse IP (par exemple un service " rlogin " autorisant la connexion de certaines adresses source sans mots de passe).
- elle est dans tous les cas bien plus complexe que la plupart des attaques connues (par exemple l'exploitation d'un débordement de buffer dans un démon réseau).
Un autre danger (moins connu, mais également moins spectaculaire) est que l'analyse des ISN générés par une machine cible peut permettre de reconnaître à distance le système d'exploitation de cette machine (technique de " finger-printing ").
Il est en effet possible d'établir un catalogue donnant les caractéristiques des ISN pour les systèmes d'exploitations les plus populaires (voir le document publié par " bindview.com " sur ce sujet, et référencé dans la section " Pour plus d'information "). Cette technique de reconnaissance à distance d'une cible par analyse des ISN reste actuellement difficile, dès que les ISN ne sont pas trivialement prédictifs. Un travail actif est cependant fait dans ce domaine, comme en témoigne la publication récente du logiciel " ISNprober " (ce logiciel utilise les ISN, ainsi que les ID du niveau IP, pour identifier en particulier qu'une adresse IP virtuelle est " load-balancée " en réalité sur plusieurs machines distinctes).
Selon l'étude (non exhaustive) de " bindview.com " les implémentations les plus faibles sont les suivantes :
- Windows NT4 avant SP6a,
- Windows 95 et 98,
- AIX 4.3,
- HP-UX 11,
- Solaris 7 (en mode " tcp_strong_iss=2 ").
Et les plus robustes sont :
- Open-BSD 2.9 et FreeBSD 4.2
- Linux 2.2,
- CISCO IOS 12 (si la vulnérabilité décrite par CERT-IST/AV-2001.060 a été corrigée)
- Solaris 7 (en mode " tcp_strong_iss=1 ").
Conclusion
Les implémentations faibles du choix de l'ISN (cas où l'ISN peut être prédit) constituent une vulnérabilité indéniable. Cette vulnérabilité n'est cependant préoccupante que dans le cas des implémentations vraiment très faibles, puisque dans ce cas une attaque de type " spoofing " est envisageable.
Pour plus d'information
- Une analyse détaillée par " bindview.com " des ISN de diverses implémentations de TCP : http://razor.bindview.com/publish/papers/tcpseq.html
- L'outil " ISNprober " : ftp://ftp.ubizen.com/tools/isnprober-1.02.tgz