• 8 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 14/08/2024

Sélectionnez les logs à analyser

Lorsque vous monitorez le réseau d’une entreprise, il est nécessaire d’effectuer une collecte de logs pour comprendre et identifier des événements sur le réseau. Cette centralisation est primordiale dans le maintien opérationnel du système d’information.

Logs Syslog bruts d’un serveur Linux
Logs Syslog bruts d’un serveur Linux

Les logs peuvent contenir des messages entre différents utilisateurs d'un logiciel de communication, par exemple, mais également des connexions réseau, des actions de création ou de suppression de fichier, des tentatives d’accès, etc.

Le tableau suivant présente une vue d’ensemble des logs que l’on peut retrouver sous Linux. La plupart des logs sont stockés dans /var/log/. Il peut y avoir des logs supplémentaires en fonction des programmes que vous utilisez.

Emplacement

Contenu

/var/log/alternatives.log

Les logs d'update-alternatives.

/var/log/apache2/*

Les logs du serveur HTTP Apache2.

/var/log/apt/*

Les logs d'apt. Tous les paquets installés avec apt-get install, par exemple.

/var/log/aptitude

Les logs d'aptitude. Contient toutes les actions demandées, même les abandonnées.

/var/log/auth.log

Les informations d'autorisation de système. Y sont consignées toutes les connexions (réussies ou pas), et la méthode d'authentification utilisée.

/var/log/bind.log

Les logs du serveur de nom BIND9, s'il sont activés.

/var/log/boot.log

Les informations enregistrées lors du démarrage du système. Ce fichier n'est pas activé par défaut.

/var/log/btmp

Semblable à /var/log/wtmp. Affiche les connexions/déconnexions au système # lastb alors que # last lira le fichier /var/log/wtmp.

/var/log/cups/*

Les logs du système d'impression CUPS.

/var/log/cron

Les informations sur les tâches cron. Enregistrement à chaque fois que le démon cron (ou anacron) commence une tâche.

/var/log/daemon.log

Les informations enregistrées par les différents daemons (processus) de fond qui fonctionnent sur le système.

/var/log/debug

Les logs de debugging.

/var/log/dmesg

Les messages du noyau Linux depuis le démarrage.

/var/log/dpkg.log

Les informations sur les paquets installés ou retirés en utilisant la commande dpkg.

/var/log/fail2ban.log

Les Ban/Unban et infos sur le programme (Error, Info, etc.) si Fail2ban est installé.

/var/log/faillog

Les échecs de connexion. # faillog -u root.

/var/log/kern.log

Les informations enregistrées par le noyau. Utile pour déboguer un noyau personnalisé, par exemple.

/var/log/lastlog

Les informations de connexion récente de tous les utilisateurs. Ce n'est pas un fichier ASCII. Vous devez utiliser la commande lastlog pour afficher le contenu de ce fichier.

/var/log/mail.*

Les informations du serveur de messagerie. Par exemple, sendmail enregistre des informations sur tous les éléments envoyés dans ces fichiers.

/var/log/messages

Les messages du système, y compris les messages qui sont enregistrés au démarrage. Beaucoup de choses sont enregistrées dans /var/log/messages, y compris le courrier, cron, daemon, kern, auth, etc.

/var/log/syslog

Tous les messages, hormis les connexions des utilisateurs. Plus complet que /var/log/messages.

/var/log/user.log

Les informations sur tous les journaux de niveau utilisateur.

/var/log/wtmp

Toutes les connexions et déconnexions: last -f /var/log/wtmp.

/var/log/Xorg.x.log

Les messages du serveur X. N'existe pas sur un serveur. Le petit x est le n° d'instance du serveur X.

La gestion de votre collecte de logs consistera à mettre en place la journalisation et la centralisation. La journalisation est la mise en place d’un système permettant la remontée automatique de logs. L’envoi de vos logs à un point central décrit la centralisation, qui vous donnera une vision globale des événements du système d’information.

Cette gestion des logs a plusieurs objectifs :

  • Obtenir un état général du SI et identifier des événements anormaux. 

  • Détecter les intrusions, par exemple au moyen de solution IPS/IDS ou de règle SIEM. 

  • Retracer l’historique et les actions d’un attaquant dans le cadre d’une investigation forensic. 

  • Visualiser les actions du SI, définir des statistiques et identifier les signaux faibles. 

Mais avant que vous définissiez une supervision et détectiez les événements de sécurité, il est nécessaire de savoir identifier les logs d’intérêt en fonction des systèmes. Cela va optimiser votre collecte de logs, et vous évitera la remontée de logs inutiles.

Identifiez les logs d’intérêt pour optimiser votre collecte

Le graphique présente trois types de log : les logs web, réseau et système

La première étape pour monitorer la sécurité est d’identifier les logs d’intérêt qui permettent la détection d'événements suspects. Par exemple, si vous recevez un log d’une connexion au serveur Active Directory en dehors des heures de travail, cela peut être un comportement anormal auquel vous devez réagir ! Le rôle du monitoring est justement d’identifier ce type d'événement.

Toutefois, vous n’êtes pas obligé de monitorer tout le réseau, car cela provoquerait une surconsommation des ressources du SI, et n’apporterait pas forcément de logs pertinents.

Quels sont les logs pertinents à monitorer ?

La liste ci-dessous propose des logs d’intérêt à monitorer dans le cadre de la surveillance de sécurité du SI, également recommandée par l’ANSSI. 

  • Authentification.

  • Gestion des comptes et des droits.

  • Accès aux ressources.

  • Modification des stratégies de sécurité.

  • Activité des processus.

  • Activité des systèmes.

Cette liste est un bon point de départ. Ainsi, vous éviterez un nombre ingérable de logs dans votre collecte – mais n’hésitez pas à éventuellement ajouter des logs qui sont pertinents à votre SI, même s’ils ne figurent pas dans cette liste.

En cas d'incident de sécurité ou simplement dans le cadre de la surveillance journalière, il peut être intéressant d'explorer les logs manuellement, ce qu’on appelle également le parsing de logs.

Pratiquez le parsing de logs

La mise en place de système de monitoring de logs n’est pas toujours opérationnelle en entreprise, et vous serez parfois obligé d’analyser le contenu des logs au moyen d’outils en ligne de commande, c’est-à-dire faire du parsing de logs. En fait, cela est très important pour ne pas être dépendant d’un unique système.

Il existe une multitude d’outils pour vous aider à parser des logs. Dans cette section, nous allons voir quelques outils qui permettent d'extraire les informations intéressantes d’un fichier de logs. Pour tester les commandes, vous pouvez simplement vous munir d’une machine Linux. 

Extrayez des mots avec grep

Commençons par l’outil grep, qui permet d’extraire un mot ou l'expression que vous souhaitez. C’est un utilitaire en ligne de commande pour rechercher des ensembles de données dans un fichier brut, au moyen de regex.

En informatique, une regex (expression régulière), est un ensemble de caractères définissant un schéma, et permettant l'identification d'un élément dans un fichier donné, comme une adresse IP, un mot, ou tout autre élément.

Pour utiliser grep, prenons un fichier texte contenant les éléments suivant :

test
This is my file
127.0.0.1
root/password
12/11/2024
12:32
82%
root/password2
12345
TOTO
OpenClassrooms

Grep permet très simplement d’extraire les lignes contenant le mot ou l’expression que l’on souhaite. Dans cet exemple, nous allons extraire le mot test, puis le mot root :

$grep "test" file.txt
test
$grep "root" file.txt
root/password
root/password2

Il est possible d’obtenir le numéro de ligne avec l’option “-n“. Vous verrez que c’est très pratique pour un fichier contenant des milliers de lignes :

$grep -n "root" file.txt
4:root/password
8:root/password2

Grep peut également vous afficher tous les éléments ne contenant pas l’expression choisie, avec l’option “-v” :

$grep -v "root" file.txt
test
This is my file
127.0.0.1
12/11/2024
12:32
82%
12345
TOTO
OpenClassrooms

Vous pouvez compter le nombre d’occurences d’une chaîne de caractères dans le fichier, avec l’option “-c” :

$grep -c "root" file.txt
2
$grep -c "OpenClassrooms" file.txt
1

L’option “-l” ’affichera les fichiers contenant les expressions si vous faites une recherche sur plusieurs fichiers :

$grep -l "OpenClassrooms" *
file.txt

L’option “-i” permettra d’ignorer la casse :

$grep -i "toto" file.txt
TOTO

Finalement, vous pouvez aussi utiliser les regex avec grep et l’option “-E” pour extraire les informations intéressantes – par exemple, une adresse IP :

$grep -E "^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$" file.txt
127.0.0.1

Découpez les lignes d'un fichier avec awk

Awk est un autre utilitaire disponible sur n’importe quel système Linux. Avec awk, vous pouvez parser vos fichiers de logs de manière approfondie.

Cet utilitaire découpe chaque élément d’une ligne d’un fichier et les stocke dans une variable : $1, $2, $3...

Reprenons notre fichier texte ci-dessus, et affichons le premier élément de chaque ligne en rentrant la commande suivante :

$awk '{print $1}' file.txt
test
This
127.0.0.1
root/password
12/11/2024
12:32
82%
root/password2
12345
TOTO
OpenClassrooms

Sauriez-vous comment afficher le deuxième élément de chaque ligne ? Eh bien, en remplaçant $1 par $2, tout simplement :

$awk '{print $2}' file.txt
is

Ici, seule la ligne 2 contient plus de 2 éléments : "This is my file".

Maintenant que vous avez compris le jeu, je vous montre comment utiliser des fonctionnalités plus avancées. Prenons à présent un fichier de logs sur votre système  /var/log/syslog , et rentrons cette commande :

$awk 'BEGIN { FS=" ";c=0 } $5 kern { c++ } END{print c}' syslog
1917

Avec cette commande, nous affichons le nombre de lignes contenant le mot clé correspondant au message provenant du noyau “kern”.  Décodons  cette commande ci-dessous :

  • BEGIN   : le début de l’expression ;

  • { FS=” “ ; c=0 }   : le bloc d’instructions ;

  • FS   : File Separator ;

  • c=0   :  compteur ;

  • $5 kern   : condition qui demande à la console de chercher le mot clé “kern” dans le champ 5 ;

  • { c++ }   : incrémentation de la variable c ;

  • END{print c}   : affichage de la variable c.

Dans mon exemple, vous voyez donc que le mot clé kern apparaît 1 917 fois dans le cinquième élément des lignes !

Pour afficher toutes les lignes contenant des messages kernel, il est possible de rentrer la commande suivante :

$awk '/kern/ {print}' syslog
Nov  1 13:04:02 OCserv kernel: [  196.883605] SGI XFS with ACLs, 
security attributes, realtime, no debug enabled
Nov  1 13:04:02 OCserv kernel: [  196.900419] JFS: nTxBlock = 
8192, nTxLock = 65536
Nov  1 13:04:02 OCserv kernel: [  196.914335] ntfs: driver 2.1.32 
[Flags: R/O MODULE].
Nov  1 13:04:02 OCserv kernel: [  196.933807] QNX4 filesystem 
0.2.3 registered.

Affichez en temps réel la sortie de logs avec tail

Quand vous devez surveiller les processus en cours, tels que le redémarrage d'un service ou le test d'une modification, tail est un bon outil à connaître.

Tail est un autre outil en ligne de commande qui affiche les dernières modifications d'un fichier. Vous pouvez également l’utiliser pour afficher les dernières lignes d'un fichier, ou l'associer à grep pour filtrer la sortie d'un fichier journal.

L’option “-f ” permet d’afficher en temps réel la sortie de logs :

$ tail -f syslog

Il existe d’autres utilitaires pour le parsing de logs. Pour en savoir plus, je vous invite à vous documenter sur cut, uniq, sed ou encore sort ; j'ai réalisé un aide-mémoire que vous pourrez garder sur votre bureau, disponible ici.

En résumé

  • Un log est un fichier qui enregistre des événements qui se produisent sur un système d'exploitation ou tout autre équipement informatique, routeur, switch, serveur.

  • La journalisation de logs se fait quand vous mettez en place un système qui les remonte automatiquement.

  • Avec la centralisation de vos logs, vous aurez une vision sur tous les événements de votre système d’information. En identifiant les logs d’intérêt à monitorer, vous pourrez éventuellement filtrer les logs pour éviter un nombre ingérable.

  • Vous pourrez analyser vos logs manuellement avec le parsing de logs.

  • Plusieurs utilitaires de commandes en ligne, comme grep, awk ou tail, vous seront utiles quand vous devrez analyser les logs manuellement.

Le parsing de logs est une compétence essentielle qui vous rendra beaucoup plus efficace pour identifier des comportements suspects. Rendez-vous dans le prochain chapitre pour découvrir comment automatiser la collecte de logs !

Exemple de certificat de réussite
Exemple de certificat de réussite