Les IDS et les couches
By Sebastien Tricaud on Thursday, October 4 2007, 20:51 - Permalink
En lisant un article sur la détection des intrusions réseau aujourd'hui je suis tombé sur quelque chose qui a faillit me faire prendre une crise cardiaque.
Après avoir un peu gémi puis un peu grogné, je me suis dit qu'il serait bon d'écrire sur l'organisation d'un système de détection d'intrusions vis-à-vis des différentes couches du modèle OSI.
Regardons de plus près l'image choquante. Elle est rayée en rouge volontairement pour ne pas que vous puissiez la retenir facilement en mémoire et qu'à cause de cet article, finalement vous soyez plus confus qu'avant de l'avoir lu :

Qu'est-ce que l'on voit exactement ?
Que la détection d'intrusion réseau n'agit qu'à partir du niveau réseau jusqu'au niveau applicatif. Ce qui est terrible là dedans, c'est que l'on oublie que la plupart des outils de détection d'intrusion de France et de Chatuzange-le-Goubet utilisent la libpcap comme base pour la capture des données lui permettant ensuite de faire la relation avec les signatures pour en déduire des alertes. De Snort a Bro en passant par Sancp et bien d'autres encore...L'image est donc incorrecte, et sa version juste et modifiée est :

C'est bien, maintenant vous avez la vérité, mais le sujet de ce billet est de présenter l'interaction des IDS avec les différentes couches et enfoncer le clou parce qu'un peu de rafraichissement de mémoire ne fait jamais de mal.
Liaison de données
Comme expliqué précédemment, c'est au niveau de cette couche que la libpcap fonctionne. Pour preuve, il vous arrive toujours de voir les paquets arriver lorsque vous mettez un place des règles de firewall. Les trames Ethernet arrivent, sont généralement d'une taille fixée à un maximum de 1500 octets et contiennent l'adresse MAC des cartes physiques qui délivrent les données.La libpcap copie les données (ce qui peut être un problème de performance, mais la un certain patch peut vous aider; ainsi qu'un problème d'évasion d'IDS, mais là on dépasse du cadre de ce billet, je reviendrai un jour là dessus), applique ensuite son filtre BPF pour le délivrer à l'application qui utilise les fonctions magiques.
Réseau
On peut très bien récupérer les informations concernant les paquets réseau par un autre biais que via la libpcap ou mmap() en utilisant ce que le noyau (je prend Linux comme référence) peut proposer à ce niveau.Je pense en particulier à Netfilter, qui a l'avantage de permettre à des modules d'utiliser ses hooks mis à différents points de la couche réseau, et qui en plus offre deux fonctionnalités plaisantes :
- LOG/ULOG : Afin d'envoyer les paquets mis dans cette cible dans un journal système (LOG) ou en vue d'une application utilisateur (ULOG)
- NFQUEUE : Qui renvoie les paquets en espace utilisateur pour les applications qui sont connectées sur la socket nflink en vue de définir un verdict
Transport
Ici rien de vraiment sexy, en géneral la capture se fait au niveau au (des?) dessous.Session, Présentation
Une fois la capture effectuée, c'est à ce niveau que l'on voit apparaitre ce que certains appellent des dissecteurs, d'autres des préprocesseurs... Il s'agit en fait de décoder des protocoles comme RPC, et se choper au passages des problèmes intéressants. L'avantage est de pouvoir décoder les protocoles en profondeur pour en faire une analyse plus poussée qu'une simple recherche de motifs sur la charge utile.Application
À ce niveau, on parle des logs générés par les différentes applications qui sont ensuite analysés par les programmes comme Prelude LML ou encore Ossec. On récupère ces informations en utilisant des technologies comme FAM, Gamin ou en faisant soi-même la vérification sur la modification des fichiers.En espérant avoir apporté un peu de clarté dans tout ceci, n'hésitez pas à me soumettre vos documents choquants en vue d'une analyse
Comments
Pfff c'est Has been ULOG, faut utiliser NFLOG si on est dans le vent. Enfin dans le vent, c'est pire que ça il faut la toute dernière version d'iptables et presque pareil pour le noyau (il faudra même un 2.6.23 pour que ça soit parfait).