Remarque :

Audit d'Oracle Linux avec Auditd

Introduction

Auditd est un démon système de l'espace utilisateur qui s'exécute en arrière-plan et génère des journaux sur les différentes activités effectuées sur Oracle Linux.

Ce tutoriel vous guide tout au long de l'installation, de la configuration et de l'utilisation de auditd.

Objectifs

Dans cet exercice, vous allez apprendre à :

Prérequis

Installation du package d'audit

Remarque : lorsque vous utilisez l'environnement d'atelier gratuit, reportez-vous à Oracle Linux Lab Basics pour obtenir des instructions de connexion et d'utilisation.

Oracle Linux installe le package d'audit par défaut.

S'il n'est pas déjà connecté, ouvrez un terminal et connectez-vous via SSH au système ol8-server.

ssh oracle@<ip_address_of_ol8-server>

Vérifiez si le système a préinstallé le package audit.

sudo dnf list installed "audit"

Si ce n'est pas sur le système, installez-le.

sudo dnf install -y audit

Le fichier de configuration par défaut du démon auditd se trouve dans /etc/audit/auditd.conf.

Gérer le service d'audit

Une fois le package d'audit installé, démarrez le service auditd. Tout d'abord, vérifiez le statut actuel.

sudo systemctl status auditd

Exemple de sortie :

[oracle@ol8-server ~]$ sudo systemctl status auditd
* auditd.service - Security Auditing Service
   Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor pres>
   Active: active (running) since Fri 2022-04-01 23:59:52 GMT; 2min 38s ago
     Docs: man:auditd(8)
           https://github.com/linux-audit/audit-documentation
 Main PID: 1385 (auditd)
    Tasks: 2 (limit: 100140)
   Memory: 2.5M
   CGroup: /system.slice/auditd.service
           `-1385 /sbin/auditd

Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: enabled 1
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: failure 1
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: pid 1385
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: rate_limit 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_limit 8192
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: lost 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000
Apr 01 23:59:52 localhost.localdomain systemd[1]: Started Security Auditing Ser>
lines 1-21/21 (END)

La sortie indique que le service est (running) et enabled.

Le statut enabled indique que nous avons configuré le service pour qu'il démarre à l'initialisation. Si ce n'est pas le cas, démarrez le service en tant qu'utilisateur root pour collecter les informations d'audit et les écrire dans les journaux.

Démarrez le service.

sudo service auditd start

Configurez auditd pour qu'il démarre au moment de l'initialisation.

sudo systemctl enable auditd

Remarque : la façon uniquement d'interagir correctement avec le démon auditd utilise la commande service.

La commande service garantit l'enregistrement de la valeur auid. Utilisez la commande systemctl uniquement avec les actions enable et status.

Activation et désactivation temporaires de l'audit

L'utilitaire de contrôle d'audit, auditctl, interagit avec le composant Audit du noyau pour gérer les règles et contrôler de nombreux paramètres et paramètres du processus de génération d'événements.

Vérifiez le statut du sous-système d'audit du noyau.

sudo auditctl -s

Exemple de sortie :

[oracle@ol8-server ~]$ sudo auditctl -s
enabled 1
failure 1
pid 1399
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
loginuid_immutable 0 unlocked

Désactivez temporairement auditd.

sudo auditctl -e 0

Réactivez auditd.

sudo auditctl -e 1

Remarque : pid affiche l'ID de processus de service auditd. La valeur pid 0 indique que le service n'est pas en cours d'exécution.

L'indicateur d'activation auditctl -e accepte également la valeur 2, qui verrouille la configuration d'audit.

Si la configuration d'audit est verrouillée de cette manière, une réinitialisation est nécessaire pour la déverrouiller. Vous trouverez plus de détails dans man auditctl.

Localiser les journaux et les règles d'audit

Par défaut, Oracle Linux stocke les journaux d'audit dans /var/log/audit/audit.log.

Les règles d'audit se trouvent dans /ect/audit/audit.rules. Oracle Linux génère l'ensemble de règles par défaut à partir du fichier /etc/audit/rules.d/audit.rules.

sudo cat /etc/audit/audit.rules
sudo cat /etc/audit/rules.d/audit.rules

Exemple de sortie :

## First rule - delete all
-D

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

## This determine how long to wait in burst of events
--backlog_wait_time 60000

## Set failure mode to syslog
-f 1

Règles avec l'utilitaire de contrôle d'audit

Utilisez le programme auditctl pour contrôler le comportement, obtenir le statut et ajouter ou supprimer des règles.

Ajoutez une règle d'audit qui consigne toute tentative de lecture ou de modification du fichier /etc/ssh/sshd_config.

sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshd_config

Où :

Affichez la règle.

sudo auditctl -l

De nouvelles règles sont ajoutées en bas de la liste, mais il est également possible de les ajouter en haut.

Vérifiez si la nouvelle règle a été ajoutée au fichier /etc/audit/audit.rules.

sudo cat /etc/audit/audit.rules

Exemple de sortie :

[oracle@ol8-server ~]$ sudo cat /etc/audit/audit.rules
## This file is automatically generated from /etc/audit/rules.d
-D
-b 8192
-f 1
--backlog_wait_time 60000

La règle n'apparaît pas dans le fichier. Pourquoi pas ?

Les règles créées par auditctl ne sont pas ajoutées au fichier audit.rules. Par conséquent, ces modifications sont transitoires et ne survivent pas à la réinitialisation du système.

Rendez la règle permanente en l'ajoutant à un fichier d'ensemble de règles personnalisé dans /etc/audit/rules.d/my.rules. Le format de la règle ajoutée correspond à la syntaxe de la commande auditctl sans utiliser auditctl. Les règles doivent être écrites par ligne et combinées pour optimiser les performances.

sudo tee /etc/audit/rules.d/my.rules > /dev/null <<'EOF'
-w /etc/ssh/sshd_config -p rwxa -k sshd_config
EOF

Affichez la règle.

sudo cat /etc/audit/rules.d/my.rules

Testez la règle.

cat /etc/ssh/sshd_config

La commande renvoie cat: /etc/ssh/sshd_config: Permission denied et génère l'événement ci-dessous dans audit.log.

sudo cat /var/log/audit/audit.log | grep sshd_config

Exemple de sortie :

type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1AUID="oracle"
type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 
sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"ARCH=x86_64 SYSCALL=openat AUID="oracle" 
UID="oracle" GID="oracle" EUID="oracle" SUID="oracle" FSUID="oracle" EGID="oracle" SGID="oracle" FSGID="oracle"
type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 
ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 
cap_frootid=0OUID="root" OGID="root"

Rechercher les journaux d'audit

Une autre façon de rechercher les journaux consiste à utiliser la commande ausearch.

Obtenez les mêmes informations à l'aide de cette commande.

sudo ausearch --key sshd_config

Exemple de sortie :

Email option is specified but /usr/lib/sendmail doesn't seem executable.
----
time->Sat Apr  2 17:02:03 2022
type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1
----
time->Sat Apr  2 18:19:43 2022
type=PROCTITLE msg=audit(1648923583.793:268315): proctitle=636174002F6574632F7373682F737368645F636F6E666967
type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 
ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 
cap_frootid=0
type=CWD msg=audit(1648923583.793:268315): cwd="/home/oracle"
type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 
sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"

La sortie de ausearch est plus facile à utiliser et à lire en fonction du format de sortie. Nous pouvons ajouter la facilité de lecture du journal en ajoutant l'option -i ou --interpret. Cette option interprète les entités numériques en texte, par exemple en convertissant un élément uid en nom de compte.

sudo ausearch -i -k sshd_config

Exemple de sortie :

Email option is specified but /usr/lib/sendmail doesn't seem executable.
----
type=CONFIG_CHANGE msg=audit(04/02/2022 17:02:03.746:266810) : auid=oracle ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key=sshd_config list=exit res=yes 
----
type=PROCTITLE msg=audit(04/02/2022 18:19:43.793:268315) : proctitle=cat /etc/ssh/sshd_config 
type=PATH msg=audit(04/02/2022 18:19:43.793:268315) : item=0 name=/etc/ssh/sshd_config inode=67688941 dev=fc:00 
mode=file,600 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=none cap_fi=none 
cap_fe=0 cap_fver=0 cap_frootid=0 
type=CWD msg=audit(04/02/2022 18:19:43.793:268315) : cwd=/home/oracle 
type=SYSCALL msg=audit(04/02/2022 18:19:43.793:268315) : arch=x86_64 syscall=openat success=no exit=EACCES(Permission 
denied) a0=0xffffff9c a1=0x7ffd08b6c575 a2=O_RDONLY a3=0x0 items=1 ppid=3406680 pid=3428336 auid=oracle uid=oracle 
gid=oracle euid=oracle suid=oracle fsuid=oracle egid=oracle sgid=oracle fsgid=oracle tty=pts0 ses=15792 comm=cat exe=/
usr/bin/cat subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=sshd_config 

Pour plus d'options de formatage et de méthodes de recherche dans audit.log, reportez-vous à man ausearch.

Charger des règles préconfigurées

Oracle Linux fournit un script qui fusionne tous les fichiers de règles d'audit de composant trouvés dans /etc/audit/rules.d. Après la fusion, le nouveau fichier remplace le fichier /etc/audit/audit.rules existant. Ce script est intégré au fichier de service auditd et s'exécute lorsque le service démarre.

Vérifiez s'il existe des modifications de règle à charger.

sudo augenrules --check

Les états de sortie, Rules have changed and should be updated. Cette modification est due au fichier my.rules précédemment créé dans/etc/audit/rules.d.

Supprimez la règle personnalisée sshd_config précédemment ajoutée pour suivre facilement les ajouts de nouvelles règles.

sudo auditctl -D -k sshd_config

Fusionnez le fichier de règles personnalisées my.rules.

sudo augenrules --load

Exemple de sortie :

[oracle@ol8-server ~]$ sudo augenrules --load
No rules
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000

Vérifiez les règles d'audit actives.

sudo auditctl -l

Exemple de sortie :

[oracle@ol-lab-2022-03-23-182415-0 ~]$ sudo auditctl -l
-w /etc/ssh/sshd_config -p rwxa -k sshd_config

Ajoutez des règles supplémentaires à un nouveau fichier, new.rules.

Remarque : seuls les fichiers se terminant par .rules sont lus par augenrules et chargés.

sudo tee /etc/audit/rules.d/new.rules > /dev/null <<'EOF'
-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux/ -p wa -k selinux_changes
EOF

Chargez les nouvelles règles.

sudo augenrules --load

Vérifiez à nouveau les règles actives.

sudo auditctl -l

Les nouvelles règles sont chargées et fusionnées dans le fichier audit.rules.

sudo cat /etc/audit/audit.rules

Le système a créé un fichier de sauvegarde /etc/audit/audit.rules.prev dans le cadre de la fusion.

sudo ls -l /etc/audit

Les informations fournies par le système d'audit Oracle Linux aident à détecter les intrusions.

Consultez les pages man des utilitaires indiqués. Utilisez ensuite ce que vous avez appris pour ajouter des règles d'audit personnalisées à votre système pour des événements de journalisation particuliers.

Pour plus d'informations

Voir d'autres ressources connexes :

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir explorateur Oracle Learning.

Pour consulter la documentation du produit, consultez Oracle Help Center.