Apacheの実行中のインスタンスからRSAキーを取得しますか?


26

SSL証明書用のRSAキーペアを作成し、秘密キーをに保存しました/etc/ssl/private/server.key。残念ながら、これは私が持っていた秘密鍵の唯一のコピーでした。

その後、誤ってディスク上のファイルを上書きしました(はい、わかります)。

Apacheはまだ実行中で、SSLリクエストを処理しているので、秘密鍵の回復に希望があると私を信じさせます。(おそらくどこかにシンボリックリンクがあるのでしょう/procか?)

このサーバーはUbuntu 12.04 LTSを実行しています。

回答:


39

成功!

秘密鍵を取得できました。しかし、それは簡単ではありませんでした。必要なことは次のとおりです。

  1. 確認してくださいあなたは、サーバーまたはApacheを再起動しないでください。その時点でゲームオーバーです。また、監視サービスがApacheを再起動しないようにすることも意味します。
  2. グラブは、このファイルのソースコード- ツールという名前PASSE-partoutを
  3. ソースコードを抽出し、9行目を調整Makefile.mainして読み取ります。

    $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)
    

    $(OBJS)$(LDFLAGS)は順番が逆になっていることに注意してください。)

  4. を実行します./build.sh
  5. 以下を使用してApacheのPIDを取得します。

    service apache2 status
    
  6. passe-partoutルートとしてコマンドを実行します。

    sudo passe-partout [PID]
    

    ... [PID]は、ステップ5で取得した値です。

  7. プログラムが成功すると、現在のディレクトリに追加のキーがたくさんあります。

    you@server:~# ls
    id_rsa-0.key  id_rsa-1.key  id_rsa-2.key
    

すべてがうまくいけば(そしてうまくいけば)、それらのキーの1つが必要なキーです。ただし、使用中の証明書/キーファイルが複数ある場合は、それがどれであるかを把握する必要があります。その方法は次のとおりです。

まず、署名されたキーと一致する証明書のコピーを取得します。ファイルの名前がserver.crtであると仮定して、次のコマンドを実行します。

openssl x509 -noout -modulus -in server.crt | openssl md5

これにより、各キーと照合する必要がある値が出力されます。キーごとに、次のコマンドを実行します。

openssl rsa -noout -modulus -in id_rsa-0.key | openssl md5

それらのいずれかが一致する場合、キーが見つかりました。


クレジット: この記事は私にpasse-partoutを示しました。


2
そのユーティリティを見つけてください。
ファルコンモモット

3
+1の書き込み(および記事の著者の仮想+1:恥ずかしくて書き留めるのは、その状況で他の人を助ける)。
ヨアヒム・ザウアー

2
ああ、それはすばらしく、とても汚い。大好きです。
、トム・オコナー

8

最も可能性が高いのは、メモリにキーを保存していることです。これは、権限を落としたり、指定されたパスフレーズを使用してキーを解読した後にコピーを保持する必要があるためです。

理論的には、デバッガをアタッチするとプロセスイメージから取得できますが、ベストプラクティスに従っている場合は、メモリ内の何かに対して暗号化されます。

とはいえ、それがまだ開いている場合は、そう/proc/${PID}/fd/${SOMETHING}かもしれません。上書きした場合、データが上書きされるため、キーは存在しません。その場所に何か他のものをコピーした(または削除またはリンク解除した、またはその親ディレクトリを再帰的に削除した)場合、そこにあります。


私が使用cp古いものの代わりに新しいキーをコピーします。
ネイサンオスマン

開いているファイル記述子に目を通しました/proc...何もありません。
ネイサンオスマン

おそらく、コピーを開いたままにしていない可能性があります。これは、秘密鍵を読み取る通常のケースです。唯一の選択肢は、ソースからどのように、どこに保存されているかを把握し、デバッガーを使用してそれを引き出し(シンボルを使用して構築した場合)、復号化するか、証明書を置き換えることです。
ファルコンモモット

わかった!あなたは正しかった-Apacheはキーをメモリに保持しており、私はそれらを取得することができた。私の答えをご覧ください。
ネイサンオスマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.