Nicolas Nobelis DEA RSD / ESSI3 SAR Septembre 2004 Un modèle de Case-Based Reasoning pour la détection d'intrusion Rapport de stage DEA RSD/ESSI3 SAR Stage effectué sous l'encadrement de Melle Karima Boudaoud pour le laboratoire I3S Avril – Septembre 2004 1. Introduction Les réseaux et systèmes informatiques sont devenus des outils indispensables au fonctionnement des entreprises. Ils sont aujourd’hui déployés dans tous les secteurs professionnels : la banque, les assurances, la médecine ou encore le domaine militaire. Initialement isolés les uns des autres, ces réseaux sont à présent interconnectés et le nombre de points d’accès ne cesse de croître. Ce développement phénoménal s’accompagne naturellement de l'augmentation du nombre d’utilisateurs. Ces utilisateurs, connus ou non, ne sont pas forcément pleins de bonnes intentions vis-à vis de ces réseaux. Ils peuvent exploiter les vulnérabilités des réseaux et systèmes pour essayer d’accéder à des informations sensibles dans le but de les lire, les modifier ou les détruire, pour porter atteinte au bon fonctionnement du système ou encore tout simplement par jeu. Dès lors que ces réseaux sont apparus comme des cibles d’attaques potentielles, leur sécurisation est devenue un enjeu incontournable. De nombreux outils et moyens sont disponibles, tels que firewalls, solutions matérielles, logiciels d'audits ou systèmes de détection d'intrusion (IDS). Les IDS sont une des plus populaires réponses au problème posé par : ● ● ● l'évolution continue des attaques, l'apparition de nouvelles attaques, la nécessité de pouvoir appliquer rapidement de nouvelles politiques de sécurité dans un réseau afin de détecter et réagir le plus vite possible aux attaques survenant dans ce réseau. Dans ce contexte, un IDS utilisant des politiques de sécurité et fondé sur un système multi-agents a été proposé ([21]). Dans ce système, des agents intelligents coopèrent et communiquent pour détecter efficacement des attaques suivant des schémas d'attaque définis dans leur base de connaissances. Les caractéristiques clés des agents intelligents (AI) utilisées dans ce système sont la délégation, la coopération et la communication. Cependant, une propriété importante des AI, qui est leur capacité d'apprentissage, n'a pas été utilisée. Cette caractéristique nous paraît idéale pour détecter de nouvelles attaques. C'est pour cette raison que nous nous proposons d'étendre cet IDS multi-agents en lui ajoutant la fonction d'apprentissage de nouveaux schémas d'attaque. L'objectif de ce travail est donc de concevoir d'un modèle permettant la détection d'attaques inconnues pour le système à base d'agents existant. Nous commencerons par un état de l'art sur la détection d'intrusions. Puis, nous présenterons une technique particulière permettant l'extraction et la classification de données pertinentes, issues de fichiers d'audit, pour la détection d'intrusions : le Data Mining. Ensuite, nous étudierons une seconde technique, dite "Raisonnement à Base de Cas" ("Case Based Reasoning"), technique qui nous semble intéressante dans l'apprentissage de nouvelles attaques. Enfin, nous décrirons notre modèle fondé sur le CBR pour la détection d'intrusions inconnues. Finalement, nous terminerons par une conclusion et quelques remarques sur les travaux futurs. 2/28 2. État de l'art Une intrusion peut être définie comme tout ensemble d'actions qui essaye de compromettre : ● ● ● la confidentialité des données, l'intégrité des données, la disponibilité d'une ressource ou d'un service. En dépit des différentes formes d'intrusion, elles peuvent être regroupées dans deux classes : ● ● les intrusions connues les intrusions inconnues ou anomalies. Dans le cadre de ce travail, nous nous intéresserons à la détection de ces deux types d'intrusions. 2.1 La détection d'intrusions La détection d'intrusions fait référence à la capacité d'un système informatique de déterminer automatiquement, à partir d'événements relevant de la sécurité, qu'une violation de sécurité se produit ou s'est produite dans le passé. Pour ce faire, la détection d'intrusions nécessite qu'un grand nombre d'événements de sécurité soient collectés et enregistrés afin d'être analysés. On parle alors d'audit de sécurité. Les systèmes de détection d'intrusion (IDS) actuels reposent sur des techniques diverses et variées. Dans cette section, nous présentons une classification de haut niveau de ces techniques. Les systèmes de détection d'intrusions sont divisés en deux catégories, suivant l'approche utilisée, qui peut être ([21]) : ● ● ● soit une approche par scénarios. soit une approche comportementale. soit hybride (i.e. un mixte des deux approches) Les approches par scénarios se basent sur le fait que toute attaque connue produit une trace spécifique dans les enregistrements d'audit. Elles nécessitent une connaissance a priori des attaques à détecter : une alarme est émise lorsque la trace d'une attaque connue est détectée. Les approches par scénarios utilisent des techniques différentes, dont les principales sont : les techniques à base de règle (i.e. les systèmes experts). La base de connaissances des systèmes experts contient des règles concernant non seulement les scénarios d'attaque que l'on veut détecter sur le système cible, mais aussi les vulnérabilités connues de ce système. La construction de cette base repose entièrement sur l'expérience et le savoir faire de l'officier de sécurité. ● les approches fondées sur la signature des attaques essayent de représenter les attaques sous forme de signatures. Les données courantes sont alors comparées à ces signatures. S'il y a des similitudes, une alarme est déclenchée. ● et les algorithmes génétiques, utilisés afin d'optimiser la recherche de scénarios d'attaque dans des fichiers d'audit ([20]). Leur utilisation permet d'éviter une recherche exhaustive en sélectionnant les meilleurs éléments d'une population (ici les scénarios d'attaque). ● L'approche comportementale vise à modéliser ou à prédire le comportement normal : cette approche nécessite une phase d'apprentissage proprement dite durant laquelle les cas de références, représentant le profil normal, sont construits. Une alarme est émise quand une déviation trop importante de ce profil est observée. Pour modéliser le profil normal, les approches comportementales utilisent : 3/28 soit des modèles statistiques qui consistent à utiliser des mesures statistiques pour modéliser un profil de comportement et détecter ensuite des comportements intrusifs. Chacune des ces mesures est associée à un seuil ou à un intervalle de valeurs, dans lequel une activité est considérée comme normale. Tout dépassement de seuil ou situation de valeurs à l'extérieur des bornes de l'intervalle indique une activité anormale, ● soit des systèmes experts. La différence majeure entre un système expert et un modèle statistique est que ce dernier utilise des formules statistiques pour identifier des comportements dans les données d'audit alors que le système expert utilise un ensemble de règles pour représenter ces comportements. ● Les approches comportementale prédisant le profil normal peuvent, quant à elles, reposer sur : des générateurs de forme prédictive. Cette approche prédit les formes les plus probables en se basant sur les formes observées. Durant la phase d'apprentissage, cette approche détermine des règles temporelles qui caractérisent le comportement normal des utilisateurs. ● ou des réseaux de neurones. Un réseau de neurones est constitué de plusieurs éléments de traitement simples appelés unités et qui interagissent en utilisant des connections pondérées. Le réseau constitue le profil normal d'un utilisateur. Ainsi, après chaque commande utilisée par cet utilisateur, le réseau essaye de prédire la commande suivante, en tenant compte des n commandes antérieures. Si la commande réelle dévie de celle prédite, alors une alarme est envoyée. ● Quelle que soit l'approche choisie (comportementale, par scénarios ou hybride), tous les IDS se trouvent confrontés au problème de la détection de nouvelles attaques, plus précisément à la détection d'attaques inconnues. Les systèmes fondés sur une approche par scénarios, ne peuvent, a priori, détecter que des attaques connues : la détection de nouvelles attaques pour eux consiste en la mise à jour de leur base de connaissance (à la manière des logiciels antivirus). L'approche comportementale, quant à elle, permet effectivement de détecter des attaques inconnues, puisque toutes les attaques constituent une déviation vis à vis de leur comportement normale de référence. Au delà du problème de la détection de nouvelles attaques, tous les IDS existants (encore une fois, quelle que soit l'approche sur laquelle ils reposent) sont soumis aux problèmes de l'extraction et surtout de la classification de données pertinentes d'un large volume de donnée diverses ([13]). Ce volume et cette variété peuvent se justifier par ([9]) : l'augmentation du nombre d'attaques ainsi que la taille des journaux d'audits manipulés (qui contiennent de plus en plus d'événements), augmentations liées à celle des débits des réseaux, ● l'éventail d'IDS (propriétaires ou non) utilisant chacun leurs techniques et données propres par manque de standard reconnu. ● Une des techniques les plus populaires à l'heure actuelle est celle du Data Mining, que nous allons expliciter dans la partie suivante. 2.2 Le Data Mining et la classification de données d'audit D'après Dary Alexandra Pena Maldonado ([9]), le Data Mining (DM) est une technique permettant de retrouver des corrélations d'attributs entre éléments d'un même jeu de données, pour caractériser un comportement spécifique, mais autorisant également la construction de règles à des fins de classification. Pour Wenke Lee & Al. ([18]), le DM est un processus chargé d'extraire automatiquement un modèle d'un large ensemble de données. Les auteurs distinguent différent types d'algorithmes de DM : ● ● Classification : permet de déterminer l'appartenance d'un élément à une catégorie prédéfinie. Analyse de lien : permet de déterminer les relations entres différentes caractéristiques d'une base de données, afin de conseiller le meilleur jeu de caractéristiques pour la détection d'intrusions. 4/28 ● Analyse de séquence : autorise la recherche, dans une séquence d'événements, de schémas caractéristiques, afin de définir le comportement normal. Le DM peut être utilisé quelque soit le type de stratégie sur lequel repose le système de détection d'intrusions, comme nous allons le voir dans les paragraphes ci-dessous. 2.2.1 Le Data Mining dans les approches par scénarios Le protocole utilisé dans cette approche est le suivant : Il faut tout d'abord prendre un vaste jeu de données dont les entrées sont étiquetées comme étant des activités normales ou anormales. Le Data Mining intervient à travers l'utilisation d'un logiciel de création de règles comme RIPPER ([19]) : A partir du jeu de données, des règles précises sont générées permettant de caractériser une activité, caractérisation normale ou anormale. Deux exemples populaires d'une telle approche sont : ● Le projet "Automated Discovery of Concise Predictive Rules for Intrusion détection" de Helmer & Al ([12] plus agents [10] [11]), qui utilise la technique suivante : RIPPER est lancé sur un jeu de données d'entraînement étiqueté (i.e. les attaques sont identifiées). Cet algorithme génère ensuite des règles de classification pour la classe comprenant le moins d'éléments. Illustrons cela par un exemple. Soit V un vecteur d'événements inconnus à classifier. Si dans le jeu d'entraînement, il y a moins d'attaques que d'événements normaux, les règles générées ressemblent à : Si caractéristique no1 de V > x alors V est une attaque Si (caractéristique no2 de V > y et caractéristique no5 de V <> 3) alors V est une attaque ... Sinon V n'est pas une attaque. Illustration 1: Un exemple de règles générées par RIPPER Ceci reste une utilisation classique de RIPPER, mais ce projet est néanmoins très intéressant de par l'utilisation de plusieurs techniques conjointes (tel que RIPPER et les algorithmes génétiques par exemple). ● Le projet JAM – Java Agent For Metalearning ([18][17][16]), qui utilise une approche nécessitant le calcul d'un profil issu de données étiquetées durant une phase d'apprentissage. Un algorithme d'apprentissage est ensuite utilisé pour classifier des événements inconnus. Ce projet présente un caractère original car le système JAM est indépendant de l'algorithme d'apprentissage. Les algorithme RIPPER, Bayes et Wpebls sont inclus nativement dans le système, mais n'importe quel autre algorithme peut être utilisé via un système de plugin. Pour plus de détails sur les résultats de ce projet, voir [15]. 2.2.2 Le Data Mining dans les approches comportementales Dans les approches comportementales, le DM est utilisé sur un jeu de données enregistrées durant une utilisation normale du système lors d'une phase dédiée d'apprentissage (contrairement à l'approche précédente, les données ne sont pas étiquetées suivant leur nature - normale ou anormale - ) . L'utilisation du DM permet de construire le profil normal utilisé pour l'observation de déviations par rapport à ce profil, afin de caractériser les attaques. 5/28 Deux exemples d'une telle approche sont : ● Le projet ADAM – Audit Data Analysis and Meaning ([8]) qui utilise une combinaison de règles d'association et de classification pour découvrir des attaques dans des fichiers d'audit du logiciel TCPdump. ADAM construit tout d'abord un profil normal à partir de ces fichiers d'audit enregistrés durant une période ne comprenant pas d'attaques. Ensuite, un algorithme est lancé sur un jeu de données à tester afin de retirer toutes les traces d'un comportement normal, ceci à l'aide du profil normal construit précédemment. Finalement, un dernier algorithme spécialement entraîné à la classification des attaques est lancé sur les données restantes, les classifiant en attaques connues, attaques inconnues et fausses alarmes. ● Le projet "Intrusion Detection with Unlabeled Data Using Clustering" de Leonid Portnoy ([14]) qui définit un framework permettant de détecter des attaques inconnues nécessitant uniquement un jeu de données non étiqueté durant la phase d'apprentissage. Les données brutes non identifiées sont agrégées en clusters, puis le cluster contenant le plus d'éléments est étiqueté "normal", les autres clusters étant étiquetés "anormaux". Lorsqu'un événement inconnu est soumis au système, un algorithme détermine à quel cluster appartient l'événement avec des calculs de distance euclidienne. 2.2.3 La nécessité d'une autre approche Pour conclure, le Data Mining est une approche très performante dans le domaine de la détection d'intrusions, et sa popularité caractérise bien l'engouement que les chercheurs ont eu pour lui. Néanmoins, deux points importants peuvent entraver son utilisation : Dans une approche par scénarios, l'obligation de posséder un jeu de données comprenant à la fois des attaques (true positive) et à la fois des événements normaux (true negative). ● Dans une approche comportementale, la nécessité de consacrer une phase d'apprentissage dédiée à la création d'un profil normal. ● Ces deux points nous ont poussé a chercher une autre approche que le Data Mining, recherche qui nous a conduit aux Modèles de Raisonnement à Base de Cas, dit "Case-Based Reasoning Models", que nous décrivons dans la section suivante. 2.3 Le Case-Based Reasoning Comme le définissent Aamodt & Plaza ([3]), "Le Case-Based Reasonning (CBR), est une approche capable d'utiliser la connaissance spécifique de problèmes (cas) s'étant déjà produits dans le passé pour répondre à de nouveaux problèmes. Un nouveau problème est résolu en cherchant un cas passé similaire, et en réutilisant sa solution dans le problème présent." Cette définition montre que le CBR est un algorithme très naturel : en tant qu'être humain, lorsqu'un problème se pose, l'idée première est de rechercher si ce problème (ou un cas similaire) s'est déjà produit, et, le cas échéant, reprendre la solution passée pour essayer de l'adapter au problème présent. 6/28 Illustration 2: Les principales étapes d'un algorithme de CBR De part la généralité de son algorithme, le Case-Based Reasoning a été utilisé dans des domaines variés, et nombreux sont les systèmes se fondant sur cette technique : CASEY, PROTOS, PATDEX ([7]), CREEK et CHROMA ([6]) pour ne citer que les plus connus. ● PROTOS est un système de CBR développé pour aider au diagnostique des malentendants. Un problème est présenté à PROTOS comme un vecteur de caractéristiques, et la tâche du système est de retrouver le cas passé qui correspond le plus au vecteur. La solution d'un problème passé est proposée comme solution au problème présent, sans adaptation (pas de REVISE). Si la solution est refusée par l'utilisateur, une étape d'apprentissage commence : PROTOS peut alors rechercher une autre solution, ou accepter une solution de l'utilisateur. Dans ce cas, l'utilisateur est obligé de définir les termes entrés dans le système qui sont inconnus de PROTOS, en décrivant leur relation avec les termes existants. Cette phase permet de construire la connaissance générale du système. Si le problème a été résolu tout de suite, le système renforce (par pondération) les caractéristiques ayant permit la résolution. Parallèlement, si le problème n'est résolu qu'en seconde étape, PROTOS affaiblit les caractéristiques fautives. L'originalité de PROTOS tient au fait que son apprentissage repose sur l'utilisateur. ● CASEY est un système de CBR développé pour aider au diagnostique de problèmes cardiaques. Un problème présenté à ce système est résolu en recherchant un cas, et, contrairement à PROTOS, en adaptant la solution passée au problème présent. Chaque cas contient une explication causale qui lie les caractéristiques au diagnostique (i.e. la solution). CASEY apprend toujours de la résolution d'un problème : le nouveau cas est enregistré s'il possède des caractéristiques suffisamment différentes du cas de référence recherché. Si le cas de référence est identique au problème présent, les informations définissant l'importance de ses caractéristiques sont mises à jour. Le problème majeur de CASEY est son absence d'interaction avec l'utilisateur (c'est, en quelque sorte, un monde fermé). ● CHROMA est un système utilisé pour choisir les techniques de chromatographie utilisées dans la purification de protéines issues de cultures. Ce système se focalise plus précisément sur la coopération dans un CBR distribué. Chaque agent dispose de connaissances propres sur les cas passés. Les auteurs identifient deux formes de CBR : le Distributed CBR (DistCBR) et le Collective CBR (ColCBR). Dans le premier cas, le problème posé à un agent A est transmit par 7/28 celui-ci à un autre agent B. Ainsi, la méthode de CBR utilisée sera celle de B. De manière générale, un problème soumis au CBR est distribué à tous les agents qui utilisent ensuite leurs propres méthodes pour sa résolution. Dans le cas du ColCBR, lorsque A transmet le problème, il transmet également sa méthode à B (ainsi, la méthode de A sera utilisée avec la connaissance de B). Autrement dit, l'émetteur utilise les mémoires de cas des autres agents : il s'agit, en quelque sorte, d'une mémoire collective. Il existe de nombreux documents traitant des optimisations de l'algorithme et plus particulièrement : ● ● ● de l'organisation des données dans la base de cas ([2] et [3]). de l'algorithme de similarité utilisé dans le meilleur cas ([5] et [4]) de l'utilisation de connaissances pour effectuer une analyse sémantique lors du RETRIEVE et du RETAIN (voir l'Illustration 2) au lieu de l'analyse syntaxique traditionnellement utilisée [1]. 2.4 Conclusion Pour conclure, le Case-Based Reasoning est un modèle d'apprentissage qui pourrait se substituer au Data Mining dans notre domaine de recherche, et, à notre connaissance, cette approche n'a jamais été appliquée dans la détection d'intrusions. Dans le cadre de ce travail nous nous proposons d'intégrer dans un IDS à base d'agents intelligents existant (décrit dans la section suivante) un modèle fondé sur le CBR pour la détection d'attaques inconnues. Ce modèle est décrit dans la section 4. 8/28 3. Système de détections d'intrusion base d'agents intelligents. Le système multi-agents existant est complètement décrit dans [21], mais nous allons cependant présenter les principales caractéristiques ayant un rapport avec notre modèle. En particulier, nous décrirons le modèle organisationnel du système multi-agents, ainsi que son modèle événementiel. 3.1 Le modèle organisationnel Les caractéristiques clés de ce système de détection d’intrusions à base d’agents sont : l’autonomie, la distribution, la coopération, l’adaptabilité et la flexibilité. Dans ce système, les agents intelligents, localisés dans des entités spécifiques du réseau, sont organisés de manière hiérarchique (voir Illustration 3) dans deux couches : une couche gestionnaire et une couche locale. Administrateur Gestionnaire de politique de sécurité Gestionnaire extranet Gestionnaire intranet Dépendance hiérarchique Reports Surveillant local Illustration 3: Le modèle organisationnel du système existant La couche gestionnaire gère la sécurité globale d’un réseau. Dans cette couche, il existe trois niveaux d’agents : l’agent gestionnaire de politiques de sécurité, l’agent gestionnaire extranet et des agents gestionnaires intranet. L'agent gestionnaire de politique de sécurité à pour rôle d'assurer les fonctions suivantes : ● dialogue avec l'administrateur pour la spécification des politiques de sécurité. ● gestion des politiques de sécurité (création, mise à jour, activation, ...). ● instanciation des schémas d'attaque et transmission des buts aux entités du niveau inférieur, i.e les agents gestionnaires extranet. Le gestionnaire extranet a une vue globale du réseau d'entreprise, et remplit les fonctions suivantes : ● réception des buts du niveau supérieur. ● détection des attaques globales et coordonnées. ● distribution des attaques aux entités distribuées du niveau inférieur. Le gestionnaire intranet remplit la même fonction que le gestionnaire extranet, mais du point de vue local du réseau d'entreprise. La couche locale gère la sécurité d’un domaine, composé d’un sous-ensemble de machines dans un réseau local. Cette couche contient un seul niveau d’agents qui sont les agents surveillants locaux et qui ont pour fonction la détection des schémas d’attaque. 9/28 Dans ce modèle multi-agents hiérarchique, chaque agent gestionnaire a la capacité de contrôler des agents spécifiques et d’analyser des données, alors que les agents surveillants locaux ont pour mission de surveiller des activités spécifiques. A chaque niveau, les agents communiquent et s’échangent leurs connaissances et analyses afin de détecter les activités intrusives de manière coopérative. 3.2 Le modèle événementiel. Dans cette section, nous décrivons le modèle événementiel du système existant, i.e. la manière dont les événements sont filtrés suivant les schémas d'attaques reçus par les agents. Modèle conceptuel de données Fenêtre temporelle d ’observation M1 M2…………………………………………………………………Mn Messages Filtrage Filtres d ’événements E1 E2…………………………………………………………...…….…Em Regroupement Evénements Schémas d ’attaque ………. Suite S1 Suite S2 Suite Si Suite Sp Suites d ’événements Illustration 4: Le modèle événementiel du système existant Le modèle événementiel se décompose en trois étapes simples : filtrer les événements à l'aide de critères définis par les schémas d'attaques, regrouper les événements filtrés à partir des schémas d'attaque pour construire des suites d'événements corrélés, i.e. agréger les événements identiques avec des opérateurs d'occurrence par exemple, ● analyser les suites d'événements corrélés pour identifier des schémas d'attaque. ● ● 3.3 Conclusion sur le système existant. Le système que nous venons de décrire ne permet de détecter que des attaques connues. L'objectif de ce travail est donc d'enrichir ce système avec un modèle fondé sur le CBR pour : ● obtenir de nouveaux événements à analyser, ● détecter à partir de ces événements des attaques inconnues, ● mettre à jour automatiquement les politiques de sécurité pour prendre en compte les nouvelles attaques détectées. Ce modèle est décrit dans la section suivante. 10/28 4. Le modèle d'apprentissage L'objectif de ce modèle est d'ajouter un mécanisme d'apprentissage de nouvelles attaques au système existant (voir partie précédente) en utilisant un moteur de Case-Based Reasoning. Cet ajout comprend plusieurs points : 1. L'extension du filtrage des événements ( ). 2. La mise en place des éléments du moteur de CBR ( ). 3. La génération automatique des schémas d'attaque correspondant aux caractéristiques des nouvelles attaques détectées, et la mise à jour des politiques de sécurité pour prendre en compte les nouvelles attaques ( ). Voici le positionnement de chacune de ces fonctionnalités dans le modèle d'apprentissage d'un agent : Moteur de délibération Événements filtrés 2 Moteur CBR En cas de suspicions 1 Filtrage Construction du schéma correspondant Filtrage avancé des événements Événements bruts Administrateur Mise à jour des politiques de sécurité Illustration 5: Vue interne du modèle d'apprentissage Note : Les éléments du système existant sont représentés en saumon ( ). 4.1 Extension du filtrage des événements Comme expliqué précédemment, les agents actuels n'observent que les événements définis par les schémas d'attaque qui leur ont été transmis. Pour pouvoir détecter des attaques inconnues (non définies par des schémas d'attaques), nous proposons d'ajouter un autre module de filtrage au niveau des agents surveillants locaux (voir chapitre 3) du système actuel . Le filtre ( ) se comporte comme celui présent à l'origine dans les agents : il est programmable avec des listes d'événements et permet de savoir si un événement observé appartient à ces listes. Ces dernières ressemblent à celles permettant de définir des schémas d'attaque car elles utilisent le même langage de spécification à l'exception des opérateurs d'occurrence et des opérateurs temporels [21]. 11/28 4.2 Mise en place des éléments du moteur de CBR. A présent, nous disposons de nouveaux événements à analyser, et nous désirons les soumettre au moteur de Case-Based Reasoning. Pour cela, il faut identifier tous les éléments intervenant dans l'algorithme ainsi que toutes les étapes de cet algorithme. 4.2.1 Notre algorithme de Case-Based Reasoning Suite suspicieuse d'événements Recherche du meilleur cas (Retrieve) Mémoire des cas Administrateur Enregistrement du nouveau cas (Retain) Illustration 6: Le moteur de délibération du CBR Voici les étapes effectuées par le moteur de délibération du CBR (en ( soumission d'une suite suspicieuse d'événements : ) sur l'Illustration 5) lors de la La suite est traitée par un préprocesseur (non présenté sur le schéma) qui va positionner les opérateurs d'occurrence sur les éléments de la suite (i.e. agréger les événements identiques) ● A l'aide d'une fonction de similarité, le cas le plus similaire est recherché dans une base de cas (appelée mémoire dans la terminologie du Case-Based Reasoning), contenant des attaques (i.e. des suites d'événements passés, identifiées comme attaques) : c'est le Retrieve. ● Si le taux de similarité est trop faible entre le meilleur cas et la suite suspicieuse, le système peut : soit ignorer la suite, soit demander l'avis de l'administrateur (choisir le meilleur cas tout seul, ignorer la suite ou certifier que la suite est une attaque – et passer à l'étape suivante – ). ● Si la suite suspicieuse est une attaque, un nouveau cas correspondant à cette attaque est ajouté dans la mémoire et la suite d'événements est passée au module suivant qui va générer le schéma d'attaque correspondant. ● Nous devons à présent définir le coeur du système, i.e. La fonction de similarité qui va nous renvoyer le meilleur cas. 12/28 4.2.2 La Fonction de similarité L'objectif de cette fonction est, à partir d'une suite d'événements suspicieuse et d'une base de cas contenant des attaques (sous forme de suite d'événements), de trouver l'attaque ressemblant le plus à la séquence observée. Cette recherche va évaluer la ressemblance entre la séquence à tester et chaque séquence de référence. Toutes ces séquences sont sous la forme d'une suite d'événements, forme comprenant en plus les opérateurs d'occurrence et de séquence utilisés de la manière suivante : • l'opérateur d'occurrence permet d'agréger plusieurs éléments identiques consécutifs. • l'opérateur de séquence permet de définir si l'ordre temporel des événements est caractéristique de ces derniers. Pour plus d'informations sur ces opérateurs, ainsi que sur le langage permettant de les décrire, consulter [21], page 74, section 4.3.1.2. Illustration 7: Les classes d'événements de sécurité Avant de commencer à décrire la fonction de similarité, regardons les classes définissant les événements de sécurité : Nous nous rendons compte qu'un événement peut être vu à plusieurs niveaux : • Le niveau 0, le plus élevé, où l'événement est vu comme un GenericSecurityEvent. 13/28 Le niveau 1, où l'événement est considéré, suivant sa nature, comme un AuditEvent ou un NetworkEvent. • Le niveau 2, dernier niveau, où l'on s'intéresse aux sous-classes des éléments de niveau 1. • De part la nature des objets à comparer, nous allons subdiviser le problème de l'étude de la similarité de deux suites d'événements en plusieurs étapes : • Le calcul de la similarité de deux classes de niveau 0, appelé "comparaison de base". • La prise en compte de la similarité des classes de niveau 1 et 2, qui sera analysée lors de la "comparaison avancée". • Puis le calcul final de la similarité des deux suites d'événements, i.e. "la comparaison finale". 4.2.2.1 Les bases de la fonction de similarité L'algorithme que nous nous proposons d'utiliser, pour écrire cette fonction, est l'algorithme le plus simple possible existant dans le Case-Based Reasoning : CBL1 (Case-Based Learning) [4] [5]. Cet algorithme est très basique et il existe de nombreuses améliorations dont nous ne discuterons pas ici (mais qui constituent des possibilités d'extension du système). Voici CBL1, définissant la similarité des cas C1 et C2 : Similarity CBL1 C 1, C 2, P = 1 ∑ Feature _ dissimilarity C 1 ,C 2 i i∈P 1 1 avec P un vecteur de caractéristiques et { C 1 −C 2 2 Feature _ dissimilarity C 1 ,C 2 = 0 1 i i 1 i Si la caractéristique i est numérique Si la caractéristique i est discrète et C 1 =C 2 Sinon i i 2 Ainsi, la similarité de deux cas correspond à l'inverse de la distance euclidienne des caractéristiques numériques et utilise un simple test de correspondance pour les caractéristiques discrètes. Pour éviter que les caractéristiques numériques prennent plus d'importance que les autres caractéristiques, nous avons la possibilité : ● de normaliser linéairement toutes les caractéristiques numériques (via l'utilisation d'un préprocesseur) ● ou alors, de pondérer chaque caractéristique à l'aide d'un coefficient. En utilisant la deuxième solution, notre fonction de calcul de la similarité devient : Similarity C 1, C 2, P = 1 ∑ w i⋅Feature _ dissimilarity C 1 ,C 2 i i∈P avec ∑ wi i∈P 3 i = 1, 0w i ≤1 4.2.2.1.a Espace de valeur de la fonction de similarité Nous nous intéressons maintenant aux valeurs que peut prendre la fonction de similarité, si toutes les caractéristiques sont discrètes. Pourquoi considérer seulement ce cas ? La majorité des caractéristiques des nos suites d'événements sont discrètes (à une ou deux exception près), et dans la mesure du possible, 14/28 nous souhaitons éviter les caractéristiques numériques, notamment à cause de leur variation importante en cas de dissimilarité. Nous remarquons tout d'abord que si les cas sont similaires en tout point, la fonction de similarité tendra vers l'infini. Laissons ce cas quelque peu spécial de côté, et intéressons nous aux extremums de la fonction. Proposition : la valeur de retour de la fonction de similarité est comprise entre : [ 1, 1 w min ] où w min = Min wi 4 Démonstration : la similarité entre deux cas augmente lorsque la distance entre ceux-ci diminue. Lorsque les deux cas sont totalement différents, (2) vaut 1 pour toutes les caractéristiques des cas, (3) devient : 1 ∑ w i∈P 3 = 1 i d'où la borne inférieure de l'intervalle. Lorsque deux cas, sont très très similaires ("i.e. le plus similaire possible sans être égaux"), cela revient à dire que seule la caractéristique ayant le moins d'importance est différente. La caractéristique la plus faible correspond au coefficient w minimal (noté wmin). (3) devient : 1 car w i = 0 pour tout w i ≠w min w min CQFD. Néanmoins, un problème reste posé : cette espace de valeur n'est pas fixe, i.e. la borne supérieure dépend du coefficient de pondération le plus faible. Pour cela, nous définissons une nouvelle fonction, qui ramène les valeurs de l'intervalle (4), dans [1, 2]. Pour cela, nous appliquons une simple fonction linéaire : Nouvel _ Intervalle N , w min = N⋅ w min 1−2 ⋅ w min 1 − w min 1− w min où N est une valeur dans[1, 5 1 ] w min Pourquoi avoir choisit [1, 2] ? Ces valeurs sont totalement arbitraires mais il était nécessaire de fixer un ordre de grandeur comme nous le verrons plus tard. Nous verrons également pourquoi cet intervalle ne pouvait pas être [0, 1]. 4.2.2.1.b Comparaison de base La comparaison de base se charge de calculer la similarité entre deux événements en considérant ces événements comme des GenericSecurityEvent. Pour cela, il faut tout d'abord identifier quelle caractéristiques de cette classe vont servir à la comparaison. Voici les membres de cette classe que nous avons retenu (voir Illustration 7: Les classes d'événements de sécurité) : ● ● ● ● ● EventType qui indique s'il s'agit d'un message réseau, d'une commande système, d'une connection ou d'un fichier. EventName qui contient le nom de la commande ou du service UDP/TCP utilisé. EventSource qui précise la source de l'événement sous la forme d'une adresse IP. EventDestination parallèlement concerne la cible de l'événement. EventResult, qui permet de savoir le résultat de l'événement (en terme de succès/échec, mais aussi en terme de légitimité de l'action). Maintenant que ces caractéristiques ont été isolées, il faut à présent leur accorder un poids : pour cela, nous 15/28 devons garder à l'esprit que ce poids sanctionne la non similarité des caractéristiques. Ainsi, EventType et EventName sont pour nous des attributs très importants pour définir la dissimilarité de deux cas. Parallèlement, la différence des adresses sources ou destinations n'as pas réellement de poids dans la comparaison : ces données ne permettent pas de définir une attaque (puisque l'attaque peut survenir depuis/vers n'importe quel poste). Si les adresses sont identiques, la comparaison "récompensera" cette attribut en renvoyant 0 (via la fonction (2)), dans le cas contraire, le score final ne sera pas affecté par cette différence. Voici le vecteur de poids w que nous proposons pour les caractéristiques respectives {EventType, EventName, EventSource, EventDest, EventResult} : w={ 1 1 1 1 1 , , , , } 3 3 12 12 6 6 Tous les paramètres de la comparaison de base sont à présent définis : deux GenericSecurityEvent, C1 et C2 sont comparés grâce à la fonction Similarity (voir (3)), suivant les caractéristiques énoncées plus haut et la pondération w (6). Le résultat est un nombre décimal à ramener dans l'intervalle [1, 2], via la fonction Nouvel_Intervalle (voir (5)). 4.2.2.2 Comparaison avancée. La comparaison avancée rajoute l'information des classes de niveaux 1 et 2 à la comparaison de base. L'idée principale ici est de descendre dans la hiérarchie des classes et d'ajuster la similarité suivant la nature des objets comparés. Voici donc la fonction effectuant la comparaison avancée : Similarity Avancée C 1, C 2 = Moy Harmonique Similarity 1 C 1, C 2, P , Similarity 2 C 1, C 2, P ' avec Similarity 1 C 1, C 2, P = Nouvel _ Intervalle Similarity C 1, C 2, P , w min 7 8 La moyenne harmonique de deux valeurs étant définit ainsi : Moy Harmonique A , B = 1 1 ,1 Moy Arithmétique A B 9 L'utilisation de la moyenne harmonique se justifie par le fait que les fonctions de calcul de similarité renvoient des inverses de distance. Si nous avions utilisé une moyenne arithmétique, quel sens donner à une moyenne d'inverse de distance ? La moyenne harmonique calcule la moyenne des distances, puis renvoi l'inverse de cette moyenne : c'est un inverse de moyenne de distance, dont la signification paraît plus naturelle. Néanmoins, l'utilisation de cette fonction nous empêche d'autoriser les fonctions de calcul de similarité à renvoyer une valeur nulle, d'où l'intervalle choisit : [1, 2]. Avant de définir Similarity2, remarquons tout d'abord que les classes de niveau 1 (AuditEvent et NetworkEvent) n'ont toutes deux qu'une seule caractéristique, respectivement UserName et ProtocolType (voir Illustration 7: Les classes d'événements de sécurité). Nous arrivons donc à cette définition : Soit 16/28 P i ∈[1, 2] avec P 1 P 2 ~ P 3 Sc A= A vue comme une sous - classe de niveau 2 Similarity 2 C 1 , C 2 = i i { 1 si C 1 et C 2 ne sont pas de la même classe (de niveau 1 ou 2) Si C 1 et C 2 sont de niveau 1 : Max [2, P 1 Similarity 2 Sc C 1 , Sc C 2 ] , si C 1 . cara=C 2 . cara Max [2, P 2 Similarity 2 Sc C 1 , Sc C 2 ] , si C 1 . cara≠C 2 . cara 10 Si C 1 et C 2 sont de niveau 2 : Max [2, P 3 Similarity 1 C 1, C 2 ] Nous remarquons que Similarity2 est une fonction récursive à deux niveaux : au premier (resp. deuxième) niveau elle compare des classes de niveau 1 (resp. 2). Quel que soit le niveau, si les cas ne sont pas de même classe, alors ils n'ont certainement pas des caractéristiques similaires, d'où la valeur la plus faible sur l'intervalle [1, 2]. Lorsque Similarity2 compare des classes de niveau 2, elle effectue juste un simple calcul de similarité, en ramenant la valeur de retour sur [1, 2] (via (8)), en lui ajoutant une constante P3 et en majorant le résultat par la valeur maximale de similarité, 2. Voici les caractéristiques retenues pour les classes de niveau 2, ainsi que leur pondérations (voir (3)) proposées respectives : [ FileEvent={FileName 0.375 , FileType 0.25 , FileAccessType 0.375} FileSystem={UsedCPURate 0.5 , MemOccupationRate 0.5} ConnectionEvent={Endtime 0.5 , Duration 0.5} ICMPEvent={ICMPType 0.5 , ICMPCode 0.5} TCPEvent={TCPSquenceNumber 0.5 , AcknowledgeNumber 0.5} UDPEvent {SourcePort 0.25 , DestinationPort 0.75} ] 11 La comparaison de niveau 1 est un peu spéciale parce que, comme expliqué précédemment, les classes de niveau 1 n'ont qu'une seule caractéristique. Suivant la similarité de cette caractéristique, une constante d'une certaine valeur est ajoutée, et un appel récursif est effectué pour calculer la similarité des cas C1 et C2 en les considérant comme des instances de classe de niveau 2. Les constantes Pi sont présentes pour rappeler le fait que les objets comparés sont de classes identiques (donc que leur similarité est un peu plus élevée), même si leurs caractéristiques ne sont pas similaires. Voici une proposition pour les Pi : P={0.5, 0 .15, 0 .15} 12 Notons que P1 est plus élevé car il doit refléter que la caractéristique de niveau 2 est similaire pour les deux cas. Avant de conclure sur le calcul de la similarité de suite d'événements, intéressons nous au cas où, à 17/28 n'importe quel niveau de la comparaison, deux cas parfaitement identiques sont découverts. Dans cette situation, la fonction (3) diverge vers l'infini et donc toute la récursivité de la fonction (9) est écrasée par cette valeur, même si en amont, les cas ne sont pas similaires. Pour cela, nous considérons que si une similarité parfaite est découverte, nous remplaçons l'infini par la valeur maximal sur l'intervalle [1, 2], i.e. 2 (ce remplacement ne figure pas dans la définition de la fonction, afin d'alléger la notation). Cela revient à faire une approximation, puisque nous "oublions" qu'une telle similarité a été découverte, mais cette approximation est négligeable devant les autres paramètres du système (tels que les coefficients de pondération ou les Pi). A ce point de l'étude de la fonction de similarité, nous pouvons parfaitement comparer deux événements et calculer leur similarité sur l'intervalle [1, 2]. Nous nous intéressons maintenant à la comparaison finale. 4.2.2.3 Comparaison finale. Comme expliqué précédemment, la comparaison finale permet, à partir d'une base de cas contenant des attaques (sous la forme d'une suite d'événements) de chercher le cas de référence le plus similaire à une suite d'événements suspicieuse donnée. Cette recherche doit prendre en compte deux opérateurs présents dans les deux suites : • l'opérateur d'occurrence qui permet d'agréger plusieurs éléments identiques consécutifs. • l'opérateur de séquence qui permet de définir si l'ordre temporel des événements est caractéristique de ces derniers. 4.2.2.3.a Algorithme de base. Avant d'effectuer la comparaison finale, nous devons tout d'abord définir la comparaison de deux suites d'événements. Soit C2 le cas de référence. Subdivisons les cas ainsi : Comparaison suite C 1, C 2 = { Comparaison suite _ atemporelle C 1, C 2 Si l'ordre temporel n'est pas présent dans C 2 Comparaison suite _ temporelle C 1, C 2 Si l'ordre temporel est présent dans C 2 13 4.2.2.3.b Cas où l'ordre temporel n'est pas présent Notons A la suite d'événements suspicieuse, Ai étant les événements de cette suite i∈[1, N A ] Soit B la base des cas de référence, B j étant un cas j ∈[1, M ] , B j k étant un événement de ce cas k ∈[1, N B ] j { Pour chaque B j k (événement) : Pour chaque Ai (événement) : Calculer S i k = Similarité avancée _ occ Ai , B j k Comparaison suite _ atemporelle A , B j = Pour chaque B j k (évènement) : Calculer SMAX k = Distribuer _ les _ similarités S , k Calculer S Total = Moy Harmonique SMAX k 14 18/28 { Chercher i max tel que S i k =Max S i k , pour k ∈[1, N B ] si i max n'est pas marqué et avec Distribuer _ les _ similarités S , k n = si S i k =Max S i k , pour i∈[1, N A ] , i non marqué marquer i et renvoyer S i k sinon recommencer en cherchant i max−1 , etc... avec Similarité avancée _ occ C 1, C 2 = max max n j n max { Similarité Avancée C 1, C 2 Max [2, Q 1 Similarité Avancée C 1, C 2 ] Max [2, Q 2 Similarité Avancée C 1, C 2 ] Max [2, Q 1 Similarité Avancée C 1, C 2 ] n si si si si C 1. occ=1 et C 2. occ=1 C 1. occ=C 2. occ C 1. occC 2. occ C 1. occC 2. occ Cet algorithme va balayer tous les événements d'un cas de référence Bj et chercher le meilleur accord possible, entre les événements d'un suite suspicieuse et les siens. Ce meilleur accord s'effectue via la fonction Distribuer_les_similarités qui permet de chercher l'évènement Ai le plus similaire à un événement (Bj)k seulement si aucun autre événement de Bj n'est plus similaire à Ai . Voici un exemple d'exécution de cet algorithme sur le tableau des S(i k) suivant : [ 1.2 1.1 1 soit S = 1 1 1 1.5 1 1.7 ] Soit B (resp. A) les colonnes (resp. lignes) de S. Regardons : • Distribuer_les_similarités(S, B1) : le maximum de la colonne est en A3, mais (B1, A3) n'est pas le maximum de la ligne A3. Nous prenons le second maximum, A1 (et nous marquons la ligne A1). D'où la réponse 1.2. • Distribuer_les_similarités(S, B2) : le maximum de la colonne est en A1, mais la ligne A1 est marqué. Nous prenons donc le second maximum et nous marquons la ligne A2. D'où la réponse 1. • Distribuer_les_similarités(S, B3) : le maximum de la colonne est en A3, qui n'est pas prise, et (B3, A3) est le maximum de la ligne A3. Nous prenons donc le maximum et nous marquons la ligne A3. D'où la réponse 1.7. • Note : Une situation bloquante peut survenir si une colonne n'a que des minimums : [ 1.2 1 1.1 soit S = 1.1 1 1.2 1.5 1 1 ] Ici, lors du choix de B2, A3 est déjà marqué par B1 et aucune valeur ne peut être prise par A2 . Solution : effectuer auparavant tous les autres passages, ici celui de B3, et effectuer à nouveau celui de B2, en l'autorisant à prendre une ligne libre, même si il n'est pas maximum sur cette ligne. Cette situation n'est pas présente dans l'algorithme pour alléger la notation. 19/28 La fonction Similaritéavancée_occ permet de prendre en compte les occurrences des événements lors du calcul de la similarité : si les événements n'ont pas d'occurrence multiple, leur similarité n'est pas modifiée. Au contraire, si leur occurrence est égale, un bonus leur est accordé. Ce bonus est identique si le nombre d'occurrence de la suite d'événements suspicieuse est supérieure à celui du cas référence. En effet, nous pouvons considérer que l'attaque est reconnue même si des événements en plus sont observés. En revanche, si moins d'événements ont été observés que dans le cas de référence, le bonus est moins important. Voici un ordre de grandeur des bonus accordés : Q={0.3, 0 .1} 15 Note : Nous pourrions pondérer le bonus Q2 par le nombre d'occurrences manquantes, c'est une possibilité qui ne figure pas dans notre modèle, afin de l'alléger quelque peu, mais tout à fait envisageable. Une fois que le meilleur accord possible a été déterminé, via la fonction Distribuer_les_similarités, l'algorithme effectue une moyenne harmonique (voir (8)) sur toutes les similarités entre événements, pour déterminer la similarité globale entre deux suites d'événements. 4.2.2.3.c Cas où l'ordre temporel est présent L'idée de cet algorithme est de prendre un par un les événements du cas de référence et de chercher à quel moment le cas le plus similaire est survenu dans la suite suspicieuse (en cherchant la similarité maximale). Une fois que la position est trouvée, nous retenons son index (c'est le couple (imax, k)), et nous créons un sous-ensemble V, qui comprend les événements de la suite suspicieuse, de l'élément suivant l'index jusqu'à la fin de la suite. Lorsque nous effectuerons la recherche suivante, avec l'événement suivant du cas de référence, nous travaillerons seulement sur l'ensemble V. { première _ comparaison Pour chaque B j k (événement) : Soit V le sous intervalle de [i max 1, k −1 , N A ] Si V =∅ S i k =1 Sinon Comparaison suite _ temporelle A , B j = Pour chaque Ai (événement), i∈V Calculer S i k = Similarité avancée _ occ Ai , B j k Chercher i max , k tel que S i k = Max S i k pour i∈V Si S i k Tmin i max , k =i max , k −1 et S i k =1 Calculer S Total = Moy Harmonique S i k , pour k ∈[1, N B ] max max max max max j 20/28 16 { Pour B j 1, Pour chaque Ai (événement) : Calculer S i 1 = Similarité avancée _ occ Ai , B j 1 avec première _ comparaison = Chercher i max , 1 tel que S i 1 = Max S i 1 pour i∈[1, N A ] Si S i 1T min i max , 1=1, 1 et S i 1=1 max max max La fonction première_comparaison effectue un passage pour le premier événement du cas de référence : cette fonction distincte est nécessaire pour initialiser l'espace V au début de l'algorithme. Le fait de toujours réduire l'ensemble de recherche permet de garantir l'ordre temporel : ainsi, tous les événements redondants de la suite suspicieuse sont écartés (et donc ne baissent pas la similarité). Si à un moment donné l'ensemble V est vide, cela signifie qu'il manque des événements à la suite suspicieuse, et donc nous pénalisons le calcul de la similarité avec 1 (pas de similarité). Un problème peut survenir si, à n'importe quel moment de l'algorithme, nous ne trouvons pas un événement du cas de référence dans la séquence suspicieuse : toutes les notes de similarité seraient alors médiocres et l'espace V pourrait se réduire considérablement en effaçant des événements importants. Pour cela, nous utilisons une constante (Tmin) garantissant un taux minimal de similarité avant d'entamer la réduction de l'espace. Si, par exemple, à un moment donné un événement est absent de la suite suspicieuse, le taux maximal de cet événement sera exécrable, nous le remplacerons par 1 (pas de similarité) puis nous passons à l'événement suivant sans réduction de l'espace V. Voici un ordre de grandeur de ce seuil : T min=1.1 16 A présent, nous avons complètement défini la fonction Comparaisonsuite (voir (13)), que ce soit dans le cas temporel et atemporel. Nous pouvons donc très simplement, définir la comparaison finale, qui, rappelons le, permet de trouver le cas le plus similaire à une attaque potentielle. Ses paramètres sont une suite suspicieuse C et une base de cas B : Comparaison finale C , B = { Pour chaque B j , calculer S j = Comparaison suite C , B j 17 Le meilleur cas est B meilleur , tel que S meilleur = Max S j , j∈[1, N B ] 4.2.2.4 Cas d'indécisions Ces cas se produisent lorsque : ● plusieurs cas de la mémoire sont candidats à l'élection pour le cas de référence et que leurs taux de similarité sont trop proches les uns des autres pour les départager, ● un cas de référence est trouvé, mais son taux de similarité est très légèrement inférieur au taux minimal requis (Tmin ) : nous souhaitons quand même minimiser le taux d'échecs lors de la recherche du cas de référence. Nous proposons donc des critères de comparaison avancés effectués lors de tests de rattrapage pour régler ces cas. Cependant, nous ne développerons pas plus en avant ces critères, l'objectif de ce rapport étant juste la démonstration de notre modèle d'apprentissage de base. 4.2.2.4.a Prise en compte de la durée entre deux événements 21/28 La durée entre deux événements dans une suite suspicieuse n'est pas présente dans le système existant. Pour cela, nous nous proposons de rajouter un champ EventTime dans la suite EventSeriesFeatures (voir [21]) qui comprendrait deux séries de deux index, ΔT et Δt. Voici la définition de ces index : Soit une suite E i d'événements . Soit { E 0, ... , E n } ces événements . Soit {TE 0, ... ,TE n } les temps où ces événements se sont produits. Nous définissons T i = TE i −TE 0 le temps entre le premier événement et l'événement E i . Nous définissons t i = TE i −TE i−1 le temps entre les événements E i et E i−1 , avec t 0 = 0 . t2 Soit E 0, E 1, E 2 ,... avec TE i = {1, 2, 4 } , T 2 Nous avons donc T i = {0, 1, 3 } et t i = {0, 1, 2 } . Ces durées peuvent donc être utilisées dans la comparaison de deux suites d'événements afin d'affiner le calcul de leur similarité. 4.2.2.4.b Blacklistes et connaissances de l'agent. Dans le système existant, l'agent dispose de connaissances à caractère permanents tels que ([21]) : ● les informations de configuration du réseau (équipements, utilisateurs, applications); ● la liste des utilisateurs connus/ groupes d’utilisateurs; ● la liste des machines connues; ● a liste des adresses connues (internes/externes, local/intranet/extranet), adresses interdites, réservées, impossibles; ● la liste des utilisateurs ayant la fonction d'administrateur et liste des administrateurs par machine; ● la liste des utilisateurs suspects/ attaquants : Ce sont les blacklistes. ● la liste des adresses suspicieuses/ attaquantes : Ce sont les adresses à surveiller ou à interdire l’accès; ● la liste des utilisateurs autorisés à se connecter de l’extérieur du réseau distribué. ● la liste des utilisateurs absents : ce sont les utilisateurs en congé, en mission ou en arrêt maladie. Si un cas d'indécision se produisait, il serait possible d'utiliser ces connaissances à caractère permanent afin de définir une attaque. 4.2.2.4.c Reconstruction temporelle. Il faut remarquer que les événements issus du filtrage avancé ne sont pas les seuls à être soumis au moteur de délibération du CBR : comme nous pouvons le voir sur l'Illustration 5, les suites d'événements suspicieuses non reconnues dans le système de base sont elles aussi soumises au CBR (cercle ( ) numéroté 2). Si un cas d'indécision se produit, nous pourrions utiliser l'algorithme suivant : ● si une suite issue du filtrage avancé est reconnue par le CBR comme un cas de référence avec une certaine similarité S ● alors, nous pouvons chercher, en reconstruisant la suite temporelle 1 + 2, des événements supplémentaires dans 1 permettant d'obtenir une similarité plus élevée. L'inverse est aussi vrai (i.e. reconstruire 1 + 2 pour chercher dans 2 des événements manquants à l'identification de 1). 22/28 Note : cette reconstruction temporelle n'est obligatoire que si le cas de référence nécessite un ordre temporel. Si ce n'est pas le cas, cette reconstruction n'est pas effectuée et la recherche est tout de suite lancée. 4.2.2.5 Performance et améliorations Intéressons nous à présent à la complexité des trois fonctions, avec n le nombre d'événements dans la suite suspicieuse, m le nombre moyen d'événements dans un cas de référence et M le nombre de cas de référence : ● Comparaisonsuite_atemporelle : environ o(2.m.n). ● Comparaisonsuite_temporelle : environ o(2.m.n) au pire des cas (i.e. V ne diminue que d'un élément à la fois). ● Comparaisonfinale : environ o(2.m.n.M) + o(M) (pour le calcul du maximum). Voici un ordre de grandeur des entités utilisées par la fonction de similarité : ● Nombre d'événements de A (i.e. NA) : 10. ● Nombre moyen d'événements dans une attaque de référence : 10. ● Nombre de cas de référence dans la base : 1000. Nous nous apercevons que la complexité du système augmente quadratiquement quand la taille des données augmente linéairement, ce qui n'est pas bon. Il existe de nombreuses améliorations disponibles pour CBL1, portant sur des éléments divers tels que l'organisation des structures de données de la base des cas, le pré-traitement des données ou une approche probabilitiste (voir [4] et [3]). Sans rentrer dans des améliorations complexes, nous proposons de diminuer le nombre de calculs de similarité inutiles grâce à cet algorithme : ● Avant qu'une suite suspicieuse soit analysée, nous construisons une table d'index contenant les EventName (de la classe GenericSecurityEvent) ainsi que leur numéro d'événement : Par exemple la suite suivante : Evénement 1 EventName=Telnet Evénement 2 EventName=SSH Evénement 3 EventName=Telnet [ ] entraîne la table d'index : [ EventName=Telnet [1, 3] EventName=SSH [2] ] Ainsi, au lieu de parcourir tous les événements de la suite A (par exemple dans Comparaisonsuite_temporelle), pour calculer leur similarité avec un événement Bi, nous ne parcourons que les événements de A qui ont le même EventName que celui de Bi. Cela revient à faire une approximation, puisque nous ne testons que les cas susceptibles d'offrir une similarité élevée, mais cela nous permet de diminuer la complexité du système : en considérant que nous ne balayons plus que 10% des événements de A, et en utilisant l'ordre de valeur énoncé plus haut, la complexité des fonctions devient : Comparaisonsuite_atemporelle : environ o(2.m) + o(n). Comparaisonsuite_temporelle : environ o(2.m) + o(n). Comparaisonfinale : environ o(2.m.M) + o(M) + o(n) Note : les o(n) dans les Comparaisonsuite proviennent de la construction de la table d'index, qui se fait en temps linéaire. ● ● ● La complexité de l'algorithme reste quadratique, mais dans la comparaison de deux suites devient linéaire. Une mise en pratique de ces tables d'index à un niveau plus haut (i.e. pour comparer la suite suspicieuse avec seulement les cas intéressants) serait intéressante pour obtenir une complexité logarithmique sur tout l'algorithme. Cette optimisation, ainsi que toutes les autres, ouvre la possibilité à de nombreux travaux futurs. 23/28 4.2.2.6 Le peuplement initial de la base des cas. Jusqu'à présent, nous avons supposé que la base des cas était peuplée. Le problème qui se pose à présent est comment remplir cette base. Nous ne pouvons partir d'une mémoire vierge, car l'administrateur serait alors activement sollicité pour identifier les suites suspicieuses (et cela reviendrait à effectuer une phase d'apprentissage ce dont nous désirons nous passer). Pour répondre à ce problème, nous supposons que la base des cas est importée à partir d'une source sécurisée et certifiée, un serveur ftp universitaire regroupant toutes les bases de cas de référence. Ces mémoires de référence peuvent êtres : ● Écrites à la main par des experts. ● L'oeuvre de contribution des utilisateurs du système. ● En provenance d'un autre système/logiciel. Dans ce cas, les mémoires de référence seraient converties dans le bon format. A présent, le moteur de CBR ainsi que tous ses éléments sont totalement définis. Nous pouvons passer à la dernière étape, la mise à jour des politiques. 4.2.3 Génération du schéma d'attaque et mise à jour des politiques. Nous supposons qu'une attaque (ou une variante) a été détectée : nous allons nous intéresser au module construction du schéma correspondant + mise à jour des politiques de sécurité (en ( ) sur l'Illustration 5). Bien que cette partie du système n'ait pas été finalisée, nous proposons le protocole général suivant : ● Le schéma d'attaque correspondant à la suite d'événements est généré : lors de cette génération, un algorithme doit déterminer quels événements sont caractéristiques de l'attaque, quels attributs (par exemple la source de l'attaque) peuvent être omis, si le temps entre deux événements est significatif, si l'ordre temporel est nécessaire, etc... Cet algorithme abouti à un schéma d'attaque dont certains attributs sont positionnés (i.e. ont une valeur), et d'autres sont laissés génériques. ● Sur la confirmation de l'administrateur, les politiques de sécurité sont modifiées pour prendre en compte la nouvelle attaque découverte, attaque qui sera ensuite transmise aux agents ultérieurement. Nous considérons que la génération des schémas d'attaque est un point trop critique pour être réalisé de manière entièrement automatisée, et que, par conséquent, une intervention humaine est nécessaire avant la mise à jour de la base des schémas d'attaque. Si l'administrateur refuse de reconnaître une attaque, la suite d'événements est aussi retirée de la mémoire des cas. 4.2.4 Conclusion sur le modèle Dans cette section, nous avons décrit notre modèle fondé sur le CBR pour la détection d'intrusions inconnues. Ce modèle est constitué de trois sous-modèles : un modèle pour l'extension du filtrage des événements, un modèle pour le moteur de CBR et enfin un dernier modèle pour la génération automatique des schémas d'attaque ainsi que la mise à jour des politiques de sécurité. Bien que la fonction de génération de schéma et de mise à jour des politiques de sécurité ne soit pas complètement spécifiée, le coeur de notre modèle (filtrage et moteur de CBR) l'est. En effet, nous avons défini la fonction de similarité qui est le composant essentiel du moteur CBR et qui permet d'identifier des attaques inconnues. Cette fonction qui a été construite à partir d'un algorithme générique simple (CBL1) et qui a fortement enrichi cet algorithme, nous permet de calculer la similarité de deux objets complexes. 24/28 5. Conclusion A travers ce travail, nous pouvons voir que tous les IDS existants sont confrontés aux problèmes de l'extraction, la catégorisation et la prise de décision à partir d'un large volume de données, afin de détecter les attaques se produisant dans un système, en particulier les attaques inconnues. Différentes approches ont été définies pour répondre à certains de ces problèmes, en particulier une approche très populaire, le Data Mining, qui a largement prouvé son efficacité pour l'extraction et la classification d'événements à partir d'un large volume de données. Cependant, cette approche, comme nous l'avons expliqué dans la section 2.2.3, présente certains inconvénients, qui nous ont poussé à nous orienter vers le Cased-Base Reasoning, une nouvelle approche qui n'a, jusqu'à présent, pas été appliquée dans le domaine de la détection d'intrusions. En nous basant sur cette approche, nous avons conçu un nouveau modèle pour la détection d'attaques inconnues. Ce modèle a été intégré à un système de détection d'intrusions à base d'agents, qui ne détectait que des attaques connues. La phase de conception étant terminée, nous prévoyons de valider notre modèle par une application logicielle. D'autre part, en ce qui concerne le moteur CBR (le coeur de notre système), nous avons proposé plusieurs optimisations qu'une étude empirique permettra de confirmer. 25/28 6. Index des illustrations Illustration 1: Un exemple de règles générées par RIPPER................................................................. 5 Illustration 2: Les principales étapes d'un algorithme de CBR.............................................................6 Illustration 3: Le modèle organisationnel du système existant.............................................................8 Illustration 4: Le modèle événementiel du système existant................................................................ 9 Illustration 5: Vue interne du modèle d'apprentissage........................................................................10 Illustration 6: Le moteur de délibération du CBR.............................................................................. 11 Illustration 7: Les classes d'événements de sécurité........................................................................... 12 26/28 7. Table des matières 1. Introduction...................................................................................................................................... 2 2. État de l'art........................................................................................................................................ 3 2.1 La détection d'intrusions............................................................................................................ 3 2.2 Le Data Mining et la classification de données d'audit..............................................................4 2.2.1 Le Data Mining dans les approches par scénarios............................................................. 5 2.2.2 Le Data Mining dans les approches comportementales..................................................... 5 2.2.3 La nécessité d'une autre approche...................................................................................... 6 2.3 Le Case-Based Reasoning..........................................................................................................6 2.4 Conclusion................................................................................................................................. 7 3. Système de détections d'intrusion base d'agents intelligents............................................................ 8 3.1 Le modèle organisationnel......................................................................................................... 8 3.2 Le modèle événementiel............................................................................................................ 9 3.3 Conclusion sur le système existant............................................................................................ 9 4. Le modèle d'apprentissage.............................................................................................................. 10 4.1 Extension du filtrage des événements......................................................................................10 4.2 Mise en place des éléments du moteur de CBR.......................................................................11 4.2.1 Notre algorithme de Case-Based Reasoning ................................................................... 11 4.2.2 La Fonction de similarité................................................................................................. 11 4.2.2.1 Les bases de la fonction de similarité.......................................................................13 4.2.2.1.a Espace de valeur de la fonction de similarité....................................................13 4.2.2.1.b Comparaison de base........................................................................................ 14 4.2.2.2 Comparaison avancée...............................................................................................15 4.2.2.3 Comparaison finale...................................................................................................17 4.2.2.3.a Algorithme de base........................................................................................... 17 4.2.2.3.b Cas où l'ordre temporel n'est pas présent.......................................................... 17 4.2.2.3.c Cas où l'ordre temporel est présent................................................................... 19 4.2.2.4 Cas d'indécisions...................................................................................................... 20 4.2.2.4.a Prise en compte de la durée entre deux événements......................................... 20 4.2.2.4.b Blacklistes et connaissances de l'agent............................................................. 21 4.2.2.4.c Reconstruction temporelle................................................................................ 21 4.2.2.5 Performance et améliorations................................................................................... 21 4.2.2.6 Le peuplement initial de la base des cas...................................................................22 4.2.3 Génération du schéma d'attaque et mise à jour des politiques......................................... 22 4.2.4 Conclusion sur le modèle................................................................................................. 23 5. Conclusion...................................................................................................................................... 24 6. Index des illustrations.....................................................................................................................25 8. Bibliographie.................................................................................................................................. 27 27/28 8. Bibliographie 1: Knowledge-Intensive Case-Based Reasoning and Sustained Learning, Agnar Aamodt, Proceedings of the 9th European Conference on Artificial Intelligence (ECAI-90), 1990. 2: Explanation-Driven Retrieval, Reuse and Learning of Cases, Agnar Aamodt, Proceddings of EWCBR-93, 1993. 3: Case-Based Reasoning : Foundational Issues, Methodological Variations, and System Approaches, Agnar Aamodt & Enric Plaza, AI Communications Vol. 7 Nr. 1, 1994. 4: Case-Based Learning Algorithms, David W. Aha, Proceeding of the 1991 DARPA Case-Based Reasonning Workshop, 1991. 5: Weighting Features, Dietrich Wettschereck & David W. Aha, ICCBR-95, 1995. 6: Cooperation Modes among Case-Based Reasoning Agents, Enric Plaza, Josep Lluis Arcos and Francisco Martin, Proceeding of the ECAI'96 Workshop on Learning in Distributed AI Systems, 1996. 7: Similarity, Uncertainty and Case-Based Reasoning in PATDEX, Michael M. Richter, Stefan Wess, Automated reasoning, essays in honour of Woody Bledsoe, Kluwer, pp. 249-265, 1991. 8: ADAM : Detecting Intrusions by Data Mining, Daniel Barbará, Julia Couto, Sushil Jajodia, Leonard Popyack & NingNing Wu, Proceedings of the 2001 IEEE Workshop on Information Assurance and Security, 2001. 9: Data Mining : A New Intrusion Detection Approach, Dary Alexandra Pena Maldonado, GIAC Security Essentials Certification Practical Assignement [SANS Institute], June 2003. 10: Intelligents Agents for Intrusion Detection, Guy G. Helmer, Johnny S. K. Wong, Vasant Honavar & Les Miller, Proceedings, IEEE Information Technology Conference pp 121-124, 1998. 11: Lightweight Agents for Intrusion Detection, Guy Helmer, Johnny S. K. Wong, Vasant Honavar & Les Miller, the Journal of Systems and Software, 2000. 12: Automated Discovery of Concise Predictive Rules for Intrusion Detection, Guy Helmer, Johnny S.K. Wong, Vasant Honavar & Les Miller, the Journal of Systems and Software 60, 2002. 13: Artificial Intelligence and Intrusion Detection : Current and Future Directions, Jeremy Franck, Division of Computer Science, University of California at Davis, 1994. 14: Intrusion Detection with Unlabeled Data Using Clustering, Leonid Portnoy, ACM Workshop on Data Mining Applied to Security (DMSA 2001), 2001. 15: Cost-Base Modeling for Fraud and Intrusion Detection : Results from the JAM Project, Salvatore J. Stolfo, Andreas Prodromidis, Wenke Lee, Wei Fan & Philip K. Chan, Proceedings of the DARPA Information Survivability Conference and Exposition, IEEE Computer Press pp. 130144, 2000. 16: Java Agents for Meta-Learning over Distributed Databases, Salvatore Stolfo, Andreas L. Prodromidis, Shelley Tselepis, Wenke Lee, Dave W. Fan & Philip K. Chan, American Association for Artificial Intelligence, 1997. 17: Data Mining Approaches for Intrusion Detection, Wenke Lee & Salvatore J. Stolfo, Proceedings of the 7th USENIX Security Symposium, 1998. 18: A Data Mining Framework for Building Intrusion Detection Models, Wenke Lee, Salvatore J. Stolfo & Kui W. Mok, IEEE Symposium on Security and Privacy, 1999. 19: Fast Effective Rule Induction, William W. Cohen, Machine Learning : Proceedings of the Twelfth International Conference (ML95), 1995. 20: Feature Selection Using a Genetic Algorithm for Intrusion Detection, Guy Helmer, Johnny Wong, Vasant Honavar & Les Miller, Proceedings, Genetic and Evolutionary Computation Conference, Orlando, 1999. 21: Détection d'intrusions : Une nouvelle approche par systèmes multi-agents, Karima Boudaoud, Ecole Polytechnique Fédérale de Lausanne, 2000. 28/28