如何记录已审核的流程及其后代的所有系统调用


13

我可以

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

要记录由pid 1234完成的所有系统调用,并且:

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

对于它的孩子们,但是我又该如何照顾他们的孙子及其子孙(当前和将来)?

我不能依靠确实改变的(e)uid /(e)gid。

(请注意,使用strace也不是一种选择)


4
omg,omg,omg,Stephane 一个问题...(我刚从标题来到这里,想着strace -s^^,但后来我看到谁在问,立即知道“他已经知道了!”)... Stephane,可以吗?也许:1)使用ps的“ tree”选项构建pid列表,2)在树中列出的所有pid上启动auditctl(s)?(即,您可以同时使用多个“ pid = ....”吗?还是多个auditctl?)或“哑巴”方式:对所有内容进行auditctl,并在“ pid | pid | pid”上使用某种egrep它们出现在每一行上吗?)(caveat:我无权访问linux atm,所以我不知道信息的显示方式)
Olivier Dulac 2014年

您可能会使用的技巧(再次,我不知道auditd的细节,现在也不能尝试):启动最高父级时指定一个特定的环境变量,并对所有设置了此变量的进程auditctl?
Olivier Dulac 2014年

@OlivierDulac,以某种方式标记过程(由孩子继承)是我想到的一件事。但是审核规则可以匹配的事物列表非常少(甚至没有sid,pgid ...)。也许是SELinux的,但是我不了解SELinux的第一件事。也许进程名称空间?
斯特凡Chazelas

也许最高的父级可以在其自己的进程组中?(en.wikipedia.org/wiki/Process_group
奥利弗杜拉克

2
我认为也许可以在特定的容器中运行您的程序,如果可以的话。如果我正确理解了该错误线程,则应该在≥3.13的内核上工作。除此之外,除了SELinux和audit UID之外,我没有看到任何其他方法。AUID是否适用于您的用例?
吉尔斯(Gillles)“所以-别再邪恶了”

Answers:


1

只是提出一些建议而现在没有任何尝试的方法...但是只是从帖子本身中猜测

这是解决方案的建议:

假设最高的进程ID在$ pid中,并且在linux上也ps -T给出了进程树(目前我无法访问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

当然ps -T "$pid",如果在Linux上不起作用,则替换为Linux的等效项(或通过awk-ing“ pstree -p”输出找到它,该pid将在括号之间)


2
谢谢,但这不能涵盖“未来”的孩子,而以循环方式运行它经常不会涵盖短暂的进程。pid重复使用也会引起问题。
斯特凡Chazelas

所有有效点...然后,我相信您想要的可能是“最想要的”功能,因此可能已经出现在auditctl级别上(但现在肯定不会在联机帮助页中出现):它可能具有拟议(或...编写)以用于将来的版本。我不记得有什么方法可以“跟随一棵树”的进程了……但是您可能可以通过以下方式来实现:1)让某些脚本执行常规的“ ps -T”等效项,2)另一个脚本杀死第一个脚本pid死亡3)每次pid列表从1)更改时,添加/删除这些pid的auditctl吗?(不太
难做

1
(我的最后一句话并不能解决进程很短的pb ...这可能需要内核级别的东西,而且我还不足以告诉您是否存在某些东西。可能值得提出一个问题。内核邮件列表)
Olivier Dulac 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.