
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 バージョンを選択する必要があります。参考として、以下の表を使用できます。
| 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 |
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)
====================================