この記事では、Metasploit Frameworkに含まれる便利なツールの一つ、msf-md5_lookup
について詳しく解説します。ペネトレーションテストやセキュリティ評価の過程でMD5ハッシュに遭遇した場合、このツールがどのように役立つのか、その仕組み、使い方、そして注意点までを網羅的にご紹介します。
はじめに:msf-md5_lookup とは? 🤔
msf-md5_lookup
は、Metasploit Frameworkに含まれるコマンドラインツールです。その主な目的は、与えられたMD5ハッシュ値に対応する元の平文(多くの場合パスワード)を、オンラインのハッシュ解読データベースを検索して見つけ出すことです。
Metasploit Framework自体は、脆弱性の発見、エクスプロイト(脆弱性攻撃コード)の開発と実行、ペイロード(攻撃成功後に実行されるコード)の生成、侵入後の活動などを支援するための包括的なプラットフォームです。世界中のセキュリティ専門家やエシカルハッカーに広く利用されており、ペネトレーションテスト(侵入テスト)の分野ではデファクトスタンダードとも言える存在です。
msf-md5_lookup
は、Metasploitの豊富な機能群の中では比較的小さなツールですが、特定の状況下、特に古いシステムや設定不備のあるシステムを評価する際に役立つことがあります。
なぜ平文パスワード特定が必要なのか?
ペネトレーションテストの目的は、システムやネットワークに存在する脆弱性を発見し、それが実際に悪用可能かどうかを検証することです。テストの過程で、データベースダンプや設定ファイルなどからハッシュ化されたパスワードを発見することがあります。
もし、これらのハッシュがMD5のような古い、あるいは弱いアルゴリズムで生成されていた場合、元の平文パスワードを特定できる可能性があります。特定できた平文パスワードは、以下のような目的で利用されることがあります(もちろん、テスト対象の所有者から許可を得た範囲内で)。
- パスワードの再利用確認: 特定したパスワードが、他のシステムやアカウントでも使い回されていないかを確認する。
- 権限昇格: より高い権限を持つアカウントのパスワードを特定し、システムへのアクセス権限を拡大する。
- 脆弱性の実証: MD5のような弱いハッシュアルゴリズムを使用していることのリスクを具体的に示す。
msf-md5_lookup
は、このようなシナリオにおいて、発見したMD5ハッシュから迅速に平文パスワードを特定するための手段を提供します。
msf-md5_lookup の基本的な使い方 💻
インストールと前提条件
msf-md5_lookup
は、Metasploit Frameworkの一部として提供されています。そのため、Kali Linuxのようなペネトレーションテスト用ディストリビューションを使用している場合、通常はMetasploit Frameworkと共にプリインストールされています。
もしインストールされていない場合や、他の環境で使用したい場合は、Metasploit Frameworkをインストールする必要があります。インストール方法については、Metasploitの公式ドキュメントを参照してください。
msf-md5_lookup
自体は独立したスクリプトであり、Kali Linuxでは通常 `/usr/bin/msf-md5_lookup` に配置されています。これは、Metasploit Frameworkの内部ツール(元々は `/usr/share/metasploit-framework/tools/password/md5_lookup.rb` などに配置されていたスクリプト)に簡単にアクセスできるようにするためのシンボリックリンクやラッパーです。Kali Linux 2018.2以降、多くのMetasploit関連スクリプトが `msf-` プレフィックス付きでPATHに追加され、直接実行できるようになりました。
基本コマンド構文
最も基本的な使い方は、コマンドライン引数として調査したいMD5ハッシュ値を直接指定するだけです。
msf-md5_lookup <調べたいMD5ハッシュ値>
例えば、MD5ハッシュ値 098f6bcd4621d373cade4e832627b4f6
(これは “test” という文字列のMD5ハッシュです) を調べたい場合は、以下のように実行します。
msf-md5_lookup 098f6bcd4621d373cade4e832627b4f6
実行例と出力結果
上記のコマンドを実行すると、msf-md5_lookup
は設定されたオンラインデータベースに問い合わせを行い、結果を表示します。
[*] WARNING: This tool will look up your MD5 hashes by sending them to md5cracker.org.
[*] For privacy/security concerns, press Ctrl-C now if you want to abort.
[*] Otherwise, press Enter to continue.
[*] Looking up: 098f6bcd4621d373cade4e832627b4f6
[+] Found: 098f6bcd4621d373cade4e832627b4f6:test
[*] Total found: 1/1
出力結果の解説:
[*] WARNING: ...
: 最初に警告が表示されます。このツールはオンラインサービス (md5cracker.org
) にハッシュ値を送信するため、プライバシーやセキュリティに関する懸念がある場合は注意が必要です。続行するにはEnterキーを押します。[*] Looking up: ...
: どのハッシュ値を検索しているかを示します。[+] Found: ...
: ハッシュ値に対応する平文が見つかった場合に表示されます。この例では098f6bcd4621d373cade4e832627b4f6
の平文がtest
であることがわかりました。 🎉[*] Total found: ...
: 検索したハッシュ総数と、見つかった平文の数を示します。
もし平文が見つからなかった場合は、以下のような出力になります。
[*] WARNING: This tool will look up your MD5 hashes by sending them to md5cracker.org.
[*] For privacy/security concerns, press Ctrl-C now if you want to abort.
[*] Otherwise, press Enter to continue.
[*] Looking up: 1a79a4d60de6718e8e5b326e338ae533 # これはランダムなハッシュの例
[*] Total found: 0/1
ファイルから複数のハッシュを読み込む
複数のMD5ハッシュを一度に調査したい場合は、ハッシュ値をリストしたファイルを用意し、-f
または --file
オプションでそのファイルを指定します。ファイル内では、各行に一つのMD5ハッシュ値を記述します。
例として、hashes.txt
というファイルを作成し、以下の内容を記述します。
# hashes.txt の内容
098f6bcd4621d373cade4e832627b4f6
d8578edf8458ce06fbc5bb76a58c5ca4
5f4dcc3b5aa765d61d8327deb882cf99
1a79a4d60de6718e8e5b326e338ae533
(ちなみに、d8578edf8458ce06fbc5bb76a58c5ca4
は “password”、5f4dcc3b5aa765d61d8327deb882cf99
は “admin” のMD5ハッシュです。)
このファイルを指定して msf-md5_lookup
を実行します。
msf-md5_lookup -f hashes.txt
実行結果:
[*] WARNING: This tool will look up your MD5 hashes by sending them to md5cracker.org.
[*] For privacy/security concerns, press Ctrl-C now if you want to abort.
[*] Otherwise, press Enter to continue.
[*] Looking up 4 hashes...
[+] Found: 098f6bcd4621d373cade4e832627b4f6:test
[+] Found: d8578edf8458ce06fbc5bb76a58c5ca4:password
[+] Found: 5f4dcc3b5aa765d61d8327deb882cf99:admin
[*] Total found: 3/4
ファイル内の各ハッシュが順に検索され、見つかったものが表示されます。この例では、4つのハッシュのうち3つの平文が見つかりました。
msf-md5_lookup が利用するオンラインサービス 🌐
msf-md5_lookup
は、それ自体がMD5ハッシュを解読する能力を持っているわけではありません。内部的には、オンラインで利用可能なMD5ハッシュ解読サービスに問い合わせを行っています。
現在のバージョンのスクリプト (/usr/share/metasploit-framework/tools/password/md5_lookup.rb
を参照) によると、主に md5cracker.org というサービスを利用しています。このサービスは、さらに複数の下流データベースを参照しているようです。スクリプトのコメントには、以下のデータベース名が挙げられています。
- authsecu
- i337.net
- md5.my-addr.com
- md5.net
- md5crack
- md5cracker.org
- md5decryption.com
- md5online.net
- md5pass
- netmd5crack
- tmto
これらのサービスは、事前に計算された膨大な数のMD5ハッシュとその平文のペア(レインボーテーブルや単純な辞書など)をデータベースとして保持しており、問い合わせのあったハッシュ値と一致するものを検索して結果を返します。
msf-md5_lookup のオプション ⚙️
msf-md5_lookup
には、動作をカスタマイズするためのいくつかのオプションが用意されています。-h
または --help
オプションでヘルプメッセージを表示できます。
msf-md5_lookup -h
ヘルプメッセージの例(バージョンによって多少異なる場合があります):
Usage: ./tools/password/md5_lookup.rb [options] HASH
-f, --file Specify a file that contains MD5 hashes
-o, --out Save the output to this file
-d, --database Use this online database instead
-h, --help Show this message
Available databases:
authsecu, i337.net, md5.my-addr.com, md5.net, md5crack, md5cracker.org, md5decryption.com, md5online.net, md5pass, netmd5crack, tmto
主要なオプション解説
オプション | 説明 | 例 |
---|---|---|
-f, --file <ファイルパス> |
指定したファイルからMD5ハッシュを読み込みます。ファイル内では1行に1ハッシュを記述します。 | msf-md5_lookup -f hashes.txt |
-o, --out <出力ファイルパス> |
見つかった平文の結果を指定したファイルに保存します。コンソールへの出力も通常通り行われます。 | msf-md5_lookup -f hashes.txt -o found_passwords.txt |
-d, --database <データベース名> |
(注意: 現在のスクリプトでは意図通りに機能しない可能性あり) ヘルプメッセージには記載されていますが、現在のスクリプト実装 (md5cracker.org のAPIを利用) では、特定のデータベースを指定する機能は有効ではない可能性があります。通常はこのオプションは使用しません。 |
msf-md5_lookup -d authsecu 098f6... (非推奨) |
-h, --help |
ヘルプメッセージを表示して終了します。 | msf-md5_lookup -h |
オプションを使った実行例
ファイルからハッシュを読み込み、見つかった結果をファイル results.log
に保存する場合:
msf-md5_lookup --file input_hashes.list --out results.log
このコマンドを実行すると、コンソールには通常通り検索結果が表示され、同時に results.log
ファイルにも以下のような形式で見つかった結果が書き込まれます。
# results.log の内容例
098f6bcd4621d373cade4e832627b4f6:test
d8578edf8458ce06fbc5bb76a58c5ca4:password
5f4dcc3b5aa765d61d8327deb882cf99:admin
これにより、大量のハッシュを処理した場合でも、見つかった平文だけを後で簡単に確認できます。
実践的な利用シナリオと注意点 🛡️
ペネトレーションテストでの活用
ペネトレーションテストにおいて、システムの侵害や調査の過程で設定ファイル、データベースダンプ、ネットワークトラフィックなどからパスワードハッシュが発見されることは珍しくありません。もし発見されたハッシュがMD5であれば、msf-md5_lookup
を使って素早く平文を特定できる可能性があります。
例えば、Webアプリケーションの脆弱性を突いてデータベースの内容を窃取できた場合、ユーザーテーブルにMD5でハッシュ化されたパスワードが格納されているかもしれません。そのハッシュリストをファイルに保存し、msf-md5_lookup -f
で処理することで、既知の平文パスワードを持つアカウントを特定できます。
特定できたアカウント情報(ユーザー名と平文パスワード)は、以下のようなさらなるテストに繋がる可能性があります。
- ラテラルムーブメント(水平移動): 同じ認証情報を使って、他のシステム(SSH、SMB、RDPなど)へのログインを試みる。
- 権限昇格(垂直移動): より高い権限を持つアカウント(管理者アカウントなど)のパスワードが特定できれば、システム全体の制御を奪う。
- パスワード再利用の検証: ユーザーが同じパスワードを複数のサービスで使い回していないかを示す証拠となる。
スクリプトでの利用
msf-md5_lookup
はシンプルなコマンドラインツールなので、他のスクリプトと連携させて使うことも容易です。例えば、あるプロセスで大量のMD5ハッシュを生成または抽出した場合、それらをファイルに書き出し、msf-md5_lookup
を呼び出して一括処理するような自動化が可能です。
#!/bin/bash
# 何らかの方法でハッシュリストを取得 (例: grep や awk)
# grep -oE '[a-f0-9]{32}' some_log_file.log > potential_md5.txt
# msf-md5_lookup を使って平文を検索し、結果を保存
msf-md5_lookup -f potential_md5.txt -o cracked_passwords.txt
# 結果ファイルの存在と内容を確認
if [ -s cracked_passwords.txt ]; then
echo "[+] いくつかのパスワードが見つかりました! cracked_passwords.txt を確認してください。"
cat cracked_passwords.txt
else
echo "[-] パスワードは見つかりませんでした。"
fi
ただし、前述の通りオンラインサービスへの問い合わせが発生するため、大量のハッシュを短時間に連続して送信すると、サービス側からレートリミットを受けたり、一時的にブロックされたりする可能性もあります。自動化する際は、適切な待機時間を設けるなどの配慮が必要かもしれません。
MD5 の脆弱性と代替手段 🔒
MD5 の衝突問題再び
前述の通り、MD5の最大の弱点は「衝突耐性の欠如」です。これは、攻撃者が意図的に、異なる内容でありながら同じMD5ハッシュ値を持つ2つのデータ(ファイルやメッセージなど)を作成できることを意味します。
この脆弱性は、2004年にWang氏らによって実用的な時間で衝突を生成する手法が発表されたことで決定的となりました。その後も研究は進み、現在では一般的なPCでも数秒から数分でMD5の衝突を生成することが可能です。
衝突が可能になると、例えば以下のような攻撃が考えられます。
- 偽造されたデジタル署名: 正規の文書と悪意のある文書を用意し、両者が同じMD5ハッシュを持つように細工します。正規の文書にMD5ベースのデジタル署名を行わせることで、あたかも悪意のある文書も署名されたかのように見せかけることができます。(2005年にX.509証明書での実証例あり)
- マルウェアの偽装: 正規のソフトウェアと同じMD5ハッシュを持つマルウェアを作成し、ファイル整合性チェックをすり抜けようとする。(2012年のFlameマルウェアはこの脆弱性を悪用しました)
これらの理由から、MD5はもはやセキュリティ用途(特にデジタル署名やパスワードハッシュ)には全く適していません。
なぜ今でもMD5ハッシュが見つかるのか?
これだけ脆弱性が指摘されているにも関わらず、実際のシステムやデータの中でMD5ハッシュに遭遇することは依然としてあります。その理由はいくつか考えられます。
- レガシーシステム: 長年にわたって運用されている古いシステムでは、開発当時に標準的だったMD5がそのまま使われ続けている場合があります。
- 知識不足・設定ミス: 開発者や管理者がMD5の脆弱性を十分に認識しておらず、安易に使用してしまうケース。あるいは、フレームワークやライブラリのデフォルト設定がMD5になっており、変更されないまま使われているケース。
- 互換性の問題: 他の古いシステムとの連携のために、MD5を使い続けざるを得ない状況。
- 非セキュリティ用途での利用: ファイルの破損検出(チェックサム)など、暗号学的な安全性が必須ではない用途では、計算速度の速さからMD5が選択されることもあります。(ただし、この用途でも衝突のリスクは考慮すべきです)
- パスワードハッシュ以外の用途: 例えば、データベースのパーティショニングキー決定など、暗号学的強度を必要としない内部的な識別子として利用されている場合。
2019年の調査では、広く使われているCMS(コンテンツ管理システム)の約4分の1が、依然としてパスワードハッシュにMD5を使用していたとの報告もあります。ペネトレーションテスターとしては、このような状況に遭遇する可能性を念頭に置いておく必要があります。
推奨される代替ハッシュアルゴリズム ✅
現在、パスワードハッシュなどのセキュリティ用途で推奨されるのは、MD5のような単純なハッシュ関数ではなく、より計算コストが高く、ブルートフォース攻撃(総当たり攻撃)やレインボーテーブル攻撃に対する耐性を持つ専用のアルゴリズムです。
- SHA-2 ファミリー (SHA-256, SHA-512): MD5やSHA-1よりも安全なハッシュ関数ですが、計算速度が速いため、パスワードハッシュ専用としては十分ではありません。ソルトと組み合わせて複数回のストレッチング(ハッシュ計算の繰り返し)を行うことで強度を高めることは可能です。
- bcrypt: パスワードハッシュのために特別に設計されたアルゴリズム。計算コストを調整可能(コストファクター)で、GPUによる高速計算にもある程度の耐性があります。Blowfish暗号をベースにしています。
- scrypt: bcryptと同様にパスワードハッシュ用に設計され、bcryptよりもさらにメモリ使用量を多く要求することで、GPUやASICなどの専用ハードウェアによる攻撃への耐性を高めています。
- Argon2: 2015年のPassword Hashing Competitionで優勝した最新のパスワードハッシュアルゴリズム。計算コスト(時間)、メモリ使用量、並列度を調整可能で、様々なタイプの攻撃に対する高い耐性を持つように設計されています。現在、最も推奨されるアルゴリズムの一つです。
新しいシステムを開発する場合や、既存システムのセキュリティを強化する場合は、これらの現代的なハッシュアルゴリズム(特にbcryptやArgon2)と、ユーザーごとに固有の十分な長さのソルトを組み合わせて使用することが強く推奨されます。
まとめ ✨
msf-md5_lookup
は、Metasploit Frameworkに含まれる、MD5ハッシュから平文をオンラインデータベースで検索するためのツールです。ペネトレーションテスト中にMD5ハッシュに遭遇した場合、迅速に既知の平文を特定するのに役立つ可能性があります。
基本的な使い方は簡単で、ハッシュ値を引数として与えるか、ハッシュリストファイルを指定するだけです。しかし、その裏では外部のオンラインサービスにハッシュ値を送信しているため、プライバシー、セキュリティ、可用性、そして何よりも法的・倫理的な側面に十分注意して使用する必要があります。
MD5は暗号学的に破られており、セキュリティ用途での使用は絶対に避けるべきです。もしテスト対象のシステムでMD5が使用されているのを発見した場合、それは重大な脆弱性として報告し、bcryptやArgon2のような現代的で安全なパスワードハッシュ方式への移行を強く推奨すべきです。
このツールは、あくまで「古い、あるいは不適切な実装を発見し、そのリスクを実証するため」の一手段として捉え、責任ある使い方を心がけましょう。安全なパスワード管理と適切なハッシュアルゴリズムの選択は、現代のシステムセキュリティにおける基本的な要件です。
参考情報
- Kali Linux Tools – metasploit-framework: https://www.kali.org/tools/metasploit-framework/
- Metasploit Framework Documentation: https://docs.metasploit.com/
- md5_lookup.rb source code (GitHub): https://github.com/rapid7/metasploit-framework/blob/master/tools/password/md5_lookup.rb
- MD5 – Wikipedia: https://en.wikipedia.org/wiki/MD5
- Okta – What is MD5? Understanding Message-Digest Algorithms: https://www.okta.com/identity-101/what-is-md5/
コメント