BitCrackerは、BitLockerで暗号化されたストレージデバイス(ハードディスク、USBペンドライブ、SDカードなど)の最初のオープンソースパスワードクラッキングツールです。エディション)。 BitLockerは、信頼できるプラットフォームモジュール(TPM)、スマートカード、回復パスワード、ユーザーが提供するパスワードなどのストレージデバイスを暗号化するためのさまざまな認証方法を提供しています。
辞書攻撃により、BitCrackerは、暗号化されたストレージデバイスを復号化するために、正しいユーザーパスワードまたは回復パスワードを見つけようとします。 CUDAとOpenCLに実装されています。
いくつかのジャーナルは、攻撃の詳細、いくつかの改訂後の最終的な拒否で、ビットクラッカーペーパーの公開(ほぼ3年、最終的な拒否)を遅らせました。最後に、ここで論文を公開しました:https://arxiv.org/abs/1901.01337。お気軽にコメントして共有してください。
BitCracker-Cudaを実行するには、最小限の要件が次のとおりです。
BitCracker-Openclを実行するには、最小限の要件がGPUまたはCPUをサポートするOpenCLをサポートしています(ここでヘルプを見つけることができます。
BitCrackerには、少なくとも260 MBのデバイスメモリが必要です。
パフォーマンス上の理由から、CPUではなくGPUに対する攻撃を実行することを強くお勧めします(セクションのパフォーマンスを参照)。
build.sh
スクリプトを実行すると、 build
ディレクトリ内で4つの実行可能ファイルが生成されます: bitcracker_hash
、 bitcracker_rpgen
、 bitcracker_cuda
、 bitcracker_opencl
。
NVIDIA GPUおよびCUDAバージョンでbitcracker_cuda
首尾一貫して構築するには、正しいSMバージョンを変更するsrc_CUDA/Makefile
を変更する必要があります。参照として、次の表を使用できます。
GPUアーキテクチャ | 提案されたcuda | makefile |
---|---|---|
ケプラー | CUDA 7.5 | arch = compute_35、code = sm_35 |
マックスウェル | CUDA 8.0 | arch = compute_52、code = sm_52 |
パスカル | CUDA 9.0 | arch = compute_60、code = sm_60 |
Volta | CUDA 9.0 | arch = compute_70、code = sm_70 |
たとえば、 DDコマンドを使用して、BitLockerで暗号化されたストレージデバイスの画像を作成する必要があります。
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
暗号化された画像で回復パスワードを見つけることができない場合は、問題を開くか、私に連絡してください
例:
/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は、ドライブのロックを解除できない場合に暗号化されたストレージデバイスへのアクセスを復元するために使用できるリカバリパスワードをユーザーに保存するよう求めます。通常。したがって、回復パスワードは、すべての認証方法の一種のPasseパートアウトであり、次のような48桁のキーで構成されています。
236808-089419-192665-495704-618299-073414-538373-542366
詳細については、Microsoft Docsを参照してください。
ユーザーのパスワードに関しては、BitCrackerは辞書攻撃を実行して、BitLockerによって生成された正しい回復パスワードを見つけてストレージデバイスを暗号化できます。現在、ストレージデバイスがTPMで暗号化されていない場合にのみ、回復パスワードを攻撃できることに注意してください。
必要な攻撃を開始するには:
hash_recv_pass.txt
ファイルすべての可能性のあるパスワードを生成して保存することは難しい問題です。このため、 bitcracker_rpgen
という名前の回復パスワードジェネレーターを作成しました。このツールを使用すると、攻撃に使用できるRecovery Passwordsワードリストの束を作成できます。例として:
./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
私たちの調査によると、パスワードの分布は均一であり、「より可能性の高い」数字を見つける方法はありません。これまでのところ、候補者の量を減らすためのルールは見つかりませんでした。これは、回復パスワード攻撃が永遠に取られる可能性があることを意味します(ユーザーPassWod攻撃は常に推奨されるものです)。まもなく、 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はFAST攻撃(ユーザーと回復の両方のパスワードモードに対して)を行い、誤検知を返す可能性があります。この場合、MAC検証を可能にする-m
オプション(遅いソリューション)で攻撃を再実行できます。
実際の攻撃を開始する前にシステムでビットクラッカーをテストするために、暗号化されたストレージデバイスの画像をいくつか提供しました。
Dictionary
フォルダーに保存されているWordListsを使用して、ユーザーと回復の両方のパスワードモードでこれらの画像を攻撃できます。
ここでは、ユーザーパスワード(-Uオプション)に高速攻撃(デフォルト)の場合に最高のビットクラッカーパフォーマンスを報告します。
GPUアクロニム | GPU | アーチ | CC | #SM | クロック | cuda |
---|---|---|---|---|---|---|
gft | Geforce Titan | ケプラー | 3.5 | 14 | 835 | 7.0 |
GTK80 | テスラK80 | ケプラー | 3.5 | 13 | 875 | 7.5 |
gftx | GeForce Titan X | マックスウェル | 5.2 | 24 | 1001 | 7.5 |
GTP100 | テスラP100 | パスカル | 6.1 | 56 | 1328 | 8.0 |
GTV100 | テスラV100 | Volta | 7.0 | 80 | 1290 | 9.0 |
AMDM | ラデオン・マルタ | - | - | - | - | - |
パフォーマンス:
バージョン | GPU | -t | -b | パスワードxカーネル | パスワード/秒 | ハッシュ/秒 |
---|---|---|---|---|---|---|
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 |
NB各パスワードには約2.097.152 SHA-256が必要です
John the Ripper( --format=bitlocker-opencl
)のOpenCL-BitLocker形式としてBitCrackerをリリースしました。 bitcracker_hash
によって生成されたハッシュファイル(セクションの方法を参照)は、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アンペアで実行するためにコードが更新されました
私たちのプロジェクトを共有してテストする:あなたのフィードバックが必要です!
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ライセンスは使用していますが、コラボレーションを受け入れています。追加情報、コラボレーション、またはバグレポートについては、お問い合わせいただくか、問題を開いてください