Linux 支持进程的内存隔离吗?

zzy*_*zzy 4 linux memory process isolation

更详细地说,问题是:没有root权限,一个进程是否可以读取(而不仅仅是写入)另一个进程的内存?(例如,通过某种方式读取 /proc/gcore 或 /proc/[PID]/mem。我还不确定他们的权限要求。)

我确实明白虚拟地址是实现的,每个进程都有自己的空间。我进行了快速搜索,但既没有找到强有力的保证,也没有找到破解方法。这篇文章说:

系统中的每个进程都有自己的虚拟地址空间。这些虚拟地址空间彼此完全独立,因此运行一个应用程序的进程不会影响另一个应用程序。此外,硬件虚拟内存机制允许保护内存区域免遭写入。这可以保护代码和数据不被恶意应用程序覆盖。

我不确定“影响”是否也包括“读取”,硬件似乎只保护内存不被覆盖。

大家知道Linux系统的这种隔离是否有强有力的保证,或者如果它可能被黑客攻击,如何保证?

提前致谢!

Ric*_*ali 6

旁注:据我所知,鉴于其作为安全问题的重要性,这是一个记录不足的主题。

\n

太长; 请勿阅读:进程的虚拟地址空间与另一个进程完全隔离。Linux 内核在内核模式下运行时可以访问整个内存。它提供的系统调用允许进程在某些情况下(请参阅下面的Ptrace 访问模式检查)访问另一个进程的内存。

\n
\n

Linux内核中有一些系统调用允许读/写其他进程的内存:

\n
    \n
  • process_vm_readv()process_vm_writev()同一手册页

    \n
    \n

    这些系统调用在调用进程(“本地进程”)和由 pid 标识的进程(“远程进程”)的地址空间之间传输数据。数据直接在两个进程的地址空间之间移动,而不经过内核空间。

    \n
    \n

    最后一句指的是内核模式下发生的情况(内核实际上在两个物理地址之间进行复制)。用户态不能访问其他虚拟地址空间。有关技术细节,请查看实施补丁

    \n

    关于所需的权限:

    \n
    \n

    读取或写入另一个进程的权限由 ptrace 访问模式PTRACE_MODE_ATTACH_REALCREDS检查控制;请参阅ptrace()

    \n
    \n
  • \n
  • ptrace()

    \n
    \n

    ptrace() 系统调用提供了一种方法,一个进程(“跟踪器”)可以通过该方法观察和控制另一个进程(“被跟踪者”)的执行,并检查和更改被跟踪者的内存和寄存器

    \n
    \n
  • \n
\n

关于所需的权限,根据ptrace()手册页:

\n
\n

ptrace 访问模式检查

\n

内核用户空间 API 的各个部分(不仅仅是 ptrace() 操作)需要所谓的“ptrace 访问模式”检查,其结果决定是否允许操作(或者,在少数情况下,导致“读“返回清理数据的操作)。当一个进程可以检查有关另一进程的敏感信息或在某些情况下修改另一进程的状态时,将执行这些检查。 检查基于两个进程的凭据和功能、“目标”进程是否可转储以及任何启用的 Linux 安全模块 (LSM)\xe2\x80\x94 执行的检查结果等因素、SELinux、Yama 或 Smack\xe2\x80\x94 以及 commoncap LSM(始终被调用)。

\n
\n

相关内容:

\n
    \n
  • CAP_SYS_PTRACE能力。查看功能手册页。

    \n
  • \n
  • 列表Linux 内核系统调用的所有手册页。

    \n
  • \n
  • 崩溃与幽灵漏洞。

    \n
  • \n
\n