Cet article est la suite de Utiliser auditd sur Mac OS X et FreeBSD - 1
Configuration : quid des utilisateurs comme www ?
J'expliquais précédemment que le système d'audit ne peut suivre un utilisateur que si ce dernier se connecte à la machine (par ssh par exemple), et que quelques soient les ruses utilisées (su, sudo...) c'est toujours l'UID réelle de l'utilisateur qui est suivie.
À cause de cela, il est totalement impossible de traquer des évènements appartenant à des utilisateurs qui ne peuvent pas se connecter au système. Ainsi, une ligne comme celle-ci dans audit_user
ne permettra de traquer aucun évènement :
# pour freebsd remplacer _www par www _www:fc,fd,ex:
Il serait pourtant très intéressant de savoir ce que fait Apache dans votre dos, parfois sous la direction de méchants pirates.
De nos jours, La plupart des serveurs utilisent des protocoles comme l'HTTP qui permettent aux utilisateurs d'accéder aux ressources sans être authentifiés au niveau du système. Les utilisateurs en question n'existent d'ailleurs pas au niveau du système. Néanmoins, les applications web permettent de faire énormément de choses via les langages comme le PHP, y compris d'interagir avec le système, en lançant des commandes, en créant des fichiers, etc.
Si on souhaite qu'auditd puisse contrôler les actions de www, il faut recourir à un artifice. Attention tout de même, ce qui suit est plus proche d'un hack que d'une méthode vraiment propre, et je ne peux pas garantir son fonctionnement correct dans un environnement de production.
En premier lieu il faut installer un programme spécifique, qui va permettre de forcer auditd
à suivre les actions pour une UID donnée, sans que l'utilisateur correspondant ait besoin de se connecter à la machine.
curl -LO http://www.freebsd.org/~csjp/setaudit.c cc -o setaudit -lbsm setaudit.c
Cela vous donne, si tout se passe bien, le binaire setaudit
, que l'on va utiliser sous cette forme :
setaudit -a UID_WWW -m FLAGS /programme/de/lancement/d/apache
Pour suivre les évènements d'exécution de commande sous respectivement FreeBSD et Mac OS X, cela donnera :
setaudit -a www -m ex /usr/local/etc/rc.d/apache22 restart setaudit -a _www -m ex /usr/sbin/apachectl restart
Ainsi, toutes les commandes lancées par Apache (donc sous l'UID www) sont enregistrées par auditd
.
Comme le masque des évènements (les flags de l'argument -m
) décrit ce que l'on doit suivre, il est même inutile de renseigner le fichier audit_user
.
Pour résumer :
- Si vous souhaitez que l'audit suive les utilisateurs qui se connectent à la machine, vous pouvez régler les classes d'évènements qui seront soumises à l'audit pour l'ensemble des utilisateurs dans le fichier
audit_control
, et gérer les cas particuliers dansaudit_user
. - Si vous souhaitez que l'audit suive des UID "interne", pour traquer tout signe de compromission sur un serveur web, un serveur de mail, etc. il faudra recourir à
setaudit
pour activer l'audit au moment du lancement du service correspondant. - Faites attention à la liste de flags que vous choisissez. Le volume des logs d'audit peut grossir très rapidement.