計算機的處理能力不斷增強,幫助用戶更快地解決日益復雜的問題。但副作用是,幾年前還無法猜到的密碼可以在2024年被黑客在幾秒鐘內輕松破解。例如,RTX 4090 GPU能夠在17秒內猜出由相同大小寫的英文字母和數字組成的8個字符的密碼,或者36個可組合字符。
卡巴斯基實驗室對暴力攻擊抵抗力的研究發現,很大比例的密碼(59%)可以在一小時內被破解。
密碼通常是如何存儲的?
為了能夠對用戶進行身份驗證,網站需要一種方法來存儲登錄密碼對,并使用這些密碼對來驗證用戶輸入的數據。在大多數情況下,密碼以哈希而非明文形式存儲,這樣攻擊者就無法在發生泄露時使用它們。為了防止在彩虹表的幫助下猜到密碼,密碼存儲時還會在哈希之前添加鹽。
雖然哈希本質上是不可逆的,但是可以訪問泄露數據庫的攻擊者可以嘗試猜測密碼。他們的嘗試次數是無限的,因為數據庫本身沒有任何防止暴力破解的保護機制。現成的密碼猜測工具(如hashcat)也可以在網上輕松獲取。
方法論
卡巴斯基的研究調查了在各種暗網網站上發現的1.93億個密碼,并估計了使用暴力和各種高級算法(如字典攻擊和/或常見字符組合枚舉)從哈希中猜測密碼所需的時間。通過字典,我們可以了解密碼中常用的字符組合列表。它們包括但不限于真正的英語單詞。
暴力攻擊
暴力破解方法仍然是最簡單、最直接的方法之一:計算機嘗試所有可能的密碼選項,直至找到有效的為止。但這并非一種“放之四海而皆準”的方法:枚舉會忽略字典密碼,而且在猜測較長的密碼時明顯比猜測較短的密碼更差。
卡巴斯基研究人員分析了應用于所審查數據庫的暴力破解速度。為了清楚起見,研究人員將示例中的密碼根據其包含的字符類型劃分為不同模式。
- a:密碼只包含小寫字母或大寫字母。
- aA:密碼同時包含小寫字母和大寫字母。
- 0:密碼包含數字。
- !:密碼包含特殊字符。
使用暴力破解密碼所需的時間取決于字符類型的長度和數量。表中的結果是針對RTX 4090 GPU和加鹽MD5哈希算法計算的。此配置中的枚舉速度是每秒1640億個哈希值。表格中的百分比為四舍五入。
密碼模式 |
該類型密碼在數據集中的份額,% |
暴力破解密碼的份額(按模式,%) |
最長密碼長度(按破解時間) |
|||||||
<60s |
60s-60min |
60min-24h |
24h-30d |
30d-365d |
>365d |
24h-30d |
30d-365d |
>365d |
||
aA0! |
28 |
0.2 |
0.4 |
5 |
0 |
9 |
85 |
- |
0 |
10 |
a0 |
26 |
28 |
13 |
15 |
11 |
10 |
24 |
11 |
12 |
13 |
aA0 |
24 |
3 |
16 |
11 |
0 |
15 |
55 |
- |
10 |
11 |
a0! |
7 |
2 |
9 |
0 |
14 |
15 |
59 |
9 |
10 |
11 |
0 |
6 |
94 |
4 |
2 |
0 |
0 |
0 |
- |
- |
- |
a |
6 |
45 |
13 |
10 |
9 |
6 |
17 |
12 |
13 |
14 |
aA |
2 |
15 |
22 |
11 |
14 |
0 |
38 |
10 |
- |
11 |
a! |
1 |
6 |
9 |
11 |
0 |
11 |
62 |
- |
10 |
11 |
aA! |
0.7 |
3 |
2 |
12 |
10 |
0 |
73 |
9 |
- |
10 |
0! |
0.5 |
10 |
27 |
0 |
18 |
13 |
32 |
10 |
11 |
12 |
! |
0.006 |
50 |
9 |
10 |
5 |
6 |
19 |
11 |
12 |
13 |
最流行的密碼類型(28%)包括小寫字母和大寫字母、特殊字符和數字。在所審查的樣本中,大多數密碼都很難被暴力破解。大約5%的密碼可以在一天內被猜出,但85%的密碼需要一年以上才能破解。破解時間取決于密碼的長度:9個字符的密碼可以在一年內被猜出,但包含10個字符的密碼則需要一年多。
最難抵御暴力破解的密碼是那些僅由字母、數字或特殊字符組成的密碼。樣本中這樣的密碼占比14%。它們中的大多數可以在不到一天的時間內破解。
智能暴力攻擊
如上所述,暴力破解是一種次優密碼猜測算法。密碼通常由特定的字符組合組成:單詞、姓名、日期、序列(“12345”或“qwerty”)。如果讓暴力算法考慮下述內容將可以加速這一過程:
- Bruteforce_corr是暴力破解方法的優化版本。您可以使用大樣本來測量某個密碼模式的頻率。接下來,您可以為每個品種分配與其實際頻率相對應的計算時間百分比。因此,如果有三種模式,并且第一種模式在50%的情況下使用,第二種和第三種模式在25%的情況下使用,那么我們的計算機每分鐘將花費30秒來枚舉模式1,15秒來枚舉模式2和模式3。
- ZXCVBN是一種用于測量密碼強度的高級算法。該算法識別密碼所屬的模式,如“單詞、三位數字”或“特殊字符、字典單詞、數字序列”。接下來,它計算枚舉模式中每個元素所需的迭代次數。因此,如果密碼包含字典單詞,那么查找它將需要與字典大小相等的迭代次數。如果模式的一部分是隨機的,則需要對其進行暴力破解。如果您知道猜測模式的每個組件所需的時間,則可以計算破解密碼的總復雜性。此方法有一個限制:成功枚舉需要指定密碼或假設模式。但是,您可以通過使用被盜樣本來發現模式的流行程度。然后,與暴力破解選項一樣,為模式分配與出現次數成比例的計算時間。我們將這個算法命名為“zxcvbn_corr”。
- Unogram是最簡單的語言算法。它不需要密碼模式,而是依賴于從密碼樣本中計算出的每個字符的頻率。該算法在枚舉時優先考慮最流行的字符。因此,要估計破解時間,只需計算密碼中出現字符的概率即可。
- 3gram_seq、ngram_seq是根據前n-1個字符計算下一個字符的概率的算法。該算法首先枚舉一個字符,然后依次添加下一個字符,同時從最長和最頻繁出現的n-gram開始。在這項研究中,研究人員使用了n-gram(從1到10個字符不等),其在密碼數據庫中出現了50多次。3gram_seq算法限制為n-gram,最多包括三個字符。
- 3gram_opt_corr、ngram_opt_corr是n-grams的優化版本。之前的算法通過每次添加一個字符來從頭生成密碼。然而,在某些情況下,如果從末尾、中間或同時從多個位置開始,枚舉速度會更快。*_opt_*算法檢查上述特定密碼的變體,并選擇最佳密碼。然而,在這種情況下,我們需要一個密碼模式,允許我們確定從哪里開始生成。當針對不同的模式進行調整時,這些算法通常較慢。不過,它們可以為特定密碼提供顯著的優勢。
此外,對于每個密碼,我們計算了一個最佳值:在所使用的所有算法中最佳的破解時間。這是一個假設的理想情況。為了實現它,您需要“猜測”一個合適的算法,或者在自己的GPU上同時運行上述每個算法。
下面是通過在RTX 4090 GPU上運行加鹽MD5算法來測量密碼強度的結果。
破解時間 |
被暴力破解密碼的百分比 |
|||||||
ngram_seq |
3gram_seq |
unogram |
ngram_opt |
3gram_opt |
zxcvbn |
bruteforce |
最佳 |
|
<60s |
41% |
29% |
12% |
23% |
10% |
27% |
10% |
45% |
60s-60min |
14% |
16% |
12% |
15% |
12% |
15% |
10% |
14% |
60min-24h |
9% |
11% |
12% |
11% |
12% |
9% |
6% |
8% |
24h-30d |
7% |
9% |
11% |
10% |
11% |
9% |
9% |
6% |
30d-365d |
4% |
5% |
7% |
6% |
8% |
6% |
10% |
4% |
>365d |
25% |
30% |
47% |
35% |
47% |
35% |
54% |
23% |
結果顯示,當使用最有效的算法時,所審查的樣本中有45%的密碼可以在一分鐘內猜出,59%可以在一小時內猜出,73%可以在一個月內猜出。只有23%的密碼需要一年以上才能破解。
重要的是,猜測數據庫中的所有密碼所花費的時間幾乎與猜測其中一個密碼所花費的時間一樣多。在攻擊過程中,黑客會檢查數據庫中當前迭代中獲得的哈希值。如果哈希值存在于數據庫中,那么該密碼將被標記為已破解,算法將繼續處理其他密碼。
使用字典單詞會降低密碼強度
為了找到最能抵御黑客攻擊的密碼模式,研究人員計算了一組擴展標準的最佳值。為此,研究人員創建了一個包含四個或更多字符的常用組合的字典,并將它們添加到密碼模式列表中。
- dict:密碼包含一個或多個字典單詞。
- Dict_only:只包含字典單詞。
密碼模式 |
該類型密碼在數據集中的份額,% |
字典攻擊破解密碼的份額(按模式,%) |
最長密碼長度(按破解時間) |
|||||||
<60s |
60s-60min |
60min-24h |
24h-30d |
30d-365d |
>365d |
24h-30d |
30d-365d |
>365d |
||
dict_a0 |
17 |
63 |
15 |
8 |
5 |
3 |
7 |
10 |
11 |
12 |
aA0! |
14 |
5 |
6 |
5 |
5 |
3 |
76 |
6 |
7 |
8 |
dict_aA0 |
14 |
51 |
17 |
10 |
7 |
4 |
11 |
9 |
10 |
11 |
dict_aA0! |
14 |
34 |
18 |
12 |
10 |
6 |
20 |
7 |
8 |
8 |
a0 |
10 |
59 |
22 |
6 |
6 |
1.8 |
6 |
10 |
11 |
12 |
aA0 |
10 |
19 |
13 |
13 |
6 |
7 |
42 |
9 |
10 |
11 |
0 |
6 |
92 |
5 |
1.5 |
1.3 |
0 |
0 |
15 |
- |
- |
dict_a0! |
5 |
44 |
16 |
10 |
8 |
5 |
17 |
9 |
9 |
10 |
dict_a |
4 |
69 |
12 |
6 |
4 |
2 |
6 |
11 |
12 |
13 |
a0! |
2 |
31 |
19 |
13 |
9 |
5 |
23 |
9 |
9 |
10 |
a |
1.2 |
76 |
7 |
6 |
3 |
3 |
6 |
11 |
12 |
13 |
dict_aA |
1.2 |
56 |
15 |
8 |
6 |
3 |
11 |
9 |
10 |
10 |
dict_a! |
0.8 |
38 |
16 |
10 |
8 |
5 |
23 |
8 |
9 |
10 |
aA |
0.7 |
26 |
10 |
28 |
7 |
2 |
27 |
9 |
10 |
10 |
dict_aA! |
0.5 |
31 |
17 |
11 |
10 |
6 |
26 |
8 |
9 |
9 |
0! |
0.4 |
53 |
15 |
8 |
7 |
5 |
13 |
9 |
10 |
11 |
dict_only |
0.2 |
99.99 |
0.01 |
0.0002 |
0.0002 |
0 |
0 |
18 |
- |
- |
dict_0 |
0.2 |
89 |
6 |
2 |
2 |
0 |
0 |
15 |
- |
- |
aA! |
0.2 |
11 |
8 |
10 |
16 |
3 |
52 |
8 |
9 |
9 |
a! |
0.1 |
35 |
16 |
10 |
9 |
5 |
25 |
8 |
9 |
10 |
dict_0! |
0.06 |
52 |
13 |
7 |
6 |
4 |
17 |
9 |
10 |
11 |
! |
0.006 |
50 |
10 |
6 |
8 |
4 |
20 |
8 |
9 |
10 |
結果顯示,大多數(57%)被審查的密碼包含字典單詞,這大大降低了密碼的強度。其中一半可以在不到一分鐘的時間內破解,67%可以在一小時內破解。只有12%的字典密碼足夠強,需要一年以上的時間才能猜到。即使使用了所有推薦的字符類型(大寫字母、小寫字母、數字和特殊字符),也只有20%的密碼能抵抗暴力破解。
研究發現最流行的字典序列包括以下幾種:
- 名字:“艾哈邁德”、“阮”、“kumar”、“凱文”、“丹尼爾”;
- 熱門詞匯:“永遠”、“愛”、“谷歌”、“黑客”、“游戲玩家”;
- 標準密碼:password、qwerty12345、admin、12345、team。
非字典密碼占樣本的43%。有些為弱密碼,例如由相同大小寫的字母和數字組成(10%)或僅由數字組成(6%)。然而,添加所有推薦的字符類型(a0 !模式)使得76%的密碼足夠強大。
結語
現代GPU能夠以驚人的速度破解用戶密碼。最簡單的暴力破解算法可以在不到一天的時間內破解任何八個字符以內的密碼。智能黑客算法甚至可以快速猜出更長的密碼。這項研究讓我們對密碼強度得出了以下結論:
- 許多用戶的密碼不夠強:59%的密碼可以在一小時內被猜出。
- 使用有意義的單詞、名稱和標準字符組合可以顯著減少猜測密碼所需的時間。
- 最不安全的密碼是完全由數字或單詞組成的密碼。
為了保護用戶帳戶免受黑客攻擊,建議遵循如下建議:
- 記住,最好的密碼是隨機的,由計算機生成的。許多密碼管理器都能夠生成密碼。
- 使用助記詞,而不是有意義的短語。
- 檢查您的密碼是否能抵御黑客攻擊。您可以在密碼檢查器或zxcvbn的幫助下做到這一點。
- 確保您的密碼不包含在任何泄露的數據庫中。使用安全解決方案,提醒用戶密碼泄露。
- 避免在多個網站使用相同的密碼。如果您的密碼是唯一的,那么破解其中一個密碼會大大降低損害。
原文鏈接:https://securelist.com/password-brute-force-time/112984/