摘 要:設計了一種基于虛電路的拒絕服務保護基體系結構;介紹了基于虛電路的資源分配算法;在基于服務元網絡體系結構的虛電路結構原型系統中實現了所提出的資源分配算法。與其他算法相比,該算法能有效對抗來自網絡的惡意授權實體的拒絕服務攻擊。
關鍵詞:拒絕服務; 虛電路; 資源分配; 惡意授權實體
中圖分類號:TP309.02文獻標志碼:A
文章編號:1001-3695(2009)09-3499-03
doi:10.3969/j.issn.1001-3695.2009.09.085
Research of denial of service attack defense based on virtual circuit
CHEN Lin1, LIN Hong-gang1, HU Yong2
(1.Security Institute of Computer Network, Chengdu University of Information Technology, Chengdu 610225, China; 2.Institute of Information Security, Sichuan University, Chengdu 610064, China)
Abstract:This paper designed a denial of service protection base architecture based on virtual circuit. And presented resource allocation algorithm based on virtual circuit. Realized the resource allocation algorithm in the prototype system of the virtual circuit architecture based on service unit network architecture. Compared with other algorithms, the algorithm can effectively fight the denial of service attacks from malicious authorized entities in the networks.
Key words:denial of service; virtual circuit; resource allocation; malicious authorized entities
近幾年來,在諸多的網絡攻擊中,拒絕服務攻擊成為影響網絡可用性的突出問題。全球每年由于拒絕服務攻擊而造成的經濟損失高達數百億美元[1]。比如,2000年2月,Yahoo、Buy.com、eBay、Amazon、CNN等多家大型網站遭受分布式拒絕服務攻擊而關閉數小時,同時整個網絡速度降低了26%,造成高達10億美元的經濟損失。為此,國內外對拒絕服務攻擊的防御進行了深入研究。
1 相關研究工作
Tuomas Aura等人[2]在對拒絕服務進行深入研究后,將拒絕服務分成兩種類型:第一種是由于過度分配或長時間占用共享資源而導致的拒絕服務,如進程(包括惡意進程和合法進程)從共享資源池中獲取大量資源并占為己有,不允許其他進程使用;第二種是由于資源被破壞而導致的拒絕服務,如惡意進程將資源從共享資源池中刪除,從而導致資源不可用,但惡意進程并沒有獲得資源本身。第二種拒絕服務通??梢酝ㄟ^訪問控制、完整性保護等機制予以避免,而第一種拒絕服務攻擊的防御相對比較困難。為此,國內外主要圍繞如何進行合理的資源分配以避免拒絕服務進行研究。
Yu等人[3]認為一種有效的拒絕服務解決方案必須基于資源分配的控制。Jonathan K. Millen[4]提出了拒絕服務保護基(denial of service protection base, DPB)的概念,DPB負責控制資源的分配。Zheng等人[5]提出了一種有效的實現DPB的算法,但所提出的資源分配算法僅僅基于進程標志和運行進程的用戶標志進行資源分配,對于主機系統而言,問題不是很明顯,但在網絡環境中,存在以下兩個方面的問題:a)由于進程(如IP進程)通常為多個實體(有可能是授權實體,也可能是非授權實體)提供服務,如果進程請求的資源大量用于為非授權實體提供服務,那么當授權實體請求提供服務時,進程會由于得不到相應的資源而無法為授權實體提供服務,從而導致拒絕服務的發生;b)即便是授權實體也有惡意授權實體和非惡意授權實體之分,如果進程請求的資源大量用于為惡意授權實體提供服務,那么當非惡意授權實體請求提供服務時,進程同樣會由于得不到相應的資源而無法為非惡意授權實體提供服務,從而導致拒絕服務的發生。針對情況a),文獻[6]提出了解決辦法:接入路由器對請求接入的源節點進行身份鑒別,源節點只有鑒別通過之后,才能接入網絡,保證只有授權實體才能接入網絡。本文針對情況b),設計了一種基于虛電路的拒絕服務保護基體系結構和資源分配算法,避免了來自惡意授權實體的拒絕服務攻擊。
2 關于虛電路
計算機網絡通常被劃分成資源子網和通信子網,其中通信子網的內部結構主要有數據報和虛電路結構兩種[7]。在虛電路結構中,為了進行數據的傳輸,網絡的源節點和目標節點之間先要建立一條邏輯通路,因為這條邏輯電路不是物理的實際電路,所以稱之為虛電路。源節點和目標節點在同一時間可能存在多條虛電路和多個節點連接。兩個節點之間也可以同時存在多條虛電路為不同的進程服務,這些虛電路的實際路徑可能相同,也可能不同,不同的虛電路通過虛電路號進行區分。在每個被傳送的數據分組中不僅要有分組序號、校驗和等控制信息,還要有它要通過的虛電路的號碼,以區別于其他虛電路的數據分組。
3 基于虛電路的拒絕服務防御方案
基于虛電路的拒絕服務保護基體系結構如圖1所示。進程在請求資源時,它要將進程標志idp、是否是網絡通信進程的標志ifnet、虛電路標志idvc、請求資源的類型a及請求資源的數量nr發送給資源分配監視器。資源分配監視器根據資源分配策略(resource allocation policy, RAP)、資源分配表(resource allocation table, RAT)和虛電路表(virtual circuit table, VCT)決定該資源分配請求是否被接受。虛電路的相關信息存儲在VCT中,RAP不能將信息寫入VCT,VCT的更新工作由虛電路建立、維護、刪除模塊負責。
3.1 基于虛電路的資源分配算法
設maxtotal(a)表示能夠被分配給所有進程的資源ρa的數量,maxp(a)表示能夠分配給單個進程的資源ρa的數量,maxu(a,b)表示能夠分配給用戶b的資源ρa的數量,maxv(a,b)表示能夠分配給虛電路b的資源ρa的數量,maxs_node(a,s)表示能分配給源節點s的資源ρa的數量,curtotal(a)表示當前已經分配給所有進程的資源ρa的數量,curp(a,b)表示當前已經分配給進程b的資源ρa的數量,curu(a,b)表示當前已經分配給用戶b的資源ρa的數量,curv(a,b)表示當前已經分配給虛電路b的資源ρa的數量,curs_node(a,s)表示當前已經分配給源節點s的資源ρa的數量。
資源監視器執行的資源分配算法描述如下:
input: idp,ifnet,idvc,a,nr
variable: result
begin:
Fetchmaxtotal(a) from RAP
Fetchmaxp(a) from RAP
if (ifnet)then
Fetch maxv(a,idvc) from RAP
Fetch maxs_node(a,source(idvc)) from RAP
endif
if (curtotal(a)+nr>maxtotal(a)) then
result=deny
else
if(curp(a,idp)+nr>maxp(a)) then
result=deny
else
if(curu(a,owner(idp))+nr>maxu(a,owner(idp))) then
result=deny
else
if(ifnet) then
if (curv(a,idvc)+nr>maxv(a,idvc))then
result=deny
else
if(curs_node(a,source(idvc))+nr>maxs_node(a,source(idvc)))
result=deny
else
result=accept
endif
endif
endif
endif
endif
endif
end
output: result
上面介紹的算法描述中:
a)語句“Fetch maxtotal(a) from RAP”的作用是從資源分配策略中讀取資源ρa能分配給所有進程的數量。
b)語句“Fetch maxp(a)from RAP”的作用是從資源分配策略中讀取資源ρa能分配給單個進程的數量。
c)語句“if (ifnet) then”的作用是判斷是否是網絡通信進程。
d)語句“Fetch maxv(a,idvc) from RAP”的作用是從資源分配策略中讀取能分配給標志為idvc的虛電路的資源ρa的數量。
e)語句“Fetch maxs_node(a,source(idvc)) from RAP”的作用是從資源分配策略中讀取能分配給標志為idvc的虛電路對應源節點的資源ρa的數量;
f)語句“if (curtotal(a)+nr>maxp(a)) then”的作用是判斷當前已經分配給所有進程的資源ρa的數量與進程請求分配的資源ρa的數量之和是否大于從資源分配策略中讀取的資源ρa能分配給所有進程的數量。
g)語句“if(curp(a,idp)+nr>maxp(a)) then”的作用是判斷當前已經分配給請求資源分配進程的資源ρa的數量與進程請求分配的資源ρa的數量之和是否大于從資源分配策略中讀取的資源ρa能分配給單個進程的數量。
h)語句“if(curu(a,owner(idp))+nr>maxu(a,owner(idp)) then”的作用是判斷當前已經分配給運行請求資源分配進程的用戶的資源ρa的數量與進程請求分配的資源ρa的數量之和是否大于從資源分配策略中讀取的能分配給運行請求資源分配進程的用戶的資源ρa的數量。
i)語句“if (curv(a,idvc)+nr>maxv(a,idvc)) then”的作用是判斷當前已經分配給標志為idvc的虛電路的資源ρa的數量與進程請求分配的資源ρa的數量之和是否大于從資源分配策略中讀取的能分配給標志為idvc的虛電路的資源ρa的數量。
j)語句“if(curs_node(a,source(idvc))+nr>maxs_node(a,source(idvc))”的作用是判斷當前分配給請求中標志為idvc的虛電路對應源節點的資源ρa的數量與進程請求分配的資源ρa的數量之和是否大于從資源分配策略中讀取的能分配給標志為idvc的虛電路對應源節點的資源ρa的數量。
3.2 基于虛電路的資源分配策略
定義 資源分配策略是一個五元組(M,P,U,V,S)。其中:M=〈m1,m2,…,ml〉是一個向量,表示系統中每種資源能分配給所有進程的數量;P=〈p1,p2,…,pl〉是一個向量,表示系統中每種資源能分配給單個進程的數量;U是一個l×k的矩陣,其中k是系統的用戶數,矩陣U的元素ua,b(a≤l,b≤k)表示用戶b能分配資源ρa的數量;V是一個l×q的矩陣,q是系統的虛電路數,矩陣元素va,b(a≤l,b≤q)表示虛電路b能分配資源ρa的數量;S是一個l×z的矩陣,z是系統的源節點數,矩陣元素sa,b(a≤l,b≤z)表示源節點b能分配資源ρa的數量。
資源分配監視器根據資源分配策略、資源分配表和虛電路表決定進程的資源分配請求是被拒絕,還是接受。以下幾種情況之一發生時,資源分配監視器將拒絕進程的資源分配請求:
a)某進程請求分配某種資源ρa的數量與已經分配給所有進程的資源ρa的數量之和大于允許分配給所有進程的資源ρa的數量。
b)某進程請求分配某種資源ρa的數量與已經分配給該進程的資源ρa的數量之和大于允許分配給該進程的資源ρa的數量。
c)某進程請求分配某種資源ρa的數量與已經分配給該進程用戶的資源ρa的數量之和大于允許分配給該進程用戶的資源ρa的數量。
d)如果請求某種資源ρa的進程是網絡通信進程,該進程請求分配資源ρa的數量與已經分配給某條虛電路的資源ρa的數量之和大于允許分配給該虛電路的資源ρa的數量。
e)如果請求某種資源ρa的進程是網絡通信進程,該進程請求分配資源ρa的數量與已經分配給某個授權實體的資源ρa的數量之和大于允許分配給該授權實體的資源ρa的數量。
3.3 資源分配表和虛電路表
資源分配表用于存放已分配資源的相關信息。資源分配表的每一行包括五個域,表示成〈idp,rid,uid,vid,nr〉。其中:idp域表示進程的標志;rid域表示資源的標志;uid域表示進程用戶的標志;vid域表示虛電路的標志;nr域表示已分配資源的數量。
虛電路表用于存放虛電路的相關信息。虛電路表的每一行包括五個域,表示成〈sid,in_vid,in_if,out_vid,out_if〉。其中:sid域表示源節點的標志;in_vid域表示入虛電路標志;in_if域表示入接口;out_vid域表示出虛電路標志;out_if域表示出接口。
根據資源分配表和虛電路表,可以計算出當前已經分配給所有進程的資源ρa的數量curtotal(a)、當前已經分配給進程idp的資源ρa的數量curp(a,idp))、當前已經分配給用戶owner(idp)的資源ρa的數量curu(a,owner(idp))、當前已經分配給虛電路idvc的資源ρa的數量curv(a,idvc)、當前已經分配給源節點source(idvc)的資源ρa的數量curs_node(a,source(idvc))。
函數owner:ID→UID的定義域ID是進程標志的集合,值域UID是運行該進程的用戶標志集合。通過函數owner,可以求出指定進程的用戶,如通過式(1)可以求出標志為idp的進程的用戶標志為uid
owner(idp)=uid(1)
函數source:VID→SID的定義域VID是虛電路標志的集合,值域SID是源節點標志集合。通過函數source,可以求出指定虛電路的源節點(即發起建立該虛電路的節點),如通過式(2)可以求出標志為idvc的虛電路的源節點的標志為sid
source(idvc)=sid(2)
3.4 資源分配策略的執行
資源分配監視器執行函數Φ:IDp,B,IDv,R,N→{deny,accept},
Φ(idp,ifnet,idvc,a,nr)=
deny 如果request(idp,ifnet,idvc,a,nr)應當被拒絕
accept 如果request(idp,ifnet,idvc,a,nr)應當被接受(3)
函數Φ的定義域IDp是由所有進程的標志構成的集合;B={0,1};IDv是由所有虛電路標志構成的集合;R是由所有資源構成的集合,R={ρa|a=1,2,…,l};N是大于0的整數集合;函數Φ的值域是集合{deny,accept},其中deny表示拒絕進程的資源分配請求,accept表示接受進程的資源分配請求。
進程資源分配請求request(idp,ifnet,idvc,a,nr)中的虛電路標志idvc是進程從它接收到的數據分組頭中提取的虛電路標志。虛電路標志是建立虛電路時確定的。
4 算法在Linux操作系統中的實現
本文在基于服務元網絡體系結構的虛電路結構的原型系統[8](圖2)中實現了基于虛電路的資源分配算法。圖2中,與客戶機節點和服務器節點緊鄰的路由器稱為接入路由器,其他路由器稱為傳輸路由器。在客戶機節點、接入路由器節點、傳輸路由器節點以及服務器節點中的虛電路維護模塊負責在客戶機節點和服務器節點之間建立、維護和撤銷虛電路,并負責更新虛電路表。在服務器節點中的資源分配監視器模塊實現了基于虛電路的資源分配算法。
通過對Linux操作系統核心中與網絡通信有關的系統調用的服務函數進行修改,實現了基于虛電路的資源分配。以send( )和recv( )兩個系統調用為例,在send( )和recv( )兩個系統調用的服務函數sys_vc_send( )和sys_vc_rcv( )中,當需要進行sk_buff緩存結構分配時,則執行式(3)所示的資源分配函數。如果執行的結果為accept,則為sys_vc_send( )或sys_vc_rcv( )函數分配其所需的sk_buff緩存結構;否則,返回失敗。
為了測試所實現的資源分配算法,本文使用了五臺高性能的PC機作為客戶機節點。每臺客戶機節點上的合法用戶首先與服務器節點建立起虛電路,然后同時運行針對服務器節點的洪水攻擊程序。測試結果表明,所實現的算法能有效對抗來自惡意授權實體的拒絕服務攻擊。
5 結束語
給出了基于虛電路的拒絕服務保護基體系結構,描述了基于虛電路的資源分配算法。在Linux操作系統下面,通過修改與網絡通信有關的系統調用的服務函數,實現了基于虛電路的資源分配。與其他只適應于主機系統的資源分配算法相比,基于虛電路的資源分配算法能有效對抗網絡環境中由惡意授權實體發起的拒絕服務攻擊。
參考文獻:
[1]MIRKOVIC J, MARTIN J, PEIHER P. A taxonomy of DDoS attacks and DDoS defense mechanisms[J]. ACM Sigcomm Computer Comm, 2004,34(2):39-53.
[2]AURA T, NIKANDER P, LEIWO J. DOS-resistant authentication with client puzzles[M]. Berlin: Springer, 2001:170-177.
[3]YU C F, GLIGOR V D. A specification and verification method for preventing denial of service[J]. IEEE Trans on Software Engineering, 1990,16(6): 581-592.
[4]MILLEN J K. A resource allocation model for denial of service[C]//Proc of IEEE Symposium on Security and Privacy. Oakiand, CA:IEEE Computer Society, 1992: 137-147.
[5]LEIWO J, ZHENG Yu-liang. A method to implement a denial of service protection base[C]//Proc of the 2nd Australian Confenence on Information Security and Privacy. London:Springer-Verlag, 1997: 90-101.
[6]肖邦樂. 基于虛電路的微通信元構架的安全機制研究[D]. 成都:電子科技大學, 2005.
[7]曾華燊, 高雨. 論高速接入網技術[J]. 計算機應用, 2006, 26(8): 1751-1755.
[8]魯珂, 左玲, 曾家智. 微通信元網絡系統的軟件架構[J]. 計算機科學, 2006, 33(7):20-22.