はじめに
VeraCrypt は、オンザフライ暗号化のための人気のオープンソースツールです。強力なセキュリティを提供しますが、パスワードが最も弱い部分となることがあります。これらのパスワードの強度をテストする方法を理解することは、セキュリティ監査およびペネトレーションテストにおいて重要なスキルです。
この実験(Lab)では、セキュリティアナリストの役割を担います。まず、既知のパターンに従ったパスワードで暗号化された VeraCrypt ボリュームを作成します。次に、このボリュームから必要なハッシュデータを抽出する方法を学びます。最後に、強力なパスワード回復ツールである Hashcat を使用して、「マスク攻撃」を実行し、パスワードをクラックします。このプロセスにより、デジタルフォレンジックおよびエシカルハッキングで使用される基本的な技術を実践的に体験できます。
小さな暗号化 VeraCrypt ボリュームの作成
このステップでは、VeraCrypt のコマンドラインインターフェースを使用して、新しい暗号化されたファイルコンテナを作成します。このコンテナは、パスワード回復演習のターゲットとして機能します。後のステップでマスク攻撃の効果を示すために、意図的に簡単なパスワード構造を使用します。
対話形式の作成プロセスを通じてガイドされます。指示に注意深く従ってください。
まず、新しいボリュームを作成するコマンドを実行します。-t フラグはテキストモードを有効にし、-c は作成(create)を意味します。
veracrypt -t -c
プログラムは次に一連の質問をします。以下のように回答してください。
- Volume Type:
Enterを押してデフォルトのNormalを選択します。 - Volume Location:
myvolume.hcと入力してEnterを押します。これにより、現在のディレクトリ(~/project)にボリュームファイルが作成されます。 - Volume Size:
1M(1 メガバイト)と入力してEnterを押します。この実験には小さなサイズで十分です。 - Encryption Algorithm:
Enterを押してデフォルトのAESを選択します。 - Hash Algorithm:
Enterを押してデフォルトのSHA-512を選択します。 - Filesystem:
Enterを押してデフォルトのFATを選択します。 - Password: これは重要なステップです。この実験では、パスワード
LabEx2024を入力してEnterを押します。 - Re-enter Password: 再度
LabEx2024を入力してEnterを押します。 - PIM:
Enterを押してデフォルト(PIM なし)を使用します。 - Keyfiles:
Enterを押してキーファイルの利用をスキップします。 - Entropy Collection: ツールは、暗号化エントロピーを生成するために少なくとも 320 文字のランダムな文字を入力するように求めます。プログレスバーが満杯になるまでキーボードでランダムな文字を入力し、その後
Enterを押してください。
最後のステップの後、VeraCrypt はファイルを作成します。ls コマンドでその作成を確認できます。
ls -l myvolume.hc
以下のような出力が表示され、ファイルが存在し、サイズが約 1MB であることが確認できるはずです。
-rw-r--r-- 1 labex labex 1048576 Dec 01 12:34 myvolume.hc
これで、暗号化された VeraCrypt ボリュームを正常に作成しました。
ハッシュとして最初の 512 バイトを抽出する
このステップでは、作成したばかりの VeraCrypt ボリュームからパスワードハッシュを抽出します。SHA-512 や RIPEMD-160 などのハッシュアルゴリズムを使用する標準的な VeraCrypt コンテナでは、パスワード検証に必要なデータは、ボリュームファイルの最初の 512 バイト内に格納されています。Hashcat はこのデータを直接使用してクラッキング攻撃を実行できます。
ここでは、データのコピーと変換のための強力なユーティリティである dd コマンドを使用します。
以下のコマンドを使用して、myvolume.hc から最初の 512 バイトを読み込み、veracrypt.hash という新しいファイルに書き込みます。
if=myvolume.hc: input file(入力ファイル)を指定します。of=veracrypt.hash: output file(出力ファイル)を指定します。bs=512: block size(ブロックサイズ)を 512 バイトに設定します。count=1: 1 ブロックのみをコピーすることを指定します。
dd if=myvolume.hc of=veracrypt.hash bs=512 count=1
コマンドが実行され、操作の概要が表示されます。
1+0 records in
1+0 records out
512 bytes copied, 0.00012345 s, 4.1 MB/s
次に、新しいハッシュファイルが作成され、正確に 512 バイトのサイズであることを確認します。
ls -l veracrypt.hash
出力は以下のようになります。
-rw-r--r-- 1 labex labex 512 Dec 01 12:35 veracrypt.hash
これで、Hashcat が攻撃に使用するハッシュデータを正常に抽出しました。
VeraCrypt の正しいハッシュモードを特定する
このステップでは、Hashcat の正しい「ハッシュモード」を見つける方法を学びます。Hashcat は数百種類のハッシュタイプをサポートしており、どのタイプをクラックしようとしているのかを正確に伝える必要があります。各タイプは一意の番号で識別されます。
ステップ 1 で AES 暗号化と SHA-512 ハッシュアルゴリズムを使用してボリュームを作成したため、Hashcat で対応するモードを見つける必要があります。これは、Hashcat のヘルプ出力から検索することで実行できます。
以下のコマンドを使用して、Hashcat のヘルプ情報を表示し、「VeraCrypt」を含む行をフィルタリングします。grep -i コマンドは、大文字小文字を区別しない検索を実行します。
hashcat --help | grep -i veracrypt
出力には、VeraCrypt に関連するすべてのハッシュモードがリストされます。
...
13711 | VeraCrypt RIPEMD160 + XTS 512 bit | Operating System
13712 | VeraCrypt RIPEMD160 + XTS 1024 bit | Operating System
13713 | VeraCrypt RIPEMD160 + XTS 1536 bit | Operating System
13721 | VeraCrypt SHA512 + XTS 512 bit | Operating System
13722 | VeraCrypt SHA512 + XTS 1024 bit | Operating System
13723 | VeraCrypt SHA512 + XTS 1536 bit | Operating System
13731 | VeraCrypt SHA256 + XTS 512 bit | Operating System
13732 | VeraCrypt SHA256 + XTS 1024 bit | Operating System
13733 | VeraCrypt SHA256 + XTS 1536 bit | Operating System
13751 | VeraCrypt Whirlpool + XTS 512 bit | Operating System
13752 | VeraCrypt Whirlpool + XTS 1024 bit | Operating System
13753 | VeraCrypt Whirlpool + XTS 1536 bit | Operating System
...
リストを確認してください。ステップ 1 での選択(SHA512)に基づくと、私たちのボリュームの正しいモードは 13721 です。このモード番号を最終ステップで使用して、Hashcat に veracrypt.hash ファイルをどのように解釈するかを指示します。
パスワード構造が既知の場合のマスク攻撃を構築する
このステップでは、Hashcat 攻撃用の「マスク」を構築します。マスク攻撃は、パスワードの構造についてある程度の知識がある場合に非常に効率的です。今回の実験では、パスワードが LabEx2024 であることを知っています。ここでは、構造のみを知っていると仮定しましょう。つまり、「LabEx」という単語の後に 4 つの数字が続く(年のような)構造です。
Hashcat は、マスクを定義するために特別なプレースホルダー、または「キャラクタセット」を使用します。
?l= 小文字のアルファベット (a...z)?u= 大文字のアルファベット (A...Z)?d= 数字 (0...9)?s= 特殊文字 (!,@,#など)
想定される構造(「LabEx」+ 4 つの数字)に基づくと、マスクは LabEx?d?d?d?d となります。これにより、Hashcat はリテラル文字列「LabEx」で始まり、0000 から 9999 までの任意の 4 桁のシーケンスで終わるすべての組み合わせを試すようになります。
ドライランを実行して、このマスクが生成するパスワードを確認しましょう。-a 3 フラグはマスク攻撃を指定し、--stdout は実際の攻撃を実行する代わりに、生成された候補を画面に出力するように Hashcat に指示します。
hashcat --stdout -a 3 LabEx?d?d?d?d
このコマンドは、LabEx0000、LabEx0001 などから始まり、LabEx9999 に達するまで、数千の潜在的なパスワードをターミナルにすばやく表示します。いつでも Ctrl+C を押して出力を停止できます。
これにより、マスクがターゲットパスワード LabEx2024 を含めるように正しく構築されていることが確認できました。
ボリュームパスワードを復旧するための攻撃を実行する
この最終ステップでは、すべての要素を組み合わせて攻撃を開始し、VeraCrypt ボリュームのパスワードを復旧します。ハッシュファイル(veracrypt.hash)、ハッシュモード(13721)、および攻撃マスク(LabEx?d?d?d?d)があります。
最終的な Hashcat コマンドを組み立てましょう。
-m 13721: VeraCrypt(SHA512)のハッシュモードを設定します。-a 3: 攻撃モードをマスク攻撃に設定します。veracrypt.hash: ターゲットのハッシュファイルです。LabEx?d?d?d?d: 使用するパスワードマスクです。
それでは、ターミナルでコマンドを実行しましょう。
hashcat -m 13721 -a 3 veracrypt.hash LabEx?d?d?d?d
Hashcat が開始されます。パスワード空間は小さいため、攻撃は非常に迅速に完了するはずです。ステータスの更新が表示され、その後最終結果が表示されます。
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: VeraCrypt SHA512 + XTS 512 bit
Hash.Target......: veracrypt.hash
Time.Started.....: ...
Time.Estimated...: 0 secs
Guess.Mask.......: LabEx?d?d?d?d [9]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: XXXXXX H/s (0.01ms) @ Accel:X Loops:X
Recovered........: 1/1 (100.00%) Digests
Progress.........: 10000/10000 (100.00%)
Rejected.........: 0/10000 (0.00%)
Restore.Point....: 10000/10000 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1
Candidates.#1....: LabEx0000 -> LabEx9999
Hardware.Mon.#1..: Util: 99%
veracrypt.hash:LabEx2024
All hashes have been recovered.
...
成功です!veracrypt.hash:LabEx2024 という行は、Hashcat がパスワードを正常に復旧したことを示しています。
Hashcat は、クラックされたパスワードを hashcat.potfile というファイルに自動的に保存します。--show オプションを使用して、いつでも復旧されたパスワードを表示できます。
hashcat -m 13721 --show veracrypt.hash
これにより、クラックされたハッシュとパスワードが再度出力されるだけです。
veracrypt.hash:LabEx2024
おめでとうございます。Hashcat を使用して VeraCrypt ボリュームのパスワードを正常にクラックしました!
まとめ
この実験では、VeraCrypt で暗号化されたボリュームをターゲットにすることで、パスワードセキュリティ分析の実践的な経験を積みました。
パスワード復旧プロセスの主要なステップをすべて成功させました。
- VeraCrypt のコマンドラインツールを使用して暗号化されたコンテナを作成しました。
- オフライン攻撃に必要な 512 バイトのハッシュデータを抽出しました。
- Hashcat のヘルプシステムを使用して、ターゲットに適切なハッシュモードを特定しました。
- 既知のパスワード構造に基づいて、ターゲットを絞ったマスク攻撃を構築し、テストしました。
- 攻撃を実行して、ボリュームのパスワードを正常に復旧しました。
これらのスキルは、エシカルハッキングおよびデジタルフォレンジックの分野において基本的であり、パスワードポリシーや構造がどのように脆弱性に対してテストできるかを示しています。これらの攻撃ベクトルを理解することは、より強力な防御を構築するための最初のステップです。


