上一章我們談到了Win2000 Server的安全配置,經過精心配置的Win2000伺服器可以防禦90%以上的入侵和滲透,但是,就象上一章結束時我所提到的:系統安全是一個連續的過程,隨著新漏洞的出現和伺服器應用的變化, 系統的安全狀況也在不斷變化著;同時由於攻防是矛盾的統一體,道消魔長和魔消道長也在不斷的轉換中,因此,再高明的HTTP://www.aliyun.com/zixun/aggregation/13879.html"> 系統管理員也不能保證一台正在提供服務的伺服器長時間絕對不被入侵。
所以,安全佈建服務器並不是安全工作的結束,相反卻是漫長乏味的安全工作的開始,本文我們將初步探討Win2000伺服器入侵偵測的初步技巧,希望能説明您長期維護伺服器的安全。
本文中所說的入侵偵測指的是利用Win2000 Server自身的功能及系統管理員自己編寫的軟體/腳本進行的檢測,使用防火牆(Firewall)或入侵監測系統(IDS)的技巧並不在本文的討論範圍之內。
現在假定:我們有一台Win2000 Server的伺服器,並且經過了初步的安全配置(關於安全配置的詳情可以參閱Win2000 Server安全配置入門<一>),在這種情況下,大部分的入侵者將被拒之門外。 (哈哈,我管理員可以回家睡大覺去了)慢著,我說的是大部分,不是全部,經過初步安全配置的伺服器雖然可以防禦絕大多數的Script kid(腳本族-只會用別人寫的程式入侵伺服器的人),遇到了真正的高手,還是不堪一擊的。 雖然說真正的高手不會隨便進入別人的伺服器,但是也難保有幾個品行不端的邪派高手看上了你的伺服器。 (我真的這麼衰麼? )而且,在漏洞的發現與補丁的發佈之間往往有一段時間的真空,任何知道漏洞資料的人都可以乘虛而入,這時,入侵偵測技術就顯得非常的重要。
入侵的檢測主要還是根據應用來進行,提供了相應的服務就應該有相應的檢測分析系統來進行保護,對於一般的主機來說,主要應該注意以下幾個方面:
1、 基於80埠入侵的檢測
WWW服務大概是最常見的服務之一了,而且由於這個服務面對廣大使用者,服務的流量和複雜度都很高,所以針對這個服務的漏洞和入侵技巧也最多。 對於NT來說,IIS一直是系統管理員比較頭疼的一部分(恨不得關了80埠),不過好在IIS自帶的日誌功能從某種程度上可以成為入侵偵測的得力幫手。 IIS自帶的日誌檔預設存放在System32/LogFiles目錄下,一般是按24小時滾動的,在IIS管理器中可以對它進行詳細的配置。 (具體怎麼配我不管你,不過你要是不詳細記錄,回頭查不到入侵者的IP可不要哭)
現在我們再假設(怎麼老是假設呀,煩不煩? )別急呀,我不能為了寫這篇文章真的去黑掉一台主機,所以只好假設了,我們假設一台WEB伺服器,開放了WWW服務,你是這台伺服器的系統管理員,已經小心地配置了IIS,使用W3C擴展的日誌格式,並至少記錄了時間(Time)、 用戶端IP(Client IP)、方法(Method)、URI資源(URI Stem)、URI查詢(URI Query),協定狀態(Protocol Status), 我們用最近比較流行的Unicode漏洞來進行分析:打開IE的視窗,在網址列輸入:127.0.0.1/scripts/.. %c1% 1c.. /winnt/system32/cmd.exe?/c+dir 預設的情況下你可以看到目錄清單(什麼? 你已經做過安全配置了,看不到? 恢復預設安裝,我們要做個實驗),讓我們來看看IIS的日誌都記錄了些什麼,打開Ex010318.log(Ex代表W3C擴展格式,後面的一串數位代表日誌的記錄日期):07:42:58 127.0.0.1 GET /scripts/ .. \.. /winnt/system32\cmd.exe /c+dir 200上面這行日誌表示在格林威治時間07:42:58(就是北京時間23:42:58), 有一個傢伙(入侵者)從127.0.0.1的IP在你的機器上利用Unicode漏洞(%c1%1c被解碼為"\",實際的情況會因為Windows語言版本的不同而有略微的差別)運行了cmd.exe,參數是/c dir, 運行結果成功(HTTP 200代表正確返回)。 (哇,記錄得可真夠全的,以後不敢隨便亂玩Unicode了)
大多數情況下,IIS的日誌會忠實地記錄它接收到的任何請求(也有特殊的不被IIS記錄的攻擊,這個我們以後再討論),所以,一個優秀的系統管理員應該擅長利用這點來發現入侵的企圖,從而保護自己的系統。 但是,IIS的日誌動輒數十兆、流量大的網站甚至數十G,人工檢查幾乎沒有可能,唯一的選擇就是使用日誌分析軟體,用任何語言編寫一個日誌分析軟體(其實就是文本篩檢程式)都非常簡單,不過考慮到一些實際情況(比如管理員不會寫程式, 或者伺服器上一時找不到日誌分析軟體),我可以告訴大家一個簡單的方法,比方說你想知道有沒有人從80埠上試圖取得你的Global.asa檔,可以使用以下的CMD命令:find "Global.asa" ex010318.log /i這個命令使用的是NT自帶的find.exe工具(所以不怕緊急情況找不著),可以輕鬆的從文字檔中找到你想過濾的字串,"Global.asa"是需要查詢的字串, ex010318.log是待過濾的文字檔,/i代表忽略大小寫。 因為我無意把這篇文章寫成微軟的Help文檔,所以關於這個命令的其他參數以及它的增強版FindStr.exe的用法請去查看Win2000的説明檔。
無論是基於日誌分析軟體或者是Find命令,你都可以建立一張敏感字串清單,包含已有的IIS漏洞(比如"+.htr" )以及未來將要出現的漏洞可能會調用的資源(比如Global.asa或者cmd.exe),通過過濾這張不斷更新的字串表,一定可以儘早瞭解入侵者的行動。
需要提醒的是,使用任何日誌分析軟體都會佔用一定的系統資源,因此,對於IIS日誌分析這樣低優先順序的任務,放在夜裡空閒時自動執行會比較合適,如果再寫一段腳本把過濾後的可疑文本發送給系統管理員,那就更加完美了。 同時,如果敏感字串表較大,過濾策略複雜,我建議還是用C寫一個專用程式會比較合算。