BitCracker是第一個用於存儲設備的開源密碼破解工具(硬盤,USB Pendrive,SD卡等),該工具使用BitLocker加密,Windows Vista上可用的加密功能,7、8.1和10(Ultimate,Pro,Pro和Enterprise)版本)。 Bitlocker提供了許多不同的身份驗證方法來加密諸如受信任平台模塊(TPM),智能卡,恢復密碼,用戶提供的密碼之類的存儲設備。
通過字典攻擊,BitCracker試圖找到正確的用戶密碼或恢復密碼來解密加密的存儲設備。它已在Cuda和Opencl中實施。
幾本期刊推遲了我們的BitCracker紙的發布(將近3年,經過了幾次修訂後的最終拒絕),其中解釋了我們攻擊的細節,Bitlocker驅動器加密(BDE)音量格式以及加密/解密過程中可能存在的弱點。最後,我們在此處發表了論文:https://arxiv.org/abs/1901.01337。請隨時發表評論和分享。
要運行BitCracker-Cuda,最小要求是:
為了運行BitCracker-Opencl,最少的要求是任何支持OPENCL的GPU或CPU(您可以在此處找到一些幫助。
BitCracker需要至少260 MB的設備內存。
出於績效原因,我們強烈建議您對GPU而不是CPU進行攻擊(請參見部分錶現)。
運行build.sh
腳本在build
目錄中生成4個可執行文件: bitcracker_hash
, bitcracker_rpgen
, bitcracker_cuda
, bitcracker_opencl
。
為了與您的NVIDIA GPU和CUDA版本相干地構建bitcracker_cuda
,您需要修改src_CUDA/Makefile
選擇正確的SM版本。作為參考,您可以使用下表:
GPU架構 | 建議的庫達 | makefile |
---|---|---|
開普勒 | CUDA 7.5 | Arch = Compute_35,代碼= SM_35 |
麥克斯韋 | CUDA 8.0 | Arch = Compute_52,代碼= SM_52 |
帕斯卡 | CUDA 9.0 | Arch = Compute_60,代碼= SM_60 |
Volta | CUDA 9.0 | Arch = Compute_70,代碼= 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)
然後,您需要在imageEncrypted.img
上運行bitcracker_hash
可執行文件以:
如果執行正確完成, 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個字符的長度的輸入密碼。
在加密存儲設備(無論使用身份驗證方法)期間通常情況下。因此,恢復密碼是所有身份驗證方法的一種PASSE-PARTOUT ,它由這樣的48位密鑰組成:
236808-089419-192665-495704-618299-073414-538373-542366
有關更多詳細信息,請參見Microsoft文檔。
至於用戶密碼,BitCracker能夠執行字典攻擊,以找到Bitlocker生成的正確恢復密碼來加密存儲設備。請注意,當前我們只有在未使用TPM加密的存儲設備時才能攻擊恢復密碼。
要開始攻擊您需要:
hash_recv_pass.txt
文件生成並存儲所有可能的密碼,這是一個難題。因此,我們創建了一個名為bitcracker_rpgen
的恢復密碼生成器。使用此工具,您可以創建一堆恢復密碼WordLists,可以用於攻擊。例如:
./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進行了快速攻擊(對於用戶和恢復密碼模式),這可能會返回一些假陽性。在這種情況下,您可以使用啟用MAC驗證的-m
選項重新運行攻擊(較慢的解決方案)。
為了在開始真正的攻擊之前測試系統上的BitCracker,我們提供了幾張加密存儲設備的圖像。
您可以使用存儲在Dictionary
文件夾中的WordLists使用用戶和恢復密碼模式攻擊這些圖像。
在這裡,我們將快速攻擊(默認值)(-u選項)報告最好的BitCracker表演。
GPU Acronim | GPU | 拱 | CC | #SM | 鐘 | 庫達 |
---|---|---|---|---|---|---|
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內核 | 密碼/秒 | 哈希/秒 |
---|---|---|---|---|---|---|
庫達 | GFT | 8 | 13 | 106.496 | 303 | 635 MH/s |
庫達 | GTK80 | 8 | 14 | 114.688 | 370 | 775 MH/s |
庫達 | GFTX | 8 | 24 | 106.608 | 933 | 1.957 MH/s |
庫達 | GTP100 | 1 | 56 | 57.344 | 1.418 | 2.973 MH/s |
庫達 | 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
我們在開膛手約翰( --format=bitlocker-opencl
)中發布了BitCracker為Opencl-Bitlocker格式。 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安培上運行的代碼更新了
PLASE共享並測試我們的項目:我們需要您的反饋!
特別感謝Ripper團隊,Dislocker和Libbde項目。
這是一個與意大利國家研究委員會合作的研究項目,該委員會根據GPLV2許可發布。
版權(C)2013-2021 Elena前(Elena Dot of at Gmail dot com)和Massimo Bernaschi(Massimo Dot Bernaschi在Gmail dot com)
我們將在將來的論文中提供有關BitCracker攻擊的一些其他信息。
儘管我們使用GPLV2許可證,但我們願意進行協作。有關任何其他信息,協作或錯誤報告,請與我們聯繫或打開問題