Outils statistiques pour la fouille de fichiers
de logs
Yves Agostini
RSSI - Université de Lorraine
34 Cours Léopold
54 000 Nancy
Résumé
Après un rapide rappel des notions élémentaires de statistiques puis une introduction au logiciel opensource
R, cet article abordera la fouille de données de divers types de fichiers de traces à l’aide de méthodes
statistiques.
Les objectifs sont la recherche d’évènements anormaux à titre préventif ou la recherche d’indicateurs de
compromission.
Nous verrons que l’approche statistique est de nature forcément imprécise et qu’il n’y a pas de méthodologie
absolue dans la conduite d’une fouille de données. Cependant les résultats obtenus permettent de mettre en
œuvre des procédures de détection complémentaires au simple comptage d’évènement.
Mots clefs
Data Mining, Sécurité, Big Data, log, statistiques
1 Introduction
Il existe depuis longtemps un grand nombre d’outils pour traiter les fichiers de logs. On peut citer le
vénérable awstats, largement déployé dans la communauté d’administrateurs systèmes. Piwik pour les
serveurs web, qui clone les fonctionnalités de GoogleStats, ou encore le plus moderne et très performant
Kibana capable d’exploiter les données gérées et stockées par Logstach et ElasticSearch. Cependant
ces outils utilisent essentiellement du comptage d’évènements. De la même façon des outils d’alertes très ré-
pandus comme logwatch ou fail2ban se limitent à la détection d’évènements par expression régulière et
comptage. Les seuils d’alertes y sont positionnés empiriquement. Les évènements furtifs à l’origine d’inci-
dents de sécurité se retrouvent souvent masqués dans le grand nombre d’évènements réguliers et récurrents.
Cet article vise à aborder un certain nombre de méthodes statistiques pour analyser des journaux d’évène-
ments volumineux. Il s’agit dans un premier temps d’analyser des fichiers aussi divers que des logs ldap, des
logs de connexions, des logs d’attaques en force brute. Les travaux en cours permettront peut-être d’aborder
les logs de messagerie ou de flux netflow.
Ces analyses ont pour objectif principal de détecter les évènements potentiellement anormaux lors d’une
étude préventive de la qualité des services. Ces évènements peuvent être des indicateurs de compromission.
Cette fouille de données est eectuée sur des données statiques. Les résultats des ces fouilles peuvent
permettre d’implémenter des algorithmes de détection en temps réel.
JRES 2015 - Montpellier 1/18
L’essentiel des opérations d’analyse sont réalisées avec le framework opensource de statistiques R. Ce
framework est largement utilisé dans le monde scientifique, dans des domaines aussi divers que l’archéolo-
gie, la biologie, l’analyse financière ou la représentation de données géographiques[1]. Il existe une commu-
nauté très active avec de très nombreux forums, blogs, tutoriaux. Cependant la diversité des thèmes traités
fait qu’il est dicile de trouver une information adaptée à nos problématiques d’administrateurs systèmes.
2 Notions élémentaires de statistiques
Nos pratiques du numérique nous donnent rarement l’occasion de réutiliser les notions de statistiques ac-
quises lors de nos formations généralement scientifiques. De nos jours, on retrouve facilement sur Internet
la longue liste de formules mathématiques que nous avons plus ou moins péniblement assimilé dans notre
jeunesse. Je ne les répèterai pas ici. Je vais plutôt illustrer les notions de base comme la moyenne, la mé-
diane, la covariance ou encore la validité des tests à partir d’un exemple concret qui ne nécessitera pas de
long calculs.
Notre exemple est constitué de trois jeux de notes et de deux groupes d’étudiants. Vous pouvez imaginer
qu’il s’agit de groupes d’étudiants à qui vous donnez des cours ou des notes de vos jumeaux (private joke
inside).
Le premier jeu de notes est constitué des valeurs : 1, 9, 10, 11, 19. Le second, des valeurs : 8, 9,
10, 11, 12. Le troisième contient : 4.0, 4.5, 5.0, 5.5, 6.0.
Faites une petite pause et observez bien les caractéristiques de ces valeurs. Elles sont volontairement imag-
inaires pour être faciles à retenir et permettre des calculs «de tête».
Le souvenir de vos propres résultats scolaires vous permet de facilement calculer les moyennes de ces trois
séries de notes. À partir de la seconde série : la moyenne de 8 et 12, est 10. De la même façon la moyenne
de 9 et 11, est 10 et si on obtient encore un 10 la moyenne générale est de 10. Cela correspond à la formule
de la somme des notes divisée par leur nombre. Les moyennes des trois séries de notes sont alors : 10, 10
et 5.
Il est maintenant temps de s’interroger sur l’utilité de cette information et plus particulièrement quelle
réalité elle représente.
Si les valeurs sont imaginaires, je vous ai volontairement présenté le problème comme il se présente souvent
dans le monde réel : le contexte est mal défini et incomplet. On ne sait pas à quel groupe d’étudiant
appartient chaque série de notes, ni si la troisième série est notée sur 10 ou sur 20. Nous allons étudier ces
valeurs pour proposer des hypothèses qui permettent de préciser le contexte de ces résultats notés.
Une première réponse naïve consiste a interpréter littéralement les valeurs des moyennes trouvées : le
premier groupe a 10 de moyenne, le second 5.
Cette approche littérale pose un problème supplémentaire. Imaginons une erreur de saisie. L’opérateur a
saisi 190 au lieu de 19 : la moyenne devient alors 44.2. Nous ne sommes plus capable de proposer une
réponse à notre problème d’identification de ces séries de notes.
La solution pour éviter ce nouveau problème est d’utiliser la «médiane». C’est un calcul de moyenne après
avoir exclu les valeurs extrêmes 1. On obtient alors 10. La médiane est alors une meilleure estimation que
la moyenne pour nos valeurs. La médiane est plus robuste que la simple moyenne.
Observons maintenant attentivement les deux séries qui ont 10 de moyenne (ou de médiane). On se rend
rapidement compte que pour une même moyenne la dispersion des valeurs est très diérente. Utiliser seule-
ment la valeur obtenue par la moyenne ne permet pas de s’en rendre compte.
1. Il s’agit ici de l’usage de la médiane et non de sa définition mathématique
JRES 2015 - Montpellier 2/18
L’«écart type» (ou «déviation standard») est une bonne mesure de la dispersion des valeurs. L’écart type
des 3 valeurs : 1, 10, 19 est 9. L’écart type des 3 valeurs : 8, 10, 12 est de 2. Comme l’écart type est une
distance des diverses dispersions (racine carré de la «variance» qui est une moyenne des dispersions au
carré 2), on obtient respectivement pour nos trois séries de 5 valeurs : 6.40, 1.58, 0.79. La première
série a un écart type beaucoup plus important que les deuxième et troisième séries. On peut alors proposer
comme hypothèse que la première série appartient au premier groupe et que les deux séries suivantes
pourrait appartenir au second groupe. Il faut cependant encore s’interroger sur la diérence entre les
écarts types des deux dernières séries.
Les écarts types sont diérents parce qu’ils sont calculés à partir des valeurs brutes de nos séries. Cependant
nous ne savons pas si la troisième série est notée sur 10 ou sur 20. On pourrait «centrer» ces valeurs avant
traitement (les uniformiser sur 20). Nous allons plutôt calculer leur «corrélation».
La corrélation est calculée à partir de la covariance : une comparaison entre les variances des valeurs
centrées. Il faut alors calculer les corrélations entre chaque série de valeurs deux à deux 3.
La corrélation entre notre première et seconde série est identique à la corrélation entre la première et le
troisième série. Sa valeur est de 0.94. La corrélation entre la seconde et troisième série est de 1: nous
avons une corrélation totale. Il est alors fort probable que notre première série de notes appartient au
premier groupe et que les deuxième et troisième séries appartiennent au second groupe, contrairement à
ce que laissait imaginer le seul examen des moyennes. Nous pouvons alors interpréter le second groupe
comme un groupe d’étudiants aux résultats homogènes. Le premier groupe étant un groupe contenant des
étudiants ayant de très bon résultats avec des étudiants ayant de très faibles résultats.
Ces premières notions nous permettent déjà de nous rendre compte qu’une étude statistique des valeurs col-
lectées nous apporte des informations complémentaires sur leur contexte. Cependant il apparaît également
qu’un certain nombre de précautions doivent impérativement être pris compte :
Un seul critère pour examiner une série de valeurs n’est pas susant. Une moyenne sans écart type
n’a pas beaucoup de sens (comme les multiples sondages qui essaient d’illustrer «ce que pensent les
français»).
Il faut impérativement une connaissance du domaine traité pour choisir les meilleurs outils de traite-
ment. La médiane serait un mauvais choix s’il n’y pas de risque d’erreur de saisie. Inversement, il
peut être nécessaire de corriger les données traitées pour enlever d’éventuelles valeurs aberrantes.
La corrélation masque plusieurs traitements mathématiques. Dans notre cas, en centrant implicite-
ment les valeurs de la troisième série, nous émettons l’hypothèse qu’il s’agit de notes sur 10 et non
sur 20. Il ne faut jamais oublier que la corrélation reste un indicateur et n’implique pas forcément une
causalité.
L’absence ou le manque de valeurs doivent amener à une absence de décision plutôt qu’à une inter-
prétation littérale des valeurs calculées.
Lorsque l’on étudie deux séries de valeurs d’autres outils sont régulièrement utilisés. L’outil le plus courant
est la «régression linéaire» : il s’agit de trouver la droite qui passe au mieux entre les valeurs de notre
distribution de données. Ainsi si l’on eectue une régression linéaire entre nos séries de valeurs corrélées,
on trouve très logiquement une droite de coecient directeur 2.0 (la «pente» ou «slope» en anglais) et une
ordonnée à l’origine de 0(«décalage» ou «intercept» en anglais). 4
La régression linéaire est un modèle de distribution de données. D’autres modèles sont possibles. Par ex-
emple, lorsque l’on dispose de données qualitatives (présence ou absence d’un attribut) au lieu de données
quantitatives comme dans notre exemple, on peut imaginer que le modèle est une distribution aléatoire
2. Il est inutile de retenir cette formule qui est essentiellement destinée à simplifier les manipulations mathématiques
3. On peut représenter ces résultats par une matrice de corrélations symétrique sur la diagonale
4. Attention : en France on représente traditionnellement une droite sous la forme y=ax+balors que le monde anglo-saxon
utilise plutôt y=a+bx
JRES 2015 - Montpellier 3/18
normale. Divers tests peuvent être calculés pour évaluer la correspondance entre nos données et le modèle.
On obtient une probabilité de correspondance («p-value»). Le test du χ2est souvent utilisé pour des valeurs
qualitatives. On peut utiliser une étude de la variance (ANNOVA) pour évaluer une régression linéaire. Ces
modèles vont permettre de détecter les valeurs suspectes.
Cette introduction aux statistiques n’a pas pour objectif d’être un cours complet. Nous avons dorénavant
susamment d’éléments pour comprendre les enjeux statistiques des exemples de traitements de fichiers
de traces.
3 Logiciel R
Rest un logiciel opensource largement utilisé dans des communautés très diverses. Comme il s’utilise
principalement en ligne de commande, à partir de son interface shell, cela doit plaire à notre communauté
d’administrateurs systèmes. On y retrouve la possibilité de rappeler l’historique de ses commandes, de
les copier dans une fichier texte ou encore de créer un script commenté. Il s’installe facilement sur les
distributions linux à partir de dépôts de paquets.
Vous trouverez de nombreux tutoriels pour vous initier à R[2]. Je ne présenterai dans cet article que les
éléments nécessaires à la compréhension des exemples de cet article.
3.1 Type de données
Rest un langage interprété où il n’est pas nécessaire de déclarer ses variables. Le premier élément inhabituel
est l’opérateur d’aectation qui est <-. Le symbole =est plutôt utilisé pour les aectations des paramètres
de fonction. Ainsi, a<-5+2aecte la valeur 7 à la variable a.
Dans Rtout est objet et Rmanipule des vecteurs d’objets de même type. On peut noter que l’indice des
vecteurs commence à 1contrairement au 0des langages dérivés de C.
> notes1 <- c(1, 9, 10, 11, 19) # c() concatène les valeurs
> mode(notes1) # type de donn é es
[1] "numeric "
> length ( notes1 ) # longueur du vecteur
[1] 5
> notes1 [3] # accès à la valeur d indice 3
[1] 10
> label <- c(aa ,bb ,42) # un vecteur de chaine de caract è res
> mode ( label)
[1] "character"
> label [2] # accès à la valeur d ’ indice 2
[1] "bb"
> label [3]
[1] "42"
> mode ( label [3]) # 42 n est pas numé rique
[1] "character"
Les tableaux peuvent avoir de multiples dimensions. Nous allons voir ci-dessous quelques exemples de
manipulation d’un tableau standard à deux dimensions avec la fonction matrix. Les paramètres nrow et
ncol définissent la taille du tableau. Les valeurs sont créés par la séquence 1:6. L’option binaire byrow
définit l’ordre d’aectation.
JRES 2015 - Montpellier 4/18
> t <- matrix (1:6, nrow = 2, ncol = 3, byrow = TRUE) # affectation
> t # visualisation
[,1] [,2] [ ,3]
[1 ,] 1 2 3
[2 ,] 4 5 6
> co lna mes (t) <- c(’ aa ’ ,’ bb ’ ,cc ’) # d éfini tio n du nom des c olo nnes
> t # visualisation
aa bb cc
[1 ,] 1 2 3
[2 ,] 4 5 6
> t[2 ,] # accès par ligne
aa bb cc
456
> t[,1] # accès par colonne
[1] 1 4
> t[,aa ] # acc ès par le nom de la colonne
[1] 1 4
Les listes permettent de créer des vecteurs contenant des modes (ou types) diérents.
> l <- list (1:6 , ’a ’,’ b) # li ste c ont enan t des num ériques et des c ara ct ères
> names (l) <- c(r,s,t) # nommage des éléments
> l
$r
[1]123456
$s
[1] "a"
$t
[1] "b"
> mode (l) # type liste
[1] "list"
> mode ( l$r) # sous type numeric
[1] "numeric "
> l$t # acces à t
[1] "b"
> l$r [3] # accès au 3ème élément de r
[1] 3
Pour finir les data.frame permettent de créer des tableaux contenant de données de modes (ou types)
variables 5. Notez à la fin de l’exemple ci-dessous quelques exemples des fonctions statistiques les plus
courantes.
> df <- d ata . frame ( notes2 = c (8 ,9 ,10 ,11 ,12) , n ote s3 = c (4 ,4.5 ,5 ,5.5 ,6) ,
el = c(a,b,c,d,e ))
> df
notes2 notes3 el
1 8 4.0 a
2 9 4.5 b
3 10 5.0 c
5. Le paquet data.table permet une conversion des data.frame. Il apporte un gain de performance sur les gros volumes de données
et une syntaxe de sélection simplifiée
JRES 2015 - Montpellier 5/18
1 / 18 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !