第一章 口令的重要性
當(dāng)我們談到網(wǎng)絡(luò)安全的時候,就經(jīng)??梢愿粋€詞聯(lián)系到一起,那就是。其實,我們印象中的黑客是帶有偏頗的感情色彩的,比較明確的說法是叫做者。
黑客跟入侵者有什么區(qū)別呢?
黑客,指對于任何計算機的奧秘都有強烈興趣的人?!昂诳汀贝蠖际浅绦騿T,他們具有操作系統(tǒng)和編程語言方面的高級知識,知道系統(tǒng)中的漏洞及其原因所在;他們不斷追求更深的知識,并公開他們的發(fā)現(xiàn),與其他人分享;并且沒有破壞數(shù)據(jù)的企圖。
入侵者,是指懷著不良的企圖,闖入甚至破壞遠程機器系統(tǒng)完整性的人。 “入侵者”利用獲得的非法訪問權(quán),破壞重要數(shù)據(jù),拒絕合法的請求,或為了自己的目的制造麻煩?!叭肭终摺焙苋菀鬃R別,因為他們的行為是惡意的。
雖然這才是黑客和入侵者的確切含義,但是在我們的日常生活中,人們在討論到“黑客”這個字眼的時候,還是帶有強烈的貶義色彩,或者說我們大家都把黑客跟入侵者聯(lián)系到了一起,本文所講的內(nèi)容就是關(guān)于大家概念上的黑客,這其中既包括善意的真正的黑客,也包括惡意的入侵者,對于這些區(qū)別,我們只要心里有數(shù)就可以了。
1-1 黑客攻擊口令的手段
在現(xiàn)實中,黑客攻擊目標(biāo)的時候,90%會把破譯普通用戶的口令作為第一步。先用“finger 遠端主機名”找出主機上的用戶帳號,然后用字典窮舉法進行攻擊。因為事實上,很多用戶都把自己常用的英文單詞或者自己的姓名作為口令。通過一些程序,自動地從計算機字典里面去單詞作為用戶的口令輸入給遠端的主機,嘗試進入系統(tǒng)。這個破譯過程由程序來完成的。大概10幾個小時就可以把字典里的單詞都完成。這類程序的典型代表是LetMeIn。
如果這種方法不能奏效,黑客就會仔細地尋找目標(biāo)的薄弱環(huán)節(jié)和漏洞,伺機奪取目標(biāo)中存放口令的文件shadow或者passwd。在現(xiàn)代的UNIX系統(tǒng)中,用戶的基本信息都是存放在passwd文件中的,所有的口令都經(jīng)過DES加密后專門放在shadow文件中,處于嚴(yán)密的保護下。老版本的UNIX,的口令都在passwd文件中。一旦獲得了這個文件,就可以用專用的破解DES加密算法的程序來解口令。
我們的口令是否是安全的呢?
1-2 口令的取值范圍
在UNIX下,可以當(dāng)作口令來用的字符一共有:10(數(shù)字)+33(標(biāo)點符號)+26*2(大小寫字母) =95個,如果口令取任意5個字母+1 位數(shù)字或符號的可能性是:52*52*52/*52*52*43=163億,但是如果5個字母是常用的詞,那么假設(shè)常用的詞是5000個,考慮到大小寫,將有可能性:5000*(2+2+2+2+2)*43= 688萬 可能性。
這已經(jīng)可以利用微機來進行窮舉了,這樣的簡單口令用不了3分鐘就能破譯,如果有人用P200進行攻擊,那么一周內(nèi)可以進行200次攻擊,所以6位的口令是很不安全的。
遺憾的是許多用戶都是這么設(shè)定的,而黑客不需要破解所有用戶的口令,他們只需要一個普通用戶的口令就足夠了,只要潛入系統(tǒng),就可以利用系統(tǒng)的漏洞而獲得系統(tǒng)的控制權(quán),所以使用簡單口令是對整個主機安全的不負(fù)責(zé)任。這是首先我們應(yīng)該重視的問題。
為什么口令的解密是相對比較容易的事情呢?就是因為目前廣泛使用口令加密算法是完全公開的DES 算法,這種算法之所以公開,是因為一直都沒有人能夠找到一種方法能逆向解開它加密的信息。DES現(xiàn)在的加密算法在UNIX下的生成程序叫Crypt,它的源碼在標(biāo)準(zhǔn)GUN分布式系統(tǒng)C庫中可以找到。
Cgypt的版本可能不同,但是它的一般的過程如下:
1)以明碼正文(或密碼術(shù)語)形式取出口令。
2)把口令作為關(guān)鍵字,用一系列的“0”進行加密(共64位)。編碼結(jié)果成為加密正文
某些Crypt版本,尤其是Crypt (3),采用將上述結(jié)果再進行加密,可以說是相當(dāng)堅固的。
“密碼算法(DES)把一個64位的二進制值轉(zhuǎn)變成以56位變量為基礎(chǔ)的、唯一的64位二進制值。如果只用全64位輸入,并且如果56位變量是隨機選取的,則除了用已知的DES輸入輸出值去嘗試所有可能的關(guān)鍵字外,是沒有什么技術(shù)能夠發(fā)現(xiàn)DES選擇的關(guān)鍵字的,因為56位的關(guān)鍵字存在超過 70000000000000000種可能性?!?/P>
雖然DES加密算法如此堅固,但是想要解開它并不是很難,因為它可以通過比較法解開:
1)獲得一個字典文件,該文件是一個真正的單詞明碼正文列表。
2)把這些單詞用所有的加密程序進行解密,這種加密符合DES標(biāo)準(zhǔn)。
3)把每個加密的單詞于目標(biāo)口令比較,如果匹配,則該目標(biāo)口令被破解的可能性超過90%。
令人驚異的是,現(xiàn)在的很多解密程序都采用了相當(dāng)好的規(guī)則來處理字表中的每一個單詞,比如:
n 大小寫交替使用。
n 把單詞的正向、反向拼寫后,接在一起。
n 在沒個單詞開頭或者結(jié)尾加數(shù)字或符號。
n 交替使用字母和數(shù)字
這些很好的規(guī)則雖然加大了破解的時間,但是破解成功的可能性也增大了。下面簡單地介紹幾個有名的破解程序。
1-3幾種口令解密程序
1-3-1 Crack
破解UNIX口令的最著名的工具,現(xiàn)在已經(jīng)成為了檢查網(wǎng)絡(luò)口令弱點的工業(yè)標(biāo)準(zhǔn)。它由Alec D.E.Muffett編寫??梢悦赓M得到,僅用于UNIX平臺。在使用中,如果口令文件很小,時間和資源都不成問題,但是如果口令文件比較大,則要花費很長的時間和耗費相當(dāng)?shù)馁Y源。它也可以把工作量分擔(dān)到其他的機器上。它極其輕便,可能是最可靠的“口令入侵者”。
1-3-2 John The Ripper
它是一個破解UNIX口令的程序,它運行于DOS/Windows平臺上,雖然早期版本有些缺陷,但是它具有擴展選項,它糅合了許多其他程序都有的諸多優(yōu)點和需要。它大有趨勢要成為最流行的破解程序。
1-3-3 CrackerJack
專門為DOS設(shè)計的、著名的UNIX口令入侵者。它不是Crack的直接移植,但是它運行速度極快,而且易于使用。這是一個偶像派的程序,最新版本用GUN C和C ++編譯,速度更快了。
1-3-4 Hades
Hades是另一個破解UNIX中/etc/passwd文件口令的程序,運行速度比Crack快,比CrackerJack更快,它主要的用途在于顯示加密口令中的薄弱口令,所以它的幫助很多,界面也友好,是個良文檔。
1-3-5 Star Cracker
它工作在DOS4GW環(huán)境中。它很有特別,具有斷電預(yù)防措施,定時釋放操作,它還具有良好的選項菜單,這個功能使破解過程非常容易。應(yīng)該說是一個好的程序。
1-3-6 Killer Cracker
它是另外一個非常著名的破解程序,幾乎總是以源碼來發(fā)表??梢栽谌魏尾僮飨到y(tǒng)中運行,在UNIX系統(tǒng)下運行最好,可以操縱一些規(guī)則,包括大小寫敏感規(guī)則。可以指定操作方法,包括按照什么順序測試單詞。BSD UNIX系統(tǒng)中可以獨占CPU時間,還可以檢查當(dāng)前目標(biāo)口令文件的非打印、控制字符。是個很完全的程序。
1-3-7 Claymore
這個程序可以運行在任何Windows平臺上,是一個功能強大的“入侵者”,不僅可以破解UNIX的/etc/passwd文件,還可以用于破解其他類型的程序(包括那些需要登錄名/口的程序)它還有很多過于熱情的功能,它是可以算得上是真正強大的破解程序。
1-3-8 Merlin
它不是一個“口令入侵者”,而是一個管理工具,它管理“口令入侵者”,也管理掃描器、審查工具以及其他與安全有關(guān)的應(yīng)用程序。它只用于LUINX平臺,也可以用在其他的UNIX平臺包括IRIX、SunOS、Solaris等。而且它的擴展性很好,人們可以把所有想的到的工具都加進去。它指導(dǎo)了一個重要的發(fā)展方向。
1-3-9 PGPCrack
這是一個很有趣的工具,因為PGP算法是幾乎無法直接破解的,但是Miller發(fā)現(xiàn)口令是一個很好的突破口,這個程序提供了一個口令文件和源代碼,可以運行在DOS 和UNIX環(huán)境下。
現(xiàn)在可以看出來,用戶的口令是何等的重要,而且必須聲明的是,最不安全的因素并不是超級用戶的密碼,而是普通用戶的密碼,因為一個好的黑客,很容易就能用普通用戶的身份來尋找和利用系統(tǒng)中的漏洞獲得超級用戶的權(quán)限。所以我們必須要注意所有密碼的管理,主要的要點是:
n 不要把口令寫下來。
n 最好用8位的口令。
n 不要選取顯而易見的信息做口令。
n 不要讓別人知道。
n 不要在不同系統(tǒng)上使用同一口令。
n 輸入口令時應(yīng)在無人的情況下進行。
n 口令中最好要有大小寫字母、字符、數(shù)字。
n 定期改變自己的口令。
n 定期用破解口令程序來檢測shadow文件是否安全。
第二章 緩沖區(qū)溢出原理分析
緩沖區(qū)溢出(buffer overflow)是一種系統(tǒng)攻擊的手段,通過往程序的緩沖區(qū)寫入超出其長度的內(nèi)容,造成緩沖區(qū)的溢出,從而破壞程序的堆棧,使程序轉(zhuǎn)而執(zhí)行其它的命令,以達到攻擊的目的。根據(jù)統(tǒng)計,通過緩沖區(qū)溢出進行的攻擊占所有系統(tǒng)攻擊總數(shù)的80%以上。之所以緩沖區(qū)溢出可以實現(xiàn)的原因是系統(tǒng)程序沒有檢測用戶輸入的參數(shù),也就是沒有檢測變量的長度是否符合要求。
一個例子:
example1.c
void function(char *str) {
char buffer[16];
strcpy(buffer,str);
}
上面的strcpy()將直接把str中的內(nèi)容copy到buffer中。這樣只要str的長度大于16,就會造成buffer的溢出,使程序出錯。存在像strcpy()這樣的標(biāo)準(zhǔn)函數(shù)還有strcat()、sprintf()、vsprintf()、gets()、scanf(),以及在循環(huán)內(nèi)的getc()、fgetc()、getchat()等。
當(dāng)然,隨便向緩沖區(qū)里填東西造成它溢出一般只會出現(xiàn)”Segmentation fault”段錯誤,而不能達到攻擊的目的。
1