动态内存分配期间的数据安全
Data security during dynamic memory allocation
几分钟前,我和我的朋友在 leetcode.com 上解决了一些算法问题并分享了我们的解决方案。我们使用高级语言,当 Ruby 中的 Array.new(128)
或 Java 中的 int[] map = new int[128];
分配的新内存已经被类似零的值 nil
或 0
分别.
所以保证高层程序已经清空了。
这里我有一个问题:在 C 或 Assembler 程序中,新的内存块是否会发生未更改地存储来自其他进程的数据的情况?
因此一个进程获取另一个进程的数据。甚至可能是前一段时间在系统中工作的另一个用户的数据。会不会是信息泄露的一种方式?
OS 在进程之间共享内存之前是否清除内存?如果是这样,运行 这么多次迭代是不是很昂贵?
谢谢。
更新: http://www.cplusplus.com/articles/ETqpX9L8/ 看起来需要手动清除 "lower-level" 语言中有价值的数据,以防止数据泄漏到其他进程。
是的,在内存未初始化的低级语言中,它可能包含来自其他进程的有价值的东西。通过不断分配内存并扫描它以寻找有用的信息,以这种方式进行了加密密钥泄漏攻击。
存储密码或加密密钥等的安全敏感程序应始终在使用后尽快清除内存。这不仅是为了防止通过重新分配的内存泄漏,还有其他攻击媒介,如 RAM 转储,可用于提取秘密。完成记忆后,始终将其归零或随机化。
几分钟前,我和我的朋友在 leetcode.com 上解决了一些算法问题并分享了我们的解决方案。我们使用高级语言,当 Ruby 中的 Array.new(128)
或 Java 中的 int[] map = new int[128];
分配的新内存已经被类似零的值 nil
或 0
分别.
所以保证高层程序已经清空了。
这里我有一个问题:在 C 或 Assembler 程序中,新的内存块是否会发生未更改地存储来自其他进程的数据的情况?
因此一个进程获取另一个进程的数据。甚至可能是前一段时间在系统中工作的另一个用户的数据。会不会是信息泄露的一种方式?
OS 在进程之间共享内存之前是否清除内存?如果是这样,运行 这么多次迭代是不是很昂贵?
谢谢。
更新: http://www.cplusplus.com/articles/ETqpX9L8/ 看起来需要手动清除 "lower-level" 语言中有价值的数据,以防止数据泄漏到其他进程。
是的,在内存未初始化的低级语言中,它可能包含来自其他进程的有价值的东西。通过不断分配内存并扫描它以寻找有用的信息,以这种方式进行了加密密钥泄漏攻击。
存储密码或加密密钥等的安全敏感程序应始终在使用后尽快清除内存。这不仅是为了防止通过重新分配的内存泄漏,还有其他攻击媒介,如 RAM 转储,可用于提取秘密。完成记忆后,始终将其归零或随机化。