2012-10-16 97 views
8

我想创建一个从头开始锁定用户会话并监视属于该用户的进程所做的每个系统调用的内核模块。内核模块监控系统调用?

我知道大家都在想什么 - “使用strace” - 但我想用我收集的数据进行一些自己的日志记录和分析,strace有一些问题 - 应用程序可以使用“mmap”写入文件时不会出现文件内容作为“开放”系统调用的参数,或者没有任何写入权限的应用程序可能会创建复制敏感数据的内核。

我想能够处理这些特殊情况,并做一些我自己的日志记录。我想知道 - 我怎么能通过我的模块路由所有系统调用?有没有办法做到这一点,而不触及内核代码?

感谢

+1

你应该使用'ptrace'系统调用(它确实被'strace'和'gdb'使用)。祝你好运,你需要一些。但是你可能不需要编写任何内核模块,只需要使用'ptrace'开发一个应用程序。 –

回答

2

我有通过使用内核模块修补系统调用表,在过去做了类似的事情。每个修补功能都做了如下操作:

patchFunction(/*params*/) 
{ 
    // pre checks 
    ret = origFunction(/*params*/); 
    // post checks 
    return ret; 
} 

请注意,当您在内核数据结构中开始混淆时,您的模块将变为版本相关。内核模块可能必须针对您正在安装的特定内核版本进行编译。

另外请注意,这是许多rootkits采用的技术,所以如果你安装了安全软件,它可能会试图阻止你做这样的事情。

+0

这绝对是正确的方向。 https://bbs.archlinux.org/viewtopic.php?id=139406是我能找到的最好的指南。随着一些捣乱我到了我可以劫持任何系统调用的地方。谢谢您的帮助! – PinkElephantsOnParade