Un SYSCALL se produit chaque fois qu'un utilisateur exécute une commande qui demande que le noyau Linux fournisse un service. Il existe plusieurs SYSCALL comme mount, umount, kill, open etc. Ces SYSCALLs peuvent être surveillés avec le système auditd. Prenons "tuer" SYSCALL comme exemple.
L'utilisateur veut capturer qui a tué un certain processus sur le système. Cela peut être facilement réalisé en écrivant une règle auditd qui peut capturer le kill SYSCALL chaque fois qu'il est appelé.
Installer et configurer auditd
auditd est principalement préinstallé sur les distributions Linux. S'il n'est pas disponible, vous pouvez utiliser le gestionnaire de packages du système d'exploitation correspondant pour l'installer. Par exemple, dans le cas de CentOS/RHEL :
# yum install auditd
Activez le service auditd pour qu'il démarre au démarrage et démarrez-le à l'aide de la commande "service".
# systemctl enable auditd # service start auditd
Configuration de la règle auditd pour surveiller SYSCALL
Créons une règle pour surveiller le "kill" SYSCALL qui peut être utilisé pour trouver tous les kills d'un processus.
1. Ajoutez la règle ci-dessous au fichier de configuration des règles auditd /etc/audit/rules.d/audit.rules :
# vi /etc/audit/rules.d/audit.rules -a exit,always -F arch=b64 -S kill -k kill_ruleSur CentOS/RHEL 6, le fichier de configuration est /etc/audit/audit.rules au lieu de /etc/audit/rules.d/audit.rules.
Ici,
-une sortie,toujours – Ici, nous avons l'action et la liste. Chaque fois que le système d'exploitation quitte un appel système, la liste de sortie sera utilisée pour déterminer si un événement d'audit doit être généré.
-F arch=b64 – L'option -F est utilisée pour créer un champ de règle. Le b64 signifie que l'ordinateur fonctionne avec un processeur x86_64. (Qu'il s'agisse d'Intel ou d'AMD n'a pas d'importance.)
-S kill – L'option -S spécifie l'appel système que nous voulons surveiller.
-k – Il s'agit d'un nom de règle défini par l'utilisateur.
2. Redémarrez le service auditd pour que la nouvelle règle soit effective.
# service restart auditd
3. Vous pouvez vérifier si les règles définies sont actives à l'aide de la commande "auditctl -l".
# auditctl -l -a always,exit -F arch=b64 -S kill -F key=kill_rule
Vérifier
Voyons un exemple si la règle que nous venons de créer fonctionne réellement ou non. Nous allons simplement lancer un processus « sleep 500 » et le tuer. Cela devrait générer un journal d'audit avec tous les détails comme qui a tué le processus (uid) avec quel programme/commande, etc.
1. Créez un processus de sommeil simple en arrière-plan.
# sleep 600 &
2. Vérifiez l'ID de processus du processus de mise en veille et arrêtez-le.
# ps -ef | grep sleep root 2089 1784 0 15:12 pts/0 00:00:00 sleep 600
# kill -9 2089
3. Recherchez le fichier journal d'audit /var/log/audit/audit.log pour les journaux d'audit kill. Le journal devrait ressembler à celui illustré ci-dessous.
# tail -f /var/log/audit/audit.log type=SYSCALL msg=audit(1529507591.700:304): arch=c000003e syscall=62 success=yes exit=0 a0=829 a1=9 a2=0 a3=829 items=0 ppid=1783 pid=1784 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="kill_rule" type=OBJ_PID msg=audit(1529507591.700:304): opid=2089 oauid=1001 ouid=0 oses=1 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep" type=PROCTITLE msg=audit(1529507591.700:304): proctitle="-bash"
4. Parfois, le journal d'audit peut être difficile à rechercher les journaux qui nous intéressent. Dans ce cas, vous pouvez également utiliser la commande "ausearch" avec la clé définie avec la règle. Par exemple :
# ausearch -k kill_rule ... time->Wed Jun 20 15:13:11 2018 type=PROCTITLE msg=audit(1529507591.700:304): proctitle="-bash" type=OBJ_PID msg=audit(1529507591.700:304): opid=2089 oauid=1001 ouid=0 oses=1 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep" type=SYSCALL msg=audit(1529507591.700:304): arch=c000003e syscall=62 success=yes exit=0 a0=829 a1=9 a2=0 a3=829 items=0 ppid=1783 pid=1784 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="kill_rule"