摘要:在帶有鏡像端口的交換機(jī)組建的局域網(wǎng)中,將阻隔機(jī)中的雙網(wǎng)卡分別接入交換機(jī)的鏡像端口與局域網(wǎng)端口,利用ARP欺騙方法,將處于同網(wǎng)段中的旁路阻隔機(jī)作為整個(gè)網(wǎng)段的“網(wǎng)關(guān)”,過(guò)濾所有與阻隔機(jī)處于同網(wǎng)段的客戶機(jī)發(fā)送給網(wǎng)關(guān)的數(shù)據(jù)包,并根據(jù)不同的協(xié)議采用不同的阻隔技術(shù),將不允許發(fā)送或接受的數(shù)據(jù)包進(jìn)行阻隔。
關(guān)鍵詞:ARP;阻隔;偽造報(bào)文;Reset報(bào)文
O引言
現(xiàn)有的網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾技術(shù)主要有軟件防火墻、應(yīng)用網(wǎng)關(guān)、代理服務(wù)器等。這些網(wǎng)絡(luò)過(guò)濾管理系統(tǒng)基本都是基于網(wǎng)關(guān),或者主機(jī)模式下網(wǎng)站和關(guān)鍵字技術(shù),通常根據(jù)數(shù)據(jù)包的端口、IP地址和協(xié)議、以及對(duì)數(shù)據(jù)包內(nèi)容的關(guān)鍵字匹配來(lái)阻止或者允許信息包的傳輸,保證網(wǎng)絡(luò)通信的安全性。以上幾種過(guò)濾技術(shù)主要應(yīng)用于網(wǎng)關(guān)服務(wù)器或者路由器上。顯然,這種模式下的過(guò)濾方法最適用于過(guò)濾需要在較長(zhǎng)時(shí)期內(nèi)對(duì)整個(gè)網(wǎng)段進(jìn)行阻隔的信息。然而,有時(shí)我們只需要在特定的時(shí)間段內(nèi)對(duì)特定的計(jì)算機(jī)的數(shù)據(jù)包進(jìn)行過(guò)濾,這時(shí)以上幾種模式會(huì)因?yàn)橐l繁更改設(shè)置而顯得有些不足。而基于旁路的阻隔技術(shù)可以很好地解決這一問(wèn)題,它可以用一臺(tái)與客戶機(jī)處于同等地位的阻隔機(jī)來(lái)實(shí)現(xiàn)特定的時(shí)間段內(nèi)對(duì)網(wǎng)段中特定客戶機(jī)的控制;并且這種模式還有性能高,不影響正常的網(wǎng)絡(luò)結(jié)構(gòu)等優(yōu)點(diǎn)。
1旁路阻隔技術(shù)
旁路阻隔技術(shù),是指在局域網(wǎng)中,用一臺(tái)專用的阻隔機(jī)(建議雙網(wǎng)卡,如圖1)捕獲所有經(jīng)過(guò)交換機(jī)的數(shù)據(jù)報(bào),對(duì)報(bào)文的協(xié)議進(jìn)行分析,用干擾或偽造報(bào)文技術(shù)將不允許發(fā)送的報(bào)文進(jìn)行阻隔。目前常用的阻隔方法一般有基于ICMP的阻隔、基于打亂TCP報(bào)文SEQ(“序號(hào)標(biāo)識(shí)”,Sequence numbers)的阻隔、基于TCP Reset報(bào)文的阻隔、基于應(yīng)用層協(xié)議偽造的阻隔4種。
1.1基于ICMP的阻隔
基于ICMP的阻隔的基本原理是利用ICMP報(bào)文(“主機(jī)不可達(dá)”差錯(cuò)報(bào)文)的Host Unreachable回應(yīng)來(lái)干擾應(yīng)用程序?;具^(guò)程如下:當(dāng)路由器收到一份IP數(shù)據(jù)報(bào)但又不能轉(zhuǎn)發(fā)時(shí),就要發(fā)送一份ICMP報(bào)文給主機(jī),如果偽造這樣一個(gè)ICMP報(bào)文,并且偽造路由器的IP地址,這樣主機(jī)收到這個(gè)ICMP報(bào)文后,就誤認(rèn)為目標(biāo)不可達(dá),從而達(dá)到了阻隔的目的。
1.2基于打亂TCP報(bào)文SEQ的阻隔
這種過(guò)濾技術(shù)是目前最成熟,適用面最廣的一種技術(shù)。它利用打亂TCP報(bào)文的SEQ,ACK序列號(hào)來(lái)達(dá)到阻隔的目的。TCP協(xié)議提供可靠的傳輸服務(wù),所以,當(dāng)一個(gè)數(shù)據(jù)包由一個(gè)網(wǎng)絡(luò)發(fā)送到另外—個(gè)網(wǎng)絡(luò)時(shí),TCP協(xié)議采用三次握手原則,當(dāng)三次握手成功時(shí)才開(kāi)始傳輸信息。它采用了兩類條件來(lái)確認(rèn)每條已經(jīng)建立連接的TCP通道。第一類是基礎(chǔ)連接確認(rèn),即TCP連接中的四大必備條件:源IP、源TCP端口、目標(biāo)IP、目標(biāo)TCP端口。第二類條件是成對(duì)出現(xiàn)的SEQ,分為SEQ序號(hào)字段和ACK SEQ確認(rèn)-序號(hào)字段,序號(hào)字段標(biāo)示本報(bào)文中傳送的數(shù)據(jù)在發(fā)送主機(jī)所要傳送的整個(gè)數(shù)據(jù)流中的順序號(hào),而確認(rèn)序號(hào)字段標(biāo)示發(fā)送本報(bào)文的主機(jī)希望接收的對(duì)方主機(jī)中下-+八位組的順序號(hào)。這對(duì)序號(hào)是可以預(yù)測(cè)的,因?yàn)門CP必須遵從以下守則:一臺(tái)主機(jī)即將發(fā)出的報(bào)文中的SEQ值應(yīng)等于它剛收到報(bào)文中的ACK SEQ值,而它所要發(fā)送報(bào)文中的ACK SEQ值應(yīng)為它所收到報(bào)文中的SEQ值加上該報(bào)文中所發(fā)送的TCP數(shù)據(jù)的長(zhǎng)度,即“本次發(fā)送的SEQ=上次收到的ACK SEQ;本次發(fā)送的ACK sEQ=-上次收到的SEQ+本次發(fā)送的TCP數(shù)據(jù)長(zhǎng)度”。知道這個(gè)規(guī)律后,我們就可以利用它來(lái)進(jìn)行阻隔,原理和ICMP阻隔差不多,都是采用偽造報(bào)文的方式:用旁路的方式獲取源主機(jī)與目的主機(jī)通訊的SEQ,ACK序列號(hào)后,則可以根據(jù)這個(gè)序列號(hào)和報(bào)文的長(zhǎng)度計(jì)算源主機(jī)需求的下一個(gè)報(bào)文的序列號(hào),然后偽造這個(gè)序列號(hào)。這種方式的適用面非常廣,所有基于TCP的協(xié)議都可以阻隔。目前的過(guò)濾系統(tǒng),IDS系統(tǒng)均基于這個(gè)原理。
1.3基于TCP Reset報(bào)文的阻隔
利用發(fā)送TCP Reset報(bào)文來(lái)實(shí)現(xiàn)阻隔的原理同上,只不過(guò)發(fā)送的不是偽造的ACK報(bào)文,而是偽造的Reset報(bào)文。利用這種偽造報(bào)文進(jìn)行阻隔的效果在響應(yīng)速度上比打亂TCP報(bào)文SEQ的方法更好。
1.4基于應(yīng)用層協(xié)議偽造的阻隔
以上基于偽造TCP的SEQ、ACK序列號(hào)的方法和發(fā)送Reset報(bào)文的辦法僅適用于TCP協(xié)議,而不適合UDP協(xié)議。UDP是提供簡(jiǎn)單的無(wú)連接的服務(wù),采用這種傳輸協(xié)議無(wú)需建立可靠的連接即可以傳輸信息,并且UDP協(xié)議的阻隔沒(méi)有通用的辦法,只有針對(duì)具體的應(yīng)用程序協(xié)議來(lái)進(jìn)行偽造阻隔報(bào)文,因此對(duì)于采用UDP協(xié)議結(jié)構(gòu)的情況,除了判斷報(bào)文中的IP地址與端口,還要根據(jù)數(shù)據(jù)包在應(yīng)用層的協(xié)議內(nèi)容偽造阻隔報(bào)文。對(duì)于uDP協(xié)議的阻隔較為復(fù)雜,必須事先逐個(gè)對(duì)現(xiàn)有的應(yīng)用軟件的報(bào)文結(jié)構(gòu)進(jìn)行分析,找出在應(yīng)用層協(xié)議中的固定格式,并將其規(guī)律存儲(chǔ)在固定文件中,以便在加載程序時(shí),放入內(nèi)存列表中。
2旁路阻隔技術(shù)的設(shè)計(jì)
如圖1所示的情況下,對(duì)客戶機(jī)器阻隔的數(shù)量受到限制,一般不超過(guò)30臺(tái)。可以使用“網(wǎng)絡(luò)節(jié)點(diǎn)”中的“劫持該用戶數(shù)據(jù)”將用戶的數(shù)據(jù)劫持到本地,原理是利用ARP(Address Resolution Protoe01)偽造,同時(shí)欺騙網(wǎng)關(guān)和客戶機(jī)。
比如客戶機(jī)A的IP地址是10.10.0.200,網(wǎng)關(guān)是10.10.0.254,阻隔機(jī)的IP是10.10.0.221,網(wǎng)關(guān)也是10.10.0.254,阻隔機(jī)實(shí)現(xiàn)阻隔客戶機(jī)A的步驟如下:
(1)阻隔程序不停地利用ARP偽造告訴網(wǎng)關(guān),IP地址是10.10_0.200的MAC地址就是阻隔機(jī)的MAC地址。
(2)阻隔程序不停地利用ARP偽造告訴客戶機(jī)A,網(wǎng)關(guān)10.10.0.254的MAC地址就是阻隔機(jī)的MAC地址。
(3)一段時(shí)間(一般10-30秒左右)后,客戶機(jī)A和網(wǎng)關(guān)均確認(rèn)了阻隔機(jī)的報(bào)文,阻隔機(jī)充當(dāng)了中介角色,由于阻隔機(jī)中有正確的路由表,它能將收到的報(bào)文重新轉(zhuǎn)發(fā)到客戶機(jī)A或者網(wǎng)關(guān),這樣阻隔機(jī)就實(shí)現(xiàn)了在客戶機(jī)A和網(wǎng)關(guān)之間轉(zhuǎn)發(fā)數(shù)據(jù)。
(4)判斷是否滿足阻隔條件,若滿足,發(fā)送偽造的阻隔報(bào)文給客戶機(jī)A,讓A處于報(bào)文不可達(dá),或者連接超時(shí)等狀態(tài)。
(5)為了保證客戶機(jī)A與網(wǎng)關(guān)ARP緩存中保持被欺騙的狀態(tài),每隔lO-30秒發(fā)送一次ARP偽造報(bào)文。
(6)若要恢復(fù)到正常狀態(tài),一定時(shí)間不發(fā)送錯(cuò)誤偽造報(bào)文,或者發(fā)送一個(gè)正確的偽造報(bào)文,將客戶機(jī)A與網(wǎng)關(guān)ARP緩存恢復(fù)到正常狀態(tài)。
顯然,這種阻隔方法可以在不改變現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)、網(wǎng)關(guān)或防火墻設(shè)置的基礎(chǔ)上,在特定時(shí)間內(nèi)對(duì)特定的計(jì)算機(jī)進(jìn)行阻隔。
3旁路阻隔技術(shù)實(shí)現(xiàn)的主要算法
根據(jù)上述阻隔原理,旁路阻隔實(shí)現(xiàn)以WinPcap作為底層驅(qū)動(dòng),其中主程序算法如下:
啟動(dòng)抓包線程:
啟動(dòng)ARP監(jiān)聽(tīng)線程:
啟動(dòng)ARP發(fā)送線程:
If(開(kāi)始充當(dāng)阻隔機(jī))
{發(fā)送ARP Reply偽報(bào)文,使阻隔機(jī)充當(dāng)網(wǎng)關(guān);
將所有的客戶端發(fā)送給網(wǎng)關(guān)的包進(jìn)行截獲;
Switch包的類別
(Case TCP協(xié)議的報(bào)文
lf(滿足阻隔要求),,(包括,IP,端口等)
根據(jù)TCP協(xié)議三次握手的規(guī)律,發(fā)送偽造TCP協(xié)議報(bào)
文,并將TCP報(bào)文的標(biāo)志住(Flag)置為Reset(Ox04):
Else
轉(zhuǎn)發(fā)截獲的報(bào)文;
Case UDP協(xié)議的報(bào)文
If(滿足阻隔要求)f,/(包括,IP,端口等)
If(Search(應(yīng)用層協(xié)議滿足內(nèi)存列表中具體的應(yīng)用軟件
的協(xié)議的類別))偽造報(bào)文不可達(dá),或連接超時(shí)的應(yīng)用層
報(bào)文內(nèi)容:
}
Else
轉(zhuǎn)發(fā)截獲的報(bào)文;
Default
轉(zhuǎn)發(fā)截獲的報(bào)文;
}
}
4結(jié)束語(yǔ)
旁路阻隔技術(shù)可以很方便地對(duì)網(wǎng)絡(luò)進(jìn)行臨時(shí)性的控制。實(shí)驗(yàn)表明,對(duì)于采用TcP協(xié)議的數(shù)據(jù)包,都可以成功阻隔,而對(duì)于采用uDP協(xié)議的數(shù)據(jù)包,并不能做到完全阻隔,未研究過(guò)的應(yīng)用層協(xié)議,以及已處于通信狀態(tài)A、B客戶機(jī)的情況,旁路阻隔效果不是很好。
(注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。)