水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > パスワード破り大作戦

パスワード破り大作戦

2003年1月25日(土曜日)

パスワード破り大作戦

ご存じの方はご存じの通り、私は ASAHI ネットのユーザなのですが、なんでも只でメールアカウントがもう一つ持てるようになったらしいので、それを確認するべく ASAHIネットのサイト (www.asahi-net.or.jp)へ。そしてログインしようと思ったら……なんと、パスワード忘れてるっ!!

思い起こせば、去年の年頭くらいにパスワードを変えた記憶があります。しかし、そのパスワードが全く思い出せません。その前のパスワードは覚えていたので、念のために試してみましたが、やっぱりダメ。ってあたりまえなんですが。

実は FTP と POP3 については使っているクライアントにパスワードを記憶させていたので、問題なく利用できていたのでした。ちなみに PPP 接続にはパスワードを記憶させていなかったことが判明。まあ POP3 と FTP が使えていればとりあえず問題ないのですが、利用状況の確認も出来ないと言うのは気持ちが悪いです。というわけで、パスワード破り大作戦開始。

最初に思いついた戦法は、パスワード入力フィールドの内容を盗み見るというものです。FTP クライアントもメールクライアントも、パスワード設定画面の入力欄には「*」が表示されていて、パスワードそのものを見ることは出来ません。しかし、これはあくまでそのような表示になっているというだけで、内部的にはちゃんとパスワードの文字列が保持されているのです。

その、内部的に保持されている文字列を表示してしまうソフトがいくつかあります。私が昔使っていたのは、その名もズバリ「みえみえパスワード」というもので、名前通りの効果がありました。これはフリーソフトウェアなので、遠慮なくダウンロードして実行。

……起動はしましたが、パスワードは見えませんでした。どうも Windows XP ではうまく動作しないようです。「みえみえパスワード」以外にもいろいろなソフトウェアを試してみましたが、どれもうまくいきませんでした。Windows XP では、パスワード入力コントロールの仕組み自体が変更になっているのかもしれません。

というわけで、第一の戦法は失敗。しかし諦めません。そもそも、パスワード入力欄に「*」で表示されているパスワードは、ハードディスクのどこかに記憶されているはずです。表示が読めないなら、その大元のデータを読みとる方法があるはずです。

そこで第二作戦、名付けて「パスワードを元から断つ!」……って()っちゃダメですが。ともあれ調査開始。

まず FTP クライアントの方ですが、ホストのデータを独自のデータファイルに保存していました。これはバイナリデータですが、テキストエディタで開くと、ディレクトリのパス、ユーザ名、ホスト名などが読みとれます。期待しつつ探してみますが、パスワードらしきものはどこにもありません。試しに適当なホストの設定を追加してみましたが、やはりそれらしきものはありません。どうも、パスワードは生の文字列として保存されるわけではなく、何らかの変換処理が施されたバイナリデータとして保持されているようです。

FTP サーバには生のパスワードを送らなければなりませんから、非可逆のハッシュ変換ではないはずです。頑張って解読すれば解読できそうですが、とんでもない時間と労力がかかりそうなので断念しました。

そんなわけで、メールクライアントの方を調べます。こちらはすぐ分かりました。レジストリにその名もズバリ PassWord というキーがあって、文字列の値が指定されています。ただ、生のパスワードではないようです。使われている文字の種類や、末尾に = があることから考えて、Base64 でエンコードされていると判断しました。

Base64 デコードのツールはいっぱいありそうですが、探すより書いた方が早いような気がしたので、適当に C# で書いてデコード。パスワード文字列が得られるかと思いきや……バイナリデータでした。これも何かの変換処理がなされているようで、さすがに一筋縄では行かないようです。

……これは再発行のほうが早いか……と諦めかけたそのとき、第三の戦法が天啓のようにひららめきました。

サーバには生のパスワードが送られているのだから、サーバをつくってパスワードを受け取れば良い!

どう考えても FTP は面倒なので、ねらうのは POP3 です。計画は以下の通り。

というわけで、RFC1939 を見ながら、C# でニセ POP3 サーバをプログラミング開始。.NET Framework SDK の文書の中にポート 11000 を Listen するサーバのサンプルがあったので、それをベースにして改造します。と言っても、まずは適当なバナーを出力して、あとはなにか受け取るたびに "+OK" と言ってやれば良いだけなので簡単です。……と言いつつ、Socket にもデリゲートにも慣れていないのでちょっと難儀しましたが、とりあえず完成。

一発完動など望むべくもないわけで、試行とバグ取りを繰り返しながら何度もチャレンジ。何度目かのチャレンジで、とうとう奴の送る PASS コマンドがコンソールに表示されました。そこに表示されたのは紛れもない、見覚えのある生のパスワード。

思い出したっ!

というわけで再発行せずに済みましたが、こんなのでモロに生のパスワードが見られちゃうなんて、POP3 ってコワイですね……。みなさん APOP 使いましょう。

関連する話題: 出来事 / コンピュータ / プログラミング / セキュリティ / ASAHIネット / RFC

最近の日記

関わった本など