このブログ記事では、John the Ripper スイートに含まれるツール encfs2john
の使い方について詳しく解説します。EncFS で暗号化されたファイルシステムのパスワードを忘れてしまった場合や、セキュリティ監査の一環としてパスワード強度をテストしたい場合に役立ちます。
EncFS (Encrypted Filesystem) は、FUSE (Filesystem in Userspace) を利用した暗号化ファイルシステムです。既存のディレクトリ上に別のディレクトリをマウントし、そのマウントポイントを通して読み書きされるファイルやファイル名を自動的に暗号化・復号化します。特別な権限なしにユーザーが手軽に利用できる点が特徴です。
John the Ripper とは? 🕵️♂️
encfs2john
を理解するには、まずそれが一部である John the Ripper (JtR) について知る必要があります。John the Ripper は、非常に有名で強力なオープンソースのパスワードクラッキングツールです。システム管理者やセキュリティ専門家が、弱いパスワードを検出したり、パスワードリカバリを行ったりするために広く利用されています。
John the Ripper は様々なOS(Unix系、macOS、Windowsなど)で動作し、多種多様なパスワードハッシュ形式に対応しています。encfs2john
のようなツールは、特定のアプリケーションやファイル形式(この場合は EncFS)からパスワード情報を抽出し、John the Ripper が解析できる形式(ハッシュ)に変換する役割を担います。
John the Ripper には、オリジナルのコアバージョンと、コミュニティによって拡張された「Jumbo」バージョンがあります。encfs2john
は通常、機能が豊富な Jumbo バージョンに含まれています。
encfs2john の入手とインストール 💻
encfs2john
は通常、単体でインストールするものではなく、John the Ripper (Jumbo バージョン) の一部として提供されます。したがって、John the Ripper (Jumbo) をインストールする必要があります。
インストール方法は OS によって異なります。
- Linux (Debian/Ubuntu系): 多くの場合、パッケージマネージャからインストールされるのは Jumbo バージョンです。
- Linux (Fedora/CentOS/RHEL系): または
- macOS (Homebrew):
- ソースからビルド: John the Ripper の GitHub リポジトリからソースコードをクローンまたはダウンロードし、ドキュメントに従ってビルドします。 ビルド後、実行ファイルは `../run/` ディレクトリに生成されます。
インストールが完了すると、encfs2john
スクリプト(多くの場合 Python スクリプト encfs2john.py
)は John the Ripper の実行ファイルと同じディレクトリ(通常は /usr/bin/
や /usr/sbin/
、ソースからビルドした場合は run
ディレクトリ)に配置されます。見つからない場合は、システム内を検索してみてください。
Kali Linux などのペネトレーションテスト用ディストリビューションでは、John the Ripper とその関連ツール(encfs2john
を含む)が最初からインストールされていることが多いです。
encfs2john の基本的な使い方 🛠️
encfs2john
の主な目的は、EncFS の設定ファイルからパスワードの検証に必要な情報を抽出し、John the Ripper が解析できる形式(ハッシュ文字列)に変換することです。
EncFS は、暗号化ボリュームの設定情報(使用する暗号化アルゴリズム、キーサイズ、パスワードからキーを派生させるための情報など)を、暗号化されたディレクトリのルートにある隠しファイル .encfs6.xml
に保存します。encfs2john
はこのファイルを読み取ります。
基本的なコマンド構文は以下の通りです。
または、.encfs6.xml
ファイルを直接指定することもできます(ただし、多くの実装ではディレクトリの指定が必要です)。
ここで、/path/to/encrypted_directory/
は EncFS で暗号化されたファイルが格納されているディレクトリへのパスです。このディレクトリ直下に .encfs6.xml
ファイルが存在する必要があります。
実行すると、標準出力に John the Ripper 形式のハッシュ文字列が出力されます。
出力例(実際のハッシュ値は異なります):
この出力は、John the Ripper で解析するためにファイルに保存するのが一般的です。リダイレクト(>
)を使用します。
これで、encfs_hash.txt
というファイルにハッシュが保存されました。このファイルを次のステップで John the Ripper に渡します。
John the Ripper によるパスワード解析 💥
encfs2john
でハッシュファイルを準備したら、いよいよ John the Ripper を使ってパスワードの解析(クラッキング)を試みます。John the Ripper にはいくつかの主要なクラッキングモードがあります。
1. デフォルトモード(混合モード)
最も簡単な方法は、モードを指定せずに John the Ripper を実行することです。この場合、John は通常、以下の順番で効率的なモードを自動的に試します。
- シングルクラックモード (Single Crack Mode): ユーザー名や GECOS 情報(コメント欄)など、ハッシュファイル自体に含まれる情報に基づいて、一般的なパスワードの変形(大文字小文字変換、数字追加など)を試します。EncFS のハッシュには通常ユーザー名は含まれませんが、基本的な変形ルールが適用される可能性があります。
- ワードリストモード (Wordlist Mode): 指定された辞書ファイル(ワードリスト)に含まれる単語をパスワード候補として試します。デフォルトのワードリスト (
password.lst
) が使われます。 - インクリメンタルモード (Incremental Mode): すべての可能な文字の組み合わせを総当たりで試します(ブルートフォース)。文字種や長さを定義できますが、非常に時間がかかります。
解析が始まると、John は進捗状況を表示します。パスワードが見つかると、ターミナルに表示され、$JOHN/john.pot
というファイル(通常は John の実行ディレクトリかユーザーのホームディレクトリ内の .john
フォルダにある john.pot
)に保存されます。
2. ワードリストモード (Wordlist Mode)
特定の辞書ファイルを使って攻撃したい場合に指定します。強力なパスワードリストを使うことで、解析の成功率を高めることができます。rockyou.txt
は非常に有名で巨大なパスワードリストの一つで、多くの Linux ディストリビューションに含まれています(例: /usr/share/wordlists/rockyou.txt.gz
)。
さらに、マングリングルール (Mangling Rules) を適用することで、ワードリストの単語を様々に変形させて試すことができます。例えば、単語の末尾に数字を追加したり、特定の文字を記号に置き換えたりします。
--rules
オプションでルールセットを指定します。Jumbo
は多くの一般的なルールを含むセットです。ルールは john.conf
ファイルで定義・カスタマイズできます。
3. インクリメンタルモード (Incremental Mode)
ワードリストに頼らず、指定された文字セット(数字、小文字、大文字、記号など)の組み合わせを総当たりで試します。非常に時間がかかる可能性がありますが、辞書にないランダムなパスワードに対して有効な場合があります。
利用可能なモードや文字セットは john.conf
で定義されています。
4. マスクモード (Mask Mode)
パスワードの構造(長さや文字種)がある程度わかっている場合に非常に有効なモードです。特定のパターンに一致する候補のみを生成して試します。
マスク文字の意味:
?l
: 小文字アルファベット (a-z)?u
: 大文字アルファベット (A-Z)?d
: 数字 (0-9)?s
: 特殊文字 (!@#$%^&*…)?a
: すべての表示可能 ASCII 文字?h
: 16進数 (小文字: 0-9, a-f)?H
: 16進数 (大文字: 0-9, A-F)?b
: すべての8ビット文字 (0x00 – 0xff)
セッション管理と結果表示
John the Ripper は解析状況を自動的に保存します (デフォルトでは john.rec
ファイル)。Ctrl+C で中断しても、後で再開できます。
解析が完了した後、または途中で見つかったパスワードを確認するには --show
オプションを使用します。
出力例:
見つかったパスワードは john.pot
ファイルにも記録されています。
GPU を利用した高速化 (オプション)
John the Ripper は OpenCL や CUDA をサポートしており、対応する GPU があれば解析速度を大幅に向上させることができます。EncFS のハッシュ形式が GPU 対応しているか(例: encfs-opencl
)、また、John the Ripper が GPU サポート付きでビルドされているかを確認する必要があります。
GPU の利用設定は環境によって異なるため、John the Ripper のドキュメントを参照してください。
EncFS の脆弱性と注意点 ⚠️
encfs2john
を使用する上で、EncFS 自体に関するいくつかの注意点と、ツールの利用に関する倫理的な側面を理解しておくことが重要です。
パスワードクラッキングの難易度
encfs2john
と John the Ripper を使っても、パスワードの解析に成功するとは限りません。成功するかどうかは、主に以下の要因に依存します。
- パスワードの強度: 長く、複雑で、ランダムなパスワードほど解析は困難になります。単純な単語や短いパスワードは比較的容易に破られる可能性があります。
- 計算リソース: 高速な CPU や強力な GPU を多数使用できれば、それだけ多くのパスワード候補を試すことができ、解析時間を短縮できます。
- 時間: 強力なパスワードの場合、解析には数日、数週間、数年、あるいはそれ以上の時間がかかる可能性があります。現実的な時間内に解析が終わらないことも珍しくありません。
- 利用可能な情報: パスワードに関するヒント(使用されている単語、長さ、文字種など)があれば、ワードリストやマスクモードを効果的に使用でき、成功率を高めることができます。
まとめ ✨
encfs2john
は、John the Ripper スイートの一部として、EncFS で暗号化されたファイルシステムのパスワード解析を可能にする便利なツールです。
- John the Ripper (Jumbo バージョン) をインストールします。
encfs2john
を使用して、対象の EncFS ディレクトリ(.encfs6.xml
が含まれる)からハッシュを抽出します。./encfs2john /path/to/encrypted_dir/ > encfs_hash.txt
- John the Ripper を使って、抽出したハッシュファイル (
encfs_hash.txt
) を解析します。john encfs_hash.txt
(デフォルトモード)john --wordlist=/path/to/wordlist.txt encfs_hash.txt
(ワードリストモード)john --incremental encfs_hash.txt
(インクリメンタルモード)john --mask='?l?l?l?l?d?d?d?d' encfs_hash.txt
(マスクモード) - 解析結果は
john --show encfs_hash.txt
で確認できます。
パスワード解析は時間と計算リソースを要する作業であり、成功が保証されるものではありません。また、ツールの使用にあたっては、常に法と倫理を遵守することが不可欠です。
EncFS を利用する際は、その利便性と既知の制限・脆弱性を理解した上で、適切なパスワード強度を設定し、設定ファイル .encfs6.xml
のバックアップを保管しておくことが重要です。🛡️
参考情報 🔗
-
John the Ripper official website: Openwall プロジェクトによる公式サイト。ドキュメントやダウンロードリンクがあります。
https://www.openwall.com/john/ -
John the Ripper Community Wiki: コミュニティによる Wiki。より詳細な情報や Tips が見つかることがあります。
https://openwall.info/wiki/john/ -
John the Ripper (Jumbo) GitHub Repository: Jumbo バージョンのソースコードリポジトリ。
encfs2john.py
などのスクリプトも含まれています。
https://github.com/openwall/john -
EncFS GitHub Repository (vgough/encfs): EncFS のオリジナル開発者によるリポジトリ(近年は更新が少ない点に注意)。
https://github.com/vgough/encfs - EncFS Security Audit (2014): 2014年に実施された EncFS のセキュリティ監査レポート。脆弱性に関する情報源。 (検索して見つける必要があります。直接リンクは変動する可能性があります。)
コメント