【问题标题】:Nvidia Information Disclosure / Memory Vulnerability on Linux and General OS Memory ProtectionNvidia 信息披露/Linux 上的内存漏洞和通用操作系统内存保护
【发布时间】:2011-06-12 14:51:30
【问题描述】:

我认为这是预期的行为?

发件人:http://classic.chem.msu.su/cgi-bin/ceilidh.exe/gran/gamess/forum/?C35e9ea936bHW-7675-1380-00.htm

意译摘要:“在 Linux 端口上工作,我们发现 cudaHostAlloc/cuMemHostAlloc CUDA API 调用返回未初始化的固定内存。这个漏洞可能允许人们检查其他程序和 Linux 内核以前使用的内存区域。我们建议每个人都停止在任何多用户系统上运行 CUDA 驱动程序。”

我的理解是“正常” malloc 返回未初始化的内存,所以我看不出这里有什么区别......

我理解内存分配的工作方式会导致以下情况发生:

-userA 在处理大量敏感信息的系统上运行程序。计算完成后,将结果写入磁盘,进程退出,userA 注销。

-userB 接下来登录。 userB 运行一个程序,请求系统中的所有可用内存,并将其未初始化内存的内容(其中包含 userA 留在 RAM 中的一些敏感信息)写入磁盘。

我必须在这里遗漏一些东西。它是什么?内存在某处被清零了吗?内核/固定内存在相关方面是否特别?

【问题讨论】:

    标签: security memory malloc cuda gpgpu


    【解决方案1】:

    malloc() 返回的内存可能是非零的,但只有在被相同 进程中的其他代码使用和释放之后。从来没有另一个过程。操作系统应该严格执行进程之间的内存保护,即使它们已经退出。

    内核/固定内存的特殊之处在于,它显然为内核模式驱动程序提供了破坏操作系统进程保护保证的机会。

    所以不,这不是预期的行为;是的,这是一个错误。感谢 NVIDIA 如此迅速地采取行动!

    【讨论】:

      【解决方案2】:

      安装 CUDA 需要 root 权限的唯一部分是 NVIDIA 驱动程序。因此,使用 NVIDIA 编译器和链接完成的所有操作都可以使用常规系统调用和标准编译来完成(前提是您有正确的信息 -lol-)。如果存在任何安全漏洞,无论是否修改了 cudaHostAlloc/cuMemHostAlloc,它都会保留。

      我对这篇文章中看到的第一个答案持怀疑态度。 malloc 的手册页指定 内存没有被清除。免费的手册页没有提到任何清除内存的内容。 清除内存似乎是敏感部分的编码人员的责任 -lol-,这会留下意外(罕见)退出的问题。除了 VMS(良好但未广泛使用的操作系统)之外,我认为任何操作系统都不会接受系统清除的性能成本。我不清楚系统如何在新分配的内存堆中跟踪进程区域中先前存在的内容,以及不存在的内容。

      我的结论是:如果您需要严格的隐私级别,请不要使用多用户系统 (或使用 VMS)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        • 1970-01-01
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多