0

我试图确保敏感数据(密码,...)不会以明文形式保存在进程内存中,并且我发现发送到 OpenSSL 或从 OpenSSL 接收的所有数据都保存在内存中...

这是一个问题,因为从 SSL 连接发送或接收的数据可能包含我们不想保留在进程内存中的敏感信息。

笔记:

  • 只有在使用 SSLv3 或 TLSv1 时才会出现这种情况。使用 SSLv2 时,数据不会保存在内存中。
  • 我正在使用来自 Ubuntu Lucid 的 0.9.8k-7ubuntu8.6 版本。如果这与安全修复有关,我认为它是最新的。

复制很容易:

  • 使用 ' openssl client -tls1 -connect hostname:443' 连接到 SSL 服务器
  • 在 TLS 连接中发送数据
  • 强制生成核心文件(kill -SEGV例如)
  • 检查核心文件,接收和发送的数据将存在

OpenSSL 是否有理由需要保留该数据?是否可以选择改变其行为?

4

3 回答 3

2

它仍在内存中,因为您从未专门覆盖内存内容。它没有充分的理由自动这样做(其他人都会抱怨它使用了不必要的循环)。

您必须自己擦除内存内容。该功能不会通过命令行程序公开。

于 2011-04-21T21:21:41.313 回答
1

命令行“客户端”工具仅用于测试。它的目的不是提供实际的安全性或适合实际使用。它具有许多使其非常不适合任何其他用途的功能,例如,您不能发送“R”,因为这会触发重新协商。

于 2011-04-22T23:47:33.693 回答
0

注意:在找到我正在寻找的解释后,我正在回答我自己的问题。

如果在连接上启用了压缩,则数据将保存在 zlib 缓冲区中。这就是为什么在某些配置/服务器上没有观察到它的原因。zlib 肯定需要正确压缩流。

如果您不需要压缩并且不希望未加密的数据在进程内存中保留很长时间,则可以禁用 OpenSSL 压缩。

STACK_OF(SSL_COMP)* cm = SSL_COMP_get_compression_methods();
sk_SSL_COMP_zero(cm);
于 2011-04-26T10:12:38.420 回答