05-避免暴露敏感信息
38.4 避免暴露敏感信息
当一个程序读取密码或其他敏感信息时应该在执行完所需的处理之后立即从内存中删除这些信息。(在8.5节中给出了一个这样的例子。)在内存中保留这些信息是一种安全隐患,其原因如下。
- 包含这些数据的虚拟内存页面可能会被换出(除非使用mlock()或类似的函数将它们锁在内存中),这样交换区域中的数据可能会被一个特权程序读取。
- 如果进程接收到了一个能导致它产生一个核心dump文件的信号,那么就有可能会从该文件中获取这类信息。
从上面的最后一点来讲,编写程序时应遵循的一个通用原则是安全程序应该避免产生核心dump。一个程序可以使用setrlimit()将RLIMIT_CORE资源限制设置为0来防止核心dump文件的创建(参见36.3节)。
在默认情况下,Linux不允许set-user-ID程序在收到信号时执行一个核心dump(参见22.1节),即使程序已经删除了所有的权限。但其他UNIX实现可能并没有提供这个安全特性。