Network Intrusion Detection System
Transcription
Network Intrusion Detection System
Bro Network Intrusion Detection System Louis PEQUIGNOT Timothee BAMBADE Grenoble-INP:Phelma Filière ISSC 2A Grenoble, France Grenoble-INP:Phelma Filière ISSC 2A Grenoble, France louis.pequignot@phelma. grenoble-inp.fr 1. INTRODUCTION Dans un monde où la sécurité informatique est une question de plus en plus cruciale, les IDS apportent aujourd’hui une forme de réponse. Ce document vous introduit Bro, en tant qu’IDS, présente ses principales caractéristiques et un exemple d’utilisation du logiciel illustrant ses avantages et ses principes. Nous allons tout d’abord présenter le contexte numérique dans lequel Bro intervient. 2. 2.1 ETAT DE L’ART Les IDS [email protected] points, ils peuvent permettre une bonne surveillance de l’ensemble d’un réseau. -Les hybrides : Le plus connu étant Prelude, ce type d’IDS combine les informations provenant d’HIDS et de NIDS dans un système en général distribué, le tout combiné pour fournir une bonne visualisation des attaques. Ses avantages sont une meilleure corrélation entre les éléments analysés, moins de faux-positifs et une meilleure capacité de réaction sur les analyseurs. -Les IPS (Intrusion Prevention System) : Par rapport aux IDS, celui-ci est capable de bloquer le trafic en cas d’intrusion. De même que pour les IDS, celui-ci peut se dériver en NIPS et HIPS. Ce type de matériel pose cependant certaines contraintes. Il bloque toute activité suspecte, même dans le cas de faux-négatifs. S’il un pirate prends la main dessus, il peut alors bloquer tout le réseau. Et enfin, un IPS est peu discret. -Les KIDS/KIPS (Kernel IDS/IPS) : Leur particularité est de s’executer dans le noyau d’une machine, pour y bloquer toute activité suspecte. Si cela est pratique pour empêcher des tentatives d’appels systèmes malveillants, cela ralentit toutefois considérablement la vitesse des machines sur lesquels ils opèrent. Les IDS (Intrusion Detection System) sont une bonne façon de détecter des attaques, des activités anormales ou suspectes dans un univers informatique, et de riposter. De nombreux IDS existent aujourd’hui, qu’ils soient en vente ou open-sources, et ces logiciels sont des outils clés dans la sécurité de systèmes d’information (en particulier d’entreprise). Dans le domaine des IDS, on parle de faux-positifs lorsqu’un IDS provoque une alerte qui ne correspond pas à une réelle intrusion, et de faux-négatifs lorsqu’un IDS ne détecte pas une réelle intrusion. Il existe plusieures sortes d’IDS: 2.2 principes de fonctionnement -Les HIDS (Host-Based IDS) : ceux-ci sont configurés sur Les IDS présente une architecture basée sur le modèle une machine et analyse toute l’activité s’y déroulant (pas CIDF (Common Intrusion Detection Framework): il permet d’analyse du réseau); il peut surveiller l’activité de l’utilisateur aux IDS la définition claire et précise de leurs informations (programmes et commandes utilisés, horaires et durées d’utilisation, dans un but de pouvoir échanger des messages entre eux. Au etc), l’activité de la machine (sa consommation en ressources, sein du CIDF, pour la spécification des données, on utilise le son nombre de processus, etc), et toute autre forme d’activité langage CISL (Common Intrusion Specification Language) jugée malicieuse (virus, cheval de Troie, etc). Son avantage qui permet de définir de manière très précise les attaques est d’avoir peu de faux-positifs, et son inconvénient princidans leur contexte (cela passe par la conception d’objet pal, qu’il faut configurer un HIDS par machine, et suivant dénommé GIDO (Generalized Intrusion Detection Objects). les systèmes et sous-configurations des systèmes utilisés. Un format des données est adopté avec le IDMEF (Intrusion -Les NIDS (Network IDS) : ceux-ci permettent une analDetection Message Exchange Format) qui s’appuie sur le foryse furtive, temps-réel (à l’inverse des HIDS) en un point mat XML, une formalisation des données DTD (Document d’un réseau pour controler son activité. Placés en différents Type Definition) et un format de présentation XSL. Enfin le protocole d’échange usuellement défini est l’IDXP (Intrusion Detection Exchange Protocol) échangeant des données au format IDMEF. Ce protocole supporte l’authentification entre elles des entités communicantes, l’intégrité et la confiPermission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are dentialité des messages. not made or distributed for profit or commercial advantage and that copies Parlons à présent des méthodes utilisées par les IDS pour bear this notice and the full citation on the first page. To copy otherwise, to effectuer la détection d’attaques. Deux techniques distinctes republish, to post on servers or to redistribute to lists, requires prior specific peuvent être mises en place : une approche par scénarios et permission and/or a fee. une approche comportementale. Copyright 20XX ACM X-XXXXX-XX-X/XX/XX ...$15.00. Dans le cas de l’approche par scénarios, l’IDS recherche dans tous paquets capturés des motifs qui peuvent correspondre à des signes d’attaques. Il se base pour cela sur une base de signatures (ou pattern, ou motifs) prédéfinie et extensible. L’avantage de cette méthode est une utilisation efficace et générant peu de faux-positifs, mais cela nécessite une mise à jour constante de la base de signatures. En cas de correspondances de scénarios d’attaques avec les échanges, une alerte est levée. Dans ce cadre, on parle de recherche de motifs lorsqu’on recherche des signatures particulières sur des données, de détection par inférence (calcul d’une probabilité d’attaque en utilisant le principe d’inférence de Bayes), et de Model Checking (c’est en cas d’absence de la signature recherché que le système lève une alerte). Dans le cas de l’approche comportementales, le système passe d’abord par une phase d’apprentissage du comportement normal du système, puis en phase active génère des alertes dès que les comportements ont trop d’anomalies, diffèrent trop du comportement normal. Typiquement à cette fin peuvent être utilisés des réseaux de neurones (qui classifient les actions de l’utilisateurs), des modèles de statistiques sur des paramètres tels que la consommation mémoire ou la charge GPU (levant des alertes sur de trop grands écarts). 2.3 un autre exemple d’IDS Parmis la longue liste d’IDS connus, l’on peut citer Snort. Il s’agit d’un des plus important NIDS open-source qui bénéficit d’une communauté d’utilisateurs des plus importantes. Snort se base sur la bibliothèque de Libpcap pour capturer des trames. Il permet de faire de l’analyse temps réél des paquets capturés, et base sa force sur sa riche base de signatures permettant de faire une détection efficace d’intrusion. 3. INTRODUCTION À BRO Bro est un NIDS open-source, fonctionnant sur la famille UNIX/Linux. De manière passive, ce logiciel écoute tout le trafic passant en un point stratégiquement choisi du réseau. Mais il offre de très nombreuses autres fonctionnalités qui distinguent ce NIDS de la plupart; il a ainsi obtenu un certificat de sécurité de premier niveau par l’ANSSI (Agence Nationale de la Sécurité des Systèmes d’Information). Au cours de la suite de ce document, nous présentons dans un premier temps un descriptif global de Bro en évoquant également ses limites, puis nous détaillons ensuite des exemples de notre utilisation de ce logiciel illustrant certaines de ses capacités. 4. LES CARACTÉRISTIQUES IMPORTANTES DE BRO Bro est open-source et fonctionnel sur la famille des processeur UNIX. Une fois déployé, Bro permet une surveillance constante et en temps-réél du réseau , par une prise de logs (Il se base sur la librairie Libpcap). Il est adapté aux réseaux Gbps, donc à fort trafic. La force du logiciel réside dans les possibilités qu’il offre au niveau analyses, scripts (langage Bro) et interfaces. 4.1 Fonctionnalités et avantages L’architecture de Bro s’appui sur deux éléments majeurs, une couche Event Engine (permettant la capture des éléments du réseau) et une couche Policy Script Interpreter (permettant une réaction du logiciel). Pour cela, Bro utilise son propre langage de script (appelé langage Bro) pour le traitement des évènements. Au niveau analyses, le logiciel permet tout d’abord de comprendre la nature d’échange au sein du réseau, incluant l’analyse des fichiers transportés et des tunnels. Il supporte une large gamme de couches protocolaires (incluant DNS, FTP, HTTP, IRC, SMTP, SSH, SSL, etc) et IPV6. Il peut également stocker sa connaissance des échanges passés pour analyser les suivants (suivi des transactions, demande de connexion répétées ou non, protocoles, et autres). Il permet ainsi un controle d’intégrité des packets ET de contexte des packets. Bro possède en outre un package SumStat lui conférant une riche palette d’outils d’analyses statistiques du réseau. Il permet ensuite de comparer les motifs de trames passant dans le réseau à des signatures d’attaques pré-établie dans sa base de donnée (selon le principe d’algorithme par scénarios). Cela permet ainsi de détecter en temps réel des tentatives d’attaques ou des comportements suspects (selon l’approche comportementale, en mesurant des écarts à des profils types d’échange). Sa base de donnée très riche permet ainsi de détecter un très grand nombre d’attaques connues à ce jour. Celle-ci repose par défaut sur la base de signatures de Snort, mais permet des ajouts personnalisés, sur les signatures commes sur son fonctionnement, ce qui nous amène à un autre avantage de Bro : son extensivité. En effet, le logiciel propose des interfaces permettant de le personnaliser et d’accepter facilement l’ajout de nouvelles fonctionnalités. On utilise pour cela les scripts en langage Bro. On peut ainsi ajouter des nouvelles signatures à comparer avec celles des trames passant par Bro, pour les surveiller. Les scripts permettent de configurer des réactions par rapport aux observations du logiciel, par exemple de bloquer l’accès au réseau à des adresses particulières, ou alerter par email l’administrateur en cas de comportements anormaux définis. Les scripts permettent aussi d’obtenir tout types de statistiques désirés à partir des logs. On voit ainsi que ce logiciel est hautement personnalisable dans son utilisation. 4.2 les limites connues de Bro Bro connait certaines limites que l’on peut évoquer pour conclure sur sa présentation générale. L’aide à l’installation sur le site de bro est une version assez obsolète, il faut souvent chercher de l’aide sur internet venant d’autres utilisateurs. La documentation est assez pauvre et les sources sont parfois peu structurées. Au niveau performance, le rapport de certification de l’ANSSI pointe une sensibilité assez notable pour les paquets mal formés (qui peuvent, si elles sont répétées à très grand débit, pendant que le logiciel essai de les traiter, aussi laisser passer des attaques, c’est une technique d’évasion); ce type de considération implique de s’assurer que Bro est couplé avec des éléments de normalisation de réseau, de pare-feu, ou de filtres. Cela peut s’avérer gênant car on ne connait pas en général les éléments du réseau environnant où l’on effectue l’installation de Bro. Bro garde toutefois de très bonne performance dans la détection d’un très grand nombre d’attaques. 5. NOTRE UTILISATION DE BRO La partie suivante sera consacré aux tests des fonctions explicité dans la description de Bro afin de montrer les possibilités offertes par ce NIDS. Nous allons principalement analyser les scripts déjà présent au sein de Bro, ceux-ci servant d’exemples au possibilités offertes par Bro. 5.1 La prise des logs La première fonctionalité de Bro et la plus rudimentaire est la génération de logs représentant le trafic capturé. La capture du trafic se base sur la librairie libpcap, la même utilisée par Wireshark et tcpdump. Ainsi, Bro peut aussi être utilisé sur des fichiers .pcap afin d’effectuer des analyses de trafic en différé. Cependant, ce n’est pas le principal intérêt de Bro qui sera généralement utilisé en analyse temps réel. Cette première partie sera concentré sur l’analyse des .log généré par Bro lors de sa capture du trafic, on utilisera pour cela des .pcap, le fonctionnement étant le même qu’en capture temps réel. Bro peut se lancer en capture tout comme en analyse, on peut donc appliquer Bro en lecture sur un fichier .pcap. bro -r capture.pcap Cette commande va lire les données grâce à la libraire libpcap et va produire des fichier .log. Ces fichiers, par exemple conn.log, files.log ou http.log, contiennent des lignes contenant les informations rangé par colonne, chaque colonne séparé par une tabulation. Chaque fichier n’a pas les même colonnes car .log correspond à des paquets différents analysés et rangés. Par exemple http.log va regrouper les paquets HTTP alors que le fichier files.log regroupera les paquets liés au transfert de fichiers. Cependant, la présence du champ id permet de retrouver un paquet qui serait présent dans plusieurs .logs. Voici par exemple le début de l’en-tête de conn.log : ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto On a le temps quand le paquet a été capturé dans ts, l’id unique du paquet dans uid, on a ensuite les adresses de l’origine du paquet id.orig_h:id.orig_p et les addresses du destinataire id.resp_h:id.resp_p. On a enfin le protocole dans le champ proto. Il y a cependant plus de champ contenant toute les informations pertinentes concernant les connexions. On a par exemple des paquets présentant le protocole TCP ou UDP. On peut ensuite appliquer des traitements sur les informations recueillis. Ces informations sont rangées et ligne et colonne, on peut donc traiter ces .log comme des tableaux pour récupérer ou comparer les données intéressantes. On utilise donc des fonctions bash pour parcourir ces .log et extraire les informations requises. Voici quelques exemples des informations que l’on peut extraire : Affiche les 3 sites les plus accéder : bro-cut host < http.log \ | sort | uniq -c | sort -n | tail -n 3 Affiche les 10 ports les plus accédés, dans l’ordre décroissant : bro-cut id.resp_p < conn.log \ | sort | uniq -c | sort -rn | head -n 10 Affiche tout les serveur qui ont envoyé plus de 1 KB au client : bro-cut service resp_bytes id.resp_h < conn.log \ | awk ’$1 == "http" && $2 > 1000000 {print $3}’ \ | sort -u L’analyse des logs grâce à la commande bro-cut est fastidieuse et ne permet pas d’analyser complétement le trafic. Bro possède son propre langage, basé sur le C++, qui va nous permettre de créer des scripts utilisable en temps réel afin de créer des analyses statistiques ou encore de détecter des attaques. 5.2 Outilss de statistiques Bro possède des outils très puissant pour analyser le trafic. Un des plus important est le Summary Statistics Framework, ou Sumstat. Ce framework est utilisé pour créer un modèle statistique du réseau et permet de comparé ce modèle au flux de paquets afin de détecter les anomalies ou les changement, menant parfois a des détection d’attaque. Sumstat se décompose en trois bloc d’analyse : • Observation L’objet Observation est un point fixe dans les données a traiter. C’est l’entrée du framework, il récupère le contexte ou les informations d’un événement et créé un objets unique que caractérise ce que l’on souhaite mesurer. • Reducer L’objet Reducer récupère les observations et applique les calculs statistiques afin de lier toutes les observations ensembles et pour monter le modèle. • Sumstat L’objet Sumstat est l’objet final qui donne une durée de vie au Reducer durant lesquelles ils exécutent leurs calculs en renvoyant le résultat à la fin de leur durée de vie. Afin d’utiliser ces objets, il faut créer un script Bro a executer lors de la capture ou de l’analyse d’un .log. Pour utiliser ce framework, il faut initialiser les Reducer nécessaires dans la fonction event bro_init() afin de pouvoir les remplir avec les Observation. Les objets Sumstat sont aussi créés dans la fonction d’initialisation en lui injectant les Reducer initialisé avant. On fixe les champs du Sumstat à l’initialisation, tel que l’intervalle de temps des Reducer ou les résultats à retourner. Les Observation sont eux initialisé dans la fonction appelé par le script et seront utilisé automatiquement. L’initialisation de ces différents objet est simple et courte. Voici le modèle général d’initialisation de ces objets : Initialisation d’un Reducer : local r1 = SumStats::Reducer($stream="conn established", $apply=set(SumStats::SUM)); Initialisation d’un Sumstat : SumStats::create([$name = "name of the Sumstat", $epoch = 1min, $reducers = set(r1), $epoch_result(ts: time, key: SumStats::Key, result: SumStats::Result) = { print fmt("Value of the result: %.0f", result["name of the Sumstat"]$sum); }]); SumStats::create([$name= "ftp-detect-bruteforcing", $epoch=bruteforce_measurement_interval, $reducers=set(r1), $threshold_val(key: SumStats::Key, result: SumStats::Result) = { return result["ftp.failed_auth"] $num+0.0; }, $threshold=bruteforce_threshold, $threshold_crossed(key: SumStats::Key, result: SumStats::Result) = { local r = result["ftp.failed_auth"]; local dur = duration_to_mins_secs (r$end-r$begin); local plural = r$unique>1 ? "s" : ""; local message = fmt("%s had %d failed logins on %d FTP server%s in %s", key$host, r$num, r$unique, plural, dur); NOTICE([$note=FTP::Bruteforcing, $src=key$host, $msg=message, $identifier=cat(key$host)]); }]); Initialisation d’une Observation : SumStats::observe("conn established", SumStats::Key(), SumStats::Observation($num=1)); Pour utiliser ces scripts, il suffit de lancer le script lors de l’analyse de Bro ou, s’il s’agit de l’analyse d’un fichier déjà capturé, de lancer la commande suivante : # bro -r capture.trace script.bro Value of the result: 15 On se base sur les objets de Sumstat ci-dessus, mais la complexité du framework permet d’afficher des informations plus complètes ou plus spécialisées, comme par exemple le nombre de connexions établie en TCP, de calculer combien de connexions une adresse a tenté sur un port précis ou encore de faire un résumé des fichiers téléchargés par un client. 5.3 Detection d’attaque Comme nous avons vu, les scripts Bro permettent d’extraire des données de la capture et d’effectuer des traitements très variés permettant ainsi de détecter des comportements anormaux ou malveillants. Grâce à la description des paquets dans les .log, triés en fonction de leur protocole et des contextes dans lesquels ils sont capturés, ainsi que des calculs statistiques effectués sur les données recueillies, on peut créer des scripts intelligents qui peuvent notifier ou réagir en cas d’attaque. Par exemple, on peut compter le nombres de connexions effectuées sur un client, ou détecter quels ports sont sollicités. On pourrait alors détecter un scan de nmap si l’on remarque que tout les ports sont sollicités. On peut même imaginer détecter une attaque très discrète de nmap choisissant des seuils de détection dans le script très bas, au risque de voir apparaı̂tre des faux positifs. La force de Bro est la facilité d’ajouter des scripts personalisés à son éxecution, en utilisant des frameworks pertinent pour l’analyse de données. En utilisant Sumstat, on peut créer des Observation sur un aspect particulier ou un champ particulier des paquets dont on veut analyser la fréquence d’apparition d’un client ou d’autre information à l’aide d’un Reducer. On peut décider de faire cette action toutes les minutes et obtenir ainsi une notification si, à une certaine minute, un nombre de connexion important à été effectué. Si ce script n’existe pas à la base dans les fichiers de Bro, la facilité d’ajout de script permet à l’utilisateur de créer et implanter ce script sans problèmes. Par exemple, Bro inclut de base un script pour détecter les attaques de force brute sur FTP. Voici ci-dessous les caractéristiques Sumstat : • Reducer : local r1: SumStats::Reducer= [$stream="ftp.failed_auth", $apply=set(SumStats::UNIQUE), $unique_max=double_to_count (bruteforce_threshold+2)]; • Sumstat : • Observation : SumStats::observe("ftp.failed_auth", [$host=c$id$orig_h], [$str=cat(c$id$resp_h)]); On remarque que le Observation récupère les informations sur l’id et sur orig_h d’une part et sur resp_h d’autre part. On récupère donc les adresses d’origine et de destination des paquets. Ensuite, on remarque que le Reducer s’applique sur notre Observation et va récupérer les duo uniques d’origine/destination. On lui ajoute un seuil aussi qui va déterminer quand on détecte une attaque de force brute. L’objet Observation va ensuite récupérer ce Reducer avec un intervalle particulier (qui est une variable que l’on peut modifier) et va renvoyer un chaı̂ne de caractère incluant le nombre de connexions échouées effectuée ainsi que le serveur concerné. On utilise ce script via la commande : # bro -r capture.pcap protocols/ftp/detect-bruteforcing.bro protocols/ftp/detect-bruteforcing.bro est le chemin du fichier .bro déjà présent dans les fichiers de Bro. 6. CONCLUSION Bro est un NIDS très performant qui permet un traitement en temps réel très poussé du trafic réseau. Son architecture permet de le déployer sur des serveurs très hierarchisé très facilement. Il est aussi optimisé pour fonctionner sans réserver trop de puissance du serveur sur lequel il est déployé. Il est aussi très versatile de par sa possibilité d’ajout de script personalisé, qui accroit son potentiel et permet de cibler précisement les informations que l’on souhaite extraire. Cependant, l’absence d’interface et la complexité de l’ajout de script ou de son installation sur serveur en font un outil difficile à maitriser. 7. RÉFÉRENCES APPENDIX A. INTRODUCTION https://www.ossir.org/sur/supports/2007/bro-ids-ossir-sur16012007.pdf B. LES CARACTÉRISTIQUES IMPORTANTES DE BRO http://www.ssi.gouv.fr/uploads/IMG/cspn/anssi-cspn 200906fr.pdf B.1 Fonctionnalités et avantages B.2 les limites connues de Bro https://www.bro.org/ http://www.ssi.gouv.fr/uploads/IMG/cspn/anssi-cspn-cible 200906fr.pdf C. http://www.icir.org/johanna/papers/raid14countmein.pdf TESTS BRO C.1 Logs C.2 Stats C.3 Detection d’attaque D. CONCLUSION E. REFERENCES