Détection et tolérance d'intrusionsDate de publication : 06/05/2006 , Date de mise à jour : 06/05/2006
Par
Samuel Dralet (http://samueldralet.developpez.com)
Il est devenu très utile d'utiliser des critères pour classifier les détecteurs d'intrusions. C'est ce que nous allons présenter dans la suite de cet article.
I. Introduction II. Les détecteurs d'intrusions A. Les principes d'analyse B. Les autres critères C. Lequel choisir finalement ? III. Outre-passer les IDS A. Les attaques réseaux B. Les techniques de RFP C. Les tactiques au niveau des buffers overflows 1. Filtrage des NOPs 2. Filtrage du shellcode 3. ADMutate D. D'autres techniques anti-ids IV. La tolérance d'intrusion A. Définition B. La technique de 'fragmentation-redundancy-scattering' V. Conclusion Références Licence GFDL I. Introduction
Les systèmes d'information sont aujourd'hui de plus en plus ouverts sur Internet. Il en découle un nombre croissant d' attaques. Une politique de sécurité autour de ces systèmes est donc primordiale. Outre la mise en place de pare-feu, de systèmes d' authentification, il est nécessaire pour compléter cette politique de sécurité, d'avoir des outils de surveillance pour auditer le système d'information et détecter d'éventuelles intrusions. Ce que nous appelons intrusion signifie pénétration des systèmes d'information mais aussi tentatives des utilisateurs locaux d'accéder à de plus hauts privilèges ou tentatives des administrateurs d'abuser de leurs privilèges.
II. Les détecteurs d'intrusions
Le domaine de la détection d'intrusion est encore jeune mais en plein développement. Nous dénombrons à l'heure actuelle environ une centaine de systèmes de détections d'intrusions (ou IDS pour Intrusion Détection System), que ce soit des produits commerciaux ou du domaine public. Il est donc devenu très utile d'utiliser des critères pour classifier ces IDS. C'est ce que nous allons présenter dans la suite de cet article.
A. Les principes d'analyse
La méthode d'analyse est le principal critère pour sélectionner un IDS. Deux méthodes existent aujourd'hui : l'approche comportementale et l'approche par scénarios.
L'approche comportementale consiste à analyser si un utilisateur a eu un comportement anormal par rapport à son habitude. Par exemple, la secrétaire qui se connecte la nuit à certaines heures, en plus de la journée serait pour l'IDS un comportement inhabituel. Il se base pour cela sur un modèle statistique : des variables seront définies (ici la plage horaire des connections de la secrétaire par jour), et représenteront le profil type (comportement normal) d'un utilisateur. Des recherches sont faites aujourd'hui pour appliquer cette approche sur les réseaux de neurones. La technique est de leur apprendre le comportement normal de l'utilisateur.
Contrairement à l'approche comportementale qui est une analyse plutot aléatoire, l'approche par scénarios nécessite une base de données d'attaques, plus exactement des signatures d'attaques, pour effectuer l'analyse. Une comparaison de ces signatures avec les paquets que l'IDS capture concluera s'il y a eu oui ou non intrusion. C'est ce qui s'appelle le 'pattern matching'.
Chacune de ces approches a ses avantages et ses inconvénients. L'approche comportementale permet de détecter des attaques inconnues (meme s'il est difficile d'établir des profils). Elle ne nécessite pas non plus de construction de base d'attaques, et donc d'un suivi de cette base, mais peut-etre victime de faux positifs : l'IDS détecte des attaques qui n'en sont pas (le cote aléatoire de la méthode). Nous verrons plus loin comment se servir de ce défaut pour passer au travers d'un IDS. Pour l'approche par scénarios, c'est l'inverse. L'IDS se base sur des attaques connues pour effectuer son analyse, mais il est difficile de maintenir cette base de signatures.
B. Les autres critères
D'autres critères permettent de classer les IDS. Nous n'allons que brièvement en parler meme s'ils ont leur importance:
C. Lequel choisir finalement ?
L'idéal serait évidemment un système de détection d'intrusions qui remplisse tous ces critères. Nous avons pu voir dans la présentation des différentes techniques d'analyse qu'elles étaient complémentaires. Aucune approche n'est dominante et c'est justement une erreur que de développer une seule méthode d'analyse dans un IDS.
III. Outre-passer les IDS
Les systèmes de détection d'intrusions présentent des limites quant a leur utilité. Nous avons vu précédemment que l'IDS pouvait etre victime de faux positifs, avoir une base de données d'attaques obsolète... A cause de ces limites, des techniques pour attaquer ou passer au travers des IDS et plus particulièrement des NIDS se sont développées. Elles sont nombreuses et je ne pourrai pas les aborder de façon détaillée dans ce document. Je les listerai donc en donnant une explication assez succincte de celles-ci, sachant qu'elles peuvent s'appliquer à certains IDS et non à d'autres.
A. Les attaques réseaux
Le but principal est de réduire les possibilités du NIDS à détecter les attaques :
B. Les techniques de RFP
Rain Forest Puppy ou RFP a développé plusieurs techniques anti-IDS au niveau du protocole HTTP qu'il a implémenté dans son scanner cgi Whisker (http://www.wiretrip.net/rfp).
Le principe meme de ces techniques est de lancer les attaques sous une forme différente de celles référencées dans la base de signatures des IDS. Les requetes HTTP ne seront alors pas "matchées" (au sens pattern matching que nous avons vu précédemment). Il rend complexe ces attaques afin que les IDS ne puissent pas les détectent. Il est important aussi de savoir que les techniques suivantes peuvent etre combinées ensemble, selon le système attaqué.
C. Les tactiques au niveau des buffers overflows
Parmi les attaques que l'IDS peut détecter, il y a les attaques de type buffer overflow. Il analyse pour cela le trafic à la recherche de chaines de caractères telles que "/bin/sh","0x90" (NOP) ... Je ne décrirais pas ici comment fonctionne un buffer overflow, ca n'est pas le but et d'autres articles sont déja parus a ce sujet.
1. Filtrage des NOPs
Nous savons que les attaques de type buffer overflow utilisent une série de NOP (0x90 sur plate-forme x86). Nous trouvons généralement dans un exploit, la séquence:
Le principe dans la détection est donc le suivant : il analyse le trafic, regarde s'il voit passer une série de caractères "0x90" et agit en conséquence.
Voici un exemple de règle de Snort:
Avant de continuer, je précise que Snort est un IDS très connu sous licence GPL que vous pouvez trouver a l'URL : http://www.snort.org.
Le but ici, est de trouver une instruction équivalente aux NOPs afin de rendre notre attaque indétectable. Il suffit de remplacer 0x90 par 0x41:
Pourquoi '0x41' ? Cette instruction '0x41' (équivalente à la lettre 'A' en ascii) représente en assembleur 'inc %ecx' (elle incrémente de 1 la valeur du registre %ecx). Quelque soit la valeur de %ecx, cette instruction n'a aucune importance dans le contexte de l'exploit. Elle a donc les memes avantages que l'instruction NOP : codée sur un octet et ne faisant rien.
2. Filtrage du shellcode
Un exemple de règle toujours avec Snort:
Snort analyse donc le traffic et recherche la chaine du shellcode. Elle correspond à une partie du shellcode de l'exploit rdC-LPRng.c (LPRng-3.6.24-1) :
La technique est simple: si nous modifions ou changeons le shellcode de l'exploit, l'IDS (dans notre cas Snort) ne détecte plus l'attaque.
Par exemple, l'instruction :
qui met a NULL le registre %eax peut aussi s'écrire :
Il arrive aussi que l'IDS cherche à détecter la chaine de caractères /bin/sh. Pour passer au travers de cette détection, une des methodes est de crypter par un simple XOR cette chaine et le shellcode la décrypte ensuite au moment ou il s'execute. Voici un exemple de shellcode :
Le principe de ce shellcode est de décrypter la chaine /bin/sh qui est représentée par '.string \"\\x77\\x3a\\x31\\x36\\x77\\x2b\\x30\\x58\"' avec la clé "X" représentée par 'movl $0x58585858,%edx'. Il passe ensuite la chaine "/bin/sh" en argument à execve().
3. ADMutate
Récemment, K2 a presenté son outil ADMutate au CanSecWest. Il utilise justement ces techniques anti-IDS au niveau des attaques de type buffer overflow mais en utilisant le polymorphisme pour créer les shellcodes, technique qu'il a empreinté aux virus. C'est à dire que son shellcode est capable de se modifier tout seul. Il est donc plus difficile à détecter. Vous pouvez trouver cet outil à l'url : ftp://adm.freelsd.net/ADM/ADMmutate-0.7.3.tar.gz
D. D'autres techniques anti-ids
Je n'ai pu aborder toutes les techniques mais sachez qu'il en existe de nombreuses. Le fait par exemple de changer le port sur lequel agit un cheval de troie. Je n'ai pas abordé non plus les notions d' IP Spoofing mais elles font parties des techniques anti-ids.
IV. La tolérance d'intrusion
Comme vous avez pu le voir, les systèmes de détection d'intrusions ne sont pas infaillibles. Vous etes alors en train de vous demander quel système peut nous assurer un maximum de sécurité. Il existe une alternative à ces systèmes qui sont les systèmes distribues à tolérance d'intrusions.
A. Définition
Voici une définition issue de la documentation "Intrusion Tolérance in Distributed Computing Systems" que vous trouverez dans les références :
"An intrusion-tolerant distributed system is a system which is designed so that any intrusion into a part of the system will not endanger confidentiality, integrity and availability".
"Un système distribué à tolérance d'intrusions est un système dont le but est de ne pas mettre en danger la confidentialité , l'intégrité et la disponibilité en cas d'intrusion dans une partie du système".
Pour etre plus clair, le concept de tolérance d'intrusion peut etre utilisé sur des systèmes distribués de par leur nature à distribuer, répartir de l'information à plusieurs endroits géographiques. Donc, si nous considérons que notre information sensible est répartie sur plusieurs sites, un pirate meme s'il a réussi à s'introduire sur une partie de notre système ne pourra récupérer qu'une partie de l'information sans aucune signification pour lui.
Mais de quelle manière est implémenté ce concept de tolérance d'intrusion ?
B. La technique de 'fragmentation-redundancy-scattering'
Cette technique consiste à éclater en plusieurs fragments l'information sensible. Les fragments seront ensuite enregistrés sur plusieurs sites géographiques sans qu'ils aient une relation entre eux. C'est le 'scattering'. Donc si un pirate veut récupérer la totalité de l'information, il doit prendre la main sur l'ensemble des sites. Ce que nous appelons information sensible regroupe les données, les programmes et les droits d'accès. Avec la technique de fragmentation-scattering, nous tolérons donc un certain nombre d'intrusions tout en gardant une confidentialité et une integrité de l'information.
A cette tolérance d'intrusions, nous ajoutons la tolérance de destruction des informations grace à une redondance des fragments. Plusieurs copies de chaque fragment sont archivées sur plusieurs sites différents. Une disponibilité de l'information est donc assurée.
Fragmentation-redundancy-scattering sur un fichier
Cette technique fournit donc tous les services nécessaires à la sécurité de l'information, et semble etre une bonne alternative aux systèmes de détection d'intrusion.
Si vous voulez avoir plus de renseignements, notamment les caractéristiques des différents sites d'un système distribué à tolérance d'intrusions, je vous conseille de lire les deux documents en référence de Yves Deswarte, Laurent Blain, et Jean-Charles Fabre.
V. Conclusion
Le domaine des systèmes de détection d'intrusions est un sujet très vaste. J'aurais pu parler des honey pots, cette nouvelle méthode de détection d'intrusions et du projet Honeynet (http://project.honeynet.org), de la facon de placer un IDS dans un système d'information en complément du firewall. Toutefois, nous pouvons conclure que les IDS sont loin d'etre infaillibles meme s'ils apportent un complément à la sécurité du système d'information.
Références
Licence GFDL
Copyright (c) 2006 Samuel Dralet.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation;
with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
|