Comment enregistrer tous les appels système effectués par un processus et tous ses descendants avec auditd

13

Je peux faire

auditctl -a always,exit -S all -F pid=1234

Pour enregistrer tous les appels système effectués par le pid 1234 et:

auditctl -a always,exit -S all -F ppid=1234

Pour ses enfants, mais comment puis-je couvrir les petits-enfants et leurs enfants (actuels et futurs)?

Je ne peux pas compter sur (e) uid / (e) gid qui changent.

(notez que l'utilisation stracen'est pas non plus une option)

Stéphane Chazelas
la source
4
omg, omg, omg, Stéphane pose une question ... (Je suis venu ici juste du titre, en pensant strace -s^^ mais ensuite j'ai vu qui demandait et j'ai tout de suite su "il le sait déjà!") ... Stéphane, pouvez-vous peut-être: 1) construire la liste des pids en utilisant l'option "tree" de ps, 2) lancer auditctl (s) sur tous les pids listés dans l'arborescence? (c.-à-d., pouvez-vous avoir plusieurs "pid = ...."? ou plusieurs auditctl, chacun sur un?) ou la manière "stupide": auditctl tout, et une sorte d'egrep sur le "pid | pid | pid" si ils apparaissent sur chaque ligne?) (mise en garde: je n'ai pas accès à linux atm, donc je n'ai aucune idée de la façon dont les infos apparaissent)
Olivier Dulac
une astuce que vous pourriez peut-être utiliser (encore une fois, je ne connais pas les détails de auditd, je ne peux pas essayer pour le moment): spécifier une variable d'environnement spécifique lors du lancement du parent le plus haut, et auditctl tous les processus ayant cette variable définie?
Olivier Dulac
@OlivierDulac, marquer le processus d'une manière ou d'une autre (hérité des enfants) est une chose que j'ai en tête. Mais la liste des choses sur lesquelles les règles d'audit peuvent correspondre est assez mince (pas même Sid, Pgid ...). Peut-être ceux de SELinux, mais je ne sais pas la première chose à propos de SELinux. Peut-être traiter les espaces de noms?
Stéphane Chazelas
peut-être que le parent le plus élevé peut être dans son propre groupe de processus? ( en.wikipedia.org/wiki/Process_group )
Olivier Dulac
2
Je pensais peut-être exécuter votre programme dans un conteneur spécifique, si c'est une option pour vous. Si je comprends bien ce fil de bogue , cela devrait fonctionner avec un noyau ≥3.13. En dehors de cela, je ne vois aucune méthode autre que SELinux et l' UID d'audit . L'AUID serait-il applicable à votre cas d'utilisation?
Gilles 'SO- arrête d'être méchant'

Réponses:

1

Il suffit de proposer quelque chose sans avoir aucun moyen de l'essayer maintenant ... mais juste de deviner à partir du message lui-même

Voici une proposition de solution:

En supposant que l'ID de processus le plus élevé est dans $ pid, et que sur linux ps -Tdonne également l'arborescence des processus (je ne peux pas avoir accès à linux pour le moment)

for eachpid in $(ps -T "$pid" | awk '{print $1}' | grep -v 'PID')
do
   auditctl -a always,exit -S all -F pid=$eachpid  >somelog_${eachpid}.log 2>&1
done

Bien sûr, remplacez-le ps -T "$pid"par l'équivalent pour linux, si celui-ci ne fonctionne pas sur linux (ou trouvez-le en induisant la sortie "pstree -p", le pid sera entre parenthèses)

Olivier Dulac
la source
2
Merci, mais cela ne couvre pas les "futurs" enfants, et le faire fréquemment en boucle ne couvrira pas les processus de courte durée. Et la réutilisation de pid causerait également un problème.
Stéphane Chazelas
tous les points valides ... Alors je crois que ce que vous voulez est probablement une fonctionnalité "la plus recherchée", et pourrait donc déjà être présente au niveau auditctl (mais elle n'apparaît certainement pas en ce moment dans la page de manuel): elle peut avoir être proposé (ou ... écrit) pour une future version. Je ne me souviens pas d'une façon de "suivre un arbre" de processus ... mais vous pourriez peut-être implémenter un par 1) avoir un script faire des équivalents "ps -T" réguliers, 2) un autre script tue le 1er dès que le pid meurt 3) chaque fois que la liste des pid de 1) change, ajouter / supprimer l'auditctl pour ces pids? (pas trop difficile à faire)
Olivier Dulac
1
(mon dernier commentaire ne résout pas le pb pour les processus à très courte durée ... cela peut avoir besoin de quelque chose au niveau du noyau lui-même, et je ne sais pas assez pour vous dire si quelque chose existe pour cela. Peut valoir une question sur les listes de diffusion du noyau)
Olivier Dulac