
BitCracker は、BitLocker で暗号化されたメモリユニット向けの初のオープンソースパスワードクラッキングツールです。
BitCracker は、BitLocker で暗号化されたストレージデバイス(ハードディスク、USB メモリ、SD カードなど)を対象とした、初のオープンソースパスワードクラッキングツールです。BitLocker は Windows Vista、7、8.1、10(Ultimate、Pro、Enterprise エディション)で利用可能な暗号化機能です。BitLocker は、Trusted Platform Module (TPM)、スマートカード、回復パスワード、ユーザー提供パスワードなど、ストレージデバイスを暗号化するためのいくつかの認証方法を提供します。
辞書攻撃により、BitCracker は正しいユーザーパスワードまたは回復パスワードを見つけ出し、暗号化されたストレージデバイスを復号しようとします。これは CUDA および OpenCL で実装されています。
いくつかのジャーナルが私たちの BitCracker 論文の出版を遅らせました(約3年、最終的には複数回の改訂後に却下)。この論文では、攻撃の詳細、BitLocker ドライブ暗号化 (BDE) ボリューム形式、および暗号化/復号手順における潜在的な弱点を説明しています。 最終的に、私たちは論文を https://arxiv.org/abs/1901.01337 に公開しました。コメントや共有を歓迎します。
BitCracker-CUDA を実行するための最小要件は以下の通りです。
BitCracker-OpenCL を実行するための最小要件は、OpenCL をサポートする任意の GPU または CPU です(一部のヘルプはこちらにあります)。
BitCracker には少なくとも 260 MB のデバイスメモリが必要です。
パフォーマンス上の理由から、CPU ではなく GPU で攻撃を実行することを強くお勧めします(パフォーマンスのセクションを参照)。
build.sh スクリプトを実行すると、build ディレクトリ内に4つの実行ファイルが生成されます: bitcracker_hash、bitcracker_rpgen、bitcracker_cuda、bitcracker_opencl。
NVIDIA GPU と CUDA バージョンに合わせて bitcracker_cuda をビルドするには、src_CUDA/Makefile を修正し、適切な SM バージョンを選択する必要があります。参考として、以下の表を使用できます。
BitLocker で暗号化されたストレージデバイスのイメージを作成する必要があります。例えば、dd コマンドを使用します。
sudo dd if=/dev/disk2 of=/path/to/imageEncrypted.img conv=noerror,sync
4030464+0 records in
4030464+0 records out
2063597568 bytes transferred in 292.749849 secs (7049013 bytes/sec)
次に、bitcracker_hash 実行ファイルを imageEncrypted.img に対して実行します。これにより以下のことを確認します。
実行が正常に完了すると、bitcracker_hash は1つまたは2つの出力ファイルを生成します。
BDE で暗号化されたボリュームは、認証方法によって異なる形式を持つ場合があります。bitcracker_hash が暗号化イメージ上の回復パスワードを見つけられない場合は、Issue を開くか、私に連絡してください。
例:
/build/bitcracker_hash -o test_hash -i ./Images/imgWin7
---------> BitCracker Hash Extractor <---------
Opening file ./Images/imgWin7
....
Signature found at 0x02208000
Version: 2 (Windows 7 or later)
VMK entry found at 0x022080bc
VMK encrypted with user password found!
VMK encrypted with AES-CCM
VMK entry found at 0x0220819c
VMK encrypted with Recovery key found!
VMK encrypted with AES-CCM
User Password hash:
$bitlocker$0$16$89a5bad722db4a729d3c7b9ee8e76a29$1048576$12$304a4ac192a2cf0103000000$60$24de9a6128e8f8ffb97ac72d21de40f63dbc44acf101e68ac0f7e52ecb1be4a8ee30ca1e69fbe98400707ba3977d5f09b14e388c885f312edc5c85c2
Recovery Key hash:
$bitlocker$2$16$8b7be4f7802275ffbdad3766c7f7fa4a$1048576$12$304a4ac192a2cf0106000000$60$6e72f6ef6ba688e72211b8cf8cc722affd308882965dc195f85614846f5eb7d9037d4d63bcc1d6e904f0030cf2e3a95b3e1067447b089b7467f86688
Output file for user password attack: "hash_user_pass.txt"
Output file for recovery password attack: "hash_recv_pass.txt"
このタイプの攻撃は、下図のようにストレージデバイスがユーザー提供のパスワードで暗号化されている場合に使用できます。
BitCracker は辞書攻撃を実行するため、可能性のあるユーザーパスワードのワードリストを提供する必要があります。
攻撃を開始するには以下が必要です。
hash_user_pass.txt ファイルコマンドラインの例:
./build/bitcracker_cuda -f hash_user_pass.txt -d wordlist.txt -t 1 -b 1 -g 0 -u
ここで:
-f : hash_user_pass.txt ファイルへのパス-d : ワードリストへのパス-t : 各 CUDA スレッドで処理するパスワードの数-b : CUDA ブロックの数-g : NVIDIA GPU デバイス ID-u : ユーザーパスワード攻撃を指定利用可能なすべてのオプションについては、./build/bitcracker_cuda -h と入力してください。
最高のパフォーマンスを得るには、パフォーマンス セクションの表を参照し、NVIDIA GPU に応じて t と b のオプションを適切に設定してください。
bitcracker_opencl 実行ファイルにも同じ考慮事項が当てはまります。
出力例:
====================================
Selected device: GPU Tesla K80 (ID: 0)
====================================
....
Reading hash file "hash_user_pass.txt"
$bitlocker$0$16$0a8b9d0655d3900e9f67280adc27b5d7$1048576$12$b0599ad6c6a1cf0103000000$60$c16658f54140b3d90be6de9e03b1fe90033a2c7df7127bcd16cb013cf778c12072142c484c9c291a496fc0ebd8c21c33b595a9c1587acfc6d8bb9663
====================================
Attack
====================================
Type of attack: User Password
CUDA Threads: 1024
CUDA Blocks: 1
Psw per thread: 1
Max Psw per kernel: 1024
Dictionary: wordlist.txt
Strict Check (-s): No
MAC Comparison (-m): No
CUDA Kernel execution:
Stream 0
Effective number psw: 12
Passwords Range:
abcdefshhf
.....
blablalbalbalbla12
Time: 28.651947 sec
Passwords x second: 0.42 pw/sec
================================================
....
Password found: paperino
================================================
現在、BitCracker は長さ8~55文字の入力パスワードを処理できます。
ストレージデバイスの暗号化中に、BitLocker は(認証方法に関係なく)ユーザーに回復パスワードをどこかに保存するよう求めます。これは、通常ドライブのロックを解除できない場合に暗号化ストレージデバイスへのアクセスを復元するために使用できます。 したがって、回復パスワードはすべての認証方法に対する一種の「パスポート」であり、次のような48桁のキーで構成されます。
236808-089419-192665-495704-618299-073414-538373-542366
詳細については Microsoft ドキュメント を参照してください。
ユーザーパスワードと同様に、BitCracker は辞書攻撃を実行して、ストレージデバイスを暗号化するために BitLocker によって生成された正しい回復パスワードを見つけることができます。現在、ストレージデバイスが TPM で暗号化されていない場合にのみ、回復パスワードを攻撃できることに注意してください。
攻撃を開始するには以下が必要です。
hash_recv_pass.txt ファイルすべての可能なパスワードを生成して保存するのは難しい問題です。そのため、私たちは bitcracker_rpgen という回復パスワード生成ツールを作成しました。このツールを使用すると、攻撃に使用できる複数の回復パスワードワードリストを作成できます。例:
./build/bitcracker_rpgen -n 300 -p 10000000 -s 000000-000011-000022-000033-000044-000055-008459-015180
これにより生成されます:
-n : ワードリストの数-p : ワードリストあたりの回復パスワード数-s : この回復パスワードから生成を開始オプションなしで実行すると、デフォルト構成を使用できます。
./build/bitcracker_rpgen
************* BitCracker Recovery Password wordlists generator *************
Running with this configuration:
### Create 100 wordlists
### Recovery Passwords per wordlist=5000000
### Allow duplicates=No
### Generate starting from=000000-000011-000022-000033-000044-000055-000066-000077
Creating wordlist "bitcracker_wlrp_0.txt" with 5000000 passwords
First password=000000-000011-000022-000033-000044-000055-000066-000077
Last password= 000000-000011-000022-000033-000044-000055-000902-217822
...
-s オプションを使用すると、最後に生成した回復パスワードから生成を再開できます(毎回最初から再開する代わりに)。
-d オプションを有効にすると、同じ回復パスワード内で重複を許可できます。例:
000000-000011-000055-000055-000044-000055-000902-217822
利用可能なすべてのオプションについては、./build/bitcracker_rpgen -h と入力してください。
注: 回復パスワードの可能な数は膨大です:
recovery password = 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536
私たちの調査によると、パスワードの分布は均一であり、「より確率の高い」数値を見つける方法はありません。これまでのところ、可能な候補の数を減らすためのルールは見つかっていません。つまり、回復パスワード攻撃は永遠に続く可能性があります(常にユーザーパスワード攻撃が優先されます)。近い将来、bitcracker_rpgen ツールを変更して、順序付きシーケンスではなくランダムな方法で回復パスワードを生成する予定です。
コマンドラインの例:
./build/bitcracker_cuda -f hash_recv_pass.txt -d bitcracker_wlrp_0.txt -t 1 -b 1 -g 0 -r
オプションはユーザーパスワードの場合と同じですが、-u の代わりに -r を指定する必要があります。出力例:
====================================
Selected device: GPU Tesla K80 (ID: 0)
====================================
...
Reading hash file "hash_recv_pass.txt"
$bitlocker$2$16$432dd19f37dd413a88552225628c8ae5$1048576$12$a0da3fc75f6cd30106000000$60$3e57c68216ef3d2b8139fdb0ec74254bdf453e688401e89b41cae7c250739a8b36edd4fe86a597b5823cf3e0f41c98f623b528960a4bee00c42131ef
====================================
Attack
====================================
Type of attack: Recovery Password
CUDA Threads: 1024
CUDA Blocks: 1
Psw per thread: 8
Max Psw per kernel: 8192
Dictionary: wordlist.txt
Strict Check (-s): No
MAC Comparison (-m): No
CUDA Kernel execution:
Effective passwords: 6014
Passwords Range:
390775-218680-136708-700645-433191-416240-153241-612216
.....
090134-625383-540826-613283-563497-710369-160182-661364
Time: 193.358937 sec
Passwords x second: 31.10 pw/sec
================================================
CUDA attack completed
Passwords evaluated: 6014
Password found: 111683-110022-683298-209352-468105-648483-571252-334455
================================================
デフォルトでは、BitCracker は高速攻撃(ユーザーパスワードおよび回復パスワードモードの両方)を実行しますが、これにより誤検知が発生する可能性があります。その場合は、-m オプションを指定して攻撃を再実行できます。これにより MAC 検証が有効になります(低速なソリューション)。
実際の攻撃を開始する前にシステムで BitCracker をテストするために、暗号化ストレージデバイスのいくつかのイメージを提供しています。
これらのイメージは、Dictionary フォルダに保存されているワードリストを使用して、ユーザーパスワードモードと回復パスワードモードの両方で攻撃できます。
以下に、高速攻撃(デフォルト)のユーザーパスワード (-u オプション) における最良の BitCracker パフォーマンスを示します。
パフォーマンス:
N.B. 各パスワードには約 2.097.152 SHA-256 が必要です
BitCracker を John The Ripper の OpenCL-BitLocker フォーマットとしてリリースしました (--format=bitlocker-opencl)。
bitcracker_hash によって生成されたハッシュファイル(How To セクションを参照)は、John フォーマットと完全に互換性があります。
GTV100 では、パスワードレートは約 3150p/s です。JtR チームはこの攻撃の CPU バージョン (--format=bitlocker) を開発しました。CPU Intel(R) Xeon(R) v4 2.20GHz では、パスワードレートは約 78p/s です。
これは作業中のものです...
2021年11月: CUDA 11.x を使用して NVIDIA GPU Ampere で実行するようにコードを更新
私たちのプロジェクトを共有し、テストしてください。フィードバックが必要です!
John The Ripper チーム、Dislocker および LibBDE プロジェクトに特に感謝します。
これは、イタリア国立研究評議会との共同研究プロジェクトであり、GPLv2 ライセンスでリリースされています。
Copyright (C) 2013-2021 Elena Ago (elena dot ago at gmail dot com) および Massimo Bernaschi (massimo dot bernaschi at gmail dot com)
今後の論文で BitCracker の攻撃に関する追加情報を提供する予定です。
GPLv2 ライセンスを使用していますが、コラボレーションにはオープンです。 追加情報、コラボレーション、バグ報告については、お問い合わせいただくか、Issue を開いてください。
| GPU アーキテクチャ | 推奨 CUDA | Makefile 設定 |
|---|
| Kepler | CUDA 7.5 | arch=compute_35,code=sm_35 |
| Maxwell | CUDA 8.0 | arch=compute_52,code=sm_52 |
| Pascal | CUDA 9.0 | arch=compute_60,code=sm_60 |
| Volta | CUDA 9.0 | arch=compute_70,code=sm_70 |
| GPU 略称 | GPU | アーキテクチャ | CC | # SM | クロック | CUDA |
|---|
| GFT | GeForce Titan | Kepler | 3.5 | 14 | 835 | 7.0 |
| GTK80 | Tesla K80 | Kepler | 3.5 | 13 | 875 | 7.5 |
| GFTX | GeForce Titan X | Maxwell | 5.2 | 24 | 1001 | 7.5 |
| GTP100 | Tesla P100 | Pascal | 6.1 | 56 | 1328 | 8.0 |
| GTV100 | Tesla V100 | Volta | 7.0 | 80 | 1290 | 9.0 |
| AMDM | Radeon Malta | - | - | - | - | - |
| バージョン | GPU | -t | -b | パスワード/カーネル | パスワード/秒 | ハッシュ/秒 |
|---|
| CUDA | GFT | 8 | 13 | 106.496 | 303 | 635 MH/s |
| CUDA | GTK80 | 8 | 14 | 114.688 | 370 | 775 MH/s |
| CUDA | GFTX | 8 | 24 | 106.608 | 933 | 1.957 MH/s |
| CUDA | GTP100 | 1 | 56 | 57.344 | 1.418 | 2.973 MH/s |
| CUDA | GTV100 | 1 | 80 | 81.920 | 3.252 | 6.820 MH/s |
| OpenCL | AMDM | 32 | 64 | 524.288 | 241 | 505 MH/s |
| OpenCL | GFTX | 8 | 24 | 196.608 | 884 | 1.853 MH/s |