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

Documents pareils