【问题标题】:Disabling vsyscalls in Linux在 Linux 中禁用 vsyscall
【发布时间】:2012-01-06 23:27:59
【问题描述】:

我正在开发一个使用 ptrace(2) 监视其他进程的系统调用的软件。不幸的是,大多数现代操作系统都实现了某种快速的用户模式系统调用,在 Linux 中称为 vsyscalls

有没有什么方法可以禁止单个进程使用 vsyscalls/vDSO,如果不可能的话,可以禁用整个操作系统?

【问题讨论】:

  • 你是否暗示 ptrace 不会捕获所有 vsyscall-ed 系统调用?

标签: linux system-calls ptrace


【解决方案1】:

试试echo 0 > /proc/sys/kernel/vsyscall64

如果您尝试对 gettimeofday 调用进行 ptrace 并且它们没有显示,那么系统使用的时间源是什么(pmtimer、acpi、tsc、hpet 等)。我想知道您是否会通过尝试将计时器强制设置为像 pmtimer 这样较旧的东西来取笑我。许多 gtod 计时器特定优化之一可能会导致您的 ptrace 调用被避免,即使 vsyscall 设置为零。

【讨论】:

  • 试过了,好像没用,还是看不到 time/gettimeofday 系统调用。我还尝试了vdso=0 引导选项,但没有成功。
  • @Michael 你看过 gettimeofday 的来源,看看它是否尊重 vsyscall 标志?今晚我会自己调查一下。
  • 好的,我可以看到带有 vsyscall64=0 的 gettimeofday 系统调用,但我仍然看不到 time 系统调用。
  • 一定是其他问题,你是对的,我可以看到所有带有 vsyscall64=0 的系统调用。
  • 有关在不进行系统范围更改的情况下避免 vDSO 调用特定进程的方法,请参阅我的回答:stackoverflow.com/a/52402306/10126273
【解决方案2】:

是否有任何方法可以禁用对单个进程使用 vsyscalls/vDSO,或者,如果不可能,对整个操作系统禁用?

事实证明 IS 有一种方法可以有效地为单个进程禁用链接 vDSO,而无需使用 ptrace 在系统范围内禁用它!

您所要做的就是在跟踪进程从execve 返回之前停止它,并从辅助向量中删除AT_SYSINFO_EHDR 条目(它直接位于rsp 中指向的内存区域的环境变量之后) . PTRACE_EVENT_EXEC 是这样做的好地方。

AT_SYSINFO_EHDR 是内核用来告诉系统链接器 vDSO 在进程地址空间中的映射位置。如果此条目不存在,ld 似乎系统没有映射 vDSO。

请注意,这不会以某种方式从您的进程内存中取消映射 vDSO,它只是在链接其他共享库时忽略它。如果作者真的愿意,恶意程序仍然可以与之交互。

我知道这个答案有点晚了,但我希望这个信息能让一些可怜的人头疼

【讨论】:

  • 这要求进程(您要为其禁用 vdso)在某个包装器可执行文件/脚本下运行,对吗?如果您有的话,能否请您发布此类可执行文件或脚本的源代码(或发布指向它的链接)?
【解决方案3】:

对于较新的系统,echo 0 > /proc/sys/kernel/vsyscall64 可能无法正常工作。在 Ubuntu 16.04 中,可以通过在参数/etc/default/grub 中添加内核参数 vdso=0 来在系统范围内禁用 vDSO:GRUB_CMDLINE_LINUX_DEFAULT

重要提示:参数GRUB_CMDLINE_LINUX_DEFAULT 可能会被/etc/default/grub.d/... 中的其他配置文件覆盖,因此请仔细检查何时添加自定义配置。

【讨论】:

【解决方案4】:

根据Tenders McChiken's approach,我确实创建了一个包装器,它为任意二进制文件禁用 vDSO,而不影响系统的其余部分:https://github.com/danteu/novdso

一般程序很简单:

  1. 使用 ptrace 等待 execve(2) 返回
  2. 找到辅助向量的地址
  3. 用 AT_IGNORE 覆盖 AT_SYSINFO_EHDR 条目,告诉应用程序忽略以下值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多