小編給大家分享一下在多GPU系統上如何使用hashcat進行密碼破解,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
就在幾天前我針對Linux服務器池做了一次滲透測試,在我執行這項任務的時候我就知道在這些服務器上存在很大的密碼重用概率。我設法獲取其中一個服務器上的shell并通過使用privesc內核漏洞來取得root權限,然后我就能夠完全的控制這臺服務器。而對于其他的服務器,由于我知道密碼可能會被重復使用,因此我只要利用已獲取的root訪問權限來提取/etc/shadow文件就很有可能將它們一舉拿下。
/etc/shadow文件是用于存放用戶帳戶及其密碼的以密文形式存儲使用多種哈希算法之一。每次用戶使用其密碼登錄時系統都會檢查該帳戶使用的哈希算法并對用戶輸入的密碼執行哈希操作然后將輸出與影子文件中的存儲值進行比較如果結果是相同的則用戶帳戶驗證成功并允許登錄操作
所以我現在要做的第一步是分析我剛剛恢復的影子文件中存儲密碼的加密哈希類型。
在類Linux的系統上你可以通過查看以下文件來了解用于密碼散列常用的算法
/etc/pam.d/common-password
這里我們可以看到散列算法為sha512。我們也可以通過直接查看存儲在影子文件中的散列來識別其使用的散列算法。
例如
在該文件中我們在哈希的開頭看到一個$6的符號。該符號標識用于生成它的散列算法。根據所使用的算法$符號的數字可以從1到6。
另外從該行我們還可以獲取到其他一些信息例如算法的選項鹽最后是散列密碼如下圖所示
這里真正與我們相關的是其算法和散列密碼。salt是用于生成散列的隨機字符串因此它可以防止諸如彩虹表之類的攻擊。其他幾個選項也可以在文件中找到我建議你在這里學習更多關于它們的知識。下面我們將繼續進行密碼破解的過程因為文件中的其他選項/參數與密碼破解無關。
這里要注意的一個主要問題是散列算法因為根據所使用的散列算法我們可能會花費不同的時間來破解密碼但并不是越高級的算法就一定意味著破解效率就低。
$1 = MD5 hashing algorithm. $2 =Blowfish Algorithm. $2a =eksblowfish Algorithm $5 =SHA-256 Algorithm $6 =SHA-512 Algorithm
正如你看到的數字越大就意味著散列算法越高級。但這并不意味著使用越高級的散列算法哈希就越難被破解。但請注意例如MD5是一種已過時的哈希算法通過碰撞攻擊就可以輕易的破解出它但對于sha算法碰撞攻擊就會困難許多。
一個針對影子文件密碼破解的標準攻擊是檢測哈希算法然后根據某些字符組合生成一組哈希并將它們中的每一個與我們希望破解的哈希進行比較以查看是否匹配如果匹配則破解成功。
像john the ripper或hashcat這些破解程序基本上就是這么做的他們會先分析這些哈希然后對其發起某種暴力攻擊以獲取密碼。算法很容易理解我們生成一個candite然后根據散列值對其進行測試如果它們不匹配那么我們重復這個過程。如果我們將字典分成2個相同的文件將它們發送到一個單獨的處理器我們可以將攻擊的速度提升兩倍如果我們有更多的CPU我們就可以加速n倍
但如果你考慮哈希生成和比較操作的本質并結合你的實際經驗你會發現通過GPU進行的并行化破解操作可以獲得比基于CPU的破解更好的結果。
為什么
因為GPU具有成百上千個核非常適合執行這些操作。以下我引用Thomas Pornin的解釋
GPU通過使用成百上千個核的大量并行性來實現其卓越的性能。這可以通過流水線操作實現每個單獨的操作需要多個周期才能運行但是連續操作可以像高速公路上的卡車一樣啟動并共享指令解碼因為許多核將同時運行相同的指令。
而hashcat可以使用一個或多個GPU的強大功能來破解許多不同的密碼哈希值。
因此我決定使用多個GPU和帶有hashcat程序的linux操作系統構建一個專門的破解站。
在本文中我將使用以下文件進行一系列的演示
shadow2點擊下載
[...] user3122:$1$FxueP4SH$Fn5lpvorz.XGJ0.aNjPs9/:14968:0:99999:7 user6105:$1$GTMXpwtl$nDHwFc7bNPNh6Z0R6Xn2D1:16813:0:99999:7 user7255:$1$HUu26aGL$AC8YVXyqHmAhkQcXzWwze.:14524:0:99999:7 user8167:$1$Y8JtHBbU$EQvnJ3eu14rLvBfvWhCmJ0:15999:0:99999:7 user9880:$1$WuZBV4XE$p95fTpYm4qYrvyFo1QZlg.:15566:0:99999:7 user3133:$1$cx.Ctgl.$2kV5bIfTfanzowVCOQVJ8/:14383:0:99999:7 user6859:$1$YjpXADgu$SZpQEmQ4dsdMMZtQ0vgen0:17338:0:99999:7 user9180:$1$CabG48K.$uP4nUqVpfqlX3.hxm27R/.:17271:0:99999:7 user1795:$1$7uWjhHle$V5S0g0RlNMqxwUNw4PeRy/:15913:0:99999:7 user4566:$1$iTcKPKG/$96bYX9pEx7Exqq66W2NrY1:15279:0:99999:7 user6653:$1$XMY2RA1c$k0zPPbRfjm3kOU3i4FRo0.:15257:0:99999:7 [...]
該文件包含500多個MD5哈希密碼
下面的文件則包含了一個SHA512哈希密碼
single點擊下載
$6$fQsjcwyB$N/HCQx9xohBVqkqAQFhVpkg2Bp3Ki51MMZPED4CQ9e/FLx0yRwnMVoaPcY7UtZJAlXjMrUgflazaspzvClaUX.
我們將使用這些文件稍微測試一下hashcat檢查它的性能并了解它的基本原理。
經過我和團隊的考慮構建一個破解站大致需要以下組件
主板Asus H170 Pro Gaming
CPUCeleron G3900
內存Kingston ValueRAM DDR4 2133 PC4-17000 4GB CL15
硬盤Seagate Barracuda 500GB 7.2 rpm
GPU6x AMD RX580
電源Seasonic SSR-850PX
總費用大概需要1650 歐
以上安裝完成后我們決定安裝ubuntu 18.04作為操作系統。Ubuntu附帶了一些標準的視頻驅動程序但為了能夠釋放我們GPU的全部功能我們需要下載并安裝其專有的驅動程序。你可以在這里找到它們。
安裝驅動程序后剩下的就是下載hashcat程序。
下載hashcat后我們可以通過簡單運行它的主二進制文件來執行它。這里我為hashcat創建了一個別名并指向/fullpath/hashcat64.bin。
你可以使用許多不同的參數從命令行運行Hashcat。首先讓我們使用“-I”選項來檢查我們的設置如果我們已正確安裝了GPU我們應該能夠看到它們并會為我們列出其屬性和使用的驅動程序信息。
root@Hassium:/# hashcat -I hashcat (v5.1.0) starting... OpenCL Info: Platform ID #1 Vendor : Advanced Micro Devices, Inc. Name : AMD Accelerated Parallel Processing Version : OpenCL 2.1 AMD-APP (2766.4) Device ID #1 Type : GPU Vendor ID : 1 Vendor : Advanced Micro Devices, Inc. Name : Ellesmere Version : OpenCL 1.2 AMD-APP (2766.4) Processor(s) : 36 Clock : 1411 Memory : 4048/7867 MB allocatable OpenCL Version : OpenCL C 1.2 Driver Version : 2766.4 Device ID #2 Type : GPU Vendor ID : 1 Vendor : Advanced Micro Devices, Inc. Name : Ellesmere Version : OpenCL 1.2 AMD-APP (2766.4) Processor(s) : 36 Clock : 1340 Memory : 4048/8155 MB allocatable OpenCL Version : OpenCL C 1.2 Driver Version : 2766.4 Device ID #3 Type : GPU Vendor ID : 1 Vendor : Advanced Micro Devices, Inc. Name : Ellesmere Version : OpenCL 1.2 AMD-APP (2766.4) Processor(s) : 36 Clock : 1411 Memory : 4048/8155 MB allocatable OpenCL Version : OpenCL C 1.2 Driver Version : 2766.4 Device ID #4 Type : GPU Vendor ID : 1 Vendor : Advanced Micro Devices, Inc. Name : Ellesmere Version : OpenCL 1.2 AMD-APP (2766.4) Processor(s) : 36 Clock : 1411 Memory : 4048/8155 MB allocatable OpenCL Version : OpenCL C 1.2 Driver Version : 2766.4 Device ID #5 Type : GPU Vendor ID : 1 Vendor : Advanced Micro Devices, Inc. Name : Ellesmere Version : OpenCL 1.2 AMD-APP (2766.4) Processor(s) : 36 Clock : 1411 Memory : 4048/8155 MB allocatable OpenCL Version : OpenCL C 1.2 Driver Version : 2766.4 Device ID #6 Type : GPU Vendor ID : 1 Vendor : Advanced Micro Devices, Inc. Name : Ellesmere Version : OpenCL 1.2 AMD-APP (2766.4) Processor(s) : 36 Clock : 1411 Memory : 4048/8155 MB allocatable OpenCL Version : OpenCL C 1.2 Driver Version : 2766.4 root@Hassium:/#
可以看到檢測結果一切正?!,F在我們就可以利用它們來破解哈希了。
hashcat -b -D 1,2
這將對我們的系統進行基準測試包括CPU和所有的GPU。
字典攻擊是最簡單和最容易理解的。在字典攻擊中我們使用一個包含多個潛在密碼的字典文件我們對其中的每一個進行哈希處理并將其與要破解的散列進行比較。
在該場景中hashcat可以將字典分成N個部分并將每個部分轉發給一個GPU這樣就可以并行處理多個字典文件并大大提升我們的破解速度。
密碼字典里包括許多人們習慣性設置的密碼這樣可以提高密碼破譯軟件的密碼破譯成功率和命中率縮短密碼破譯的時間。
以下是一些密碼字典的使用建議:
在針對未知目標的大規模攻擊時可以使用一些最常見的密碼字典進行攻擊。
從SN數據庫泄露的密碼字典在大規模和有針對性的攻擊中非常有用因為我們很有可能會在某些SN中找到我們的目標。
定制的字典根據目標的愛好個性特征等這樣的字典非常適用于有針對性的攻擊。
使用字典進行散列破解的命令如下
hashcat -a 0 -m 1800 hashes1.txt dic_eng.txt
-a參數是指定攻擊模式0代表Straight模式使用字典進行破解嘗試-m參數是告訴hashcat解密的Hash類型1800則是指SHA-512(Unix)類型密碼最后是準備的密碼字典文件。
你可以在這里找到一些比較好用的字典
讓我們針對我們的single.txt哈希文件嘗試這種攻擊方案。
hashcat64.bin -a 0 -m 1800 /hashes/single.txt /dicts/rockyou-75.txt cat hashcat.potfile
Started: Mon Apr 15 19:19:15 2019 [2K Stopped: Mon Apr 15 19:19:44 2019
可以看到從19:19:15 到 19:19:44之并沒有任何結果。
讓我們用shadow2.txt文件試一下
echo "" > /home/cherrysan/hashcat-5.1.0/hashcat.potfile /home/cherrysan/hashcat-5.1.0/hashcat64.bin -a 0 -m 500 /hashes/shadow2 /dicts/dic_eng.txt cat /home/cherrysan/hashcat-5.1.0/hashcat.potfile date Started: Mon Apr 15 19:59:40 2019 [2K Stopped: Mon Apr 15 20:03:13 2019
同樣也沒有任何的結果。
相較于單個字典文件的攻擊組合攻擊的優勢在于它們可以使用兩個文件組合來創建新的單詞然后使用它們生成哈希并執行攻擊。
hashcat -a 1 -m 1800 hashes2.txt english_names.txt years.txt
例如在我們的例子中我們可以將common_english_names字典中的所有單詞與1900年到2018年的所有年份組合在一起這將產生如下組合
james1999 john1982 maria1978 [...]
這將非常有用因為很多人傾向于使用諸如nameYear之類的密碼特別是當他們注冊的頁面/系統要求使用字母數字的組合密碼時。
讓我們再次針對我們的single.txt哈希文件嘗試這種攻擊方案。
hashcat64.bin -a 1 -m 500 /hashes/shadow2 /dicts/noms_sense_accents.txt /dicts/anys.txt cat hashcat.potfile date Started: Mon Apr 15 20:03:13 2019 [2K Stopped: Mon Apr 15 20:23:15 2019 $1$B15.1/Vy$wF4/SG.DtqdYhSPwge4gf.:Joan1995 $1$ssG4kpwe$knWPdtFJ7S2YrtxMd.lcI.:Lluis1999 $1$dha8Ks6T$8YMKv7.bxz0SXMa1dpUZG.:Laura2008 $1$LXoiQGrz$JGh7n4IrXgpW/jspXye3m/:Eduard1986 $1$zqmt75IJ$8iWYtnAczWg0AfVPir1A0.:Xavier2013
可以看到密碼被成功破解了出來
如果我們運氣不好密碼字典種并不包含目標的密碼那么破解程序仍會對哈希進行爆破攻擊生成所有字符組合并一個接一個地測試它們。例如:
a b c d [...]
然后是
[...] aa bb ab cc c1 [...]
直到找到密碼或達到死點。
這將非常的繁瑣和耗時。如果我們知道我們的目標密碼是6個字符呢 如果我們已經知道第一個字符是什么
hashcat -a 3 -m 500 hashes1.txt ?l?l?l
以下命令將對包含md5哈希的hashes1.txt文件發起攻擊測試每3個字母的組合。
我們可以使用以下參數作為掩碼
?l = abcdefghijklmnopqrstuvwxyz ?u = ABCDEFGHIJKLMNOPQRSTUVWXYZ ?d = 0123456789 ?h = 0123456789abcdef ?H = 0123456789ABCDEF ?s = ?space?!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ ?a = ?l?u?d?s ?b = 0x00 - 0xff
請注意我們可以在掩碼中使用固定字符例如
?1?l?l?l?l?l19?d?d
該掩碼將生成以下keyspace鍵空間
aaaaaa1900 - Zzzzzz1999
hashcat64.bin -a 3 -m 1800 /hashes/single.txt ?l?l?l?l?d?d?d cat hashcat.potfile
Started: Mon Apr 15 19:19:49 2019 [2K Stopped: Mon Apr 15 19:21:15 2019 $6$fQsjcwyB$N/HCQx9xohBVqkqAQFhVpkg2Bp3Ki51MMZPED4CQ9e/FLx0yRwnMVoaPcY7UtZJAlXjMrUgflazaspzvClaUX.:hack123
可以看到我們在4分鐘不到的時間里就找到了哈希
讓我們在shadow2文件中嘗試一下
echo "" > /home/cherrysan/hashcat-5.1.0/hashcat.potfile /home/cherrysan/hashcat-5.1.0/hashcat64.bin -a 3 -m 500 /hashes/shadow2 ?l?l?l cat /home/cherrysan/hashcat-5.1.0/hashcat.potfile date Started: Mon Apr 15 20:23:15 2019 [2K Stopped: Mon Apr 15 20:32:52 2019
三字符的組合種并沒有找到密碼。
Hashcat還為我們提供了一個名為“hybryd attack”的有趣攻擊場景。在混合攻擊中我們可以使用掩碼將字典中的單詞與某些字符組合在一起。
hashcat -a 6 -m 500 hashes1.txt dic_eng.txt ?d?d -i
在該攻擊中我們通過將dict_eng.txt中的每個單詞與2位數組合來攻擊存儲在hashes1.txt中的md5哈希值。我們將生成以下單詞:
[...] chair12 tree99 cat11 [...]
注意我們可以在字典名稱之后或之前附加掩碼具體取決于在每個單詞之后或之前使用掩碼生成其他字符的位置。
下面我將使用一個包含500多個MD5密碼哈希值的文件你可以在這里下載到它。
我們可以使用以下命令嘗試混合攻擊。
hashcat -a 6 -m 500 /hashes/shadow2 /dicts/rockyou-75.txt ?d?d -i
root@Hassium:/# hashcat -a 6 -m 500 /hashes/shadow2 /dicts/rockyou-75.txt ?d?d -i hashcat (v5.1.0) starting... OpenCL Platform #1: Advanced Micro Devices, Inc. ================================================ * Device #1: Ellesmere, 4048/7864 MB allocatable, 36MCU * Device #2: Ellesmere, 4048/8155 MB allocatable, 36MCU * Device #3: Ellesmere, 4048/8155 MB allocatable, 36MCU * Device #4: Ellesmere, 4048/8155 MB allocatable, 36MCU * Device #5: Ellesmere, 4048/8155 MB allocatable, 36MCU * Device #6: Ellesmere, 4048/8155 MB allocatable, 36MCU [...] Session..........: hashcat Status...........: Running Hash.Type........: md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5) Hash.Target......: /hashes/shadow2 Time.Started.....: Sun Apr 14 23:15:14 2019 (13 secs) Time.Estimated...: Sun Apr 14 23:19:14 2019 (3 mins, 47 secs) Guess.Base.......: File (/dicts/rockyou-75.txt), Left Side Guess.Mod........: Mask (?d) [1], Right Side Guess.Queue.Base.: 1/1 (100.00%) Guess.Queue.Mod..: 1/2 (50.00%) Speed.#1.........: 241.6 kH/s (0.88ms) @ Accel:32 Loops:31 Thr:64 Vec:1 Speed.#2.........: 173.8 kH/s (0.48ms) @ Accel:16 Loops:15 Thr:64 Vec:1 Speed.#3.........: 231.3 kH/s (0.90ms) @ Accel:32 Loops:31 Thr:64 Vec:1 Speed.#4.........: 241.3 kH/s (0.84ms) @ Accel:32 Loops:31 Thr:64 Vec:1 Speed.#5.........: 237.2 kH/s (0.84ms) @ Accel:32 Loops:31 Thr:64 Vec:1 Speed.#6.........: 237.9 kH/s (0.85ms) @ Accel:32 Loops:31 Thr:64 Vec:1 Speed.#*.........: 1363.2 kH/s
在我們的6-GPU破解站中攻擊持續了大約一個小時我們破解出了15個密碼。
Hardware.Mon.#1..: Temp: 36c Fan: 16% Core: 300MHz Mem: 300MHz Bus:0 Hardware.Mon.#2..: Temp: 72c Fan: 40% Core:1340MHz Mem:2000MHz Bus:0 Hardware.Mon.#3..: Temp: 36c Fan: 16% Core: 300MHz Mem: 300MHz Bus:0 Hardware.Mon.#4..: Temp: 40c Fan: 16% Core: 300MHz Mem: 300MHz Bus:0 Hardware.Mon.#5..: Temp: 37c Fan: 16% Core: 300MHz Mem: 300MHz Bus:0 Hardware.Mon.#6..: Temp: 43c Fan: 16% Core: 300MHz Mem: 300MHz Bus:0 Started: Sun Apr 14 22:15:36 2019 Stopped: Sun Apr 14 23:13:59 2019
如果你仔細觀察你會發現所有密碼都是以兩位數字結尾的
root@Hassium:/# results $1$JrP2iymU$eYDr3NGC5oeC5KXzJ5sOS1:formula1 $1$orXTfMnG$aEjNn4oiGnkfiShgrmQnL.:porter12 $1$mL..oCwu$smQSyDwZ8rSp9lHMAfT0C.:selina23 $1$/Vz5N88k$VDbyNM8Wi2a8cyxoRn/Fw0:Carlos19 $1$cfu8erpl$oZqC.eoJenwKCHTtpAh8B/:christian97 $1$HXWAWpWX$D/aYEUMoYY0MbHAz9GeU10:Gerard92 $1$p3nC5zRF$JJCUomPP/OW8eSKF3T9Wq.:christian97 $1$vN.IdLhf$bgYb/A.BL3kQlVvw9F/uV1:Cristina89 $1$XUESKy2m$2HSDdaa16bUMF.4uA4C1a1:daring98 $1$YjpXADgu$SZpQEmQ4dsdMMZtQ0vgen0:fenix15 $1$R1Rei8kR$8cv/GcdJLp6ju/pNjIsUR0:triplet09 $1$7uWjhHle$V5S0g0RlNMqxwUNw4PeRy/:tennis00 $1$R7Jo6E5t$8THfWXDbNyq1JYWHHNKRf/:alexito31 $1$NWevu8U1$MpsKwxPEhWltwI7GOP9qI0:toledo00 $1$JAJl4tUI$Ir2DCRoPNFIeFgecgzAgy1:Mustang69 root@Hassium:/#
hashcat的規則引擎加上它的GPU破解能力使它超越了許多其他同類的工具如john the ripper。
基于規則的攻擊流程非常簡單。首先我們選擇一個單詞字典作為攻擊的“基點”然后選擇一個包含一個或多個規則的文件。該程序將使用這些規則對字典中提供的每個單詞執行轉換以增強我們的攻擊并最大化我們成功的機會。
所以規則基本上改變了字典中的單詞。規則系統背后的關鍵思想是例如你可能有一個包含最常用英文名稱的文件
[...] paul anne john jane david [...]
當然這些名稱可以用作密碼但將“david”直接作為密碼的并不常見。人們更傾向于使用以下密碼
[...] Paul12 aNne9 999daviD j0hn1 [...]
正如你所看到的基于字典和掩碼的攻擊不足以基于我們的英語字典破解這些密碼。我們可以生成某種腳本來轉換字典添加那些密碼或類似的轉換但這將是一個非常冗長的過程。
hashcat的規則引擎可以很輕松地完成這類工作。hashcat附帶的“best64.rules”文件的開頭如下
# nothing, reverse, case... base stuff : r u T0 ## simple number append $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ## special number append $0 $0 $0 $1 $0 $2 $1 $1 $1 $2
正如你所看到的典型的規則文件包含一個或多個規則。規則可以對單詞執行不同的變換例如添加數字大寫/小寫字母等。
下表列出了一些規則及其含義
符號 | 含義 |
---|---|
: | 什么都不做 |
l | 將所有字母轉為小寫 |
c | 大寫首字母小寫其余字母 |
t | 改變單詞中所有字母的大小寫 |
TN | 改變單詞中第N個字母的大小寫 |
C | 小寫首字母大寫其余部分 |
u | 將所有字母轉為大寫 |
我們可能想在單詞的開頭或結尾添加一些符號我們可以使用這些符號
符號 | 含義 |
---|---|
$X | 在單詞最后添加一個字符 |
^X | 在單詞前面添加一個字符 |
使用best64規則文件和英文字典t對shado2文件進行簡單攻擊如下所示
hashcat -a 0 -m 500 hashes1.txt dic_eng.txt -r rules\best64.rule
結果如下
hashcat64.bin -a 0 -m 500 /hashes/shadow2 /dicts/dic_eng.txt -r /rules/best64.rule cat hashcat.potfile Started: Tue Apr 16 02:47:06 2019 [2K Stopped: Tue Apr 16 07:08:17 2019 $1$JrP2iymU$eYDr3NGC5oeC5KXzJ5sOS1:formula1 $1$orXTfMnG$aEjNn4oiGnkfiShgrmQnL.:porter12 $1$u1b.Wvye$TVvT1Xnl7FeJY9kxyUB3J1:vaina $1$7uWjhHle$V5S0g0RlNMqxwUNw4PeRy/:tennis00 $1$NWevu8U1$MpsKwxPEhWltwI7GOP9qI0:toledo00
正如你所看到的基于規則的攻擊可能需要花費大量時間具體取決于你所使用的規則和字典。我們的攻擊持續了6個多小時破解出了5個密碼。注意這些密碼是多樣性的有大小寫字母、結尾數字以及簡單的英語單詞。
使用更長的字符串
使用更大的字符集字母、數字、符號
不要使用任何可能與你有關的字符作為密碼或密碼的一部分使用
另外你也可以選擇一個你容易記住的長短語來作為密并使用密碼管理器和雙因素身份驗證
以下圖表是對我建議的補充且非常的有用
如果我有更多空閑的時間我會保持這篇文章的更新,因為hashcat確實是一個非常出色的程序。
看完了這篇文章,相信你對“在多GPU系統上如何使用hashcat進行密碼破解”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。