詳解IDS入侵特征庫樣本數(shù)據(jù)如何建立
詳解IDS入侵特征庫樣本數(shù)據(jù)如何建立
什么是IDS?
IDS是英文“Intrusion Detection Systems”的縮寫,中文意思是“入侵檢測系統(tǒng)”。專業(yè)上講就是依照一定的安全策略,通過軟、硬件,對網(wǎng)絡(luò)、系統(tǒng)的運行狀況進行監(jiān)視,盡可能發(fā)現(xiàn)各種攻擊企圖、攻擊行為或者攻擊結(jié)果,以保證網(wǎng)絡(luò)系統(tǒng)資源的機密性、完整性和可用性。做一個形象的比喻:假如防火墻是一幢大樓的門鎖,那么IDS就是這幢大樓里的監(jiān)視系統(tǒng)。一旦小偷爬窗進入大樓,或內(nèi)部人員有越界行為,只有實時監(jiān)視系統(tǒng)才能發(fā)現(xiàn)情況并發(fā)出警告。
IDS要有效地捕捉入侵行為,必須擁有一個強大的入侵特征數(shù)據(jù)庫,這就如同一款強大的殺毒軟件必須擁有強大且完善的病毒庫一樣。但是,IDS一般所帶的特征數(shù)據(jù)庫都比較滯后于新的攻擊手段,入侵行為稍微改變往往便會相逢不相識。因此,管理員有必要學(xué)會如何創(chuàng)建滿足實際需要的特征數(shù)據(jù)樣板!本文將對入侵特征的概念、種類以及如何創(chuàng)建特征進行介紹,希望能幫助讀者盡快掌握對付入侵行為的方法。
特征(Signature)的基本概念
IDS中的特征一般指用于判別通訊信息種類的特征數(shù)據(jù),以下是一些典型情況及識別方法:
來自保留IP地址的連接企圖:可通過檢查IP報頭(IP header)的來源地址輕易地識別。
帶有非法TCP 標(biāo)識的數(shù)據(jù)包:可通過對比TCP報頭中的標(biāo)志集與已知正確和錯誤標(biāo)記的不同點來識別。
含有特殊病毒信息的Email:可通過對比每封Email的主題信息和病態(tài)Email的主題信息來識別,或者通過搜索特定名字的附件來識別。
查詢負(fù)載中的DNS緩沖區(qū)溢出企圖:可通過解析DNS域及檢查每個域的長度來識別利用DNS域的緩沖區(qū)溢出企圖;還有另外一個識別方法是,在負(fù)載中搜索“殼代碼利用”(Exploit Shellcode)的序列代碼組合。
針對POP3服務(wù)器的DoS攻擊:通過跟蹤記錄某個命令連續(xù)發(fā)出的次數(shù),看看是否超過了預(yù)設(shè)上限,而發(fā)出報警信息。
未登錄情況下使用文件和目錄命令對FTP服務(wù)器的文件訪問攻擊:通過創(chuàng)建具備狀態(tài)跟蹤的特征數(shù)據(jù)以監(jiān)視成功登錄的FTP對話、發(fā)現(xiàn)未經(jīng)驗證卻發(fā)命令的入侵企圖。
從以上分類可以看出特征的涵蓋范圍很廣,有簡單的報頭域數(shù)值、有高度復(fù)雜的連接狀態(tài)跟蹤、有擴展的協(xié)議分析。筆者將從最簡單的特征入手,詳細(xì)討論其功能及開發(fā)、定制方法。
但用戶需要知道的是,不同的IDS產(chǎn)品具有的特征功能也有所差異。如有些網(wǎng)絡(luò)IDS系統(tǒng)只允許很少地定制存在的特征數(shù)據(jù)或者編寫需要的特征數(shù)據(jù),另外一些則允許在很寬的范圍內(nèi)定制或編寫用戶需求的特征數(shù)據(jù),甚至可以是任意特征;再則一些IDS系統(tǒng)只能檢查確定的報頭或負(fù)載數(shù)值,另外一些則可以獲取任何信息包的任何位置的數(shù)據(jù)。
特征有什么作用?
這似乎是一個答案很明顯的問題:特征是檢測數(shù)據(jù)包中的可疑內(nèi)容是否存在攻擊行為的對照物。IDS系統(tǒng)本身已經(jīng)擁有了特征庫,為什么還需要定制或編寫特征呢?筆者以為,也許你經(jīng)??吹揭恍┦煜さ耐ㄓ嵭畔⒘髟诰W(wǎng)絡(luò)上游蕩,由于IDS系統(tǒng)的特征數(shù)據(jù)庫滯后或者這些通訊信息本身就不是攻擊或探測數(shù)據(jù),IDS系統(tǒng)并不會十分關(guān)注這樣的信息,但身為網(wǎng)絡(luò)的管理員,我們必須對這樣的可疑數(shù)據(jù)提高警惕,因此我們需要指定一些特征樣本,捕捉它們、仔細(xì)分析它們從何而來,目的又是什么。因此唯一的辦法就是對現(xiàn)有特征數(shù)據(jù)庫進行一些定制配置或者編寫新的特征數(shù)據(jù)。
特征的定制或編寫程度可粗可細(xì),完全取決于實際需求。或者是只判斷是否發(fā)生了異常行為而不確定具體是什么攻擊,從而節(jié)省資源和時間;或者是判斷出具體的攻擊手段或漏洞利用方式,從而獲取更多的信息。
報頭值(Header Values)
報頭值的結(jié)構(gòu)比較簡單,而且可以很清楚地識別出異常報頭信息,因此在編寫特征數(shù)據(jù)時,首先想到的就是它。一個經(jīng)典的例子是:明顯違背RFC793中規(guī)定的TCP標(biāo)準(zhǔn)、設(shè)置了SYN和FIN標(biāo)記的TCP數(shù)據(jù)包。這種數(shù)據(jù)包被許多入侵軟件采用,向防火墻、路由器以及IDS系統(tǒng)發(fā)起攻擊。異常報頭值的來源有以下幾種:
因為大多數(shù)操作系統(tǒng)和應(yīng)用軟件都是在假定RFC被嚴(yán)格遵守的情況下編寫的,沒有添加針對異常數(shù)據(jù)的錯誤處理程序,所以許多包含報頭值的漏洞利用都會故意違反RFC的標(biāo)準(zhǔn)定義。許多包含錯誤代碼的不完善軟件也會產(chǎn)生違反RFC定義的報頭值數(shù)據(jù)。并非所有的操作系統(tǒng)和應(yīng)用程序都能全面擁護RFC定義,至少會存在一個方面與RFC不協(xié)調(diào)。當(dāng)然隨著時間推移,技術(shù)的不斷創(chuàng)新,執(zhí)行新功能的協(xié)議可能不被包含于現(xiàn)有RFC中。
由于以上幾種情況,嚴(yán)格基于RFC的IDS特征數(shù)據(jù)就有可能產(chǎn)生漏報或誤報效果。對此,RFC也隨著新出現(xiàn)的違反信息而不斷進行著更新,這就需要我們有必要定期地回顧或更新存在的特征數(shù)據(jù)定義,及時發(fā)現(xiàn)不足。
非法報頭值是特征數(shù)據(jù)的一個非常基礎(chǔ)的部分,合法但可疑的報頭值也同等重要。例如,如果存在到端口31337或27374的可疑連接,就可能存在木馬活動;再附加上其他更詳細(xì)地探測信息,就能夠進一步地判斷是否真的存在木馬。
確定特征數(shù)據(jù)的候選對象
為了更好地理解如何開發(fā)基于報頭值的特殊數(shù)據(jù),下面通過分析一個實例的進行詳細(xì)闡述。
Synscan是一個流行的用于掃描和探測系統(tǒng)的工具,由于它的代碼被用于創(chuàng)建蠕蟲Ramen的頭部片斷而在2001年早期大出風(fēng)頭。Synscan的執(zhí)行行為很具典型性,它發(fā)出的信息包具有多種可分辨的特性,包括:
不同的來源IP地址信息
TCP來源端口21,目標(biāo)端口21
服務(wù)類型0
IP鑒定號碼39426(IP identification number)
設(shè)置SYN和FIN標(biāo)志位
不同的序列號集合(sequence numbers set)
不同的確認(rèn)號碼集合(acknowledgment numbers set)
TCP窗口尺寸1028
下面我們對以上這些數(shù)據(jù)進行篩選,看看哪個比較合適做特征數(shù)據(jù)。我們要尋找的是非法、異常或可疑數(shù)據(jù),大多數(shù)情況下,這都反映出攻擊者利用的漏洞或者他們使用的特殊技術(shù)。以下是特征數(shù)據(jù)的候選對象:
只具有SYN和FIN標(biāo)志集的數(shù)據(jù)包,這是公認(rèn)的惡意行為跡象。
沒有設(shè)置ACK標(biāo)志,但卻具有不同確認(rèn)號碼數(shù)值的數(shù)據(jù)包,而正常情況應(yīng)該是0。
來源端口和目標(biāo)端口都被設(shè)置為21的數(shù)據(jù)包,經(jīng)常與FTP服務(wù)器關(guān)聯(lián)。這種端口相同的情況一般被稱為reflexive,除了個別時候如進行一些特別NetBIOS通訊外,正常情況下不應(yīng)該出現(xiàn)這種現(xiàn)象。reflexive端口本身并不違反TCP標(biāo)準(zhǔn),但大多數(shù)情況下它們并非預(yù)期數(shù)值。例如在一個正常的FTP對話中,目標(biāo)端口一般是21,而來源端口通常都高于1023。
TCP窗口尺寸為1028,IP鑒定號碼在所有數(shù)據(jù)包中為39426。根據(jù)IP RFC的定義,這2類數(shù)值應(yīng)在數(shù)據(jù)包間有所不同,因此,如果持續(xù)不變,就表明可疑。
如何正確使用特征
從以上4個候選特征對象中,我們可以單獨選出一項作為基于報頭的特征數(shù)據(jù),也可以選出多項組合作為特征數(shù)據(jù)。
選擇一項數(shù)據(jù)作為特征有很大的局限性。例如一個簡單的特征可以是只具有SYN和FIN標(biāo)志的數(shù)據(jù)包,雖然這可以很好地提示我們可能有一個可疑的行為發(fā)生,但卻不能給出為什么會發(fā)生的更多信息。SYN和FIN通常聯(lián)合在一起攻擊防護墻和其他設(shè)備,只要有它們出現(xiàn),就預(yù)示著掃描正在發(fā)生、信息正在收集、攻擊將要開始。但僅僅這些而已,我們需要的是更多的細(xì)節(jié)資料。
選擇以上4項數(shù)據(jù)聯(lián)合作為特征也不現(xiàn)實,因為這顯得有些太特殊了,而且可能占有太多的系統(tǒng)資源。盡管能夠精確地提供行為信息,但是比僅僅使用一個數(shù)據(jù)作為特征而言,會顯得遠遠缺乏效率。實際上,特征定義永遠要在效率和精確度間取得折中。大多數(shù)情況下,簡單特征比復(fù)雜特征更傾向于誤報(false positives),因為前者很普遍;復(fù)雜特征比簡單特征更傾向于漏報(false negatives),因為前者太過全面,攻擊軟件的某個特征會隨著時間的推進而變化。
多也不行,少亦不可,完全應(yīng)由實際情況決定。例如,我們想判斷攻擊可能采用的工具是什么,那么除了SYN和FIN標(biāo)志以外,還需要什么其他屬性?“反身”端口雖然可疑,但是許多工具都使用到它,而且一些正常通訊也有此現(xiàn)象,因此不適宜選為特征。TCP窗口尺寸1028盡管有一點可疑,但也會自然的發(fā)生。IP鑒定號碼39426也一樣。沒有ACK標(biāo)志的ACK數(shù)值很明顯是非法的,因此非常適于選為特征數(shù)據(jù)。當(dāng)然,根據(jù)環(huán)境的不同,及時地調(diào)整或組合特征數(shù)據(jù),才是達到最優(yōu)效果的不二法門。
接下來我們創(chuàng)建一個特征,用于尋找并確定synscan發(fā)出的每個TCP信息包中的以下屬性:
只設(shè)置了SYN和FIN標(biāo)志
IP鑒定號碼為39426
TCP窗口尺寸為1028
第一個項目已經(jīng)十分普遍,第二個和第三個項目聯(lián)合出現(xiàn)在同一數(shù)據(jù)包的情況不很多,因此,將這三個項目組合起來就可以定義一個詳細(xì)的特征了。再加上其他的synscan屬性不會顯著地提高特征的精確度,只能增加資源的耗費。到此,判別synscan軟件的特征如此就創(chuàng)建完畢了。
擴展,創(chuàng)建識別更多異常通訊的特征
以上創(chuàng)建的特征可以滿足對標(biāo)準(zhǔn)synscan軟件的探測了。但synscan可能存在多種變化,而其它工具也可能是隨時改變的,這樣上述建立的特征必然不能將它們一一識別。這時就需要結(jié)合使用特殊特征和通用特征,才能創(chuàng)建一個更好、更全面的解決方案。如果一個入侵檢測特征既能揭示已知威脅,還能預(yù)測潛在威脅,這樣會大大提供IDS的性能。
首先看一個“變臉”synscan所發(fā)出的數(shù)據(jù)信息特征:
只設(shè)置了SYN標(biāo)志,純屬正常的TCP數(shù)據(jù)包特征。
TCP窗口尺寸總是40而不是1028。40是初始SYN信息包中一個罕見的小窗口尺寸,比正常的數(shù)值1028少見得多。
“反身”端口數(shù)值為53而不是21。老版本的BIND使用“反身”端口用于特殊操作,新版本BIND則不再使用它,因此,經(jīng)??吹竭@個信息會讓我們睜大懷疑的眼睛。
以上3種數(shù)據(jù)與標(biāo)準(zhǔn)synscan產(chǎn)生的數(shù)據(jù)有很多相似出,因此可以初步推斷產(chǎn)生它的工具或者是synscan的不同版本,或者是其他基于synscan代碼的工具。顯然,前面定義的特征已經(jīng)不能將這個“變臉”識別出來,因為3個特征子項已經(jīng)面目全非。這時,我們可以采取三種方法:
再單獨創(chuàng)建一個匹配這些內(nèi)容的特殊特征。
調(diào)整我們的探測目標(biāo),只關(guān)注普通的異常行為,而不是特殊的異常行為,創(chuàng)建識別普通異常行為的通用特征。
1和2都創(chuàng)建,既全面撒網(wǎng),也重點垂釣,真實的罪犯必抓,可疑的分子也別跑。
通用特征可以創(chuàng)建如下:
沒有設(shè)置確認(rèn)標(biāo)志,但是確認(rèn)數(shù)值卻非0的TCP數(shù)據(jù)包。
只設(shè)置了SYN和FIN標(biāo)志的TCP數(shù)據(jù)包。
初始TCP窗口尺寸低于一定數(shù)值的TCP數(shù)據(jù)包。
使用以上的通用特征,上面提到過的兩種異常數(shù)據(jù)包都可以有效地識別出來??磥?,網(wǎng)大好撈魚啊。
當(dāng)然,如果需要更加詳細(xì)地探測,再在這些通用特征的基礎(chǔ)上添加一些個性數(shù)據(jù)就可以創(chuàng)建出一個特殊特征來。還是那個觀點,創(chuàng)建什么樣的特征、創(chuàng)建哪些特征,取決于實際需求,實踐是檢測創(chuàng)建何種特征的唯一標(biāo)準(zhǔn)嗎!
報頭值關(guān)鍵元素小結(jié),信息包種類檢查分析
從上面討論的例子中,我們看到了可用于創(chuàng)建IDS特征的多種報頭值信息。通常,最有可能用于生成報頭相關(guān)特征的元素為以下幾種:
IP地址,特別保留地址、非路由地址、廣播地址。
不應(yīng)被使用的端口號,特別是眾所周知的協(xié)議端口號和木馬端口號。
異常信息包片斷。
特殊TCP標(biāo)志組合值。
不應(yīng)該經(jīng)常出現(xiàn)的ICMP字節(jié)或代碼。
知道了如何使用基于報頭的特征數(shù)據(jù),接下來要確定的是檢查何種信息包。確定的標(biāo)準(zhǔn)依然是根據(jù)實際需求而定。因為ICMP和UDP信息包是無狀態(tài)的,所以大多數(shù)情況下,需要對它們的每一個屬性都進行檢查。而TCP信息包是有連接狀態(tài)的,因此有時候可以只檢查連接中的第一個信息包。例如,象IP地址和端口這樣的特征將在連接的所有數(shù)據(jù)包中保持不變,只對它們檢查一次就可放心。其他特征如TCP標(biāo)志會在對話過程的不同數(shù)據(jù)包中有所不同,如果要查找特殊的標(biāo)志組合值,就需要對每一個數(shù)據(jù)包進行檢查。檢查的數(shù)量越多,消耗的資源和時間也就越多。
另外我們還要了解一點:關(guān)注TCP、UDP或者ICMP的報頭信息要比關(guān)注DNS報頭信息更方便。因為TCP、UDP以及ICMP都屬于IP協(xié)議,它們的報頭信息和載荷信息都位于IP數(shù)據(jù)包的payload部分,比如要獲取TCP報頭數(shù)值,首先解析IP報頭,然后就可以判斷出這個載荷的父類是TCP。而象DNS這樣的協(xié)議,它又包含在UDP和TCP數(shù)據(jù)包的載荷中,如果要獲取DNS的信息,就必須深入2層才能看到真面目。而且,解析此類協(xié)議還需要更多更復(fù)雜的編程代碼,完全不如TCP等簡單。實際上,這個解析操作也正是區(qū)分不同協(xié)議的關(guān)鍵所在,評價IDS系統(tǒng)的好壞也體現(xiàn)在是否能夠很好地分析更多的協(xié)議。