Come registrare tutte le chiamate di sistema effettuate da un processo e tutti i suoi discendenti con auditd


13

posso fare

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

Per registrare tutte le chiamate di sistema effettuate da pid 1234 e:

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

Per i suoi figli, ma come posso coprire anche i nipoti e i loro figli (attuali e futuri)?

Non posso fare affidamento su (e) uid / (e) gid che cambiano.

(notare che l'utilizzo stracenon è un'opzione)


4
omg, omg, omg, Stephane chiedendo una domanda ... (Sono venuto qui solo dal titolo, il pensiero strace -s^^ ma ha visto poi che chiedeva e subito sapeva "sa che già!") ... Stephane, si può forse: 1) costruire l'elenco dei pid usando l'opzione "albero" di ps, 2) avviare auditctl (s) su tutti i pid elencati nell'albero? (vale a dire, puoi avere più "pid = ...."? o più auditctl, ognuno su uno?) o il modo "stupido": auditctl tutto, e qualche tipo di egrep sul "pid | pid | pid" se compaiono su ogni riga?) (avvertenza: non ho accesso a Linux Atm, quindi non ho idea di come appaiono le informazioni)
Olivier Dulac,

un trucco che potresti usare (ancora una volta, non conosco i dettagli di auditd, né posso provarlo al momento): specificare una variabile di ambiente specifica all'avvio del genitore più in alto, e controllare tutti i processi con questa variabile impostata?
Olivier Dulac,

@OlivierDulac, segnare il processo in qualche modo (che è ereditato dai bambini) è una cosa che ho in mente. Ma l'elenco delle cose su cui le regole di controllo possono corrispondere è piuttosto sottile (nemmeno sid, pgid ...). Forse quelli SELinux, ma non conosco la prima cosa su SELinux. Forse elaborare spazi dei nomi?
Stéphane Chazelas,

forse il genitore più in alto può essere nel proprio gruppo di processi? ( en.wikipedia.org/wiki/Process_group )
Olivier Dulac,

2
Ho pensato che forse avvii il tuo programma in un contenitore specifico, se questa è un'opzione per te. Se capisco correttamente questo thread di bug , dovrebbe funzionare con un kernel ≥3.13. A parte questo, non vedo alcun metodo diverso da SELinux e l' UID di controllo . L'AUID sarebbe applicabile al tuo caso d'uso?
Gilles 'SO- smetti di essere malvagio' il

Risposte:


1

Ti sto solo proponendo qualcosa senza avere modo di provarlo in questo momento ... ma solo indovinando dal post stesso

Ecco una proposta di soluzione:

Supponendo che l'id di processo più in alto sia in $ pid, e che anche su Linux ps -Toffra l'albero dei processi (al momento non ho accesso a Linux)

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

Naturalmente, sostituiscilo ps -T "$pid"con l'equivalente per Linux, se quello non funziona su Linux (o trovalo risvegliando l'output "pstree -p", il pid sarà tra parentesi)


2
Grazie, ma ciò non copre i bambini "futuri", e l'esecuzione in un ciclo frequente non coprirà i processi di breve durata. E il riutilizzo del pid causerebbe anche un problema.
Stéphane Chazelas,

tutti i punti validi ... Quindi credo che ciò che desideri sia probabilmente una funzionalità "più ricercata", e quindi potrebbe già essere presente a livello di auditctl (ma di certo non appare in questo momento nella manpage): potrebbe avere da proporre (o ... scrivere) per una versione futura. Non ricordo un modo per "seguire un albero" di processi ... ma potresti forse implementare uno per 1) avere qualche script che fa equivalenti regolari "ps -T", 2) un altro script uccide il primo non appena il pid muore 3) ogni volta che l'elenco dei pid da 1) cambia, aggiungi / rimuovi auditctl per quei pid? (non troppo difficile da fare)
Olivier Dulac,

1
(il mio ultimo commento non risolve il pb per processi di breve durata ... questo potrebbe aver bisogno di qualcosa a livello del kernel stesso, e non so abbastanza per dirti se esiste qualcosa per quello. Potrebbe valere una domanda su le mailing list del kernel)
Olivier Dulac,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.