如果 xterm 和 firefox 都调用 syscall=socketcall(recvmsg),我如何区分

如果 xterm 和 firefox 都调用 syscall=socketcall(recvmsg),我如何区分

---- type=PROCTITLE msg=audit(2017 年 9 月 3 日星期日 ^E.370:2020074) : proctitle=/usr/bin/xterm -fg White -bg black type=SOCKETCALL msg=audit(2017 年 9 月 3 日星期日 ^E .370:2020074) : nargs=3 a0=0x3 a1=0xbf9a8274 a2=0x0 type=SYSCALL msg=audit(2017 年 9 月 3 日星期日 ^E.370:2020074) : arch=i386系统调用=套接字调用(recvmsg) 成功=不退出=EAGAIN(资源暂时不可用)a0=recvmsg a1=0xbf9a81f4 a2=0x0 a3=0x0items=0 ppid=16776 pid=16777 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(无) ses=unsetcomm=xterm exe=/usr/bin/xterm 关键=混蛋

---- type=PROCTITLE msg=audit(2017年9月3日星期日^E.638:2020105) : proctitle=/usr/local/firefox/firefox type=SOCKETCALL msg=audit(2017年9月3日星期日^E.638:2020105 ) : nargs=3 a0=0x4 a1=0xbfaf8854 a2=0x0 type=SYSCALL msg=audit(2017 年 9 月 3 日星期日 ^E.638:2020105) : arch=i386系统调用=套接字调用(recvmsg)成功=不退出=EAGAIN(资源暂时不可用)a0=recvmsg a1=0xbfaf87d4 a2=0x0 a3=0xb771f000items=0 ppid=22804 pid=22815 auid=unset uid=geek gid=geek euid=geek suid=geek fsuid=geek egid=geek sgid=geek fsgid=geek tty=(无) ses=unset comm=firefoxexe=/usr/local/firefox/firefox 关键=混蛋

我在用:

auditctl -a 退出,始终 -F arch=i686 -S socketcall -k jackass

我发现这很有帮助,但在上面的示例中似乎不起作用。 Suse 审计文档例子-F a0=1

可以过滤,但由于两个调用都使用接收消息这没有用。我需要一些方法来区分使用a1 a2 a3。 SUSE 文档说:

-F a1=10 过滤器将匹配范围缩小到携带 IPv6 协议族域参数 (PF_INET6) 的套接字系统调用。

然而,在这些调用中,a1=0xb5d12130 是不可读的胡言乱语。它看起来是一个指向相应调用的参数数组的指针。x86 上的多路复用系统调用

int socketcall(int call, unsigned long *args);

args points to a block containing the actual arguments, which are passed
       through to the appropriate call.

答案1

接收来自(2)手册页。

该系统调用需要一个文件描述符,并且在不同的进程中, fd 可能会有所不同(并引用一些不同的 inode)。

另请阅读高级Linux编程(可免费下载)。

您也可以使用/proc/(参见过程(5))。可能ls -l /proc/$(pidof firefox)/fd/ls -l /proc/$(pidof xterm)/fd/ 告诉这些文件描述符不同的事情。

相关内容