文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.08.036
中文引用格式: 王文奇,劉安戰,郭基鳳. CFMMQ:一種共享內存多隊列協同取證方法[J].電子技術應用,2016,42(8):144-147,153.
英文引用格式: Wang Wenqi,Liu Anzhan,Guo Jifeng. CFMMQ:A coordinated-forensic method based on shared memory multi queue[J].Application of Electronic Technique,2016,42(8):144-147,153.
0 引言
網絡取證通過抓取、記錄和分析網絡事件,以發現安全攻擊或其他的問題事件的來源。為獲取可以證明網絡犯罪的有效證據,需要對網絡犯罪在各種安全防御系統中遺留的各種信息進行收集和分析,而這些信息是多源的,有多種形式。因而需要一種能夠有效協同多種防御系統之間通信以及協同控制的方法,從而能夠更準確收集網絡犯罪的有效證據,追蹤犯罪分子。當前,關于網絡取證已有很多研究成果,如BHONDELE A提出了一種用于取證分析惡意的網絡數據包網絡取證框架[1]。JOY D等提出了面向用戶的取證分析方案,目的是設計一個健壯靈活協議格式以收集底層網絡數據[2]。張電等對網絡取證多源取證協同關聯技術進行研究[3]。張有東等重點研究了證據的關聯分析技術[4]。相關文獻對網絡取證中如何保持網絡會話的完整性進行了研究[5]。縱觀以往的研究成果,相關研究對協同關聯分析技術研究相對較多,而網絡系統間如何實現高效協同取證研究甚少,如近年來STONEY 等提出一種可以收集特定證據協同控制方法,并指出了協同中心在協同取證中的重要性[6]。
在實際網絡取證過程中,由于各網絡防御系統側重點不同,網絡系統采用的通信方式和通信協議也是不同的,一方面數據量較大時由于通信方式不同可能會引起阻塞;另一方面由于沒有統一的協議格式,各系統間通信語義理解也是困難的。基于以上分析,為了使網絡取證系統能夠協同多個安全取證系統有效取證,本文設計和實現了一種基于代理的協同取證方法。
1 框架設計
共享內存多隊列協同取證方法(Coordinated-Forensic Method based on shared Memory multi Queue,CFMMQ)的基本結構如圖1所示,主要包括一個取證協同控制中心(Forensic Center,FC)、運行于各個主機的唯一代理(Agent)及在該框架下運行的各種安全取證系統(如:IDS Sensor、Disaster Recovery、IDS Center、Forensic Network、Firewall、Security Audit等)。其中:Agent在各主機中有且只有一個,各個Agent之間可以相互通信;FC通過本地代理,實時監控各安全取證系統狀態,為安全取證系統協同時提供必要信息,同時具有維持各個主機之間報文交換協議定義文件的一致性等功能。
圖1 網絡協同控制系統
Agent主要發揮監控和通信的職能,監控功能主要是針對本地安全取證系統的,通信功能主要指針對其他代理的。代理之間采用點對點通信,以互為客戶/服務器模式構建通信網絡,數據交換采用統一的協議,從而有助于采用統一的協同控制安全策略。
各個安全取證系統只能通過本機的代理與其他系統通信協同取證。也就是說,當安全取證系統與主機內其他安全取證系統協同通信時,必須借助Agent交換數據,同時安全取證系統和其他主機的協同取證安全取證系統通信也通過Agent。因此,本地安全取證系統和Agent采用主機內進程間通信策略,Agent之間采用主機間網絡通信策略。由于安全取證系統的復雜性,取證系統的數據交換可能瞬時出現大量數據造成瓶頸,為此CFMMQ框架在算法設計上進行了特別考慮。
2 數據通信設計
2.1 數據結構
由框架設計可知,Agent與本地安全取證系統之間的通信是主機內進程間的通信,一個Agent可以與多個本地安全取證系統進行數據交換。在技術上,主機內部進程間通信可以選擇匿名管道、有名管道、消息隊列、套接字通信、共享內存等,這里選擇共享內存通信方式,該方式通信效率最高,這一點對大數據量通信特別重要。另外,共享內存方式和其他通信方式相比更不容易被攻擊者發現和利用[7]。在共享內存通信的基礎上,設計基于多隊列緩存的取證方法。
綜合考慮,共享內存設計上共申請空間1 002 KB[8],該空間被分為成數據區和管理區兩部分,數據區部分的大小1 000 KB用于系統之間數據通信,管理區部分的大小為2 KB用于保存相關的管理信息。共享內存中共包含4種信息結構,分別是基本信息塊、空閑信息塊、Agent信息塊和安全取證系統信息塊。
數據區部分:數據區部分包含若干基本信息塊,每個基本信息塊為1 KB,結構如圖2(a)所示,基本信息塊設計為1 KB可以避免在操作系統中跨頁而降低效率。基本信息塊包括五部分,分別是前驅指針、后繼指針、消息頭、數據和冗余字節,基本信息塊可以置于不同的雙向隊列之中,包括空閑塊隊列、Agent數據塊隊列和安全取證系統數據塊隊列。
管理區部分:該部分主要用于存放管理隊列的信息。其中,用于管理空閑塊隊列的空閑塊信息包括隊首指針、隊尾指針和互斥鎖,如圖2(b)。用于管理Agent數據塊隊列的Agent信息包括隊列長度、隊首指針、隊尾指針、互斥鎖和通知信號,如圖2(c)。用于管理安全取證系統數據塊隊列的安全取證系統信息包括系統類型、隊列長度、隊首指針、隊尾指針、互斥鎖和通知信號,如圖2(d)。3個隊列都是雙向隊列,隊列中的基本元素都是基本信息塊。互斥鎖可以保證隊列信息的一致性,通知信號用于當隊列有數據塊時通知讀取數據。
圖2 信息結構
在基本信息塊中,包括16 B的消息頭和912 B的內容信息。表1給出了消息頭的格式,其中系統類型8位中,前4位為安全取證系統類型,后4位表示子系統,如IDS的控制中心可以表示為00100001,前四位0010表示為入侵檢測系統(IDS),后四位0001表示為IDS的控制中心子系統。
消息類型主要包括以下6種類型:
(1)心跳消息(HEART)
適用于安全取證系統向本地Agent發送,并由Agent綜合本機安全取證系統狀態定時向協同取證中心發送,目的是維持當前不同主機安全取證系統活動狀態。
(2)查詢消息(INQUERY)
用于Agent查詢安全取證系統的各種信息,內容格式見表2,查詢消息格式設計還可采用掩碼方式支持不同類型的查詢。如:當需要查詢主機上所有安全取證系統時,系統類型設置為0xFF,查詢主機上所有的IDS子系統時系統類型為0x1F,這里假定IDS的編號為1。查詢位于不同主機的系統時,可以設置查詢系統的IP地址,查詢多個目標IP地址時,可以設置成網絡掩碼的方式,實現廣播查詢。
(3)應答消息(REPONSE)
適用于查詢消息的應答,應答查詢消息包含了應答數據,如查詢的安全取證系統運行狀態信息等。
(4)傳輸消息(TRANFER)
用于安全取證系統之間或者安全取證系統與取證協同控制中心之間傳輸數據,具體的格式見表2。在數據塊長度足以承載傳輸信息時,則一個數據塊即可,此時置數據序列號為0xFF。當傳送的信息超出數據塊長度時,需要對信息分成多個數據塊進行傳輸,數據序列號從0開始依次標記,當達到0xFE時,循環標記,直到結束,標記數據序列號為0xFF。
(5)協同控制命令消息(COMMAND)
為安全取證系統之間提供協同控制功能,根據安全策略,實現對其他安全取證系統進行啟動、停止等控制,包括其子系統。如:IDS的控制中心可以通過協同框架啟動、停止探測器,取證中心可以通過協同框架協同控制不同的安全取證系統等。
(6)錯誤消息(ERROR)
適用于當消息傳輸錯誤時,返回提示信息。錯誤消息主要用于系統控制與安全取證系統之間協同通信的錯誤診斷。同時,也可通過錯誤消息了解不同安全取證系統狀況。
2.2 數據通信
數據通信包括兩方面,一是Agent與安全取證系統之間的數據交換,二是Agent與網絡其他主機之間的數據交換。
在Agent啟動時,進行初始化工作,對于數據區,初始化工作就是將數據區的空間建立空閑塊并加入空閑塊隊列。對于管理區,就是建立管理區信息結構。Agent的工作過程如下:
(1)Agent從網絡讀取到數據
根據數據包格式檢查數據的正確性是Agent接收到其他Agent發來網絡數據的首要任務,之后進行數據包解析,取出空閑塊加載數據,并把數據塊加入對應的安全取證系統數據塊隊列中,見圖3中④說明a。待安全取證系統從隊列讀取走數據后,該數據塊重新加入到空閑塊隊列,見圖3中①。
(2)Agent數據塊隊列接收到數據塊通知信息
當Agent數據塊隊列接收到數據塊通知信息時,從隊列中取出數據塊,解析數據塊目的地址,如果數據塊的目地本機的安全取證系統,則把數據塊轉入相應的安全取證系統數據塊隊列,并向該安全取證系統發送通知信號;如果數據塊目的地址是其他主機,則把數據塊信息發往目的主機的Agent,發送成功后,數據塊被轉入空閑塊隊列;當數據塊隊列沒有數據,則進入等待狀態,待通知信號激活。
安全取證系統運行時首先檢查本地Agent運行狀態,并在共享內存的管理區內生成安全取證系統信息結構,圖2(d),用于維護安全取證系統數據塊隊列。
(1)安全取證系統端發送數據
當安全取證系統需要發送數據時,利用共享內存中的空閑塊加承載數據,并將該快從空閑塊隊列轉移到Agent的數據塊隊列中,見圖3中③。Agent獲取信號后,讀取隊列中數據,并解析數據包信息,然后根據目的地址進行發送。如果目的地址是其他主機的安全取證系統,則進一步判斷目的主機對應的Agent狀態,如果正常則發往目的Agent,否則丟棄并返回相應的錯誤信息,見圖3中②說明a。如果目的地址是本地主機,則把數據塊加入對應的安全取證系統數據塊隊列中,見圖3中②說明b和④說明 b。
圖3 Agent與安全取證系統之間的數據通信
(2)安全取證系統讀取數據
當安全取證系統數據塊隊接收到通知信號時,從數據塊隊列取出數據塊,讀取數據,把數據塊加入空閑塊隊列。在數據塊隊列沒有數據時,鎖定等待信號發生。
2.3 相關問題
死鎖問題:算法中存在多個互斥鎖,而每個互斥鎖的目的是保持本數據塊隊列的一致性,當需要加入數據時由通知信號解鎖(如果隊列為空),否則表示隊列正在操作而等待;數據讀取時如果為空等待,否則鎖定而讀取,由上述算法描述可知數據的流動不存在循環流動,因此不會產生死鎖。
并行性:框架中個隊列操作為并行運行。Agent端需要啟動兩個線程同時監聽網絡數據和數據塊隊列。安全取證系統端則需要啟動線程讀取數據塊隊列,讀取數據塊隊列和發送數據也是通過多線程并行執行的,這樣可以有效提高協同框架傳送數據報文的效率。
算法復雜度:空間復雜度方面,就是申請的共享內存大小,實際占用內存則由緩存數據塊的大小和數量決定,假設每個數據塊的大小為m和總塊數為n,則算法的空間復雜度為O(m×n);時間復雜度方面,在發送數據包時操作是按照順序執行的,與傳輸的數據量有關,假設傳輸的數據量是q,則算法的時間復雜度為O(q)。
2.4 協議分析
協議采用面向連接的TCP協議保證消息的可達性。通信數據在確保安全的情況下協同控制安全防御系統,從而保證證據的法律有效性。
協議安全性上需要考慮兩個方面,其一是主機內安全系統采用共享內存的方式與Agent之間的通信,其二是主機間采用網絡通信的方式借助Agent的通信。
安全系統與Agent之間采用共享內存命名的方式實現獲取進程間共享內存地址。如果攻擊者獲取了共享內存的名稱,則可以獲取對共享內存的控制,但前提條件是攻擊者必須控制主機并且取得獲取共享內存的權限,因此可以通過提高主機的安全性進而提升共享內存的權限方式確保共享內存的安全。實際上攻擊者如果完全控制主機,那么取證系統獲取的數據也就不再可信。
對于主機間網絡通信,采用以下策略:
(1)當通信流量小于一定的閾值(根據網絡帶寬、主機性能綜合判斷)時,采用SSL協議通信,從而保證傳輸數據的完整性和真實性。
(2)當通信流量超過閾值時,則按照前述通信協議直接發送,這樣可以避免數據通信帶來的額外開銷,攻擊者在高速數據流情況下,不大可能采用TCP劫持會話技術偽造傳輸數據,進而可以保證數據傳輸的安全性。數據完整性方面則采用驗證碼的方式進行保障,詳見表1。這里并未采用MD5、SHA等散列算法進行校驗,主要目的是避免資源消耗和提高效率。
3 網絡報文格式
取證中心協同安全取證系統取證時,需要通過框架建立有效的網絡通信,為使安全取證系統間無歧義地協同控制和通信,須定義統一的網絡報文交換格式。這里采用非常有效描述語言是XML[9]格式,IDWG曾利用XML定義了入侵檢測組件的交換協議IDMEF[10],這里結合IDMEF對入侵檢測信息描述的思想,定義了網絡報文格式,使之可應用于多個安全取證系統之間進行網絡報文交換。報文采用UTF-8編碼,各Agent采用統一的DTD保證消息一致性,通過版本號來保持DTD文件的一致性。
下面是一個入侵檢測系統檢測到關鍵文件被刪除時的報文描述實例:
<?xml version="1.0" encoding="UTF-8"?>
<CFMMQ-Message version="1.0">
<CreateTime>2015-02-09 11:06:12</CreateTime>
<Source ID="0x32">
<Address>172.10.1.10</Address>
<System>intrusion-detection</System>
<Alert id="0x0501" type="delete">
<File>/etc/passwd</File>
</Alert>
</Source>
<Target>
<System>Forensic_Center</System>
</Target>
</CFMMQ-Message>
其中,消息的源系統編號ID為0x32,表示入侵檢測系統的類型。該報文表示入侵檢測系統檢測到passwd文件刪除,需要取證通知取證中心并由取證中心協同相關安全取證系統取證該事件。
4 實現
基于以上設計,實現了一個協同多個網絡安全取證系統的網絡協同控制系統。采用設計的統一報文以及協議算法,該系統協同網絡入侵檢測系統Snort,實現了對網絡入侵事件的取證,協同防火墻軟件實現了對主機防火墻信息的取證,如圖4。
圖4 網絡協同取證系統實現
取證協同控制中心FC主機的IP地址為192.168.0.4,兩個運行代理的主機地址分別是192.168.0.10和192.168.0.8。FC上有取證中心、IDE center和FireWall天網防火墻,兩個代理主機上都有主機取證代理和FireWall天網防火墻,并分別有IDS Snort Sensor或IDE Sensor,在顯示區列出了一些事件列表。
取證中心也可以根據獲得的網絡安全信息,協同多個網絡安全取證系統同時進行網絡行為取證,當入侵檢測系統分析到入侵行為時,協同網絡入侵檢測系統和防火墻雙重記錄,有利于形成完整的證據鏈,所設計的底層通信算法能夠實現各個網絡防御系統的有效通信和控制。同時在千兆網絡的環境中協同框架的瞬時流量可以承載600 Mb/s,達到了網絡協同控制的網絡通信的需求。
5 結束語
本文提出了一種共享內存多隊列協同取證方法,設計了整個框架,在該框架中每臺主機擁有唯一的代理,代理負責安全取證系統之間及與協同取證中心之間的協同和通信,該方法通過取證中心協同安全取證系統取證。采用共享內存的通信方式,設計了基于多隊列及通知信號機制的高速數據通信算法,提高通信效率。定義了基于XML的網絡報文格式,實現了一個網絡系統取證系統。協同控制框架為安全取證系統提供消息封裝、解析、傳遞等API,使安全取證系統能夠透明地接入該系統,而不必了解協同控制的實現細節。
參考文獻
[1] BHONDELE A,RAWAT S,RENUKUNTLA S S B.Network management framework for Network forensic analysis[C].Emerging ICT for Bridging the Future-Proceedings of the 49th Annual Convention of the Computer Society of India CSI Volume 2.Springer International Publishing,2015:397-404.
[2] JOY D,LI F,FURNELL S M.A user-oriented network forensic analyser:The design of a high-level protocol analyser[C].The 12th Australian Digital Forensics Conference,Western Australia,2014:84-93.
[3] 張電,高平,潘峰.網絡協同取證系統的設計與實現[J].信息安全與通信保密,2011(11):89-91.
[4] 張有東,曾慶凱,王建東.網絡協同取證計算研究[J].計算機學報,2010,33(3):504-513.
[5] 王文奇,苗鳳君,潘磊,等.網絡取證完整性技術研究[J].電子學報,2010,38(11):2529-2534.
[6] STONEY D A,STONEY P L.Illustration and analysis of a coordinated approach to an effective forensic trace evidence capability[J].Forensic Science International,2015,253(8):14-27.
[7] AVIRAM A,WENG S C,HU S,et al.Efficient systemenforced deterministic parallelism[J].Communications of the ACM,2012,55(5):111-119.
[8] Jeffrey Richter.Windows核心編程[M].王建華,譯.北京:機械工業出版社,2005.
[9] FEIERTAN R,KAHN C,PORRAS P,et al.A common intrusion specification language(CISL)[EB/OL].[2015-6-20].http://gost.isi.edu/cidf/drafts/language.txt.
[10] DEBAR H,TELECOM F.The intrusion detection message exchange format(IDMEF)[EB/OL].[2015-6-20].http://datatracker.ietf.org/doc/rfc4765/.