現(xiàn)在,大量的網(wǎng)絡(luò)服務(wù)器開始使用Linux操作系統(tǒng),Linux服務(wù)器的安全性也開始受到關(guān)注。對(duì)Linux服務(wù)器攻擊的定義是:攻擊是一種旨在妨礙、損害、削弱、破壞Linux服務(wù)器安全的未授權(quán)行為,攻擊的范圍可以從服務(wù)拒絕直至完全危害和破壞Linux服務(wù)器。對(duì)Linux服務(wù)器攻擊有許多種類,從攻擊深度的角度說(shuō)明,我們可以把攻擊分為四級(jí):服務(wù)拒絕攻擊(DoS)、本地用戶獲取了非授權(quán)的文件的讀寫權(quán)限、遠(yuǎn)程用戶獲得特權(quán)文件的讀寫權(quán)限、遠(yuǎn)程用戶獲得根權(quán)限。下面,我們將選取一些有針對(duì)性的經(jīng)典工具,一一加以說(shuō)明。
1、溢出:從開源代碼開始
??Linux系統(tǒng)中最常見(jiàn)的缺陷就是緩沖區(qū)溢出,緩沖區(qū)以前可能被定義為“包含相同數(shù)據(jù)類型的實(shí)例的一個(gè)連續(xù)計(jì)算機(jī)內(nèi)存塊”。極其常見(jiàn)的緩沖區(qū)種類是簡(jiǎn)單的字符數(shù)組,溢出就是數(shù)據(jù)被添加到分配給該緩沖區(qū)的內(nèi)存塊之外。由此,我們可以看到,作為開源系統(tǒng),Linux系統(tǒng)中的代碼檢查就顯得十分重要。對(duì)于攻擊者和管理員來(lái)說(shuō),誰(shuí)首先重視它,就在一定程度上取得了主動(dòng)權(quán)。
(1)SPIKE
??SPIKE是immunitysec公司的Dave Aitel寫的一個(gè)黑盒進(jìn)行安全測(cè)試的工具。SPIKE提供了各種各樣的構(gòu)造函數(shù)。例如s_binary可以構(gòu)造二進(jìn)制數(shù)據(jù),s_string可以構(gòu)造字符串,s_unistring可以構(gòu)造UNICODE字符串等。SPIKE的另一個(gè)優(yōu)勢(shì)是Dave Aitel的Fuzz理論,它可以構(gòu)造一些特殊的數(shù)字或者字符串作為程序的輸入,檢查程序是否能夠處理這些異常數(shù)據(jù)。此外,SPIKE里邊提供了常見(jiàn)的協(xié)議支持,例如SUN RPC和MS RPC。
(2)Lint
??Lint能夠檢查的部分錯(cuò)誤列表:可能的空指針;在釋放內(nèi)存之后使用了該指針;賦值次序問(wèn)題;拼寫錯(cuò)誤等。通常,一個(gè)C/C++的編譯器假設(shè)程序是正確的,而Lint恰恰相反,因此,它優(yōu)于編譯器執(zhí)行的一般性檢查。Lint還可以貫穿多個(gè)文件來(lái)執(zhí)行它的錯(cuò)誤檢查和代碼分析,這是編譯器做不到的。比較流行的Lint 程序有:PC-lint是一個(gè)由Gimpel Software提供的支持C/C++的商用程序;Splint (原來(lái)的 LCLint) 是一個(gè)GNU免費(fèi)授權(quán)的 Lint程序,但是只支持C不支持C++。
??運(yùn)行 Lint時(shí),和正常的編譯器一樣,只要把直接加入的makefile 中就可以了。通過(guò)配置選項(xiàng)、代碼注釋等方法可以控制和校準(zhǔn)Lint的輸出。例如,這里有一個(gè)返回NULL指針的函數(shù),Splint可以通過(guò)下面的注釋 /*@null@*/ 來(lái)識(shí)別:
/*@null@*/ void *test(void)
{
// a function that returns NULL!
return NULL;
}
這樣做有兩個(gè)目的:防止Splint為這個(gè)返回Null指針的函數(shù)告警;保證Splint 檢查任何調(diào)用該函數(shù)的代碼中使用該函數(shù)的返回指針是有效的。
(3)Flawfinder
??Flawfinder 是一款用Python編寫的c、c++程序安全審核工具,可以檢查潛在的安全風(fēng)險(xiǎn)。它通過(guò)搜索檢測(cè)文件源代碼從而得到潛在的安全漏洞,支持檢測(cè)數(shù)據(jù)庫(kù),以HTML格式生成報(bào)告。
2、嗅探器:Linux上的“狗鼻子”
??Sniffer是一種常用的收集有用數(shù)據(jù)方法,它幾乎能得到任何以太網(wǎng)上的傳送的數(shù)據(jù)包。這些數(shù)據(jù)可以是用戶的帳號(hào)和密碼,可以是一些商用機(jī)密數(shù)據(jù)等等。這些嗅探器很容易被入侵者完成入侵以后種植在受害者服務(wù)器當(dāng)中,有的只是簡(jiǎn)單的用來(lái)捕捉用戶名和密碼,有的則非常強(qiáng)大可記錄所有的網(wǎng)絡(luò)數(shù)據(jù)流。Linux操作系統(tǒng)下有很多這樣的優(yōu)秀工具,下面,我們來(lái)具體看看。
(1)tcpdump
??這是一個(gè)專業(yè)的網(wǎng)絡(luò)管理工具,而且這個(gè)工具也留下了不少網(wǎng)絡(luò)攻擊故事。它能把匹配規(guī)則的數(shù)據(jù)包的包頭顯示出來(lái),使用TCPDump去查找網(wǎng)絡(luò)問(wèn)題或者去監(jiān)視網(wǎng)絡(luò)上的狀況.。tcpdump的安裝十分簡(jiǎn)單,一般由兩種安裝方式。一種是以rpm包的形式來(lái)進(jìn)行安裝。另外一種是以源程序的形式安裝。以rpm包的形式安裝是最簡(jiǎn)單的安裝方法,通過(guò)rpm命令可以直接安裝。以超級(jí)用戶登錄后,使用命令:#rpm -ivh tcpdump.rpm,就可以順利安裝了。
??Tcpdump采用命令行的方式使用,它的命令格式為:
tcpdump [-adeflnNOpqStvx ] [ -c 數(shù)量 ] [ -F 文件名 ]
[ -i 網(wǎng)絡(luò)接口 ] [ -r 文件名] [ -s snaplen ]
[ -T 類型 ] [ -w 文件名 ] [表達(dá)式 ]
??其中,“-a”表示將網(wǎng)絡(luò)地址和廣播地址轉(zhuǎn)變成名字;“-d”表示將匹配信息包的代碼以人們能夠理解的匯編格式給出;“-e”表示在輸出行打印出數(shù)據(jù)鏈路層的頭部信息;“-c”表示在收到指定的包的數(shù)目后,tcpdump就會(huì)停止;“-F”表示從指定的文件中讀取表達(dá)式,忽略其它的表達(dá)式;“-i”表示指定監(jiān)聽的網(wǎng)絡(luò)接口;“-r”表示從指定的文件中讀取包(這些包一般通過(guò)-w選項(xiàng)產(chǎn)生);“-w”表示直接將包寫入文件中,并不分析和打印出來(lái);“-T”表示將監(jiān)聽到的包直接解釋為指定的類型的報(bào)文,常見(jiàn)的類型有遠(yuǎn)程過(guò)程調(diào)用和snmp簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議。
??tcpdump的表達(dá)式是一個(gè)正則表達(dá)式,tcpdump利用它作為過(guò)濾報(bào)文的條件,如果一個(gè)報(bào)文滿足表達(dá)式的條件,則這個(gè)報(bào)文將會(huì)被捕獲。如果沒(méi)有給出任何條件,網(wǎng)絡(luò)上所有的信息包將會(huì)被截獲。在表達(dá)式中一般如下幾種類型的關(guān)鍵字,一種是關(guān)于類型的關(guān)鍵字,主要包括host、net、port等。第二種是確定傳輸方向的關(guān)鍵字,主要包括src , dst ,dst or src, dst and src等,這些關(guān)鍵字指明了傳輸?shù)姆较?。第三種是協(xié)議的關(guān)鍵字,主要包括fddi,ip ,arp,rarp,tcp,udp等類型。除了這三種類型的關(guān)鍵字之外,其他重要的關(guān)鍵字如下:gateway、broadcast、less、greater,還有三種邏輯運(yùn)算“或、非、與”,這些關(guān)鍵字可以形成強(qiáng)大的組合條件來(lái)滿足人們的需要。例如,想要截獲所有210.27.48.1 的主機(jī)收到的和發(fā)出的所有的數(shù)據(jù)包:
??#tcpdump host 210.27.48.1
??想要獲取主機(jī)210.27.48.1除了和主機(jī)210.27.48.2之外所有主機(jī)通信的ip包,使用命令:
??#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
??如果想要獲取主機(jī)210.27.48.1接收或發(fā)出的telnet包,使用如下命令:
??#tcpdump tcp port 23 host 210.27.48.1
下面我們介紹幾種典型的tcpdump命令的輸出信息。比如,使用如下命令:
??#tcpdump --e host ice
??其中,ice 是一臺(tái)裝有l(wèi)inux的主機(jī),她的MAC地址是2E:19:24:28:AF:1A。H219是一臺(tái)裝有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一條命令的輸出結(jié)果如下所示:
??21:50:12.847509 eth0 < 8:0:20:79:5b:46 2E:19:24:28:AF:1A ip 60: h219.33357 > ice.telnet 0:0(0) ack 22535 win 8760 (DF)
??分析:21:50:12是顯示的時(shí)間,847509是ID號(hào),eth0 <表示從網(wǎng)絡(luò)接口eth0 接受該數(shù)據(jù)包,eth0 >表示從網(wǎng)絡(luò)接口設(shè)備發(fā)送數(shù)據(jù)包, 8:0:20:79:5b:46是主機(jī)H219的MAC地址,它表明是從源地址H219發(fā)來(lái)的數(shù)據(jù)包。2E:19:24:28:AF:1A是主機(jī)ICE的MAC地址,表示該數(shù)據(jù)包的目的地址是ICE . ip 是表明該數(shù)據(jù)包是IP數(shù)據(jù)包,60 是數(shù)據(jù)包的長(zhǎng)度, h219.33357 > ice.telnet 表明該數(shù)據(jù)包是從主機(jī)H219的33357端口發(fā)往主機(jī)ICE的TELNET(23)端口. ack 22535 表明對(duì)序列號(hào)是222535的包進(jìn)行響應(yīng). win 8760表明發(fā)送窗口的大小是8760.
再比如,使用命令:
??#tcpdump arp
??到的輸出結(jié)果是:
??22:32:42.802509 eth0 > arp who-has route tell ice (2E:19:24:28:AF:1A)
??22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (2E:19:24:28:AF:1A)
??分析: 22:32:42是時(shí)間戳, 802509是ID號(hào), eth0 >表明從主機(jī)發(fā)出該數(shù)據(jù)包, arp表明是ARP請(qǐng)求包, who-has route tell ice表明是主機(jī)ICE請(qǐng)求主機(jī)ROUTE的MAC地址。 2E:19:24:28:AF:1A是主機(jī)ICE的MAC地址。此外,這個(gè)軟件還可以分析UDP等數(shù)據(jù)包等,結(jié)合LINUX環(huán)境熟練使用后,我們就可以充分發(fā)揮它的威力。
(2)Hunt
??Hunt具有直觀的命令追蹤和會(huì)話錄制功能,它以tar.gz的格式發(fā)布,文件下載后,首先需要解壓縮。運(yùn)行Hunt后,將啟動(dòng)一個(gè)很直觀的菜單,界面如下:
--- Main Menu --- rcvpkt 0, free/alloc 63/64 ------
l/w/r) list/watch/reset connections
u) host up tests
a) arp/simple hijack (avoids ack storm if arp used)
s) simple hijack
d) daemons rst/arp/sniff/mac
o) options
x) exit
*> w
0) 192.168.0.1 [1049] --> 192.168.0.2 [23]
choose conn> 0
dump [s]rc/[d]st/[b]oth [b]> b
注:上面的輸入(黑色字體部分)指示hunt來(lái)記錄0號(hào)連接,并輸出源和目的信息,則hunt將活動(dòng)信息到終端屏幕上??梢钥吹?,hunt的輸出非常直觀明了,易于閱讀。hunt還提供有以下工具:允許指定任意一個(gè)感興趣的連接,而不是記錄所有的東西;允許指定任意一個(gè)連接,而不僅僅是以SYN剛剛開始的連接;提供活動(dòng)會(huì)話劫持。
(3)Linsniffer
??linsniffer是一個(gè)簡(jiǎn)單實(shí)用的嗅探器。它主要的功能是捕捉用戶名和密碼。
??軟件下載后,使用下面的命令來(lái)編譯和運(yùn)行l(wèi)insniffer:
??$cc linsniffer.c -o linsniffer
??$linsniffer
??啟動(dòng)以后linsniffer將創(chuàng)建一個(gè)空文件:tcp.log來(lái)存儲(chǔ)嗅探結(jié)果。在測(cè)試中我創(chuàng)建一個(gè)名為cndes的用戶,密碼為123456。然后使用該用戶來(lái)登錄Linux服務(wù)器,并進(jìn)行一些常見(jiàn)的用戶操作。這是一個(gè)典型的用戶操作過(guò)程。下面,我們看看linsniffer產(chǎn)生的嗅探結(jié)果:
gnss => linux.test.net [21]
USER cndes
PASS 123456
SYST
PORT 172,16,0,1,4,192
LIST -al
PORT 172,16,0,1,4,193
LIST
PORT 172,16,0,1,4,194
LIST -F
CWD lg
PORT 172,16,0,1,4,195
LIST -F
??輸出內(nèi)容十分直觀。我們可以分析如下:首先,它記錄到Linux主機(jī)的FTP連接:gnss => linux.test.net [21]。然后,linsniffer捕獲了用戶名和密碼。最后,linsniffer記錄了cndes使用的每一個(gè)命令。輸出結(jié)果非常清楚,非常適合竊聽密碼及記錄常見(jiàn)的活動(dòng)。不過(guò),這個(gè)軟件不太適合進(jìn)行更加復(fù)雜的分析。
??(4)Linux-sniff
??linux_sniffer提供相對(duì)更復(fù)雜的探測(cè)結(jié)果。首先,使用如下命令編譯linux_sniffer
??$cc linux_sniffer.c -o linuxsniff
??下面是被linux_sniffer記錄的一次telnet會(huì)話過(guò)程:
GNSS 2# telnet 192.168.0.1
Connected to 192.168.0.1.
login: cndes
password:
[cndes@linux2 cndes]$ w
19:55:29 up 58 min, 4 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 7:44pm 27.00s 0.17s 0.06s -bash
root tty2 7:46pm 1:56 0.24s 0.01s linuxsniff
root tty3 7:44pm 10:43 0.17s 0.07s -bash
cndes ttyp0 gnss 7:55pm 1.00s 0.26s 0.04s w
[cndes@linux2 cndes]$ who
root tty1 May 20 19:44
root tty2 May 20 19:46
root tty3 May 20 19:44
cndes ttyp0 May 20 19:55 (gnss)
[cndes@linux2 cndes]$ finger -l
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Thu May 20 19:44 (PDT) on tty1 35 seconds idle
On since Thu May 20 19:46 (PDT) on tty2 2 minutes 4 seconds idle
On since Thu May 20 19:44 (PDT) on tty3 10 minutes 51 seconds idle
No mail.
No Plan.
Login: cndes Name: Caldera OpenLinux User
Directory: /home/cndes Shell: /bin/bash
On since Thu May 20 19:55 (PDT) on ttyp0 from gnss
No mail.
No Plan.
(5)Ettercap
??Ettercap是一款局域網(wǎng)環(huán)境下的網(wǎng)絡(luò)監(jiān)視、攔截和記錄工具,支持多種主動(dòng)或被動(dòng)的協(xié)議分析,有數(shù)據(jù)插入、過(guò)濾、保持連接同步等功能,還有一個(gè)能支持多種嗅探模式套件,能夠檢查網(wǎng)絡(luò)環(huán)境是否是交換局域網(wǎng),并且能使用主動(dòng)或被動(dòng)的操作系統(tǒng)指紋識(shí)別技術(shù),讓本地攻擊者充分了解當(dāng)前局域網(wǎng)的情況。
(6)DSniff
??DSniff是由Dug Song開發(fā)的一個(gè)網(wǎng)絡(luò)審計(jì)、測(cè)試和嗅探軟件套件,其中,dsniff、filesnarf、mailsnarf、msgsnarf、rlsnarf和webspy可以用于監(jiān)視網(wǎng)絡(luò)上我們感興趣的數(shù)據(jù),如口令、e-mail、文件等。arpspoof、dnsspoof和macof則可以很容易地載取到攻擊者通常難以獲取的網(wǎng)絡(luò)信息,如二層交換數(shù)據(jù)。
(7)Ethereal
??Ethereal是一款免費(fèi)的網(wǎng)絡(luò)協(xié)議分析程序,支持Unix、Windows。借助這個(gè)程序,我們可以直接從網(wǎng)絡(luò)上抓取數(shù)據(jù)進(jìn)行分析,也可以對(duì)其他嗅探器抓取的數(shù)據(jù)進(jìn)行分析,查看每一個(gè)數(shù)據(jù)包的摘要和詳細(xì)信息。Ethereal有多種強(qiáng)大的特征,如支持幾乎所有的協(xié)議、豐富的過(guò)濾語(yǔ)言、易于查看TCP會(huì)話經(jīng)重構(gòu)后的數(shù)據(jù)流等。
(8)sniffit
??sniffit是一個(gè)TCP/IP/ICMP協(xié)議數(shù)據(jù)報(bào)監(jiān)聽器,它能給出這些協(xié)議數(shù)據(jù)報(bào)的詳細(xì)技術(shù)信息及符合監(jiān)聽條件的數(shù)據(jù)報(bào)的各種不同的格式。sniffit可以進(jìn)行方便的配置實(shí)現(xiàn)對(duì)接入的數(shù)據(jù)報(bào)進(jìn)行過(guò)濾。而配置文件允許非常確定地指定需要處理的數(shù)據(jù)報(bào)。缺省情況下,sniffit可以處理以太和PPP設(shè)備,也可以用在其他的設(shè)備上。
??由于Linux系統(tǒng)下嗅探器的優(yōu)秀功能和強(qiáng)大的殺傷力,因此,新的軟件層出不窮,而各個(gè)優(yōu)秀軟件的改進(jìn)版本或增強(qiáng)版也不斷涌現(xiàn),讀者朋友可以在實(shí)際使用中多多收集。
3、入侵檢測(cè)系統(tǒng)攻擊及口令破解
(1)Crack
??Crack是破解軟件中的開山鼻祖,破解UNIX口令的著名工具,現(xiàn)在已經(jīng)成為了檢查網(wǎng)絡(luò)口令弱點(diǎn)的工業(yè)標(biāo)準(zhǔn)。它由Alec D.E.Muffett編寫,工作原理十分簡(jiǎn)單。我們知道加密口令是不會(huì)被解開的,這是因?yàn)榧用芩惴ㄊ遣豢赡娴摹K?,一般的口令入侵是通過(guò)生成口令進(jìn)行加密去匹配原口令密碼,或直接從網(wǎng)上截獲明文口令。Crack 程序中包含了幾個(gè)很大的字典庫(kù),進(jìn)行解破時(shí)它會(huì)按照一定的規(guī)則將字詞進(jìn)行組合,然后對(duì)之進(jìn)行加密,再與要解破的加密口令匹配。在使用中,如果口令文件很小,時(shí)間和資源都不成問(wèn)題,但是如果口令文件比較大,則要花費(fèi)很長(zhǎng)的時(shí)間和耗費(fèi)相當(dāng)?shù)馁Y源。
(2)Fragroute
??這個(gè)軟件和DSniff出自一家,這個(gè)工具開發(fā)的本意是去測(cè)試入侵檢測(cè)系統(tǒng)、防火墻、基本的TCP/IP棧的行為,因此,它是一個(gè)能夠破壞入侵檢測(cè)系統(tǒng)的強(qiáng)大工具。此外,它還能夠截取、修改和重寫向外發(fā)送的報(bào)文,實(shí)現(xiàn)了大部分的IDS攻擊功能。Fragroute有一個(gè)簡(jiǎn)單的規(guī)則設(shè)置語(yǔ)言,通過(guò)它,可以實(shí)現(xiàn)延遲、復(fù)制、丟棄、碎片、重疊、打印、重排、分割、源路由或其他一些向目標(biāo)主機(jī)發(fā)送數(shù)據(jù)包的攻擊。
(3)John the Ripper
??John the Ripper是一個(gè)十分強(qiáng)大、靈活、快速的多平臺(tái)哈希口令破解器,它設(shè)計(jì)的主要目的是用于檢查Unix系統(tǒng)的弱口令,支持幾乎所有Unix平臺(tái)上經(jīng)crypt函數(shù)加密后的口令哈希類型,也支持Kerberos AFS和Windows NT/2000/XP LM哈希等。