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