如何使进程对其他用户不可见?

如何使进程对其他用户不可见?

如何启动一个进程并使其对top命令不可见?该进程由普通用户(而非 root)启动,并且对其他普通用户不可见。

答案1

Linux 内核自 3.3 起包含对其他用户隐藏进程的支持。

它是由hidepid=和完成的gid=如中所述对应的提交文档/文件系统/proc.txt

Debian Wheezy 也包含此功能。

答案2

top命令从 proc 中读取数据,该数据是直接从内核提供的。为了隐藏进程,您必须使用内核内的代码来进行屏蔽。

除了使用 SELinux 和 grsecurity(在其他答案中提到)等安全框架之外,rootkit 风格的代码是您唯一剩下的选择。我说“风格”是因为“rootkit”本身并不坏,重要的是它的使用方式。对其他用户隐藏进程背后有完全合法的理由,这就是安全框架中存在此功能的原因。

要让它工作,你必须遵循的基本路线是挂钩(或劫持,取决于你如何看待它)Linux 内核中分发数据的函数/proc/pid/。我演示了一种在我编写的安全模块中挂钩 Linux 内核函数的方法:

https://github.com/cormander/tpe-lkm

其“高级”代码位于hijack_syscalls()中的方法中security.c,而其背后的细节魔力则位于该hijacks.c文件中。

fs/proc/您可能会在Linux 内核源代码的目录中找到您想要挂钩的函数。请记住,Linux 不提供稳定的 ABI,因此您的代码需要进行一些更改才能使其在不同版本的 Linux 内核中工作。另外,请记住,您需要对计算机具有完全的 root 访问权限才能插入此代码。

更新:

如果你pid_getattr用一些额外的代码包装内核符号,那么做到这一点真的很容易。我最近向上述内核模块添加了一些隐藏进程的内容:

https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3

您可以通过使除 root 和该用户之外的任何人都无法查看某个用户或组的进程来执行类似的操作。通过进程名称执行此操作有点复杂,但也是可能的。看看这个exe_from_mm()函数。请注意,在pid_getattr.

答案3

看来有两个主要选择。

  • Selinux 的工作原理是将不同的人放入不同的安全域,并在某种意义上对他们进行沙箱,这样他们就看不到彼此的东西。这涵盖在这个问题。由于 selinux 正在迅速成为 Linux 世界事实上的安全框架,这可能是您应该关注的方向。

  • 另一个是 grsecurity 作为马里奥什提到 并作为在这个问题中问到。一些发行版有替代的内核包,并应用了 grsecurity 补丁。如果你有这个,你可能会考虑使用它们。

如果出于某种原因您想在不添加 selinux 或 grsecurity 等安全框架的情况下执行此操作,请解释一下您所做的不是编写 root-kit。

答案4

你可以用另一个名字覆盖你的argv[0]...但严格来说,你正在寻找某种rootkit。这可能会帮助你: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html

相关内容