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


19

您如何启动进程并使它对top命令不可见?该过程由普通用户(不是root用户)启动,其他普通用户不应看到。


1
这种破坏达到最高目的的目的,太容易被滥用了。为什么不简单地重命名进程?this_is_not_the_process_you_are_looking_for

我知道,该如何隐藏用户?

5
请告诉我们您不打算编写root-kit。您能否解释一下您的情况,以便我们也许可以建议一种更好的安全体系结构,而不是通常被认为是“邪恶”行为的体系结构?
卡莱布

2
您可以使用grsecuritySELinux。两者都需要root干预才能进行初始设置。
吉尔(Gilles)“所以,别再邪恶了”,

Answers:



11

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


4

似乎有两个主要选择。

  • Selinux的工作原理是将不同的人员置于不同的安全域中,并在某种意义上将其沙盒化,以使他们看不到彼此的东西。这个问题涵盖了这一点。由于selinux迅速成为Linux世界中的实际安全框架,所以这可能是您应该寻找的方向。

  • 另一个是marioosh提到在此问题中提出的安全问题。一些发行版使用了grsecurity补丁来替代内核程序包。如果您有此功能,则可以考虑使用它们。

如果出于某种原因您想要在不添加诸如selinux或grsecurity之类的安全框架的情况下执行此操作,请说明您的工作方式是不编写root-kit。


1

在标准linux机器上并不是那么简单。看一下grsecurity,但是它需要修补内核等。


2
我认为这是selinux内核的标准配置。
2011年


0

您可以编写一个等效的命令,其功能类似于top,但不会显示与特定名称匹配的进程。或者,您可以获取top命令的源代码并进行相应的修改。然后,可以用您的版本替换(或无论在何处)该top命令/usr/sbin


2
替换“ top”并不会阻止用户执行top的操作。
蒂姆·波斯特

2
不,但是问题问如何使进程对top命令不可见。
劳伦斯C
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.