Linux 測試軟件各種工具指南
Lint能夠檢查的部分錯誤列表:可能的空指針;在釋放內(nèi)存之后使用了該指針;賦值次序問題;拼寫錯誤等。通常,一個C/C++的編譯器假設(shè)程序是正確的,而Lint恰恰相反,因此,它優(yōu)于編譯器執(zhí)行的一般性檢查。Lint還可以貫穿多個文件來執(zhí)行它的錯誤檢查和代碼分析,這是編譯器做不到的。比較流行的Lint 程序有:PC-lint是一個由Gimpel Software提供的支持C/C++的商用程序;Splint (原來的 LCLint) 是一個GNU免費授權(quán)的 Lint程序,但是只支持C不支持C++。
運行 Lint時,和正常的編譯器一樣,只要把直接加入的makefile 中就可以了。通過配置選項、代碼注釋等方法可以控制和校準(zhǔn)Lint的輸出。例如,這里有一個返回NULL指針的函數(shù),Splint可以通過下面的注釋 /*@null@*/ 來識別:
- /*@null@*/ void *test(void)
- {
- // a function that returns NULL!
- return NULL;
- }
這樣做有兩個目的:防止Splint為這個返回Null指針的函數(shù)告警;保證Splint 檢查任何調(diào)用該函數(shù)的代碼中使用該函數(shù)的返回指針是有效的。
(3)Flawfinder
Flawfinder 是一款用Python編寫的c、c++程序安全審核工具,可以檢查潛在的安全風(fēng)險。它通過搜索檢測文件源代碼從而得到潛在的安全漏洞,支持檢測數(shù)據(jù)庫,以HTML格式生成報告。#p#
2、嗅探器:Linux上的“狗鼻子”
Sniffer是一種常用的收集有用數(shù)據(jù)方法,它幾乎能得到任何以太網(wǎng)上的傳送的數(shù)據(jù)包。這些數(shù)據(jù)可以是用戶的帳號和密碼,可以是一些商用機(jī)密數(shù)據(jù)等等。這些嗅探器很容易被入侵者完成入侵以后種植在受害者服務(wù)器當(dāng)中,有的只是簡單的用來捕捉用戶名和密碼,有的則非常強(qiáng)大可記錄所有的網(wǎng)絡(luò)數(shù)據(jù)流。 Linux操作系統(tǒng)下有很多這樣的優(yōu)秀工具,下面,我們來具體看看。
(1)tcpdump
這是一個專業(yè)的網(wǎng)絡(luò)管理工具,而且這個工具也留下了不少網(wǎng)絡(luò)攻擊故事。它能把匹配規(guī)則的數(shù)據(jù)包的包頭顯示出來,使用TCPDump去查找網(wǎng)絡(luò)問題或者去監(jiān)視網(wǎng)絡(luò)上的狀況.。tcpdump的安裝十分簡單,一般由兩種安裝方式。一種是以rpm包的形式來進(jìn)行安裝。另外一種是以源程序的形式安裝。以rpm 包的形式安裝是最簡單的安裝方法,通過rpm命令可以直接安裝。以超級用戶登錄后,使用命令:#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就會停止;“-F”表示從指定的文件中讀取表達(dá)式,忽略其它的表達(dá)式;“-i”表示指定監(jiān)聽的網(wǎng)絡(luò)接口;“-r”表示從指定的文件中讀取包(這些包一般通過-w選項產(chǎn)生);“-w”表示直接將包寫入文件中,并不分析和打印出來;“- T” 表示將監(jiān)聽到的包直接解釋為指定的類型的報文,常見的類型有遠(yuǎn)程過程調(diào)用和snmp簡單網(wǎng)絡(luò)管理協(xié)議。
tcpdump的表達(dá)式是一個正則表達(dá)式,tcpdump利用它作為過濾報文的條件,如果一個報文滿足表達(dá)式的條件,則這個報文將會被捕獲。如果沒有給出任何條件,網(wǎng)絡(luò)上所有的信息包將會被截獲。在表達(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,還有三種邏輯運算“或、非、與”,這些關(guān)鍵字可以形成強(qiáng)大的組合條件來滿足人們的需要。例如,想要截獲所有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 是一臺裝有l(wèi)inux的主機(jī),她的MAC地址是2E:19:24:28:AF:1A。H219是一臺裝有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是顯示的時間,847509是ID號,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ā)來的數(shù)據(jù)包。2E:19:24:28:AF:1A是主機(jī)ICE的 MAC地址,表示該數(shù)據(jù)包的目的地址是ICE . ip 是表明該數(shù)據(jù)包是IP數(shù)據(jù)包,60 是數(shù)據(jù)包的長度, h219.33357 > ice.telnet 表明該數(shù)據(jù)包是從主機(jī)H219的33357端口發(fā)往主機(jī)ICE的TELNET(23)端口. ack 22535 表明對序列號是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是時間戳, 802509是ID號, eth0 >表明從主機(jī)發(fā)出該數(shù)據(jù)包, arp表明是ARP請求包, who-has route tell ice表明是主機(jī)ICE請求主機(jī)ROUTE的MAC地址。 2E:19:24:28:AF:1A是主機(jī)ICE的MAC地址。此外,這個軟件還可以分析UDP等數(shù)據(jù)包等,結(jié)合LINUX環(huán)境熟練使用后,我們就可以充分發(fā)揮它的威力。
(2)Hunt
Hunt具有直觀的命令追蹤和會話錄制功能,它以tar.gz的格式發(fā)布,文件下載后,首先需要解壓縮。運行Hunt后,將啟動一個很直觀的菜單,界面如下:
- --- 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/oth > b
注:上面的輸入(黑色字體部分)指示hunt來記錄0號連接,并輸出源和目的信息,則hunt將活動信息到終端屏幕上。可以看到,hunt的輸出非常直觀明了,易于閱讀。hunt還提供有以下工具:允許指定任意一個感興趣的連接,而不是記錄所有的東西;允許指定任意一個連接,而不僅僅是以SYN剛剛開始的連接;提供活動會話劫持。
(3)Linsniffer
linsniffer是一個簡單實用的嗅探器。它主要的功能是捕捉用戶名和密碼。
軟件下載后,使用下面的命令來編譯和運行l(wèi)insniffer:
$cc linsniffer.c -o linsniffer
$linsniffer
啟動以后linsniffer將創(chuàng)建一個空文件:tcp.log來存儲嗅探結(jié)果。在測試中我創(chuàng)建一個名為cndes的用戶,密碼為123456。然后使用該用戶來登錄Linux服務(wù)器,并進(jìn)行一些常見的用戶操作。這是一個典型的用戶操作過程。下面,我們看看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使用的每一個命令。輸出結(jié)果非常清楚,非常適合竊聽密碼及記錄常見的活動。不過,這個軟件不太適合進(jìn)行更加復(fù)雜的分析。
(4)Linux-sniff
linux_sniffer提供相對更復(fù)雜的探測結(jié)果。首先,使用如下命令編譯linux_sniffer
$cc linux_sniffer.c -o linuxsniff
下面是被linux_sniffer記錄的一次telnet會話過程:
- 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)視、攔截和記錄工具,支持多種主動或被動的協(xié)議分析,有數(shù)據(jù)插入、過濾、保持連接同步等功能,還有一個能支持多種嗅探模式套件,能夠檢查網(wǎng)絡(luò)環(huán)境是否是交換局域網(wǎng),并且能使用主動或被動的操作系統(tǒng)指紋識別技術(shù),讓本地攻擊者充分了解當(dāng)前局域網(wǎng)的情況。
(6)DSniff
DSniff是由Dug Song開發(fā)的一個網(wǎng)絡(luò)審計、測試和嗅探軟件套件,其中,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是一款免費的網(wǎng)絡(luò)協(xié)議分析程序,支持Unix、Windows。借助這個程序,我們可以直接從網(wǎng)絡(luò)上抓取數(shù)據(jù)進(jìn)行分析,也可以對其他嗅探器抓取的數(shù)據(jù)進(jìn)行分析,查看每一個數(shù)據(jù)包的摘要和詳細(xì)信息。Ethereal有多種強(qiáng)大的特征,如支持幾乎所有的協(xié)議、豐富的過濾語言、易于查看 TCP會話經(jīng)重構(gòu)后的數(shù)據(jù)流等。
(8)sniffit
sniffit是一個TCP/IP/ICMP協(xié)議數(shù)據(jù)報監(jiān)聽器,它能給出這些協(xié)議數(shù)據(jù)報的詳細(xì)技術(shù)信息及符合監(jiān)聽條件的數(shù)據(jù)報的各種不同的格式。 sniffit可以進(jìn)行方便的配置實現(xiàn)對接入的數(shù)據(jù)報進(jìn)行過濾。而配置文件允許非常確定地指定需要處理的數(shù)據(jù)報。缺省情況下,sniffit可以處理以太和PPP設(shè)備,也可以用在其他的設(shè)備上。
由于Linux系統(tǒng)下嗅探器的優(yōu)秀功能和強(qiáng)大的殺傷力,因此,新的軟件層出不窮,而各個優(yōu)秀軟件的改進(jìn)版本或增強(qiáng)版也不斷涌現(xiàn),讀者朋友可以在實際使用中多多收集。#p#
3、入侵檢測系統(tǒng)攻擊及口令破解
(1)Crack
Crack是破解軟件中的開山鼻祖,破解UNIX口令的著名工具,現(xiàn)在已經(jīng)成為了檢查網(wǎng)絡(luò)口令弱點的工業(yè)標(biāo)準(zhǔn)。它由Alec D.E.Muffett編寫,工作原理十分簡單。我們知道加密口令是不會被解開的,這是因為加密算法是不可逆的。所以,一般的口令入侵是通過生成口令進(jìn)行加密去匹配原口令密碼,或直接從網(wǎng)上截獲明文口令。Crack 程序中包含了幾個很大的字典庫,進(jìn)行解破時它會按照一定的規(guī)則將字詞進(jìn)行組合,然后對之進(jìn)行加密,再與要解破的加密口令匹配。在使用中,如果口令文件很小,時間和資源都不成問題,但是如果口令文件比較大,則要花費很長的時間和耗費相當(dāng)?shù)馁Y源。
(2)Fragroute
這個軟件和DSniff出自一家,這個工具開發(fā)的本意是去測試入侵檢測系統(tǒng)、防火墻、基本的TCP/IP棧的行為,因此,它是一個能夠破壞入侵檢測系統(tǒng)的強(qiáng)大工具。此外,它還能夠截取、修改和重寫向外發(fā)送的報文,實現(xiàn)了大部分的IDS攻擊功能。Fragroute有一個簡單的規(guī)則設(shè)置語言,通過它,可以實現(xiàn)延遲、復(fù)制、丟棄、碎片、重疊、打印、重排、分割、源路由或其他一些向目標(biāo)主機(jī)發(fā)送數(shù)據(jù)包的攻擊。
(3)John the Ripper
John the Ripper是一個十分強(qiáng)大、靈活、快速的多平臺哈希口令破解器,它設(shè)計的主要目的是用于檢查Unix系統(tǒng)的弱口令,支持幾乎所有Unix平臺上經(jīng) crypt函數(shù)加密后的口令哈希類型,也支持Kerberos AFS和Windows NT/2000/XP LM哈希等。
【編輯推薦】