Logger l’ensemble des commandes shell lancées par les utilisateurs

Un pré-requis à une bonne politique de sécurité consiste à tracer l’ensemble des commandes des utilisateurs. De nombreuses solutions passent par la modification de la variable d’environnement PROMPT_COMMAND dans le /etc/bash.bashrc. Problème évident, c’est pour bash uniquement entre autres défauts.

Un meilleur moyen de journaliser les commandes shell lancées par les utilisateurs consiste à procéder à la surveillance au niveau kernel et surveiller les appels systèmes execve. Pour cela, il suffit d’installer le package Ubuntu auditd ou audit sous RHEL/CentOS et de définir ces règles attendues dans le fichier /etc/audit/audit.rules :

-a exit,always -F arch=b64 -S execve
-a exit,always -F arch=b32 -S execve

Un redémarrage de service plus tard via systemctl restart auditd.service et vous devriez avoir dans les logs :

type=SYSCALL msg=audit(1515528873.798:63): arch=c000003e syscall=59 success=yes exit=0 a0=5652c9478ab8 a1=5652c94799b8 a2=5652c94775d0 a3=7f5e64fa1b78 items=2 ppid=5976 pid=5977 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="apt" exe="/usr/bin/apt" key=(null)
type=EXECVE msg=audit(1515528873.798:63): argc=3 a0="apt" a1="install" a2="john"
type=PATH msg=audit(1515528873.798:63): item=0 name="/usr/bin/apt" inode=152 dev=fc:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL

Il est  également possible de restreindre les logs du root uniquement (ou l’Effective UID) de cette manière :

-a exit,always -F arch=b64 -F euid=0 -S execve
-a exit,always -F arch=b32 -F euid=0 -S execve

Il ne reste plus qu’à historiser les logs dans un serveurs syslog centralisé.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.