10

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

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

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

谢谢

4

2 回答 2

4

我对你的问题没有确切的答案,但我几天前写了一篇论文,它可能对你有用:

http://www.cse.iitk.ac.in/users/moona/students/Y2157230.pdf/

于 2012-10-16T15:24:38.567 回答
2

过去,我通过使用内核模块修补系统调用表来做过类似的事情。每个修补后的函数都执行如下操作:

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

请注意,当您开始处理内核数据结构时,您的模块将变得依赖于版本。内核模块可能必须针对您正在安装的特定内核版本进行编译。

另请注意,这是许多 rootkit 采用的一种技术,因此如果您安装了安全软件,它可能会试图阻止您执行此类操作。

于 2012-10-16T15:49:51.887 回答