0

機密データ (パスワードなど) がプロセス メモリに平文で保持されないようにしようとしていますが、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

コマンドラインの「client」ツールはテスト用です。実際のセキュリティを提供したり、実際の使用に適したりすることを目的としたものではありません。他の用途には非常に適さない機能がいくつかあります。たとえば、再ネゴシエーションをトリガーするため、「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 に答える