2009年9月18日

[Apache-Users 7420] Re:誤消去してしまった秘密鍵の復元

** Apache ユーザーズメーリングリスト **
** 注意:このメールへの返信は Apache-Users へ行きます **

 前田です。
 お困りのことと存じます。

 仰るとおり、
> その後サーバは再起動しておらず、まだ https が使える状態なので、Apache を

> 再起動するまではメモリのどこかに残っていると思います。メモリダンプなどで
> 無理矢理取り出せないかと考えているのですが……。
 ということですので、可能か不可能かという点では、可能であると思います。

 過去に秘密鍵の復元をやったことはありませんが、もし私がやるなら
こうするだろうなということを述べてみますので、現実的な対応かどうか
ご判断ください。

 ひょっとすると、ディスク上は、同じセクタへの上書きではなく、ファイル
の実体が残っている可能性があるかも知れませんので、まずディスクイメージの
ダンプを保存するでしょう。

 まず、もう一つ同じような環境を大急ぎで確保します。これは、練習と
実験用です。今の秘密鍵がメモリ上にある環境は、貴重な環境なので、手法は
別の環境で確立する必要があります。

 現在動いているApacheやmod_ssl、OpenSSLと同じバージョンのソースを
用意し、可能な限り同じコンパイルオプションでビルドしておきます。
 現在動作中のhttpsdにgdbでアタッチして、まずダンプを保存しておきます。

 別にビルドしたマップファイルを使って、若干のズレはあるかと思いますが、
メモリ上に保持されている秘密鍵の構造体を探り当てるか、あやしいところを
片っ端から探してみて、秘密鍵構造体から秘密鍵を組み立てるコードを書いて、
現在の公開鍵に対応する正しい秘密鍵を組み立てられることを確認する。

 といった流れになるでしょう。

 過去に、OpenSSLのソースを追ったときの記憶では、特にメモリ上の秘密鍵
の操作を困難にするような仕掛けは無かったと思いますので、ApacheやOpenSSL
のソースを読めて、gdbでのデバッグが可能なスキルがあれば可能ではないか
と思います。

 もう一つ、メモリ全体のダンプから、指定した公開鍵に対応する秘密鍵を
見つけ出す様なツールを誰かが開発している可能性はありそうです。

 こちらは、今から探して見ますので、見つけたらご報告を。

2009年9月18日11:16 鷹 <welcome_ain88@xxxxx>:
> お恥ずかしい話ですが、https 通信をするために openssl で生成した秘密鍵を
> 誤って削除してしまいました。再生成する以外で、どうにか元の秘密鍵を取り戻
> す方法はありますでしょうか (そう簡単にできたら暗号の意味がない気もします
> が……)。
>
> その後サーバは再起動しておらず、まだ https が使える状態なので、Apache を
> 再起動するまではメモリのどこかに残っていると思います。メモリダンプなどで
> 無理矢理取り出せないかと考えているのですが……。
>
> ファイルは上書きしてしまったので、復元することは無理そうです。
>
> 環境: Xen 上の CentOS5.3 / Apache2.2.X / mod_ssl / openssl
>
> 変則的な質問ですみません。かなり望みは薄いかと思いますが、アドバイス等い
> ただけましたら幸いです。

--
MAEDA 'kei' Katsuyukii <kei@xxxxx> http://www.nantoka.com/~kei/
「終わらないプロジェクトはない。終わっちゃうプロジェクトはあるけど。」
--
入退会・変更・配送一時停止は以下へ
http://www.apache.jp/mailman/listinfo/apache-users


投稿者 xml-rpc : 2009年9月18日 12:34
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/88663
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。