web-dev-qa-db-ja.com

cat / dev / urandomの出力はどのくらい一時的ですか

サーバーで次のコマンドを使用してシードを作成しています。

cat /dev/urandom |tr -dc A-Z9|head -c${1:-81} 

出力をコピーしてからターミナルを閉じると、作成されたシードは完全に復元できなくなりますか?ある時点で私のサーバーにアクセスする可能性のある誰かが、ある種の履歴でその出力を確認できるようになるのではないかと心配しています。

2
Leif

ランダムジェネレーターからのデータは、いくつかの場所を通過します。

  1. それはカーネルから始まります。カーネル内のランダムジェネレーターは、他のランダムジェネレーターと同様に、エントロピーソースによってシードされる決定論的ランダムビットジェネレーター(DRBG)で構成されます。 Linuxで使用されるDRBGにはバックトラック耐性があります。つまり、攻撃者がRNGの状態をある時点で見つけたとしても(カーネルレベルのアクセスが必要)、以前の状態を計算できないため、攻撃者はそれを行うことができます。 t以前の出力を検索します。

  2. カーネルは、catプロセスに、または後でパイプを介して渡すデータのコピーを保持しません。

  3. catプロセスが終了すると、そのメモリはカーネルに解放されます。解放されたメモリはすぐには消去されません。Linuxは、プロセスに渡す前にメモリを消去するだけです。 (これは、割り当て時のワイプの方がリリース時のワイプよりもパフォーマンスが優れているためです。)したがって、catが終了した後も、しばらくの間、データがRAMに残っている可能性があります。そのデータを取得するには、おそらく数十万の候補の中からメモリ内の適切なページを見つけるために、カーネルレベルのアクセスといくつかのフォレンジックスキルが必要になります。他のプロセスにも同じことが言えます(trhead) 。

  4. パイプはメモリをどこにも保存しません。データはプロセスからプロセスに直接コピーされます。

  5. データは端末に表示されます。ターミナルエミュレータのメモリのどこかに保存される場合があります。スクロールして戻ることができる限り、確実に保存されます。ターミナルエミュレータがメモリを管理する方法によっては、後でコピーがプロセスのメモリに残る場合があります。ターミナルエミュレータのメモリ内のデータを見つけるには、アカウントにアクセスする必要があります。

  6. ターミナルに表示されるデータは、セッションをログに記録するために邪魔にならない限り、ファイルに保存されません。

  7. データはビデオメモリに残る場合もあります(テキスト形式ではなく、ある時点で表示されたピクセルのグループの形式で)。ビデオメモリを消去するメカニズムはなく、画像の断片が非常に長い間残ることがあります。ビデオメモリを調べるには、カーネルレベルのアクセスが必要です。

  8. クリップボードを使用して端末からデータをコピーする場合は、クリップボードのデータがどこに保存されるかを心配する必要があります。コピーがターミナルエミュレータのメモリに残るのと同じように、コピーがXサーバーのメモリにしばらく残る場合があります。そのコピーを見つけるには、ルートレベルのアクセスと深刻なフォレンジックスキルが必要です。

  9. クリップボードマネージャー(おそらくデスクトップ環境の一部として)がある場合は、クリップボードの内容の履歴がどこに保存されるかを心配する必要があります。

要約すると、唯一の実際的なリスクは、クリップボードマネージャーを使用する場合です。

シェルコマンドからの出力は、シェル履歴ファイルに保存されません。

出力をファイルに保存するか、シェルセッション全体を何らかの方法でログに記録しない限り、そのコマンドの結果はシステムにまったく表示されません。

1
Kusalananda