【摘 要】本文介紹了一個低交互級別的蜜罐軟件Honeyd,具體分析了它的邏輯結構,軟件的關鍵技術,指紋匹配,最后還分析完成指紋匹配的相關函數。
【關鍵詞】蜜罐;指紋匹配;相關函數
1 Honeyd軟件介紹
Honeyd是由Niels Provos創建的一種具有開放源代碼的輕型低交互級別的蜜罐,除了具有蜜罐的共性——引誘攻擊者的攻擊外,它自身的設計特點不但可以使Honeyd更有效的完成任務,還能開發出許多新的應用出來。它可以同時模仿400多種不同的操作系統和上千種不同的計算機。
Honeyd有如下特點:
第一,Honeyd可以同時模仿上百甚至上千個不同的計算機,大部分蜜罐在同一時間僅可以模仿一臺計算機,而Honeyd可以同時呈現上千個不同的IP地址。
第二,可以通過簡單的配置文件對服務進行任意配置,可以對虛擬的主機進行ping操作或者進行traceroute,Honeyd可以根據簡單的配置文件對虛擬主機的任何服務進行任意的配置,它甚至可以作為其他主機的代理。
第三,可以在TCP/IP層模仿操作系統,這就意味著如果有人闖入用戶的蜜罐時,服務和TCP/IP都會模擬操作系統做出各種響應。當前,還沒有任何其他的蜜罐具有這種功能,可以完成的工作包括虛擬nmap和xprobe,調節分配重組策略以及調節FIN掃描策略。
第四,可以模擬任何路由拓撲結構,可以配置等待時間和丟包率。
第五,作為一種開放源代碼的工具,Honeyd可以免費使用,同時也迅速成為了很多安全組織的開發源代碼的一部分。
2 Honeyd邏輯結構
Honeyd結構由以下幾個部件組成:配置數據庫,中心數據包分配器,協議管理器,服務處理單元,特征引擎,可選的路由器部分。Honeyd的邏輯結構如圖1所示:
圖1 Honeyd的邏輯結構
各部分的功能分別為:
路由器:路由數據包到達某個虛擬蜜罐所在的地址,會產生三種情況:沒有找到目的地址而丟棄數據包;沒有找到目的地址,但是可以把數據包交付給下一個路由器;可以直接把數據包交付給目的地址。路由是一個可選擇的邏輯部件。
數據包分配器:該邏輯部件核查IP數據包的長度,對IP數據包進行正確性檢查,核實確認序列號。分配器只對協議管理器分配三種數據包:ICMP、UDP、TCP。其他協議的數據包會被丟棄并且不做任何記錄。
協議管理器:它包括ICMP/UDP/TCP協議管理和服務處理單元。ICMP協議管理支持ICMP請求。默認的,所有的蜜罐配置都響應回射請求和處理目標主機不可達信息;TCP和UDP協議管理器和服務處理單元能夠對外建立特定服務的連接。服務的行為完全依賴于外部應用。TCP協議管理器能夠很好的支持三次握手的建立和FIN或RST的拆卸,但是還不能很好地支持窗口管理和擁塞控制。
特征引擎:將對發送的所有數據包進行指紋匹配,以便在指紋識別工具前能很好地隱蔽。
配置數據庫:它當中包含了一切配置參數,例如虛擬蜜罐的IP地址、默認的ICMP響應,虛擬鏈路的網絡屬性,指紋數據等。
3 關鍵技術
Honeyd能夠虛擬蜜罐,并且能夠利用這些虛擬的蜜罐構建松散的虛擬蜜罐網絡或有層次結構的虛擬蜜罐網絡,這些虛擬的蜜罐網絡中甚至可以包含真實的主機。然而Honeyd要構建虛擬的蜜罐網絡需要面對這樣一些問題:首先是攻擊者利用指紋工具對連接的蜜罐進行識別時該怎么辦;其次,虛擬出的蜜罐網絡如果面對網絡拓撲發現工具時怎么辦。
Honeyd采用了兩種關鍵的技術來欺騙攻擊者,一種是指紋匹配技術,另一種是虛擬蜜罐網絡技術。
4 指紋匹配
為了在被探測的時候表現得跟真實的系統一樣,虛擬蜜罐要模擬給定操作系統的網絡棧行為,這是虛擬蜜罐的一部分特征。不同的特征能被設計成不同的虛擬蜜罐。特征引擎通過改變協議數據包頭部來匹配特定的操作系統,從而表現出相應的網絡協議棧行為,這一過程成為指紋匹配。
Honeyd運用NMAP的指紋數據庫作為TCP和UDP行為特征的的參考;用XPROBE指紋數據庫作為ICMP行為的參考。
下面用NMAP提供的指紋信息來改變蜜罐網絡棧的特征為例來進行說明:
Fingerprint IRIX 6.5.15m on SGI 02
Tseq(Class=TD%gcd=<104%SI= T1(DF=N%W=EF2A%ACK=S++%Flags=AS%Ops=MNWNNTNNM) T2(Resp=Y%DF=N%W=O%ACK=S%Flags=AR%Ops=) T3(Resp=Y%DF=N%W=EF2A%ACK=O%Flags=A%Ops=NNT) T4(DF=N%W=O%ACK=O%FlagsR%Ops=) T5(DF=N%W=O%ACK=S++%Flags=AR%Ops=) T6(DF=N%W=O%ACK=O%Flags=R%Ops=) T7(DFN%W=O%ACK=S%Flags=R%Ops=) PU(Resp=n) T1測試設置了SYN和ECE TCP flags;T5測試僅設置了SYN TCP flags。后面7個測試決定了數據包到達開放的或關閉的端口的網絡棧行為。最后一個分析ICMP對關閉的UDP端口的響應。 Honeyd保持每一個蜜罐的可靠性。包括產生ISN信息可靠性,蜜罐的初始化時間,當前IP數據包的確認號的可靠性。保持狀態有利于我們在指紋修改后發送的數據包產生后續的ISN。 滑動窗口在不同的環境下表現出來的大小同樣也會成為攻擊者進行識別的一部分。當Honeyd為一個新建的連接發送一個數據包時,它會用NMAP指紋去檢測內部窗口的大小,在一個連接建立好以后,Honeyd框架將根據緩沖區中數據的多少調整窗口的大小。 5 指紋匹配相關函數 Honeyd邏輯上的特征引擎是由相關的函數參考配置數據庫中的參數,然后分別對各自的數據包進行指紋處理得到的。這些被處理的數據包主要由TCP數據包、UDP數據包和ICMP數據包。其中tcp _send(),tcp_personality()負責處理TCP數據包的指紋;udp_send()負責處理UDP數據包的指紋;icmp_send()數據包負責處理ICMP數據包的指紋。下面我們重點介紹處理TCP數據包的函數。 tcp_send()負責發送基于tcp協議的數據包,重要的是,它對即將發送的數據包進行改動,修改報頭,使得看上去和對應的操作系統的特征準確地吻合,以達到欺騙的效果。因而此函數只是在通過查詢特征庫后,得到返回的id(ip報頭的標識字段的值),調整其他參數,封裝成ip包發送。 udp_send()函數負責發送基于udp協議的數據包,如同上面的一樣,發送前,必須參考特征庫,修改得當的報頭。 icmp_send()負責發送基于icmp協議的數據包,如同上面的一樣,發送前,必須參考特征庫,修改得當的報頭。具體實現的時候,通過改變ip包的頭部信息,來做到和OS特征相符和的特點。比如code,ipid,tos,offset等參數都要傳遞過去,這樣特征匹配函數icmp_personality()就可以控制了。 [責任編輯:丁艷]