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