摘要:由於人們更傾向於使用他們感興趣領域的單詞來作爲其密碼組合,並在Twitter上公開這些興趣領域,因此攻擊者可以通過分析目標的推文來創建針對性的wordlist。我編寫了一個名爲Rhodiola的工具,該工具可以分析目標數據(例如目標的tweets),並檢測其中最常用的主題,以此來構建一個用於密碼猜測/暴破的個性化的Wordlist。

*嚴正聲明:本文僅限於技術討論與分享,嚴禁用於非法途徑

我編寫了一個名爲Rhodiola的工具,該工具可以分析目標數據(例如目標的tweets),並檢測其中最常用的主題,以此來構建一個用於密碼猜測/暴破的個性化的Wordlist。這是一個爲密碼猜測攻擊創建新方法的實驗性項目。

介紹

密碼可以說是自互聯網誕生以來,我們數字帳戶的最主要的一種安全機制。因此,密碼往往也是攻擊者的首要目標之一。攻擊者可以使用兩種主要方法來查找目標的密碼。攻擊者可以事先準備好一個釣魚網站,誘騙目標輸入他們的密碼到網站中。或者,攻擊者可以通過暴破的方式強制執行密碼猜測攻擊。密碼猜測攻擊可以分爲兩大類:在線攻擊和離線攻擊。

在線密碼猜測攻擊是攻擊者將用戶名/密碼組合發送到HTTP,SSH等服務的地方,並嘗試通過檢查服務的響應來識別正確的組合。離線密碼猜測攻擊通常是針對散列形式的密碼進行的。攻擊者必須使用合適的加密散列函數計算密碼的散列,並將其與目標散列進行比較。對於在線和離線攻擊,攻擊者通常都需要有一個密碼wordlist。大多數Web應用程序都有密碼複雜性規則,用戶必須使用至少一個數字,大寫/小寫字母和特殊字符。此外還有許多預防措施,例如IP阻止,賬戶凍結等。因此,減少攻擊次數對攻擊者來說非常重要。

掩碼攻擊

掩碼攻擊是將暴破池減少到可接受大小的主要方法之一。掩碼攻擊是指指定一個固定的密碼結構,並根據該結構生成候選密碼。例如,使用純暴破的方法破解“Julia1984”,我們需要計算13.537.086.546.263.552個不同的組合。但是如果我們設置一個具有其結構的掩碼,我們可以將組合池減少到237.627.520.000。當然,這對於在線攻擊來說仍然是個天文數字。通常我們是無法通過互聯網嚮應用程序發送兩千億次請求的。

Sherlock 的方法

但是,純暴力攻擊和掩碼攻擊並不是密碼猜測的唯一方法。還有一種基於智能猜測的方法。例如,在Sherlock的Hound of Baskerville episode中,Sherlock Holmes一次就猜中了正確的密碼。但在現實生活中我們怎麼能做到呢?

讓我們假設以上是目標發送的tweet,而我們就是Sherlock Holmes。我們可以做出以下推斷:目標的女兒叫Julia,並且目標非常愛她的女兒,因爲他/她發佈了關於她的推文。目標最喜歡的作家是George Orwell,他最受歡迎的書是1984。所以把它們組合起來,就是“Julia1984”,就這麼簡單?

根據卡內基梅隆大學和卡爾頓大學的實驗,大多數人都會根據個人愛好,工作,宗教,體育,電子遊戲等主題來作爲他們的密碼組合。[1][2]這意味着大多數用戶密碼都包含有意義的單詞,並且與密碼的所有者相關。所以在理論上,我們可以成爲一個密碼破解的sherlock holmes。讓我們來驗證一下。

Myspace 和 Ashley Madison Wordlists 分析

當我們用PACK(密碼分析和破解工具包)分析泄露的Myspace和Ashley Madison密碼列表並生成最常用的掩碼時,我們可以看到幾乎95%的密碼是由序列的字母字符組成的。所以這些詞很有可能都是有意義的。以下是一些常見的掩碼:

?l?l?l?l?l?l: 7%

?l?l?l?l?l?l?l?l: 7%

?l?l?l?l?l?l?l: 6%

?l?l?l?l?l?l?d?d: 4%

?l?l?l?l?l?l?l?l?l: 4%

由於Ashley Madison和Myspace的wordlists大多數都是由序列的字母字符組成,因此它們很有可能是有意義的單詞。如果它們是有意義的,我們就可以使用有意義的詞來填充掩碼,而不是強制的暴力破解。第一步是瞭解字母序列在英語中是否是一個有意義的單詞。如果字母序列在英語詞典中列出,我們就可以說它是一個英語單詞。我用Wordnet作爲詞典。分析顯示,幾乎百分之四十的單詞列表都包含在Wordnet詞典中,因此它們是有意義的英語單詞。

在確認Wordnet中包含字母序列後,因此它是一個英語單詞,我們需要做詞性標記(POS標記)。英語中有八大詞類:名詞、代詞、動詞、形容詞、副詞、介詞、連詞和感嘆詞。詞性標註是將文本中的一個詞標記爲與特定詞性相對應的過程。NLTK Python庫用於POS標記。

爲了瞭解哪個詞類在密碼中出現的最多,我們再次分析了Myspace和Ashley Madison的wordlists。用於分析的腳本代碼你可以在此處獲取。結果顯示大多爲單數名詞(約佔32%)

如果我們使用牛津英語詞典中的所有單詞,則組合池將爲171,476。如果我們使用“?l?l?l?l?l?l”掩碼暴破所有六字符字母的字符串,組合池將爲308.915.776。 因此,嘗試詞典中的所有英語單詞將比使用掩碼快1801倍。但是對於在線攻擊來說,171,476仍然是一個很大的數字。

Sherlock 的方法(再次)

那麼讓我們回顧一下迄今爲止我們已掌握的事實。首先,我們的分析顯示人們偏向使用有意義的單詞作爲他們的密碼。第二,根據各大學的研究,我們知道密碼主要基於個人主題。因此,Sherlock Holmes的方法在理論上是可行的。但這能在實踐中做到嗎?Sherlock Holmes所做的是分析關於目標的個人主題。然後,他將這些組合在一起並想出了一個候選密碼。

但在現實生活中我們能做到嗎?爲此,我們需要有關目標的信息和從該信息中提取出候選密碼的算法。我們需要像Sherlock Holmes那樣的目標數據源,我們可以找出目標的興趣愛好和其他興趣領域。顯然,這些信息我們可以在一些社交媒體找到,例如在Twitter上人們就傾向於撰寫關於他們的興趣愛好和其他興趣領域的帖子。由於tweets存在字符限制,因此用戶會更專注地寫東西。這也使得我們的信息收集工作變得輕鬆。免去了我們可能需要處理大型/亂碼文本的過程。因此,讓我們使用Twitter作爲我們的數據源,並嘗試構建我們的個性化wordlist生成算法。

算法構建 下載和清洗 Tweet 數據

首先,我們需要通過Twitter的API從目標收集推文。由於我們的目標是識別用戶的個人主題並生成相關的單詞,因此我們需要從下載的推文中刪除不必要的數據(停用詞)。NLTK的stopwords擴展和自定義列表都被使用。列表包含高頻詞,如“the,a,an,to,that,i,you,we,they”。這些字在處理數據之前被刪除。我們還刪除了動詞,因爲密碼大多包含名詞。

識別最常用的名詞和專有名詞

上面我們分析過,幾乎32%的用戶密碼都包含單數名詞。因此,我們的第一個目標是確定最常用的名詞和專有名詞。用戶最感興趣的主題可以用它們來識別。用NLTK的詞性標記功能來識別最常用的名詞和專有名詞。例如上面的tweet,名詞是:作者和女兒。專有名詞是:George Orwell 和 Julia。

配對相似詞

在某些情況下,名詞可以一起使用。 要創建有意義的單詞對,我們需要分析它們的語義相似性。 爲此,NLTK的路徑相似性[16]與Wordnet上的第一個名詞含義(n.01)一起用於所有已識別的名詞。路徑相似性基於在is-a(上位詞/下位詞)分類法中連接的最短路徑,返回表示兩個詞有多相似的分數。得分在0到1的範圍內。如果相似度得分高於0.12,我們的算法就可以對它們進行配對。

查找相關的輔助詞

研究人員發現密碼中最常用的語義主題是位置和年份。因此,應該能找到與用戶興趣領域相關的位置和年份。wiki被用於這兩項工作。我們的算法訪問每個專有名詞的wiki頁面,用正則解析年份,並使用其硬編碼城市列表識別城市名稱。在上面的示例推文中,當我們向wiki發送“George Orwell”時,我們的算法將解析諸如London,1984等詞。

組合

最後一步是整合我們所有獲取的數據。從示例Tweet中我們獲取到了George Orwell這個專有名詞,我們將它發送到wiki,它返回給我們了1984。除此之外,我們還有另一個專有名詞Julia。所以,當我們把所有的數據組合在一起時,我們的單詞列表中的某個地方就會有正確的密碼“Julia1984”。因此,我們可以像Sherlock Holmes一樣破解密碼,而不是面對那數以百萬計的組合。

Rhodiola

Rhodiola是用Python 2.7編寫的,主要基於NLTK和textblob庫。通過一個給定的Twitter句柄(如果你沒有,你也可以用你自己的數據。請查看Github頁面瞭解有關詳情),它可以自動編譯一個包含以下元素的個性化wordlist:最常用的名詞和專有名詞,配對名詞和專有名詞,與檢測到的專有名詞相關的城市和年份。 例如:

有關其詳細用法,請查看Github頁面:https://github.com/tearsecurity/rhodiola

總結

由於人們更傾向於使用他們感興趣領域的單詞來作爲其密碼組合,並在Twitter上公開這些興趣領域,因此攻擊者可以通過分析目標的推文來創建針對性的wordlist。除了Twitter之外,任何其他的社交媒體平臺都有可能成爲攻擊者精準創建wordlist的有效數據來源。因此,用戶應避免使用社交媒體中公開主題中的單詞。最好使用存儲在密碼管理器中的隨機密碼。

相關文章