賈寶林,連 棟
(上海工業(yè)自動化儀表研究院有限公司,中國 上海 200233)
隨著網絡技術的迅猛發(fā)展,網絡安全問題也越發(fā)嚴峻。傳統(tǒng)的防火墻與殺毒軟件已無法滿足日益增長的安全需求。入侵檢測系統(tǒng)是對其他安全工具(如防火墻等)網絡入侵檢測的一種有效彌補方法[1],可以提供多層次、全方位的立體安全防護策略,最大程度地保障網絡安全。
本文提出了一種基于Java Script 對象簡譜(Java Script object notation,JSON)的計算機網絡入侵監(jiān)測規(guī)則設計方法。該方法在通用匹配方法的基礎上,針對性地對各應用協(xié)議的具體字段進行特征匹配,使用多種子規(guī)則混合匹配的方式,既保證了匹配效率,又有效提高了匹配準確率。
隨著網絡安全技術的發(fā)展,除了防火墻和殺毒系統(tǒng)的防護以外,入侵檢測技術也已成為抵御網絡攻擊的有效方式。入侵檢測系統(tǒng)(intrusion detection system,IDS)被認為是防火墻之后的第二道安全閘門,能夠承接防護和響應的過程,在不影響系統(tǒng)性能的情況下對系統(tǒng)進行監(jiān)測[2]。入侵檢測系統(tǒng)對計算機系統(tǒng)與網絡中的安全事件檢測的技術主要包括數據采集、分析與結果處理三個功能[3]。
入侵檢測系統(tǒng)主要通過以下步驟來實現(xiàn)功能:①分析和監(jiān)聽用戶及系統(tǒng)行為活動;②設計系統(tǒng)結構,發(fā)現(xiàn)系統(tǒng)的弱點;③識別攻擊行為,并發(fā)出警報;④分析統(tǒng)計異常的行為;⑤對數據的完整性進行評估。
入侵檢測的過程有信息收集、分析和處理三個步驟。收集信息是入侵檢測的第一步[4]。對于入侵檢測系統(tǒng)而言,典型的數據收集方式是通過網絡鏈路的端口鏡像或分光設備把正常的網絡通信數據復制一份至檢測系統(tǒng)。系統(tǒng)在獲得數據包后,會進行一系列預處理,包括數據包分析、包重組、協(xié)議解析等,然后將處理后的數據進行后續(xù)的行為分析。其中,入侵行為分析是入侵檢測的核心。其本質是根據用戶行為的抽象描述和已有的安全策略,使用推理或模式匹配等智能技術判斷用戶的行為是否為入侵行為。
目前,商用入侵檢測系統(tǒng)大多基于規(guī)則庫的模型。規(guī)則庫的完備程度決定了系統(tǒng)性能的優(yōu)劣[5],而規(guī)則設計更是重中之重。針對傳統(tǒng)的規(guī)則庫特征描述文件較為繁雜、可讀性較差、對協(xié)議的支持深度不夠的情況,本文提出了一種基于JSON的計算機網絡入侵監(jiān)測規(guī)則設計方法,并從需求分析、數據分析、特征規(guī)則設計等方面進行了詳細描述,方便用戶使用和理解該設計方法。
入侵檢測系統(tǒng)中,入侵行為分析是入侵檢測的核心。規(guī)則庫描述入侵攻擊事件的特征和相應的響應規(guī)則,并控制入侵檢測引擎,是入侵檢測系統(tǒng)能否有效檢測入侵的關鍵[6]。檢測規(guī)則的存儲方式以及規(guī)則內容的易讀性直接影響著規(guī)則獲取能力和規(guī)則應用效率,是入侵檢測系統(tǒng)中的基本問題之一。因此,其對入侵檢測系統(tǒng)規(guī)則的存儲方式模式、規(guī)則庫的構建研究和改進具有重要價值。目前,主流的入侵特征規(guī)則主要通過對數據包數據區(qū)直接進行模式匹配、規(guī)則判斷,或者在通過端口或特征位判斷出協(xié)議后,再對指定數據區(qū)進行特征匹配。同時,其規(guī)則庫中特征描述文件較為煩雜,可讀性較差,且對協(xié)議的支持深度不夠,無法滿足在協(xié)議日益多樣的情況下對內容進行特征匹配的需求??傮w來看,目前主流特征規(guī)則庫的設計存在可擴展性弱、智能化低的局限。在這種背景下,進行入侵檢測規(guī)則設計時,既要滿足對通用字段的有效匹配,又要滿足各種協(xié)議字段內容的精確匹配;同時,還需要兼顧后期的可擴展性,以及復雜邏輯下多種模塊組合匹配的需求。
傳輸控制協(xié)議/網際互連協(xié)議(trasmission control protocol/Internet protocol,TCP/IP)在一定程度上參考了開放式系統(tǒng)互聯(lián)通信通信參考模型(open system interconnection reference model, OSI)的體系結構。TCP/IP協(xié)議共有四層,從下到上分別是網絡接入層、網絡層、傳輸層和應用層[7]。應用層的主要協(xié)議有電信網絡協(xié)議(telecom municationnet work protocol,Telnet)、文件傳輸協(xié)議(file transfer protocol, FTP)、簡單郵件傳輸協(xié)議(simple mail transfer protocol, SMTP)等,用于接收來自傳輸層的數據或者按不同應用要求與方式將數據傳輸至傳輸層。傳輸層的主要協(xié)議有用戶數據報協(xié)議(user datagram protocol, UDP)、傳輸控制協(xié)議(transmission control protocol, TCP),是使用者使用平臺和計算機信息網內部數據結合的通道,可以實現(xiàn)數據傳輸與數據共享。網絡層的主要協(xié)議有網際控制報文協(xié)議(internet control message protocol, ICMP)、網際互連協(xié)議(internet protocol, IP)、網絡組管理協(xié)議(internet group management protocol, IGMP),主要負責網絡中數據包的傳送等。網絡接入層又稱網路接口層或數據鏈路層,主要協(xié)議有地址解析協(xié)議(address resolution protocol, ARP)、反向地址轉換協(xié)議(reverse address resolution protocol, RARP),主要功能是提供鏈路管理錯誤檢測、對不同通信媒介有關信息細節(jié)問題進行有效處理等[8]。本規(guī)則設計主要針對的是應用層協(xié)議解析后的數據,同時通過內置一些固定字段以兼顧數據鏈路層、網絡層、傳輸層等字段內容。
數據包在前置協(xié)議解析模塊中統(tǒng)一結構化處理為JSON數據結構體,包含了網絡層、傳輸層等基礎信息和應用層協(xié)議數據信息。以超文本傳輸協(xié)議(hyper text transfer protocol, HTTP)為例,經結構化處理后的數據結構應包含IP、端口、請求統(tǒng)一資源定位符(uniform resource locator,URL)、主機等字段。HTTP協(xié)議示例字段如表1所示。JSON作為一種輕量級數據交換格式,具有良好的延展性和可閱讀性,只要通過指定的鍵值即可完成字段的讀取,可以方便地與特征規(guī)則字段進行匹配。
表1 HTTP協(xié)議示例字段表
不同的應用協(xié)議對應不同的應用場景,同時也會出現(xiàn)不同的匹配需求。如在工控環(huán)境下的Modbus協(xié)議,在很多情況下并不需要知道操作的具體內容,只要是寫數據即為敏感操作,需要對該操作進行告警。在這種背景下,只需要對功能碼進行匹配即可實現(xiàn)。而一些通用的應用協(xié)議(如HTTP等)的應用范圍較廣,進行特征匹配時更在意其字段的內容是否出現(xiàn)攻擊行為等。此時,就需要對其內容作進一步的特征規(guī)則匹配。
在特征內容匹配方面,除了常規(guī)的字符串比較、模式匹配之外,協(xié)議應該還具有進一步的匹配能力,如數據范圍的大小限定、指定數據偏移位置及長度的限定、通用正則匹配的需求以及字段匹配前的預處理功能等。
JSON是一種輕量級的數據交換格式,非常易于理解和編寫,且數據格式簡單,易于讀寫、解析[9]。其具有良好的自我描述性,同時還具有較為明確的層級結構。在本文中,特征規(guī)則文本設計為JSON格式字符串存儲,在整體結構上分為規(guī)則描述特征和規(guī)則內容兩個部分。
①規(guī)則描述部分作為本條特征的概要信息,指定了本條特征的規(guī)則計算方式與應用層協(xié)議,主要包含匹配類型、匹配協(xié)議、規(guī)則表達式這三個字段。規(guī)則描述與匹配鍵值如表2所示。匹配類型字段主要規(guī)定了當前特征規(guī)則匹配方式。本設計中的特征規(guī)則設計使用混合匹配方式,此處固定為mixed。匹配協(xié)議字段主要用于確保當前特征規(guī)則與解析后的應用層協(xié)議數據保持一致,避免交叉匹配,降低匹配效率。規(guī)則表達式字段構建了具體的子規(guī)則值運算邏輯,從規(guī)則表達式中提取出對應的子規(guī)則名稱與運算邏輯。在進行子規(guī)則匹配后,按運算邏輯對匹配結果進行計算,可獲取最終的特征規(guī)則匹配結果。
表2 規(guī)則描述與匹配鍵值表
規(guī)則表達式字段計算使用類似逆波蘭式算法,對已經匹配的子規(guī)則值進行邏輯計算,并根據得出的最終結果判斷當前數據是否命中此規(guī)則。在規(guī)則表達式中共包含兩種類型字符:規(guī)則名稱字符,主要用于定義子規(guī)則名稱,包含所有字母、數字、下劃線和中劃線;邏輯字符,主要用于各子規(guī)則值之間的邏輯運算,包含“&”、“|”、“!”、“(”和“)”。該規(guī)則表達式支持以下邏輯操作: 與操作(“&&”);或操作(“||”);非操作(“!”);括號操作(“()”)。在進行邏輯運算時,首先從規(guī)則表達式中提取出各子規(guī)則名稱,然后根據子規(guī)則名稱提取各子規(guī)則匹配值,最后對值進行邏輯運算并得出結果。
②在特征規(guī)則內容部分定義了當前特征的詳細信息。規(guī)則中,各字段與數據包中結構化后的數據字段相同,以方便、快速地建立映射關系。在此部分中,可以包含多個key-value鍵值對。每個key對應的是待匹配的應用層協(xié)議字段名稱。通過key,可以直接從JSON結構化協(xié)議數據中提取對應內容。同時,為了滿足網絡層、傳輸層協(xié)議字段的匹配需要,本設計內置通用字段匹配。其在數據包中的名稱相對固定:內置字段以下劃線“_”為開頭;源IP、源端口、數據流方向、傳輸層協(xié)議字段分別以_sip、_sport、_direction、_proto等表示。
當前特征的子規(guī)則為key-value鍵值對中的value部分。每個子規(guī)則均包含特征值、子規(guī)則名稱、匹配方法、匹配選項這四個字段。
特征子規(guī)則鍵值如表3所示。
表3 特征子規(guī)則鍵值表
規(guī)則表達式算法流程如圖1所示。
圖1 規(guī)則表達式算法流程圖
特征值字段描述了當前子規(guī)則特征的具體內容,可以為數字和字符串2種形式。當特征值字段為數字時,對應的匹配類型固定為“number”,在待匹配值與此字段值相等時即為命中此子規(guī)則;當特征值字段為字符串形式時,其具體形式與匹配類型直接相關聯(lián)。子規(guī)則名稱字段定義了當前特征子規(guī)則的名稱,主要用于最后的匹配結果邏輯運算。
本設計內置了多種匹配方法,可適配不同情況下的需求。當匹配方法為“number”時,value值中的數據采用開閉區(qū)間的方法進行范圍控制,若value值為“m-n”,則限定范圍是m到n之間;若value值為“m-”,則限定范圍是大于m;若value值為“-n”,則限定范圍是小于n。匹配方法關鍵字定義如表4所示。
表4 匹配方法關鍵字定義表
匹配選項字段作為匹配方法的補充選項,定義了匹配時的相關參數,同時還對待匹配數據進行預處理。通過nocase字段,可以在字符串匹配時不區(qū)分大小寫;通過offset和depth字段,可以在匹配時,截取指定位置及長度的數據與特征規(guī)則進行比對;通過pre_func內置的預處理方法,可以在匹配前對指定數據進行處理,如URL解碼等操作。
①在實際環(huán)境中的網絡入侵,很多都是基于HTTP協(xié)議的。例如:通用漏洞披露(common vulnerabilities & exposures,CVE)編號為CVE-2013-2567的漏洞,其特征名稱為“Apache Struts 對象導航圖語言(object graph navigution language,OGNL)表達式注入漏洞”。攻擊者通過內部賬戶可以在未授權的情況下訪問用戶不可見的敏感文件。在本攻擊特征中,使用的通信協(xié)議為HTTP,通過get請求,發(fā)送經過URL編碼的URL地址,在URL中包含“/cgi-bin/mft/”“wireless_mft.cgi”“manufacture.cgi”“username”“password”等固定字段。其中,“wireless_mft.cgi”與“manufacture.cgi”其中之一即可,“username”和“password”兩個字段順序隨機,且中間會出現(xiàn)隨機字符。基于以上特征信息,生成的特征規(guī)則匹配類型match_type固定為mixed,匹配協(xié)議為HTTP。規(guī)則匹配需要同時滿足請求方法為get和符合兩種URL地址中的一個。請求方法特征子規(guī)則使用String完全匹配的方式。URL特征子規(guī)則使用正則匹配方式。最終結果基于“Method && (Url1 || Url2)”進行混合運算。其中:URL1值應為"/cgi-bin/mft/(wireless_mft.cgi|manufacture.cgi)?.*username.*password.*";URL2值應為"/cgi-bin/mft/(wireless_mft.cgi|manufacture.cgi)?.*password.*username.*"。兩者均使用“url_decode”關鍵字進行預處理解碼。
②在部分工控網絡環(huán)境中,只需要對儀器儀表等進行周期性數據監(jiān)控。此時,一般只需要對數據進行讀操作。寫操作則需要更高的控制權限。當網絡中出現(xiàn)對某臺設備嘗試寫操作時,就需要對此動作進行告警。在這種情況下,對寫的內容并沒有嚴格的限定。根據這種需求,同樣可以通過本文中的特征規(guī)則進行實現(xiàn)。以Modbus協(xié)議寫單寄存器告警為例,匹配類型match_type固定為mixed,匹配協(xié)議為Modbus,子規(guī)則特征中只需要對功能碼Func_code字段進行數字比較即可。其中:“寫單寄存器”功能碼值為6;匹配方式為數字匹配;使用關鍵字“number”。
③本文以某地區(qū)部門工業(yè)安全流量審計平臺為例。入侵檢測引擎是該平臺的重要子模塊。根據用戶需求,在進行特征處理時,不僅要對網絡通用的入侵特征進行告警,還要對工控環(huán)境下不安全的寫操作進行告警;同時,在部分工控協(xié)議中,需要對指定字段數值范圍進行界限判斷,并在數據異常時產生告警信息。在此背景下,將基于JSON的規(guī)則設計應用在協(xié)議數據匹配引擎開發(fā)中,并將其集成至審計平臺中。系統(tǒng)結構如圖2所示。
圖2 系統(tǒng)結構圖
在平臺正常運行情況下,通過對不同的樣本數據進行回放的方式對規(guī)則引擎的可靠性、有效性進行了測試。分別以10 mbit/s、50 mbit/s、100 mbit/s的速度對平臺數據口進行數據包回放,以測試平臺數據處理性能?;胤诺臄祿谢旌隙喾N特征包,如Modbus協(xié)議敏感操作數據包、部分攻擊特征數據包以及多種應用協(xié)議的正常數據交互包等,用于測試異常行為檢測效果。根據測試反饋,其結果完全符合設計要求。
本文根據入侵檢測系統(tǒng)在網絡安全需求日益增加的背景,提出了一種基于JSON的計算機網絡入侵監(jiān)測規(guī)則設計方法,通過需求調研、數據分析、架構設計、系統(tǒng)驗證與測試等的完整流程,設計出一套高效、擴展性良好的特征規(guī)則設計方法。在通用匹配方法的基礎上,針對性地對各應用協(xié)議的具體字段進行特征匹配,使用多種子規(guī)則混合匹配的方式,在保證匹配效率的基礎上有效提高了匹配準確率。
本文設計一定程度上可以為入侵檢測系統(tǒng)的攻擊特征庫的設計提供參考,并為設計人員在進行特征匹配規(guī)則設計時提供一種可行的思路與方法。同時,在后續(xù)研究工作中,應多考慮新型的網絡應用場景,解決如何在實際環(huán)境中進行實時性和適應性驗證的問題[10]。