はじめに
KeePass は、パスワードを安全に管理するための人気のオープンソースパスワードマネージャーです。パスワードは暗号化されたデータベースファイルに保存され、通常は .kdbx 拡張子を持ちます。非常に安全ですが、データベースの保護の強度は、ユーザーが選択したマスターパスワードに大きく依存します。
この実験(Lab)では、セキュリティアナリストの役割を担い、KeePass データベースパスワードの強度をテストします。倫理的および教育的な目的で、パスワードクラッキングの基本的なプロセスを学びます。ここでは、John the Ripper スイートのツールである keepass2john を使用して、サンプル .kdbx ファイルからパスワードハッシュを抽出し、その後、強力なパスワードリカバリツールである hashcat を使用して、辞書攻撃(dictionary attack)でクラッキングします。
この実践的な経験により、攻撃者が弱いパスワードをどのように悪用できるかが実証され、強力で複雑なマスターパスワードを使用することの重要性が強調されます。
簡単なパスワードでサンプル KeePass データベースを作成する
このステップでは、ターゲットとなる KeePass データベースを作成します。パスワードクラッキングテストを実行するには、まず作業用の .kdbx ファイルが必要です。ここでは、KeePass アプリケーションを使用して新しいデータベースを作成し、デモンストレーション目的で簡単に入力できるパスワードで保護します。
まず、ターミナルにアプリケーション名を入力して KeePass アプリケーションを起動します。
keepass2
これにより、KeePass のグラフィカルユーザーインターフェースが開きます。次に、以下の手順でデータベースを作成します。
- KeePass ウィンドウで、メニューから
File->New...をクリックします。 - 「Create New Password Database」ウィンドウが表示されます。「OK」をクリックして続行します。
- 新しいデータベースファイルを保存するように求められます。
/home/labex/projectディレクトリに移動し、ファイル名をMySecrets.kdbxと入力して、「Save」をクリックします。 - 次に、「Create Master Key」ウィンドウが表示されます。ここでデータベースのマスターパスワードを設定します。この実験(Lab)では、「Master password」フィールドに
password123と入力し、「Repeat password」フィールドにも同じものを入力します。「OK」をクリックします。 - 「New Password Database - Step 2」ウィンドウが表示されます。デフォルト設定のままで構いません。「OK」をクリックします。
- 新しく空のデータベースが作成され、開かれました。オプションでサンプルエントリを追加することもできますが、この実験(Lab)では必須ではありません。
- 最後に、
File->Exitをクリックして KeePass アプリケーションを閉じます。
これで、~/project ディレクトリに MySecrets.kdbx という名前のファイルが作成されているはずです。ls コマンドでその存在を確認できます。
ls -l ~/project
出力に MySecrets.kdbx がリストされているはずです。
keepass2john を使用してハッシュを抽出する
このステップでは、MySecrets.kdbx ファイルからパスワードハッシュを抽出します。hashcat のようなパスワードクラッキングツールは、データベースファイル自体では直接機能しません。代わりに、「ハッシュ」と呼ばれる、マスターパスワードの暗号化された表現で動作します。
ここでは、John the Ripper パスワードクラッカースイートに含まれるユーティリティである keepass2john を使用して、KeePass データベースのキー情報を hashcat が理解できる形式に変換します。
ターミナルを開き、以下のコマンドを実行します。このコマンドは MySecrets.kdbx ファイルを読み込み、対応するハッシュを出力します。この出力をリダイレクトし、keepass.hash という名前の新しいファイルに保存します。
keepass2john ~/project/MySecrets.kdbx > ~/project/keepass.hash
このコマンドは、出力が keepass.hash ファイルにリダイレクトされているため、ターミナルに目に見える出力は生成されません。新しく作成されたハッシュファイルの内容を確認するには、cat コマンドを使用します。
cat ~/project/keepass.hash
出力は、以下のような単一の長いテキスト行になります。
MySecrets:$keepass$*2*6000*0*b1b5b8a8a5b8a8a5b8a8a5b8a8a5b8a8*...*...
この文字列がハッシュです。これには、暗号化アルゴリズム、ソルト、および暗号化されたマスターキーなど、hashcat がパスワードをクラッキングしようとするために必要なすべての情報が含まれています。
KeePass 用の正しい Hashcat モードを特定する
このステップでは、KeePass ハッシュをクラックする際に hashcat が使用する正しいモードを特定します。hashcat は、オペレーティングシステムのパスワードからアプリケーション固有のフォーマットまで、数百種類のハッシュタイプをサポートする非常に汎用性の高いツールです。
正しく機能させるためには、提供しているハッシュの種類を hashcat に明示的に伝える必要があります。これは、-m フラグを使用して数値モードを指定することで行います。KeePass のモード番号を見つけるには、hashcat のヘルプドキュメントを検索できます。
ターミナルで以下のコマンドを実行します。これは hashcat の完全なヘルプ出力を grep にパイプし、grep は次に "keepass" という単語を含む行をフィルタリングします。
hashcat --help | grep -i keepass
grep の -i フラグは、検索を大文字・小文字を区別しないようにします。出力には関連するモードが表示されます。
13400 | KeePass 1 (AES/Twofish) / KeePass 2 (AES) | Password Managers
この出力から、KeePass 1 および 2 データベースのモードが 13400 であることがわかります。これは、攻撃を開始するために最終ステップで必要となる番号です。
攻撃用の単語リストを準備する
このステップでは、辞書攻撃用の単語リストを準備します。辞書攻撃(または単語リスト攻撃)は、クラッキングツールが、事前にコンパイルされたリストから単語を一つずつ試して、パスワード候補とする方法です。この攻撃の成功は、正しいパスワードがリストに含まれているかどうかに完全に依存します。
実際のシナリオでは、攻撃者は数百万、あるいは数十億もの一般的なパスワードを含む巨大な単語リストを使用します。この実験では、クラッキングプロセスが迅速かつ成功するように、非常に小さくカスタム化された単語リストを作成します。最も重要なのは、正しいパスワードである password123 をリストに含めることです。
nano テキストエディタを使用して、wordlist.txt という名前の新しいファイルを作成します。
nano ~/project/wordlist.txt
nano が開いたら、エディタに以下のパスワードを一行ずつ入力します。
password
123456
password123
qwerty
labex
単語を入力したら、ファイルを保存し、nano を終了します。Ctrl+X を押し、次に Y で確認し、最後に Enter を押します。
これで、hashcat が使用できる単語リストの準備が整いました。
攻撃を開始し、マスターパスワードを復旧する
この最終ステップでは、これまでのすべてを統合し、hashcat を使用してパスワードクラッキング攻撃を開始します。ハッシュファイル (keepass.hash)、正しいハッシュモード (13400)、そしてカスタム単語リスト (wordlist.txt) が用意できています。
それでは、以下のコマンドをターミナルで実行して攻撃を開始します。
hashcat -m 13400 -a 0 ~/project/keepass.hash ~/project/wordlist.txt
このコマンドの内訳を見てみましょう。
hashcat: 実行するプログラムです。-m 13400: 前のステップで特定した KeePass 2 のハッシュモードを指定します。-a 0: 攻撃モードを指定します。モード0は「ストレート」または辞書攻撃です。~/project/keepass.hash: ターゲットハッシュを含むファイルのパスです。~/project/wordlist.txt: 単語リストのパスです。
hashcat が初期化され、単語リストからパスワードのテストを開始します。リストは非常に短く、正しいパスワードが含まれているため、プロセスは非常に迅速に進みます。ステータスの更新が表示され、すぐにプロセスが完了します。
攻撃が完了すると、hashcat は見つかったパスワードを「potfile」と呼ばれるファイルに保存します。クラックされたパスワードを表示するには、--show フラグを付けて同じコマンドを再度実行できます。
hashcat -m 13400 -a 0 ~/project/keepass.hash ~/project/wordlist.txt --show
このコマンドは、クラックされたハッシュとその対応するパスワードを即座に表示します。
MySecrets:$keepass$*2*6000*0*...:password123
出力には、元のハッシュの後にコロンと復旧されたパスワード password123 が明確に表示されます。おめでとうございます。KeePass データベースのパスワードを正常にクラックしました!
まとめ
この実験では、KeePass KDBX データベースのマスターパスワードを復旧するために、辞書攻撃を成功裏に実行しました。
パスワード監査のための、完全で実践的なワークフローを学びました。これには以下が含まれます。
- 弱いパスワードを持つサンプル KeePass データベースの作成。
keepass2johnを使用して、クラッキングに適した形式でパスワードハッシュを抽出。- KeePass データベース用の正しいハッシュモード (
13400) をhashcatで特定。 - 潜在的なパスワードを含むカスタム単語リストの準備。
hashcatで攻撃を開始し、パスワードを正常に復旧。
この演習は、重要なセキュリティ原則を浮き彫りにします。パスワードデータベース全体のセキュリティは、マスターパスワードの強度にのみ依存するということです。単純で一般的、または推測しやすいパスワードを使用すると、強力な暗号化で保護されていても、辞書攻撃に対して脆弱になります。パスワードマネージャーには、常に長く、複雑で、ユニークなマスターパスワードを使用してください。


