Se i kprobes sono abilitati nel kernel puoi usare execsnoop
da perf-tools:
Nel primo terminale:
% while true; do uptime; sleep 1; done
In un altro terminale:
% git clone https://github.com/brendangregg/perf-tools.git
% cd perf-tools
% sudo ./execsnoop
Tracing exec()s. Ctrl-C to end.
Instrumenting sys_execve
PID PPID ARGS
83939 83937 cat -v trace_pipe
83938 83934 gawk -v o=1 -v opt_name=0 -v name= -v opt_duration=0 [...]
83940 76640 uptime
83941 76640 sleep 1
83942 76640 uptime
83943 76640 sleep 1
83944 76640 uptime
83945 76640 sleep 1
^C
Ending tracing...
Il modo più semplice è abilitare il controllo delle chiamate di sistema
Vedere il seguente link per i dettagli,
Qualcuno conosce un modo semplice per monitorare lo spawn del processo di root | Errore del server
Se stai monitorando tutti i processi, rimuovi semplicemente -F uid=0
parte
I log vengono scritti in /var/log/audit/audit.log
Alcuni esempi di bpftrace
utilizzo per raggiungere l'obiettivo.
-
Il più semplice è rintracciare tutti i
exec
chiamate nel sistema:sudo bpftrace -e 'tracepoint:syscalls:sys_enter_exec*{ printf("pid: %d, comm: %s, args: ", pid, comm); join(args->argv); }'
Ci sono almeno due tracepoint che devi tenere d'occhio
sys_enter_execve
eenter_execveat
. Nell'esempio uso il*
simbolo che corrisponda a entrambe le chiamate di sistema (questa sintassi funziona dal 2019) . -
Si potrebbe anche voler monitorare tutti i thread creati nel sistema come:
sudo bpftrace -e 'kprobe:_do_fork{ printf("pid = %d, comm = %s\n", pid, comm); }'
Nessun argomento di processo per te in questo caso, tuttavia potrebbe essere utile.
Per vedere l'elenco di tutti gli eventi disponibili eseguire bpftrace -l
.