破解密碼利器 – Hashcat+GPU 大幅超越CPU破解方式

這算是第三篇 (前兩篇 這裡這裡) 跟破解密碼有關的文章了,可能也研究出興趣來了。用 CPU 破解密碼算是比較高級的做法,現在流行的是用顯卡,也就是 GPU 來做這事。 GPU 的速度因其架構的優勢,在破密碼、做科學運算有很廣泛的應用和很好的效率。本篇我們要介紹的就是用這套 Hashcat,配合上 NVIDIA 顯卡來做密碼的破解。

NVIDIA CUDA

人工智慧現在火紅大家都知道,有一大部份都是用顯卡來運算執行。Nvidia 的 GPU 運算技術稱為 CUDA,而我們使用的 Hashcat 可以很好的跟 Nvidia 顯卡做配合。除了 Nvidia 的顯卡外, Hashcat 也支援 Intel / AMD 的 GPU。

Nvidia 的顯卡只需要安裝官方驅動即可,已經內含GPU運算工具了。記得要使用官方下載的,不要用 Windows 內建的。

驅動程式需求

本文所使用的顯卡是 NVIDIA GeForce GTX 650 Ti,這是張蠻舊的卡了,但比起 CPU 運算,速度硬是快上了很多。

驅動程式下載安裝

請上官網下載,選擇適合自己的顯卡與作業系統,下載後安裝即可。

選擇適合自己的下載條件

550MB! 肥滋滋的一包

Hashcat 下載

Hashcat 程式請至其官網下載,檔案包含了 Windows 32/64、Linux  32/64 版的工具,一包打死。

下載頁面

包含 Linux / Windows 32bits與64bits 執行檔

Hashcat 破解密碼原理

這部份是我自己推敲的,有錯還請指正。一般壓縮檔加密時,會把密碼的Hash(雜湊值)存在檔案內。這樣在解壓縮時,把使用者輸入的密碼也轉成Hash值,比較兩者就可以知道輸入的密碼對不對,以提供使用者比較好的操作體驗。

也許有人會想,解壓縮完使用者自己就會知道知道對不對。如果要解壓縮的檔案是好幾Gigabyte,解完才說解錯了,似忽有點不好用。或者忘記了,要試好幾次,這樣每次解壓個好幾GB,變的有點不友善。因此,快速驗証密碼的機制,還是有需求。

Hash 是把數值A經過一翻計算後,轉換成B,而從B並沒有快速的的辦法能推導出A。若要找出A,只能把所有的可能性都經過轉換,再跟B比較看看,才有法找出A來。

而把加密檔的B找出來,並算出A,就是這個破解的過程,一般就是用窮舉法。

這機制就是不安全!

把密碼HASH放在檔案裡聽起來,就是給人攻擊的機會。但在已前科技沒這麼強之前,要找出 HASH 的原始值是件很困難的事,動輒要幾千幾萬年的。但誰也沒料想到,科技進步太快,現在的 PC 一秒可以算出 400萬個 MD5 Hash,而顯卡一秒可算出上千億個,這都是以前難以想像的。

好在,更複雜的 HASH 方式已經被提出了,顯卡相對於CPU算密碼還是快,但也是變成每秒上千個而已,難度相差了一億倍。在可預見的未來,這個加密檔的存取方式應該還會是如此。

那加密檔還能破嗎

制度沒問題,有問題的是人!」一般人還是在用不安全的加密方式,或者用一些很簡單的密碼。所以,破解總是有些機會的,只是「能破,是賺到。不能破,是正常的」。

 

Hashcat 使用

本文是使用 64 bit 的版本,也就是 hashcat64.exe。若你是用 32bit 的 Windows,請執行 hastcat32.exe。

Hashcat 支援非常多種的 hash 計算,可以下達 hashcat –help 就可看到非常完整的列表。一般比較常用的包括 MD5, WinZIP, 7-Zip, RAR, PDF 都有支援。個人會用到的是 MD5 和 WinZIP 的部份,在本文中會舉例如何使用。而 HASH 字串所要求的格式,也可以參考這裡

支援的 HASH 算法截錄

效能測試

在實際使用前,可以透過程式提供的 benchmark 功能,看看各種解碼的速度,來評估是否有”希望“可以破解出來。如果速度太慢,就別抱太大的期望了。測試命令的格式如下。主要就是 -b 參數指定要進行效能測試,而 -m 參數指定要測的 HASH 種類。 0 為 MD5, 13600 則是 ZIP 檔用 AES 加密時的所用的方式。

 

MD5 測試

MD5 在以往是種常用的 HASH 方法,用在Linux上密碼的儲存 。但這種太好破的HASH現在已比較少用了,從測試結果來看,一秒可以執行 1469M 次,也就是 14億次。

 

WinZIP 測試

在 破解 ZIP 密碼 – John the Ripper 這篇裡面有提到,用 AES 加密的密碼很難破解,當時用 CPU 一秒只能算出 8000 個左右。而在這裡用顯卡來算,可以得到每秒 65000 個。速度增加了8倍,算是有效的提升了速度。

 

WinZIP AES 加密實測

講這麼多,還是要來實測一下密碼恢復。有用才有用~~~

為了取得 AES 加密ZIP檔的 HASH,我們需要透過一個叫 zip2john 的程式來取得。這支程式在 破解 ZIP 密碼 – John the Ripper 這篇文章裡面也有用到,但是當時使用的版本比較舊,產生出的 HASH 檔無法給 hashcat 使用。因此,需要下載最新的測試版本。最新的版本,請在這裡下載 。

新版 JtR 下載

假設解壓縮在 D:\JtR_Custom,所需要的執行檔會位於 D:\JtR_Custom\run下。

取得 ZIP 檔 HASH 值

我們把已AES加密過的zip檔,也放置在 D:\JtR_Custom\run,並命名為 test.zip。然後用以下命令,來產生 hash 檔案。

這個 hash 是個很長的內容,跟官網所指定的格式不太一樣。不過沒關係,實測後是可以使用的。

AES ZIP HASH 內容

開始用 HASHCAT 破解 HASH

有了 HASH 檔後,就可以使用下列命令破解了。這個檔案的加密密碼是 123456,即使這麼簡單的密碼,用暴力法破解也是難以破解,最差的情況下要24天才能破解。

參數 -a 3 是指定用暴力法破解, -m 13600 如之前講過的,是指定要算 AES ZIP的 Hash。最後一個參數則是儲存 Hash 的檔案位置。

然後畫面上就會顯示,破解的進度。

Hashcat 破解進度

比較有用的訊息是

  1. Guest Mask: 直接看最後的[4],它正在用暴力法破解4位數以內的密碼。前面那些問號,是指每個字元的類型(數字, 大小寫英文…)。
  2. Speed: 每秒破解的速度。 這裡是 57661 H/s,也就是每秒破解 57661 個 Hash。
  3. Progress: 這僅是參考用,應該是指目前 MASK 下還要多久完成。沒破解成功,就要進行更多字數的嚐試。

指定破解字元

如果我們已經知道可能的密碼類型,可以直接指定要嚐試的內容。以我們的例子,知道是六位數的數字密碼,就可以直接指定嚐試數字就好。

字元類型



上面的例子 “?d?d?d?d?d?d” 就是指定用六個數字,123456的密碼,在3秒內就能破解。

破解後的訊息

密碼若被順利破解,會先印出HASH值,最後會接著對應的密碼,Status 也會變成 “Cracked”。這時若要再破解一次,則會叫你直接用 “–show” 來顯示結果。可以把 “hashcat.potfile” 檔案刪除,就可以重來再破一次

利用字典檔破解

hashcat 當然也支援使用字典檔破解,把最後的參數加入字典檔的路徑即可。這裡我們直接使用 John the Ripper 提供的字典檔,123456 是統計最熱門的密碼,當然也有在字典檔裡。

若要使用更大的字典檔,可以參考 壓縮檔密碼恢復好工具 – 公用字典檔 裡的字典檔。裡面有15億組密碼,使用顯卡約7小時可以試完所有的字。

結語

GPU 對破解速度的幫助,是顯而易見的。如果你本錢夠厚,如這篇文章 8 張 NVIDIA GTX 1080,可以達到本篇文章所用的 GTX 650Ti 144 倍的速度 (以MD5為比較基礎)。至於要不要花這麼多錢去搞個效能怪獸,就看資料對你重不重要了。

還有一點很遺憾的, hashcat 並不支援傳統的 ZipCrypto 加密方式,不然破解速度的增加,肯定是相當驚人的。

Latest Comments

  1. jiuweiljp 2019-05-13
    • 蔡可彼 2019-05-13
      • jiuweiljp 2019-05-13

Leave a Reply