Journaliser des actions avec auditd

De Ikoula Wiki
Révision datée du 11 août 2021 à 16:43 par Mgrelet794f6 (discussion | contributions) (Page créée avec « <span data-link_translate="he"></span><span data-link_translate="ro"></span><span data-link_translate="ru"></span><span data-link_translate="pl"></span><span data-link_tra… »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Jump to navigation Jump to search

Introduction

Sur des distributions comme CentOS/Fedora/RedHat le paquet auditd est installé par défaut, ce qui n'est pas le cas de Debian/Ubuntu.
Nous allons voir comment utiliser cet outil qui permet de journaliser les actions des utilisateurs dans un fichier de log, qui peut être ensuite monitorer, renvoyer dans un ELK, un SIEM,...


Déroulé

Tout d'abord pour Debian/Ubuntu il vous faudra installer le paquet :

# apt update && apt install auditd

Ensuite, auditd propose des options très fines pour auditer, nous allons nous intéresser à une mise en place simple, dans notre cas nous allons monitorer le dossier /root pour toutes actions (lecture, écriture, changement d'attributs, exécution).

Pour cela nous allons utiliser la commande auditctl comme ceci :

# auditctl -w /root -p w -k root-write
# auditctl -w /root -p a -k root-attribute
# auditctl -w /root -p r -k root-read
# auditctl -w /root -p x -k root-execute

L'option -w décrit le chemin à auditer de façon récursive, la racine (/ et les wildcard * ne sont pas autorisés).
L'option -p décrit le type de permission que l'on souhait auditer.
L'option -k ajoute un clé de filtre à la règle, de cette façon on peut plus facilement parser les logs, surtout pour utiliser derrière une suite de type Elastic stack (ELK).

On peut vérifier les règles en place avec l'option -l :

# auditctl -l
-w /root -p w -k root-write
-w /root -p a -k root-attribute
-w /root -p r -k root-read
-w /root -p x -k root-execute

Les règles mise en place par auditctl n'étant pas persistantes (en cas de redémarrage du service ou redémarrage du serveur, elles sont supprimées), vous pouvez ajouter celles-ci telles que renvoyées via la commande précédente dans le fichier /etc/audit/rules.d/audit.rules

Test

Testons maintenant nos règles, nous allons créer un fichier dans /root/test :

# touch /root/test

Vérifions le log /var/log/audit/audit.log :

type=SYSCALL msg=audit(1628689653.000:162513): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7fff9328b6df a2=941 a3=1b6 items=2 ppid=1174317 pid=1197513 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=2740 comm="touch" exe="/bin/touch" subj==unconfined key="root-write"ARCH=x86_64 SYSCALL=openat AUID="ikoula" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"

On y trouve plein d'informations, notamment notre clé de filtre (key) root-write,
la commande utilisée (comm) touch,
son binaire appelé (exe) /bin/touch,
l'appel système (SYSCALL) openat,
l'utilisateur qui a effectué la commande (UID) root;
et même l'utilisateur qui s'est logué sur le serveur (AUID) ikoula, et oui je ne me suis pas logué directement en root et ca auditd le remonte aussi.


Essayons maintenant de lire le fichier précédemment créé :

# cat /root/test

Et dans le log:

type=SYSCALL msg=audit(1628689532.705:162487): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7fff582396eb a2=0 a3=0 items=1 ppid=1174317 pid=1197427 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=2740 comm="cat" exe="/bin/cat" subj==unconfined key="root-read"ARCH=x86_64 SYSCALL=openat AUID="ikoula" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"

On voit bien la commande cat et notre clé de filtre root-read.


Nous allons maintenant changer les droits du fichier :

# chmod +x /root/test

Dans le log :

type=SYSCALL msg=audit(1628689657.616:162514): arch=c000003e syscall=268 success=yes exit=0 a0=ffffff9c a1=55b873de8660 a2=1ed a3=fffffffffffffd6f items=1 ppid=1174317 pid=1197630 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=2740 comm="chmod" exe="/bin/chmod" subj==unconfined key="root-attribute"ARCH=x86_64 SYSCALL=fchmodat AUID="ikoula" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"

On voit bien la commande chmod et notre clé de filtre root-attribute.


Nous allons exécuter ce fichier :

# ./root/test

Dans le log :

type=SYSCALL msg=audit(1628689659.680:162516): arch=c000003e syscall=59 success=no exit=-8 a0=556e942a0480 a1=556e942a04c0 a2=556e942446f0 a3=fffffffffffff286 items=2 ppid=1174317 pid=1197707 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=2740 comm="bash" exe="/bin/bash" subj==unconfined key="root-execute"ARCH=x86_64 SYSCALL=execve AUID="ikoula" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"

On voit bien la commande bash et notre clé filtre root-execute.


Pour finir supprimons le fichier :

# rm -f /root/test

Dans le log :

type=SYSCALL msg=audit(1628689664.761:162518): arch=c000003e syscall=263 success=yes exit=0 a0=ffffff9c a1=55ad66c2b630 a2=0 a3=fffffffffffff2cb items=2 ppid=1174317 pid=1197714 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=2740 comm="rm" exe="/bin/rm" subj==unconfined key="root-write"ARCH=x86_64 SYSCALL=unlinkat AUID="ikoula" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"

On voit bien la commande rm et notre clé filtre root-write.




Cet article vous a semblé utile ?

0



Vous n'êtes pas autorisé à publier de commentaire.