連載:六脈神劍捍衛(wèi)企業(yè) Linux系統(tǒng)
引子
在金庸先生的《天龍八部》中,六脈神劍是古代大理王國皇家祖?zhèn)魃窆?,分別是少商劍、商陽劍、中沖劍、關(guān)沖劍、少?zèng)_劍、少澤劍。六脈神劍惺惺相依又各有千秋。運(yùn)劍于無形,劍招雖少卻獨(dú)步武林,以指力化做劍氣,有質(zhì)無形,殺人與無影之中……
本文主要為Linux技術(shù)人員提供一些基本的技術(shù)指導(dǎo),并非解決Linux安全的詳細(xì)手冊(cè)。
開篇
Linux操作系統(tǒng)是大多數(shù)現(xiàn)代企業(yè)計(jì)算環(huán)境的基礎(chǔ)。企業(yè)級(jí)Linux發(fā)行版本,如Red Hat, SUSE, Ubuntu等,其功能、靈活性、穩(wěn)定性是有口皆碑的。不幸的是,Linux的靈活性和強(qiáng)大功能還有另外一面:Linux系統(tǒng)可以支持大多數(shù)著名的網(wǎng)絡(luò)協(xié)議和服務(wù),如果不正確的配置和部署,這會(huì)為安全攻擊提供極大的空間。
現(xiàn)代企業(yè)對(duì)基于Web的交互性和面向互聯(lián)網(wǎng)應(yīng)用程序的依賴性,以及運(yùn)行環(huán)境對(duì)網(wǎng)絡(luò)架構(gòu)提出了越來越多的要求。大量的數(shù)據(jù)要求和新的網(wǎng)絡(luò)服務(wù)意味著有更多的設(shè)備和數(shù)據(jù)在網(wǎng)絡(luò)上必須時(shí)刻可用,這種持續(xù)的可用性是一個(gè)現(xiàn)代企業(yè)的重要基礎(chǔ),不幸的是,其可用性不只限于那些授權(quán)用戶。同樣的系統(tǒng)對(duì)那些聯(lián)機(jī)的入侵者和惡意用戶也總是可用的。
大多數(shù)現(xiàn)代計(jì)算機(jī)系統(tǒng)必定要產(chǎn)生日益廣泛的網(wǎng)絡(luò)檔案文件,但也不過是檔案文件。大多數(shù)企業(yè)Linux發(fā)行版本在發(fā)布時(shí)已將大多數(shù)網(wǎng)絡(luò)端口和服務(wù)禁用,因此在使用時(shí)服務(wù)必須打開而不是關(guān)閉。不管怎么說,仔細(xì)的檢查系統(tǒng)的網(wǎng)絡(luò)和安全配置的基本方面可以大幅度地提高網(wǎng)絡(luò)系統(tǒng)的安全性。
注意
不同的Linux發(fā)行版本提供了不同的管理工具,本文將著重討論那些可在任何Linux發(fā)行版本中可用的命令行工具。
少商劍─確認(rèn)打開的網(wǎng)絡(luò)端口及相關(guān)的進(jìn)程
系統(tǒng)中任何一個(gè)打開的網(wǎng)絡(luò)端口指明了一個(gè)潛在的進(jìn)入點(diǎn)。在這種情況下,一個(gè)打開的網(wǎng)絡(luò)端口即是某個(gè)服務(wù)程序正在監(jiān)聽并對(duì)請(qǐng)求響應(yīng)的端口。在進(jìn)入系統(tǒng)的情況下,兩種通用的列示某計(jì)算機(jī)的打開端口的方法是使用Isof和Netstat命令。
Lsof命令列示Linux系統(tǒng)中所有打開的文件。其-i選項(xiàng)告訴Lsof命令列示所有的與IP協(xié)議相關(guān)的文件,而-n選項(xiàng)禁止將建立連接的任何IP地址映射為主機(jī)名。我們可以將輸出結(jié)果傳遞給egrep命令,而且只列示包含COMMAND、TCP(一個(gè)使用TCP協(xié)議監(jiān)聽的進(jìn)程)、UDP(一個(gè)使用UDP協(xié)議監(jiān)聽的進(jìn)程)的結(jié)果。下面是Lsof命令在Red Hat Enterprise Linux系統(tǒng)中的一個(gè)例子展示:
輸出結(jié)果顯示運(yùn)行在本系統(tǒng)中的進(jìn)程有portmap(RPC端口映射器)、rpc.statd(RPC狀態(tài)監(jiān)視器)、sshd(安全外殼)、Ntpd(網(wǎng)絡(luò)計(jì)時(shí)協(xié)議)、sendmail(郵件服務(wù)程序)、cupsd(CUPS打印監(jiān)控程序)。此外,、xinetd互聯(lián)網(wǎng)服務(wù)監(jiān)控程序正運(yùn)行著auth(遠(yuǎn)程識(shí)別監(jiān)控程序)、telnet(網(wǎng)絡(luò)終端)和vnc(虛擬網(wǎng)絡(luò)計(jì)算)等服務(wù)器程序。
當(dāng)運(yùn)行在相同的系統(tǒng)上時(shí),Netstat 命令提供與lsof輸出相似的結(jié)果。其-t選項(xiàng)產(chǎn)生所有的TCP/IP端口的輸出,-u選項(xiàng)生成所有的UDP端口的輸出,-l選項(xiàng)限制只輸出那些正在積極地監(jiān)聽連接的端口。-p選項(xiàng)顯示擁有網(wǎng)絡(luò)連接的程序和進(jìn)程的ID。下面是Netstat命令在Red Hat Enterprise Linux系統(tǒng)中顯示輸出的一個(gè)例子:
此處列示的信息稍微詳細(xì)一些,但顯示了與lsof命令相同的開放端口和相關(guān)服務(wù)。一臺(tái)計(jì)算機(jī)所提供服務(wù)的內(nèi)部視圖應(yīng)與外部計(jì)算機(jī)所看到的匹配。為了驗(yàn)證這一點(diǎn),可以在另一臺(tái)計(jì)算機(jī)上使用nmap(網(wǎng)絡(luò)映射)命令。其-sT選項(xiàng)實(shí)施了一個(gè)TCP端口掃描,而-sU選項(xiàng)進(jìn)行的是UDP端口的掃描。從另一臺(tái)計(jì)算機(jī)上掃描相同的計(jì)算機(jī)會(huì)輸出如下的結(jié)果:
雖然nmap命令不能識(shí)別與631和795端口相關(guān)的服務(wù),但前面展示的lsof和nmap命令在本地計(jì)算機(jī)的輸出卻分別將其確定為打印端口監(jiān)控程序和rpc.statd命令。
如果所有的輸出一致的話,下一步便是分析可用的服務(wù)來決定其是否必需,如果是非必需的,應(yīng)怎樣處理:
首先,在netstat和lsof中輸出的cupsd(打?。┖蛃endmail(郵件服務(wù)器)這兩個(gè)進(jìn)程在nmap的輸出中是不可見的。netstat 和 lsof的輸出確認(rèn)了它們只是在監(jiān)聽本地的回路接口,因此對(duì)于外部的計(jì)算機(jī)來說是不可見的,并且不會(huì)引安全問題。如果性能是你要分析的計(jì)算機(jī)的一個(gè)問題的話,sendmail對(duì)于本地郵件傳輸是有用的;但如果并沒有人正在本機(jī)上打印的話,你可能會(huì)終止CUPS進(jìn)程。
Ssh(安全外殼)對(duì)于遠(yuǎn)程登錄提供了安全機(jī)制并支持加密通信,這是好事情。
Telnet進(jìn)程代表了一個(gè)用于建立遠(yuǎn)程連接的較早的協(xié)議,它使用了非加密的通信。一些telnet的較新版本支持安全的認(rèn)證和通信機(jī)制,如支持Kerberos;但不管怎么說,這是一個(gè)非必需的服務(wù),因?yàn)橐呀?jīng)提供了SSH,所以必須關(guān)閉這個(gè)進(jìn)程。
Rpcbind (端口映射程序) and rpc.statd (795端口)進(jìn)程僅在NFS環(huán)境中有用。如果我們正在分析的不是一個(gè)NFS客戶端,就應(yīng)該關(guān)閉它。
Auth進(jìn)程對(duì)于分析網(wǎng)絡(luò)客戶端的問題是有用的,但可會(huì)為入侵者提供系統(tǒng)用戶的信息。然而,一些FTP和其它的網(wǎng)絡(luò)客戶卻必須使用它。因此我們要么禁用它,要么用-n選項(xiàng)啟用它。-n使其只顯示數(shù)字的用戶ID而非用戶名。
Ntp(網(wǎng)絡(luò)時(shí)間協(xié)議)進(jìn)程用于使網(wǎng)絡(luò)上的計(jì)算機(jī)時(shí)鐘同步,但在過去常被某些人用于查找漏洞等。我們可以在啟動(dòng)時(shí)運(yùn)行ntp q命令,這樣就可以查詢并同步時(shí)間服務(wù),然后再退出。
在32768端口上的omad進(jìn)程可能令人困惑,但反復(fù)檢查lsof 和netstat的輸出,會(huì)發(fā)現(xiàn)32768實(shí)際上正被用于rpc.statd查詢,因此應(yīng)該通過關(guān)閉rpc.statd進(jìn)程來終止它。這是一個(gè)被nmap錯(cuò)誤識(shí)別的進(jìn)程。
此過程的下一步就是到我們正在分析的計(jì)算機(jī)那里來決定在什么地方及什么時(shí)間這些進(jìn)程被啟動(dòng),因此可以終止我們確認(rèn)為非必要的任何進(jìn)程(cupsd, portmap,rpc.statd, telnet, vnc),并改變我們想要改變的任何進(jìn)程的行為。
