内存泄漏如何导致信息泄露?

时间:2018-05-13 18:13:46

标签: security memory memory-leaks

我对这件事情有点困惑。我知道用不使用自动垃圾收集的语言编写的每个程序都必须在退出之前释放所有资源,否则会出现内存泄漏。

我的问题是,这些内存泄漏是如何导致信息泄露的,例如泄漏密码等?

我的理解是,在程序退出后,其使用的内存可以被其他程序重用或检查。因此,如果该内存区域未被清除,它将包含一些重要信息,如密码。

2 个答案:

答案 0 :(得分:1)

程序使用的内存确实在终止/退出后仍然包含有趣的信息 然而,对于不包含任何内存泄漏的程序也是如此。正确释放已分配的内存并不能清除它。

然而,任何未正确释放已分配内存的程序很可能也无法安全地删除该忘记/泄漏内存中的信息。
请注意"泄露"在这种情况下,指的是在程序结束之前没有释放的内存,忽略了这样的事实,即几乎每个现代操作系统都会恢复这样的内存。内存可供其他程序使用,尤其是稍后启动的程序 明确删除或隐含释放内存的操作系统是可能的,但在专用的安全相关用例之外不太可能。

上面有"明确删除"我的意思是程序本身在释放之前写下无关的信息。使用"隐式删除"我的意思是释放它就足够了,在free()期间以某种方式发生删除。

我使用C作为示例语言,标签已经存在但已被删除(并非不合理)。

Garabge集合(用暗示它的语言)不会改变这一点。垃圾收集(从责任中释放到正确释放内存)可以隐式覆盖新的可用内存,但不能保证;正如没有garabage集合的语言中的释放机制一样。

答案 1 :(得分:0)

问题与内存泄漏和垃圾收集无关。

不再需要内存后,其内容不会被删除,只是标记为免费。这样,如果您的应用程序在内存中有密码,即使在程序退出后它也可以保留在那里。

为防止此类信息泄露,您必须覆盖存储某些关键信息的内存中的位置。