千里行工作室
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的開始片斷而在2023年早期大出風頭。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類數值應在資料報間有所不同,因此,如果持續不變,就表明可疑
IDS入侵特徵庫建立例項解析(2)
五 公布最佳特徵 得主 從以上4個候選物件中,我們可以單獨選出一項作為基於報頭的特徵資料,也可以選出多項組合作為特徵資料。選擇一項資料作為特徵有很大的侷限性。例如乙個簡單的特徵可以是只具有syn和fin標誌的資料報,雖然這可以很好地提示我們可能有乙個可疑的行為發生,但卻不能給出為什麼會發生的更多資訊...
手動建立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庫中,這樣其它專案才能通過設...