淺議密碼強度與密碼破解(2)

Andrew.Hann發表於2014-02-10

作為撞庫研究、密碼破解、社工庫的系統文章第二篇

本文皆在討論密碼強度和密碼心理學的關係、密碼的強度的定義、怎麼樣生成一個強密碼、以及它們和密碼破解的關係。希望能對密碼學攻防領域的朋友有所幫助,同時能引發大家的共同討論

在上一篇文章中我們學習了當前密碼破解使用的常見技術、以及相應的工具

http://www.cnblogs.com/LittleHann/p/3541989.html

 

1. 相關學習資料

http://www.cnhonkerarmy.com/archiver/?tid-69942.html&WebShieldSessionVerify=WXfBMNCWj1MSdmMCisFH
http://www.objectif-securite.ch/ophcrack.php
http://www.project-rainbowcrack.com/
http://www.91ri.org/5904.html
http://www.91ri.org/7626.html
http://w.baike.com/ea49a016f2d748e68c881592fd99b20e.html
http://www.xinli001.com/info/3571/
https://my.bluehost.com/cgi/help/418
http://blog.csdn.net/thinkerabc/article/details/599112
http://hi.baidu.com/306211321/item/7efd5759cbbb7f9508be1759
https://www.microsoft.com/zh-cn/security/pc-security/password-checker.aspx

 

2. 文章主題

密碼心理學
密碼強度的定義、以及怎樣生成一個強密碼
撞庫在密碼破解中的應用

 

3. 密碼心理學

覺有有句話說的很好: "作為一個黑客不要老把自己框在攻擊者的立場去思考問題,有時候靈活的使用逆向思維,在做一件事的時候轉換思維,想想如果是其他人會怎麼做"。比如你在做滲透,攻擊的方式並不僅僅侷限於SQL隱碼攻擊、XSS、溢位等"常規"手段,有時候我們們可以適當的轉換思維,現象如果我是站長會做什麼,如果我是小白使用者我會做什麼,如果我是服務供應商我會做什麼,從不同的角度去滲透它(可能涉及到社工的範疇了)。有時候可能會有意想不到的收穫,而密碼心理學我覺得就是一個很好的思維方式,理解它的原理在我們進行密碼破解工作的時候能起到很大的幫助。

我不是學心理學專業的,也不敢妄談什麼心理學,所以就老老實實做一個搬運工好了,把我收集到的資料中的好的東西都整理出來給大家,也順便談談自己的感想。 

第一部分:十大基本規律
1. 絕大多數人都高估了破譯密碼的難度和低估了自己密碼存在的風險,因而,往往把能夠破解密碼的人當成神祕人物,同時基本很少有修改自己密碼的習慣。
2. 絕大多數人一生常用的密碼通常不會超過3個,如果你破解了某人的QQ密碼,很可能你也破解了他的論壇密碼、郵箱密碼、遊戲賬號密碼……
3. 從性別上看,男性的密碼比女性的要更加難破;從年齡層面上看,年輕人的密碼比35歲以上的人群的密碼更加難破;從受教育層度上看,大專以上學歷的人群相對於 以下學歷人群,
  密碼破解難度更大,且大專、本科、碩士學歷的人群密碼破解難度基本上沒有什麼區別;從專業角度上看,理科生的密碼比起文科生要難破一些,計算機相關專業的學生密碼破解難度最大。
4. 絕大多數人的密碼,基本上都是有確定含義的,隨機亂碼組成的密碼極度罕見(應該說我從來沒有遇到過,不過如果是這種密碼,我這種基於心理的思路,可以確定毫無辦法)。 5. 大多數人的密碼要麼純粹用數字組成,要麼純粹用小寫字母組成,要麼用數字加字母組成,只有很少人會採用下劃線,極少數的人字母區分大小寫。 6. 密碼所採用的字母中,很多都是姓名拼音、名字拼音的全部或首字母縮寫,某一圖騰的英文單詞(通常是名詞)——圖騰的含義後面會提到,某一單位名的首字母縮寫,以及某一地名的拼音或英文
  及其縮寫。
7. 密碼所採用的數字中,很多有關日期,且該日期對密碼所有人擁有極其重要的意義,還有很多與地名和電話號碼有關。 8. 使用下劃線的密碼,下劃線通常只出現一次,一般這類密碼的主人密碼保護意識很強,其密碼往往還包含數字和字母,這種密碼的下劃線的位置通常處在數字和字母的分隔處;字母區分大小寫
  的密碼,大寫通常只出現一次,並且很多時候都出現在密碼的開頭,極少數出現在結尾。
9. 除非所登入系統有嚴格的位數限制,否則密碼的位數通常是8位到11位,7位以下的密碼和12位以上的密碼較為少見。而且現在很多的網站在使用者註冊的時候都會要求使用者設定的密碼必須符合
  一定的"要求"(6位以上、包含數字+字母+1個特殊字元、不能數字開頭等) 10. 公共網路的密碼通常很少包含個人資訊,大多數是單位名稱的全部或某一部分的中文或英文全稱(例如CMCC、CHINA-NET),或者英文或拼音的首字母縮寫,外加擁有特定含義的數字,這種
  數字 通常是電話號碼或者門牌號,另外,有些密碼是上述特定字母或其縮寫的簡單重複,如:12341234、abcabcabc;個人密碼則很少出現上述簡單重複的情況。

上面這些基本規則仔細看看真的挺有道理的,我們遵循這些規則去構造字典庫,覆蓋率能達到相當的高度。仔細回想一下自己身邊的或者以前遇到過的密碼,是不是都有這些規則的影子呢?

第二部分:五大規律隱含的心理學特性
1. 惰性
從上述很多條規律都可以看出人或多或少存在惰性,比如很少人會定期修改密碼;再如很少人密碼會區分大小寫,因為這樣的話必須進行至少一次大小寫切
換(一般如果出現大小,都是使用了TAB鍵,即全部大小、或全部小寫)。再如各種不同賬號使用同一密碼都是人存在惰性的有力證明。
2. 自我意識 自我意識很多時候體現在使用名字的密碼上,通常,自我意識較為強烈的人,很看重自己的名號或者名譽,因而,其密碼一旦使用自己的名字,往往就是名字的全拼, 較少使用縮寫,
更不會省略自己的姓氏,或者使用自己的網名,微博ID等,另外,這類人也有很大一部分使用的是某一圖騰的英文單詞,例如某人非常崇拜某一偶像,那麼,這個偶像就是他的圖騰,
其密碼很有可能與這個圖騰有關(例如JAY等)。
3. 自我保護意識 從公用密碼很少包含個人資訊這一點很容易印證自我保護的問題,一般來說,當某一網管或其他特定工作性質的人需要為某公用賬號設定密碼時,首先需要考慮的是密碼易為別人所理解和記憶,
然而,一個人在考慮祕密之類的東西時,首先聯想的是他自己身上的東西,由於這些東西涉及其個人隱私,因而很容易被他的潛意識所排除。
4. 愛與責任感 不少人的密碼會使用伴侶和孩子的姓名或生日、結婚紀念日、自己公司成立日期等諸如此類的資訊,這很明顯地體現了愛和責任感。 5. 完美主義傾向 完美主義傾向在密碼中主要體現在對稱與平衡上面,這從名字加日期的組合式密碼和帶下劃線的密碼可以很容易看出來,例如,某人叫做張三,生日是1980年1月1日,那麼,如果採用前者,
其密碼往往是zhangsan19800101或者zhangsan8011,不大可能設定成 z1h9a8n0g0s0a1n01這種型別;如果使用下劃線密碼,則很大可能會採用zhangsan_19800101
或者zhang_san_19800101,不大可能採用_zhangsan19800101或者z_hangsan19800101這種型別。

接下來是性格對一個人設定密碼的影響,我自己印證了一下,雖然不能100%準確,但是無疑,性格對一個人的行為是會造成很大的影響的,而密碼的設定也只是其中的一個方面而已。

不同人格型別的人群使用密碼的習慣
1. 責任感型
責任感通常來源於自信以及對家人強烈的愛,這種人通常在社會上比較成功,對社會現象有特定的判斷標準,且其看法不容易為別人所動,體現在生活習慣上,他們選擇工作時通常比較謹慎而且
目標明確,日常生活較為單一,除了工作以外,他們會花很多的時間陪家人,賺來錢通常花在家人身上或者交給愛人保管。這種人群的密 碼通常包括以下的要素:愛人的姓名、暱稱或生日,
結婚紀念日,孩子的姓名、暱稱或生日,老家的電話號碼,父親或母親的生日。
2. 潔癖型 此處指精神意義上的潔癖,這種人的思想中存在一個特定的界限,這個界限是無論自己還是別人都不允許逾越的禁區。這種人要麼特別成功,要麼整天抱怨;要麼像個 外交家,要麼極度孤僻;
同時他們別人的某些行為或者社會想象擁有常人所難以理解的評判標準,這種人的自我意識通常很強,而且對某種理想的人事或者生活擁有 強烈的嚮往,在他們的內心深處,通常埋藏著一段失
敗但又刻骨銘心的情感經歷。這一型別的人,其密碼最大的可能是使用圖騰。
3. 兩肋插刀型 這一類人通常具備很強的領袖氣質,而且極度自信,他們通常有很多的朋友,而且非常好動,屬於坐久了屁股就會長瘡的人,他們隔三岔五就會帶一大群朋友回家吃飯 或者睡覺,也經常夜不歸
宿,朋友需要幫忙的時候,他們通常會二話不說地伸出援手,也經常路見不平,他們通常自我意識強烈,很少對人設防。其密碼的型別通常 不是無腦型就是自己的姓名加上出生年月,且姓名必
定是姓氏加名字的全部字母,極少使用簡寫,頂多加上一兩位的防盜碼,有時也會使用親人的資訊。
4. 幻想型 幻想型通常存在於花季少女,這種人的QQ空間、部落格和微博通常帶有炫目的色彩,通常使用一些童話、神話或幻想世界中才有可能存在的事物,他們追求時尚,愛看 偶像劇,常會做出孩子氣
的行為,對小動物通常非常呵護,有不少人有養寵物的習慣,她們通常家庭條件較好,從小受慣長輩的寵愛,她們內心深處通常非常自私, 儘管外表並非如此。這種人的密碼型別通常使用圖騰,
且該圖騰一般是某個白馬王子的姓名或者生日,或者寵物的名字,或者某種她幻想中的理想事物。
5. 好鬥型 所謂好鬥型,並非指表面上愛與人爭吵或者打架,而是指表面上不懂聲色,但卻在暗處與你暗暗較勁的人,例如某次你考了第一名,而他考了第三名,在別人都恭維 你,要你請客吃飯的時候,
他會找藉口不去,或顯得心事重重,私底下會更加賣力學習,期望下一次考試超越你。這種人通常自我意識強烈,擁有讓人難以忍受的自 負,妒忌心也很強。這類人的密碼通常與他自己有關,
其使用的密碼,通常要麼包含自己的暱稱、姓名、手機號碼或生日,也有很大機率使用圖騰,且這個圖騰極有 可能是他在孩提時代或青春期對他成長產生強烈影響的事物。
6. 事業領袖型 這種人通常也具備很強的責任感,但與責任感型的人相比,他們的責任感的重心更多的放在工作上,他們嚴格要求自己,更加嚴格地要求自己的下屬和親人,有時會 讓人覺得無法忍受,工作起來,
這種人是廢寢忘食的,當他投入工作的時候,決不允許別人打擾他,說話的時候,一旦被人打斷或者聽到不想聽的話,就會直接質問 對方,這種人的密碼,很多時候會使用自己的名字或者暱稱,
且很多時候會使用縮寫或者不包括姓氏的名字拼音,或者與他公司或者事業有關的名稱或號碼,有時也 會使用圖騰,且該圖騰要麼是他認為別人絕對意想不到的事物。
7. 完美主義者 其實每個人或多或少都有完美主義的傾向,對於完美主義傾向比較顯著的人來說,他們未必注重自己著裝的品位,但是他們會追求有品質的事物;他們崇拜的物件通 常都是人格、智力都看上去
完美無缺的人;他們的房間通常物品擺放整齊,有時出門走到半路,想起家裡某個物品沒有擺放好,甚至會跑回來把他放到讓自己看起來 安心的位置;他們通常喜歡自己整理自己的房間,不喜
歡讓別人插手,因為,在他們看來,由別人經手的東西都是不完美的;這種人通常嚴於律己,潔身自好,而且 在道德上有種讓一些小人難以忍受的優越感;這類人也許也會講髒話,但在他們內
心深處,對純潔的愛情卻極度嚮往,大多數這方面的男性擁有處女情結,女性則通 常向往王子公主式樣的愛情。這類人的密碼,一旦使用名字,則名字很大機率是全名,或者是某一特定的單詞
(如love,great等具有美好意義的形容詞) 加上全名的簡稱,一旦使用日期則日期通常是20120101這樣的格式,很少會選擇1211或120101這種格式,一旦使用電話號碼,則電話號碼通常
包 含區號,他們手機的電話簿,每個人的人名通常是全名,極少會忽略姓,也很少使用暱稱;一旦使用下劃線,則下劃線的位置通常是能夠高度體現對稱美的。
8. 現實主義者 現實主義者體現在思想上,不相信奇蹟,他們行為上不容易走極端,但思想上卻非常極端,例如,他們相信某個名人的成功是難以複製的,尤其是他身邊的人;他們認 為官員中沒有好官,
娛樂圈的女性每個都被潛規則過,有時候和他們交談,你會忍受不了他們滿口的大道理。這類人的密碼,一旦使用姓名,通常是簡寫,日期則以 簡約型的居多,如果使用下劃線,他們對於
對稱沒有什麼要求,有時下劃線會出現在第一位,字母區分大小寫的在這一型別的人中最為常見。

 

4. 密碼強度的定義、以及怎樣生成一個強密碼

密碼強度是一個相對的概念,更準確地說應該是"投入-產出比",即一個黑客如果要破解一個密碼,他破解後獲得的收益如果不能遠大於(或適當大於)所付出的金錢+時間。

例如: 你截獲到了一個美國在海灣戰爭中的通訊密碼,卻需要花20年去破解,那即使20年後你破解出來了,這個密碼為你帶來的"收益"已經遠遠不及你付出的勞動了

則這樣的密碼就叫強密碼。而另一種判定密碼強度的演算法: 位數+字元範圍要大+字元組合至少3種以上。其實本質的原理也是一樣的。都是基於一種產出-收益平衡原理。

典型的強密碼的特徵
1. 使用更長的密碼
2. 使用一個對自己有意義的、易於記憶的短語作為密碼: LittleHannisagoodman。這比單純的密碼安全性要高
3. 儘量使用多的字母組合(數字、字母、特殊字元)
4. 使用複雜的密碼,並將它記在紙張上妥善保管之,比儲存在WEB系統中要來的安全,這是一個信任物件的問題,信任自己以及室友,比信任網路要好

 步驟

建立一個強密碼步驟:
1. 選定一個自己易於記憶的短語,例如: My son Aiden is three years old
2. 看目標WEB系統是否支援儲存空格:
    2.1) 支援空格: 直接使用這個短語作為下一步的輸入
    2.2) 不支援空格: 則將空格刪除,並單詞首字母大寫: MySonAidenIsThreeYearsOld
3. 對密碼短語增加複雜性,增加複雜性有以下幾種思路:
    3.1) 字母交換: swapping字母順序逆過來寫、每個單詞逆過來寫
    3.2) 拼寫錯誤(mispelling): 利用一些字母和數字的相似性進行替換: T-7、I-1... : My S0N Ayd3N 1s 3 y3eRs 0ld
    3.3) 拼寫錯誤: 利用一些字母之間的相似性: r-y.. : MyS0NAyd3N1sthreey3@Rs0ld
    3.4) 等價替換: 利用同義詞間的相似性進行替換: three-3.. : MyS0NAyd3N1s3y3eRs0ld
    3.5) 畸形字元插入: 將一些字母替換為特殊字元、或直接插入特殊字元: M$S0NAyd3N1s3y3#Rs0ld 
https://www.microsoft.com/zh-cn/security/pc-security/password-checker.aspx
避免使用的密碼:
1. 重複、有序的字元組合: 111123456、abcd
2. 避免簡單的"字元替換",例如M1cr0$0ft、P@ssw0rd這種密碼,對一個有經驗的黑客來說,這也是很容易破解的。但是這可以作為"縱深防禦"的一個手段之一。"字元替換"是一種很好的
  強化密碼的手段,和擴充套件長度和"misspellings"結合起來可以構成強度更好的密碼 3. 避免在密碼中使用和個人基本資訊相關的資料,例如: 姓名、身份證、生日、工號等等。因為這些資訊往往是黑客在"社工"你的時候第一個獲取到的資訊 4. 避免在密碼中出現字典中的常用詞、高頻詞。因為黑客大多數情況下會優先使用一些高頻詞字典對你的密碼進行破解 5. 儘量在不同的地方使用不同的密碼,當然這是你在的記憶允許的情況。在不同的網站使用不同的密碼,可以防止遭到黑客的"撞庫攻擊" 6. 避免將你的密碼儲存在"網上"。例如雲盤、雲筆記中,這樣做等於是在增大你的資訊洩漏風險

 

5. 撞庫在密碼破解中的應用

我們在上一篇文章(1)中學習了基於PreComputation的字典破解技術、以及彩虹表破解技術。

"撞庫攻擊"本質上還是一種基於字典的攻擊方式,只是這種字典比較特殊,它並不是簡單的字母空間、或所謂的高頻詞,而是使用歷次"脫庫事件"洩漏出來的"社工庫",這種資料庫相比普通的字典用用更好的命中率,因為破解率更高。

下面是我總結的一些密碼破解的場景:

使用者系統面臨的風險大體包括
1:弱口令掃描(密碼本身符合弱口令的特性: 長度、字元空間、組合情況、規律性、個人資訊性等)
2:注入(SQL隱碼攻擊獲取密碼)
3:偵聽(內網抓包)
偵聽要特別強調一下,不但儲存要注意安全,在傳輸和使用者錄入過程中的安全也非常關鍵:
    3.1) 這也是類似支付寶,銀行閘道器等產品經常要安全控制元件的原因。這些控制元件在本地直接對使用者輸入的密碼進行加密,然後把密文通過網路傳輸給目標伺服器,這樣保證了傳輸過程中的安全
    3.2) 除了使用控制元件進行本地加密,使用js進行本地加密也是一個很好的解決方案
4:爆庫(黑客暴力破解: Hydra)
    4.1) 防止爆庫要注意是不僅要防止資料庫被黑客暴力破解,還要考慮到如果被黑客暴力破解成功後,該怎麼把風險降到最低,即"縱深防禦原則"
    4.2) 密碼明文儲存的,100%是死路,可逆加密的,只要黑客用點心,也是死路。不可逆的,很多工程師會以為可以高枕無憂了,但是這就是"碰撞庫"的範疇
    4.3) cmd5、xmd5使用了"高頻"的字典進行破解,覆蓋率有90%以上
        4.4.1) MD5(pass)、MD5(MD5(pass))這種簡單的變形方式一般cmd5.com也會考慮在內
    4.4) 如果針對特定的目標,而且是黑客所能掌握的:
        4.4.1) 加密演算法被黑客知道
        4.4.2) 比如固定salt被黑客知道
        4.4.3) 加密的輪數被黑客知道
    黑客可以針對這種情況單獨構造對應的字典、或者彩虹表。進行鍼對性的破解,如果投入和產出比夠高,黑客肯定會去做。這裡要注意的是,這種手段只能針對特定的目標,面對批量
  的HASH資料,一個一個地去單獨生成字典(彩虹表)是不可能的,投入
-產出比太小。所以,salt和key stretcing還是很有效的防禦字典攻擊的技術思路。   注意一點: 爆庫不等於密碼洩露,爆庫+不正確的加密方式才是密碼洩露! 5:社工庫掃描 / 撞庫測試(歷次洩漏事件洩漏出的社工資料庫,拿待檢測的密碼到社工庫中去一一比對) 社工庫有一點需要注意,這次洩漏事件洩漏出來的褲子是否是明文,還是密文的褲子: 1) 如果是密文的褲子,那還是回到了爆庫的範疇中了,這些密碼需要進行破解後將其轉化成明-密文對的形式才可以使用 2) 如果是明文的褲子,那這個社工庫就可以直接使用了 關於社工庫的撞庫,我的理解是這樣的,社工庫本質上還是一個字典,甚至來說來不如字典全面和規範,正統的字典包含的是所有的明-密文對。而社工庫(這裡指密碼社工庫,社工庫有很多種,
有些是個人資訊型的社工庫)拿到的時候,往往並不包含完整的明-密文對,如果我們拿到了明文的褲子,我們需要使用某種演算法(MD5、SHA1)去生成相應的密文,將社工庫轉化成明-密文字典。
同時這個社工型的明-密文字典的破解成功率相當高,它更有可能覆蓋到當前網路上常用的使用者密碼(基於心理學的原理),也就是說,我們在使用這種字典進行密碼破解的時候,
有很大的機率能"撞庫成功"。 撞庫成功有兩個定義: 1) 這個待破解的密碼破解成功,即能夠找到它的明文 2) 這個待破解的密碼的明文存在"脆弱性",即它在一些洩漏事件中已經洩漏了,這個褲子有可能被黑客加以利用,從而更快的破解出這個密碼,也許它的長度很長、屬於強密碼,
    但是基於社工庫的字典破解攻擊完全可以無視這種密碼強度

 

 

相關文章