Androidデバイスのセキュリティにおいて、ディスク全体の暗号化は重要な役割を果たしてきました。特にAndroid 4.4から6.0頃まで主流だったFull Disk Encryption (FDE) は、デバイス上の全ユーザーデータを保護するための仕組みです。
この記事では、FDEで暗号化されたAndroidデバイスのイメージからパスワード解析に必要な情報を抽出すためのツール、androidfde2john
について詳しく解説します。このツールは、有名なパスワードクラッキングツール「John the Ripper」スイートの一部として提供されています。
⚠️ 注意: このツールは、正当な権限を持つデバイスやデータの解析、セキュリティ研究、あるいは自身が所有するデバイスのパスワードリカバリーといった合法的な目的でのみ使用してください。許可なく他人のデバイスやデータを解析することは、法律で禁止されており、重大なプライバシー侵害となります。
Android Full Disk Encryption (FDE) とは?
まず、androidfde2john
が対象とするFDEについて理解しましょう。
FDEは、Androidデバイスのユーザーデータパーティション(通常は /data
)全体を暗号化する技術です。デバイスの電源投入時や再起動時に、ユーザーは設定したパスワード、PIN、またはパターンを入力する必要があります。この認証情報が正しくないと、OSはデータパーティションを復号できず、内部のデータにアクセスすることはできません。
AndroidにおけるFDEは、Linuxカーネルの機能であるdm-crypt
をベースに実装されています。暗号化アルゴリズムとしては、一般的にAES (Advanced Encryption Standard) がCBC (Cipher Block Chaining) モードで使用され、ESSIV (Encrypted Salt-Sector Initialization Vector) によって初期化ベクトルが生成されます。マスターキーはユーザーの認証情報(パスワード等)に基づいて生成・保護されます。
FDEはAndroid 4.4で導入され、Android 5.0でいくつかの改良が加えられました(例:初回起動時の高速暗号化、ハードウェア支援による鍵保管など)。しかし、Android 7.0以降では、より柔軟なファイルベース暗号化 (File-Based Encryption, FBE) が主流となり、FDEは主に古いバージョンのAndroidデバイスで見られます。FBE環境では、androidfde2john
は使用できません。
ポイント:
- FDEはユーザーデータパーティション全体を暗号化します。
- 起動時にパスワード/PIN/パターンが必要です。
dm-crypt
に基づき、AES暗号が使われます。- 主にAndroid 4.4〜6.xで使用されていました。
- Android 7.0以降はFBEが主流です。
androidfde2john とは何か? 🤔
androidfde2john
(通常はPythonスクリプト androidfde2john.py
として提供されます)は、John the Ripper スイートに含まれるツールの1つです。その主な目的は、Android FDEで暗号化されたパーティションイメージから、パスワードクラッキングに必要なメタデータを抽出し、John the Ripperが解析可能な形式(ハッシュ文字列)に変換することです。
具体的には、FDEに関する重要な情報が格納されている「暗号化フッター (crypto footer)」と呼ばれる領域を解析します。このフッターは通常、暗号化されたパーティションの末尾付近に存在します(Androidのバージョンや実装によっては、別の専用パーティションに格納されている場合もあります)。
androidfde2john
は、このフッターから以下の情報などを抽出します:
- 暗号化アルゴリズムやモードに関する情報
- マスターキーを保護するためのソルト (Salt)
- 暗号化されたマスターキー自体 (Encrypted Master Key)
- その他、復号に必要なメタデータ
これらの情報を組み合わせ、John the Ripper がパスワードクラック試行に使用できる形式(通常 $fde$
または $android-fde$
で始まる文字列)で出力します。
重要な点: androidfde2john
自体はパスワードをクラック(解読)するツールではありません。あくまで、クラッキングに必要な「鍵の情報(ハッシュ)」を抽出するための前処理ツールです。実際のクラッキング作業は、John the Ripper 本体 (john
コマンド) が行います。
準備するもの 🛠️
androidfde2john
を使用するには、以下のものが必要です。
-
John the Ripper スイート:
androidfde2john.py
は John the Ripper の一部です。公式ウェブサイト (https://www.openwall.com/john/) からダウンロードするか、Kali Linuxなどのセキュリティ関連ディストリビューションに含まれるものを利用します。通常、John the Ripperの `run` ディレクトリ内にスクリプトがあります。 -
Android FDE イメージファイル:
解析対象となる、FDEで暗号化されたパーティションのイメージファイルが必要です。これは通常、
userdata
パーティションのイメージです。- 取得方法: デバイスがroot化されている場合、
dd
コマンドや TWRP (Team Win Recovery Project) などのカスタムリカバリを使用してパーティションイメージを抽出できます。例えば、ADB (Android Debug Bridge) を使って以下のように取得できる場合があります(デバイスや環境によってパスは異なります)。
物理的な抽出(チップオフ)などのフォレンジック手法で取得されることもあります。adb shell "su -c 'dd if=/dev/block/platform/<...>/by-name/userdata' " > userdata.img
警告: イメージファイルの取得は、デバイスのシステムにアクセスする必要があり、誤った操作はデバイスを破損させる可能性があります。また、法的な権限なしに他者のデバイスからデータを抽出することは違法です。
- フッター情報: Androidの実装によっては、暗号化フッターが
userdata
パーティションの末尾ではなく、別の小さなパーティション(例:crypto
,extra
など)に格納されている場合があります。その場合は、そのフッターパーティションのイメージも別途必要になります。
- 取得方法: デバイスがroot化されている場合、
-
Python 環境:
androidfde2john.py
は Python スクリプトであるため、Python の実行環境が必要です。依存するライブラリがある場合、それらもインストールする必要があります(通常は標準ライブラリで動作することが多いですが、環境によっては追加が必要になる可能性もあります)。
androidfde2john の使い方 🚀
androidfde2john.py
の基本的な使い方は比較的シンプルです。
基本的なコマンド構文
多くの場合、以下のような形式でコマンドを実行します。John the Ripper の run
ディレクトリに移動してから実行するのが一般的です。
python ./androidfde2john.py <data_partition_image> [<footer_partition_image>] > hash_output.txt
python ./androidfde2john.py
: スクリプトを実行します。環境によってはpython3
が必要な場合があります。<data_partition_image>
: FDEで暗号化されたユーザーデータ (userdata) パーティションのイメージファイルへのパスを指定します。(例:userdata.img
)[<footer_partition_image>]
: (オプション) 暗号化フッターが別のパーティションに保存されている場合に、そのパーティションイメージへのパスを指定します。userdataパーティションの末尾にフッターが含まれている場合は不要です。> hash_output.txt
: 抽出されたハッシュ情報を、指定したファイル (hash_output.txt
) に保存します。コンソールに直接出力することも可能ですが、ファイルに保存しておくと後でJohn the Ripperで使いやすくなります。
実行例
例1: フッターが userdata イメージに含まれる場合
# John the Ripper の run ディレクトリにいると仮定
cd /path/to/john/run
# userdata.img からハッシュを抽出し、android_hash.txt に保存
python ./androidfde2john.py /path/to/userdata.img > android_hash.txt
例2: フッターが別のパーティションイメージ (crypto.img) にある場合
# John the Ripper の run ディレクトリにいると仮定
cd /path/to/john/run
# userdata.img と crypto.img からハッシュを抽出し、android_hash.txt に保存
python ./androidfde2john.py /path/to/userdata.img /path/to/crypto.img > android_hash.txt
出力されるハッシュ形式
成功すると、androidfde2john.py
は以下のような形式の文字列を出力します(これは一例であり、実際の値は異なります)。
device_or_user:$fde$1*0*0*6ea4[...]d09*7f2c[...]b9a*...
device_or_user:
: 通常、イメージファイル名などがプレフィックスとして付きますが、John the Ripperはこの部分を無視します。$fde$
または$android-fde$
: このハッシュがAndroid FDEのものであることを示す識別子です。1*0*0*...
: バージョン情報、フラグ、暗号化パラメータ、ソルト、暗号化されたマスターキーなどの情報が、特定の区切り文字(通常は*
)で連結された形式で格納されています。
この出力文字列全体が、John the Ripperによるパスワードクラックの対象となります。
トラブルシューティングのヒント:
- エラーが出る場合:
- イメージファイルのパスが正しいか確認してください。
- イメージファイルが破損していないか確認してください。
- 対象のイメージが本当にFDEで暗号化されているか確認してください(FBEではないか?)。
- フッターが別のパーティションにある可能性を考慮し、該当するイメージがないか確認してください。
- Pythonのバージョンや必要なライブラリが不足していないか確認してください。
- ハッシュが出力されない場合: イメージファイル内に有効なFDEメタデータが見つからない可能性があります。
John the Ripper でパスワードをクラックする 🔓
androidfde2john.py
でハッシュ情報を抽出したら、次はいよいよ John the Ripper 本体 (john
コマンド) を使って実際のパスワードクラックを試みます。
John the Ripper は様々なクラックモード(辞書攻撃、ブルートフォース攻撃、シングルクラックモードなど)をサポートしており、状況に応じて使い分けることができます。
基本的な使い方
# John the Ripper の run ディレクトリにいると仮定
cd /path/to/john/run
# android_hash.txt に保存されたハッシュに対してクラックを開始
./john /path/to/android_hash.txt
このコマンドを実行すると、John the Ripper はまず「シングルクラックモード」を試み、その後デフォルトの辞書ファイル (password.lst
) とルールを使ってクラックを試行します。最後にインクリメンタルモード(ブルートフォース)に移行することがあります。
特定の辞書ファイルを使用する
より効果的なクラックのためには、質の高い辞書ファイル(パスワードリスト)を使用することが推奨されます。
./john --wordlist=/path/to/custom_wordlist.txt /path/to/android_hash.txt
--wordlist=/path/to/custom_wordlist.txt
: 使用する辞書ファイルを指定します。有名な辞書ファイルとしてrockyou.txt
などがあります。
ルールベースの攻撃
辞書ファイルとルール(単語の変形規則、例: `password` -> `P@ssw0rd1`)を組み合わせることで、より複雑なパスワードも発見できる可能性が高まります。
./john --wordlist=/path/to/custom_wordlist.txt --rules=Jumbo /path/to/android_hash.txt
--rules=Jumbo
: John the Ripper の Jumbo バージョンに含まれる強力なルールセットを使用します。デフォルトのルールセットを使う場合は--rules
のみ指定します。
インクリメンタルモード(ブルートフォース)
特定の文字セット(数字のみ、英小文字のみ、全文字種など)で総当たり攻撃を行います。非常に時間がかかる可能性があります。
./john --incremental=Digits /path/to/android_hash.txt
--incremental=Digits
: 数字のみ(0-9)を使ってブルートフォース攻撃を行います。他にもAlnum
(英数字),Alpha
(英字),LowerNum
(英小文字+数字),All
(全文字種)などがあります。john.conf
ファイルでカスタムモードを定義することも可能です。
クラック結果の表示
クラックが成功すると、John the Ripper はパスワードを見つけ次第、ターミナルに表示します。また、見つかったパスワードは john.pot
というファイルに記録されます。後でクラック済みのパスワードを確認するには、以下のコマンドを使用します。
./john --show /path/to/android_hash.txt
これにより、android_hash.txt
に含まれるハッシュのうち、既にクラックが成功して john.pot
に記録されているパスワードが表示されます。
クラッキングに関する注意点
- 時間とリソース: パスワードの複雑さによっては、クラッキングに膨大な時間(数日、数週間、あるいはそれ以上)と計算リソース(高性能なCPUやGPU)が必要になる場合があります。特に長く複雑なパスワードのブルートフォース攻撃は現実的でないことが多いです。
- 成功するとは限らない: 強力なパスワードが設定されている場合、クラッキングが成功しない可能性も十分にあります。
- GPUの活用: John the Ripper は OpenCL や CUDA を利用してGPUによる高速なクラッキングをサポートしています。対応するハードウェアがあれば、
--format=android-fde-opencl
のような形式を指定することで、CPUよりも大幅に高速な解析が可能です(ただし、環境設定が必要です)。
重要な考慮事項と制限事項 🧐
- 法的・倫理的側面: 再度強調しますが、このツールは許可されたデータに対してのみ使用してください。不正アクセスは犯罪です。
- FDE 専用:
androidfde2john
は Android FDE (Full Disk Encryption) 専用です。Android 7.0以降で主流の FBE (File-Based Encryption) で暗号化されたデータには使用できません。FBEの解析には異なるツールや手法が必要です。 - Qualcomm チップセットの脆弱性 (過去の情報): 2016年頃、特定のQualcomm製チップセットを搭載したAndroidデバイスにおいて、FDEの実装に脆弱性が存在し、Android OSのカーネル権限を取得できれば、比較的容易に暗号化を破れる可能性があると報告されました。これは特定の条件下での問題であり、
androidfde2john
と John the Ripper を使ったパスワードクラッキングとは異なるアプローチです。 - ハードウェア支援暗号化: 一部のデバイスでは、暗号鍵の管理にハードウェア(例: TEE – Trusted Execution Environment, TrustZone)が利用されています。これにより、ソフトウェア的な手法だけでの鍵の抽出や解析がより困難になっている場合があります。
- イメージ取得の難易度: FDEが有効なデバイスから、解析に必要な
userdata
パーティションイメージを完全かつ破損なく取得すること自体が、技術的なハードルとなる場合があります。特に、デバイスがロックされている、root化されていない、あるいはブートローダーがロックされている場合などです。
まとめ ✨
androidfde2john
は、Android FDE (Full Disk Encryption) で暗号化されたパーティションイメージから、パスワードクラッキングに必要なハッシュ情報を抽出するための重要なツールです。John the Ripper スイートの一部として提供され、抽出されたハッシュは john
コマンドで解析することができます。
このツールを使用するには、John the Ripper本体、対象となるFDEイメージファイル、そしてPython環境が必要です。基本的な使い方は、androidfde2john.py
スクリプトにイメージファイルを引数として渡すだけですが、フッターの位置によっては追加のイメージファイルが必要になる場合もあります。
抽出したハッシュのクラッキングには John the Ripper を使用し、辞書攻撃やブルートフォース攻撃などの手法を試みますが、パスワードの強度によっては解析に膨大な時間がかかる、あるいは成功しない可能性もあります。
FDEは古いAndroidバージョンで使われていた技術であり、現代のデバイスではFBEが主流です。ツールの使用にあたっては、対象となるデバイスの暗号化方式を正確に把握し、常に法規制と倫理を遵守することが不可欠です。適切な知識と権限のもとで、セキュリティ研究やデータリカバリーに役立ててください。🚀
参考情報
- John the Ripper 公式サイト: https://www.openwall.com/john/ (ツールのダウンロードやドキュメント)
- Android Open Source Project – フルディスク暗号化: https://source.android.com/docs/security/features/encryption/full-disk?hl=ja (FDEの技術的な詳細)
- Android Open Source Project – ファイルベース暗号化: https://source.android.com/docs/security/features/encryption/file-based?hl=ja (FBEの技術的な詳細)
コメント