Está en la página 1de 88

Architecture exprimentale

pour la dtection dintrusions


dans un systme informatique
Philippe Biondi
philippe.biondi@webmotion.com

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.

Table des matires


Introduction
Contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Motivations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dfinitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

I tat de lart
1

7
7
7
8

10
.
.
.
.
.
.

11
12
12
13
14
15
15

Diffrentes approches pour la dtection dintrusion


2.1 Dtection de malveillances . . . . . . . . . . . . . . . . . . . . . . .
2.2 Dtection danomalies . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Systmes hybrides . . . . . . . . . . . . . . . . . . . . . . . . . . .

18
18
19
22

Domaines impliqus dans la dtection dintrusions


3.1 Data mining . . . . . . . . . . . . . . . . . . .
3.2 Agents . . . . . . . . . . . . . . . . . . . . . .
3.3 Rseaux de neurones . . . . . . . . . . . . . .
3.4 Immunologie . . . . . . . . . . . . . . . . . .
3.5 Algorithmes gntiques . . . . . . . . . . . . .

Taxonomie des techniques anti-intrusion


1.1 Premption . . . . . . . . . . . . . .
1.2 Prvention . . . . . . . . . . . . . . .
1.3 Dissuasion . . . . . . . . . . . . . . .
1.4 Dtection . . . . . . . . . . . . . . .
1.5 Dflection . . . . . . . . . . . . . . .
1.6 Contre-mesures . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

23
23
24
25
25
26

Quelques programmes de dtection dintrusion existants


4.1 Haystack . . . . . . . . . . . . . . . . . . . . . . . .
4.2 MIDAS . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 IDES . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 NIDES . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5 USTAT . . . . . . . . . . . . . . . . . . . . . . . . .
4.6 IDIOT . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7 GrIDS . . . . . . . . . . . . . . . . . . . . . . . . . .
4.8 GASSATA . . . . . . . . . . . . . . . . . . . . . . . .
4.9 Hyperview . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

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

C Le code : morceaux choisis


C.1 La charpente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

83
83

Table des figures


1

Un modle de gestion de la scurit dun systme informatique . . . .

1.1

Rsum des diffrentes techniques anti-intrusion . . . . . . . . . . .

11

4.1

Une signature dintrusion modlise par un rseau de Ptri . . . . . .

32

5.1
5.2

Aperu de larchitecture EIDF . . . . . . . . . . . . . . . . . . . . .


Fonctionnement du super-analyseur . . . . . . . . . . . . . . . . . .

38
41

6.1

Enchanement dappels systmes de sendmail . . . . . . . . . . . .

49

7.1
7.2
7.3

Utilisation dun rseau neuronal pour une srie temporelle . . . . . .


Utilisation de plusieurs entres pour chaque vnement . . . . . . . .
Prdiction dun vnement : qui viendra aprs 2, 1, 7 et 5 ? . . . . . .

58
59
60

A.1 Exemple de rseau de neurones . . . . . . . . . . . . . . . . . . . . .

78

Liste des algorithmes


5.1 Grands traits
du fonctionnement de la charpente . . . . . . . . . . . .

A.1 Calcul de y par le rseau (algorithme de feedforward) . . . . . . . .

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

Classe mre des sources daudit . . . . . . . . . . . . . .


Classe mre des analyseurs . . . . . . . . . . . . . . . . .
Classe de lecture denregistrements . . . . . . . . . . . . .
Classe de traage dappels systmes . . . . . . . . . . . .
Classe de lecture des donnes de [FHSL96] . . . . . . . .
Classe de lenregistreur . . . . . . . . . . . . . . . . . . .
Classe de lanalyseur par correspondance exacte . . . . . .
Classe de lanalyseur par correspondance avec seuil . . . .
Classe de lanalyseur de Forrest . . . . . . . . . . . . .
Classe modle des analyseurs base de rseaux neuronaux
Classe dun analyseurs base de rseaux neuronaux . . . .
Classe dun analyseurs base de rseaux neuronaux . . . .
Classe du super-analyseur . . . . . . . . . . . . . . . . . .
Implmentation de rseaux neuronaux . . . . . . . . . . .
Code de la charpente . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

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

sont inconnues ou invitables


Mme les systmes les plus srs sont vulnrables aux abus de la part dutilisateurs lgitimes qui profitent de leurs privilges. ou souffrent de la ngligence des
rgles de scurit par ceux-ci.
En rponse ces difficults pour dvelopper des systmes scuriss, un nouveau
modle de gestion de la scurit des systmes a merg [Bac99] (figure 1).

Prvention
Autopsie

Dtection
Enqute

F IG . 1 Un modle de gestion de la scurit dun systme informatique

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.

Mcanisme daudit : nous appellerons mcanisme daudit toute partie de code du


systme informatique dont le but est de reporter des informations sur les oprations
quil lui est demand daccomplir.
Journal daudit : nous appellerons journal daudit lensemble des informations gnres par les mcanismes daudit.
vnement : tant donn un niveau de granularit, nous appellerons vnement toute
opration lmentaire. Par extension, nous appellerons galement vnement le report
de celui-ci par un mcanisme daudit
Flux daudit lmentaire : nous appellerons flux daudit lmentaire une suite temporelle reportant les vnements se produisant sur une mme partie du systme et traduisant son comportement.
Flux daudit : nous appellerons flux daudit une suite temporelle dvnements, pouvant tre lentremlement de plusieurs flux lmentaires.
Dtection dintrusions : la dtection dintrusions consiste analyser les informations collectes par les mcanismes daudit de scurit, la recherche dventuelles
attaques. Bien quil soit possible dtendre le principe, nous nous concentrerons sur les
systmes informatiques. Les mthodes de dtection dintrusion diffrent sur la manire
danalyser le journal daudits.

Premire partie

tat de lart

10

Chapitre 1

Taxonomie des techniques


anti-intrusion
La dtection dintrusions a longtemps t vue comme le moyen le plus prometteur de combattre les intrusions. Pourtant elle fait partie dun ensemble plus grand de
techniques anti-intrusion qui ont aussi leur place.
[HB95] propose une taxonomie de toutes ces techniques, que lon peut rsumer en
le schma de la figure 1.1, et que lon dtaillera ci-aprs.

Intrusion

Premption
Prvention
externe
Dissuasion
externe

primtre du systme

Prvention
interne
Dissuasion
interne
Dtection
Dflection
Contremesures

leurre

objet de convoitises

F IG . 1.1 Rsum des diffrentes techniques anti-intrusion

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

et qui ne veut pas se faire voler son portefeuille.

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

Les techniques de dissuasion tentent de rduire la valeur apparente dune intrusion


et de faire percevoir les efforts ncessaires lintrusion et les risque encourus plus
grands que ce quils ne sont. La dissuasion encourage un cyber-criminel sintresser
dautre systmes promettant plus de bnfices moindre cot. Cette approche inclus
la dvaluation du systme par camouflage et laugmentation du risque peru par laffichage de messages de mises en garde, ou qui surestiment la surveillance du systme.
Le but final tant de faire croire que le jeu nen vaut pas la chandelle.
Analogie : Se dvtir et se promener avec un caniche susceptible. Beaucoup de voleurs se tourneront vers des cibles ayant lair plus riches et plus faciles, mais dans la
nuit, un petit chien ne sera pas suffisant pour stopper un malfaiteur dtermin.
Mise en uvre :
Camouflage : on peut cacher ou dvaluer les cibles du systme et adopter comme
politique de faire le moins de publicit possible sur les systmes et leur contenu.
On peut aussi configurer les modems pour ne dcrocher quaprs un nombre de
sonneries suprieur ce que la plupart des programmes attendent, afficher des
bannires de login gnriques. gtw sera moins intrigant que Global Thermonuclear War. Camoufler le systme le rends moins utilisable et intuitif. Cela
peut aussi rentrer en conflit avec les techniques de dissuasion qui mettent en
valeur et exagrent les dfenses du systme.
Mises en garde : elles informent les utilisateur que la scurit du systme est prise
srieusement en compte et exagrent les pnalits encourues si une activit illgale est observe. Ces mises en garde sont galement utiles du point de vue lgal
si par exemple on enregistre tout ce qui est tap. Certains messages peuvent aussi
tre affichs lorsquun comportement intrusif est dtect. Cette mthode permet

13

cependant lintrus de savoir quelles signatures ou quels comportements le


systme ragit.
Paranoa : on essaye de donner limpression lutilisateur quil est sur surveillance
constante, que cela soit vrai ou non. La technique de la fausse alarme de voiture
est le mcanisme le plus simple pour donner cette impression. Son pouvoir de
dissuasion est cependant nul si lon sait que cest un faux. Pour contrer cela, on
peut utiliser la technique de la camra de surveillance, qui ne donne aucune indication sur le fait que quelquun surveille ou non. On sait quon peut ltre mais
on ne sait pas quel moment.
Obstacles : on essaye daugmenter la quantit de temps et defforts quun intrus
doit dpenser pour arriver ses fins. Les obstacles, en particulier sur les passerelles, tentent de venir bout de la patience de lintrus, de gcher son plaisir.
On peut par exemple rallonger les temps dexcution des commandes, afficher
de fausses erreurs systme, simuler une saturation des ressources pour lexasprer, sans toutefois lui donner limpression dtre dtect. On peut aussi mettre
en vidence des fichiers ou des comptes apparemment intressants sur lesquels
lintrus passera du temps, rvlera ses comptences mais qui ne lui apporteront
rien. Toutes ces techniques peuvent cependant gner les utilisateurs autoriss.

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

ne niera pas lorigine amricaine de lexemple

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

et placs stratgiquement qui leurrent les cyber-pirates et les amnent rvler


leurs activits. Une action est immdiatement dclenche lors de laccs lun
de ces fichiers ou comptes. Lalarme peut tre silencieuse et navertir que la
personne charge de la scurit, ou peut dclencher des sanctions immdiates
contre le cyber-criminel. Un candidat idal comme compte pig est le compte
administrateur par dfaut avec le mot de passe dorigine. Cette technique cote
peu en argent et en technique mais on doit faire attention ce que des utilisateurs
autoriss ne dclenchent pas lalarme par mgarde.

17

Chapitre 2

Diffrentes approches pour la


dtection dintrusion
On distingue deux grands types dapproches pour dtecter des intrusions. La premire consiste rechercher des signatures connues dattaques tandis que la seconde
consiste dfinir un comportement normal du systme et rechercher ce qui ne rentre
pas dans ce comportement.
Un systme de dtection dintrusions par recherche de signatures connat ce qui
est mal, alors quun systme de dtection dintrusions par analyse de comportement
connat ce qui est bien.
On parle de dtection de malveillances et de dtection danomalies...

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

Domaines impliqus dans la


dtection dintrusions
3.1

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

Request For Comment

24

Imprvisibilit Un intrus peut pntrer dans un systme sans tre immdiatement


dtect par lIDS. Cela peut lui laisser le temps deffacer ses traces ou de neutraliser
lIDS.
Un MAIDS reste vulnrable cela mais se trouve nanmoins pourvu de quelques
avantages. Lorsquun agent arrive sur un hte, il transporte du code non encore altr,
et pourrait par exemple tester lintgrit de la plateforme IDS locale. Larrive des
agents et leur manire de fonctionner peuvent tre imprvisibles, et il peut tre trs dur
de rester inaperu.
Diversit gntique Les IDS base dagents mobiles peuvent tre vus comme un
ensemble dentits autonomes. Chaque agent peut tre diffrent des autres par son code
ou par les donnes sur lesquelles il travaille. Cependant, sils ne diffrent que par leurs
donnes, leurs tests peuvent devenir prvisibles.
Si chaque agent dune mme classe avait une faon diffrente de dtecter la mme
chose, il serait autrement plus difficile de prvoir quoi que ce soit. Une manire de
faire les choses serait de dcrire ce quil faut dtecter dans un langage standard et
de laisser chaque instance de la classe trouver une manire de le dtecter. Les agents
avec un faible taux de dtection pourraient essayer de muter en introduisant de lgres
modifications dans leur faon de dtecter lattaque.

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

Le systme immunitaire biologique est prcisment conu pour dtecter et liminer


les infections. Il se montre capable de plusieurs proprits que lon aimerait voir figurer
dans des systmes artificiels.
Il est tout dabord robuste, du fait de sa diversit, de sa distribution, de son dynamisme et de sa tolrance aux fautes. La diversit amliore la robustesse, deux lments
peuvent ne pas tre vulnrables aux mmes infections. Le fait que le systme immunitaire soit distribu, que plusieurs composants interagissent localement pour obtenir
une protection globale, permet de ne pas avoir de centre de contrle, de point faible.
Sa dynamique, le fait que ses agents sont continuellement crs, dtruits et circulent
augmentent la diversit temporelle et spatiale. Elle est tolrante aux fautes car leffet
dun individu est faible, et quelques erreurs ne sont pas catastrophiques.

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

Le prototype de Haystack [Sma88] a t dvelopp pour la dtection dintrusions


sur un systme multi-utilisateur de lAir Force. Il tait conu pour dtecter six type
dintrusions
1. lorsquun utilisateur non-autoris tente daccder au systme
2. lorsquun utilisateur autoris tente de prendre lidentit dun autre
3. lorsquun utilisateur tente de modifier les paramtres relatif a la scurit du systme
4. lorsquun utilisateur tente dextraire des donnes potentiellement sensibles du
systme
5. lorsquun utilisateur bloque laccs aux ressources du systme dautres utilisateurs
6. diverses attaques telles que leffacement de fichier, etc.
Pour parvenir a ses fins, Haystack utilise les deux mthodes de dtection : par dtection danomalies et par signatures. La dtection danomalies utilise un modle par
utilisateur dcrivant le comportement de cet utilisateur dans le pass et un strotype
qui spcifie le comportement gnrique acceptable pour cet utilisateur, vitant une drive trop importante du premier modle utilisateur. Il est ainsi impossible un intrus
dhabituer le systme un comportement intrusif.

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

Linterface utilisateur : elle est responsable de la communication avec la personne


charge de la scurit. Cest elle qui permet de contrler NIDES, et cest elle
qui reporte les alarmes. Une seule instance peut tre lance en mme temps et
elle doit tourner sur lhte qui fait tourner lanalyseur. Limplmentation utilise
MOTIF sous X-Windows.
Les rsultats montrent que NIDES est capable de dtecter des anomalies avec des
taux de fausse alertes et dintrusions non dtectes raisonnable.

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

on suppose que root na pas de mail


on rend le fichier setuid
on envoie un mail root
on excute le shell setuid 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

Le moteur de dcisions : Il informe la personne charge de la scurit que le moteur


dinfrences a dtect une possible intrusion. Dans le prototype, il alerte cette
personne ds que lune des transitions du scnario a t dtecte et linforme de
procdures suivre pour empcher les autres transitions. Les auteurs suggrent
dajouter ce moteur des capacits rpondre aux intrusions.

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

peut tre modlise par le rseau de la figure 4.1.


s4

s1
write() t1
s2
chmod() t2

t4 stat()
s5
t5 uname()

s3

s6
t7 exec()
s7

F IG . 4.1 Une signature dintrusion modlise par un rseau de Ptri

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

Soit H un vecteur de dimension Na ou Hi 1 si lattaque i est prsente (daprs


les hypothses faites) et Hi 0 sinon. H est un sous-ensemble des attaques possibles.
Pour expliquer le vecteur daudit O par la prsence dune ou plusieurs attaques,
on
doit
trouver le vecteur H qui maximise le produit R H sous la contrainte  i 

1  Na  AE H  i  Oi . Cest une approche pessimiste puisquon doit trouver le pire
vecteur H.
Trouver le meilleur vecteur H est NP difficile. On ne peut donc pas appliquer les
algorithmes classiques dans le cas o plusieurs centaines dattaques sont recherches,
cest--dire lorsque Na est grand. Lheuristique employe est dvaluer une hypothse
et de lamliorer selon les rsultats dune valuation. Lvaluation de lhypothse correspond compter le nombre dvnements de chaque type gnrs par toutes les attaques de lhypothse. Si ces comptes sont plus petits ou egaux aux nombres dvnements enregistrs dans llment daudit, alors lhypothse est raliste. On doit alors la
transformer en une hypothse encore meilleure. Lalgorithme utilis pour obtenir une
nouvelle hypothse est un algorithme gntique.
Les algorithmes gntiques sont des algorithmes de recherche doptimums bass
sur la slection naturelle dans une population. Une population est un ensemble de
cratures artificielles. Ces cratures sont des chanes de longueur fixe sur un alphabet
donn, codant une solution potentielle du problme. La taille de la population est fixe.
Elle est gnre alatoirement puis volue. chaque gnration, de nouvelles cratures sont cres en utilisant tout ou parties des meilleures cratures de la population
prcdente. Le processus itratif de cration dune nouvelle population repose sur trois
rgles : la slection des meilleurs individus, la reproduction ou croisement, qui permet
lexploration de nouvelles rgions de lespace des solutions) et la mutation, qui protge
la population contre les pertes irrecuprables dinformation. Lvolution de la population se fait jusqu ce quelle remplisse une certaine condition, qui est usuellement le
fait quun individu est solution du problme.
Dans le cas de GASSATA, un individu sera un vecteur H possible, et la fonction
maximiser sera une fonction du produit maximiser R H tenant compte du ralisme
des hypothses.

4.9

Hyperview

Hyperview [DBS92] est un systme avec deux composants principaux. Le premier


est un systme expert qui observe les donnes daudit la recherche de signes dintrusions connus, lautre est un rseau de neurones qui apprend le comportement dun
utilisateur et dclenche une alerte lorsque les donnes daudit dvient du comportement
appris.
Les donnes daudit peuvent venir dune multitude dendroits diffrents niveaux
de dtail, comme par exemple sinteresser toutes les touches tapes par lutilisateur,
ou simplement aux diffrentes commandes passes. Les auteurs notent que plus les
donnes sont dtailles et brutes, plus les chances de dtecter correctement une intrusion sont leves. Plus galement les temps de calcul et la taille des donnes a stocker
seront importants.
Pour utiliser un rseau de neurones, lhypothse a t prise que les donnes daudit
34

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

Les source daudit

Le but de la source daudit est de mettre disposition des vnements provenant


dune partie du systme observe pour loccasion. Ces vnements peuvent tre de
nimporte quel type : nombre entier, rel, chane de caractre, n-uplet, objet plus com-

37

source
daudit

analyseur
flux daudit
charpente

F IG . 5.1 Aperu de larchitecture EIDF

plexe. La suite de ces vnements se veut une description de la vie de la partie du


systme observe. Cette description peut tre plus ou moins dtaille, mais elle doit
permettre de se faire une ide du comportement de cette partie du systme.

5.1.3

Les analyseurs

Un analyseur ne se fait aucune ide a priori du type ou de la structure de lobjet. Il


est seulement capable de savoir si deux objets sont gaux ou non. Sil est souhaitable
de travailler sur des classes dobjets, cest la source daudit de prendre lensemble
quotient. Cela exclus dans lanalyseur la notion de proximit. Cest le prix payer
pour avoir une indpendance vis--vis de la source1 .
Un analyseur dispose dune base de connaissances persistante. La plupart des analyseurs doivent dabord remplir leur base avant de pouvoir dtecter quoi que ce soit.
Ce remplissage se fait durant une phase dapprentissage, o lanalyseur reoit le flux
daudit. Ensuite, en mode vrification, il peut utiliser ses connaissances pour dcider si
un vnement est normal ou non.
De mme quon ne peut pas savoir si un chien se gratte partir dune image dun
flux vido, les analyseurs peuvent difficilement se faire une ide du comportement du
systme en en traitant que le dernier vnement du flux. La plupart des analyseurs utiliseront donc une fentre remontant plus ou moins loin dans le pass du flux. chaque
nouvel vnement, on a donc, pour une fentre de taille k, un k-uplet dvnements, et
le but est de savoir si ce k-uplet est normal ou anormal. Il est donc trs important dans
ce cas l que le flux soit lmentaire.
Un analyseur peut fournir certaines statistiques sur le flux trait, comme le nombre
dvnements rencontrs. Il peut galement mettre disposition son estimation de la
couverture de lespace des squences dvnements utilises par la source daudit.

5.1.4

La charpente

La principale fonction de la charpente est de mettre en relation la source daudit et


lanalyseur. Elle se charge galement de les instancier et douvrir et fermer la source
1 On pourra bien sur enfreindre cette loi et faire des suppositions a priori sur la structure des vnements,
mais cet analyseur ne fonctionnera pas avec toutes les sources

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.

Alg. 5.1 Grands traits du fonctionnement de la charpente


Instancier et configurer lanalyseur
Instancier et configurer la source daudit
Ouvrir la source daudit
while estimation de couverture de lanalyseur < limite fixe do
Demander un vnement la source daudit
if vrification then
Fournir lvnement lanalyseur pour vrification
else
Demander lanalyseur dapprendre lvnement
end if
end while
Fermer de la source daudit

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

lmentaires et instancie autant danalyseurs que de flux lmentaires pour rsoudre


le problme. Pour pouvoir dmultiplexer le flux, la source doit ltiqueter. Le superanalyseur sattend donc une certaine structure dvnement. Cest le seul analyseur
du modle pour lequel une telle chose est tolre. Pour quand mme conserver linterchangeabilit, il acceptera galement les flux non multiplexs et les transmettra tels
quels une instance danalyseur. De mme, un analyseur recevant un flux multiplex
traitera chaque vnement tiquet comme un vnement, et verra donc deux mmes
vnements tiquets diffremment comme diffrents. Bien quil saccommodera trs
bien dun flux multiplex, celui-ci na pas beaucoup de sens. La chronologie entre des
vnements tiquets diffremment ne doit pas tre prise en compte, et le sera pourtant
par la plupart des analyseurs.
Dans certains cas, par exemple si on trace les appels systmes de tous les processus
du systme, cest la source daudit daller chercher les vnements des diffrents flux
lmentaires. Il est alors facile de les tiqueter et de les multiplexer. Dans dautres,
comme par exemple si on capture les paquets du rseau, les flux lmentaires sont
mlangs, et cest la source daudit dinterprter chaque vnement pour pouvoir
ltiqueter.
Ltiquette dun vnement se compose tout dabord dun identificateur de flux, attribu par la source daudit. Il est unique et permet dassocier un flux lmentaire une
instance danalyseur. Cet identificateur sera un objet quelconque acceptant loprateur
dgalit. Cela peut tre le PID du processus trac, si on trace les appels systmes de
plusieurs processus. Ou encore le quadruplet (IP1, port1, IP2, port2) identifiant une
connexion TCP. Ltiquette se compose ensuite dun type de flux, attribu galement
par la source daudit, qui dcidera que deux flux lmentaires doivent avoir le mme
comportement. Par exemple, un processus sendmail devra avoir le mme comportement que nimporte quel autre processus sendmail. De mme quune connexion TCP
sur le port 80 devra toujours avoir le mme comportement que nimporte quelle autre
connexion sur le port 80. On peut noter que lidentificateur de flux ne signifie rien et
peut changer dune session sur lautre sans problme, tandis que lidentificateur de type
de flux est un identificateur persistant. Les traces dun processus sendmail doivent
tre identifies de faon identique dune session sur lautre, par exemple en utilisant la
chane de caractres "sendmail".

5.2.3

Le Super-analyseur

Le fonctionnement du super-analyseur est assez simple. Tout dabord, on lui fournit


comme paramtre un modle danalyseur utiliser. Il est ensuite prt recevoir des
vnements.
Si lvnement quil reoit ne provient pas dun flux multiplex, cest--dire si ce
nest pas un triplet compos dun identificateur de flux, dun identificateur de type de
flux et dun vnement, les identificateurs prennent une valeur par dfaut, ce qui revient
traiter le flux comme un flux multiplex contenant un unique flux lmentaire.
Si lvnement provient dun flux multiplex, il contient son identificateur de flux
et son identificateur de type de flux. Chaque flux lmentaire est associ sa propre
instance danalyseur grce son identificateur de flux. chaque nouvel identificateur
de flux, un nouvel analyseur est instanci et lui est associ.

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

F IG . 5.2 Fonctionnement du super-analyseur

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

rellement unique. On peut programmer la source daudit de manire rendre chaque


identificateur rellement unique, quitte numroter les occurrences des identificateurs
identiques.
Une solution au premier problme peut tre de donner un ge chaque instance
danalyseur. Cet ge sera remit zro chaque utilisation et incrment de temps en
temps, jusqu un ge limite ou linstance sera dtruite. Cest une sorte dalgorithme
ramasse-miettes imparfait, car on na pas lassurance que ce qui est dtruit ne servait vraiment plus. Cependant, une destruction par erreur na pas forcment un impact
norme. Cette mthode est toutefois difficile rgler correctement.
Un autre problme peut surgir de laccs concurrent de plusieurs analyseurs la
mme base. Le passage du flux par la charpente impose une srialisation de ce flux.
On est donc certain que deux analyseurs ne peuvent pas accder la base en mme
temps. Cependant, dans certains cas la base peut tre influence par lordre dans lequel
les vnements arrivent. Par exemple, dans le cas dun rseau de neurones, la base de
connaissances est ce mme rseau de neurones. Il va donc tre confront de faon entremle des vnements de flux lmentaires diffrents, comme si le super-analyseur
ne les dmultiplexait pas, ou plus exactement ne dmultiplexait que selon les identificateurs de types de flux et non selon les identificateurs de flux. Dans le cas de rseaux
non cycliques, cela ne pose pas ou peu de problmes puisque lordre dapprentissage
des vnements a une influence qui ntait de toute faon pas matrise. Mais dans le
cas de rseaux cycliques, ou donc il existe une mmoire court terme des vnements
passs, cela peut avoir de graves rpercussions.

5.3

Dtails dimplmentation du modle

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

La charpente se charge tout dabord de parcourir les paramtres de la ligne de


commande. Beaucoup doptions peuvent lui tre fournies. Sa syntaxe est la suivante :
eidf.py {-l|-c} [-a] [-h] [-d|D dumpfile] [-t threshold] [-v] [-u]
[-m model] [-M model-parameters] [-f knowledge-file]
[-s audit-source] [-S source-parameters]

{-l|-c} choisis le mode apprentissage (-l) ou vrification (-c)


[-m model] choisis le modle utiliser. Par dfaut, le premier modle trouv
sera utilis
[-M model-parameters] prcise les paramtres fournir lanalyseur. Chaque
analyseur prcise les paramtres dont il a besoin.
[-f knowledge-file] prcise le fichier dans lequel sera lue et sauve la base
de connaissance de lanalyseur. Par dfaut, il sagit du fichier profile.eidf.
[-s audit-source] permet de choisir la source daudit utilise.
2

http://www.python.org

42

[-S source-parameters] permet de fournir les paramtres passer la


source daudit
[-a] en mode apprentissage, demande lanalyseur dajouter ce quil va apprendre la base de connaissances plutt que de lcraser.
[-d|D dumpfile] demande dcrire tous les paramtres que lanalyseur peut
fournir dans un fichier, vnement par vnement. Si loption est en majuscule,
les donnes sont ajoutes au fichier au lieu de lcraser.
[-t threshold] prcise une limite en pourcentage comme condition darrt
dans le cas de lapprentissage. Le programme sarrte lorsque lestimation de
couverture dpasse la limite fournie.
[-u] demande la charpente de retirer les tiquettes dun flux multiplex. Cela
permet dutiliser directement un analyseur sans passer par le super-analyseur
dans le cas particulier ou la source ne multiplexe quun flux lmentaire, mais
lui attribue des identificateurs de flux diffrents dune session sur lautre.
[-v] demande la charpente dafficher des informations sur les oprations en
cours. Loption peut tre passe plusieurs fois pour afficher encore plus dinformations.
[-h] affiche la syntaxe ainsi quune liste des diffrents analyseurs et des diffrentes sources daudit disponibles.
Le code complet de cette partie de larchitecture se trouve en annexe dans la section
C.1.

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

alors 50% ce moment.


La base de connaissance dun analyseur est un objet dont le type et la structure sont
laisses la discrtion de lanalyseur.
La classe mre (listing 5.2) peut tre utilise comme analyseur, mais elle napprend
rien, elle a une connaissance nulle et considre tout comme normal.
Listing 5.2 Classe mre des analyseurs
class A nal y z er :
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 )
s e l f . knowledge=None
s e l f . count =1
s e l f . l earned =0
s e l f . l a s t l e a r n e d =1
def pars e_opt i ons ( s e l f , o p t i o n s ) :
pass
def load_knowledge ( s e l f , f i l e ) :
f =open ( f i l e , "rb" )
try :
data = p i c k l e . l oad ( f )
i f t y pe ( data ) ! = t y pe ( ( ) ) : r ai se V al ueE rror
i f l e n ( data ) ! = 2 : r ai se V al ueE rro r
i f t y pe ( data [ 0 ] ) ! = t y pe ( "" ) : r ai se V al ueE rror
f . c l os e ( )
except V al ueE rror :
r ai se V al ueE rror , "%s is not a EIDF knowledge file" % f i l e
s i g , s e l f . knowledge = data
i f s i g ! = s e l f . name :
r ai se V al ueE rror , "signature \"%s \ " expected. Found \"%s \ " in %s"
% ( s e l f . name , s i g , f i l e )
def save_knowledge ( s e l f , f i l e ) :
f =open ( f i l e , "wb" )
p i c k l e . dump ( ( s e l f . name , s e l f . knowledge ) , f )
f . c l os e ( )
def get_knowledge ( s e l f ) :
r etu r n s e l f . knowledge
def set_knowledge ( s e l f , knowledge ) :
s e l f . knowledge=knowledge
def completed ( s e l f ) :
r etu r n 1 . 0  ( s e l f . count  s e l f . l a s t l e a r n e d ) / s e l f . count
def s t a t s ( s e l f ) :
r etu r n [ "Completed: %3.2f%%" % (100  s e l f . completed ( ) ) ,
"Events: %5i" % s e l f . count ,
"Learned: %5i" % s e l f . l earned ,
"Learning slope: %3.4f" % ( s e l f . l earned  1 . 0 / s e l f . count ) ]
def l o g s ( s e l f ) :
r etu r n "%i %f %i %i"
% ( s e l f . count , s e l f . completed ( ) , s e l f . l earned , s e l f . l a s t l e a r n e d )
def l e a r n ( s e l f , event ) :
s e l f . count = s e l f . count +1

45

def normal ( s e l f , event ) :


s e l f . count = s e l f . count +1
r etu r n 1

46

Chapitre 6

Sources daudit
6.1

Lecteur denregistrements

Le lecteur denregistrements est le complmentaire de lanalyseur enregistreur,


dont le rle est dapprendre tout lenchanement des vnements (voir section 7.1).
Le lecteur est donc capable de lire la base de connaissances de lenregistreur et de
permettre de rejouer plusieurs fois le mme scnario enregistr pour tester plusieurs
analyseurs ou pour tester plusieurs paramtres pour le mme analyseur.
Listing 6.1 Classe de lecture denregistrements
class P l ay er ( A udi t _s ourc e ) :
name="Player"
parameters= "-f file"
r e c o r d e r ="Recorder"
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 open ( s e l f ) :
f =open ( s e l f . f i l e , "rb" )
try :
data = p i c k l e . l oad ( f )
i f t y pe ( data ) ! = t y pe ( ( ) ) : r ai se V al ueE rror
i f l e n ( data ) ! = 2 : r ai se V al ueE rro r
i f t y pe ( data [ 0 ] ) ! = t y pe ( "" ) : r ai se V al ueE rror
f . c l os e ( )
except V al ueE rror :
r ai se V al ueE rror , "%s is not a EIDF knowledge file" % f i l e
s i g , s e l f . data = data
i f sig ! = s e l f . recorder :
r ai se V al ueE rror , "signature \"%s \ " expected. Found \"%s \ " in %s"
% ( s e l f . recorder , sig , f i l e )
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 )

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

Appels systme dun processus

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

F IG . 6.1 Enchanement dappels systmes de sendmail

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

except OSError , msg :


r ai se V al ueE rror , msg
ptrace . s y s c al l ( s e l f . pid , 0 )
def get ev ent ( s e l f ) :
p r i n t os . w a i t p i d ( s e l f . p i d , 0 )
try :
s y s c a l l = p t r a c e . peekuser ( s e l f . p i d , ORIG_EAX)
except OSError :
r ai se EOFError , "No more audit data"
ptrace . s y s c al l ( s e l f . pid , 0 )
r etu r n s y s c a l l ;
def c l os e ( s e l f ) :
p t r a c e . detach ( s e l f . p i d , 0 )

Cette implmentation est limite par le fait quelle ne trace que le processus dsign
et ne se soucie pas de ses fils.

6.3

Lecteur des donnes de [FHSL96]

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

Cet analyseur sert enregistrer tout lenchanement des vnements provenant


dune source. Sa base de connaissance est en fait la liste ordonne de tous les vnements rencontrs. Cest cette base que la source daudit de restitution lira (voir section
6.1).
La classe (listing 7.1) est trs simple et profite au maximum de son hritage. Lorsquelle est appele pour vrification, elle comparera chaque vnement fourni avec
celui occupant la mme position dans sa base de connaissances.
La base de connaissance pourrait encore tre amliore en stockant galement le
temps coul entre chaque vnement, de manire tre en mesure, si cela est demand, de reproduire la squence de manire parfaite.
Listing 7.1 Classe de lenregistreur
class Recorder ( A nal y z er ) :
name="Recorder"
parameters= ""
def _ _ i n i t _ _ ( s e l f , o p t i o n s = [ ] ) :
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 = [ ]
def l e a r n ( s e l f , event ) :
s e l f . count = s e l f . count +1
s e l f . knowledge . append ( event )
def normal ( s e l f , event ) :
s e l f . count = s e l f . count +1
r etu r n ( ( s e l f . count  2 < l e n ( s e l f . knowledge ) ) and
( s e l f . knowledge [ s e l f . count  2]== event ) )

52

7.2

Analyse par correspondance exacte

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

Analyse par correspondance avec seuil

La phase dapprentissage est identique lanalyse par correspondance exacte :


toutes les occurrences de k-uplets sont mmorises.
Pour la phase de vrification, une fentre de taille l avec l  k est utilise. On
compte le nombre de k-uplets parmi les l  k 1 de la fentre de longueur l qui ne sont
pas dans la base, et cette fentre est considre comme anormale si ce nombre excde
un seuil s.
On peut voir le code de cette classe dans le listing 7.3. On peut remarquer que cette
classe nhrite pas directement de la classe Analyzer comme la plupart des autres
classes mais de la classe ExactMatch (section 7.2) dont une partie du comportement
est semblable.
Listing 7.3 Classe de lanalyseur par correspondance avec seuil
class Threshold ( ExactMatch ) :
name="Threshold"
parameters= "[-w learn_window_size ] [-W check_window_size ] [-t threshold]"
def _ _ i n i t _ _ ( s e l f , l earn_w i ndow _s i z e = 4 , check_window_size =20,
al ert _t hres hol d =4, options = [ ] ) :
s e l f . check_window_size=check_window_size
self . alert_threshold =alert_threshold
ExactMatch . _ _ i n i t _ _ ( s e l f , l earn_w i ndow _s i z e , o p t i o n 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 ) :
try :
opt s = g e t o p t . g e t o p t ( o p t i o n s , "w:W: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 )

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

Lanalyseur utilis dans [FHSL96] mmorise, dans sa phase dapprentissage, pour


chaque vnement, les k ! 1 vnements qui le suivent usuellement et la place laquelle
ils le suivent.
Par exemple, pour la squence dvnements ABAACDBAC avec une fentre de
taille k " 4, on mmorisera que A est suivi dabord de A, B ou C, puis de A, C ou D, et
enfin de A, B ou D. B pour sa part est tout le temps suivi de A, puis de A ou C, puis de

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

$&%

k ' 1 (% l ' k ) 1 (*)+% k ' 2 (*)-,,,.) 1 $/% k ' 1 (

l'

k
2

Si on utilise la base gnre par lapprentissage de lexemple prcdent et la fentre


de taille 7 ABCDABC, on obtient :
Le premier k-uplet (k $ 4) est ABCD. On a vu que A doit tre suivi de A, B ou C.
Il est dans ce cas suivi de B, donc pas derreur. On devrait ensuite trouver A, C ou D.
On trouve C, donc pas derreur. On devrait enfin trouver A, B ou D. On trouve D donc
toujours pas derreur. On passe au k-uplet suivant : BCDA. B doit tre suivi de A. Or on
trouve C, donc une erreur. Puis A ou C, or on trouve D, donc une autre erreur. Enfin de
C, mais on trouve A donc une autre erreur.
On peut voir limplmentation de ce modle dans le listing 7.4.
Listing 7.4 Classe de lanalyseur de Forrest
class F o r r e s t ( A nal y z er ) :
name="Forrest"
parameters= "[-w window_size] [-W check_window_size ] [-t threshold]"
def _ _ i n i t _ _ ( s e l f , window_size =4, check_window_size =8, t h r e s h o l d =10, o p t i o n s = [ ] ) :
s e l f . window_size =window_size
s e l f . check_window_size=check_window_size
s e l f . threshold=threshold
A nal y z er . _ _ i n i t _ _ ( s e l f , o p t i o n s )
self
self
self
self
self

. 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

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:W: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 )
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 :

56

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 . 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 . 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 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 . window_size :
del (w [ 0 ] )
f l a g =0
k= s e l f . knowledge ;
i f not k . has_key (w [ 0 ] ) :
k [ w [ 0 ] ] = [ { } ] 2 ( s e l f . window_size 3 1)
f l a g =1
f o r ev i n range ( l e n (w) 3 1):
i f not k [ w [ 0 ] ] [ ev ] . has_key (w[ ev ] ) :
k [w [ 0 ] ] [ ev ] [ w[ ev ] ] = None
s e l f . l earned = s e l f . l earned +1
f l a g =1
if flag :
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
f = s e l f . f ai l ed_w i ndow
w= s e l f . check_window
ws= s e l f . window_size
cws= s e l f . check_window_size
w. append ( event )
i f l e n (w ) > cws :
del (w [ 0 ] )
i f l e n ( f ) > = cws :
del ( f [ 0 ] )
f . append ( 0 )
i f l e n (w ) < cws :
r etu r n 1
f o r e i n range ( ws 3 2):
e v t =w [ cws3 ws+e ]
try :
s e l f . knowledge [ e v t ] [ ws3 23 e ] . has_key (w[ 3 1 ] )

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

Lorsquon parle apprentissage et reconnaissance, on ne peut sempcher de penser


rseaux neuronaux. Nous allons donc voir ce que peut permettre lutilisation de rseaux
neuronaux dans notre cas.
On pourra se rfrer lannexe A pour plus de dtails. Afin dimplmenter ce type
danalyseurs, quelques classes permettant de crer et dutiliser des rseaux neuronaux
de type perceptron multi-couche ont t dveloppes. On peut les trouver en annexe
la section A.4
Pour lapprentissage de sries temporelles par un rseau neuronal, on utilise en
gnral une fentre temporelle de la taille de lentre du rseau, fentre quon fournit
en entre du rseau, comme on peut le voir sur la figure 7.1.
prsent
pass

futur

F IG . 7.1 Utilisation dun rseau neuronal pour une srie temporelle

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

F IG . 7.2 Utilisation de plusieurs entres pour chaque vnement

Il y a galement plusieurs faons de faire dire un rseau de neurones ce quil pense


dun k-uplet dvnements. La mthode la plus simple est davoir un seul neurone de
sortie qui renvoie 1 lorsquil pense que tout est normal et 0 sinon. On peut amliorer
lgrement la chose en rajoutant un neurone de sortie qui lui renvoie 0 si tout va bien
et 1 sinon. On peut voir cette mthode illustre dans la figure 7.2
On peut galement utiliser le rseau pour prdire le prochain vnement en fonction
des vnements passs, comme on peut le voir sur la figure 7.3. Il y a autant de neurones
que de types dvnements. Si un des neurones a une activation trs suprieure tous
les autres, cest que le rseau donne une prdiction avec confiance. Si au contraire tous
les neurones de sortie ont une activation faible et environ du mme niveau, cest que
le rseau est incertain sur ce qui va suivre. Si enfin plusieurs neurones de sortie on une
activation importante, cest quil y a plusieurs candidats.
Comme les analyseurs utilisant des rseaux de neurones ont une structure commune, une classe a t cre pour quils puissent tous hriter de cette spcialisation de
la classe Analyzer. On peut voir son code dans le listing 7.5. Trois mthodes ont t
ajoutes, qui sont en rapport avec les rseaux neuronaux.
build_net() construit le rseau neuronal
build_input() construit, partir de la fentre des vnements passs et de
lvnement tout juste reu, lentre qui va tre donne au rseau.
build_desired() construit, partir de lvnement tout juste reu la sortie
quon dsire obtenir, soit pour apprentissage, soit pour comparaison avec la prdiction.
Listing 7.5 Classe modle des analyseurs base de rseaux neuronaux
class N eural A nal y z er ( A nal y z er ) :
name="NeuralAnalyzer"
parameters= "[-w window-size] [-m max_event] [-t threshold]"
def _ _ i n i t _ _ ( s e l f , window_size = 4 , max_event =50, t h r e s h o l d = 0 . 1 , o p t i o n s = [ ] ) :
s e l f . window_size =window_size
s e l f . max_event =max_event
s e l f . threshold=threshold
A nal y z er . _ _ i n i t _ _ ( s e l f )
self
self
self
self

. 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

F IG . 7.3 Prdiction dun vnement : qui viendra aprs 2, 1, 7 et 5 ?

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

On a ainsi implment deux analyseurs base de rseaux de neurones, quon peut


voir sur les listings 7.6 et 7.7. Le premier correspond au rseau reprsent sur la figure
7.3. Le deuxime donne une prdiction du en sortie, comme le premier, mais prend une
entre du type de celle reprsente sur la figure 7.2. Dans les deux cas, le nombre de
neurones de la couche mdiane a t choisi au hasard. Les coefficients sont initialiss
; 1 o n est le nombre dentres du neurone considr, comme conseill dans [Sm98].
n
Listing 7.6 Classe dun analyseurs base de rseaux neuronaux
class Neural ( N eural A nal y z er ) :
name="Neural"
def _ _ i n i t _ _ ( s e l f , window_size = 4 , max_event =50, t h r e s h o l d = 0 . 1 , o p t i o n s = [ ] ) :
N eural A nal y z er . _ _ i n i t _ _ ( s e l f , window_size , max_event , t h r e s h o l d , o p t i o n s )
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) ] : m
f 1 =Sigmoid ( )
layer1 = [ ]
f o r a i n range (m/ 2 ) :
l a y e r 1 . append ( Neuron ( f 1 , c1 , l e a r n _ r a t e = 0 . 5 ) )
c2 = [ 1 / s q r t (m/ 2 ) ] : (m/ 2 )
f 2 =Sigmoid ( )
layer2 = [ ]
f o r a i n range (m) :
l a y e r 2 . append ( Neuron ( f 2 , c2 , l e a r n _ r a t e = 0 . 5 ) )
r etu r n NeuralNet ( [ l a y e r 1 , l a y e r 2 ] )
def b u i l d _ i n p u t ( s e l f , win , event ) :
i n p u t = [ 0 ] : s e l f . max_event
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 :<: i ) )
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 ) :
d e s i r e d = [ 0 ] : s e l f . max_event
d e s i r e d [ 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

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

Listing 7.7 Classe dun analyseurs base de rseaux neuronaux


class Neural2 ( N eural A nal y z er ) :
name="Neural2"
def _ _ i n i t _ _ ( s e l f , window_size = 4 , max_event =50, t h r e s h o l d = 0 . 1 , o p t i o n s = [ ] ) :
N eural A nal y z er . _ _ i n i t _ _ ( s e l f , window_size , max_event , t h r e s h o l d , o p t i o n s )
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) ] = m
c1=c1 = s e l f . window_size
f 1 =Sigmoid ( )
layer1 = [ ]
f o r a i n range (2 = m) :
l a y e r 1 . append ( Neuron ( f 1 , c1 , l e a r n _ r a t e = 0 . 5 ) )
c2 = [ 1 / s q r t (m) ] = ( 2 = m)
f 2 =Sigmoid ( )
layer2 = [ ]
f o r a i n range (m) :
l a y e r 2 . append ( Neuron ( f 2 , c2 , l e a r n _ r a t e = 0 . 5 ) )
r etu r n NeuralNet ( [ l a y e r 1 , l a y e r 2 ] )
def b u i l d _ i n p u t ( s e l f , win , event ) :
input =[ ]
win=win + [ 0 ] = ( s e l f . window_size ? l e n ( win ) )
f o r e v t i n win :
i n p = [ 0 ] = s e l f . max_event
i n p [ e v t ]=1
input = input +inp
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 ) :
d e s i r e d = [ 0 ] = s e l f . max_event

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

Il permet de dmultiplexer les flux multiplexs en flux lmentaires et instancie un


autre analyseur pour chaque flux lmentaire, comme on peut le voir dans le listing 7.8.
Listing 7.8 Classe du super-analyseur
class SuperAnalyzer ( A nal y z er ) :
name="SuperAnalyzer"
parameters= "-m Model [-M model_parameters ] [-i]"
def _ _ i n i t _ _ ( s e l f , model=None , ignore_new_types =0, model_parm = [ ] , o p t i o n s = [ ] ) :
s e l f . model=model
s e l f . ignore_new_types =ignore_new_types
s e l f . model_parm=model_parm
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 lf . f lu x ={}
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 , "m:M:" )
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 :

64

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 = = "-m" :
try :
s e l f . model=models [ parm ]
except KeyError :
r ai se g e t o p t . e r r o r , "unknown model : %s" % parm
e l i f opt = = "-M" :
s e l f . model_parm= s t r i n g . s p l i t ( parm )
e l i f opt = = "-i" :
s e l f . ignore_new_types =1

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

s . append ( "Total: %i events" % s e l f . count )


s . append ( "Total: %i flux of %i different types"
% ( l e n ( s e l f . f l u x ) , l e n ( s e l f . knowledge ) ) )
r etu r n s
def l o g s ( s e l f ) :
r etu r n "%s %s %s"
% ( repr ( s e l f . l as t t y pe ) , repr ( s e l f . l a s t f l u x ) ,
s e l f . f l u x [ s e l f . l a s t f l u x ] . logs ( ) )

66

Chapitre 8

Tests dintrusion
8.1

Donnes de [FHSL96]

Le fichier sendmail.daemon.int est un fichier contenant les traces de processus


sendmail en utilisation normale. Il est tir des traces utilises dans [FHSL96]. Cest
un fichier texte dont la premire colonne correspond au PID dun processus et dont
la seconde correspond un numro dappel systme. Pour un PID donn, la suite des
appels systmes correspond au droulement du processus. On peut voir un extrait de
ce fichier :
8840
8840
8840
8840
8840

2
66
66
4
138

Nous allons tout dabord lapprendre en utilisant le modle de Forrest :


./eidf.py -l -d sendmail.log -f sendmail.eidf
-s ForrestDisk -S -f smt/sendmail.daemon.int
-m SuperAnalyzer -M -m Forrest

\
\

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

module est partiellement implment

69

On peut aussi tendre cette architecture en lui rajoutant un module de rponse. Ce


module pourrait par exemple prvenir la personne charge de la scurit par alarme,
courier lectronique, tlphone, pager, etc. On pourrait galement rajouter des modules
de contre-mesure, en commenant peut-tre par sinspirer de [SF00] ou de [JMKM99].
Enfin, un frontal graphique peut tre galement utilis par dessus le programme.

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]

J. Anderson. Computer security threat monitoring and surveillance, 1980.


7

[Axe98]

S. Axelsson. Research in intrusion-detection systems : A survey, 1998.


28

[Bac99]

Rebecca Bace. An introduction to intrusion detection and assessment.


Prepared for ICSA.net., 1999. 8

[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]

David S. Bauer and Michael E. Koblentz. NIDX an expert system


for real-time network intrusion detection. In Proceedings of the Computer Networking Symposium, pages 98106, Washington, DC, 1988. IEEE
Computer Society Press. 7

[Can98]

J. Cannady. Artificial neural networks for misuse detection, 1998. 25

[CCDB 99]

S. Cheung, R. Crawford, M. Dilger, J. Frank, J. Hoagland, K. Levitt,


J. Rowe, S. Staniford-Chen, R. Yip, and D. Zerkle. The design of grids :
A graph-based intrusion detection system, 1999. 33

[CDEB 96]

Mark Crosbie, Bryn Dole, Todd Ellis, Ivan Krsul, and Eugene Spafford.
IDIOT - user guide. Technical report, September 1996. 32

[CG]

Hung-Jen Chang and Joydeep Ghosh. Pattern association and retrieval in


a continuous neural system.

[Clo]

Jacques Clot. La rponse imunitaire chez lhomme. Documentation immunologique INAVA. 26

[DBS92]

Herv Debar, Monique Becker, and Didier Siboni. A Neural Network


Component for an Intrusion Detection System. In Proceedings of the
1992 IEEE Computer Society Symposium on Reserach in Security and
Privacy, pages 240250. IEEE, IEEE Service Center, Piscataway, NJ,
1992. 34

[Den87]

Dorothy E. Denning. An intrusion-detection model. IEEE Transactions


on software engeneering, SE-13 :222232, 1987. 7

[FH]

Stephanie Forrest and Steven A. Hofmeyr. Immunology as information


processing. 26
71

[FHS97]

Stephane Forrest, Steven A. Hofmeyr, and Anil Somayaji. Computer immunology. Communications of the ACM, 40(10) :8896, 1997. 26

[FHSL96]

Stephanie Forrest, Steven A. Hofmeyr, Anil Somayaji, and Thomas A.


Longstaff. A sense of self for Unix processes. In Proceedinges of the
1996 IEEE Symposium on Research in Security and Privacy, pages 120
128. IEEE Computer Society Press, 1996. 2, 6, 48, 50, 55, 67

[Fin]

Luca Deri Finsiel. Ntop : a lightweight open-source network ids.

[FJLC 98]

Teresa F.Lunt, R Jagannathan, Rosanna Lee, Sherry Listgarten, David L.


Edwards, Peter G. Neumann, Harold S. Javitz, and Al Valdes. Ides : The
enhanced prototype, a real-time intrusion detection system. Technical
report, SRI Project 4185-010, SRI-CSL-88-12, CSL SRI Internationnal,
Computer Science Laboratory, SRI Intl. 333 Ravenswood Ave., Menlo
Park, CA 94925-3493, USA, October 1998. 29

[Gib84]

William Gibson. Neuromancer. 1984. 16

[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]

Dug Song Gus. nidsbench - a network intrusion detection system test


suite.

[HB95]

L. Halme and R. Bauer. Aint misbehaving - a taxonomy of antiintrusion


techniques, 1995. 11

[HF00]

Steven A. Hofmeyr and Stephanie Forrest. Architecture for an artificial


immune system. Evolutionary Computation, 8(4) :443473, 2000. 26

[HFS98]

S. Hofmeyr, S. Forrest, and A. Somayaji. Intrusion detection using sequences of system calls, 1998.

[Hol75]

John H Holland. Adaptation un Natural and Artificial Systems. PhD


thesis, University of Michigan, Ann Arbor, 1975. 26

[HWHM98] G. Helmer, J. Wong, V. Honavar, and L. Miller. Intelligent agents for


intrusion detection, 1998. 24
[HWHM00] G. Helmer, J. Wong, V. Honavar, and L. Miller. Lightweight agents for
intrusion detection, 2000. 24
[IKP95]

Koral Ilgun, Richard A. Kemmerer, and Phillip A. Porras. State transition


analysis : A rule-based intrusion detection approach. Software Engineering, 21(3) :181199, 1995. 31

[Ilg91]

K. Ilgun. Implementation of ustat audit data preprocessor, 1991. 31

[Ilg93]

Koral Ilgun. USTAT : A real-time intrusion detection system for UNIX.


In Proceedings of the 1993 IEEE Symposium on Research in Security and
Privacy, pages 1628, Oakland, CA, 1993. 31

[JMKM99] W. Jansen, P. Mell, T. Karygiannis, and D. Marks. Applying mobile


agents to intrusion detection and response, 1999. 24, 70
[JMKM00] W. Jansen, P. Mell, T. Karygiannis, and D. Marks. Mobile agents in intrusion detection and response, 2000. 24
[Lan]

Terran Lane. Machine learning techniques for the domain of anomaly


detection for computer security.

72

[LN97]

D. Lane and P. Nolan. Application of pattern matching techniques to


example based diagnosis. In R. A. Adey, G. Rzevski, and R. Teti, editors,
Applications of Artificial Intelligence in Engineering XII. [Full papers on
CD ROM], pages 11314. Comput. Mech. Publications, Southampton,
UK, 1997.

[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]

Teresa F. Lunt. Automated audit trail analysis and intrusion detection :


A survey. In Proceedings of the 11th National Computer Security Conference, Baltimore, MD, 1988.

[Lun90]

Teresa F. Lunt. IDES : An Intelligent System for Detecting Intruders. In


Proceedings of the symposium : Computer Security, Threat and Countermeasures, Rome, Italy, 1990. 29

[M]

Ludovic M. Scurit des systmes dinformation. Transparents de


cours.

[M96]

Ludovic M. Genetic algorithms , a biologically inspired approach for


security audit trails analysis, 1996. 27

[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]

Stephen Northcutt and Judy Novak. Network Intrusion Detection. An


Analysts Handbook. New Riders, 2000.

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]

Nicholas J. Puketza, Kui Zhang, Mandy Chung, Biswanath Mukherjee,


and Ronald A. Olsson. A methodology for testing intrusion detection
systems. Software Engineering, 22(10) :719729, 1996.

[Roe99]

Martin Roesch. Snort : Lightweight intrusion detection for networks. In


Proceedings of LISA 99, pages 229238, 1999.

[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]

Jir Sma. Introduction to neural networks. Technical report, institute of


Computer Science, Academy of Sciences of the Czech Republic, 1998.
62, 76

[Sma88]

Stephen E. Smaha. Haystack : An Intrusion Detection System. In Fourth


Aerospace Computer Security Applications Conference, pages 3744,
Tracor Applied Science Inc., Austin, TX, 1988. 7, 28

[SSHW88] M. M. Sebring, E. Shellhouse, M. E. Hanna, and R. A. Whitehurst. Expert


system in intrusion detection : A case study. In Proceedings of the 11th
National Computer Security Conference, pages 7481, 1988. 7, 29
[Syv94]

Paul Syverson. A taxonomy of replay attacks. In Computer Security


Foundations Workshop VII. IEEE Computer Society Press, 1994.

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

On introduit lerreur totale E sur une squence dapprentissage KNMO x P MO d L o OM d est


la sortie dsire lorsque lentre est MO x :
E K MO w L
H

1
2

jI Y

Q
K

y j K MO w P MO x
L

d jR

(A.3)

Si MO w S tT est le vecteur des coefficients du rseau au temps discret t, on calcule ce


vecteur au temps t U 1 grace :
MO w S

tV 1T

MO w S

tT

MMO
grad
E MO w S tT

76

(A.4)

o W7X 0 Y 1 Z est le taux dapprentissage.

A.2.2

Calcul

En projetant lquation A.4, on a :


t\ 1]

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)

Soit L0 ^ Y . On dfinit par rcurrence Lk pour k d 0 par Lk ^fe j g jhji Lk k


existe k0 tel que Lk0 contient tous les nuds car le graphe est acyclique.
Si j

. Il

L0 alors on a directement partir de A.3


E
y j

Si j W Lk _ Lk k
On a alors

yj _ dj

(A.9)

avec k d 0, on suppose quon sait calculer


E
y j

On sait donc calculer

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 .

Algorithme utilis pour le perceptron multicouche

Soit c le nombre de couches du perceptron. On appelle L1 ^oe N11 YpppY N1n1 l la


couche des neurones dentre, Lc ^qe Nc1 YpppY Ncnc l la couche des neurones de sortie, les
_s`
Li Y 1 r i r c tant les couches intermdiaires. On appelle W
i j le vecteur des coefficients
dentre de Ni j .
Soit _` x le vecteur dentre et _` y le vecteur de sortie.
Soit n0

dim _` x b . On peut remarquer que


^
t

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

On appelle li la fonction qui, un vecteur dentre z{ Xi associe le vecteur de sortie


tel que sa kieme coordonne Yik | Nik } z{ Xi ~ W
zx{ ik  .
On a donc {z y
|

} lc ~~~

l1  } z{ x  .

Alg. A.1 Calcul de z{ y par le rseau (algorithme de feedforward)


X
z{ 0

z{

for k | 1 to c do
X
z{ k

lk } X
zz
k {

1

end for
{z y

X
z{ c

Une fois z{ y obtenu, on calcule lerreur par rapport la sortie dsire z{ d : E | 12 y


z
d 22 . Connaissant son erreur ei j , un neurone Ni j peut rajuster ses propres coefficients et
peut communiquer aux neurones qui le prcdent la part de responsabilit que chacun
avait pour son erreur, cest--dire calculer un vecteur rz zi z1{ j de dimension ni 1 tel que
sa kieme coordonn r i 1 j k soit la responsabilit du neurone N i 1 k dans lerreur du
neurone Ni j .

A.4

Implmentation

Limplmentation des rseaux neuronaux sest galement faite de faon oriente


objet, comme on peut le voir sur le listing A.1.
Tout dabord, un objet implmentant une fonction de transfert est cr. Il propose
la mthode sigma(x) pour calculer cette fonction de transfert au point x et la mthode
dsigma(x) pour calculer la valeur de sa drive au point x.

78

Lorsquun neurone est instanci, il prend en paramtre une instance de fonction


de transfert et une liste de coefficients. Plusieurs neurones peuvent partager la mme
instance dune fonction de transfert. La taille de la liste des coefficients fixe le nombre
dentres du neurone. Il met ensuite disposition une mthode pour calculer sa valeur
dactivation en fonction de valeurs dentre et une mthode pour apprendre une valeur
de sortie pour une liste de valeurs dentre donne.
Pour instancier un rseau de neurones, il faut passer en paramtre une liste de listes
dinstances de neurones, chaque liste de neurones tant une couche du perceptron.
On doit bien videment avoir comme condition que le nombre dentres de chaque
neurone de la couche n est gal au nombre de neurones de la couche n 1. Linstance
de rseau de neurone permet, comme un neurone, de calculer la sortie associe une
entre donne et galement dajuster les coefficients de chaque neurone du rseau par
rtro-propagation partir dune entre et dune sortie dsire.
Listing A.1 Implmentation de rseaux neuronaux
from math import exp
import Gnuplot
from Numeric import
##################################################
# Classes t o implement t r a n s f e r t f u n c t i o n s
# t o be loaded i n a neuron
class T r a n s f e r t F u n c :
def _ _ i n i t _ _ ( s e l f ) :
pass
def sigma ( s e l f , x ) :
r etu r n x
def dsigma ( s e l f , x ) :
r etu r n 1
class H a r d L i m i t e r ( T r a n s f e r t F u n c ) :
def _ _ i n i t _ _ ( s e l f ) :
TransfertFunc . __i ni t __ ( s e l f )
def sigma ( s e l f , x ) :
r etu r n x > = 0
def dsigma ( s e l f , x ) :
# t he d i r a c peak i s m i s s i ng !
r etu r n x==0
class Sigmoid ( T r a n s f e r t F u n c ) :
def _ _ i n i t _ _ ( s e l f , k = 1 ) :
TransfertFunc . __i ni t __ ( s e l f )
s e l f . k=k
def sigma ( s e l f , x ) :
try :
den =(1+ exp( s e l f . k x ) )
r etu r n 1 / den
except O v e r f l o w E r r o r :
p r i n t "Overflow in sigma. return 0"
r etu r n 0
def dsigma ( s e l f , x ) :

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

Le modle de Markov cach

Un modle de Markov cach (HMM) est compos de


un ensemble de N tats Q q1  qn . Ltat du systme au temps t appel st .
une matrice de probabilit de transition dtats A ai j 1 i j N ou ai j est la
probabilit que ltat st 1 soit q j si st qi , ie ai j P st 1 q j st qi .
un ensemble de M symboles observables V o v1  vM et une distribution
de probabilit discrte sur ces symboles pour chaque tat. Cest--dire que la
distribution b j donne un temps t la probabilit dobserver un symbole vk quand
le systme est dans ltat q j : b j k P vk observ st q j
une distribution initiale des tat i o i P s1 qi , exprimant la probabilit que le systme commence ltat qi .
Un modle de Markov cach est entirement dfini par les trois paramtres
A B .
Il y a trois problmes fondamentaux assicis aux HMM :

Probabilit dobservation : tant donns une squence dobservations O O1  OT


et un modle , calculer la probabilit dobserver cette squence dobservations
avec ce modle, P O
Slection de squences dtats : tant donns une squence dobservations O O1  OT
et un modle , calculer la squence dtats s1 s2  sT la plus probable (selon
certains critres doptimalit) de produire O.
Entrainement du modle : tant donns une squence dobservations O O1  OT ,
calculer le modle qui maximise P O

82

Annexe C

Le code : morceaux choisis


C.1

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