景陽

摘要:從網絡報文中獲取用戶關注的特定信息,是一項很重要且極具意義的工作。在網絡信息監控、安全防御系統中,經常需要從報文中,按照使用者指定的內容提取某些信息。目前這項工作面臨的主要挑戰是:針對不同的用戶需求,需要提取的內容及格式不一樣,如何在低耗時、低開發成本的情況下,快速、準確的找到要提取的信息的位置,并用合適的方式提取出來。本文提出了一種基于規則編寫的報文特定信息提取方法,可以使報文分析人員與信息提取人員工作解耦合,并且可以達到避免大量重復工作的效果,來快速的相應市場需求。
關鍵字:網絡安全;報文特征分析;報文特定信息提取;賬號信息提取;規則編制;規則匹配
引言
隨著互聯網技術的發展,一方面,維護網絡安全變的越來越重要,另一方面,人們對網絡安全意識也越來越強。所以目前在大多數局域網、企業網中,人們越來越注意保護互聯網使用者的個人信息。比如,某些公司從數據安全方面考慮,會希望傳入運營商網絡的數據是經過重要信息脫敏處理的。信息脫敏指的是,一些私人信息,或者公司層重要的數據,在傳入外網的時候被刪除或者打上馬賽克等等。另外,可能還有一些特殊場景下,需要監控一些常用軟件的賬號信息,從而關聯查找其他下聯信息等等。上述所有這些類似的用戶需求,抽象出來就是要在網絡流量中按照使用者需要提取到特定的信息,在提取到這些特定信息的基礎上,再對這些信息做其他處理。所以對于做網絡安全設備、網絡監控設備的廠商來說,需要解決的問題就是如何快速、有效的按照用戶指定需求,從網絡報文中提取特定信息。
相關工作
對于上文提出的從報文中提取指定信息的問題,我們從學術界和廠商實現兩個角度來說明一些方法及觀點。首先,在學術界,對于流量分析、流量識別、流量特征提取等方面,目前比較火的方法是機器學習和深度學習[1-2]。近幾年學者們在這方面確實取得了獲得成果,但是從實際效果來看,應用到生產實踐中的效果并不是特別理想。主要體現在,在實驗室條件下,即在給定的數據集中學習、驗證,給出的效果往往很好,準確率可以達到95%以上,但是這些方法用在現網流量中準確率卻很差。主要原因有兩點:一是,現網流量復雜,對一些機器學習方法的臨界值的沖擊非常大,導致算法準確度下降;二是,實驗用的數據集更新太慢,這主要是數據集的搜集、制作過程太費時導致的,由于更新速度較慢的數據集無法對應目前急速變化的現網變化,導致基于古老數據集的算法在現網流量中準確度下降。所以在學術界雖然已經有了很多先進的方法,但是距離真正生產實用還是有點差距的,并且更新換代較慢。其次,在廠商實現上,目前就是私有協議研發與各種網絡安全設備廠商之間的博弈過程。具體來說就是:一方面,協議應用方發現自己的協議在使用過程中被各種監控軟件、黑客越來越方便的獲取關鍵信息,所以對私有協議做升級、變形等;而另一方面,安全設備廠商發現原有方法檢查率下降,就會重新研發適配,即一直在對軟件系統升級,來是配更新了的私有協議[3-4]。這樣使得兩者之間的博弈始終存在,并且進程不斷加快,導致網絡流量復雜度提升速度也越來越快。綜上所述,私有協議研發與各種網絡安全設備廠商之間的博弈過程,加劇了網絡流量向越來越復雜的方向演進,而學術研究方面,往往需要很長的周期才能做到很好的適配。所以,在具有針對性需求的網絡流量特征提取方法上,我們更傾向于采用生產實踐中的方法去快速的追逐不斷變換的市場需求,雖然有的方法比較耗時耗力的,但是卻更能快速的解決來源于實際中的問題。
在實際應用中,目前大多數安全設備廠商,在對流量中指定信息做位置定位和信息提取的時候,采取的方法都很傳統,基本方法如下:第一步,先讓用戶給出需要從報文中提取的內容。第二步,拿回來做分析,先在網絡上大量截獲相關的報文,然按照用戶需求對指定類型的報文或者某些私有協議做分析。第三步,對照分析結果做編碼實現。第四步,不斷豐富信息提取庫,即始終在維護這些類型的報文的特征提取需求,不斷跟某種協議的不同版本、不同應用的各類信息,這是目前最耗時耗力的部分。當前的處理方式雖然普遍且適應市場需求更快,但是有如下缺點:第一,做具體報文分析的人員,與按照分析結果做編碼實現的人員,一般情況下是兩批工程師,那么他們的工作就有非常強的耦合性,這種耦合性會對他們的工作產生影響。第二,市場環境下,只要客戶需求稍微一變化,則上面提到的一至四歩就需要重新做一遍,非常耗時耗力,并且有時候對開發者來說這種需求變更是災難性的。第三,現網中應用協議類型在不斷增加,需要提取的信息的種類也在不斷的增加,這樣會使網絡安全設備的負擔越來越重,因為像這種程度的報文解析及信息提取,都是基于每個報文的,并且要從大段的報文內容中查找多次才結束的,所以對安全設備性能的沖擊非常大。
針對上述生產實踐中的實際問題,我們本著解工作耦合性、降低重復工作量、減少內容查找次數的原則,提出了一種從報文中提取特定信息方法。具體方法見下面章節。
我們的解決方法
我們提出的針對網絡報文中特定信息的提取方法,包含兩個部分:第一部分,用通用的規則文件給出從報文中提取信息的方法,即用給定的規則文件的格式,將要提取的信息所在位置、偏移量、長度等等信息表達出來。這部分工作一般由協議分析人員按用戶要求來完成。第二部分,按照生成的規則文件,使用優化的算法,將特征信息提取出來。而這部分工作一般由信息提取人員,按照通用規則文件格式來編碼實現,此過程只需要關注提取方法的本身,而不需要關注具體報文格式。這樣就使報文分析人員和信息提取人員的工作完全解分開了。一方面,報文分析人員可以通過各種手段,比如人工分析、寫網絡爬蟲等等,來編寫規則文件。另一方面,信息提取人員只需要關注規則文件,使用合適的算法,將文件中的規則轉換成有效的報文提取方法。這樣使得特征信息提取工作,在規則文件層完全解耦合,并使得所有工作極具有通用性,又具有特殊性,給了開發人員極大的發揮空間。不難看出,上述工作中最重要的就是規則編制方式,因為它涉及到易用性和信息匹配、查找性能等。下面我們以實踐中用到的應用軟件賬號信息提取為例[5],來說明我們的規則設置方式,及規則解析、信息提取方式。而其他的信息的提取需要在用戶需求和實踐中不斷豐富進來,我們的規則設置和解析中也已經預留了其他信息提取的接口。
規則文件設置
對于應用軟件的賬號信息提取,規則文件方面我們使用的是xml格式的文件,下面簡稱“規則文件”,規則設置的具體信息如下。首先,我們將規則文件分為了幾個層次,用來表示報文的分類、信息提取條件、信息提取位置等信息。具體表現為:第一層是應用名稱信息設置。比如我們要對騰訊QQ應用來提取賬號信息,則用xml文件的<QQ></QQ>表示應用名稱為騰訊QQ應用。第二層是為應用設置的編號。設置編號的目的是方面信息映射及查找,比如同樣是騰訊QQ應用,我們為他設置的編號是1,則用xml文件的<APP-ID>1</APP-ID>格式表示。第三層是傳輸層協議分類。如用<TCP></TCP>表示傳輸層協議為TCP。第四層是我們人為劃分的要提取的信息的類型。如使用<ACCT></ACCT>表示要提取的信息類型為應用的私人賬號信息。第五層是具體的信息提取方式。因為信息提取方式可以有多種,所以我們用不同的<type></type>中的內容來表示不同的提取方式。比如,在賬號信息中用<type value="1">表示提取賬號的第一種方式,<type value="2">表示提取賬號的第二種方式等等。第六層是提取信息的條件和信息所在位置。我們用<condition>節點表示報文需要滿足的條件,后續我們將此節點稱為“條件節點”。用<data>節點表示信息所在位置,后續我們將此節點稱為“數據節點”。這兩種節點組合使用的意思就是“滿足某種條件的報文需要在什么位置獲取到指定的信息”,這是我們提供的這套方法的最關鍵的點。然后條件節點和數據節點的下級中有設置的各種匹配參數,這些參數有通用的和特殊的兩種,通用的用來描述共性問題,特殊的用來描述個性問題。所以一般情況下通用參數可以用來描述大部分匹配條件,只有當報文比價特殊時才會增加適配特殊參數。因此我們的系統使用了通用參數的性質來避免重復工作量,使用特殊參數來增補規則的差異性。下面我們給出一個簡單的規則文件示例。
<QQ>
<ID>1</ID>
<TCP> <ACCT> <type value="1"> <condition value="1"> <port> <start>80</start> <end>80</end> </port> <http_request_method>GET</http_request_method> <string_match> <http_host>qq.com</http_host> </string_match> </condition> <data value="1"> <http_cookie> <string_data value="1"> <string>uin_cookie=</string> <end_char value="1">;</end_char> <end_char value="3338">\r\n</end_char> <isnum>yes</isnum> </string_data> </http_cookie> </data> </type> </ACCT>
</TCP>
</QQ>
規則信息管理
對上述規則文件的保存和使用,我們采用哈希表做的管理。方便后續的條件匹配和信息提取操作。首先,以第五層的節點為一個結構體節點保存起來,其中需要包含其上各個層級的所有信息,然后用鏈表鏈接起來。然后,對含有字符串規則的條件節點做單獨管理,提前使用HS算法或AC算法做預編譯,這是為了使用字符串快速匹配算法做準備。節點對應的結構體節點,用哈希表鏈接起來。最后,再對數據節點中含有字符串的節點做單獨管理,也是提前使用HS算法或AC算法做預編譯。這樣就生成了基于規則文件的一套信息管理方式。結構圖見下。
報文匹配及信息提取
我們采用的信息提取方法是先比對條件在決定是否需要去提取的方式,這樣做的好處是避免盲目的信息提取操作,因為整個操作中耗時的就是信息提取操作。首先,對于條件信息比對,我們使用的是分步、分類的條件節點匹配的方法。我們在做條件信息比對的時候,將條件信息分為了兩類,一類是非字符串信息,比如,端口號、http request方法等,此類信息比對速度很快;另一類是字符串信息比對,這類信息比對起來比較耗時。因此接收到網絡報文之后,我會先解析所有的條件節點中的非字符串信息做對比,然后將匹配中的條件節點所在的上層節點信息打標記。然后對于打了標記的節點中條件節點中的字符串條件做多模匹配,然后再給所有條件都匹配中的條件節點及其上層節點打上條件匹配中的最終標記。然后,我們再對規則條件匹配中了的報文做信息提取操作,這里一般需要先采用字符串匹配操作定位到具體位置,然后再根據數據節點中的規則,獲取某個長度的內容或者結束符以前的內容。此種方法的好處是:1、采用逐級匹配的方式,縮減耗時操作的數量;2、采用多模匹配一次性對所有字符串做匹配的方式,提升查找速度;3、采用先匹配條件再定位信息位置的方式,避免盲目查找、提取指定內容。
總結
上述網絡報文特定信息提取方法,已經應用于生產實踐中了,從易用性和效果方面來看都很好。此方法可以達到比較好的效果主要是因為如下原因:1、由于提供的很好的解耦合性,所以在實現中各個功能模塊可以獨立開發、分別優化,并且增加新的提取項或者支持新的私有協議時,通過很小的改動就可以快速實現客戶需求。2、報文信息提取方便,對于報文分析人員來說,由于他們對某些特定的協議很熟悉了,所以即使這些私有協議有升級,他們也可以迅速獲取到他們想要得到的信息,去豐富我們的規則文件。這相比機器學習等方法要來的更方便、更快捷,并且有的時候可以通過只修改規則文件就能迅速的支持某些特定需求。所以用起來更方便,還不需要做代碼級修改,這是使用起來最方便的地方。但是我們的方法也有很多不足:1、由于私有協議研發與各種網絡安全設備廠商之間的博弈,導致協議更新換代越來越快,則我們要支持的信息提取規則也會越來越多,然后導致我們的系統處理能力不斷下降。2、我們的方法無法解決加密流量的信息提取問題。因此,后續我們還會繼續在易用性及快速實現需求的基礎上,針對協議規則擴充及系統性能提升,對我們的系統做改善、優化。一方面,在協議規則擴充方向上,不斷的加入更智能的處理方式,比如在基于機器學習的流量識別、分類系統中增加對特定協議的升級版本的監控,然后再對監控到的需要的協議內容做特定信息提取等等,并且逐漸的使這些工作趨于自動化;另一方面,系統性能提升方向上,提供可以基于協議規則庫擴張而可以動態擴展軟件系統處理能力的軟件框架等等。上述兩個方面以及加密流量中的信息提取技術,都是我們下一步的研究方向。
參考文獻
[1] Deep Learn. From: https://www.deeplearningbook.org/
[2] Scikit-learn. From: https://scikit-learn.org/
[3] nDPI. From:https://www.ntop.org/products/traffic-analysis/ntop/
[4] Suricata. from: https://suricata.io/
[5] 江蘇省未來網絡創新研究院. 一種從網絡報文中提取賬號信息的方法[P]. 發明專利, CN201811508719.0. 2018-12-11