另據倫敦安全分析及咨詢機構mi2g公司最近的一份調查結果顯示,從2003年11月到2004年10月份共發生了24萬次攻擊事件。這些攻擊事件既有黑客遠程手動攻擊,也有通過病毒、蠕蟲或其他惡意程序發動的攻擊。分析結果顯示,其中65%的攻擊對象為Linux系統,共發生154846起攻擊事件,25%的攻擊對象為Windows。而最安全的操作系統要屬基於BSDUnix的操作系統。Mi2g公司表示,導致Linux系統最容易遭受攻擊的原因是該操作系統各項功能組件過於分散,因為它們分別來自不同的企業,擁有著不同的特性。分析結果還發現,遭到攻擊的用戶多為個人用戶和小型企業用戶。其被攻擊比例為80%,而大中型企業的被攻擊比例僅為8.5%。據Mi2g透露,他們的分析數據主要來自北美、歐洲和亞洲的銀行和保險機構,同時還包括一些監控數據和來自黑客組織的內部數據。
2005年,另一份權威報告——《2005 North American Linux and Windows TCO Comparison Report, Part 2: Hardening Security Is Key to Reducing Risk and TCO》對Linux以及Windows的安全性進行了對比,他們對北美的550家企業安全狀況進行調查並並得出了一些重要結論,下面給出部分與Linux相關具有參考意義的結論:
● 沒有任何操作系統是被證明為hack-proof的,也就是說,被證明不能被攻破的,Linux也是可以被攻破的,因而需要防護;
● 人為的錯誤(包括不遵守安全規程,不采取必要的安全措施,實行常規的安全檢查,進行及時的打補丁工作等等)是導致系統不安全的重要原因;
● 針對Linux的攻擊呈現日趨上升的態勢。
該報告也給出了針對性的提示:
● 加強員工的培訓,包括安全意識、安全工具的使用、安全規程的培訓等等;
● 及時給系統打補丁,防范攻擊以及病毒入侵;
● 實行常規的安全審計以及系統風險評估。
從上述給出的幾份權威的安全分析報告,我們不難看出,“世上沒有不透風的牆”,Linux操作系統作為一種軟件,與Windows操作系統一樣,必然存在漏洞。而隨著它在全世界范圍內的普及使用,目前針對其的攻擊越來越多,安全事件也呈上升趨勢,形勢非常嚴峻。要想在技術日益發展、紛繁蕪雜的網絡環境中,保證Linux系統的安全性,需要切實做好事前預防以及事後恢復的工作,這很大程度上取決於人的因素。人是決定系統安全的第一要素。
在保障Linux安全的過程中,業界經歷了多年的積累,有許多重要的原則和手段可以借鑒,從系統管理到網絡管理都有比較成熟的經驗。本文將結合筆者的自身經驗,給出這些重要的原則和手段,提供給用戶參考使用,希望用戶能夠在使用過程中舉一反三,並能夠根據自己的實踐總結出新的、行之有效的方法。
1、取消不必要的網絡服務
早期的Linux版本中,每一個不同的網絡服務都有一個服務程序(守護進程,Daemon)在後台運行,後來的版本用統一的/etc/inetd服務器程序擔此重任。Inetd是Internet daemon的縮寫,它同時監視多個網絡端口,一旦接收到外界傳來的連接信息,就執行相應的TCP或UDP網絡服務。由於受inetd的統一指揮,因此Linux中的大部分TCP或UDP服務都是在/etc/inetd.conf文件中設定。所以取消不必要服務的第一步就是檢查/etc/inetd.conf文件,在不要的服務前加上“#”號。
一般來說,除了http、smtp、telnet和ftp之外,其他服務都應該取消,諸如簡單文件傳輸協議tftp、網絡郵件存儲及接收所用的imap/ipop傳輸協議、尋找和搜索資料用的gopher以及用於時間同步的daytime和time等。
還有一些報告系統狀態的服務,如finger、efinger、systat和netstat等,雖然對系統查錯和尋找用戶非常有用,但也給黑客提供了方便之門。例如,黑客可以利用finger服務查找用戶的電話、使用目錄以及其他重要信息。因此,很多Linux系統將這些服務全部取消或部分取消,以增強系統的安全性。
Inetd除了利用/etc/inetd.conf設置系統服務項之外,還利用/etc/services文件查找各項服務所使用的端口。因此,用戶必須仔細檢查該文件中各端口的設定,以免有安全上的漏洞。
在後繼的Linux版本中(比如Red Hat Linux 7.2之後),取而代之的是采用xinetd進行網絡服務的管理。(關於Xinetd的具體使用方法可參閱本報2005年7月4日第25期C11版《使用Xinetd管理網絡應用服務》,或訪問www2.ccw.com.cn/05/0525/d/0525d04_1.asp)
在Linux中有兩種不同的服務型態:一種是僅在有需要時才執行的服務,如finger服務;另一種是一直在執行的永不停頓的服務。後者在系統啟動時就開始執行,因此不能靠修改inetd來停止其服務,而只能從修改/etc/rc.d/rc[n].d/文件或用Run level editor去修改它。提供文件服務的NFS服務器和提供NNTP新聞服務的news都屬於這類服務,如果沒有必要,最好取消這些服務。
當然,具體取消哪些服務不能一概而論,需要根據實際的應用情況來定,但是系統管理員需要做到心中有數,因為一旦系統出現安全問題,才能做到有步驟、有條不紊地進行查漏和補救工作,這一點比較重要。
2、嚴格審計系統的登錄用戶
在進入Linux系統之前,所有用戶都需要登錄,也就是說,用戶需要輸入用戶賬號和密碼,只有通過系統驗證之後,用戶才能進入系統。
與其他Unix操作系統一樣,Linux一般將密碼加密之後,存放在/etc/passwd文件中。Linux系統上的所有用戶都可以讀到/etc/passwd文件,雖然文件中保存的密碼已經經過加密,但仍然不太安全。因為一般的用戶可以利用現成的密碼破譯工具,以窮舉法猜測出密碼。比較安全的方法是設定影子文件/etc/shadow,只允許有特殊權限的用戶閱讀該文件。
在Linux系統中,如果要采用影子文件,必須將所有的公用程序重新編譯,才能支持影子文件。這種方法比較麻煩,比較簡便的方法是采用插入式驗證模塊(PAM)。很多Linux系統都帶有Linux的工具程序PAM,它是一種身份驗證機制,可以用來動態地改變身份驗證的方法和要求,而不要求重新編譯其他公用程序。這是因為PAM采用封閉包的方式,將所有與身份驗證有關的邏輯全部隱藏在模塊內,因此它是采用影子檔案的最佳幫手。
此外,PAM還有很多安全功能:它可以將傳統的DES加密方法改寫為其他功能更強的加密方法,以確保用戶密碼不會輕易地遭人破譯;它可以設定每個用戶使用電腦資源的上限;它甚至可以設定用戶的上機時間和地點。
Linux系統管理人員只需花費幾小時去安裝和設定PAM,就能大大提高Linux系統的安全性,把很多攻擊阻擋在系統之外。
3、隨時更新系統的最新核心
Linux作為一種優秀的開源軟件,其穩定性、安全性和可用性有極為可靠的保證,世界上的Linux高手共同維護著這個優秀的產品,因而其流通渠道很多,而且經常有更新的程序和系統補丁出現,因此,為了加強系統安全,一定要經常更新系統內核。
內核是Linux操作系統的核心,它常駐內存,用於加載操作系統的其他部分,並實現操作系統的基本功能。由於內核控制計算機和網絡的各種功能,因此,它的安全性對整個系統安全至關重要。
早期的內核版本存在許多眾所周知的安全漏洞,而且也不太穩定,只有2.0.x以上的版本才比較穩定和安全(一般說來,內核版本號為偶數的相對穩定,而為奇數的則一般為測試版本,用戶們使用時要多留意),新版本的運行效率也有很大改觀。在設定內核的功能時,只選擇必要的功能,千萬不要所有功能照單全收,否則會使內核變得很大,既占用系統資源,也給黑客留下可乘之機。
在Internet上常常有最新的安全修補程序,Linux系統管理員應該消息靈通,經常光顧安全新聞組,查閱新的修補程序。一般情況下,用戶可以隨時保持對Red Hat門戶網站(www.redhat.com),Debian Linux門戶網站(www.debian.org)、Turbolinux門戶網站(www.turbolinux.com)、Slackware門戶網站(www.slackware..com)、SuSE門戶網站(www.suse.com/index_us.html)、Fedora門戶網站(fedora.redhat.com)等優秀Linux發行套件網站的關注,及時更新系統的最新核心以及打上安全補丁,這樣能較好地保證Linux系統的安全。
4、檢查登錄密碼
設定登錄密碼是一項非常重要的安全措施,如果用戶的密碼設定不合適,就很容易被破譯,尤其是擁有超級用戶使用權限的用戶,如果沒有良好的密碼,將給系統造成很大的安全漏洞。
在多用戶系統中,如果強迫每個用戶選擇不易猜出的密碼,將大大提高系統的安全性。但如果passwd程序無法強迫每個上機用戶使用恰當的密碼,要確保密碼的安全性,就只能依靠密碼破解程序了。
實際上,密碼破解程序是黑客工具箱中的一種工具,它將常用的密碼或者是英文字典中所有可能用來作密碼的字都用程序加密成密碼字,然後將其與Linux系統的/etc/passwd密碼文件或/etc/shadow影子文件相比較,如果發現有吻合的密碼,就可以求得明碼了。
在網絡上可以找到很多密碼破解程序,比較有名的程序是crack。用戶可以自己先執行密碼破解程序,找出容易被黑客破解的密碼,先行改正總比被黑客破解要有利。
目前密碼破解程序大多采用字典攻擊以及暴力攻擊手段,而其中用戶密碼設定不當,則極易受到字典攻擊的威脅。很多用戶喜歡用自己的英文名、生日或者賬戶等信息來設定密碼,這樣,黑客可能通過字典攻擊或者是社會工程的手段來破解密碼。所以建議用戶在設定密碼的過程中,應盡量使用非字典中出現的組合字符,並且采用數字與字符相結合、大小寫相結合的密碼設置方式,增加密碼被黑客破解的難度。而且,也可以使用定期修改密碼、使密碼定期作廢的方式,來保護自己的登錄密碼。
具體列出幾條參考原則如下:
● 口令長度至少為八個字符,口令越長越好。若使用MD5口令,它應該至少有15個字符。若使用DES口令,使用最長長度(8個字符)。
● 混和大小寫字母。Linux區分大小寫,因此混和大小寫會增加口令的強壯程度。
● 混和字母和數字。在口令中添加數字,特別是在中間添加(不只在開頭和結尾處)能夠加強口令的強健性。
● 包括字母和數字以外的字符:&、$、和 > 之類的特殊字符可以極大地增強口令的強健性(若使用DES口令則不能使用此類字符)。
● 挑選一個可以記住的口令。如果記不住自己的口令,那麼它再好也沒有用,使用簡寫或其他記憶方法來幫助記憶口令。
● 不要在口令中只使用單詞或數字。
● 不要使用現成詞匯,像名稱、詞典中的詞匯、甚至電視劇或小說中的用語,即使在兩端使用數字,都應該避免使用。
● 不要使用外語中的詞匯。口令破譯程序經常使用多種語言的詞典來檢查其詞匯列表。依賴外語來達到保護口令的目的通常不起作用。
● 不要使用黑客術語。
● 不要使用個人信息。如果攻擊者知道你的身份,那麼推導出你所用的口令會變得非常容易。以下是你在創建口令時應該避免使用的信息類型:不要倒轉現存詞匯,優秀的口令破譯者總是倒轉常用詞匯,因此倒轉薄弱口令並不會使它更安全;不要筆錄你的口令,決不要把口令寫在紙上,把它牢記在心才更為安全;不要在所有機器上都使用同樣的口令,在每個機器上使用不同的口令是極其重要的,這樣,如果一個系統洩密了,所有其他系統都不會立即受到威脅。
5、設定用戶賬號的安全等級
除密碼之外,用戶賬號也有安全等級,這是因為在Linux上每個賬號可以被賦予不同的權限,因此在建立一個新的用戶ID時,系統管理員應該根據需要賦予該賬號不同的權限,並且歸並到不同的用戶組中。
在Linux系統中的部分文件中,可以設定允許上機和不允許上機人員的名單。其中,允許上機人員名單在/etc/hosts.allow中設置,不允許上機人員名單在/etc/hosts.deny中設置。此外,Linux將自動把允許進入或不允許進入的結果記錄到/var/log/secure文件中,系統管理員可以據此查出可疑的進入記錄。
每個賬號ID應該有專人負責。在企業中,如果負責某個ID的職員離職,管理員應立即從系統中刪除該賬號。很多入侵事件都是借用了那些很久不用的賬號而發生的。
在用戶賬號之中,黑客最喜歡具有root權限的賬號,這種超級用戶有權修改或刪除各種系統設置,可以在系統中暢行無阻。因此,在給任何賬號賦予root權限之前,都必須仔細考慮。
Linux系統中的/etc/securetty文件包含了一組能夠以root賬號登錄的終端機名稱。例如,在Red Hat Linux系統中,該文件的初始值僅允許本地虛擬控制台(rtys)以root權限登錄,而不允許遠程用戶以root權限登錄。最好不要修改該文件,如果一定要從遠程登錄為root權限,最好是先以普通賬號登錄,然後利用su命令升級為超級用戶。
6、謹慎使用“r”遠程管理程序
在Linux系統中,有一系列r字頭的公用程序,比如rlogin、rcp等等。它們非常容易被黑客用來入侵系統,因而非常危險,因此絕對不要將root賬號開放給這些公用程序。由於這些公用程序都是用.rhosts文件或者hosts.equiv文件核准進入的,因此一定要確保root賬號不包括在這些文件之內。
由於r字頭遠程指令是黑客們用來攻擊系統的較好途徑,因此很多安全工具都是針對這一安全漏洞而設計的。例如,PAM工具就可以用來將r字頭公用程序有效地禁止掉,它在/etc/pam.d/rlogin文件中加上登錄必須先核准的指令,使整個系統的用戶都不能使用自己home目錄下的.rhosts文件。
7、采用加密傳輸手段
由於協議在最初設計時候的不成熟,沒有考慮到網絡發展到今天會存在如此嚴重的安全問題,所以諸如FTP、Telnet等服務都是采用明文傳輸口令和數據,所以我們要盡可能地利用現在的安全技術,對傳輸的數據進行加密。SSH是安全Shell的簡稱,它可以安全地被用來取代rlogin、rsh和rcp等公用程序的一套程序組。SSH采用公開密鑰技術對網絡上兩台主機之間的通信信息加密,並且用其密鑰充當身份驗證的工具。
由於SSH將網絡上的信息加密,因此它可以用來安全地登錄到遠程主機上,並且在兩台主機之間安全地傳送信息。實際上,SSH不僅可以保障Linux主機之間的安全通信,Windows用戶也可以通過SSH安全地連接到Linux服務器上。(關於SSH的具體使用方法可參閱本報2005年9月12 日第35期C10版《使用SHH實現Linux下的安全數據傳輸》,或訪問www2.ccw.com.cn/05/0535/d/0535d04_3.asp)
8、限制超級用戶的權力
我們在前面提到,root是Linux保護的重點,由於它權力無限,因此最好不要輕易將超級用戶授權出去。但是,有些程序的安裝和維護工作必須要求有超級用戶的權限,在這種情況下,可以利用其他工具讓這類用戶有部分超級用戶的權限。sudo就是這樣的工具。
sudo程序允許一般用戶經過組態設定後,以用戶自己的密碼再登錄一次,取得超級用戶的權限,但只能執行有限的幾個指令。例如,應用sudo後,可以讓管理磁帶備份的管理人員每天按時登錄到系統中,取得超級用戶權限去執行文檔備份工作,但卻沒有特權去做其他只有超級用戶才能作的工作。
sudo不但限制了用戶的權限,而且還將每次使用sudo所執行的指令記錄下來,不管該指令的執行是成功還是失敗。在大型企業中,有時候有許多人同時管理Linux系統的各個不同部分,每個管理人員都有用sudo授權給某些用戶超級用戶權限的能力,從sudo的日志中,可以追蹤到誰做了什麼以及改動了系統的哪些部分。
值得注意的是,sudo並不能限制所有的用戶行為,尤其是當某些簡單的指令沒有設置限定時,就有可能被黑客濫用。例如,一般用來顯示文件內容的/etc/cat指令,如果有了超級用戶的權限,黑客就可以用它修改或刪除一些重要的文件。
對於該程序的使用,我們將在《充分使用Linux安全防護工具》一文中對其進行詳細講述。
9、留意和追蹤黑客的蹤跡
當用戶仔細設定了各種與Linux相關的配置(最常用日志管理選項),並且安裝了必要的安全防護工具之後,Linux操作系統的安全性的確大為提高,但是卻並不能保證能防止那些比較熟練的網絡黑客的入侵。
在平時,網絡管理人員要經常提高警惕,隨時注意各種可疑狀況,並且按時檢查各種系統日志文件,包括一般信息日志、網絡連接日志、文件傳輸日志以及用戶登錄日志等。在檢查這些日志時,要注意是否有不合常理的時間記載。例如:
● 正常用戶在半夜三更登錄;
● 不正常的日志記錄,比如日志只記錄了一半就切斷了,或者整個日志文件被刪除了;
● 用戶從陌生的網址進入系統;
● 因密碼錯誤或用戶賬號錯誤被擯棄在外的日志記錄,尤其是那些一再連續嘗試進入失敗但卻有一定模式的試錯法;
● 非法使用或不正當使用超級用戶權限su的指令;
● 重新開機或重新啟動各項服務的記錄。
上述這些問題都需要系統管理員隨時留意系統登錄的用戶狀況以及查看相應日志文件,許多背離正常行為的蛛絲馬跡都應當引起高度注意。(具體的方法請參閱本報2005年6月20日第23期C15版《使用日志系統保護Linux安全》一文,或訪問www2.ccw.cow.cn/05/0523/d/0523d04_2.asp)
10、結合使用防火牆、IDS等防護手段
防火牆、IDS等防護技術已經成功地應用到網絡安全的各個領域,而且都有非常成熟的產品。目前,分布式防火牆是一種新的防火牆體系結構,其包含如下產品:
● 網絡防火牆:用於內部網與外部網之間(即傳統的邊界防火牆)和內部網子網之間的防護產品,後者區別於前者的一個特征是需支持內部網可能有的IP和非IP協議。
● 主機防火牆:對於網絡中的服務器和桌面機進行防護,這些主機的物理位置可能在內部網中,也可能在內部網外,如托管服務器或移動辦公的便攜機。
● 中心管理:邊界防火牆只是網絡中的單一設備,管理是局部的。對分布式防火牆來說,每個防火牆作為安全監測機制可以根據安全性的不同要求布置在網絡中的任何需要的位置上,但總體安全策略又是統一策劃和管理的,安全策略的分發及日志的匯總都是中心管理應具備的功能。中心管理是分布式防火牆系統的核心和重要特征之一。
在Linux系統來說,有一個自帶的Netfilter/iptables防火牆框架,通過合理地配置也能起到主機防火牆的功效。(該技術的使用請參閱本報2005年5月9日第17期C10版《Linux下的防火牆機制應用》一文,或訪問www2.ccw.com.cn/05/0517/d/0517d04_2.asp)
對於IDS來說,它通過對計算機網絡或計算機系統中的若干關鍵點收集信息並對其進行分析,從中發現網絡或系統中是否有違反安全策略的行為和被攻擊的跡象。按照技術以及功能來劃分,入侵檢測系統可以分為如下幾類:
● 基於主機的入侵檢測系統:其輸入數據來源於系統的審計日志,一般只能檢測該主機上發生的入侵。
● 基於網絡的入侵檢測系統:其輸入數據來源於網絡的信息流,能夠檢測該網段上發生的網絡入侵。
● 采用上述兩種數據來源的分布式入侵檢測系統:能夠同時分析來自主機系統審計日志和網絡數據流的入侵檢測系統,一般為分布式結構,由多個部件組成。
在Linux系統中也有相應的輕量級的Snort,使用它可以快速、高效地進行防護。(關於Snort的具體使用請參閱本報2005年4月11日第13期C16版《使用Snort塔建安全的Linux服務器》一文,或訪問www2.ccw.com.cn/05/0513/d/0513d04_1.asp)
需要提醒讀者注意的是:在大多數的應用情境下,我們需要綜合使用這兩項技術,因為防火牆相當於安全防護的第一層,它僅僅通過簡單地比較IP地址/端口對來過濾網絡流量,而IDS更加具體,它需要通過具體的數據包(部分或者全部)來過濾網絡流量,是安全防護的第二層。綜合使用它們,能夠做到互補,並且發揮各自的優勢。目前,基於多個安全產品間的聯動的研究正在進行,這是一個很有前途的方向。
11、保持對新技術及其系統漏洞的跟蹤
計算機技術、網絡通信技術以及網絡攻防對抗技術的發展一直就沒有停止過。Linux作為一種優秀的開源軟件,其自身的發展也日新月異,同時,它存在的安全問題也會在日後的應用中慢慢暴露出來。黑客對新技術的關注從一定程度上來說要高於我們防護人員,所以要想在網絡攻防的戰爭中處於有利地位,保護Linux系統的安全,就要求我們要保持高度的警惕性和對新技術的高度關注。特別是使用Linux作為關鍵業務系統的企業的系統管理員,需要通過Linux的一些權威網站和論壇盡快地獲取有關該系統的一些新技術以及一些新的系統漏洞的信息,做到防范於未然,提早行動,在漏洞出現後的最短時間內對其進行封堵,並且在實踐中不斷地提高安全防護的技能,這樣才是比較好的解決辦法和出路,單純地依靠一些現有的工具是不行的。
12、綜合防御,確保安全
從計算機安全的角度看,世界上沒有絕對密不透風、百分之百安全的計算機系統,Linux系統也不例外。采用以上的安全法則,雖然可以使Linux系統的安全性大大提高,使一般地黑客和電腦玩家不能輕易闖入,但卻不一定能阻擋那些比較高明的黑客,因此,用戶需要靈活地綜合采用上述原則,並且根據實際的應用場景進行調整,才能取得比較好的實踐效果。
李洋,中國科學院計算技術研究所博士。主要研究方向為大規模網絡信息安全、計算機軟件與理論。多年來一直從事網絡信息安全領域的研究與開發工作。曾參與過多項“國家自然科學基金重大專項”、“國家863計劃”、“國家242信息安全計劃”等重大國家項目的研發工作。