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

Reply via email to