繁体   English   中英

检测Linux内核空间中的进程创建

[英]Detect process creation in Linux kernel space

我正在编写一个监视正在运行的进程的Linux模块,并且我希望在创建新进程时得到通知。

我一直在研究,我了解到可以读取/ proc / some-id来获取进程信息,但是inotify不会向/ proc报告更改,因为它是虚拟fs。 它只在读取时提供信息。

这是我的调查结果,以防有人也试图解决类似的问题:

1. pnotify(流程通知)

链接: http//lwn.net/Articles/153187/这是我最接近我想要做的,但它是在2005年发布的,似乎没有进入Linux发行版。 我们的想法是让innotify旁边有一个pnotify,并为流程监控提供类似的支持。

2.过程连接器

这个解决方案实际上是用户空间。 它使用PF_NETLINK与内核进行任何新创建的进程通信。

3.扫描task_struct

与2类似,但此解决方案使用内核扫描内核中的任务列表以查找新进程

for_each_task(task) 

proc信息被写入char设备。 用户空间应用程序将通过读取char设备来轮询新信息。

TBH,我的希望仍然是linux有一些像Windows的PsSetCreateProcessNotifyRoutine这样的机制: - /

实现SE Linux安全模块并使用在fork()的上下文中调用的诸如.task_create之类的钩子,或者在调用execv()的过程中在各个点调用的一个或多个.bprm_ *钩子。 。

看这里:

http://en.wikipedia.org/wiki/Linux_Security_Modules

和这里:

http://selinuxproject.org/page/NB_LSM

这里有一个例子:

http://lxr.free-electrons.com/source/security/selinux/hooks.c

你需要做的大部分只是一个传递,在钩子之外,你可以在execv() fork()execv()时用作通知。

确保正确链接模块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM