web-dev-qa-db-ja.com

サーバーが突然エントロピーを使い果たしました

昨日の再起動以来、仮想サーバーの1つ(Debian Lenny、Xenで仮想化)は常にエントロピーを使い果たしており、SSH/TLS対応プロトコルを介して接続しようとするとタイムアウトなどが発生します。どのプロセスがすべてのエントロピーを使い果たしているかを確認する方法はありますか?

編集:

私が試したこと:

  • 追加のエントロピーソースの追加:time_entropyd、rng-ツールがランダムな疑似ランダムファイルアクセスにurandomをフィードバック–1秒あたり約1MiBの追加エントロピーを相殺しましたが、問題は依然として解決していません
  • Lsof、netstat、tcpdumpを介して異常なアクティビティをチェックします–何もしません。目立った負荷などはありません
  • デーモンの停止、永続セッションの再開、全体の再起動VM –動作に変更はありません

最終的に何が機能したか:

  • 待っています。昨日の正午頃から、接続の問題はもうありません。エントロピーはまだやや低いですが(ピーク時128バイト)、TLS/SSHセッションに目立った遅延はもうありません。 私はゆっくりとクライアントをTLSに戻しています(5つすべてです!)が、今のところ動作に変化はないと思います。 すべてのクライアントが再びTLSを使用していますが、問題はありません。本当に、本当に奇妙です。
4
Creshal

診断ユーティリティのソースとしてlsofを使用すると、監査を使用して何かを設定できますか? /dev/randomを開かずにエントロピープールを使い果たす方法はありません。したがって、/dev/randomを開く処理を監査すると、犯人(または少なくともさらなる調査の候補のセット)はかなり急速に脱落するはずです。

4
womble

通常、「十分な」エントロピーを必要とする公開サーバーの場合、エントロピーキー、Linuxエントロピープールにランダムビットを追加するハードウェアデバイス(USB)のようなものを提案します。しかし、あなたは外の世界と話をしません。

仮想マシンには、外部のランダム性の欠如という問題が発生する可能性があります。

あなたの発言「バックアップドメインコントローラー」は、エントロピーの使用の可能性を追加します:Windowsドメインは証明書で乱数を使用します。

2

おそらくlsof(開いているファイルのリスト)が役立つかもしれません。これは、現在どのプロセスがどのファイルを開いているかを示しています。あなたの場合、これは、エントロピーを排出するプロセスをキャッチした場合にのみ役立ちます。そのプロセスがハンドルを長時間開いたままにしない場合です。

$ lsof /dev/urandom
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
xfce4-ses  1787   to   15r   CHR    1,9      0t0 8199 /dev/urandom
applet.py  1907   to    9r   CHR    1,9      0t0 8199 /dev/urandom
scp-dbus-  5028   to   10r   CHR    1,9      0t0 8199 /dev/urandom
firefox    6603   to   23r   CHR    1,9      0t0 8199 /dev/urandom
thunderbi 12218   to   23r   CHR    1,9      0t0 8199 /dev/urandom

私のワークステーションからのほんの一例。しかし、lsofを深く掘り下げることは役立つかもしれません。

1
Michuelnik

より良い解決策がない場合は、大きな銃を持ち込み、open()syscallをグローバルにラップして、/ etc/[u] randomを開こうとするプロセスをログに記録することができます。

Just(tm)は、ログを記録するopen()を定義するlibを記述し、その後、元のlibc open()を呼び出します。

そのためのヒント:man ld.soおよび/ etc/ld.so.preload

ここに似たようなものがあります: https://stackoverflow.com/questions/9614184/how-to-trace-per-file-io-operations-in-linux

警告:これを自分でやったことはありません。 everyopen()がライブラリを介して実行されるため、システムが破損する可能性があります。デバッグ環境で、またはR.M.ストールマン。

0
Michuelnik