Académique Documents
Professionnel Documents
Culture Documents
Avril-Septembre 2001
Rsum
La dtection dintrusions consiste dcouvrir ou identifier lutilisation dun systme
informatique dautres fins que celles prvues. Cest une technique multiples facettes, difficile cerner lorsquon ne les manipule pas. Mais la plupart des travaux
effectus dans ce domaine restent difficiles comparer. On peut rarement mettre deux
modles sur un pied dgalit, et il est peu ais de mettre lpreuve plusieurs modles,
ou encore den dvelopper dautres radicalement diffrents sans tout reconstruire.
La dtection dintrusion sera place parmi les autres techniques anti-intrusion. Ensuite, un approfondissement sera effectu sur cette technique. Plusieurs domaines comme
les rseaux neuronaux, les sytmes multi-agents ou encore le data-mining seront rapprochs de cette technique. Enfin, quelques modles, prototypes ou produits de dtection dintrusions seront prsents.
Dans une deuxime partie, larchitecture EIDF (Experimental Intrusion Detection
Framework) sera introduite. Sa modularit sera mise en avant pour rpondre au problme. Plusieurs modles de dtection dintrusion seront ensuite prsents et implments. Larchitecture sera enfin mise profit pour les tester.
I tat de lart
1
7
7
7
8
10
.
.
.
.
.
.
11
12
12
13
14
15
15
18
18
19
22
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
24
25
25
26
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
28
28
29
29
30
31
32
33
33
34
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
II EIDF
5
36
.
.
.
.
.
.
.
.
.
.
.
.
.
37
37
37
37
38
38
39
39
39
40
42
42
43
44
Sources daudit
6.1 Lecteur denregistrements . . . . . . . . . . . . . . . . . . . . . . .
6.2 Appels systme dun processus . . . . . . . . . . . . . . . . . . . . .
6.3 Lecteur des donnes de [FHSL96] . . . . . . . . . . . . . . . . . . .
47
47
48
50
Les analyseurs
7.1 Enregistreur . . . . . . . . . . . . . .
7.2 Analyse par correspondance exacte . .
7.3 Analyse par correspondance avec seuil
7.4 Modle de Forrest . . . . . . . . .
7.5 Rseaux neuronaux . . . . . . . . . .
7.6 Le super-analyseur . . . . . . . . . .
.
.
.
.
.
.
52
52
53
54
55
58
64
Tests dintrusion
8.1 Donnes de [FHSL96] . . . . . . . . . . . . . . . . . . . . . . . . .
67
67
Conclusion
Discussion sur larchitecture . . . . . . . . . . . . . . . . . . . . . . . . .
Dveloppements futurs . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Autres applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
69
69
70
Annexes
76
Larchitecture EIDF
5.1 Architecture . . . . . . . . . . . . .
5.1.1 Aperu . . . . . . . . . . .
5.1.2 Les source daudit . . . . .
5.1.3 Les analyseurs . . . . . . .
5.1.4 La charpente . . . . . . . .
5.2 Multiplexage . . . . . . . . . . . .
5.2.1 Motivations . . . . . . . . .
5.2.2 Mise en uvre . . . . . . .
5.2.3 Le Super-analyseur . . . . .
5.3 Dtails dimplmentation du modle
5.3.1 Charpente . . . . . . . . . .
5.3.2 Sources daudit . . . . . . .
5.3.3 Analyseurs . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
A Rseaux neuronaux
A.1 Dfinition . . . . . . . . . . . . . . . . . . . . .
A.2 Rtropropagation . . . . . . . . . . . . . . . . .
A.2.1 Principe . . . . . . . . . . . . . . . . . .
A.2.2 Calcul . . . . . . . . . . . . . . . . . . .
A.3 Algorithme utilis pour le perceptron multicouche
A.4 Implmentation . . . . . . . . . . . . . . . . . .
B Le modle de Markov cach
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
76
76
76
76
77
77
78
82
83
83
1.1
11
4.1
32
5.1
5.2
38
41
6.1
49
7.1
7.2
7.3
58
59
60
78
39
78
Listings
5.1
5.2
6.1
6.2
6.3
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
A.1
C.1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
43
45
47
49
50
52
53
54
56
59
62
63
64
79
83
Introduction
Contexte
Le concept de systme de dtection dintrusions a t introduit en 1980 par James
Anderson [And80]. Mais le sujet na pas eu beaucoup de succs. Il a fallu attendre la
publication dun modle de dtection dintrusions par Denning en 1987 [Den87] pour
marquer rellement le dpart du domaine. En 1988, il existait au moins trois prototypes : Haystack [Sma88] (voir section 4.1), NIDX [BK88], et [SSHW88].
La recherche dans le domaine sest ensuite dveloppe, le nombre de prototypes
sest enormment accru. Le gouvernement des tats-Unis a investi des millions de
dollars dans ce type de recherches dans le but daccrotre la scurit de ses machines.
La dtection dintrusion est devenue une industrie mature et une technologie prouve :
peu prs tous les problmes simples ont t rsolus, et aucune grande avance na t
effectue dans ce domaine ces dernires annes, les diteurs de logiciels se concentrant
plus perfectionner les techniques de dtection existantes.
Quelques voies restent cependant relativement inexplores :
les mcanismes de rponse aux attaques,
les architectures pour les sytmes de dtection dintrusions distribus,
les standards dinter-oprabilit entre diffrents systmes de dtection dintrusion,
la recherche de nouveaux paradigmes pour effectuer la dtection dintrusion.
Motivations
Une des approches de la scurit informatique est de crer un systme compltement scuris, cest la prvention. Mais il est trs rarement possible de rendre un
systme compltement inattaquable pour plusieurs raisons.
La plupart des systmes informatiques ont des failles de scurit qui les rendent
vulnrables aux intrusions. Les trouver et les rparer toutes nest pas possible
pour des raisons techniques et conomiques.
Les systmes existants ayant des failles connues ne sont pas facilement remplacs par des systmes plus surs, principalement parce quils ont des fonctionnalits intressantes que nont pas les systmes plus surs, ou parce quils ne peuvent
pas tre remplacs pour des raisons conomiques.
Dployer des sytmes sans failles est trs dur voire impossible car des failles
7
Prvention
Autopsie
Dtection
Enqute
Dans cette approche plus raliste, la prvention nest quune des quatres parties
de la gestion de la scurit. La partie dtection est la recherche de lexploitation de
nouvelles brches. La partie enqute essaye de dterminer ce qui est arriv, en sappuyant sur les informations fournies par la partie dtection. La partie autopsie consiste
chercher comment empcher des intrusions similaires dans le futur.
Par le pass quasiment toute lattention des chercheurs sest porte sur la partie
prvention. La dtection est maintenant beaucoup prise en compte, mais les deux autres
parties ne reoivent pas encore toute lattention quelles mritent.
Nous nous intresserons plus particulirement ici la partie dtection.
Dfinitions
Tout dabord, quelques dfinitions :
Systme informatique : nous appellerons systme informatique une ou plusieurs
machines mises la disposition de zro, un ou plusieurs utilisateurs lgitimes pour
toutes sortes de tches.
Intrusion : nous appellerons intrusion toute utilisation dun systme informatique
des fins autres que celles prvues, gnralement dues lacquisition de privilges de
faon illgitime. Lintrus est gnralement vu comme une personne trangre au systme informatique qui a russi en prendre le contrle, mais les statistiques montrent
que les utilisations abusives (du dtournement de ressources lespionnage industriel)
proviennent le plus frquement de personnes internes ayant dj un accs au systme.
Premire partie
tat de lart
10
Chapitre 1
Intrusion
Premption
Prvention
externe
Dissuasion
externe
primtre du systme
Prvention
interne
Dissuasion
interne
Dtection
Dflection
Contremesures
leurre
objet de convoitises
Pour chaque technique anti-intrusion, une analogie galement tire de [HB95], sera
faite dans le monde rel, en prenant comme sujet quelquun qui se promne dans la rue
11
1.1
Premption
Les techniques de premption dintrusion prennent place avant dventuelles tentatives dintrusion pour les rendre moins susceptibles de se drouler effectivement. Cela
revient frapper lautre avant quil ne le fasse. Cest souvent une approche dangereuse
o des innocents peuvent tre touchs. On peut inclure lducation des utilisateurs, la
prise de mesures prventives lencontre des usagers commenant se montrer enclins outrepasser leurs droits, linfiltration de communauts de pirates pour se tenir
au courant des techniques et motivations de ceux-ci.
Analogie : Sympathiser avec un pickpocket et liminer quiconque fera allusion
notre portefeuille Ce nest pas trs cibl et cela peut frapper des innocents.
Mise en uvre :
Veille active : on tente dempcher de futures intrusions en cherchant les signes
prliminaires dune activit non dsire, en remarquant par exemple les tapes
exploratoires dune intrusion, et en prenant sans attendre des mesures contre les
utilisateurs concerns. On peut aussi rcompenser les utilisateurs qui trouvent
des failles ou des usages non-autoriss.
Infiltration : ce sont les efforts des personnes en charge de la scurit des systmes
pour acqurir des informations plus officieuses pour complmenter les alertes officielles dorganismes comme le Computer Emergency Response Team (CERT)
ou autres rapports de vulnrabilits. Une infiltration plus insidieuse pourrait tre
dinonder les rseaux pirates dinformations fausses pour embrouiller ou dissuader ceux-ci.
1.2
Prvention
Les techniques de prvention, mises en place lintrieur ou lextrieur du systme, consistent concevoir, implmenter, configurer le systme assez correctement
pour que les intrusions ne puissent avoir lieu, ou au moins soient svrement gnes.
On peut par exemple choisir disoler une machine dans une cage ou de ne pas
connecter une machine au rseau et viter ainsi toute intrusion venant de l1 .
Idalement, cette technique pourrait empcher toute attaque et pourrait tre considre comme la technique anti-intrusion la plus forte. Dans un monde rel, cette technique est irralisable, il reste toujours quelques failles.
Analogie : Engager des gardes du corps muscls et viter les mauvais voisinages.
Cest une approche de choix lorsquelle marche mais elle cote cher, elle nest pas com1 il reste bien sur protger laccs physique la machine, contrler les missions radio-lectriques par
exemple en utilisant des cages de Faraday, nutiliser que du personnel de confiance, . . .
12
mode dutilisation, et nest pas totalement fiable. Un garde du corps peut tre distrait
ou battu par un malfaiteur ou mis en dfaut par des moyens inattendus ou nouveaux.
Mise en uvre :
Conception et implmentation correcte : cest lutilisation des techniques classiques
didentification, dauthentification, de contrle daccs physique et logique. On
peut trouver des mthodologies comme comme lINFOSEC Assesslent Methodology (IAM) (http://www.nsa.gov/isso/iam/index.htm ) ou encore la rfc
2196 (http://www.ietf.org/rfc/rfc2196.txt ). Les techniques sont bien
connues mais souvent peu commodes et chres.
Outils de recherche de failles : quils soient lancs la main ou automatiquement,
ils recherchent un grand ventail dirrgularit : logiciels non-autoriss, mots de
passe faibles, permissions daccs ou proprit inapropries, nuds fantmes sur
le rseau, . . .
Pare-feux : ils examinent le flux dinformation entre deux rseau et les protgent
lun de lautre en bloquant une partie du trafic.
1.3
Dissuasion
13
1.4
Dtection
Les techniques de dtection dintrusion tentent de faire la diffrence entre une utilisation normale du systme et une tentative dintrusion et donnent lalerte. Typiquement,
les donnes daudit du systme sont parcourues la recherche de signatures connues
dintrusion, de comportements anormaux ou dautres choses intressantes. La dtection
peut tre faite en temps rel ou en tant quanalyse post-mortem. Si la dtection est en
temps rel, le programme peut donner lalerte, auquel cas le personnel qualifi pourra
tenter de remdier lintrusion, en coupant le rseau ou en remontant la piste. Mais
il peut probablement arriver aprs la fin de lintrusion. Le programme peut galement
tre coupl un dispositif de contre-mesures pour pallier la lenteur humaine du personnel. Dans tous les cas, les techniques de dtection dintrusion seules nempcherons
pas lintrusion.
Analogie : Avoir un sifflet et souffler dedans pour attirer lattention de la police
lorsquon est attaqu. Lutilit est limite si on est trop loin dun magasin de donuts2
ou si le syndrome des alarmes intempestives pousse les autorits lignorer comme
une fausse alarme. Il se peut galement quon se rende compte du vol trop tard.
Mise en uvre :
On se rfererra au chapitre 2.
2 On
14
1.5
Dflection
La dflection dintrusion fait croire un cyber-malfaiteur quil a russi accder aux ressources systme alors quil a t dirig dans un environnement prpar et
contrl. Lobservation contrle son insu dun intrus qui dvoilerait alors tous ses
tours est une excellente source dinformation sans prendre de risques pour le vrai systme. Certaines techniques de dflection peuvent tre considres comme une sorte
de contre-mesure, mais le concept inclus aussi des techniques qui ne ncessitent pas
laccs au vrai systme, comme les systmes paratonnerre.
Analogie : Transporter deux portefeuilles pour que, lors dune attaque, le faux portefeuille avec la carte de crdit annule se prsente lintrus. On peut ainsi apprendre
comment le voleur opre, mais cela marche probablement seulement sur les voleurs
dbutants, et il peut tre malcommode de se promener avec deux portefeuilles.
Mise en uvre :
Faux systmes en quarantaine : ils sont conus pour faire croire aux intrus quils
sont sur le systme cible. Cette dflection est faite par un frontal rseau tel quun
routeur ou un firewall. Un faux systme efficace encourage lintrus y rester
assez longtemps pour que son identit et ses intentions soient dcouverts. Cependant, ddier une machine et des ressources pour lentretenir cote cher.
Faux comptes : ils sont conus pour faire croire lintrus quils utilisent un compte
normal corrompu alors quils sont bloqus dans un compte spcial aux accs limits. Dans ce cas, les contrles de dflection sont inclus directement dans le
systme dexploitation et les commandes du systme. Cette technique limine le
besoin dune machine spare ncessaire la mise en place dun faux systme
mais doit compter sur la scurit du systme pour sassurer dune bonne isolation avec les ressources protges. Lenvironnement ainsi construit devra aussi
contenir assez de leurres pour confondre lidentit et les intentions de lintrus.
Cependant, maintenir un faux compte dont on ne peux srement pas schapper
est difficile.
Systmes et comptes paratonnerres : ils sont similaires aux faux systmes et aux
faux comptes comptes, mais au lieu de dtourner lintrus sur ces systmes son
insu, on lattire vers ces systmes pour quil y aille de lui-mme. Les paratonnerres3 sont placs proximit des systmes protger, sont rendus attractifs, et
sont quips pour la dtection dintrusion. Ils nont rien a voir avec les ressources
primaires quils protgent et donc on na pas se soucier de leurs performances
ou capacits pour les utilisateurs autoriss. Leur installation et leur maintenance
cotent cependant cher, et leur efficacit repose sur le secret de leur existence.
1.6
Contre-mesures
Les contre-mesures donnent au systme la capacit ragir aux tentatives dintrusions. Cette approche tente de remdier la limitation des mcanismes qui reposent
3 On
emploie galement le
http://project.honeynet.org/
terme
pot
15
de
miel
(honeypot).
Par
exemple
sur lattention continue de personnel humain. Il est en effet trs difficile davoir du personnel dvou 24h/24 la rponse aux intrusions. De plus il ne pourra pas grand chose
face des attaques automatises. Un systme ayant t quip pour le faire aura de
plus grande chances de stopper lintrusion. On court cependant le risque de mal ragir
un usage correct. On doit viter le cas o un usager fait quelquechose dinhabituel ou
de suspect pour des raisons lgitimes et se retrouve attaqu par un systme de contremesures. De plus, il devient ais pour un cyber-pirate de crer un dni de service pour
personne donne en usurpant son identit et en effectuant en son nom des oprations
qui dclencheraient les contre-mesures.
Analogie : Transporter une masse darme, fixer un pige souris au portefeuille et
apprendre le karat pour contre-attaquer On prend cependant le risque dtre poursuivi
en justice pour avoir cass le bras dune inconnue qui vous offre des fleurs. Avec un
portefeuille pig, un voleur sera contr sans dtection ni intervention de notre part.
Mais mme en tant quutilistateur autoris du portefeuille, on peut se faire pincer les
doigts si lon oublie le pige ou si lon manuvre mal.
Mise en uvre :
Les ICE (Intrusion Countermeasure Equipment) : les ICE [Gib84] permettent un
systme de rpondre en temps rel une tentative dintrusion, et ce de faon
autonome. Les ractions suivantes peuvent tre envisages, par ordre de svrit :
Alerter, accrotre laide au personnel
Signaler la dtection
Accrotre la collection daudits sur lutilisateur suspect, peut-tre jusquau
niveau des touches frappes
Alerter la personne charge de la scurit avec une alarme locale
Alerter la personne charge de la scurit mme si elle est absente (nuit,..)
Tenter de confirmer ou daccrotre les informations disponibles sur lutilisateur
R-authentifier lutilisateur ou le systme distant pour remdier aux attaques profitant dune session ouverte et oublie ou de paquets forgs utilisant une connexion authentifie
Alerter le personnel de scurit pour avoir une confirmation visuelle ou
vocale de lidentit et des intentions de la personne
Minimiser les dommages potentiels
Journaliser les vnements sur le systme pour pouvoir revenir un tat
considr comme sr
Ralentir le systme ou rajouter des obstacles
Faire semblant dexcuter les commandes (par exemple : mettre dans un
tampon plutt queffacer vraiment)
Bloquer laccs
Bloquer le compte local
Annuler les paquets concerns
Rechercher lidentit rseau et bloquer tous les comptes associs, faire le
mnage dans les systmes associs
Bloquer lhte totalement, le dconnecter du rseau
Dconnecter tout le systme du rseau
Fichiers ou comptes pigs : ce sont les ressources nommes de faon sduisante
16
17
Chapitre 2
2.1
Dtection de malveillances
La dtection de malveillances fonctionne essentiellement par la recherche dactivits abusives, par comparaison avec des descriptions abstraites de ce qui est considr
comme malveillant. Cette approche tente de mettre en forme des rgles qui dcrivent
les usages non dsirs, en sappuyant sur des intrusions passes ou des faiblesses thoriques connues. Les rgles peuvent tre faites pour reconnatre un seul vnement qui
est en lui-mme dangereux pour le systme ou une squence dvnements reprsentant un scnario dintrusion. Lefficacit de cette dtection repose sur laccuit et la
couverture de tous les abus possibles par les rgles.
Mise en uvre :
Systmes experts : ils peuvent tre utiliss pour coder les signatures de malveillance
avec des rgles dimplication si . . .alors. Les signatures dcrivent un aspect dune
attaque ou dune classe dattaque. Il est possible de rentrer de nouvelles rgles
pour dtecter de nouvelles attaques. Les rgles deviennent gnralement trs spcifiques au systme cible et donc sont peu portables.
Raisonnement sur des modles : on essaye de modliser les malveillances un niveau lev et intuitif dabstraction en termes de squences dvnements qui
18
dfinissent lintrusion. Cette technique peut tre utile pour lidentification dintrusions qui sont proches mais diffrentes. Elle permet aussi de cibler les donnes
surs lesquelles une analyse approfondie doit tre faite. Mais en tant quapproche
recherchant des signatures, elle ne peut que trouver des attaques dj connues.
Analyse des transitions dtats : on cre un modle tel que ltat initial le systme ne soit pas compromis. Lintrus accde au systme. Il excute une srie
dactions qui provoquent des transitions sur les tats du modle, qui peuvent tre
des tats ou lon considre le systme compromis. Cette approche de haut niveau
peut reconnatre des variations dattaques qui passeraient inaperues avec des approches de plus bas niveau. USTAT (voir section 4.5) est une implmentation de
cette technique.
Rseaux neuronaux : la flexibilit apporte par les rseaux neuronaux peut permettre danalyser des donnes mme si elles sont incompltes ou dformes. Ils
peuvent de plus permettre une analyse non-linaire de ces donnes. Leur rapidit permet lanalyse dimportants flux daudit en temps rel. On peut utiliser les
rseaux neuronaux pour filtrer et slectionner les informations suspectes pour
permettre une analyse dtaille par un systme expert. On peut aussi les utiliser directement pour la dtection de malveillances. Mais leur apprentissage est
extrmement dlicat, et il est difficile de savoir quand un rseau est prt pour
lutilisation. On peut galement lui reprocher son ct boite noire (on ne peut
pas interprter les coefficients).
Algorithmes gntiques : on dfinit chaque scnario dattaque comme un ensemble
pas forcment ordonn dvnements. Lorsquon veut tenir compte de tous les
entremlements possibles entre ces ensembles, lexplosion combinatoire qui en
rsulte interdit lusage dalgorithmes de recherche traditionnels, et les algorithmes
gntiques sont dun grand secours.
La dtection dintrusion par recherche de scenarii repose sur une base de signatures
dintrusions et recherche ces signatures dans le journal daudits.
On peut rapprocher les mthodes utilises celles que lon peut rencontrer dans
le domaine des antivirus, o on recherche la signature de certains programmes dans
les fichiers du systme informatique, ou encore dans le domaine de la gnomique o
lon recherche une squence dADN dans un brin, ou, plus gnralement, tout ce qui
sapparente lappariement de squences.
Inconvnients :
Base de signatures difficile construire.
Pas de dtection dattaques non connues.
2.2
Dtection danomalies
Cette approche se base sur lhypothse que lexploitation dune faille du systme
ncessite une utilisation anormale de ce systme, et donc un comportement inhabituel
de lutilisateur. Elle cherche donc rpondre la question le comportement actuel de
lutilisateur ou du systme est-il cohrent avec son comportement pass ? .
Mise en uvre :
19
Observation de seuils : on fixe le comportement normal dun utilisateur par la donne de seuils certaines mesures (par exemple, le nombre maximum de mots de
passe errons). On a ainsi une dfinition claire et simple des comportements non
accepts. Il est cependant difficile de caractriser un comportement intrusif en
termes de seuils, et on risque beaucoup de fausses alarmes ou beaucoup dintrusions non dtectes sur une population dusagers non uniforme.
Profilage dutilisateurs : on cre et on maintiens des profils individuels du travail
des usagers, auxquels ils sont censs adhrer ensuite. Au fur et mesure que lutilisateur change ses activits, son profil de travail attendu se met a jour. Certains
systmes tentent de concilier lutilisation de profils court terme et de profils
long terme. Il reste cependant difficile de profiler un utilisateur irrgulier ou trs
dynamique. De plus, un utilisateur peut arriver habituer lentement le systme
un comportement intrusif.
Profilage de groupes : on place chaque utilisateur dans un groupe de travail qui
montre une faon de travailler commune. Un profil de groupe est calcul en fonction de lhistorique des activits du groupe entier. On vrifie que les individus du
groupe travaillent de la manire que le groupe entier a dfini par son profil. Cette
mthode rduit drastiquement le nombre de profils maintenir. De plus, un utilisateur peut beaucoup plus difficilement largir le comportement accept comme
dans un profil individuel. Mais il est parfois dur de trouver le groupe le plus appropri une personne : deux individus ayant le mme poste peuvent avoir des
habitudes de travail trs diffrentes. Il est de plus parfois ncessaire de crer un
groupe pour un seul individu.
Profilage dutilisation de ressources : on observe lutilisation de certains ressources
comme les comptes, les applications, les mmoires de masse, la mmoire vive,
les processeurs, les ports de communication sur de longues priodes, et on sattend ce quune utilisation normale ninduise pas de changement sur cette utilisation par rapport ce qui a t observ par le pass. On peut aussi observer
les changements dans lutilisation des protocoles rseau, rechercher les ports qui
voient leur trafic augmenter anormalement. Ces profils ne dpendant pas des utilisateurs et peuvent permettre la dtection de plusieurs intrus qui collaboreraient.
Les carts par rapport au profil sont cependant trs durs interprter.
Profilage de programmes excutables : on observe lutilisation des ressources du
systme par les programmes excutables. Les virus, chevaux de Troie, vers,
bombes logiques et autres programmes du mme got se voient dmasqus en
profilant la faon dont les objets du systme comme les fichiers ou les imprimantes sont utiliss. Le profilage peut se faire par type dexcutable. On peut
par exemple dtecter le fait quun daemon dimpression se mette attendre des
connexions sur des ports autres que celui quil utilise dhabitude.
Profilage statique cest un profilage o la mise jour du profil ne se fait pas en
permanence mais seulement de temps en temps, et avec la bndiction de la
personne charge de la scurit. Dans le cas de profils utilisateurs, cela empche
lusager dlargir petit petit son champ daction. Cependant, les mises jour
peuvent tre souvent ncessaires, et les fausses alarme peuvent rappeler lhistoire
de Pierre et le Loup .
Profilage adaptatif : Le profil est mis jour en permanence pour reflter les changements de comportement de lutilisateur, du groupe ou du systme. La personne
en charge de la scurit prcise si la nouvelle activit est
intrusive et des mesures doivent tre prises,
non intrusive, et peut tre ajoute au profil
20
non intrusive, mais est une aberration dont la prochaine occurrence sera intressante connatre.
Profilage adaptatif base de rgles : cette technique diffre des autres profilages
en ce que lhistorique de lutilisation est connu sous formes de rgles. Contrairement la dtection de malveillances base de rgles, on na pas besoin des
connaissances dun expert. Les rgles dutilisation normale son gnres automatiquement pendant la priode dapprentissage. Pour tre efficace, beaucoup
de rgles sont ncessaires, et saccompagnent dautant de problmes de performance.
Rseaux neuronaux : les rseaux neuronaux offrent une alternative la maintenance dun modle de comportement normal dun utilisateur. Ils peuvent offrir
un modle plus efficace et moins complexe que les moyennes et les dviations
standard. Lutilisation de rseaux neuronaux doit encore faire ses preuves, et
mme sils peuvent savrer moins gourmands en ressources, une longue et minutieuse phase dapprentissage est requise.
Approche immunologique : Lapproche immunologique tente de calquer le comportement du systme immunologique pour faire la diffrence entre ce qui est
normal (le soi) et ce qui ne lest pas (le non-soi). Le systme immunologique
montre en effet beaucoup daspects intressants comme son mode dopration
distribu (il ny a pas de systme de contrle central) qui lui permet de continuer
fonctionner mme aprs des pertes, sa capacit apprendre automatiquement
de nouvelles attaques pour mieux ragir les prochaines fois quelles se prsente,
sa capacit dtecter des attaques inconnues, etc. On peut voir lapproche immunologique de la dtection danomalies comme une mthode de dtection danomalie o lon utilise les techniques de dtection des malveillance. En effet, les
techniques de dtection danomalie connaissent ce qui est bien et vrifient en
permanence que lactivit du systme est normale, alors que les techniques de
dtection de malveillance connaissent ce qui est mal et sont sa recherche. Lapproche immunologique propose de rechercher ce qui est mal en connaissant ce
qui est bien. On devrais mme dire que lapproche propose de rechercher ce qui
nest pas bien, et lon peut se permettre la comparaison avec la notion de tiersexclus en logique : on nobtient pas ce qui est mal en prenant la ngation de ce
qui est bien. Cependant, les rsultats obtenus sont satisfaisants.
Inconvnients :
Choix dlicat des diffrents paramtres du modle statistique.
Hypothse dune distribution normale des diffrentes mesures non prouve.
Choix des mesures retenir pour un systme cible donn dlicat.
Difficult dire si les observations faites pour un utilisateur particulier correspondent des activits que lon voudrait prohiber.
Pour un utilisateur au comportement erratique, toute activit est normale.
Pas de prise en compte des tentatives de collusion entre utilisateurs.
En cas de profonde modification de lenvironnement du systme cible, dclenchement dun flot ininterrompu dalarmes (ex : guerre du Golfe).
Utilisateur pouvant changer lentement de comportement dans le but dhabituer
le systme un comportement intrusif.
21
2.3
Systmes hybrides
Pour tenter de compenser quelques inconvnients de chacune des techniques, certains systmes utilisent une combinaison de la dtection danomalies et de la dtection
de malveillances. Par exemple, un compte dadministrateur aura un profil qui lui permet daccder certains fichiers sensibles, mais il peut tre utile de vrifier que des
attaques connues ne sont pas utilises contre ces fichiers. linverse, utiliser des fichiers comportant le mot nuclaire ne caractrise aucune signature dattaque, mais il
peut tre intressant de savoir que cela est arriv si ce ntait pas dans les habitudes de
lutilisateur.
22
Chapitre 3
Data mining
Le but est ici dextraire des modles descriptifs des normes volumes de donnes
daudit. Plusieurs algorithmes du domaine du data mining peuvent tre utiles.
Parmi
ceux quon peut trouver dans [LSM] et utiliss par [LS98], [LSM99] ou [LNY 00], ou
peut noter :
Classification : la classification associe chaque lment de donne une plusieurs catgories prdfinies. Ces algorithmes de classification gnrent des classifieurs,
sous forme darbres de dcision ou de rgles. Une application dans la dtection
dintrusion serait dappliquer ces algorithmes une quantit suffisante de donnes daudit normales ou anormales pour gnrer un classifieur capable dtiqueter comme appartenant la catgorie normale ou anormale de nouvelles donnes
daudit.
Analyse de relations : on tablit des relations entre diffrents champs dlments daudit, comme par exemple la corrlation entre la commande et largument dans
lhistorique des commandes de linterprteur de commandes, pour construire des
profils dusage normal. Un programmeur, par exemple pourrait avoir une forte
relation entre emacs et des fichier C. On dfinit ainsi des rgles dassociation.
Analyse de squences : Ces algorithmes tentent de dcouvrir quelles squences temporelles dvnements se produisent souvent en mme temps.
On peut noter que [LNY 00] utilise le Common Intrusion Detection Framework (CIDF).
Le CIDF est un effort pour dvelopper des protocoles et des APIs pour permettre aux
projets de recherche sur la dtection dintrusion de partager les informations et les ressources, et pour que les composants de dtection dintrusion puissent tre rutiliss.
Un Internet Engineering Task Force (IETF) working group a t cr et nomm
Intrusion Detection Working Group (IDWG).
23
Le CIDF est pour linstant ltat dInternet Drafts qui sont en passe de devenir
des RFC1
3.2
Agents
Plusieurs domaines de recherche dans les Mobile Agents Intrusions Detection System (MAIDS) sont ouverts par [JMKM99]. Certains sont mis en uvre dans [BFFI 98],
[HWHM98], [HWHM00] ou [JMKM00].
Dtection multi-point La dtection multi-point est faite en analysant les flux daudit
de plusieurs htes pour dtecter des attaques distribues ou autres stratgies dattaques
dun rseau dans sa globalit. Il est rarement possible de transporter tous les flux daudit
un IDS central, et mme dans ce cas, la dtection est difficile.
Les agents mobiles peuvent apporter le calcul distribu, le fait quon transporte
lanalyseur au flux daudit et non le flux daudit lanalyseur. Les agents pourraient
dtecter ces attaques, les corrler, et dcouvrir les stratgies dattaques distribues.
Architecture rsistante aux attaques Une architecture hirarchique est souvent utilise pour des raisons de performances et de centralisation du contrle. Cette conception a souvent plusieurs lignes de communication non-redondantes. Un intrus peut couper une branche de lIDS, voire le dsactiver totalement en le dcapitant.
Les agents mobiles peuvent apporter quelques solutions ce problme :
une architecture compltement distribue
une architecture hirarchique standard on un agent peut remplacer chaque nud
et ramener une fonctionnalit perdue
des agents mobiles qui se dplacent quand une activit suspecte est dtecte.
Partage de connaissances Souvent, plusieurs systmes de dtection dintrusion diffrents fonctionnent sur un site. Idalement, ils partageraient les informations sur les
attaques rcentes pour amliorer la dtection dattaques futures.
Mme si ce nest pas un domaine de recherche rserv aux MAIDS, ceux-ci permettent une approche plus naturelle de ce genre de choses.
Agents errants Lchantillonage alatoire est utilis avec succs depuis de longues
annes dans le domaine du contrle de qualit, et les mathmatiques sous-jacente sont
bien comprises et les paramtres peuvent tre calculs.
Chaque agent effectue un test spcifique et peut errer alatoirement dhte en hte.
Quand des tests indiquent la possibilit dune intrusion, des tests plus pousss peuvent
tre effectus sur lhte suspect.
1
24
3.3
Rseaux de neurones
Les rseaux neuronaux sont utiliss pour leur rapidit de traitement et leur relative
rsistance aux informations incompltes ou dformes. [Can98] les utilise de deux manires diffrentes. Ils sont dabord utiliss comme filtres pour filtrer et slectionner les
parties suspectes dans les donnes daudit. Celles-ci sont ensuite analyses par un systme expert. On peut ainsi rduire les fausses alarmes, et on peut mme augmenter la
sensibilit du systme expert car il ne travaille que sur des donnes suspectes. Puis ils
sont utiliss de faon prendre seuls la dcision de classer une squence dvnements
comme malveillante.
3.4
Immunologie
25
Ensuite, le systme immunitaire est adaptatif, cest--dire quil est capable dapprendre et de reconnatre de nouvelles infections.
Enfin, il est autonome. Il ne ncessite pas de contrle extrieur. De plus, comme il
fait partie du corps, il se protge lui-mme.
Lalgorithme utilis par le systme immunitaire pour dtecter les intrusions est appel algorithme de slection ngative. Les lymphocytes sont appels dtecteurs ngatifs
parce quils sont conus pour se lier au non-soi, cest--dire que lorsquun lymphocyte
est activ, le systme immunitaire rpond une intrusion.
Les lymphocytes sont crs avec des rcepteurs gnrs alatoirement. Le rcepteur dcide quoi saccrochera le lymphocyte. Comme ils sont gnrs alatoirement,
ils peuvent dtecter aussi bien le soi que le non-soi. Aussi y a-t-il une priode pendant laquelle le lymphocyte nest pas mature et meurt sil saccroche quelque chose.
Les lymphocytes qui arrivent maturit sont donc senss dtecter le non-soi. Lorsque
le systme immunitaire rencontre pour la premire fois un certain type dagents pathognes, il produit une rponse primaire, qui peut prendre plusieurs semaines pour
liminer linfection. Pendant cette rponse, il apprend reconnatre ces agents et si
une deuxime infection de ce type se dclare, il dclenchera une rponse secondaire
en gnral assez efficace pour que linfection passe inaperue. La rponse primaire est
lente parce quil peut ny avoir quun petit nombre de lymphocytes qui sattachent
eux. Pour accrotre leur efficacit, chaque lymphocyte activ se clone, et on a ainsi une
croissance exponentielle de la population qui peut dtecter ces agents. Une fois linfection limine, le systme immunitaire garde cette population de lymphocytes qui
avait une grande affinit avec ces agents pathognes, alors que les autres lymphocytes
ont une dure de vie de quelques jours. Les lymphocytes T sont crs et maturent uniquement dans le thymus. Bien que lon rencontre en ce lieu la grande majorit des
protines du corps, il se peut que certains lymphocytes arrivent maturit avec un
dtecteur qui sattache des cellules saines. Pour viter cela, pour devenir actif, un
lymphocyte ncessite une costimulation, cest--dire que sil sattache sur une cellule,
il lui faut aussi tre stimul par un second signal, qui est gnralement un signal chimique gnr quand le corps est agress. Ce signal provient du systme immunitaire
lui-mme ou dautres cellules.
[FH] ou [FHS97] tentent dappliquer vaguement quelques un de ces principes. Par
contre, ARTIS (ARTificial Immune System) [HF00] calque parfaitement tous ces comportements, plus finement dtaills dans [Clo] ou [HF00], pour arriver un rsultat trs
encourageant.
3.5
Algorithmes gntiques
Comme expliqu dans [MA96], les algorithmes gntiques ont t proposs par
John Holland dans les annes 70 [Hol75]. Ils sinspirent de lvolution gntique des
espces, et plus prcisment du principe de slection naturelle. Il sagit dalgorithmes
de recherche doptimums. On ne fait aucune hypothse sur la fonction dont dont on
recherche loptimum. En particulier, elle na pas tre drivable, ce qui est un avantage considrable sur toutes les mthodes classiques de recherche doptimum. Un algorithme gntique manipule une population de taille constante dindividus reprsents
par une chane de caractres dun alphabet. Chaque individu code chacun une solu-
26
tion potentielle au problme. La population est cre alatoirement, puis elle volue,
gnration par gnration. chaque gnration, de nouvelles cratures sont cres en
utilisant les plus fortes, tandis que les plus faibles sont limines, les adjectifs faible
et fort tant bien sur dtermins par une fonction slective, dpendant fortement de la
fonction dont on cherche loptimum. Des mutations peuvent aussi se produire, pour
viter une population de perdre irrmdiablement une information sur la solution. On
a donc trois transformations de la population : slection, recombinaison et mutation.
Cela a inspir [M96], article nest pas rest sans suite puisque le logiciel GASSATA [M98] a ensuite t cr. (voir section 4.8).
27
Chapitre 4
Quelques programmes de
dtection dintrusion existants
Pour une taxonomie assez complte et dtaille, on se rfrera [Axe98], duquel
son tires quelques-unes des descriptions suivantes.
4.1
Haystack
28
4.2
MIDAS
MIDAS (Multics Intrusion Detection and Alerting System) [SSHW88] est construit
autour du concept de dtection dintrusion heuristique. Les auteurs prennent exemple
sur un administrateur humain en analysant comment il mnerais une analyse sur des
journaux daudit pour trouver des preuves dintrusion. Il pourrait par exemple se dire
que les intrusions se droulent sans doute plus souvent tard dans la nuit quand le systme est sans surveillance. Il pourrait faire lhypothse quun intrus, pour couvrir ses
traces, utiliser plusieurs endroits do mener ses attaques. En combinant ces deux critres, on rduit fortement les vnements analyser.
MIDAS est un systme expert base de rgles qui applique ce genre de raisonnements. Il utilise le Production Based Expert System Toolset (P-BEST1 ) et le peuple de
trois catgories de rgles :
Attaque immdiate : Les heuristiques dattaque immdiate oprent sans aucune connaissance de lhistorique du systme, sur une trs petite fentre dvnements, typiquement un. Ces heuristiques sont statiques, elles ne changent quavec lintervention de la personne charge de la scurit.
Anomalie dun utilisateur : Les classes de rgles pour les anomalies dutilisateurs
utilisent les profils statistiques des comportements passs des utilisateurs. Deux
profils sont maintenus : le profil de session qui nest valable que pendant la session courante et le profil utilisateur qui dure sur une longue priode de temps.
Le profil de session est mis jour au login de lutilisateur partir de son profil
utilisateur, qui lui est mis jour son tour partir du profil de session au logout.
tat du systme Les heuristiques de ltat du systme maintiennent des informations
sur les statistiques du systme en gnral, sans intrt particulier pour les utilisateurs individuels, comme apr exemple le nombre total de login rats par opposition au nombre de logins rats dun utilisateur particulier.
Les tests des auteurs ont montr que MIDAS tait assez rapide pour lanalyse en
temps rel, mais gnrais trop de fausses alarmes.
4.3
IDES
IDES (Intrusion Detection Expert System) [FJL 98, Lun90, LTG 92] repose sur
lhypothse que le comportement dun utilisateur reste peu prs le mme au cours du
temps, et que la manire dont il se comporte peut tre rsume en calculant diverses
statistiques sur son comportement.
IDES construit ses profils par groupes dutilisateurs censs avoir un comportement
proche et tente de corrler le comportement actuel dun utilisateur avec son comportement pass et le comportement pass du groupe. Il observe trois types de sujets : les
utilisateurs, les htes distants et les systmes cible. AU total, 36 paramtres sont mesurs, 25 pour les utilisateurs, 6 pour les htes et 5 pour les systmes cible. Toutes ses
mesures font partie de ces deux catgories :
1 P-BEST est un moteur de systmes experts chanage avant. Lintroduction de nouveaux faits dans sa
base de faits dclenche la rvaluation de la base de rgles, qui son tour introduit de nouveaux faits. Le
processus sarrte lorsquaucune nouvelle rgle nest gnre
29
Mesure catgorique : Cest une mesure de nature discrte et dont les valeurs appartiennent un ensemble fini. On trouve par exemple les commandes invoques
par un utilisateur.
Mesure continue : Cest une fonction relle. On a par exemple le nombre de lignes
imprimes pendant la session ou la dure de la session.
IDES traite chaque enregistrement daudit quand il arrive sur le systme. Pour dtecter des comportements anormaux pendant une session, alors que tous les paramtres
de la session ne sont pas encore disponibles, IDES extrapole les valeurs et les compare
au profil de lutilisateur.
4.4
NIDES
NIDES (Next-generation Intrusion Detection Expert System) [AFV95] la continuation directe du projet IDES (voir section 4.3).
Plusieurs implmentations de NIDES existent. La version finale est hautement modulaire, avec des interfaces bien dfinies entre les composants. Il est centralis dans le
sens o lanalyseur tourne sur un hte spcifique, et il collecte des donnes venant de
divers htes travers le rseau. La collecte daudit se fait sur ces derniers en utilisant
des sources daudit varies.
Les composants clefs de NIDES sont :
Stockage persistant : ce composant propose les fonctions de gestion de larchivage
aux autres composants de NIDS.
Le composant agend : Il tourne sur tous les htes surveills et se charge de lancer le
convertisseur de donnes daudit agen lorsque linterface utilisateur de NIDS le
lui demande. Il utilise le protocole RPC.
Le composant agen : il convertit les donnes daudit au format canonique de NIDES.
Les donnes converties sont ensuite donnes au systme arpool.
Le composant arpool : ce composant collecte les donnes daudit du composant agen
et les transmet au composants danalyse base de rgles ou danalyse statistique
lorsquils le lui demandes. arpool tourne sur les htes surveills.
Analyse statistique : ce composant calcule les donnes statistiques pour la dtection
dintrusions. Il peut le faire en temps rel. Il transmet ses rsultats au solveur.
Analyse base de rgles : ce composant recherche les signatures, en temps rel sil
le faut. Il transmet ses rsultats au solveur.
Le solveur : il value et agit sur les donnes reues des modules danalyse statistique
et base de rgles. Une seule action dun utilisateur peut gnrer des dizaines
dalertes dans les composants infrieurs. Ce composant utilise toutes ces donnes
pour prendre une dcision. La personne en charge de la scurit peut galement
lui demander dignorer les alertes relatives certains objets.
Larchiveur : il a pour tche darchiver les donnes daudit, les rsultats danalyses et
les alertes.
Lanalyseur hors-ligne : il permet de tester de nouvelles configurations sur de vielles
donnes daudit connues, en parallle avec le systme de dtection dintrusion
en production.
30
4.5
USTAT
USTAT [Ilg91, Ilg93, IKP95] est une implmentation mature de lanalyse de transitions dtats pour la dtection dintrusions. Le systme est initialement dans un tat
sr et, travers un certain nombre dactions modlises par des transitions dtats, peut
se retrouver dans un tat compromis.
Un exemple de scnario de pntration prsent dans les Unix BSD version 4.2 est :
cp /bin/sh /usr/spool/mail/root
chmod 4755 /usr/spool/mail/root
echo | mail root
/usr/spool/mail/root
la faille tant que mail ne change pas le bit setuid lorsquil change le propritaire
du fichier.
Ce scnario suppose certaines choses qui peuvent tre vues comme un tat de dpart. Il nest par exemple pas valide si root a du mail dans ltat courant du systme.
Chaque tape fait changer le systme dtat, vers un tat plus proche dun tat compromis. La premire transition sera la cration dun fichier dans le rpertoire de mail. La
faon de le crer na pas dimportance, etc.
Le prototype est divis en quatre modules :
Collecte des audits et pr-traitement : il collecte les donnes daudit, les stocke pour
tudes futures. Il les transforme galement sous la forme canonique de USTAT :
un triplet {sujet, action, objet}.
Base de connaissance : La base de connaissances contient la base de rgles et la base
de faits. La base de faits contient des informations sur les objets du systme,
par exemple les groupes de fichiers ou de rpertoires qui partagent certaines caractristiques qui les rendent vulnrables certaines attaques. La base de rgles
contient les diagrammes de transition dtat qui dcrivent un scnario particulier.
Cela se compose dune table de dscription des tats, qui stocke les assertions
sur chaque tat, et la table de signatures dactions.
Le moteur dinfrence : il value les nouveaux enregistrements daudit, en utilisant
les informations de la base de rgle et de la base de faits, et mets a jour la base
de faits avec des informations sir letat en cours. Lvaluation est semblable
un raisonnement par chanage avant : les nouveaux faits, qui sont en fait les enregistrements daudit, amnent lvaluation de toutes les rgles qui pourraient
dpendre sur les faits nouvellement arrivs, la base de faits est mise jour pour
en tenir compte, et une alerte est ventuellement dclenche.
31
4.6
IDIOT
IDIOT (Intrusion Detection In Our Time) [CDE 96] est un systme de dtection
dintrusions utilisant des rseaux de Ptri colors pour la recherche de signatures. Par
exemple lattaque suivante (dj cite dans la section 4.5) :
on suppose que root na pas de mail
on rend le fichier setuid
on cre un fichier vide
on envoie un mail root
on excute le shell setuid root
cp /bin/sh /usr/spool/mail/root
chmod 4755 /usr/spool/mail/root
touch x
mail root < x
/usr/spool/mail/root
s1
write() t1
s2
chmod() t2
t4 stat()
s5
t5 uname()
s3
s6
t7 exec()
s7
Les diffrentes transitions sont conditionnes par les expressions boollennes suivantes :
t1 : this.objet=/usr/spool/mail/root et FILE this.object.
t2 : this.objet=FILE
t4 : FILE2 this.object
t5 : FILE2=this.object
t7 : this.prog=/usr/ucb/mail et this.args=root
Une approche multi-couche est suggre :
La couche informative : pour se dbarasser des problmes de compatibilit entre les
donnes daudit de diffrentes machines ou plateformes, cette couche permet aux
couches suprieurs une interface commune avec les donnes.
La couche de signatures : elle dcrit les signatures de comportements intrusifs, de
faon indpendante de toute plateforme, en utilisant un modle de machine virtuelle.
32
Le moteur dappariements : il apparie les signatures du niveau prcdent. Cela permet lutilisation de nimporte quelle technologie dappariement.
4.7
GrIDS
GrIDS [SCCC 96, CCD 99, SCCC 99] est un systme de dtection dintrusions
pour les gros rseaux utilisant des graphes. Lauteur propose une mthode pour construire
des graphes de lactivit rseau. Les htes du rseau sont les nuds du graphe et les
connexions entre les htes sont les artes. La personne charge de la scurit donne
un ensemble de rgles qui permet de dcider quel trafic entre les htes va reprsenter
lactivit entre ces htes. Le graphe et les artes ont des attributs tels que les heures de
connexion, etc., qui sont calcules par les rgles donnes prcdement.
La construction de lactivit du rseau repose sur le paradigme organisationnel
dune hierarchie de dpartements. Un dpartement est form de plusieurs htes, et il
centralise les donnes daudit et les combine pour gnrer le graphe du dpartement,
en se rferrant lensemble de rgles spcifi. Si des vnements rseau dun hte du
dpartement impliquent un hte hors du dpartement, alors les graphes des deux dpartements peuvent tre combins, selon des rgles spcifies. Le nouveau graphe se
compose donc de deux sommets, qui sont les dpartements et dune arte qui spcifie le trafic entre ces deux dpartements. Ce processus est rpt, et une hierarchie de
dpartements est forme.
Les rgles servent plusieur choses. Elles permenttent de dcider de combiner
deux graphes en un graphe de niveau suprieur et comment le faire, comment calculer
les attributs des graphes, les actions prendre quand deux graphes sont combins.
Comme les rgles peuvent tre trs compliques, GrIDS utilise un langage qui permet
de spcifier les politiques de comportement du rseau acceptables et inacceptables.
4.8
GASSATA
GASSATA [M98] (Genetic Algorithm for Simplified Security Audit Trail Analysis) est un outil de dtection de malveillances. Il ne tient pas compte de la chronologie
des vnements pour pouvoir fonctionner dans un environnement distribu htrogne
o la construction dun temps commun est impossible. Lalgorithme est pesimiste dans
le sens ou il tente dexpliquer les donnes daudit par un ou plusieurs scenarii dattaque.
Mais cest un problme de difficult NP. Une mthode heuristique est donc utilise : ce
sont les algorithmes gntiques.
Soit Ne le nombre de types dvnements
Soit Na le nombre dattaques potentielles connues
Soit AE une matrice Ne Na qui donne pour chaque attaque les vnements
quelle gnre. AEi j 0 est le nombre dvnements de type i gnrs par lattaque j.
Soite R un vecteur de dimension Ne ou Ri 0 est le poids associ lattaque i,
poids proportionnel au risque inhrent du scnario dattaque i.
Soit O un vecteur de dimension Ne ou Oi est le nombre dvnements de type i
dans le morceau daudit analys. O est le vecteur daudit observ.
33
4.9
Hyperview
seraient des sries temporelles et que lutilisateur gnrerait une srie ordonne dvnements choisis parmi un ensemble fini.
Les recherches se sont portes au dbut sur un rseau de neuronne prennant sur ses
N entres une fentre temporelle de taille N sur la srie dvnements daudit. Cependant, certains problmes rsultent de cette approche : N est statique. Si sa valeur devait
changer, il faudrait rentrainer compltement le rseau. Si N netait pas correctement
choisi, les performances du systme serait beaucoup rduites. Pendand les priodes ou
les vnements sont quasi-stationnaires, une grande valeur de N est prfrable, alors
que pendant les phases de transition, une petite valeur serait plus adapte.
Les auteurs conclurent alors que les corrlations entre les motifs dentre ne seraient pas pris en compte car ces types de rseaux napprendraient reconnatre que
des motifs fixes dans lentre et rien de plus. Ils choisirent alors dutiliser des rseaux
rcurrents, (des rseaux avec une architecture de Gent [GS92]) cest--dire quune partie de la sortie tait connecte lentre. Cela cre une mmoire interne au rseau. Les
vnements sont entrs un par un dans le rseau, qui dispose maintenant dune mmoire court terme : les valeurs dactivation des neurones grace la boucle de la sortie
vers lentre, et dune mmoire long terme : les coefficients des neurones du rseau.
Le rseau de neurone a autant de sorties que le nombre dlments diffrents dvnements dans les donnes daudit. Aprs entrainement, le rseau doit tre en mesure de
prdire le prochain vnement. Si le niveau dune des sorties est trs suprieur tous
les autres, le rseau prdit un certain vnement avec confiance. Si tous les niveaux de
sortie sont faibles et dans les mmes valeurs, cela signifie soit que la srie na jamais
t rencontre, soit quil y a trop de possibilits. Si plusieurs sorties se dtachent
niveau gal, chaque candidat est probable.
Le rseau de neurones a t connect deux systmes experts. Le premier supervisait lentrainement du rseau, lempchant par exemple dapprendre des comportements anormaux. Le deuxime recherchais des signatures dintrusion connues dans les
donnes daudit. Le rseau de neurones peut tre vu comme un filtre pour le systme
expert. Les deux systmes experts mettent ensuite leurs rsultats en commun pour dcider ensuite de dclencher ou non une alarme.
Les rsultats furent prometteurs.
35
Deuxime partie
EIDF
36
Chapitre 5
Larchitecture EIDF
Les techniques de dtection dintrusions sont multiples et il reste difficile de sen
faire un ide prcise tant quon ne les a pas manipules.
Chaque outil utilise son propre moteur et ses propres sources daudit. Il est difficile
de comparer plusieurs modles sur le mme terrain, ou mme de comparer plusieurs
terrains sous le mme modle.
Il pourrait tre intressant de disposer de plusieurs modles interchangeables et de
pouvoir choisir sa source dinformation indpendemment du modle choisi.
5.1
5.1.1
Architecture
Aperu
Dans cet esprit, on voit donc deux objets bien spars : la source daudit et lanalyseur. La source daudit auscultera la ou les parties du systme produisant les donnes
daudit quelle dsire. Ces donnes peuvent tre de premire ou seconde main. Elles
seront converties en une suite dobjets dun certain type, reprsentant une suite dvnements. La source daudit mettra disposition ces objets la demande, un analyseur
qui les acceptera un par un. Cette architecture on ne peut plus simple permet, au prix
de quelques restrictions, de mettre en relation nimporte quelle source daudit avec
nimporte quel analyseur. Cependant, pour faire fonctionner tout cela, ces deux objets
doivent tre supports par une charpente, un programme qui se chargera de construire
ces objets et de les mettre en relation.
On peut voir un schma de cette architecture sur la figure 5.1.
5.1.2
37
source
daudit
analyseur
flux daudit
charpente
5.1.3
Les analyseurs
5.1.4
La charpente
38
daudit. On peut voir cela dans lalgorithme simplifi 5.1. Enfin, cest elle qui traitera
les paramtres et configurera lanalyseur et la source en fonction.
5.2
5.2.1
Multiplexage
Motivations
Nous avons vu que les analyseurs essayent souvent de se faire une ide du comportement du systme partir de lenchanement de plusieurs vnements. Cela ncessite
une source qui observe la mme chose tout le temps. Un analyseur ne pourra pas se
faire une ide de la dynamique de la partie du systme quil tudie si on lui prsente
quelques images dun plan sur le chien, puis quelques autres dun plan sur la maison. Il nest pas capable dinterprter les vnements, et encore moins de dtecter les
changements de plans. Par contre la source le peut.
De mme quil ny a pas beaucoup de films en un seul plan, beaucoup de sources
sont un enchevtrement de diffrentes lignes daction. Par exemple, chaque connexion
rseau est analysable, mais il faut les sparer et les analyser chacune sparment des
autres. Observer les appels systmes effectus par un seul processus est intressant mais
limit : il est plus intressant dtre capable dobserver plusieurs voire tous les processus. Mais on doit analyser chaque flux dappels systmes sparment, alors quils sont
multiplexs temporellement.
5.2.2
Mise en uvre
Larchitecture vue prcdemment semble peu adapte supporter un flux multiplex. Pourtant, il suffit en fait dun super-analyseur qui dmultiplexe le flux en flux
39
5.2.3
Le Super-analyseur
40
Par contre, toutes les instances danalyseurs dune mme classe de flux partagent la
mme base de connaissance. Pour cela, une instance de lanalyseur, que lon appellera
instance reine, est spcialement cre. Son rle est uniquement de contenir la base de
connaissances, cette dernire ne pouvant exister hors de lobjet qui la cre.
Pour chaque nouveau type de flux rencontr, deux cas se prsentent. Si lon est
en mode vrification, lvnement est considr comme anormal ou est ignor selon
la configuration du super-analyseur. Dans le cas o lon est en mode apprentissage, un
nouvel analyseur est instanci. Linstance cre est associe ce type de flux, et devient
une instance reine.
Pour chaque nouveau flux lmentaire, on instanciera un analyseur dont on fera
pointer la base de connaissance sur la base de connaissance de linstance reine associe
au type du flux lmentaire.
La base de connaissances du super-analyseur est donc en fait lensemble des instances reines, contenant chacune leur propre base de connaissances, ainsi que le dictionnaire les reliant avec chaque type de flux que le super-analyseur connat.
On peut voir sur la figure 5.2 la faon dont le super-analyseur traite le flux multiplex. Le flux est dabord dmultiplex selon son identificateur de flux, puis pass
en entre pour apprentissage ou vrification une instance danalyseur a. Pour chaque
type de flux lmentaire dj rencontr, il existe une instance reine A de lanalyseur,
dont le rle est uniquement de crer et de garder une base de connaissance k utilise
par toutes les instances danalyseurs traitant les flux de ce type. Lensemble de ces instances reines ainsi que la faon de les associer un type de flux constitue la base de
connaissances K du super-analyseur.
Source multiplexe
init
Superanalyseur
K
a
httpd
httpd
multiplexage
httpd
sendmail
sendmail
bash
dmultiplexage
a
a
a
k
A
xterm
bash
xterm
bash
bash
Faiblesses : Ce modle ne permet pas de faire passer des informations telles que la fin
dun flux lmentaire, comme la mort dun processus trac, ou la fin dune connexion
TCP. Les consquences directes sont que la mmoire occupe par une instance danalyseur nest jamais libre et que certains identificateurs comme le PID dun processus
ou le quadruplet (IP1, port1, IP2, port2) peuvent tre rutiliss.
Le deuxime problme nen est pas vraiment un si la source daudit respecte les
spcifications prcdemment nonces, cest--dire si chaque identificateur de flux est
41
5.3
Toute limplmentation a t faite en Python2, un langage de trs haut niveau, interprt, et orient objet. La programmation oriente objet permet darriver au niveau
de modularit souhait.
5.3.1
Charpente
http://www.python.org
42
5.3.2
Sources daudit
Chaque source daudit est implmente sous forme dun objet. Toutes les sources
daudit ont une interface identique, elles hritent dune classe mre. On peut ainsi remplir le critre dinterchangeabilit.
Les diffrentes mthodes de cet objet sont, en plus de son constructeur :
Ouverture du flux : open()
Fermeture du flux : close()
Obtention dun vnement : getevent()
De plus chaque classe doit avoir deux attributs. Lattribut name est le nom de la
source et permet de faire rfrence cette source en tant que paramtre dans la ligne de
commande de la charpente. Lattribut parameters permet la charpente, lorsquelle
annonce la disponibilit dune source daudit, de prciser les paramtres que cette dernire peut accepter. Certains paramtres peuvent tre obligatoires.
On peut voir la classe mre dans le listing 5.1. Elle se contente de renvoyer comme
vnement chaque ligne lue sur lentre standard.
Listing 5.1 Classe mre des sources daudit
class A udi t _s ourc e :
name="Template"
parameters= ""
def _ _ i n i t _ _ ( s e l f , o p t i o n s = [ ] ) :
i f options :
s e l f . pars e_opt i on s ( o p t i o n s )
def pars e_opt i ons ( s e l f , o p t i o n s ) :
pass
43
def open ( s e l f ) :
pass
def get ev ent ( s e l f ) :
r etu r n sys . s t d i n . r e a d l i n e ( )
def c l os e ( s e l f ) :
pass
La mthode getevent() peut renvoyer nimporte quel type dobjet, puisque les
analyseurs ne font aucune supposition a priori sur le type dvnements quils reoivent. Cependant, dans le cas dune source multiplexe, cette mthode doit renvoyer
une liste compose dun identificateur de flux, dun identificateur de type de flux et de
lvnement. Chacun de ces trois objets peut tre de nimporte quel type. Encore une
fois, seul loprateur dgalit est utilis.
La mthode parse_options() ne fait pas partie proprement parler de linterface. Elle existe surtout pour sparer le processus danalyse des options du reste des
oprations du constructeur __init__().
5.3.3
Analyseurs
Chaque analyseur est galement implment sous forme dobjet. Un analyseur est
un objet beaucoup plus complexe quune source daudit. Ils ont cependant en commun
les attributs name et parameters, ainsi que la mthode parse_options(), extraite du
constructeur.
Les diffrentes mthodes de cet objet sont :
Chargement de la base de connaissances partir dun fichier : load_knowledge(file)
Sauvegarde de la base de connaissances dans un fichier : save_knowledge(file)
Retour dune rfrence sur la base de connaissances : get_knowledge()
Changement de la base de connaissance partir dune rfrence : set_knowledge(knowledge)
Apprentissage dun vnement : learn(event)
Vrification de la normalit dun vnement : normal(event)
Retour de statistiques sous forme brute pour journaliser dans un fichier : logs()
Retour de statistiques mises en forme : stats()
Retour dune estimation de la couverture des diffrents types dvnements parcourus : completed()
Lestimation de couverture nest quun calcul simple sur les diffrentes statistiques
maintenues par la mthode dapprentissage learn(). Elle compte le nombre dvnements quelle a reu et la position du dernier vnement qui lui a appris quelquechose.
Cette dernire variable peut tre plus ou moins dure valuer. Sil sagit denregistrer
tous les vnements, un vnement pas encore rencontr suffit dcider de mettre
jour cette variable avec la position du compteur sans aucun problme. Dans le cas de
rseaux neuronaux, la dcision est plus complexe. partir de ces deux variables n et d,
respectivement le nombre dvnements analyss et la position du dernier vnement
digne dintrt, la couverture estime peut tre calcule avec la formule c n n d . Ainsi,
si on ne rencontre rien de nouveau pendant une longue priode, lestimation va crotre.
Si on finit par rencontrer quelquechose de nouveau, par exemple la position n1 , alors
lestimation va repartir 0. Il devient raisonnable de penser que le minimum est dattendre encore au moins 2n1 pour quelquechose dencore nouveau. Lestimation atteint
44
45
46
Chapitre 6
Sources daudit
6.1
Lecteur denregistrements
47
except I O E r r o r , msg :
r ai se V al ueE rror , msg
def pars e_opt i ons ( s e l f , o p t i o n s ) :
try :
opt s = g e t o p t . g e t o p t ( o p t i o n s , "f:" )
except g e t o p t . e r r o r , errmsg :
r ai se g e t o p t . e r r o r , "%s source: %s" %( s e l f . name , errmsg )
i f l e n ( opt s [ 1 ] ) > 0 :
r ai se g e t o p t . e r r o r , "Parameters unrocognized : %s etc." % opt s [ 1 ] [ 0 ]
f o r opt , parm i n opt s [ 0 ] :
i f opt = = "-f" :
s e l f . f i l e =parm
i f not s e l f . f i l e :
r ai se g e t o p t . e r r o r , "%s source: -f option is mandatory" % s e l f . name
def get ev ent ( s e l f ) :
i f not s e l f . data :
r ai se EOFError , "No more audit data"
a= s e l f . data [ 0 ]
del ( s e l f . data [ 0 ] )
r etu r n a
def c l os e ( s e l f ) :
s e l f . f . c l os e ( )
6.2
Lutilisation de cette source consiste espionner tous les appels systme effectus
par un processus bien choisi du systme en utilisant les mchanismes proposs par le
systme dexploitation.
Cest la source daudit utilise par [FHSL96].
Lensemble des enchanements des appels systmes est fix la compilation du
programme et de ses bibliothques. On a donc de bonnes raisons de penser que cest
un excellent indicateur du comportement dun processus. Pour continuer aller dans ce
sens, on peut regarder un graphe de lenchanement des appels systme dun processus,
sendmail dans le cas de la figure 6.1, et lon sapercevra que les motifs sont plutt
rguliers.
Pour tracer un processus, certains noyaux dont le noyau Linux mettent disposition un appel systme ptrace(). Cet appel systme fournit un processus un moyen
dobserver et de contrler lexcution dun autre processus. Il est en particulier utilis
par les programmes de dbogage pour placer des points darrt.
Cette source daudit prend le PID dun processus comme paramtre. Cest un paramtre obligatoire. Lors de louverture du flux daudit, le processus excutant lobjet
va sattacher au processus tracer. Lexcution de ce dernier est alors stoppe chaque
appel systme. Lorsquun vnement est demand, lanalyseur attend que le processus
sarrte un appel systme sil nest pas dj arrt, rcupre le numro de lappel sys-
48
tme, et relance le processus trac jusqu ce quil effectue un nouvel appel systme.
Pendant ce temps, la source retourne le numro de lappel systme.
On peut voir le code de lobjet sur le listing 6.2.
Listing 6.2 Classe de traage dappels systmes
class S t r a c e p i d ( A udi t _s ourc e ) :
name="stracePID"
parameters= "-p pid"
def _ _ i n i t _ _ ( s e l f , p i d =0, o p t i o n s = [ ] ) :
s e l f . pid=pid
A udi t _s ourc e . _ _ i n i t _ _ ( s e l f , o p t i o n s )
def pars e_opt i ons ( s e l f , o p t i o n s ) :
try :
opt s = g e t o p t . g e t o p t ( o p t i o n s , "p:" )
except g e t o p t . e r r o r , errmsg :
r ai se g e t o p t . e r r o r , "%s source: %s" %( s e l f . name , errmsg )
i f l e n ( opt s [ 1 ] ) > 0 :
r ai se g e t o p t . e r r o r , "Parameters unrocognized : %s etc." % opt s [ 1 ] [ 0 ]
f o r opt , parm i n opt s [ 0 ] :
i f opt = = "-p" :
try :
s e l f . p i d = i n t ( parm )
except V al ueE rror , s t r :
r ai se g e t o p t . e r r o r , "pid : %s" % s t r
i f s e l f . pid == 0:
r ai se g e t o p t . e r r o r , "%s source: no pid specified" % s e l f . name
def open ( s e l f ) :
i f s e l f . pid == 0:
r ai se V al ueE rror , "no pid specified"
try :
ptrace . attach ( s e l f . pid )
49
Cette implmentation est limite par le fait quelle ne trace que le processus dsign
et ne se soucie pas de ses fils.
6.3
Afin de comparer certains rsultats avec ceux de [FHSL96], et aussi afin de pouvoir
utiliser ces donnes daudit assez largement adoptes, une source daudit a t cre.
Les donnes fournies sont des traces dappels systme de processus sendmail, dans
le cas dutilisation normale, mais galement lors de diffrentes attaques. La source est
multiplexe car plusieurs processus sendmail sont tracs en mme temps.
On peut voir le code de cette classe dans le listing 6.3. On peut noter que lidentificateur de type de classe ne varie jamais et valeur utilise, la chane de caractres
"sendmail", est code en dur.
Listing 6.3 Classe de lecture des donnes de [FHSL96]
class F o r r e s t D i s k ( A udi t _s ourc e ) :
name="ForrestDisk"
parameters= "-f file"
def _ _ i n i t _ _ ( s e l f , f i l e ="" , o p t i o n s = [ ] ) :
self . fi l e = f i l e
A udi t _s ourc e . _ _ i n i t _ _ ( s e l f , o p t i o n s )
def pars e_opt i ons ( s e l f , o p t i o n s ) :
try :
opt s = g e t o p t . g e t o p t ( o p t i o n s , "f:" )
except g e t o p t . e r r o r , errmsg :
r ai se g e t o p t . e r r o r , "%s source: %s" %( s e l f . name , errmsg )
i f l e n ( opt s [ 1 ] ) > 0 :
r ai se g e t o p t . e r r o r , "Parameters unrocognized : %s etc." % opt s [ 1 ] [ 0 ]
f o r opt , parm i n opt s [ 0 ] :
i f opt = = "-f" :
50
s e l f . f i l e =parm
i f not s e l f . f i l e :
r ai se g e t o p t . e r r o r , "%s source: -f option is mandatory" % s e l f . name
def open ( s e l f ) :
i f not s e l f . f i l e :
r ai se V al ueE rror , "no file specified"
try :
s e l f . f =open ( s e l f . f i l e )
except I O E r r o r , msg :
r ai se V al ueE rror , msg
def get ev ent ( s e l f ) :
a= s t r i n g . s p l i t ( s e l f . f . r e a d l i n e ( ) )
i f not a :
r ai se EOFError , "No more audit data"
try :
try :
r etu r n ( i n t ( a [ 0 ] ) , "sendmail" , i n t ( a [ 1 ] ) )
except I n d e x E r r o r :
r ai se V al ueE rror
except V al ueE rror :
r ai se V al ueE rror , "%s source: format error in %s" % ( s e l f . name , s e l f . f i l e )
def c l os e ( s e l f ) :
s e l f . f . c l os e ( )
51
Chapitre 7
Les analyseurs
7.1
Enregistreur
52
7.2
Cet analyseur travaille sur une fentre de taille k paramtrable. Il a besoin dune
phase dapprentissage, durant laquelle il mmorise tous les k-uplets dvnements. Sa
base de connaissance est un dictionnaire index par le premier vnement dune fentre. Llment rfrenc est encore un dictionnaire index cette fois par le deuxime
lment de la fentre. Il y a autant de niveaux dimbrications que de dlments dans
la fentre. La structure obtenue sapparente alors un arbre ayant k niveaux.
Ensuite, pendant la phase de vrification, il considre comme anormal tout k-uplet
qui nest pas prsent dans la base, i.e. qui na encore jamais t rencontr.
On peut voir le code de cette classe dans le listing 7.2.
Listing 7.2 Classe de lanalyseur par correspondance exacte
class ExactMatch ( A nal y z er ) :
name="ExactMatch"
parameters= "[-w learn_window_size]"
def _ _ i n i t _ _ ( s e l f , l earn_w i ndow _s i z e =4, o p t i o n s = [ ] ) :
s e l f . l earn_w i ndow _s i z e= l earn_w i ndow _s i z e
A nal y z er . _ _ i n i t _ _ ( s e l f , o p t i o n s )
s e l f . knowledge = { }
s e l f . learn_window = [ ]
s e l f . check_window = [ ]
s e l f . f ai l ed_w i ndow = [ ]
def pars e_opt i ons ( s e l f , o p t i o n s ) :
try :
opt s = g e t o p t . g e t o p t ( o p t i o n s , "w:" )
except g e t o p t . e r r o r , errmsg :
r ai se g e t o p t . e r r o r , "%s model: %s" %( s e l f . name , errmsg )
i f l e n ( opt s [ 1 ] ) > 0 :
r ai se g e t o p t . e r r o r , "%s model: Parameters unrocognized : %s etc."
% ( s e l f . name , opt s [ 1 ] [ 0 ] )
f o r opt , parm i n opt s [ 0 ] :
i f opt = = "-w" :
try :
s e l f . l earn_w i ndow _s i z e= i n t ( parm )
except V al ueE rror , s t r :
r ai se g e t o p t . e r r o r , "learn window size : %s" % s t r
def l e a r n ( s e l f , event ) :
s e l f . count = s e l f . count +1
w= s e l f . learn_window
w. append ( event )
i f l e n (w ) > s e l f . l earn_w i ndow _s i z e :
del (w [ 0 ] )
f l a g =0
node= s e l f . knowledge
f o r ev i n w:
i f not node . has_key ( ev ) :
node [ ev ] = { }
f l a g =1
53
node=node [ ev ]
if flag :
s e l f . l earned = s e l f . l earned +1
s e l f . l a s t l e a r n e d= s e l f . count
def normal ( s e l f , event ) :
s e l f . count = s e l f . count +1
w= s e l f . check_window
w. append ( event )
i f l e n (w ) > s e l f . l earn_w i ndow _s i z e :
del (w [ 0 ] )
try :
node= s e l f . knowledge
f o r ev i n w:
node=node [ ev ]
r etu r n 1
except KeyError :
r etu r n 0
7.3
54
i f l e n ( opt s [ 1 ] ) > 0 :
r ai se g e t o p t . e r r o r , "%s model: Parameters unrocognized : %s etc."
% ( s e l f . name , opt s [ 1 ] [ 0 ] )
f o r opt , parm i n opt s [ 0 ] :
i f opt = = "-w" :
try :
s e l f . l earn_w i ndow _s i z e= i n t ( parm )
except V al ueE rror , s t r :
r ai se g e t o p t . e r r o r , "learn window size : %s" % s t r
e l i f opt = = "-W" :
try :
s e l f . check_window_size= i n t ( parm )
except V al ueE rror , s t r :
r ai se g e t o p t . e r r o r , "check window size : %s" % s t r
e l i f opt = = "-t" :
try :
s e l f . a l e r t _ t h r e s h o l d = i n t ( parm )
except V al ueE rror , s t r :
r ai se g e t o p t . e r r o r , "threshold : %s" % s t r
def normal ( s e l f , event ) :
s e l f . count = s e l f . count +1
f = s e l f . f ai l ed_w i ndow
w= s e l f . check_window
w. append ( event )
i f l e n (w ) > s e l f . l earn_w i ndow _s i z e :
del (w [ 0 ] )
try :
node= s e l f . knowledge
f o r ev i n w:
node=node [ ev ]
except KeyError :
f . append ( 1 )
else :
f . append ( 0 )
i f l e n ( f ) > s e l f . check_window_size :
del ( f [ 0 ] )
r etu r n reduce ( lambda x , y : x+y , f ) < s e l f . a l e r t _ t h r e s h o l d
7.4
Modle de Forrest
55
C. C est tout le temps suivi de D puis de B puis de A. D enfin est suivi de B puis de A
puis de C.
Lors de la phase de vrification, on utilise une fentre de taille l # k. Pour chacun
des l vnements de cette fentre, on regarde si lvnement qui le suit la 1, 2, . . .,
kime position figurait bien cette place durant lapprentissage. On compte chaque
erreur, et on divise par le nombre maximal derreurs possibles M, qui vaut
M
$&%
l'
k
2
. knowledge = { }
. learn_window = [ ]
. check_window = [ ]
. f ai l ed_w i ndow = [ ]
. max_error =( s e l f . window_size 0 1) 1
( s e l f . check_window_size0 s e l f . window_size 1 0 . 5 ) / 1 0 0 . 0
56
57
except KeyError :
f [ cws4 ws+e ] = f [ cws4 ws+e ]+1
r etu r n reduce ( lambda x , y : x+y , f ) < s e l f . t h r e s h o l d 5 s e l f . max_error
7.5
Rseaux neuronaux
futur
Le premier problme qui se pose est que chaque vnement est un objet de type
inconnu. Cela ne pose nanmoins pas de problme de les convertir en nombre, le premier vnement reu portant le numro 1, et chaque vnement pas encore rfrenc
recevant le numro libre suivant.
Le deuxime problme est que cette faon de numroter ne donne pas de sens
la notion de proximit. Les vnements numrotes 1 et 3 peuvent tre beaucoup plus
semblables que chacun avec le numro 2. Comme lanalyseur ne peut pas interprter
les vnements, il ny a aucun moyen dassigner des numros avec du sens.
Un moyen de rsoudre ce problme est dassigner un neurone dentre chaque
type dvnements. Il sera le seul excit lorsque cet vnement sera reu. On peut voir
cela sur la figure 7.2
On essayera aussi, sans trop de convictions, de combiner tous les vnements de la
fentre dans le mme vecteur dentre, en pondrant chaque vnement en fonction de
son anciennet, comme on peut le voir sur la figure 7.3.
58
flux dvnements
fenetre
. r e j ={}
. r e j n b =0
. learn_window = [ ]
. check_window = [ ]
59
numro dvnement
prsent
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
5
1
2x
4
s e l f . knowledge = [ { } , s e l f . b u i l d _ n e t ( ) ]
def b u i l d _ n e t ( s e l f ) :
m= s e l f . max_event
c1 = [ 1 / s q r t (m) ] 6 m
r etu r n NeuralNet ( [ [ Neuron ( Sigmoid ( ) , c1 ) , Neuron ( Sigmoid ( ) , c1 ) ] ] )
def b u i l d _ i n p u t ( s e l f , win , event ) :
i n p u t = [ 0 ] 6 s e l f . max_event
i n p u t [ event ]=1
f o r i i n range ( l e n ( win ) ) :
i n p u t [ win [ i ] ] = min ( 1 , i n p u t [ win [ i ] ] + 1 . 0 / ( 2 . 0 676 ( i + 1 ) ) )
r etu r n i n p u t
def b u i l d _ d e s i r e d ( s e l f , event ) :
r etu r n [ 1 , 0 ]
def pars e_opt i ons ( s e l f , o p t i o n s ) :
try :
opt s = g e t o p t . g e t o p t ( o p t i o n s , "w:m:t:" )
except g e t o p t . e r r o r , errmsg :
r ai se g e t o p t . e r r o r , "%s model: %s" %( s e l f . name , errmsg )
60
i f l e n ( opt s [ 1 ] ) > 0 :
r ai se g e t o p t . e r r o r , "%s model: Parameters unrocognized : %s etc."
% ( s e l f . name , opt s [ 1 ] [ 0 ] )
f o r opt , parm i n opt s [ 0 ] :
i f opt = = "-w" :
try :
s e l f . window_size = i n t ( parm )
except V al ueE rror , s t r :
r ai se g e t o p t . e r r o r , "window size : %s" % s t r
e l i f opt = = "-W" :
try :
s e l f . max_event = i n t ( parm )
except V al ueE rror , s t r :
r ai se g e t o p t . e r r o r , "maximum event number : %s" % s t r
e l i f opt = = "-t" :
try :
s e l f . t h r e s h o l d = f l o a t ( parm )
except V al ueE rror , s t r :
r ai se g e t o p t . e r r o r , "threshold : %s" % s t r
def l e a r n ( s e l f , event ) :
s e l f . count = s e l f . count +1
w= s e l f . learn_window
d , n= s e l f . knowledge
i f not d . has_key ( event ) :
num= l e n ( d )
i f num > = s e l f . max_event :
i f not s e l f . r e j . has_key ( event ) :
s e l f . r e j [ event ]=1
else :
s e l f . r e j [ event ] = s e l f . r e j [ event ]+1
s e l f . r e j n b = s e l f . r e j n b +1
r etu r n
d [ event ] =num
n . l e a r n ( s e l f . b u i l d _ i n p u t (w , d [ event ] ) , s e l f . b u i l d _ d e s i r e d ( d [ event ] ) )
w. i n s e r t ( 0 , d [ event ] )
i f l e n (w ) > s e l f . window_size :
del (w[ 8 1 ] )
def normal ( s e l f , event ) :
s e l f . count = s e l f . count +1
w= s e l f . check_window
d , n= s e l f . knowledge
i f not d . has_key ( event ) :
r etu r n 0
out = a r r a y ( n . c a l c ( s e l f . b u i l d _ i n p u t (w, d [ event ] ) ) )
d e s i r e d = a r r a y ( s e l f . b u i l d _ d e s i r e d ( d [ event ] ) )
p r i n t out
w. i n s e r t ( 0 , d [ event ] )
61
i f l e n (w ) > s e l f . window_size :
del (w[ 9 1 ] )
r etu r n s q r t (sum ( ( d e s i r e d 9 out ) :7: 2 ) ) < s e l f . t h r e s h o l d
def s t a t s ( s e l f ) :
s= A nal y z er . s t a t s ( s e l f )
s . append ( "Rejected (too many events) : %i events of %i different types"
% ( s e l f . rejnb , len ( s e l f . r e j ) ) )
r etu r n s
62
d , n= s e l f . knowledge
i f not d . has_key ( event ) :
r etu r n 0
i n p u t = [ 0 ] = s e l f . max_event
f o r i i n range ( l e n (w ) ) :
i n p u t [w[ i ] ] = 1 . 0 / ( 2 . 0 =>= i )
d e s i r e d = [ 0 ] = s e l f . max_event
d e s i r e d [ d [ event ] ] = 1
out = a r r a y ( n . c a l c ( i n p u t ) )
v= out [ d [ event ] ]
out = c l i p ( out ? v , 0 , 1 )
w. i n s e r t ( 0 , d [ event ] )
i f l e n (w ) > s e l f . window_size :
del (w[ ? 1 ] )
r etu r n max( out ) < 0 . 1 and sum ( out ) < 1
63
d e s i r e d [ event ]=1
r etu r n d e s i r e d
def normal ( s e l f , event ) :
s e l f . count = s e l f . count +1
w= s e l f . check_window
d , n= s e l f . knowledge
i f not d . has_key ( event ) :
r etu r n 0
i n p u t = [ 0 ] @ s e l f . max_event
f o r i i n range ( l e n (w ) ) :
i n p u t [w[ i ] ] = 1 . 0 / ( 2 . 0 @>@ i )
d e s i r e d = [ 0 ] @ s e l f . max_event
d e s i r e d [ d [ event ] ] = 1
out = a r r a y ( n . c a l c ( i n p u t ) )
v= out [ d [ event ] ]
out = c l i p ( out A v , 0 , 1 )
w. i n s e r t ( 0 , d [ event ] )
i f l e n (w ) > s e l f . window_size :
del (w[ A 1 ] )
r etu r n max( out ) < 0 . 1 and sum ( out ) < 1
7.6
Le super-analyseur
64
i f not s e l f . model :
r ai se g e t o p t . e r r o r , "SuperAnalyzer: no model specified"
def l e a r n ( s e l f , event ) :
s e l f . count = s e l f . count +1
try :
f l u x i d , t y pe , e v t = event
except TypeError :
f l u x i d , t y pe , e v t = 1 , 1 , event
kn= s e l f . knowledge
i f not kn . has_key ( t y pe ) :
kn [ t y pe ] = s e l f . model ( o p t i o n s = s e l f . model_parm )
i f not s e l f . f l u x . has_key ( f l u x i d ) :
s e l f . f l u x [ f l u x i d ] = s e l f . model ( o p t i o n s = s e l f . model_parm )
s e l f . f l u x [ f l u x i d ] . set_knowledge ( kn [ t y pe ] . get_knowledge ( ) )
s e l f . f l u x [ f l u x i d ] . learn ( evt )
self . lastflux=fluxid
s e l f . l a s t t y p e = t y pe
def normal ( s e l f , event ) :
s e l f . count = s e l f . count +1
try :
f l u x i d , t y pe , e v t = event
except TypeError :
f l u x i d , t y pe , e v t = 1 , 1 , event
kn= s e l f . knowledge
i f not kn . has_key ( t y pe ) :
r etu r n s e l f . ignore_new_types
i f not s e l f . f l u x . has_key ( f l u x i d ) :
s e l f . f l u x [ f l u x i d ] = s e l f . model ( o p t i o n s = s e l f . model_parm )
s e l f . f l u x [ f l u x i d ] . set_knowledge ( kn [ t y pe ] . get_knowledge ( ) )
r etu r n s e l f . f l u x [ f l u x i d ] . normal ( e v t )
def s t a t s ( s e l f ) :
s =[]
# Give s t a t s o n l y f o r t he 5 f i r s t ones
f o r key i n s e l f . f l u x . keys ( ) [ : 5 ] :
s=s+map( lambda x , key=key : "%12s %s" % ( r e p r ( key ) , x ) ,
s e l f . f l u x [ key ] . s t a t s ( ) )
65
66
Chapitre 8
Tests dintrusion
8.1
Donnes de [FHSL96]
2
66
66
4
138
\
\
Nous pouvons ensuite vrifier que la base de connaissance reconnat bien ces mmes
traces ainsi que dautres correspondant aussi un comportement normal :
./eidf.py -c -f sendmail.eidf
-s ForrestDisk -S -f smt/sendmail.daemon.int
-m SuperAnalyzer -M -m Forrest
Total: 1571584 events
Total: 147 flux of 1 different types
Alerts: 0
./eidf.py -c -f sendmail.eidf
-s ForrestDisk -S -f smt/sm-10763
67
\
\
\
\
-m SuperAnalyzer -M -m Forrest
Total: 362 events
Total: 1 flux of 1 different types
Alerts: 0
./eidf.py -c -f sendmail.eidf
-s ForrestDisk -S -f smt/sm-10814
-m SuperAnalyzer -M -m Forrest
Total: 374 events
Total: 1 flux of 1 different types
Alerts: 0
\
\
Si par contre on utilise des traces dattaques ou de fonctionnement auquel lanalyseur na pas t habitu, on obtient les rsultats suivants :
./eidf.py -c -f sendmail.eidf
-s ForrestDisk -S -f smt/fwd-loop-1.int
-m SuperAnalyzer -M -m Forrest
Total: 635 events
Total: 2 flux of 1 different types
Alerts: 6
\
\
./eidf.py -c -f sendmail.eidf
-s ForrestDisk -S -f smt/syslog-local-1.int
-m SuperAnalyzer -M -m Forrest
Total: 1575 events
Total: 6 flux of 1 different types
Alerts: 40
\
\
./eidf.py -c -f sendmail.eidf
-s ForrestDisk -S -f smt/syslog-local-2.int
-m SuperAnalyzer -M -m Forrest
Total: 1517 events
Total: 6 flux of 1 different types
Alerts: 35
\
\
68
Conclusion
Discussion sur larchitecture
Larchitecture ainsi dveloppe rpond au problme de modularit. Le dveloppement de nouveaux modules, que ce soit des sources daudit ou des analyseurs, est facile
et rapide.
Larchitecture ayant un but exprimental, on nhsite pas, lors de limplmentation,
sacrifier quelques optimisations pour coller au modle ou utiliser des solutions
gnrales plutt que des cas particuliers plus rapides. Certains paramtres comme la
taille mmoire nont pas toujours t pris en compte alors que ce sont ces paramtres
qui parfois ont dcid larchitecture de systmes de dtection dintrusion. Il est alors
parfois difficile dutiliser une telle implmentation en dehors du cadre de la recherche,
car ses performances peuvent soit ne pas suivre le comportement dun systme, soit
le ralentir normment. Cependant, une partie de la lenteur est inhrente au langage
utilis, et une telle architecture peut tre reprise pour des produits en production.
Dveloppements futurs
Larchitecture propose peut recevoir une infinit de nouvelles sources daudit ou
de nouveaux analyseurs. Parmi ceux qui nont pas t implments, on peut citer :
une source daudit pour couter le trafic rseau1
une source daudit pour tracer plusieurs processus, capable de suivre les appels
systmes qui dupliquent le processus (fork())
une source daudit renvoyant les excutions effectues par un processus
une source daudit utilisant les commandes passes aux shells
une source daudit utilisant le journal du systme (syslog)
Une super-source pourrait aussi tre cre, qui permettrait de placer plusieurs sources
daudit sur des systmes diffrents. Ce serait un premier pas vers une architecture distribue. Il manquerait bien sr la redondance et la prise en compte des analyses dune
source par lanalyseur dune autre source.
Aucun analyseur utilisant lapproche de dtection de malveillances na t implment. Cela peut nanmoins parfaitement tre fait. Mme si une phase dapprentissage
est prvue, elle nest pas obligatoire si par exemple lanalyseur apporte sa propre base
de connaissances, dans ce cas une base de signatures dattaques.
1 ce
69
Autres applications
Des applications autres que la dtection dintrusions peuvent tirer profit de cette
architecture, comme la dtection de fraude la carte de crdit en utilisant les squences
dachats prcdentes, ou encore pour vrifier la conformit de certains produits sur des
chanes de montage. Plus gnralement, toute application ayant pour but de dtecter
des anomalies ou des malveillances est concern.
70
Bibliographie
[AFV95]
D. Anderson, T. Frivold, and A. Valdes. Next-generation intrusion detection expert system, 1995. 30
[And80]
[Axe98]
[Bac99]
[BFFIB 98] Jai Sundar Balasubramaniyan, Jose Omar Farcia-Fernandez, David Isacoff, Eugene Spafford, and Diego Zamboni. An architecture for intrusion
detection using autonomous agents. Technical report, November 1998.
24
[BK88]
[Can98]
[CCDB 99]
[CDEB 96]
Mark Crosbie, Bryn Dole, Todd Ellis, Ivan Krsul, and Eugene Spafford.
IDIOT - user guide. Technical report, September 1996. 32
[CG]
[Clo]
[DBS92]
[Den87]
[FH]
[FHS97]
Stephane Forrest, Steven A. Hofmeyr, and Anil Somayaji. Computer immunology. Communications of the ACM, 40(10) :8896, 1997. 26
[FHSL96]
[Fin]
[FJLC 98]
[Gib84]
[GS92]
C. R Gent and C. P Sheppard. Predicting time series by a fully connected neural network trained by back propagation. Computing and Control
Engineering Journal, May 92. 35
[Gus]
[HB95]
[HF00]
[HFS98]
S. Hofmeyr, S. Forrest, and A. Somayaji. Intrusion detection using sequences of system calls, 1998.
[Hol75]
[Ilg91]
[Ilg93]
72
[LN97]
[LNYD 00]
Wenke Lee, Rahul A. Nimbalkar, Kam K. Yee, Sunil B. Patil, Pragneshkumar H. Desai, Thuan T. Tran, and Salvatore J. Stolfo. A data mining
and CIDF based approach for detecting novel and distributed intrusions.
In Recent Advances in Intrusion Detection, pages 4965, 2000. 23
[LS98]
Wenke Lee and Salvatore Stolfo. Data mining approaches for intrusion
detection. In Proceedings of the 7th USENIX Security Symposium, San
Antonio, TX, 1998. 23
[LSC97]
Wenke Lee, Salvatore Stolfo, and Patrick Chan. Learning patterns from
unix process execution traces for intrusion detection. In Proceedings of
the AAAI97 workshop on AI methods in Fraud and risk management,
1997.
[LSM]
Wenke Lee, Salvatore J. Stolfo, and Kui W. Mok. Algorithms for mining
system audit data. 23
[LSM99]
Wenke Lee, Salvatore J. Stolfo, and Kui W. Mok. A data mining framework for building intrusion detection models. In IEEE Symposium on
Security and Privacy, pages 120132, 1999. 23
[LTGD 92]
Teresa F. Lunt, Ann Tamaru, Fred Gilham, R. Jagannathan, Caveh Jalali, and Peter G Neuman. A real-time intrusion detection expert system
(ides). Technical report, Project 6784, CSL, SRI Internationnal, Computer Science Laboratory, SRI Intl. 333 Ravenswood Ave., Menlo Park, CA
94925-3493, USA, February 1992. 29
[Lun88]
[Lun90]
[M]
[M96]
[M98]
Ludovic M. Gassata, a genetic algorithm as an alternative tool for security audit trails analysis. In Proceedings of the First International Workshop on the Recent Advances in Intrusion Detection, Louvain-la-Neuve,
Belgium, 1998. 27, 33
[MA96]
Ludovic M and Vronique Alanou. Dtection dintrusion dans un systme informatique : mthodes et outils. In TSI, volume 4, pages 429450.
1996. 26
[NN00]
73
[NP89]
Peter G. Neumann and Donn B. Parker. A Summary of Computer Misuse Techniques. In Proceedings of the 12th National Computer Misuse
Techniques, 1989.
[PZCE 96]
[Roe99]
[SCCCE 96] S. Staniford-Chen, S. Cheung, R. Crawford, M. Dilger, J. Frank, J. Hoagland, K. Levitt, C. Wee, R. Yip, and D. Zerkle. Griids - a graph based
intrusion detection system for large networks, 1996. 33
[SCCCE 99] S. Staniford-Chen, S. Cheung, R. Crawford, M. Dilger, J. Frank, J. Hoagland, K. Levitt, C. Wee, R. Yip, and D. Zerkle. The design of grids : A
graph-based intrusion detection system, 1999. 33
[SF00]
Anil Somayaji and Stephanie Forrest. Automated response using systemcall delays. In Proceedings of the 9th USENIX Security Symposium, 2000.
70
[Sm98]
[Sma88]
74
Annexes
75
Annexe A
Rseaux neuronaux
Pour plus de dtails, on se rferrera [Sm98].
A.1
Dfinition
Soit X lensemble des neurones dentre, Y lensemble des neurones de sortie. Soit
wi j le coefficient dentre du stimulus venant du neurone i dans le neurone j. Soit
i lexcitation totale reue par le neurone i. Soit yi la sortie du neurone i. Soit i la
fonction de transfert du neurone i. Soient jF lensemble des nuds en entre du nud
j et jG lensemble des nuds dont j est une entre.
j
H
yi
A.2
Rtropropagation
A.2.1
Principe
yi wi j
(A.1)
i K i L
(A.2)
i I jJ
1
2
jI Y
Q
K
y j K MO w P MO x
L
d jR
(A.3)
tV 1T
MO w S
tT
MMO
grad
E MO w S tT
76
(A.4)
A.2.2
Calcul
wi[ j
or
t]
wi[ j
^
E
wi j
En utilisant A.1, on a
_` w [ t]
(A.5)
E y j j
y j j wi j
^
j
wi j
En utilisant A.2, on a
E
wi j
y j a
jb
j
(A.6)
yi
^
(A.7)
c j j b
^
(A.8)
. Il
Si j W Lk _ Lk k
On a alors
yj _ dj
(A.9)
A.3
1l
E
yi
r m jn
E yr r
yr r y j
^
r m jn
E
yi
pour tout i W Lk k 1 .
E a
c r b wr j
yr r
(A.10)
pour tout i W Lk .
i W-Z 1 pup cX
t a
jY kb
WvZ 1 pwp ni X
_x`
dim W
ijb
77
_y`
dim W
ik b
^
ni k
L1
L2
L3
input
output
F IG . A.1 Exemple de rseau de neurones
z{ Yi
} lc ~~~
l1 } z{ x .
z{
for k | 1 to c do
X
z{ k
lk } X
zz
k {
1
end for
{z y
X
z{ c
A.4
Implmentation
78
79
try :
den = ( ( 1 + exp( s e l f . k x ) ) 2 )
r etu r n s e l f . k exp( s e l f . k x ) / den
except O v e r f l o w E r r o r :
p r i n t "Overflow in dsigma. return 0"
r etu r n 0
##################################################
## c l a s s f o r a neuron
class Neuron :
def _ _ i n i t _ _ ( s e l f , t r a n s f e r t F u n c , c oef s , b i a s =0, l e a r n _ r a t e = 0 . 1 ) :
s e l f . c oef s = a r r a y ( [ b i a s ] + c oef s )
s e lf . tfunc =transfertFunc
s e lf . learn_rate =learn_rate
def e x c i t a t i o n ( s e l f , i n p u t ) :
r etu r n c r o s s _ c o r r e l a t e ( s e l f . c oef s , [ 1 ] + i n p u t ) [ 0 ]
def c a l c ( s e l f , i n p u t ) :
r etu r n s e l f . t f u n c . sigma ( s e l f . e x c i t a t i o n ( i n p u t ) )
def backpropagate ( s e l f , i n p u t , d e r r , e r r o r ) :
x c i t = s e lf . ex c it at ion ( input )
d x c i t = s e l f . t f u n c . dsigma ( x c i t )
r e t =( s e l f . c oef s d e r r d x c i t ) [ 1 : ] . t o l i s t ( )
input =array ( [ 1 ] + input )
s e l f . c oef s = s e l f . c oef s s e l f . l e a r n _ r a t e d e r r d x c i t i n p u t
r etu r n r e t
def l e a r n ( s e l f , i n p u t , d e s i r e d ) :
calc = s e l f . calc ( input )
d e r r = s e l f . c a l c ( i n p u t ) d e s i r e d
r etu r n s e l f . backpropagate ( i n p u t , d e r r , 0 . 5 d e r r 2)
##################################################
## Class f o r a m u l t i l a y e r perc ept ron
class NeuralNet :
def _ _ i n i t _ _ ( s e l f , net ) :
s e l f . net = net
def c a l c ( s e l f , i n p u t ) :
res = i n p u t
f o r l a y e r i n s e l f . net :
res =map( lambda neuron , i n p t = res : neuron . c a l c ( i n p t ) , l a y e r )
r etu r n res
def l e a r n ( s e l f , i n p u t , d e s i r e d ) :
reslayer =[ ]
res = i n p u t
80
f o r l a y e r i n s e l f . net :
r e s l a y e r . append ( res )
res =map( lambda neuron , i n p t = res : neuron . c a l c ( i n p t ) , l a y e r )
i n v n e t = s e l f . net [ : ]
i n v n e t =map( lambda x , y : ( x , y ) , i n v n e t , r e s l a y e r )
i n v n e t . rev ers e ( )
res =map( lambda out , d e s i r : out d e s i r , res , d e s i r e d )
E=0.5 reduce ( lambda x , y : x+y , map( lambda x : x 2, res ) )
for layer , r e s l in invnet :
res =map( lambda neuron , e r r , i n p t = r e s l , E=E : neuron . backpropagate ( i n p t , e r r , E ) ,
l a y e r , res )
res =reduce ( lambda x , y : map( lambda z , t : z+ t , x , y ) , res )
r etu r n res
81
Annexe B
82
Annexe C
La charpente
Listing C.1 Code de la charpente
# ! / us r / b i n / python
import sys , os
import g e t o p t , s t r i n g
import a n a l y z e r s
import a u d i t
LEARN=1
CHECK=2
DEFAULT_DBFILE="profile.eidf"
##################################################
## Parameters a n a l y s i s
def usage ( ) :
p r i n t "Usage: %s {-l|-c} [-a] [-h] [-d|D dumpfile] [-t threshold] [-v] [-u]\n" \
"
[-s audit-source] [-S source-parameters]\n" \
"
[-m model] [-M model-parameters] [-f knowledge-file]" % sys . argv [ 0 ]
p r i n t "Available Models:"
f o r m i n a n a l y z e r s . models . keys ( ) :
p r i n t " * %s: %s" % (m, a n a l y z e r s . models [m ] . parameters )
p r i n t "Available audit sources:"
f o r s i n a u d i t . sources . keys ( ) :
p r i n t " * %s: %s" % ( s , a u d i t . sources [ s ] . parameters )
try :
opt s = g e t o p t . g e t o p t ( sys . argv [ 1 : ] , "ahvulact:d:D:s:S:m:M:f:" )
83
mode=0
verbose =0
append=0
d b f i l e =DEFAULT_DBFILE
model= a n a l y z e r s . models . keys ( ) [ 0 ]
mparm=""
source= a u d i t . sources . keys ( ) [ 0 ]
sparm=""
d u m p f i l e=""
dumpmode="w"
m u l t i f l u x =1
t h r e s h o l d =1
f o r opt , parm i n opt s [ 0 ] :
i f opt = = "-h" :
usage ( )
sys . e x i t ( 0 )
i f opt = = "-v" :
verbose =verbose +1
i f opt = = "-u" :
m u l t i f l u x =0
i f opt = = "-t" :
try :
t h r e s h o l d = f l o a t ( parm ) / 1 0 0
i f t h r e s h o l d < 0 or t h r e s h o l d > 1 0 0 :
r ai se g e t o p t . e r r o r , "bad threshold : %i. Must be between 0 and 100" % t h r e s h o l d
except V al ueE rror , s t r :
r ai se g e t o p t . e r r o r , "threshold : %s" % s t r
i f opt = = "-d" :
d u m p f i l e=parm
dumpmode="w"
i f opt = = "-D" :
d u m p f i l e=parm
dumpmode="a"
i f opt = = "-a" :
append=1
e l i f opt = = -l :
i f mode = = CHECK:
r ai se g e t o p t . e r r o r , "-l and -c are exclusive"
mode=LEARN
e l i f opt = = -c :
i f mode = = LEARN :
r ai se g e t o p t . e r r o r , "-l and -c are exclusive"
mode=CHECK
84
e l i f opt = = "-f" :
d b f i l e =parm
e l i f opt = = "-m" :
i f not a n a l y z e r s . models . has_key ( parm ) :
r ai se g e t o p t . e r r o r , "model %s deos not exist" % parm
model=parm
e l i f opt = = "-s" :
i f not a u d i t . sources . has_key ( parm ) :
r ai se g e t o p t . e r r o r , "source %s deos not exist" % parm
source=parm
e l i f opt = = "-S" :
sparm=sparm+" "+parm
e l i f opt = = "-M" :
mparm=mparm+" "+parm
i f l e n ( opt s [ 1 ] ) > 0 :
r ai se g e t o p t . e r r o r , "Parameters unrocognized : %s etc." % opt s [ 1 ] [ 0 ]
i f mode = = 0 :
r ai se g e t o p t . e r r o r , "-l|-c parameter is mandatory"
# I n s t a n t i a t e t he model c l a s s
a n a l y z e r= a n a l y z e r s . models [ model ] ( o p t i o n s = s t r i n g . s p l i t ( mparm ) )
# I n s t a n t i a t e t he source c l a s s
a u d i t s r c = a u d i t . sources [ source ] ( o p t i o n s = s t r i n g . s p l i t ( sparm ) )
except g e t o p t . e r r o r , errmsg :
p r i n t "*** Error:" , errmsg
print
usage ( )
sys . e x i t ( 1 )
##################################################
## Begin t he a n a l y s i s
i f dumpfile :
try :
dmp=open ( d u m p f i l e , dumpmode )
except I O E r r o r , ( errno , msg ) :
p r i n t "Error: [errno=%i] while opening %s: %s" % ( errno , d u m p f i l e , msg)
sys . e x i t ( 4 )
i f mode ==CHECK or append :
try :
a n a l y z e r . load_knowledge ( d b f i l e )
except V al ueE rror , errmsg :
p r i n t "Error:" , errmsg
85
sys . e x i t ( 2 )
p r i n t "Knowledge loaded from file %s" % d b f i l e
try :
a u d i t s r c . open ( )
except V al ueE rror , errmsg :
p r i n t errmsg
sys . e x i t ( 3 )
a l e r t s =0
try :
i f verbose :
s t at s=analyzer . s t at s ( )
p r i n t "\n" l e n ( s t a t s ) ,
while a n a l y z e r . completed ( ) < t h r e s h o l d :
event = a u d i t s r c . get ev ent ( )
i f not m u l t i f l u x :
i f t y pe ( event )== t y pe ( ( ) ) :
i f l e n ( event )= = 3:
event = event [ 2 ]
i f mode = = LEARN :
a n a l y z e r . l e a r n ( event )
e l i f mode = = CHECK:
i f not a n a l y z e r . normal ( event ) :
a l e r t s = a l e r t s +1
i f dumpfile :
dmp . w r i t e ( a n a l y z e r . l o g s ( ) + "\n" )
i f verbose ==1:
s t at s=analyzer . s t at s ( )
s t a t s . append ( "Alerts: %i" % a l e r t s )
p r i n t "\033[A" ( l e n ( s t a t s ) + 1 )
print string . jo in ( stats , "
\n" )
e l i f verbose ==2:
p r i n t event
except K e y b o a r d I n t e r r u p t :
p r i n t "Stopped by user."
except EOFError , msg :
p r i n t msg
except V al ueE rror , msg :
p r i n t msg
i f dumpfile :
dmp . c l os e ( )
i f mode = = LEARN :
a n a l y z e r . save_knowledge ( d b f i l e )
p r i n t "Knowledge saved in file %s" % d b f i l e
a u d i t s r c . c l os e ( )
86