Recherche de site Web

Journalisation et audit avancés sous Linux


L’un des aspects les plus importants de l’administration système Linux est de configurer la journalisation des événements critiques et importants, et d’auditer régulièrement votre serveur pour détecter les faiblesses ou les erreurs. Étant donné que les serveurs Linux fonctionnent généralement 24 heures sur 24 et 7 jours sur 7, les administrateurs doivent s’appuyer sur des outils de journalisation et d’audit pour les aider à suivre ce qui se passe sur le système tout au long de la journée. Ces outils utiles peuvent collecter et résumer des quantités massives de données, avertir l’administrateur système lorsqu’un événement critique se produit et identifier les tendances et les problèmes potentiels.

Dans ce tutoriel, nous allons passer en revue certaines techniques de journalisation et d’audit avancées sur les systèmes Linux. Linux est livré avec de nombreux outils de journalisation intégrés par défaut, mais il existe également de nombreux moniteurs système tiers qui peuvent nous aider avec des fonctionnalités supplémentaires, telles que la possibilité d’envoyer une alerte aux administrateurs informatiques lorsque les ressources du serveur sont submergées.

Dans ce tutoriel, vous allez apprendre :

  • Comment utiliser journald pour l’analyse des journaux
  • Commandes et configuration de base de SELinux et AppArmor
  • Qu’est-ce que ELK, Logwatch et logrotate

Techniques de journalisation et d’audit avancées sous Linux

Nous passerons en revue ci-dessous divers outils et techniques pour enregistrer et auditer votre système Linux. Certains de ces outils sont installés par défaut, d’autres doivent être installés manuellement et d’autres sont conçus pour des distributions Linux spécifiques. L’outil qui vous convient dépendra de la distribution Linux que vous utilisez et de la profondeur de la journalisation et de l’audit que vous souhaitez effectuer. Un ou plusieurs des outils ci-dessous correspondront sûrement à vos critères.

journald/rsyslog/syslog

journald est maintenant omniprésent dans les systèmes Linux en raison de son intégration avec systemd. Bien sûr, toutes les distributions Linux n’utilisent pas systemd, mais la grande majorité le fait. rsyslog et syslog sont également des outils de journalisation viables, mais nous les avons regroupés dans cette section avec journald parce que nous pensons que journald a largement remplacé rsyslog et syslog dans de nombreuses situations.

REMARQUE
journald n’est pas disponible sur les systèmes dotés d’un système d’initialisation différent, tel que SysV init. Dans ces situations, l’installation de rsyslog ou syslog-ng serait recommandée pour un outil de journalisation à usage général qui rassemble tout dans un emplacement centralisé.

Voici quelques-uns des avantages de journald :

  • Fichiers journaux indexés : la recherche d’événements spécifiques est beaucoup plus rapide et plus facile que dans les fichiers texte brut de syslog
  • Contrôle d’accès aux fichiers journaux : les utilisateurs ne peuvent voir que les fichiers journaux pertinents, et root peut les voir tous
  • Filtrage des journaux : événements faciles à trouver en fonction de l’heure ou du niveau (critique ou avertissement, etc.)

La commande journalctl permet d’afficher tous les journaux collectés par systemd. Cela inclut les journaux liés au noyau du système, à initrd, à divers services et applications, ainsi qu’à systemd lui-même. La commande journalctl rend l’interrogation de tous ces journaux assez facile, puisque systemd rassemble et stocke tous ces différents journaux dans un emplacement central pour que les administrateurs puissent les consulter.

Vous constaterez également que d’autres outils de sécurité comme SELinux et AppArmor fonctionnent main dans la main avec journald, car il stockera les journaux générés par ces autres outils. La maîtrise de journald et d’une partie de la syntaxe de commande Linux journalctl vous aidera également à devenir plus compétent avec ces autres outils de sécurité et à être en mesure d’identifier rapidement les entrées de journal pertinentes.

  1. Journald peut et va enregistrer des millions d’entrées en très peu de temps, il n’est donc généralement pas recommandé d’exécuter la commande journalctl par lui-même. Au lieu de cela, vous pouvez utiliser les options --since et --until pour vous aider à isoler les journaux pertinents qui ont été consignés pendant une certaine période. Par exemple, pour voir tous les journaux depuis hier :

    
    journalctl --since yesterday
    
  2. Vous pouvez également utiliser les options en conjonction les unes avec les autres.

    
    journalctl --since yesterday --until "2 hours ago"
    
  3. Pour afficher les entrées qui ont été enregistrées pour un service système particulier, utilisez l’indicateur -u. Par exemple, pour afficher toutes les entrées enregistrées par Apache :

    
    journalctl -u apache2.service
    
  4. Pour afficher uniquement les messages liés au noyau, utilisez l’option -k.

    
    journalctl -k
    
  5. Étant donné qu’il y a beaucoup d’entrées de journal, il peut être utile de ne voir que celles qui ont une certaine priorité. La priorité la plus élevée est le niveau 0 et la plus basse est le niveau 7. Les niveaux de journalisation sont les suivants :

    
    0: emergency
    1: alert
    2: critical
    3: error
    4: warning
    5: notice
    6: info
    7: debug
    

    Utilisez l’option -p pour voir les journaux d’un certain niveau, ainsi que ceux qui le dépassent en priorité. Dans cet exemple, nous allons utiliser le niveau 3, c’est-à-dire toute entrée marquée comme une erreur, une critique, une alerte ou une urgence.

    
    journalctl -p 3
    

Plus d’infos : Introduction à la revue Systemd

SELinux

SELinux, qui signifie Security Enhanced Linux, est une couche supplémentaire de contrôle de sécurité conçue pour les systèmes Linux. La version originale de SELinux a été développée par la NSA. Parmi les autres contributeurs clés, citons Red Hat, qui l’a activé par défaut dans son propre RHEL et ses distributions Linux dérivées.

SELinux (Security Enhanced Linux) est une implémentation d’un système d’autorisation de contrôle d’accès obligatoire (MAC) dans le noyau Linux. Ce type de contrôle d’accès diffère des systèmes de contrôle d’accès discrétionnaire (DAC), tels que les listes de contrôle d’accès et les autorisations Unix ugo/rwx standard, dans la façon dont l’accès à une ressource est fourni. Dans le cas de MAC n’est pas le propriétaire d’une ressource qui décide qui et comment peut y accéder : cet accès est basé sur les relations entre les domaines et les étiquettes, dictées par une politique et appliquées au niveau du noyau. Il est important de dire que les règles appliquées par SELinux et les autorisations système standard ne s’excluent pas mutuellement, et que les premières sont mises en œuvre après les secondes.

Consultez notre autre tutoriel pour plus d’informations sur les concepts et la gestion de SELinux. Cela vous montrera comment attribuer des politiques SELinux aux processus et aux fichiers.

  1. Pour vérifier l’état actuel de SELinux :

    
    sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             targeted
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Memory protection checking:     actual (secure)
    Max kernel policy version:      33
    
  2. Nous pouvons utiliser la commande ausearch pour rechercher des entrées récentes du journal SELinux. Par exemple, pour rechercher des messages AVC (Access Vector Cache) (du type de ceux que SELinux émet lorsqu’une action est refusée par celui-ci), nous pouvons exécuter :

    
    sudo ausearch -m AVC -ts today
    

    Remarque : L’option -ts est « timestamp ». Un autre argument valide serait « recent » pour voir les journaux des 10 dernières minutes. Pour voir plus d’informations pertinentes, prenez l’horodatage révélé par ausearch et recherchez les journaux journald comme indiqué dans la section précédente.

  3. Nous pouvons également utiliser sealert pour afficher plus d’informations sur un message SELinux spécifique enregistré. Il suffit de log_id remplacer par le numéro d’identification du journal que vous souhaitez inspecter :

    
    sudo sealert -l [log_ID]
    

AppArmor

AppArmor est un autre type de système d’autorisation de contrôle d’accès obligatoire (MAC) couramment mis en œuvre dans des distributions comme Ubuntu Linux. AppArmor fonctionne en attribuant des « profils » aux processus, aux ports réseau, aux fichiers et aux utilisateurs. AppArmor permet aux utilisateurs d’auditer et d’enregistrer les entités qui tentent d’accéder aux ressources confinées.

  1. Vérifiez l’état actuel d’AppArmor :

    
    sudo apparmor_status
    

    Les modes possibles sont appliqués, se plaindre et non confinés.

  2. Mettez un profil en mode plainte (émet des avertissements mais ne prend aucune mesure) :

    
    sudo aa-complain /path/to/binary
    
  3. Mettez un profil en mode d’application (génère des journaux mais applique également des politiques de contrôle d’accès) :

    
    sudo aa-enforce /path/to/binary
    
  4. Tous les messages de journal générés par AppArmor peuvent être consultés dans le fichier journal /var/log/dmesg.

    
    cat /var/log/dmesg | grep apparmor
    

    Comme nous l’avons vu précédemment, il est plus courant et plus efficace d’utiliser journald (la commande journalctl) pour afficher les entrées de journal AppArmor pertinentes.

Elasticsearch, Logstash et Kibana (ELK)

ELK est la solution pour gérer de grandes quantités de données de journal sur des serveurs Linux. La pile ELK combine Elasticsearch, Logstash et Kibana, qui sont des outils open source qui fonctionnent en tandem pour vous offrir la possibilité de gérer les données de journal à partir d’une interface Web graphique pratique. Ces trois outils sont développés par Elastic et spécialement conçus pour fonctionner ensemble.

ELK offre aux utilisateurs une analyse de la sécurité, des mesures de performance, des journaux d’événements critiques et importants, ainsi que d’autres données utiles, le tout à partir d’une interface Web. Vous pouvez installer un serveur Apache ou NGINX local pour présenter les données, puis y accéder à partir de localhost. Sa configuration est un processus en plusieurs étapes et variera selon la distribution, mais voici comment installer ELK sur Ubuntu.

Montre de journal

Logwatch permet aux administrateurs de configurer l’analyse des journaux pour des fichiers particuliers et de configurer des alertes pour certains événements. Ces alertes peuvent être envoyées à l’administrateur par e-mail, de sorte que vous n’avez pas à vous soucier de passer constamment au crible les fichiers journaux ou les données agrégées pour vérifier manuellement les problèmes.

Logwatch est une implémentation simple et idéale pour les serveurs et les infrastructures de taille moyenne qui n’ont pas besoin d’une solution robuste comme ELK, mais qui souhaitent tout de même un moyen d’informer le personnel des événements importants.

Logrotate

Logrotate n’est pas une solution en soi, mais fonctionne avec d’autres services de journalisation comme un moyen de faire pivoter et de compresser les fichiers journaux. Il est déjà intégré au noyau Linux, et les services système ou les applications tierces ont la possibilité de l’utiliser. Sans la fonction logrotate, les fichiers journaux deviendraient trop volumineux et ne seraient pas très utiles lorsqu’un administrateur a besoin de faire un pic à l’intérieur de l’un d’entre eux.

Il se peut que vous vous retrouviez à travailler avec logrotate assez régulièrement, surtout si vous prévoyez de parcourir les fichiers journaux pour une variété de services différents. Il est vivement recommandé de vous familiariser avec la commande Linux logrotate.

Réflexions finales

Dans ce tutoriel, nous avons découvert les techniques avancées de journalisation et d’audit sur un système Linux. Nous avons vu comment journald est le moyen le plus courant d’analyser les données de journal indexées, et la commande journalctl peut être utilisée pour rechercher des entrées pertinentes. SELinux et AppArmor sont les deux principaux programmes de contrôle d’accès, implémentés sur une variété de distributions Linux. Enfin, ELK et Logwatch permettent aux administrateurs de garder le contrôle d’une grande quantité de données de journal afin de suivre les événements critiques et de donner un sens aux informations.

Articles connexes: