encfs2john の使い方:EncFS で暗号化されたファイルシステムのパスワードを解析する

このブログ記事では、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系):
    sudo apt update
    sudo apt install john
    多くの場合、パッケージマネージャからインストールされるのは Jumbo バージョンです。
  • Linux (Fedora/CentOS/RHEL系):
    sudo dnf install john
    または
    sudo yum install john
  • macOS (Homebrew):
    brew update
    brew install john-jumbo
  • ソースからビルド:John the Ripper の GitHub リポジトリからソースコードをクローンまたはダウンロードし、ドキュメントに従ってビルドします。
    git clone https://github.com/openwall/john -b bleeding-jumbo john
    cd john/src
    ./configure && make -s clean && make -sj4
    ビルド後、実行ファイルは `../run/` ディレクトリに生成されます。

インストールが完了すると、encfs2john スクリプト(多くの場合 Python スクリプト encfs2john.py)は John the Ripper の実行ファイルと同じディレクトリ(通常は /usr/bin//usr/sbin/、ソースからビルドした場合は run ディレクトリ)に配置されます。見つからない場合は、システム内を検索してみてください。

# システム全体から検索する場合 (時間がかかることがあります)
find / -name encfs2john.py 2>/dev/null
# John the Ripper のインストールディレクトリ周辺を検索する場合 (例: /usr/share/john/)
find /usr/share/john -name encfs2john.py

Kali Linux などのペネトレーションテスト用ディストリビューションでは、John the Ripper とその関連ツール(encfs2john を含む)が最初からインストールされていることが多いです。

encfs2john の基本的な使い方

encfs2john の主な目的は、EncFS の設定ファイルからパスワードの検証に必要な情報を抽出し、John the Ripper が解析できる形式(ハッシュ文字列)に変換することです。

EncFS は、暗号化ボリュームの設定情報(使用する暗号化アルゴリズム、キーサイズ、パスワードからキーを派生させるための情報など)を、暗号化されたディレクトリのルートにある隠しファイル .encfs6.xml に保存します。encfs2john はこのファイルを読み取ります。

.encfs6.xml ファイルの重要性

.encfs6.xml ファイルには、パスワード自体は平文で含まれていませんが、パスワードを検証するためのソルト(salt)や KDF (Key Derivation Function) のイテレーション回数、暗号化されたボリュームキーなどが含まれています。このファイルがないと、基本的に EncFS ボリュームをマウントしたり、encfs2john でハッシュを抽出したりすることはできません。このファイルは非常に重要なので、バックアップを取っておくことが推奨されます。

基本的なコマンド構文は以下の通りです。

encfs2john /path/to/encrypted_directory/

または、.encfs6.xml ファイルを直接指定することもできます(ただし、多くの実装ではディレクトリの指定が必要です)。

encfs2john /path/to/encrypted_directory/.encfs6.xml

ここで、/path/to/encrypted_directory/ は EncFS で暗号化されたファイルが格納されているディレクトリへのパスです。このディレクトリ直下に .encfs6.xml ファイルが存在する必要があります。

実行すると、標準出力に John the Ripper 形式のハッシュ文字列が出力されます。

# 例: カレントディレクトリに 'encrypted_data' という EncFS ディレクトリがある場合
./encfs2john encrypted_data/

出力例(実際のハッシュ値は異なります):

encrypted_data/.encfs6.xml:$encfs$192*1024*0*1*580280*64*0*48*2a2b...cdef*48*1122...aabb

この出力は、John the Ripper で解析するためにファイルに保存するのが一般的です。リダイレクト(>)を使用します。

./encfs2john encrypted_data/ > encfs_hash.txt

これで、encfs_hash.txt というファイルにハッシュが保存されました。このファイルを次のステップで John the Ripper に渡します。

John the Ripper によるパスワード解析

encfs2john でハッシュファイルを準備したら、いよいよ John the Ripper を使ってパスワードの解析(クラッキング)を試みます。John the Ripper にはいくつかの主要なクラッキングモードがあります。

1. デフォルトモード(混合モード)

最も簡単な方法は、モードを指定せずに John the Ripper を実行することです。この場合、John は通常、以下の順番で効率的なモードを自動的に試します。

  1. シングルクラックモード (Single Crack Mode): ユーザー名や GECOS 情報(コメント欄)など、ハッシュファイル自体に含まれる情報に基づいて、一般的なパスワードの変形(大文字小文字変換、数字追加など)を試します。EncFS のハッシュには通常ユーザー名は含まれませんが、基本的な変形ルールが適用される可能性があります。
  2. ワードリストモード (Wordlist Mode): 指定された辞書ファイル(ワードリスト)に含まれる単語をパスワード候補として試します。デフォルトのワードリスト (password.lst) が使われます。
  3. インクリメンタルモード (Incremental Mode): すべての可能な文字の組み合わせを総当たりで試します(ブルートフォース)。文字種や長さを定義できますが、非常に時間がかかります。
john encfs_hash.txt

解析が始まると、John は進捗状況を表示します。パスワードが見つかると、ターミナルに表示され、$JOHN/john.pot というファイル(通常は John の実行ディレクトリかユーザーのホームディレクトリ内の .john フォルダにある john.pot)に保存されます。

2. ワードリストモード (Wordlist Mode)

特定の辞書ファイルを使って攻撃したい場合に指定します。強力なパスワードリストを使うことで、解析の成功率を高めることができます。rockyou.txt は非常に有名で巨大なパスワードリストの一つで、多くの Linux ディストリビューションに含まれています(例: /usr/share/wordlists/rockyou.txt.gz)。

# rockyou.txt を使用する場合 (事前に gzip で展開しておくか、zcat を使う)
zcat /usr/share/wordlists/rockyou.txt.gz | john --wordlist=/dev/stdin --pipe encfs_hash.txt
# または展開済みのファイルを使用
john --wordlist=/path/to/your/wordlist.txt encfs_hash.txt

さらに、マングリングルール (Mangling Rules) を適用することで、ワードリストの単語を様々に変形させて試すことができます。例えば、単語の末尾に数字を追加したり、特定の文字を記号に置き換えたりします。

john --wordlist=/path/to/your/wordlist.txt --rules=Jumbo encfs_hash.txt

--rules オプションでルールセットを指定します。Jumbo は多くの一般的なルールを含むセットです。ルールは john.conf ファイルで定義・カスタマイズできます。

3. インクリメンタルモード (Incremental Mode)

ワードリストに頼らず、指定された文字セット(数字、小文字、大文字、記号など)の組み合わせを総当たりで試します。非常に時間がかかる可能性がありますが、辞書にないランダムなパスワードに対して有効な場合があります。

# デフォルトのインクリメンタルモードを実行
john --incremental encfs_hash.txt
# 数字のみ、最大8文字まで試す場合
john --incremental=Digits --max-length=8 encfs_hash.txt
# 小文字アルファベットのみを試す場合
john --incremental=LowerAlpha encfs_hash.txt

利用可能なモードや文字セットは john.conf で定義されています。

4. マスクモード (Mask Mode)

パスワードの構造(長さや文字種)がある程度わかっている場合に非常に有効なモードです。特定のパターンに一致する候補のみを生成して試します。

# 例: 8文字の小文字アルファベット (?l)
john --mask='?l?l?l?l?l?l?l?l' encfs_hash.txt
# 例: 大文字で始まり、小文字が5文字続き、数字が2文字 (?u?l{5}?d{2})
john --mask='?u?l?l?l?l?l?d?d' encfs_hash.txt
# 例: "pass" で始まり、その後に4桁の数字が続く
john --mask='pass?d?d?d?d' encfs_hash.txt

マスク文字の意味:

  • ?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 で中断しても、後で再開できます。

# 中断したセッションを再開
john --restore
# 特定のセッション名を付けて実行・再開 (複数の解析を並行する場合に便利)
john --session=encfs_crack1 encfs_hash.txt
john --restore=encfs_crack1
# 現在の状況を表示
john --status
john --status=encfs_crack1

解析が完了した後、または途中で見つかったパスワードを確認するには --show オプションを使用します。

john --show encfs_hash.txt

出力例:

encrypted_data/.encfs6.xml:bubblegum
1 password hash cracked, 0 left

見つかったパスワードは john.pot ファイルにも記録されています。

cat ~/.john/john.pot

GPU を利用した高速化 (オプション)

John the Ripper は OpenCL や CUDA をサポートしており、対応する GPU があれば解析速度を大幅に向上させることができます。EncFS のハッシュ形式が GPU 対応しているか(例: encfs-opencl)、また、John the Ripper が GPU サポート付きでビルドされているかを確認する必要があります。

# 利用可能なフォーマットリストを確認 (OpenCL 対応など)
john --list=formats
# OpenCL を使って解析 (デバイス指定が必要な場合あり)
john --format=encfs-opencl --dev=0 encfs_hash.txt

GPU の利用設定は環境によって異なるため、John the Ripper のドキュメントを参照してください。

EncFS の脆弱性と注意点

encfs2john を使用する上で、EncFS 自体に関するいくつかの注意点と、ツールの利用に関する倫理的な側面を理解しておくことが重要です。

EncFS の既知の脆弱性

EncFS については、2014年に行われたセキュリティ監査により、いくつかの脆弱性が指摘されています。具体的には、以下のような点が挙げられています。

  • 暗号化されたファイル名やファイルサイズ、更新時刻、パーミッションなどのメタデータが隠蔽されないため、攻撃者はファイルの内容は見えなくても、ファイル構造やアクティビティに関する情報を推測できる可能性がある。
  • 特定の条件下で、ファイルの内容に対する統計的な分析が可能になる場合がある。
  • 設定によっては、初期化ベクトル(IV)の再利用に関する問題が発生する可能性がある(ただし、デフォルト設定では通常問題ない)。
  • 開発が長期間停滞しており、指摘された問題の一部は未修正のままになっている可能性がある。

これらの脆弱性のため、非常に機密性の高いデータを保護する目的や、強力な攻撃者からの防御を想定する場合には、EncFS の使用は推奨されないことがあります。代替として、dm-crypt/LUKS や VeraCrypt、gocryptfs などが検討されることがあります。

ただし、encfs2john はこれらの脆弱性を直接利用するものではなく、あくまで設定ファイル (.encfs6.xml) とパスワード候補を用いて、正規のパスワードを特定しようとするツールです。

パスワードクラッキングの難易度

encfs2john と John the Ripper を使っても、パスワードの解析に成功するとは限りません。成功するかどうかは、主に以下の要因に依存します。

  • パスワードの強度: 長く、複雑で、ランダムなパスワードほど解析は困難になります。単純な単語や短いパスワードは比較的容易に破られる可能性があります。
  • 計算リソース: 高速な CPU や強力な GPU を多数使用できれば、それだけ多くのパスワード候補を試すことができ、解析時間を短縮できます。
  • 時間: 強力なパスワードの場合、解析には数日、数週間、数年、あるいはそれ以上の時間がかかる可能性があります。現実的な時間内に解析が終わらないことも珍しくありません。
  • 利用可能な情報: パスワードに関するヒント(使用されている単語、長さ、文字種など)があれば、ワードリストやマスクモードを効果的に使用でき、成功率を高めることができます。

倫理的な考慮と法的責任

重要: encfs2john や John the Ripper のようなパスワードクラッキングツールは、自身が所有するデータや、明示的な許可を得たシステムに対してのみ使用してください。

他人の EncFS ボリュームやアカウントに対して、許可なくパスワード解析を試みることは、多くの国や地域で違法行為とみなされ、深刻な法的結果を招く可能性があります。プライバシーの侵害や不正アクセスに関する法規を遵守してください。

これらのツールは、あくまでパスワードを忘れた場合のデータ復旧や、自身のシステムのセキュリティ強度をテストするためのものです。悪用は絶対に避けてください。

まとめ

encfs2john は、John the Ripper スイートの一部として、EncFS で暗号化されたファイルシステムのパスワード解析を可能にする便利なツールです。

  1. John the Ripper (Jumbo バージョン) をインストールします。
  2. encfs2john を使用して、対象の EncFS ディレクトリ(.encfs6.xml が含まれる)からハッシュを抽出します。
    ./encfs2john /path/to/encrypted_dir/ > encfs_hash.txt
  3. 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 (マスクモード)
  4. 解析結果は 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 のセキュリティ監査レポート。脆弱性に関する情報源。 (検索して見つける必要があります。直接リンクは変動する可能性があります。)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です