首页 > 解决方案 > 能够从尚未分配值的malloc'ed范围中读取它是一个安全漏洞吗?

问题描述

假设您有以下代码:

int *i = malloc(sizeof (int));
printf("%i", *i);

是否有i可能访问之前可能包含敏感数据但尚未擦除的内存空间?

当然,我意识到这在大多数现代机器上可能不是一个问题,但我很好奇它是否在较小的低功耗系统中是一个真正的问题,例如嵌入式平台,这些系统通常具有非常低的内存大小。

标签: cmalloc

解决方案


可以回答您标题中的问题,尽管显示的代码希望不可编译。

答案是肯定的。

如果您允许读取新分配的未初始化内存并且内容被泄露(即以某种方式到达外部),那么您可能会冒着知道该区域以前使用的安全相关值的风险。这是因为动态内存分配的目的是将释放的内存用于其他目的。

基于进程之间可访问内存空间的充分有效分离(我假设这需要硬件支持的内存管理)的保护性内存管理可以确保没有进程可以从不同进程的内存空间中读取任何内容。
基于此,流程设计可以确保任何输出流程都无法访问可能包含安全信息的内存。然而,这需要仔细的设计和遵守该设计的纪律。在意外或缺乏设计的情况下,安全访问进程也会输出,无论是在动态分配的内存中还是如您的问题所暗示的那样做一些错误,内存(地址空间)的分离并不能保护。

诚然,我认为您的问题暗示了这种情况,其中包含设计细节和错误。那么答案是肯定的(如上所述)。


推荐阅读