如何破解12位+字符的高強度密碼?
看到這個標題,你肯定抱著懷疑的態(tài)度。破解 12+ 字符的密碼,在理論上這是不可能的。因為按照安全專家的說法,想要破解一個 12+ 字符的高強度密碼,大概需要 17134 年。這里我只是說,如果我們利用一些現(xiàn)代硬件設備,如“預算”裂解裝置,我們就能在一個相對合理的時間范圍內(nèi),窮舉出像 MD5,NTLM,SHA1等,這些標準快速散列算法。通常,暴力破解這種方式,對于超過 8 個字符的標準快速散列算法加密的密碼,一般被認為是無法破解的。
例如當我們對一種語言的特點,和不同人的不同習慣上分析發(fā)現(xiàn),英語單詞平均有 4.79 個字符長度,而一般情況下,人們會習慣性的使用多個單詞組合來構建密碼。
一、那么為什么12+字符的超強密碼,容易受到攻擊呢?
事實上,通常人們在創(chuàng)建大于10個字符以上的密碼時,都會習慣性的使用一些常見的單詞或短語組合來構建。之所以這樣做,其實也很容易理解。例如“horsebattery123”比“GFj27ef8%k $ 39” 這個密碼記起來會更加容易。這已經(jīng)不是一個“漏洞”的問題,而是人類的思維本能和行為習慣形成的。因此,這個問題也會一直存在我們的周圍。我當然贊同,使用XKCD那種漫畫隨機產(chǎn)生的四個單詞作為密碼。但是那只適用于非快速散列算法,如bcrypt。在這篇文章,我將演示 Hashcat的組合及混合 兩種攻擊方式。這些例子將讓你看到,攻擊者是如何利用那些硬件設備,來對那些所謂的高強度密碼,進行有效攻擊的。
二、組合&混合 攻擊背景
首先快速介紹一下這些攻擊方法:
組合攻擊:兩個字典中的所有單詞都相互附加。
例如:
- dictionary1.txt dictionary2.txt
- pass => password, passpass, passlion
- word => wordpass, wordword, wordlion
- lion => lionpass, lionword, lionlion
混合攻擊:字典攻擊,但具有附加/前置一個暴力掩碼的能力。
例如:
- dictionary.txt ?u?l?l
- pass => passAbc, passBcd, passCde
- word => wordAbc, wordBcd, wordCde
- lion => lionAbc, lionBcd, lionCde
- **進一步的解釋可以在 Hashcat 的網(wǎng)站上找到。
**進一步的解釋可以在 Hashcat 的網(wǎng)站上找到。
三、組合攻擊
讓我們來看看組合攻擊這種方式,是如何幫助我們組合英語單詞的密碼的。在這里,我推薦大家使用Google的10,000 個最常見的單詞列表,作為我們組合的字典。這10000個最常見的單詞列表,是由Google的Trillion單詞庫的n-gram 頻率分析而確定。 現(xiàn)在讓我們使用兩個隨機選擇的英語單詞,組合形成一個16個字符的密碼,如shippingnovember。
如果這是一個通過 MD5 加密的密碼,那么我們該如何使用 Hashcat 的組合攻擊這個密碼:
例如:
- hashcat -a 1 -m 0 hash.txt google-10000.txt google-10000.txt
通過使 Hashcat 將該列表中的每個字詞彼此組合,并結合一些性能較好的硬件設備,密碼在不到 1 秒內(nèi)就被破解出來。目前這種破解方法并不過時,它對那些中等較慢的哈希類型效果依然不錯。
在這里也許有人會說,“我用的shippingnovember全部為小寫字母,因此能成功破解出來,但是如果隨意做個改動,例如增加特殊字符,字母大小寫變化等,如:ShippingNovember這個形式就不一定能成功。那么,就讓我們來快速測試一下吧。首先我使用Hashcat的“combinator.bin” 將google的字典列表合并成一個單獨的字典。
例如:
- combinator.bin google-10000.txt google-10000.txt > google-10000-combined.txt
接著我們就可以使用Hashcat結合這個新生成的,基于規(guī)則的字典文件,爆破修改大小寫后密碼 ShippingNovember:
例如:
- hashcat -a 0 -m 0 hash.txt google-10000-combined.txt -r best64.rule
這里我們用時 28 秒,成功爆破!
1. 3個單詞
現(xiàn)在讓我們來看看,由三個單詞隨機組成的短語密碼,如“securityobjectivesbulletin”…看起來不錯吧? 上面我們剛剛創(chuàng)建了新的 “google-10000-combined.txt” 字典文件,下面我們可以繼續(xù)使用上面的方式,將由兩個單詞組合的字典同單個單詞的字典列表進行組合:
例如:
- hashcat -a 1 -m 0 hash.txt google-10000-combined.txt google-10000.txt
如果添加了一些字符變體,但是因為你可以看到直接的隨機英語單詞落在2秒鐘,這可能會有點更困難。 你在這里看到一個趨勢嗎?
理論上來說我們添加了字符數(shù)量,破解起來也應該會更加困難耗時,但這里我們只用了2秒左右時間,就成功破解出來了!在這里,你看到什么趨勢了嗎?
2. 4個單詞
接著,讓我們?nèi)L試攻擊下XKCD介紹的使用4個隨機英語單詞,來生成一個新密碼“sourceinterfacesgatheredartists”。在這里我們多增加了一個單詞,這也意味著我們的破解范圍更加龐大。它的組合大概在鍵盤有10,000,000,000,000,000多種的可能性。但是即便如此,它的強度也會大打折扣。因為,在這里我們使用的為MD5散列函數(shù)。下面,我將使用 Hashcat 并結合新創(chuàng)建的 “combined” 字典,再次執(zhí)行組合攻擊:
例如:
- hashcat -a 1 -m 0 hash.txt google-10000-combined.txt google-10000-combined.txt
這個破解嘗試,可能需要4天左右的時間才能完成。但幸運的是,我們發(fā)現(xiàn)我們只用了5小時35分鐘就成功爆破了出來。如果對這個密碼做簡單的修改,例如:添加數(shù)字或特殊字符,都會使這個密碼超出我們的范圍,但是再次隨機的通用詞是不匹配的。
四、混合攻擊
1. Google-10000 + 掩碼
對于第一個示例,我將使用之前在組合攻擊演示中的 google-10000.txt 字典表,來作為我們爆破的基本單詞列表。然后我將使用 PACK(密碼分析和破解工具包)和來自weakpass.com網(wǎng)站上的hashesorg251015.txt字典做演示。
我之所以選擇使用hashesorg字典,是因為它的效率相對較高評級為 65.9,并且字典的體積也相對較小。我們需要做的是分析hashesorg的數(shù)據(jù)集,并根據(jù)一定的字符長度,來創(chuàng)建基于最流行的密碼模式的掩碼。這些掩碼將被 附加/添加 到我們的google-10000.txt單詞列表,并形成一個有效的混合攻擊。
2. PACK 示例
生成5-6個字符長度的混合掩碼密碼,并輸出到掩碼文件。(注意這可能需要等待一段時間)
- python statsgen.py hashesorg251015.txt –minlength=5 –maxlength=6 –hiderare -o hashesorg_5or6.masks
接著,讓我們將生成的掩碼文件格式,轉換為 Hashcat 可以無縫使用的 .hcmasks 格式文件。
3. PACK 示例
- python maskgen.py hashesorg_5or6.masks –optindex -o hashesorg_5or6.hcmask
現(xiàn)在我們就可以使用Hashcat中的攻擊模式6,并結合新創(chuàng)建的hashesorg掩碼文件,來進行混合攻擊了。這將啟動一個有序的攻擊,從第一個掩碼開始,并沿著列表向下逐一嘗試。有的攻擊可能會進行的很快,有些則可能需要一段時間。為了達到我們測試的目的,我們這里將使用一個隨機密碼 “environmentsqaz472” 我們知道最終我們將會成功爆破!
例如:
- hashcat -a 6 -m 0 hash.txt google-1000.txt hashesorg_5or6.hcmask
這次攻擊花了將近 20 分鐘的時間。前面的格式轉換占用了我們大部分時間,而從攻擊開始到成功爆破,卻只用 14 秒。
4. Rockyou + Rockyou-1-60.hcmask
現(xiàn)在,讓我們使用從 Rockyou 密碼數(shù)據(jù)集派生的 Hashcat 的內(nèi)置掩碼。 Hashcat 中的 rockyou 掩碼,已經(jīng)被分割成更小的塊,其大小基于編號而不斷增加。我將使用最小的 .hcmask 文件 rockyou-1-60,因為它包含較高的概率掩碼,非常適用于這種混合攻擊模式。我們還將把這個與實際的 Rockyou 密碼配對,可以在 Skullsecurity 上找到。當你將掩碼與字典配對時,請務必確保字典體積不會過于龐大,否則你的攻擊將會話費很長的時間。就我個人而言,我喜歡將我的混合攻擊字典大小控制在 500M 以內(nèi),甚至更小。
讓我們從 Rockyou 字典隨機抽取密碼 “sophia **!”,然后我們再添加一個任意日期 “1996”,密這樣就產(chǎn)生了一個碼 1996sophia **! 前面好比是用戶名,后面則是出生年份。下面我們就可以開始嘗試攻擊了,這次攻擊我將把 rockyou-1-60 數(shù)據(jù)集中順序包含的掩碼列表,附加給 Rockyou 字典中包含的所有密碼。
例如:
- hashcat -a 7 -m 0 hash.txt rockyou-1-60.hcmask rockyou.txt
這種攻擊,用不到幾分鐘就會命中一個?d?d?d?d 的掩碼。這也是為了演示目的,但其充分展示了混合攻擊的攻擊過程及威力。rockyou-1-60.hcmask 中共包含了 836 個不同的掩碼,如果你覺得依然不夠,則 Hashcat 將會自動包含 rockyou 數(shù)據(jù)集中的的所有掩碼。
5. Cut First 5 Chars + 掩碼
讓我們來創(chuàng)建一個自己的字典和掩碼,來配合我們的混合攻擊。在文章開頭我們已經(jīng)知道了,平均英語單詞為 4.79 個字符 長。因此,我們創(chuàng)建的字典將最多包含 5 個字符長度。在這個例子中,我們將再次使用 rockyou.txt 字典。我們將使用 cut 命令,將截取字典中的前 5 個字符,并按順序將其追加到一個名為 first5_dict.txt 的文件內(nèi)。根據(jù)你硬件的性能,將決定你字典的生成時間。你可能會注意到,這個新生成的字典文件體積非常的小,只有 18MB。但是對于非快速散列算法,這是一個非常完美的字典文件。
例如:
- cut -c 1-5 rockyou.txt | sort -u > first5_dict.txt
下面,讓我們將新生成的 first5_dict.txt 字典與 Hashcat 中的 rockyou-1-60 掩碼配對。現(xiàn)在,我們來隨機生成一個密碼。這里我在 first5_dict.txt 字典文件中,隨機選擇了 Alty5 和 隨機數(shù)字 9402847 的組合,來作為我的密碼,即 Alty59402847 。
例如:
- hashcat -a 6 -m 0 hash.txt first5_dict.txt rockyou-1-60.hcmask
這種攻擊,對于那些喜歡使用相同的基本單詞或數(shù)字作為密碼,并且將賬戶作為附加或預置 “隨機” 碼的用戶,尤為有效!從結果我們可以看到,在30分鐘內(nèi),我們就成功破解出了密碼。
6. 直接通過掩碼攻擊 12+ 字符密碼
讓我們再次使用 rockyou.txt 字典,來作為例子生成這些掩碼。但在此之前,先讓我們先來測試下我們的機器,對 md5 哈希爆破的速度。
例如(MD5):
- hashcat -b -m 0
從以上測試結果得知,我們的機器破解速度為 760億每秒(76,000,000,000 c / s),讓我們使用 PACK 從 rockyou.txt 字典,來創(chuàng)建新的掩碼。
例如:
- python statsgen.py rockyou.txt -o rockyou.masks
下面我們就可以來生成我們的 Hashcat hcmask 文件了,我們設定攻擊速度為 1 天(86400秒),攻擊范圍涵蓋 12-15 的字符長度。
例如:
- pythong maskgen.py rockyou.masks –optindex –minlength=12 –maxlength=15 –targettime=86400 –pps=76000000000 -o rockyou_12-15.hcmask
當成功生成掩碼文件后,我們就可以使用 rockyou_12-15.hcmask 文件,來對md5哈希進行爆破了。如果順利的話,那么我們將會在一天內(nèi)爆破出結果。
例如:
- hashcat -a 3 -m 0 hash.txt rockyou_12-15.hcmask
總結
通過以上的介紹及演示,相信你已經(jīng)意識到,密碼的安全與否,并不是單單取決于字符的長短的。如果想要更好的保護你的賬戶,不被他人竊取。那么,你必須摒棄一些你的壞習慣。例如:使用一些常見的單詞或短語組合,或者全部采用小寫字母或純數(shù)字等來構建你的密碼。這些都有可能,給你賬號帶來安全隱患!因此,在這里我強烈建議大家,盡可能的使用一些密碼管理器,例如像 1Password 和 Keepass 這類的應用。