■楊浩
弱密碼一直是廣大安全人員的痛點(diǎn)。Web管理頁面、公網(wǎng)服務(wù)連接密碼(如郵件、SQL等)、內(nèi)網(wǎng)終端、服務(wù)器登錄等都是弱密碼的重災(zāi)區(qū)。一旦被人利用成功,損失巨大。
入侵角度:黑客利用弱密碼去爆破系統(tǒng),實(shí)現(xiàn)登錄終端或管理系統(tǒng)等;
防御角度:安全人員防止用戶設(shè)置弱密碼,阻止黑客利用弱密碼獲取系統(tǒng)權(quán)限;
但回想下弱密碼防御思路,明顯會(huì)發(fā)現(xiàn)防御和入侵的不對等性。
防御角度,傳統(tǒng)意義的弱密碼是指密碼單一或過于短,例如:123456,admin,123456789,這些容易被爆破,或容易被猜測到的密碼。且可以用簡單的策略屏蔽此類弱密碼。
但黑客實(shí)際爆破的時(shí)候用這個(gè)密碼庫成功率很低,一般還需要結(jié)合泄漏的各種“褲子”,其實(shí)也就是用戶用過歷史密碼,此外為進(jìn)一步提高破解率。還需要收集對方的社工信息,例如:
企業(yè)信息包含企業(yè)英文名、企業(yè)中文名拼音、企業(yè)域名、簡寫/縮寫、企業(yè)的各種品牌名、注冊日期、注冊地等等。
還有一些個(gè)人信息。
所以廣義看弱密碼庫=黑客密碼庫=(簡單密碼+歷史密碼+社工密碼)。
站在防御的角度,我們的思路必須和黑客對齊(盡量對齊)才能形成有效的防御措施,和黑客統(tǒng)一維度才能避免降維打擊,所以但防御角度應(yīng)該關(guān)注的弱密碼庫就是:
簡單密碼+歷史密碼+社工密碼。
有了這個(gè)共識(shí),接下來我們聊聊企業(yè)安全的弱密碼安全實(shí)踐。其實(shí)就是以此為基礎(chǔ)阻止用戶設(shè)置弱密碼并發(fā)現(xiàn)黑客的弱密碼爆破行為。
根據(jù)我們的分析,我們已經(jīng)知道了防御弱密碼庫的構(gòu)建思路,防御弱密碼庫=簡單密碼+歷史密碼+社工密碼,下面看下具體怎么構(gòu)建。
1.簡單密碼,這個(gè)可以參考微軟的建議,反向構(gòu)造即可,畢竟微軟有時(shí)還是比較靠譜的。此外還要加一些常規(guī)套路,如admin、qwerty、asdfg 之類的。
2.歷史密碼,其實(shí)就是個(gè)人的習(xí)慣罷了,這個(gè)這里有一些網(wǎng)上可以下到的“褲子”,如下,雖然都是老“褲子”,但有一定參考價(jià)值。
3.社工密碼,這個(gè)對于企業(yè)來說非常簡單,畢竟入職的時(shí)候HR要求填寫那么多信息,可以用來進(jìn)行構(gòu)建。但有一點(diǎn)需要注意,這個(gè)構(gòu)建是與個(gè)人相關(guān)的,即A的個(gè)人信息構(gòu)建出A的弱密碼,而不是B的。信息間沒必要重疊,否則會(huì)增加密碼庫大小,且意義不大。
做了以上3點(diǎn),我們就已經(jīng)具備了一個(gè)強(qiáng)大的弱密碼庫,少則幾百萬,多則幾個(gè)億。接下來就是看怎么用這份寶貴的數(shù)據(jù)了。
一般來說,企業(yè)檢測弱密碼的方法和黑客入侵沒有本質(zhì)區(qū)別,都是嘗試不同密碼,直至成功。不過:
1.賬號(hào)密碼的驗(yàn)證次數(shù)是有限制的,我們的弱密碼庫有幾個(gè)億,那根本無法在有生之年驗(yàn)證完所有密碼;
2.多數(shù)系統(tǒng)都有鎖定機(jī)制,當(dāng)驗(yàn)證次數(shù)過去會(huì)鎖定賬號(hào),影響用戶,這也是安全的領(lǐng)導(dǎo)無法接受的。
所以我們要換個(gè)思路。我們不做爆破,我們做對比,這樣就可以解決如上問題了。
密碼都是存儲(chǔ)在驗(yàn)證服務(wù)器的,無論是混淆還是加密,我們只需拿我們的弱密碼庫和密碼存儲(chǔ)文件對其即可。不過密碼一般都不是明文存儲(chǔ)的,MD5加鹽之類的是比較常規(guī)的存儲(chǔ)方法。想解決這個(gè)問題,我們就要利用我們防御者的優(yōu)勢了,畢竟密碼加密算法我們知道,我們只需要將弱密碼庫按照同樣方法轉(zhuǎn)換,然后拿轉(zhuǎn)換后的弱密碼庫進(jìn)行對比即可。發(fā)現(xiàn)存儲(chǔ)密碼的文件存在同樣的字符,則可確定對應(yīng)用戶設(shè)置了弱密碼。不但高效的檢測了全量的弱密碼,而且如果用戶設(shè)置了非弱密碼庫的密碼我們也無法獲知用戶的明文密碼(前提是單向加密),捎帶解決了隱私問題。
無論我們怎么檢測,都無法阻止黑客進(jìn)行弱密碼爆破行為。傳統(tǒng)的方案是給用戶驗(yàn)證次數(shù)設(shè)定閾值,超過閾值則報(bào)警。但用戶也會(huì)輸錯(cuò)密碼,且很多系統(tǒng)很殘,經(jīng)常將同一個(gè)錯(cuò)誤密碼驗(yàn)證多次,如AD系統(tǒng),這就產(chǎn)生很多誤報(bào)。為更精準(zhǔn)的發(fā)現(xiàn)爆破行為,我們還是要繼續(xù)利用我們防御者的優(yōu)勢,我們檢測用戶發(fā)起的密碼是否在我們的弱密碼庫,如在弱密碼庫中的密碼>N,則可認(rèn)定存在爆破行為。這樣可以精準(zhǔn)發(fā)現(xiàn)爆破行為又可以規(guī)避系bug。
除了單一賬戶&多個(gè)弱密碼的爆破方式,還有單一弱密碼&多個(gè)賬戶的爆破形式,這種情況一般都是黑客認(rèn)定一定存在一個(gè)這樣的密碼(黑客其他方式獲得或就是固執(zhí)的認(rèn)為有),這里會(huì)出現(xiàn)兩種情況:
1.單一密碼在弱密碼表中,這個(gè)我們需要在我們原有的模型上加上賬戶數(shù)據(jù),將賬戶數(shù)×弱密碼在弱密碼表的次數(shù)=閾值>M即可。
2.單一密碼不在弱密碼表中,這個(gè)就需要獨(dú)立分析了,統(tǒng)計(jì)使用同一密碼的使用賬戶數(shù)>M即可。
綜上,我們說了弱密碼庫的思路,也討論了防御角度弱密碼庫的構(gòu)建、弱密碼的檢測、弱密碼攻擊的發(fā)現(xiàn)。雖然說了很多,但其實(shí)講的都比較概括,具體落地過程中必定會(huì)遇到各種問題,如Windows的NTLM hash的密碼存儲(chǔ)方式等。