On 2023/08/25 12:36, Paul Moore wrote: >> It is unfortunate that you continue ignoring the >> >> How can auditd generate logs that are not triggered via syscalls? >> >> line. I know how to configure syscall rules using "-S" option. But I do >> not know how to configure non syscall rules (such as process creation via >> kthread_create(), process termination due to tty hangup or OOM killer). > > At this point you've exhausted my goodwill so I would suggest simply reading > the audit code, manages, and experimenting with a running system to understand > how things work, especially for non-syscall records.
Are we on the same page that non-syscall records include process creation via kthread_create() and process termination via send_sig() ? I tried "make M=audit_test/" with below example. audit_test/audit_test.c ---------------------------------------- #include <linux/module.h> #include <linux/kthread.h> #include <linux/sched/signal.h> static int test_kthread(void *unused) { char *argv[3] = { "/bin/sleep", "10", NULL }; char *envp[1] = { NULL }; struct task_struct *p; printk("test_kthread is running with PID=%d\n", current->pid); call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC); rcu_read_lock(); for_each_process(p) { if (!(p->flags & PF_KTHREAD) && !strcmp(p->comm, "sleep")) { printk("Sending signal to PID=%d\n", p->pid); send_sig(SIGKILL, p, 1); } } rcu_read_unlock(); return 0; } static int __init test_init(void) { struct task_struct *task = kthread_create(test_kthread, NULL, "test_kthread"); if (!IS_ERR(task)) { wake_up_process(task); schedule_timeout_uninterruptible(5 * HZ); } return -EINVAL; } module_init(test_init); MODULE_LICENSE("GPL"); ---------------------------------------- audit_test/Makefile ---------------------------------------- obj-m += audit_test.o ---------------------------------------- I tried below steps in order to generate all possible records using auditd. ---------------------------------------- # auditctl -D No rules # auditctl -a exit,always # auditctl -a task,always # insmod audit_test/audit_test.ko insmod: ERROR: could not insert module audit_test/audit_test.ko: Invalid parameters # auditctl -D No rules # dmesg [ 219.826840] test_kthread is running with PID=4044 [ 219.832367] Sending signal to PID=4045 # ausearch -p 4044 <no matches> # ausearch -p 4045 | sed -e 's/ /\n/g' | grep syscall= | sort -uV syscall=0 syscall=2 syscall=3 syscall=5 syscall=9 syscall=10 syscall=11 syscall=12 syscall=21 syscall=35 syscall=158 ---------------------------------------- Only records issued by system calls (read(),open(),close(),fstat(),mmap(), mprotect(),munmap(),brk(),access(),nanosleep(),arch_prctl()) are generated. Neither records issued by process creation via kthread_create() nor records issued by process termination via send_sig() are generated. Are you confident that auditd is already capable of generating records for e.g. process creation via kthread_create() and process termination via send_sig() ? > If you find a place in the code where you believe there should be an audit > record, > post a patch and we can discuss it. I believe that auditd needs to be able to generate records for e.g. process creation via kthread_create() and process termination via send_sig(), if you insist that we can emulate process history information offered by this patch from user space using records generated by auditd. (That sounds beyond CONFIG_AUDITSYSCALL=y though...) -- Linux-audit mailing list Linux-audit@redhat.com https://listman.redhat.com/mailman/listinfo/linux-audit