Comment écrire des règles d’audit système personnalisées sur CentOS 7

introduction

Le système d’audit Linux crée une piste d’audit, un moyen de suivre toutes sortes d’informations sur votre système. Il peut enregistrer de nombreuses données telles que les types d’événements, la date et l’heure, les ID utilisateur, les appels système, les processus, les fichiers utilisés, les contextes SELinux et les niveaux de sensibilité. Il peut déterminer si un fichier a été accédé, modifié ou exécuté. Il peut même suivre si des modifications sont apportées aux attributs de fichier. Il est capable de journaliser l’utilisation des appels système, des commandes exécutées par un utilisateur, des tentatives de connexion infructueuses et de nombreux autres événements. Par défaut, le système d’audit n’enregistre que quelques événements dans les journaux, tels que les utilisateurs qui se connectent, les utilisateurs utilisant sudo et les messages liés à SELinux. Il utilise des règles d’audit pour surveiller des événements spécifiques et créer des entrées de journal associées. Il est possible de créer des règles d’audit.

Dans ce didacticiel, nous aborderons les différents types de règles d’audit et comment ajouter ou supprimer des règles personnalisées sur votre serveur.

Conditions préalables

Avant de commencer avec ce tutoriel, vous devriez avoir les éléments suivants:

Affichage des règles d’audit

Vous pouvez afficher l’ensemble actuel de règles d’audit à l’aide de la commande + auditctl -l +.

sudo auditctl -l

Aucune règle ne sera affichée s’il n’y en a aucune (c’est la valeur par défaut):

No rules

Lorsque vous ajoutez des règles dans ce tutoriel, vous pouvez utiliser cette commande pour vérifier qu’elles ont été ajoutées.

Le statut actuel du système d’audit peut être visualisé à l’aide de:

sudo auditctl -s

La sortie sera similaire à:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0 backlog_limit=320 lost=0 backlog=0

La valeur + enabled = 1 + indique que l’audit est activé sur ce serveur. La valeur + pid + est le numéro de processus du démon d’audit. Un pid de 0 indique que le démon d’audit n’est pas en cours d’exécution. L’entrée + lost + vous indiquera combien d’enregistrements d’événement ont + été supprimés en raison du débordement de la file d’attente d’audit du noyau. Le champ + backlog + indique combien d’enregistrements d’événements sont actuellement mis en file d’attente et attendent qu’audite les lise. Nous aborderons le reste des champs de sortie dans la section suivante de ce didacticiel.

Ajout de règles d’audit

Vous pouvez ajouter des règles d’audit personnalisées à l’aide de l’outil de ligne de commande + auditctl +. Par défaut, les règles seront ajoutées au bas de la liste actuelle, mais pourraient également être insérées en haut. Pour rendre vos règles permanentes, vous devez les ajouter au fichier + / etc / audit / rules.d / audit.rules +. À chaque démarrage du service + auditd +, il activera toutes les règles du fichier. Vous pouvez en savoir plus sur le démon d’audit et le système d’audit dans notre autre article: Comprendre le système d’audit sur CentOS 7. Les règles d’audit fonctionnent sur la base d’une première correspondance gagnante - lorsqu’une règle correspond, elle ne sera pas évaluée plus bas. L’ordre correct des règles est important.

Il existe trois types de règles d’audit:

  • Règles de contrôle: Ces règles permettent de modifier la configuration et les paramètres du système d’audit lui-même.

  • Règles du système de fichiers: Il s’agit de contrôles de fichiers ou de répertoires. En utilisant ces règles, nous pouvons auditer tout type d’accès à des fichiers ou répertoires spécifiques.

  • Règles d’appels système: Ces règles sont utilisées pour surveiller les appels système effectués par n’importe quel processus ou par un utilisateur particulier.

Règles de contrôle

Voyons quelques-unes des règles de contrôle que nous pouvons ajouter:

  • + auditctl -b <backlog> + - Définit le nombre maximal de tampons d’audit en attente autorisés. Si tous les tampons sont pleins, l’indicateur d’échec est consulté par le noyau pour action. La limite de backlog par défaut définie sur un serveur CentOS est de 320. Vous pouvez voir ceci en utilisant:

sudo auditctl -s

Dans la sortie, vous pouvez voir la valeur actuelle * backlog_limit *:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0  lost=0 backlog=0

Si la valeur de votre backlog est supérieure à * backlog_limit * actuellement définie, vous devrez peut-être augmenter le * backlog_limit * pour que la journalisation d’audit fonctionne correctement. Par exemple, pour augmenter la valeur à 1024, exécutez:

sudo auditctl -b 1024

La sortie affichera le statut:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0  lost=0 backlog=0
  • + auditctl -f [0 1 2] + - Définir l’indicateur d’échec (0 = silencieux, 1 = printk. 2 = panique). Cette option vous permet de déterminer comment vous voulez que le noyau traite les erreurs critiques. Si cette option est définie sur 0, les messages d’audit qui n’ont pas pu être consignés sont supprimés en mode silencieux. Si la valeur est définie sur 1, les messages sont envoyés au sous-système de journalisation du noyau. Si défini sur 2, cela déclenchera une panique du noyau. Parmi les exemples de conditions dans lesquelles cet indicateur est consulté, citons la limite d’arriéré dépassée, la mémoire insuffisante du noyau et la limite de débit dépassée. La valeur par défaut est 1. Sauf si vous rencontrez des problèmes majeurs lors de l’audit du démon sur votre serveur, vous n’avez pas besoin de modifier cette valeur.

  • + auditctl -R <nom du fichier> + - Lit les règles d’audit à partir du fichier spécifié. Ceci est utile lorsque vous testez des règles temporaires et souhaitez utiliser les anciennes règles à partir du fichier + audit.rules +.

Les règles que nous ajoutons via + auditctl s ne sont pas permanentes. Pour les rendre persistants lors des redémarrages, vous pouvez les ajouter au fichier + / etc / audit / rules.d / audit.rules +. Ce fichier utilise la même syntaxe de ligne de commande + auditctl + pour spécifier les règles, mais sans la commande + auditctl + elle-même. Toute ligne vide ou tout texte suivant un signe dièse (#) est ignoré. Le fichier de règles par défaut ressemble à ceci:

/etc/audit/rules.d/audit.rules

# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.

# First rule - delete all
-D

# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320

# Feel free to add below this line. See auditctl man page

Pour modifier la valeur du backlog en 8192, vous pouvez remplacer * -b 320 * par * -b 8192 * et redémarrer le démon d’audit à l’aide de:

sudo service auditd restart

Si vous ne redémarrez pas le démon, il définira quand même la nouvelle valeur à partir de la configuration lors du prochain redémarrage du serveur.

Règles du système de fichiers

Les contrôles de système de fichiers peuvent être définis sur des fichiers et des répertoires. Nous pouvons également spécifier le type d’accès à surveiller. La syntaxe d’une règle de système de fichiers est la suivante:

auditctl -w  -p  -k

+ path_to_file + est le fichier ou le répertoire audité. + permissions + sont les permissions consignées. Cette valeur peut être un ou une combinaison de r (lecture), w (écriture), x (exécution) et a (changement d’attribut). + key_name + est une chaîne facultative qui vous aide à identifier la ou les règles qui ont généré une entrée de journal particulière.

Regardons quelques exemples.

sudo auditctl -w /etc/hosts -p wa -k hosts_file_change

La règle ci-dessus demande au système d’audit de surveiller tout accès en écriture ou modification d’attributs dans le fichier + / etc / hosts + et de les consigner dans le journal d’audit avec la chaîne de clé personnalisée spécifiée par nous - + hosts_file_change +.

Si vous souhaitez rendre cette règle permanente, ajoutez-la au fichier + / etc / audit / rules.d / audit.rules + au bas, comme ceci:

/etc/audit/rules.d/audit.rules

-w /etc/hosts -p wa -k hosts_file_change

Pour vous assurer que la règle a été ajoutée avec succès, vous pouvez exécuter:

sudo auditctl -l

Si tout va bien, la sortie devrait montrer:

LIST_RULES: exit,always watch=/etc/hosts perm=wa key=hosts_file_change

Nous pouvons également ajouter des montres aux annuaires.

sudo auditctl -w /etc/sysconfig/ -p rwa -k configaccess

La règle ci-dessus ajoutera une surveillance au répertoire + / etc / sysconfig + et à tous les fichiers et répertoires situés sous celui-ci pour tout accès en lecture, en écriture ou de modification d’attribut. Il va également étiqueter les messages du journal avec une clé personnalisée * configaccess *.

Pour ajouter une règle à surveiller pour l’exécution de la commande + / sbin / modprobe + (cette commande peut ajouter / supprimer des modules du noyau du serveur):

sudo auditctl -w /sbin/modprobe -p x -k kernel_modules

Pour rechercher des événements spécifiques dans les journaux d’audit, vous pouvez utiliser la commande + ausearch +. Par exemple, pour rechercher dans les journaux d’audit tous les événements étiquetés avec la clé + configaccess +, vous pouvez exécuter:

sudo ausearch -k configaccess

+ ausearch + est discuté en détail dans notre autre tutoriel Comprendre le système d’audit sous CentOS 7 .

Règles d’appel système

En auditant les appels système, vous pouvez suivre les activités sur le serveur bien au-delà du niveau de l’application. La syntaxe des règles d’appel système est la suivante:

auditctl -a  -S  -F  -k `

où:

  • Remplacer + -a + par + -A + dans la commande ci-dessus insérera la règle en haut au lieu de en bas.

  • + action + et + filter + spécifient quand un certain événement est enregistré. + action peut être` + toujours` ou + jamais. + filter + spécifie le filtre correspondant aux règles du noyau qui est appliqué à l’événement. Le filtre de correspondance de règles peut être l’un des suivants: + task +, + exit +, + user +, et + exclude +. + action, filter + sera + always, exist dans la plupart des cas, ce qui indique` + auditctl s` que vous souhaitez auditer cet appel système à sa sortie.

  • + system_call + spécifie l’appel système par son nom. Plusieurs appels système peuvent être regroupés dans une règle, chacun spécifié après une option + -S +. Le mot «+ tous » peut également être utilisé. Vous pouvez utiliser la commande ` sudo ausyscall --dump +` pour afficher la liste de tous les appels système ainsi que leurs numéros.

  • + field = valeur + spécifie des options supplémentaires modifiant la règle pour faire correspondre les événements en fonction d’une architecture, d’un ID utilisateur, d’un ID de processus, d’un chemin d’accès, etc.

  • + key_name + est une chaîne facultative qui vous aide à identifier ultérieurement quelle règle ou ensemble de règles a généré une entrée de journal particulière.

Voyons maintenant quelques exemples de règles d’appel système.

Pour définir une règle d’audit qui crée une entrée de journal intitulée "+ rename +" chaque fois qu’un fichier est renommé par un utilisateur dont l’ID est égal ou supérieur à 1000, exécutez:

sudo auditctl -a always,exit -F arch=b64 -F "auid>=1000" -S rename -S renameat -k rename

Le + -F arch = b64 + indique l’audit de la version 64 bits des appels système dans la règle.

Pour définir une règle qui enregistre les fichiers auxquels un utilisateur particulier (avec l’UID 1001) a accédé et étiquette les entrées de journal avec + userfileaccess +:

sudo auditctl -a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess

Si vous souhaitez rendre cette règle permanente, ajoutez-la au fichier + / etc / audit / rules.d / audit.rules + au bas, comme ceci:

/etc/audit/rules.d/audit.rules

-a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess

Vous pouvez également définir une règle de système de fichiers à l’aide de la syntaxe de la règle d’appel système. Par exemple, la règle suivante:

sudo auditctl -a always,exit -F path=/etc/hosts -F perm=wa -k hosts_file_change

fait le même travail que la règle de système de fichiers que nous avons vue dans la section précédente:

sudo auditctl -w /etc/hosts -p wa -k hosts_file_change

Pour regarder un répertoire de manière récursive à l’aide d’une règle d’appel système, vous pouvez utiliser l’option + -F" dir = / chemin / vers / dir "+.

Supprimer les règles d’audit

Pour supprimer toutes les règles d’audit en cours, vous pouvez utiliser la commande + auditctl -D +. Pour supprimer les règles de surveillance du système de fichiers ajoutées à l’aide de l’option + -w +, vous pouvez remplacer + -w + par + +W + dans la règle d’origine. Les règles d’appel système ajoutées à l’aide des options + -a + ou + -A + peuvent être supprimées à l’aide de l’option + -d + avec la règle d’origine. Par exemple, supposons que nous ayons ajouté la règle suivante:

sudo auditctl -w /etc/passwd -p wa -k passwdaccess

Affichez l’ensemble de règles à l’aide de:

sudo auditctl -l

La sortie doit inclure:

LIST_RULES: exit,always watch=/etc/passwd perm=wa key=passwdaccess

Pour supprimer cette règle, nous pouvons utiliser la commande suivante, en remplaçant simplement + -w + par + +W +:

sudo auditctl -W /etc/passwd -p wa -k passwdaccess

Maintenant, affichez le jeu de règles en utilisant:

sudo auditctl -l

La règle ne devrait pas être dans la liste maintenant.

Verrouillage des règles d’audit

Il est possible de désactiver ou d’activer le système d’audit et de verrouiller les règles d’audit à l’aide de + auditctl -e [0 1 2] +. Par exemple, pour désactiver l’audit temporairement, exécutez:

auditctl -e 0

Lorsque + 1 + est passé en tant qu’argument, l’audit est activé. Pour verrouiller la configuration d’audit afin qu’elle ne puisse pas être modifiée, transmettez l’argument + 2 +. Cela rend le jeu actuel de règles d’audit immuable. Les règles ne peuvent plus être ajoutées, supprimées ou modifiées et le démon d’audit ne peut plus être arrêté. Le verrouillage de la configuration est censé être la dernière commande de + audit.rules + pour ceux qui souhaitent que cette fonctionnalité soit active. Toute tentative de modification de la configuration dans ce mode sera auditée et refusée. La configuration ne peut être modifiée qu’en redémarrant le serveur.

Conclusion

Les informations fournies par le système d’audit Linux sont très utiles pour la détection d’intrusion. Vous devriez maintenant pouvoir ajouter des règles d’audit personnalisées pour pouvoir enregistrer des événements particuliers.

N’oubliez pas que vous pouvez toujours consulter la page de manuel + auditctl + lors de l’ajout de règles de journalisation personnalisées. Il offre une liste complète des options de ligne de commande, des conseils de performances et des exemples. Le répertoire + / usr / share / doc / audit - / + contient des fichiers avec des règles d’audit préconfigurées basées sur certaines normes de certification communes.