運(yùn)用CrackLib構(gòu)建安全的Unix口令 |
發(fā)布時間: 2012/6/15 18:21:59 |
作為Internet上最流行的億恩科技服務(wù)器操作系統(tǒng),UNIX安全(服務(wù)器租用找:51033397)性倍受關(guān)注。Unixd的安全(服務(wù)器租用找:51033397)性主要靠口令實(shí)現(xiàn),因此,Unix口令加密算法幾度改進(jìn),現(xiàn)在普遍采用DES算法對口令文件進(jìn)行25次加密,而對每次DES加密產(chǎn)生的結(jié)果,都要用2的56次方次查找與匹配才能進(jìn)行一次遍歷,要破解這樣的口令,其工作量是巨大的,所以從理論上說這種口令是相當(dāng)安全(服務(wù)器租用找:51033397)的。然而不幸的是我們?nèi)匀徊粫r聽道口令被攻破的消息。這些口令是如何被攻破的,我們又怎樣才能保證口令的安全(服務(wù)器租用找:51033397)呢。下面將對這一問題進(jìn)行探討。 Unix口令文件的格式及安全(服務(wù)器租用找:51033397)機(jī)制 Unix的口令文件passwd是一個加密后的文本文件,儲存在/etc目錄下。該文件用于用戶登錄時校驗(yàn)用戶的口令,僅對root權(quán)限可寫?诹钗募忻啃写硪粋用戶條目,格式為:LOGNAME:PASSWORD:UID:GID:USERINFO:HOME:SHELL。每行的頭兩項是登錄名和加密后的口令,UID和GID是用戶的ID號和用戶所在組的ID號,USERINFO是系統(tǒng)管理員寫入的有關(guān)該用戶的信息,HOME是一個路徑名,是分配給用戶的主目錄,SHELL是用戶登錄后將執(zhí)行的shell(若為空格則缺省為/bin/sh)。目前多數(shù)Unix系統(tǒng)中,口令文件都做了Shadow變換,即把/etc/passwd文件中的口令域分離出來,單獨(dú)存在/etc/shadow文件中,并加強(qiáng)對shadow的保護(hù),以增強(qiáng)口令安全(服務(wù)器租用找:51033397)。 Unix系統(tǒng)使用一個單向函數(shù)crypt()來加密用戶的口令。Crypt()是基于DES的加密算法,它將用戶輸入的口令作為密鑰,加密一個64bit的0/1串,加密的結(jié)果又使用用戶的口令再次加密;重復(fù)該過程,一共進(jìn)行25次。最后的輸出為一個13byte的字符串,存放在/etc/passwd的PASSWORD域。單向函數(shù)crypt()從數(shù)學(xué)原理上保證了從加密的密文得到加密前的明文是不可能的或是非常困難的。當(dāng)用戶登錄時,系統(tǒng)并不是去解密已加密的口令,而是將輸入的口令明文字符串傳給加密函數(shù),將加密函數(shù)的輸出與/etc/passwd文件中該用戶條目的PASSWORD域進(jìn)行比較,若匹配成功,則允許用戶登錄系統(tǒng)。 口令破解原理 口令破解通常有蠻力攻擊和字典攻擊兩種方式。Unix中一共有[0x00~0xff]共128個字符,其中95個字符(10(數(shù)字)+33(標(biāo)點(diǎn)符號)+26*2(大小寫字母))可作為口令的字符。假設(shè)m為可能使用的字符集的大小,n為口令的長度,則可生成的口令數(shù)為m的n次冪,隨著字符集的擴(kuò)大與口令長度的增加,口令攻擊嘗試次數(shù)將迅速增加。如口令長度為6,取字母和數(shù)字組合,可能性是62的6次冪56,800,235,584。但如果5個字母是一個常用漢字的拼音或英文單詞,估算一下常用詞約為10000條,從10000個常用詞中取一個詞與任意一個數(shù)字字符組合成口令,則僅10000*10=100000(10萬種可能)。在口令的設(shè)置過程中,還有許多個人因素在起作用,為使自己的口令容易記憶,許多人往往將個人的姓名、生日、電話號碼、街道的號碼等作為口令,這樣便為口令的破解留下了方便之門。貝爾實(shí)驗(yàn)室的計算機(jī)安全(服務(wù)器租用找:51033397)專家R.Morris和K.Thompson提出了這樣一種攻擊的可能性:可以根據(jù)用戶的信息建立一個他可能使用的口令的字典。比如:他父親的名字、女朋友的生日或名字,街道的名字等等。然后對這個字典進(jìn)行加密,每次拿出一個經(jīng)過加密計算的條目與口令文件比較,若一致,口令就被猜到了。也許有人認(rèn)為口令毫無規(guī)律可言,字典中不會有,計算機(jī)是破譯不了的,那就大錯特錯了。有很多專門生成字典的程序,比如:Dictmake、txt2dict、xkey等等。以dictmake為例:啟動程序后,計算機(jī)會要求輸入最小口令長度、最大口令長度、口令包含的小寫字符、大寫字符、數(shù)字、有沒有空格、含不含標(biāo)點(diǎn)符號和特殊字符等一系列的問題。當(dāng)回答完了計算機(jī)提出的問題后,計算機(jī)就會按照給定的條件自動將所有的組合方式列出來并存到文件中,而這個文件就是資料字典。目前,在因特網(wǎng)上,有一些數(shù)據(jù)字典可以下載,包含的條目從1萬到幾十萬條。數(shù)據(jù)字典一般囊括了常用的單詞。攻擊者一旦通過某種途徑獲得了passwd文件,破譯過程便只需一個簡單的C程序即可完成。Unix中有一組子程序可對/etc/passwd文件進(jìn)行方便的存取。getpwuid()函數(shù)可從/etc/passwd文件中獲取指定的UID的入口項。getpwnam()函數(shù)可在/etc/passwd文件中獲取指定的登錄名入口項。這兩個子程序返回一指向passwd結(jié)構(gòu)的指針,該結(jié)構(gòu)定義在/usr/include/pwd.h中,定義如下: 本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |