この記事では、John the Ripper (JtR) スイートに含まれるツール truecrypt2john
の使い方について詳しく解説します。TrueCryptボリュームからパスワードハッシュを抽出し、John the Ripperを使って解析する手順を学びます。
TrueCryptとtruecrypt2johnについて
TrueCryptとは?
TrueCryptは、かつて広く利用されていたオープンソースのディスク暗号化ソフトウェアです。ファイルコンテナ(仮想ディスク)、パーティション、あるいはシステムドライブ全体を暗号化することができました。AES、Serpent、Twofishといった強力な暗号化アルゴリズム、およびこれらのカスケード(組み合わせ)をサポートしていました。
しかし、TrueCryptの開発は2014年5月に突然終了しました。公式サイトでは「安全ではない可能性があり、未解決のセキュリティ問題が含まれている可能性がある」との警告が表示され、WindowsのBitLockerなど他の暗号化ソリューションへの移行が推奨されました。開発終了の正確な理由は公式には明らかにされていませんが、「プロジェクトへの興味を失った」ためとの非公式な情報もあります。最終バージョンは7.1aで、その後に公開されたバージョン7.2は既存の暗号化を解除する機能のみを持っていました。
現在、TrueCryptの使用は推奨されていません。TrueCryptのソースコードを基にした後継プロジェクトとして VeraCrypt や CipherShed などが存在し、特にVeraCryptは積極的に開発が続けられており、TrueCryptよりもセキュリティが強化されています。
truecrypt2johnとは?
truecrypt2john
は、著名なパスワードクラッキングツールである John the Ripper (JtR) の一部として提供されるユーティリティスクリプト(多くの場合Pythonスクリプト)です。その主な目的は、TrueCryptで暗号化されたボリュームファイル(コンテナファイルやパーティションイメージなど)から、John the Ripperが解析できる形式のパスワードハッシュを抽出することです。
TrueCryptボリューム自体を直接John the Ripperで解析することはできません。まず truecrypt2john
を使って、ボリュームヘッダなどからパスワード検証に必要な情報を抽出し、特定のフォーマット($truecrypt$
で始まる文字列)に変換する必要があります。このハッシュ文字列には、暗号化アルゴリズム、モード、ソルトなどの情報が含まれています。
抽出されたハッシュは、実際のファイルデータを含みません。あくまでパスワードが正しいかどうかを検証するための情報です。
John the Ripper と truecrypt2john のインストール
truecrypt2john
は通常、John the Ripper の “Jumbo” バージョンに含まれています。Jumboバージョンは、公式版よりも多くのハッシュ形式や機能に対応したコミュニティ版です。
John the Ripper (Jumbo) をインストールする方法はいくつかあります。
パッケージマネージャーを使用する (Linux)
多くのLinuxディストリビューションでは、パッケージマネージャーを使って簡単にインストールできます。
Debian / Ubuntu系:
sudo apt update
sudo apt install john
Fedora / RHEL / CentOS系:
sudo dnf install john
または
sudo yum install john
Kali Linuxなどのペネトレーションテスト用ディストリビューションには、通常プリインストールされています。
Homebrewを使用する (macOS)
macOSでは、Homebrewを使うと簡単にインストールできます。
brew install john-jumbo
インストール後、truecrypt2john
スクリプトは通常、John the Ripper の実行ファイルがあるディレクトリ(例:/usr/bin/
, /usr/sbin/
, /opt/homebrew/Cellar/john-jumbo/<version>/share/john/
, /path/to/john/run/
など)や、関連スクリプトが格納されるディレクトリ(例:/usr/share/john/
)内に配置されます。
truecrypt2john
が見つからない場合は、find
コマンドなどで検索してみてください。
sudo find / -name truecrypt2john.py
ソースコードからコンパイルする
最新版を使いたい場合や、特定の環境向けに最適化したい場合は、GitHubリポジトリからソースコードをクローンしてコンパイルします。
# 必要な開発ツールやライブラリをインストール (例: Debian/Ubuntu)
sudo apt update
sudo apt install -y build-essential libssl-dev git zlib1g-dev
# John the Ripper (Jumbo) のソースコードを取得
git clone https://github.com/openwall/john -b bleeding-jumbo john
# コンパイル
cd john/src
./configure
make -s clean && make -sj4 # -sj4 は4コアで並列コンパイルする場合
# コンパイル後、実行ファイルやスクリプトは john/run ディレクトリに生成されます
cd ../run
ls # john, truecrypt2john.py などがあるはず
コンパイルした場合は、john/run
ディレクトリ内で truecrypt2john.py
や john
コマンドを実行します。必要に応じてパスを通すと便利です。
truecrypt2john の基本的な使い方
truecrypt2john
の基本的な構文は非常にシンプルです。
truecrypt2john <TrueCryptボリュームファイル>
または、Pythonスクリプトとして直接実行する場合:
python /path/to/truecrypt2john.py <TrueCryptボリュームファイル>
<TrueCryptボリュームファイル>
には、解析したいTrueCryptコンテナファイル(例: my_secret_files.tc
)や、暗号化されたパーティションのデバイス名(例: /dev/sdXN
)、あるいはddなどで作成したイメージファイルを指定します。
実行すると、標準出力にハッシュ文字列が出力されます。このハッシュをファイルに保存して、John the Ripper に渡します。
実行例
my_encrypted_volume.tc
という名前のTrueCryptボリュームファイルからハッシュを抽出し、truecrypt_hash.txt
というファイルに保存する例:
truecrypt2john my_encrypted_volume.tc > truecrypt_hash.txt
リダイレクト(>
)を使ってファイルに保存するのが一般的です。ハッシュ文字列は非常に長くなることがあります。
出力されるハッシュ形式
出力されるハッシュは通常、以下のような形式をしています。
<ボリュームファイル名>:$truecrypt$*<バージョン>*<アルゴリズム>*<モード>*<キーダーブ>*<ソルト>*<ペイロード>
例(架空のハッシュ):
my_encrypted_volume.tc:$truecrypt$*0*0*2*1*64*b1a2c3d4...*256*e5f6a7b8...
<ボリュームファイル名>
: 元のファイル名。John the Ripperがどのファイルに対するハッシュかを示すために使われます。$truecrypt$
: John the Ripper が TrueCrypt ハッシュであることを認識するための識別子。*<バージョン>
,*<アルゴリズム>
,*<モード>
,*<キーダーブ>
: 暗号化設定に関する情報(内部的な数値コード)。*<ソルト>
: パスワードハッシュに使用されるソルト(16進数文字列)。*<ペイロード>
: パスワード検証に使われる暗号化されたデータ(16進数文字列)。
truecrypt2john
は、通常、標準ボリューム用と隠しボリューム用の両方のハッシュを(もし隠しボリュームが存在する可能性がある場合)出力することがあります。これは、TrueCryptが隠しボリューム機能を持っていたためです。
John the Ripper でハッシュをクラックする
truecrypt2john
でハッシュファイル(例: truecrypt_hash.txt
)を作成したら、いよいよ John the Ripper を使ってパスワードの解析(クラッキング)を試みます。
基本的なクラックコマンド
john truecrypt_hash.txt
このコマンドを実行すると、John the Ripper はデフォルトのクラッキングモード(通常はシングルモード、辞書モード、インクリメンタルモードの順)で解析を開始します。John the Ripper はハッシュファイルの形式を自動的に検出しようとします($truecrypt$
識別子を見て判断します)。
明示的にフォーマットを指定することも可能です。これにより、誤検出を防いだり、特定の暗号アルゴリズム(例: RIPEMD-160, SHA-512, Whirlpool)に絞ったりすることができます。TrueCryptのフォーマット名は tc_ripemd160
, tc_sha512
, tc_whirlpool
などがありますが、通常は truecrypt
を指定すればJohnが適切に判断します。
# フォーマットを明示的に指定
john --format=truecrypt truecrypt_hash.txt
辞書攻撃 (Wordlist Mode)
パスワードに使われそうな単語リスト(辞書ファイル)を使って攻撃するのが最も一般的で効率的な方法の一つです。--wordlist
オプションを使用します。
john --wordlist=/path/to/wordlist.txt truecrypt_hash.txt
/path/to/wordlist.txt
には、使用したい辞書ファイルのパスを指定します。有名な辞書ファイルとして rockyou.txt
などがあります(多くのセキュリティ系Linuxディストリビューションに含まれています)。
さらに、--rules
オプションを組み合わせることで、辞書の単語にルール(例えば、大文字小文字変換、数字や記号の追加など)を適用し、より多くのパスワード候補を試すことができます。
john --wordlist=/usr/share/wordlists/rockyou.txt --rules truecrypt_hash.txt
インクリメンタルモード (Incremental Mode)
辞書攻撃でパスワードが見つからない場合、文字の組み合わせを総当たりで試すインクリメンタルモードが使えます。これは非常に時間がかかる可能性があります。
john --incremental truecrypt_hash.txt
特定の文字種(例: 数字のみ、小文字英字のみ)を指定することも可能です (--incremental=Digits
など)。詳細はJohn the Ripperのドキュメントを参照してください。
クラック状況の確認と結果表示
クラック実行中に任意のキーを押すと、現在の状況(試行速度、経過時間、現在のモードなど)が表示されます。q
キーまたはCtrl+C
で中断できます。中断したセッションは後で --restore
オプションで再開できます。
# 中断したセッションを再開
john --restore
パスワードが見つかると、John the Ripper はそれを画面に表示し、$JOHN/john.pot
(通常は ~/.john/john.pot
またはJohnのインストールディレクトリ内) というファイルに記録します。
クラックが完了した後や、すでに見つかったパスワードを確認するには --show
オプションを使います。
john --show truecrypt_hash.txt
これにより、john.pot
ファイルに記録されている、指定したハッシュファイルに対応するクラック済みのパスワードが表示されます。
<ボリュームファイル名>:<クラックされたパスワード>:::::<ボリュームファイル名>
もし “No password hashes left to crack” と表示されたら、まだパスワードが見つかっていないか、あるいは既に見つかってjohn.pot
に記録されているためです。
高度なオプションと考慮事項 🤔
キーファイル (Keyfiles)
TrueCrypt (およびVeraCrypt) は、パスワードに加えて、またはパスワードの代わりにキーファイルを使用する機能があります。キーファイルは、パスワードと同じようにボリュームをマウントするために必要なファイルです。
truecrypt2john
は、キーファイルが使用されていない、パスワードのみで保護されたボリュームを主な対象としています。現在のところ、truecrypt2john
スクリプト自体にキーファイルを直接指定して、それを含めたハッシュを生成する標準的なオプションは見当たりません(一部のフォークや古いバージョンでは試みがあったかもしれませんが、主流ではありません)。
もしボリュームがキーファイルで保護されている場合、そのキーファイル自体がなければ、truecrypt2john
と John the Ripper を使ったパスワードクラックは基本的に不可能です(または著しく困難になります)。キーファイルの内容がパスワード導出プロセスに組み込まれるため、キーファイルなしでは正しいハッシュを生成・照合できません。
隠しボリューム (Hidden Volumes)
前述の通り、truecrypt2john
は隠しボリュームが存在する可能性を考慮し、隠しボリューム用のハッシュも出力することがあります。John the Ripper で解析する際には、これらのハッシュも試行対象となります。もし標準ボリュームのパスワードと隠しボリュームのパスワードが異なる場合、両方のパスワードをクラックできる可能性があります。
パフォーマンスとGPUクラッキング
TrueCrypt/VeraCryptのパスワード解析は、使用されている暗号化アルゴリズム(AES, Serpent, Twofish、またはこれらの組み合わせ)やハッシュアルゴリズム(RIPEMD-160, SHA-512, Whirlpool)、そしてキー導出関数(PBKDF2)の反復回数によって、計算負荷が大きく異なります。特に反復回数が多い設定(VeraCryptで顕著)の場合、CPUベースのJohn the Ripperでは解析に非常に長い時間がかかることがあります。
このような場合、GPU(グラフィックボード)の並列処理能力を活用する Hashcat という別のパスワードクラッキングツールが有効です。HashcatもTrueCrypt/VeraCryptのハッシュ形式に対応しています(Hashcatのモード番号を確認してください)。
truecrypt2john
で生成したハッシュは、多くの場合 Hashcat でも利用可能です(ただし、Hashcatが期待する形式に微調整が必要な場合もあります)。GPUを使用することで、CPUのみの場合と比較して桁違いに高速な解析が可能になることがあります。
John the Ripper自体もOpenMPによるマルチコアCPUでの並列処理に対応していますが、GPUアクセラレーションに関してはHashcatの方が一般的に強力とされています。
VeraCrypt ボリュームへの適用
truecrypt2john
は元々TrueCrypt用に作られましたが、VeraCryptはTrueCryptからフォークしたものであり、初期のVeraCryptボリュームや、TrueCryptモードで作成・マウントされていたVeraCryptボリュームに対しては、truecrypt2john
が機能する可能性があります。
ただし、VeraCryptはセキュリティ強化のため、キー導出関数の反復回数を大幅に増やしています。そのため、VeraCryptボリュームから抽出したハッシュの解析は、TrueCryptボリュームよりも格段に時間がかかります。
最新のVeraCryptバージョンや、TrueCryptと互換性のない設定(例: PIMの使用)で作成されたボリュームに対しては、truecrypt2john
が正しく機能しないか、あるいは専用の veracrypt2john
(もし存在すれば) やHashcatなど他のツールが必要になる可能性があります。VeraCryptの公式ドキュメントや、John the Ripper/Hashcatの最新情報を確認することをお勧めします。
VeraCryptはTrueCryptとの後方互換性を段階的に廃止しており、バージョン1.26.4 BETA (正式版では1.26.7) でTrueCryptモードのサポートを削除しました。TrueCrypt形式を扱える最後のVeraCryptバージョンは1.25.9です。
トラブルシューティング 🛠️
-
truecrypt2john
コマンドが見つからない: John the Ripper (Jumbo) が正しくインストールされているか、パスが通っているか確認してください。ソースからコンパイルした場合はrun
ディレクトリ内で実行します。 - “No such file or directory” / ファイルが見つからない: 指定したTrueCryptボリュームファイルのパスが正しいか確認してください。
-
ハッシュが生成されない / エラーが出る:
- ボリュームファイルが破損している可能性があります。
- TrueCryptボリュームではないファイルを指定している可能性があります。
- 非常に古い、または特殊な形式のTrueCryptボリュームで、
truecrypt2john
が対応していない可能性があります。 - VeraCryptボリュームで、
truecrypt2john
では扱えない形式かもしれません。
-
John the Ripper で “No password hashes loaded” と表示される:
truecrypt2john
で生成したハッシュファイルが空、または形式が間違っている可能性があります。--format
オプションで指定した形式が間違っているか、John the Ripper が自動検出できなかった可能性があります。- 指定したハッシュは既にクラック済みで、
john.pot
ファイルに記録されている可能性があります(--show
で確認)。
- クラックが非常に遅い: TrueCrypt/VeraCryptの解析は計算負荷が高いです。特にVeraCryptの場合や、複雑な暗号化設定の場合は時間がかかります。GPUクラッキング (Hashcat) の利用を検討してください。
倫理的な考慮事項とまとめ 🙏
truecrypt2john
と John the Ripper は、パスワードリカバリやセキュリティ監査において非常に強力なツールですが、その力を悪用することは絶対に避けるべきです。
- 合法性: 他人のデータやシステムに対して、許可なくこれらのツールを使用することは、多くの国で法律違反となります。
- 倫理: 自身が所有権を持つデータ(パスワードを忘れてしまった自分の暗号化ボリュームなど)の回復や、組織内で正式な許可を得たペネトレーションテストの範囲内でのみ使用してください。
TrueCryptは開発が終了しており、セキュリティ上の懸念があるため、現在では VeraCrypt のようなアクティブに開発・保守されている代替ソフトウェアの使用が強く推奨されます。VeraCryptはTrueCryptの多くの概念を引き継ぎつつ、セキュリティを強化しています。
この記事では、truecrypt2john
を使用してTrueCryptボリュームからハッシュを抽出し、John the Ripper でパスワードを解析する基本的な手順を解説しました。ツールの使い方を理解し、責任ある方法で活用してください。✨
コメント