我想ptrace
在最新版本的 Ubuntu 上使用来检查在同一操作系统用户下运行的任何其他进程的内存。然而,我很快就偶然发现
不允许操作
经过快速的网络搜索后,我发现:
在 Ubuntu 10.10 及更高版本中,用户无法 ptrace 不是调试器后代的进程。该行为可通过 /proc/sys/kernel/yama/ptrace_scope sysctl 进行控制,可通过 Yama 获得。
我知道我可以将此值设置为 0,然后执行我想要的操作。但是,我想知道是否存在ptrace_scope
默认设置为零的 Linux 发行版?
答案1
是的,有。例如 Debian 短暂地设置了ptrace_scope=1
默认值切换回来。
ptrace
禁用非子进程所提供的保护在某种程度上是有限的:它可以防止真实但范围狭窄的漏洞利用,并且成本虽小但不可忽略。能够从以某个用户身份运行的进程运行的攻击者ptrace
已经可以以该用户身份运行任意进程并访问该用户的所有文件。因此,这些ptrace_scope
限制仅保护已经运行的进程的特权和机密信息,典型的情况是正在运行的密钥代理进程(ssh-agent
、gpg-agent
、gnome-keyring-daemon
、 …),其内存中有用户输入的机密。限制的代价是应用程序只能用于ptrace
控制它们启动的进程;这允许诸如在gdb
或下运行进程之类的用例,fakeroot
但不允许诸如将调试器附加到正在运行的程序或 之类的用例reptyr
。
答案2
如果有的话,就不应该有。他们中的大多数人不久后就换了: https://www.youtube.com/watch?v=hAj2_-KWeoo
简而言之:一个聪明的家伙决定通过 ptrace 在 Linux 上实现 create-remote-thread 以将代码注入到外部进程中。