五、公布最佳特徵「得主」
從以上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的關鍵部件特徵資料庫做了詳細地介紹,相信你已經對此有了進一步的認識。入侵者總是狡猾多變的,我們不能讓手中的鋼刀有刃無光,要經常地磨礪它、改裝它,才可能以萬變應萬變,讓入侵者膽戰心驚!
IDS入侵特徵庫建立例項解析(1)
千里行工作室 ids要有效地捕捉入侵行為,必須擁有乙個強大的入侵特徵資料庫,這就如同公安部門必須擁有健全的罪犯資訊庫一樣。但是,ids一般所帶的特徵資料庫都比較死板,遇到 變臉 的入侵行為往往相逢不相識。因此,管理員有必要學會如何建立滿足實際需要的特徵資料樣板,做到萬變應萬變!本文將對入侵特徵的概念...
手動建立makefile簡單例項解析
假設我們有乙個程式由5個檔案組成,源 如下 main.c include mytool1.h include mytool2.h int main mytool1.c include mytool1.h include void mytool1 print char print str mytool...
CocoaPods建立私有庫例項
導言1.從最簡單的開始 pod私庫建立,可以分為三部分 1 庫,就是我們一般存在 的git庫,例如github,推薦用國內的。例如gitee 2 podspec,這個是建立私庫的核心部分,用命令建立後,手動修改 3 gitspec,即將第二部中的podspec存到某git庫中,這樣其它專案才能通過設...