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