IDS要有效地捕捉入侵行為,必須擁有一個強大的入侵特徵數據庫,這就如同公安部門必須擁有健全的罪犯信息庫一樣。但是,IDS一般所帶的特徵數據庫都比較死板,遇到「變臉」的入侵行為往往相逢不相識。因此,管理員有必要學會如何創建滿足實際需要的特徵數據樣板,做到萬變應萬變!本文將對入侵特徵的概念、種類以及如何創建特徵進行介紹,希望能幫助讀者盡快掌握對付「變臉」的方法。

   一、特徵(signature)的基本概念

   IDS中的特徵就是指用於判別通訊信息種類的樣板數據,通常分為多種,以下是一些典型情況及識別方法:


   來自保留IP地址的連接企圖:可通過檢查IP報頭(IP header)的來源地址輕易地識別。
帶有非法TCP 標誌聯合物的數據包:可通過對比TCP報頭中的標誌集與已知正確和錯誤標記聯合物的不同點來識別。
含有特殊病毒信息的Email:可通過對比每封Email的主題信息和病態Email的主題信息來識別,或者,通過搜索特定名字的附近來識別。
查詢負載中的DNS緩衝區溢出企圖:可通過解析DNS域及檢查每個域的長度來識別利用DNS域的緩衝區溢出企圖。還有另外一個識別方法是:在負載中搜索「殼代碼利用」(exploit shellcode)的序列代碼組合。
通過對POP3服務器發出上千次同一命令而導致的DoS攻擊:通過跟蹤記錄某個命令連續發出的次數,看看是否超過了預設上限,而發出報警信息。
未登錄情況下使用文件和目錄命令對FTP服務器的文件訪問攻擊:通過創建具備狀態跟蹤的特徵樣板以監視成功登錄的FTP對話、發現未經驗證卻發命令的入侵企圖。


   從以上分類可以看出特徵的涵蓋範圍很廣,有簡單的報頭域數值、有高度複雜的連接狀態跟蹤、有擴展的協議分析。一葉即可知秋,本文將從最簡單的特徵入手,詳細討論其功能及開發、定製方法。

   另外請注意:不同的IDS產品具有的特徵功能也有所差異。例如:有些網絡IDS系統只允許很少地定製存在的特徵數據或者編寫需要的特徵數據,另外一些則允許在很寬的範圍內定製或編寫特徵數據,甚至可以是任意一個特徵;一些IDS系統只能檢查確定的報頭或負載數值,另外一些則可以獲取任何信息包的任何位置的數據。

   二、特徵有什麼作用?

   這似乎是一個答案很明顯的問題:特徵是檢測數據包中的可疑內容是否真正「不可就要」的樣板,也就是「壞分子克隆」。IDS系統本身就帶有這個重要的部分,為什麼還需要定製或編寫特徵呢?是這樣:也許你經常看到一些熟悉的通訊信息流在網絡上遊蕩,由於IDS系統的特徵數據庫過期或者這些通訊信息本身就不是攻擊或探測數據,IDS系統並沒有對它們進行關注,而這時你的好奇心升起,想在這些可疑數據再次經由時發出報警,想捕捉它們、仔細看看它們到底來自何方、有何貴幹,因此,唯一的辦法就是對現有特徵數據庫進行一些定製配置或者編寫新的特徵數據了。

   特徵的定製或編寫程度可粗可細,完全取決於實際需求。或者是只判斷是否發生了異常行為而不確定具體是什麼攻擊名號,從而節省資源和時間;或者是判斷出具體的攻擊手段或漏洞利用方式,從而獲取更多的信息。我感覺,前者適用於領導同志,後者需要具體做事者使用,宏觀加微觀,敵人別想遛進來!
三、首席特徵代表:報頭值(Header Values)

   報頭值的結構比較簡單,而且可以很清楚地識別出異常報頭信息,因此,特徵數據的首席候選人就是它。一個經典的例子是:明顯違背RFC793中規定的TCP標準、設置了SYN和FIN標記的TCP數據包。這種數據包被許多入侵軟件採用,向防火牆、路由器以及IDS系統發起攻擊。異常報頭值的來源有以下幾種:


   因為大多數操作系統和應用軟件都是在假定RFC被嚴格遵守的情況下編寫的,沒有添加針對異常數據的錯誤處理程序,所以許多包含報頭值的漏洞利用都會故意違反RFC的標準定義,明目張膽地揭發被攻擊對象的偷工減料行為。
許多包含錯誤代碼的不完善軟件也會產生違反RFC定義的報頭值數據。
並非所有的操作系統和應用程序都能全面擁護RFC定義,至少會存在一個方面與RFC不協調。
隨著時間推移,執行新功能的協議可能不被包含於現有RFC中。


   由於以上幾種情況,嚴格基於RFC的IDS特徵數據就有可能產生漏報或誤報效果。對此,RFC也隨著新出現的違反信息而不斷進行著更新,我們也有必要定期地回顧或更新存在的特徵數據定義。

   非法報頭值是特徵數據的一個非常基礎的部分,合法但可疑的報頭值也同等重要。例如,如果存在到端口31337或27374的可疑連接,就可報警說可能有特洛伊木馬在活動;再附加上其他更詳細地探測信息,就能夠進一步地判斷是真馬還是假馬。

   四、確定特徵「候選人」

   為了更好地理解如何開發基於報頭值的特殊數據,下面通過分析一個實例的整個過程進行詳細闡述。

   Synscan是一個流行的用於掃瞄和探測系統的工具,由於它的代碼被用於創建蠕蟲Ramen的開始片斷而在2001年早期大出風頭。Synscan的執行行為很具典型性,它發出的信息包具有多種可分辨的特性,包括:


   不同的來源IP地址信息
   TCP來源端口21,目標端口21
   服務類型0
   IP鑑定號碼39426(IP identification number)
   設置SYN和FIN標誌位
   不同的序列號集合(sequence numbers set)
   不同的確認號碼集合(acknowledgment numbers set)
   TCP窗口尺寸1028


   下面我們對以上這些數據進行篩選,看看哪個比較合適做特徵數據。我們要尋找的是非法、異常或可疑數據,大多數情況下,這都反映出攻擊者利用的漏洞或者他們使用的特殊技術。以下是特徵數據的候選對象:


   只具有SYN和FIN標誌集的數據包,這是公認的惡意行為跡象。
   沒有設置ACK標誌,但卻具有不同確認號碼數值的數據包,而正常情況應該是0。
   來源端口和目標端口都被設置為21的數據包,經常與FTP服務器關聯。這種端口相同的情況一般被稱為「反身」(reflexive),除了個別時候如進行一些特別NetBIOS通訊外,正常情況下不應該出現這種現象。「反身」端口本身並不違反TCP標準,但大多數情況下它們並非預期數值。例如在一個正常的 FTP對話中,目標端口一般是21,而來源端口通常都高於1023。
   TCP窗口尺寸為1028,IP鑑定號碼在所有數據包中為39426。根據IP RFC的定義,這2類數值應在數據包間有所不同,因此,如果持續不變,就表明可疑。

   五、公佈最佳特徵「得主」


   從以上4個候選對象中,我們可以單獨選出一項作為基於報頭的特徵數據,也可以選出多項組合作為特徵數據。

   選擇一項數據作為特徵有很大的侷限性。例如一個簡單的特徵可以是只具有SYN和FIN標誌的數據包,雖然這可以很好地提示我們可能有一個可疑的行為發生,但卻不能給出為什麼會發生的更多信息。SYN和FIN通常聯合在一起攻擊防護牆和其他設備,只要有它們出現,就預示著掃瞄正在發生、信息正在收集、攻擊將要開始。但僅僅這些而已,我們需要的是更多的細節資料。

   選擇以上4項數據聯合作為特徵也不現實,因為這顯得有些太特殊了。儘管能夠精確地提供行為信息,但是比僅僅使用一個數據作為特徵而言,會顯得遠遠缺乏效率。實際上,特徵定義永遠要在效率和精確度間取得折中。大多數情況下,簡單特徵比複雜特徵更傾向於誤報(false positives),因為前者很普遍;複雜特徵比簡單特徵更傾向於漏報(false negatives),因為前者太過全面,攻擊軟件的某個特徵會隨著時間的推進而變化。

   多也不行,少亦不可,完全應由實際情況決定。例如,我們想判斷攻擊可能採用的工具是什麼,那麼除了SYN和FIN標誌以外,還需要什麼其他屬性?「反身」端口雖然可疑,但是許多工具都使用到它,而且一些正常通訊也有此現象,因此不適宜選為特徵。TCP窗口尺寸1028儘管有一點可疑,但也會自然的發生。IP鑑定號碼39426也一樣。沒有ACK標誌的ACK數值很明顯是非法的,因此非常適於選為特徵數據。當然,根據環境的不同,及時地調整或組合特徵數據,才是達到最優效果的不二法門。

   接下來我們真正創建一個特徵,用於尋找並確定synscan發出的每個TCP信息包中的以下屬性:


   只設置了SYN和FIN標誌
   IP鑑定號碼為39426
   TCP窗口尺寸為1028


   第一個項目太普遍,第二個和第三個項目聯合出現在同一數據包的情況不很多,因此,將這三個項目組合起來就可以定義一個詳細的特徵了。再加上其他的 synscan屬性不會顯著地提高特徵的精確度,只能增加資源的耗費。到此,判別synscan軟件的特徵如此就創建完畢了。

   六、拓寬特徵的「社會關係」,創建識別更多異常通訊的特徵

   以上創建的特徵可以滿足對標準synscan軟件的探測了。但synscan可能存在多種「變臉」,而其它工具也可能是「變化多端」的,這樣,上述建立的特徵必然不能將它們一一識別。這時就需要結合使用特殊特徵和通用特徵,才能創建一個更好、更全面的解決方案。如果一個入侵檢測特徵既能揭示已知「壞蛋」,還能預測「潛在的罪犯」,那麼它的魅力將大大提高。

   首先看一個「變臉」synscan所發出的數據信息特徵:


   只設置了SYN標誌,這純屬正常的TCP數據包「長相」。
TCP窗口尺寸總是40而不是1028。40是初始SYN信息包中一個罕見的小窗口尺寸,比正常的數值1028少見得多。
「反身」端口數值為53而不是21。老版本的BIND使用「反身」端口用於特殊操作,新版本BIND則不再使用它,因此,經常看到這個信息會讓我們睜大懷疑的眼睛。


   以上3種數據與標準synscan產生的數據有很多相似出,因此可以初步推斷產生它的工具或者是synscan的不同版本,或者是其他基於synscan 代碼的工具。顯然,前面定義的特徵已經不能將這個「變臉」識別出來,因為3個特徵子項已經面目全非。這時,我們可以採取三種方法:


   再單獨創建一個匹配這些內容的特殊特徵。
調整我們的探測目標,只關注普通的異常行為,而不是特殊的異常行為,創建識別普通異常行為的通用特徵。
1和2都創建,既全面撒網,也重點垂釣,真實的罪犯必抓,可疑的分子也別跑。


   通用特徵可以創建如下:


   沒有設置確認標誌,但是確認數值卻非0的TCP數據包。
   只設置了SYN和FIN標誌的TCP數據包。
   初始TCP窗口尺寸低於一定數值的TCP數據包。


   使用以上的通用特徵,上面提到過的兩種異常數據包都可以有效地識別出來。看來,網大好撈魚啊。

   當然,如果需要更加詳細地探測,再在這些通用特徵的基礎上添加一些個性數據就可以創建出一個特殊特徵來。還是那個觀點,創建什麼樣的特徵、創建哪些特徵,取決於實際需求,實踐是檢測創建何種特徵的唯一標準嗎!
七、報頭值關鍵元素小結,信息包種類檢查分析

   從上面討論的例子中,我們看到了可用於創建IDS特徵的多種報頭值信息。通常,最有可能用於生成報頭相關特徵的元素為以下幾種:


   IP地址,特別保留地址、非路由地址、廣播地址。
   不應被使用的端口號,特別是眾所周知的協議端口號和木馬端口號。
   異常信息包片斷。
   特殊TCP標誌組合值。
   不應該經常出現的ICMP字節或代碼。


   知道了如何使用基於報頭的特徵數據,接下來要確定的是檢查何種信息包。確定的標準依然是根據實際需求而定。因為ICMP和UDP信息包是無狀態的,所以大多數情況下,需要對它們的每一個「屬下」都進行檢查。而TCP信息包是有連接狀態的,因此有時候可以只檢查連接中的第一個信息包。例如,象IP地址和端口這樣的特徵將在連接的所有數據包中保持不變,只對它們檢查一次就可放心。其他特徵如TCP標誌會在對話過程的不同數據包中有所不同,如果要查找特殊的標誌組合值,就需要對每一個數據包進行檢查。檢查的數量越多,消耗的資源和時間也就越多。

   另外我們還要瞭解一點:關注TCP、UDP或者ICMP的報頭信息要比關注DNS報頭信息更方便。因為TCP、UDP以及ICMP都屬於IP協議,它們的報頭信息和載荷信息都位於IP數據包的payload部分,比如要獲取TCP報頭數值,首先解析IP報頭,然後就可以判斷出這個載荷的「父親」是TCP。而像DNS這樣的協議,它又包含在UDP和TCP數據包的載荷中,如果要獲取DNS的信息,就必須深入2層才能看到真面目。而且,解析此類協議還需要更多更複雜的編程代碼,完全不如TCP等簡單。實際上,這個解析操作也正是區分不同協議的關鍵所在,評價IDS系統的好壞也體現在是否能夠很好地分析更多的協議。

   八、結語

   本文對如何定製IDS的關鍵部件特徵數據庫做了詳細地介紹,相信你已經對此有了進一步的認識。入侵者總是狡猾多變的,我們不能讓手中的鋼刀有刃無光,要經常地磨礪它、改裝它,才可能以萬變應萬變,讓入侵者膽顫心驚!

資料出處 http://www.nohack.cn/
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ivan0914 的頭像
    ivan0914

    I'n Blog 之萬象真藏

    ivan0914 發表在 痞客邦 留言(0) 人氣()