如何启动一个进程并使其对top
命令不可见?该进程由普通用户(而非 root)启动,并且对其他普通用户不可见。
答案1
答案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
答案4
你可以用另一个名字覆盖你的argv[0]...但严格来说,你正在寻找某种rootkit。这可能会帮助你: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html