摘要:現有的DDoS防御方法大多是針對傳統IPv4網絡提出的,而且它們的防御實時性還有待進一步提高。針對這種情況,提出了一種IPv6環境下實時防御DDoS的新方法,其核心思想是首先在受害者自治系統內建立決策判據樹,然后依據決策判據1和2對該樹進行實時監控,如果發現攻擊,就發送過濾消息通知有關實體在受害端和源端一起對攻擊包進行過濾,從而保護受害者。實驗證明,該方法能夠在秒鐘數量級檢測到攻擊并且對攻擊包進行過濾,能有效地防范多個DDoS攻擊源。另外,該方法還能準確地區分攻擊流和高業務流,可以在不恢復攻擊路徑的情況下直接追蹤到攻擊源所在的自治系統(甚至是子網)。
關鍵詞:網絡安全; 分布式拒絕服務攻擊; 防御技術; IPv4; IPv6
中圖分類號:TP309.2
文獻標志碼:A
文章編號:1001-3695(2008)06-1828-05
0引言
在DDoS攻擊中,攻擊包的源地址是偽造的。如果能夠驗證源地址的合法性,就可以過濾掉所有源地址不合法的數據包,從而能夠消除DDoS威脅。這種技術被稱為“源地址驗證”。IPv6地址長度是128位,這就為基于地址本身所包含的驗證信息來實現“源地址驗證”提供了可能。Tuomas Aura提出的地址加密生成(CGA)[1]就是利用IPv6的后64位實現地址驗證的一種技術。它不需要第三方參與驗證,實現了“節點—節點”式驗證。由于DDoS攻擊中存在大量的待驗證源地址,這種“節點—節點”式驗證機制就會比較費時。于是,2005年鄭輝等人[2]又依據混沌理論提出了一種“節點—節點集”式的源地址驗證機制,以此就能較好地防御DDoS攻擊。但是,這種方法也存在著一些局限性,比如其可表達的網絡規模有限,整個地址的分配和驗證流程有待深入研究,邊界路由器很可能會由于負擔過重而崩潰等。
另一方面,王效亮在研究原有IPv4網絡中IP追蹤技術的基礎上,提出了一種IPv6下自適應概率標記方案[3]。與固定概率標記方案相比,它減少了重構攻擊路徑所需的數據包數量,并且還使得攻擊者無法通過偽造標記信息來干擾追蹤。
為了確保防御DDoS攻擊的實時性以及避免重構攻擊路徑所耗費的時間,本文提出了一種IPv6環境下新的DDoS防御方法,其核心思想是對進入某個自治系統(autonomic system,AS)的數據包按照其所屬的AS和子網實時進行主從分類統計、分析,如果檢測到異常,就能立即通知本地AS和攻擊包所屬的AS在其邊界路由器進行針對性的數據包過濾操作。當然,在檢測到攻擊的同時,也能追蹤到攻擊包的來源(來源于哪一個AS,或者來源于哪一個子網)。
1基本原理
1.1IPv 6全局單播地址
全局單播地址等價于公用 IPv4地址。在 IPv6網絡中,該地址是全局可路由和可達的。依據RFC 3587[4]中的定義,IANA當前分配的全局單播地址結構如圖1所示。
其中,前三位固定,用于標志該地址是全局單播地址;全局路由前綴用于標志一個特定的組織站點,前48位用于創建站點地址前綴,創建的站點地址將被分配給組織的單個站點,IPv6網絡中的路由器會把匹配這48位地址前綴的數據包轉發到組織站點的路由器;子網ID用于標志組織站點中的子網,能夠用來創建65 536個子網或多個層次的尋址層次結構;接口ID用于標志站點內子網上的接口。
由此可見,全局單播地址形成了一個三級結構(圖1):公用拓撲就是由提供因特網接入的ISP和連接到IPv6網絡的組織構成的集合;站點拓撲是組織站點內的子網構成的集合;接口標志符標志組織站點中子網上的特定接口。
由于任何一個IPv6子網(又稱為鏈路[5])都使用 64位網絡 ID(記為NetID,每個子網以其NetID標志)和 64位接口 ID(記為InterfaceID),從數據包的源地址(全局單播地址)的前64位,就可以檢測出該包來源于哪個子網。
1.2 自治系統
本文的DDoS防御方法主要是以AS作為研究對象的,所以有必要先對AS有一個全面的認識。
AS指的是在一個管理機構控制之下的網絡和路由器的集合。其中所有路由器必須相互連接,運行相同的路由協議,同時由TANA分配一個單獨的16位數字,作為自治系統編號(autonomous system number,ASN)。AS間使用外部路由協議。目前,在IPv6環境下,AS內路由協議主要采用IS-ISv6和OSPFv3,AS間路由協議通常采用BGP4+[6]。
AS內包括以下三類路由器:接入路由器,用于為子網用戶提供網絡接入(如圖2中的R1、R7);轉接路由器,通常用于連接不同子網(如圖2中的R2、R6);邊界路由器,在AS的邊界上用于連接其他AS(如圖2中的R3、R4、R5)。
現在的因特網就是由很多AS組成的,而每一個AS又包括若干個子網,它們之間的關系如圖2所示。
2實時防御方法
2.1術語定義
為了能更好地表達后續內容,現定義以下一些術語:
a)攻擊機。發送DDoS攻擊包的主機。
b)受害機。DDoS攻擊者所選擇的攻擊對象,多為網絡中的服務器,比如搜狐服務器。
c)攻擊源自治系統。包含一個或多個攻擊機的自治系統。
d)受害者自治系統。包含一個或多個受害機的自治系統。
e)一次數據包。就服務器而言,在訪問它的所有數據包中如果一個源IPv6地址所對應的包數僅為1,那么該地址所對應的那個數據包就被稱為一次數據包。
f)子網訪問主機。凡是有起源于某子網的數據包訪問主機,就稱該子網訪問這臺主機。
g)攻擊源子網。包含一個或多個攻擊機的子網。
2.2 設計依據
據Symantec公司統計,2006年上半年平均每天發生927次DDoS攻擊,與2004年下半年相比增加了679%[7]。而且,越來越多的攻擊發生在AS之間。比如,圖2中攻擊源自治系統ASn中的一臺“攻擊機(記為A)”就正在向受害者自治系統AS1中的“受害機(記為V)”發送大量的DDoS攻擊包。
訪問V的每一個數據包(不論是合法包還是攻擊包)都具有以下三個屬性:
a)P_ASN。用于指明該包產生于哪個AS。
b)P_NetID。用于指明該包產生于哪個子網。
c)P_InterfaceID。用于指明該包產生于P_NetID所指示的子網中的哪臺主機。
根據這三個屬性,筆者可以對訪問V的每一個數據包進行分類統計,從而可以建立一棵決策判據樹,如圖3所示。
在該樹中,除去根節點(受害機V)外,可以分為三層,即AS層、子網層和接口層。AS層的節點用對應的ASN標志(ASiN表示第i個AS的ASN,i=1,2,…,n),子網層的節點用對應的NetID標志(NetIDZWi.t表示第i個AS中的第 t個子網的NetID),接口層的節點用對應的InterfaceID標志(InterfaceID i.t.m表示第i個AS中的第t個子網內的第m臺主機的InterfaceID)。
AS層的任一個節點ASiN都對應一個變量NumSNASiN(NumSN是the Number of Subnet的英文縮寫,意思為子網的數目),它表示節點ASiN的所有子節點的個數,也即自治系統ASi中訪問過V的子網數。
子網層的任一個節點NetIDZWi.t都對應一個變量NumOOPZWi.t(NumOOP是the Number of Only One Package的英文縮寫,意思為一次數據包的數目),它表示節點NetIDZWi.t的所有子節點中變量NumP(其定義參見下段內容)的值為1的節點數,亦即在訪問V的所有一次數據包中來源于ZWi.t的一次數據包總數。
接口層的任一個節點InterfaceIDi.t.s都對應一個變量NumPInterfaceIDi.t.s(NumP是the Number of Package的英文縮寫,意思為數據包的數目),它表示與InterfaceIDi.t.s所對應的接口向V所發送的數據包數目。
決策判據樹的建立算法如下:
Step1建立根節點V(用V的IPv6全局單播地址標志);
Step2對于訪問V的每一個數據包,依據其三個屬性,執行下列步驟:
Step2.1判斷該包的P_ASN是否出現在AS層,如果出現,就執行Step 2.2;否則執行下列步驟:
a)為V新建一個子節點P_ASN,并把該節點對應的變量NumSN置1;
b)為節點P_ASN新建一個子節點P_NetID,并把該節點對應的變量NumOOP置1;
c)為節點P_NetID新建一個子節點P_InterfaceID,并把該節點對應的變量NumP置1;
d)返回Step2;
Step2.2判斷該包的P_NetID屬性是否出現在節點P_ASN的子節點中,如果出現,就執行Step 2.3;否則執行下列步驟:
a)把節點P_ASN對應的變量NumSN自增1;
b)為節點P_ASN新建一個子節點P_NetID,并把該節點對應的變量NumOOP置1;
c)為節點P_NetID新建一個子節點P_InterfaceID,并把該節點對應的變量NumP置1;
d)返回Step2;
Step2.3判斷該包的P_InterfaceID屬性是否出現在節點P_NetID的子節點中,如果出現,就執行Step 2.4;否則執行下列步驟:
a)把節點P_NetID對應的變量NumOOP自增1;
b)為節點P_NetID新建一個子節點P_InterfaceID,并把該節點對應的變量NumP置1;
c)返回Step2;
Step2.4判斷節點P_InterfaceID對應的變量NumP是否為1,如果不為1,就執行Step 2.5;否則執行下列步驟:
a)把節點P_NetID對應的變量NumOOP自減1;
b) 把節點P_InterfaceID對應的變量NumP自增1;
c)返回Step2;
Step2.5把節點P_InterfaceID對應的變量NumP自增1,然后返回Step2。
隨著時間的推移,訪問V的數據包越來越多,決策判據樹也在不斷變化。其中,變量NumSNASiN的值呈現遞增規律,用NumSNASiN|t表示NumSNASiN在t時刻的值,記
ki=(NumSNASiN|t2-NumSNASiN|t1)/(t2-t1)
其中:ki的實際意義是指就節點ASiN而言,在時間間隔ΔT =t2-t1內訪問V的子網數增加率。
在正常情況(即沒有發生DDoS攻擊)下, ki數值較小(也可能為0);但是當V遭受到DDoS攻擊時,如果ASi是攻擊源自治系統,那么ki數值就會很大,這是因為從ASi會有海量的DDoS攻擊包涌向V,而這些包的128位源IP地址又是偽造的(地址中的前64位,即NetID,自然也是偽造的),于是就造成NumSNASiN的值陡增。
因此,筆者可以建立一個用于判斷DDoS攻擊是否發生的判據(決策判據1):如果Ki超過K(事先確定的閾值),就說明存在DDoS攻擊,攻擊源自治系統是ASi。
不過,該判據還存在一個局限:如果DDoS攻擊者在偽造源IP地址時,只使用有限個NetID(不論是真實的NetID還是偽造的NetID),就能夠避開“決策判據1”。為此,本文又研究了第二個判據。
2.3體系結構和組成
上一節介紹了實時防御方法的設計依據,下面詳細介紹其體系結構和各組成部分。
圖4描述了實時防御方法的體系結構。它要求每個AS都要包括三種實體,即BR、DCenter和緩存器。下面介紹這三種實體的功能以及它們之間的關系。
1)BR(border router,邊界路由器)
除了完成連接不同AS的功能外,BR還包括三個模塊,即ASN標記模塊、包屬性提取模塊和過濾模塊。ASN標記模塊負責把本地ASN標記到流出本地AS的所有數據包上(已被標記過的數據包除外);包屬性提取模塊負責從每個流向本地AS中某個(或某些)受保護主機的數據包中提取屬性信息(P_ASN,P_NetID和P_InterfaceID),每個包可以產生一條包屬性信息記錄(該記錄包括四個字段,即包目的IP地址、P_ASN、P_NetID和P_InterfaceID),每當產生H條這樣的記錄時,就傳送給DCenter;在提取完屬性信息后,就可以刪除掉包中的ASN標記;過濾模塊負責一方面接收DCenter發來的本地過濾消息,并根據此消息過濾數據包,從而保護對應主機免遭DDoS攻擊;另一方面接收DCenter轉發的由其他AS中DCenter產生的外地過濾消息,并根據該消息對起源于本地AS的流出數據包(流出數據包如果已被標記上ASN,那么就不起源于本地AS;否則就起源于本地AS)進行過濾。不論是本地過濾消息還是外地過濾消息,過濾模塊在這些消息起作用一定時間(建議值3~5 min)后,就撤銷和刪除它們。
2) DCenter(defense center,防御中心)
每一個AS中只有一個DCenter,它包括以下四個模塊,即決策判據樹模塊、實時監控模塊、裁減模塊和外地過濾消息處理模塊。決策判據樹模塊負責接收本地AS中所有BR發來的包屬性信息記錄,并根據這些記錄建立和實時更新一棵(或多棵)以受保護主機為根節點的決策判據樹;實時監控模塊負責對決策判據樹AS層和子網層中的每一個節點所對應的變量值進行實時采樣,并且計算K或L,然后根據決策判據1或2判斷是否存在攻擊,如果發現攻擊,就立即執行下述操作:
a)向本地AS中的所有BR產生并且發送本地過濾消息。如果是根據決策判據1發現攻擊的話,本地過濾消息(稱之為1型本地過濾消息)包括受保護主機IP地址、攻擊源ASN和攻擊源AS中非攻擊源子網NetID集(在決策判據樹中攻擊源ASN節點的所有孫子節點中,如果有某個孫子節點對應的變量NumP不為1,那么該孫子節點的父節點所標志的子網就是非攻擊源子網);否則,本地過濾消息(稱之為2型本地過濾消息)包括受保護主機IP地址、攻擊源ASN和攻擊源子網NetID。
b)向攻擊源AS中的DCenter產生并且發送外地過濾消息。如果是根據決策判據1發現攻擊的話,外地過濾消息(稱之為1型外地過濾消息)包括受保護主機IP地址和攻擊源AS中非攻擊源子網NetID集;否則,外地過濾消息(稱之為2型外地過濾消息)包括受保護主機IP地址和攻擊源子網NetID。
裁減模塊負責定期對決策判據樹進行裁減。一般DDoS攻擊會造成接口層中包含大量對應變量NumP值為1的節點,它們的存在會影響到對決策判據樹的實時更新和監控性能。因此,有必要對這些節點進行裁減,這就是裁減模塊的任務。
外地過濾消息處理模塊負責接收其他AS中DCenter發來的外地過濾消息,然后把該消息轉發給本地AS中的所有BR。
3)緩存器
當有大量的包屬性信息記錄流向DCenter時,DCenter的決策判據樹模塊如果來不及處理,就可以將它們先存放到緩存器中,等到空閑時再處理它們。
2.4實時防御過程
圖5描述了模擬實驗中所用的網絡拓撲(緩存器沒標出來)。
圖5中有兩個攻擊機A1和A2正在對一個受害機V實施DDoS攻擊(它們各自每秒都發送五千左右的攻擊包;在偽造攻擊包的源IP地址時,A1偽造整個128位地址, A2只偽造后64位地址,前64位使用NetIDZW3.1),并且還有三個客戶機C1、C2和C3在向V發送合法的數據流。為了能更好地理解2.3節中的體系結構,下面以保護AS1中的V為例來描述實施防御方法的防御過程。
1)首先,每個AS中的所有BR都要在起源于本地AS的流出數據包上標記本地ASN。為此,本文定義了一個新的擴展報頭——P_ASN屬性報頭,其格式如圖6所示。
每當要標記本地ASN,BR都需要為對應數據包創建P_ASN屬性報頭。其中,P_ASN域用于存放本地ASN。由于要求每個擴展報頭都是8 Byte的整數倍,在創建P_ASN屬性報頭時還需要通過使用填料n選項來把2 Byte字節的填料插入該擴展報頭中,以確保其長度達到一個8 Byte。
2) BR1為每個流向V的數據包創建一條包屬性信息記錄(其中,P_ASN字段值等于該包的 P_NetID屬性報頭中的P_ASN域值;P_NetID字段值等于該包源IP地址前64位;P_InterfaceID字段值等于該包源IP地址后64位),并把這些記錄發給DCenter1。創建完包屬性信息記錄后,BR1還要負責刪除對應包中的P_NetID屬性報頭。
3) DCenter1的決策判據樹模塊利用接收到的包屬性信息記錄建立和實時更新一棵以V為根節點的決策判據樹。由于A1和A2對V實施攻擊,在對該樹的實時監控中,實時監控模塊會產生以下四條過濾消息:
a)發給BR1的1型本地過濾消息。該消息內容包括受保護主機IP地址是V的地址,攻擊源ASN是AS2N和攻擊源AS2中非攻擊源子網NetID集僅包括NetIDZW2.1。
b)發給BR1的2型本地過濾消息。該消息內容包括:受保護主機IP地址是V的地址,攻擊源ASN是AS3N和攻擊源子網NetID是NetIDZW3.1。
c)發給DCenter2的1型外地過濾消息。該消息內容包括:受保護主機IP地址是V的地址和攻擊源AS2中非攻擊源子網NetID集僅包括NetIDZW2.1。
d)發給DCenter3的2型外地過濾消息。該消息內容包括:受保護主機IP地址是V的地址和攻擊源子網NetID是NetIDZW3.1。
4) BR1接收到第a)和b)條過濾消息后,就會對流向V的所有數據包按如下規則進行過濾:
規則1(根據第a)條消息)如果數據包的P_ASN屬性為AS2N且P_NetID屬性不為NetIDZW2.1,就過濾該包。
規則2(根據第b)條消息)如果數據包的P_ASN屬性為AS3N且P_NetID屬性為NetIDZW3.1,就過濾該包。
5) DCenter2在接收到第c)條過濾消息后把它轉發給BR2;BR2根據該消息對所有起源于AS2并且流向V的數據包進行過濾,過濾規則是包的P_NetID屬性如果不為NetIDZW2.1,就過濾該包。
6) DCenter3在接收到第d)條過濾消息后把它轉發給BR3;BR3根據該消息對所有起源于AS3并且流向V的數據包進行過濾,過濾規則是包的P_NetID屬性如果為NetIDZW3.1,就過濾該包。
7) BR1、 BR2和 BR3在啟用過濾規則3~5 min后要撤銷它們。
3模擬實驗與結果分析
為了驗證該實時防御方法的有效性,筆者采用多線程技術在C++Builder 6集成開發環境下構建了一個模擬實驗平臺,實驗拓撲結構如圖5所示。
為了便于比較分析,本文進行了兩次實驗,相關實驗信息如表1所示。其中,V的流量統計工作是由BR1在轉發數據包的同時完成的。
由圖7可以看出:在沒有部署實施防御方法的情況下,當A1和A2先后向V發送DDoS攻擊包時,V的流量會由起初的正常流量0.5 tpps左右(tpps: thousand packages per second),先陡增到5.5 tpps左右,再繼續陡增到10.7 tpps左右;只要A1和A2不停止攻擊,V的流量就會一直維持在高值狀態,最終會導致V無法為其他用戶提供服務,甚至崩潰。另外,還可以看出,C1、C2和C3發送的流量大約為5.5 tpps(本文把這個流量稱為正常流量或合法流量),A1的攻擊流量大約為5 tpps,A2的攻擊流量大約為5.2 tpps。
如果部署實時防御方法來保護V,那么防御效果如何?由圖8可以看出。
在t=10 s后,V的流量先陡增到1.2 tpps左右就馬上回落到正常流量0.5 tpps左右,根本來不及上升到5.5 tpps左右,這充分說明實時防御方法在短時間內就檢測到了A1的攻擊,并對其所發送的攻擊包進行了檢測過濾,而且過濾操作沒有過濾掉合法流量;在t=20 s后,V的流量先陡增到5tpps左右,就馬上又回落到正常流量0.25 tpps左右,而不是5.5 tpps左右,這是因為實時防御方法在檢測到了A2的攻擊后,不僅過濾了A2所發送的攻擊包,而且還過濾掉了C2所發送的數據包。但這是值得的,本文以犧牲V不能為AS3中子網3.1內的用戶(如C2)提供服務為代價,確保了既能過濾掉來源于A2的所有攻擊包又使V能為其他絕大多數用戶(如C1和C3)提供服務;在t=10~190 s期間,由于實驗中設定過濾消息的有效時間是180 s,這段時間會持續對A1所發送的攻擊包進行檢測過濾,但是因為A1攻擊直到t=240 s才結束,所以當t=190 s時,隨著針對A1攻擊流量過濾操作的結束,V的流量曲線又再次出現了陡增,不過馬上又回落下來(這是因為實時防御方法再次檢測到網絡中仍然存在A1的攻擊,于是再次對其所發送的攻擊包進行了長達180 s的檢測過濾)。
在t=20~200 s期間,由于這180 s會對來源于AS3中子網3.1的所有數據包(包括C2發送的數據包)進行過濾,所以V的流量曲線位于0.25 tpps左右(由C1和C3發送的數據包形成);由于A2已經于t=60 s處停止攻擊,所以當t=200 s時,隨著針對來源于AS3中子網3.1的數據包過濾操作的結束,V的流量曲線又再次回到0.5 tpps左右(V又可以為C2提供服務)。
通過上述對比可以發現,實時防御方法(其具體防御過程請參見2.4節)能夠實時(秒級)檢測到攻擊的存在,并且在過濾攻擊包的過程中還能保證V可以為絕大多數合法用戶提供服務。它不僅可以有效地防范擁有多個攻擊源的大規模DDoS攻擊,而且還可以追蹤到這些攻擊源所在的自治系統,甚至還可能追蹤到它們所在的攻擊源子網(參見決策判據1和2)。
4結束語
以前的DDoS防御方法往往是針對IPv4網絡提出的,隨著IPv4向IPv6網絡的快速發展,于是就有必要對如何在IPv6環境中防御DDoS攻擊進行深入研究。基于因特網是由很多AS組成這一事實,本文在仔細分析DDoS攻擊之“源地址欺騙”特點以及IPv6地址結構之后提出了一種IPv6環境下實時DDoS防御方法。它的核心思想是,首先在受害者自治系統內建立決策判據樹,然后依據決策判據1和2對該樹進行實時監控,如果發現攻擊,就發送過濾消息通知相關實體(包括受害者自治系統和攻擊源自治系統中的BR)在受害端和源端對攻擊包進行檢測過濾,從而保護受害者。實驗證明,該方法能夠在秒鐘數量級檢測到攻擊并且對攻擊包進行過濾,能有效地防范多個DDoS攻擊源。另外,該方法還能準確地區分攻擊流和高業務流,需要較少的人工管理,可以在不恢復攻擊路徑的情況下就直接追蹤到攻擊源所在的AS(甚至是子網)。
雖然實時防御方法有以上優勢,但仍然存在一些問題,比如,如何確保過濾消息在傳送過程中的安全,閾值K和L以及變量H的具體取值。這些問題仍然需要進一步深入的研究。
參考文獻:
[1]TUOMAS A. RFC 3972, Cryptographically generated addresses(CGA)[S]. 2005.
[2]鄭輝,陳茂科,段海新,等. 基于混沌序列的IPv6地址分配與驗證[J]. 通信學報,2005,26(B01):109-112.
[3]王效亮.IPv6下拒絕服務攻擊追蹤的研究[D]. 太原:太原理工大學,2006.
[4]HINDEN R,DEERING S,NORDMARK E. RFC 3587,IPv6 global unicast address format[S]. 2003.
[5]Microsoft Corp.Microsoft Windows的TCP/IP基礎知識[EB/OL]. [2007-03-30]. http: //www.microsoft.com /china /technet /itsolutions /network /evaluate /technol /tcpipfund /tcpipfund_ch03.mspx#EIOAC.
[6]牛瑛霞. 一大進步,IPv6與IPv4協議的比較[EB/OL]. [2007-03-30]. http: //www.pconline.com.cn /network /skills /0703 /977522_2.html.
[7]王飛. DDoS網絡攻擊日益猖獗網絡貿易深受其害[EB/OL]. [2007-03-30]. http://www.enet.com.cn/article/2006/0228/A20060228506069.shtml.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文