我刚刚在我的笔记本电脑上运行了内存测试(来自制造商,运行作为 Windows 10 Pro 中的服务) 我突然想到他们声称能够真正测试系统中的所有内存(这需要读取和写入内存)。
然而,在现代系统中,应用程序永远不会获得“真实”内存,它们获得的是虚拟内存映像(它们本质上认为它们可以访问整个系统,但实际上它是内存的虚拟图像)。因此,一个应用程序不可能(除非有错误)访问另一个应用程序使用的内存。
假设这些内存测试程序确实有效,并没有骗我,那么假设它真的可以读写系统中的所有内存进行测试,这怎么会不是安全问题呢?更不用说 Windows 应用程序测试它自己运行时使用的内存的问题了。
我在这里遗漏了什么?
谢谢!
答案1
[...]一个应用程序不可能访问另一个应用程序使用的内存(除非有错误)。
真的,除非应用程序具有所需的特权/权限。在大多数系统中,内存访问限制可以通过特殊权限来规避,因为有一些访问受限内存的合法用途,例如调试。具体来说,在 MS Windows 上,例如,有函数ReadProcessMemory()
和WriteProcessMemory()
可以执行此操作。但是,它们需要特殊权限才能工作(参见例如如何提升内存编辑器中访问内存的权限?了解详情)。
因此该服务大概以管理员或类似的权限运行。
假设它真的可以读写系统中的所有内存进行测试,这怎么就不是一个安全问题了
如果服务具有读取所有内存的适当权限,那么从操作系统的角度来看这不是安全问题 - 服务在安装时已获得授权(由您或制造商授权)。如果服务存在安全漏洞(例如远程代码执行漏洞),那么在实践中它仍可能是一个安全问题,但这取决于服务(与任何以提升的权限运行的服务一样)。
假设这些记忆测试程序确实有效并且没有骗我,
这不是必然的——软件供应商有时也会歪曲事实,就像其他人一样。我认为,服务能够在运行系统上测试内存,不受任何权限问题的影响,这一点值得怀疑——服务如何能够测试正在使用的内存,而不会干扰其他软件?也许他们确实做到了,或者服务只测试当前未使用的内存,或者只测试读取……如果不进行分析,就不可能知道。
正如评论中指出的那样,常见的内存测试程序,例如 BIOS 内存检查或Memtest86,在启动后立即运行,无需加载操作系统,因此它们可以完全、独占地访问内存和 CPU。