張源良, 張 宇
(哈爾濱工業(yè)大學(xué) 計算機科學(xué)與技術(shù)學(xué)院, 哈爾濱 150001)
BGP 是目前互聯(lián)網(wǎng)實際使用的標準域間路由協(xié)議,可將為數(shù)眾多、拓撲各異、大小不一的自治域連接在一起并相互交換路由信息。BGP 使用TCP 作為路由交換的底層傳輸協(xié)議,通常工作在互聯(lián)網(wǎng)提供商(ISP)搭建的大型BGP路由之間,在自治域之間建立BGP會話,使得自治域之間可達。
在互聯(lián)網(wǎng)中針對不同的網(wǎng)絡(luò)有各種不同的攻擊手段,其中拒絕服務(wù)(DoS)攻擊是一種常見的網(wǎng)絡(luò)攻擊手段,攻擊者利用可達到受害者的機器對受害者發(fā)送大量流量使得受害者的正常工作受阻,達到攻擊的目標。其中,受害者可以是網(wǎng)絡(luò)服務(wù)器、網(wǎng)絡(luò)鏈接或路由器、ISP等等。幾乎所有互聯(lián)網(wǎng)服務(wù)都容易受到拒絕服務(wù)攻擊。攻擊者往往會感染足夠多的終端主機,使很多終端主機變?yōu)榭煽刂频慕┦瑱C,利用足夠多的散布整個網(wǎng)絡(luò)的僵尸機對受害者進行拒絕服務(wù)攻擊,這種攻擊方法被稱為分布式拒絕服務(wù)(DDos)攻擊。
拒絕服務(wù)攻擊的種類有很多,包括利用軟件漏洞的Ping of death和Teardrop、耗盡應(yīng)用資源的Fork bomb、耗盡操作系統(tǒng)資源的TCP SYN flood、LAND攻擊、HTTP SlowPOST、BlackNurse等[1]。本文要討論的是低速率分布式拒絕服務(wù)(Low-rate DDos)攻擊。與普通的DDos攻擊最大的區(qū)別是,Low-rate DDos攻擊不會長時間地發(fā)送攻擊流量,而是周期性地發(fā)送短暫的攻擊流量,在2個攻擊周期之間不發(fā)送任何攻擊流量。這樣的特性使得Low-rate DDos在統(tǒng)計流量特征中與普通用戶的流量區(qū)別不明顯,較難檢測[2]。
Low-rate DDos在實施上也比DDos復(fù)雜很多,需要針對攻擊的受害者服務(wù)特性進行分析,選擇合適的攻擊周期,達到設(shè)定的攻擊效果。本文研究的是針對BGP會話的Low-rate DDos。
根據(jù)低速率分布式拒絕服務(wù)攻擊周期性發(fā)送匯聚攻擊流量的特性以及BGP會話周期性發(fā)送?;畎奶匦裕匀坏乜梢韵氲饺绾吾槍GP會話進行低速率分布式拒絕服務(wù)攻擊,其原理包括3個部分,對此可分述如下。
(1)2個自治域在建立BGP會話后,會周期性(holdtime時間通常為120 s)地發(fā)送Keepalive包。
(2)如果BGP路由在會話過程中對于一個路由器的連續(xù)3個Keepalive包都沒有收到,BGP路由會認為會話已經(jīng)失效,會發(fā)送Notification包,表示會話斷開,并且向周圍的BGP路由發(fā)送Update包,更新自治域的互連情況。
(3)使用Low-rate DDos攻擊在攻擊BGP會話時,在攻擊峰值周期時有概率擁塞BGP路由器的接受隊列,使得其他BGP路由發(fā)送的Keepalive包被丟棄。
綜合以上原理,理論上,使用Low-rate DDos攻擊對BGP會話的Keepalive包進行阻塞即可打斷BGP會話,進而使2個自治域之間的通信受到影響。在應(yīng)用中實施此攻擊時還需要考慮組織DDos攻擊流量的方法和攻擊參數(shù)的確定。
由于BGP路由往往是ISP間用于自治域互連的大型路由器,如果在其上進行Low-rate DDos攻擊,會使得正常的自治域通信出現(xiàn)問題,因此本文在虛擬的網(wǎng)絡(luò)環(huán)境中對攻擊進行模擬,驗證其攻擊效果。
本文使用的虛擬網(wǎng)絡(luò)環(huán)境,包括若干完全可控的僵尸主機Bot和若干建立BGP會話互連的BGP路由。整個網(wǎng)絡(luò)由若干個自治域構(gòu)成,每個自治域包括若干僵尸主機Bot和BGP路由Router,自治域之間通過BGO路由互連,使得整個網(wǎng)絡(luò)互通。
僵尸機調(diào)度方法如圖1所示,欲攻擊的BGP連接為Target Link,發(fā)送攻擊流量f1,f2,…,fn的僵尸機為Bot1,Bot2,…,Botn。給僵尸機下達攻擊命令的控制機為Controller C。
調(diào)度僵尸機攻擊過程可闡釋論述如下。
(1)選取控制機??刂茩C應(yīng)該滿足每個僵尸機都有到達控制機C的路徑,而且每條路徑都經(jīng)過被攻擊連接Target Link,經(jīng)過Target Link后通過同樣的路徑Route 2,…,RouteZ到達控制機。這是最優(yōu)的控制機選取,因為攻擊機從被攻擊鏈路到達控制機的路徑相同,時鐘同步時只需考慮攻擊機到被攻擊鏈路的網(wǎng)絡(luò)延遲。
圖1 僵尸機調(diào)度方法
(2)時鐘同步。為了保證僵尸機的攻擊流量同時到達被攻擊鏈路,需要進行時鐘同步??刂茩C對每臺僵尸機發(fā)送時鐘同步請求,僵尸機返回其當(dāng)前時間Tsi,控制機收到Ts時根據(jù)本機當(dāng)前時間Tri計算時間差,計算公式表示為:
Di=Tri-Tsi,
(1)
將Di發(fā)送給僵尸機,每個僵尸機實際的開始時間bot_start_timei=strat_time-Di,其中start_time為控制機發(fā)送的開始攻擊時間。
(3)環(huán)境參數(shù)的設(shè)定。對于BGP連接之間的BGP協(xié)議的keepalive發(fā)送間隔、holdtime時間和reconnect時間等參數(shù),以及被攻擊鏈路帶寬大小,在攻擊前可通過讀取配置文件中設(shè)定參數(shù)來求得。
(4)攻擊參數(shù)的設(shè)定。攻擊前從配置文件中讀取開始時間、攻擊流量、持續(xù)時間等參數(shù),以此對僵尸機下達攻擊指令。其中,產(chǎn)生攻擊流量的方法為組裝UDP包。以14字節(jié)以太網(wǎng)頭,20字節(jié)IP包頭,8字節(jié)UDP包頭,32字節(jié)數(shù)據(jù)組裝UDP包。使用數(shù)據(jù)報套接字發(fā)包。指定接收方IP地址和端口,開啟多個線程,用SOCK_DGRM類型套接字發(fā)送UDP包。
在此基礎(chǔ)上,還需設(shè)定發(fā)包速率大小。設(shè)定預(yù)期發(fā)送流量大小為flow,可以計算出發(fā)包速率為:
rate=(flow*1 024*1 024)/(8*(42+length)).
(2)
每個線程中循環(huán)發(fā)包,設(shè)定全局變量記錄發(fā)包數(shù)量,每發(fā)送一百個包判斷當(dāng)前速率是否達到設(shè)定值rate,若達到,此次循環(huán)不發(fā)送包;未達到,則繼續(xù)發(fā)包。
(5)攻擊結(jié)果的分析。攻擊的同時使用tcpdump抓包,待攻擊結(jié)束后將抓包結(jié)果進行分析,將結(jié)果存為日志文件。
考慮到普通的BGP鏈路帶寬為百兆或千兆帶寬,僵尸機匯聚的攻擊流量很難達到阻塞BGP鏈路的目的,所以在模擬實驗中對BGP帶寬鏈路進行限制。
本文的虛擬網(wǎng)絡(luò)帶寬限制采用Linux內(nèi)核Traffic Control中的令牌桶算法。其原理如圖2所示,主要有以下要點:
(1)每過1/rs, 桶中增加一個令牌。
(2)桶中最多存放b個令牌,如果桶滿了,新放入的令牌會被丟棄。
(3)當(dāng)一個n字節(jié)的數(shù)據(jù)包到達時,消耗n個令牌,然后發(fā)送該數(shù)據(jù)包。
(4)如果桶中可用令牌小于n,則該數(shù)據(jù)包將被緩存。
(5)緩存區(qū)滿后,后續(xù)的包會被丟棄。
圖2 令牌桶算法
本文在令牌桶算法的實際實施中采用集成tc的tcconfig模塊,例如控制端口eth1帶寬為1Mb/s的命令為tcset --device eth1 --rate 1 024 K,等價于表1中的Linux流量控制命令。首先在端口eth1上建立htb令牌桶,接著設(shè)置令牌速率rate,單位存儲cile為1 024 Kbit,緩沖區(qū)burst和子緩沖區(qū)cburst為12.8 KB,最后設(shè)置進出口列表為0.0.0.0/0,表示規(guī)則對所有IP地址有效。
表1 流量控制方法
根據(jù)Low-rate DDos攻擊的原理,模擬攻擊對BGP會話采用如圖3所示的間隔發(fā)送流量的方式。BGP會話在建立連接后會周期性地發(fā)送Keepalive包,發(fā)送流量的方法即在Keepalive包發(fā)送的前后覆蓋一段時間進行流量發(fā)送。因為模擬攻擊時為理想情況,如此一來就可以在BGP路由的端口進行抓包,確定Keepalive包的發(fā)送具體時間,根據(jù)該時間和holdtime參數(shù)設(shè)定確定持續(xù)發(fā)送流量發(fā)起的時間和間隔需要的時間。
圖3 間隔發(fā)送流量
在確定虛擬網(wǎng)絡(luò)以及攻擊方法后需要對每個僵尸機開啟多少攻擊線程,采用多少僵尸機,在哪個攻擊范圍內(nèi)有打斷BGP連接的可能等參數(shù)進行確定,然后使用確定后的攻擊參數(shù)進行模擬攻擊,分析模擬攻擊結(jié)果。
分別設(shè)定發(fā)送30 Mb/s、50 Mb/s、80 Mb/s、100 Mb/s的流量,用ifstat在接收端口流量日志文件,流量發(fā)送控制是否精確。研究結(jié)果表明,4種設(shè)定攻擊流量時的接收端流量確切值與預(yù)期偏差不超過1 Mb/s,達到了流量設(shè)定控制預(yù)期效果。特別地,跨路由發(fā)送流量的情況下與直接相連路由發(fā)送流量結(jié)果相同。
在調(diào)度僵尸機發(fā)送匯聚流量前,需要確定發(fā)送流量參數(shù)。首先確定單個僵尸機的攻擊流量參數(shù),然后確定同主機多個僵尸機攻擊流量匯聚的參數(shù),最后改變匯聚攻擊流量和帶寬限制確定有可能攻擊成功的參數(shù)。
(1)單個僵尸機發(fā)送流量瓶頸。從1~8增加線程數(shù)量(高于8個線程內(nèi)存占用過多),每個線程永真循環(huán)發(fā)包,與使用ifstat寫日志記錄不同線程數(shù)下最大發(fā)包值,線程從1~8時的最大入口流量如圖4所示。由圖4中可以看到單個虛擬僵尸機發(fā)送最大流量所需的線程數(shù)為4。
(2)多個僵尸機匯聚流量。通過多個連接相同BGP路由的僵尸主機,匯聚流量發(fā)送到與連接的BGP路由直連的BGP路由器,變化僵尸主機的數(shù)量,記錄匯聚攻擊流量的大小。
多僵尸機匯聚流量的情況如圖5所示,改變僵尸機數(shù)量,得到不同的僵尸機匯總流量大小,每個結(jié)果均為多次測試得到,仿真結(jié)果表明4臺僵尸機時候達到瓶頸匯聚流量。
圖4 不同線程數(shù)發(fā)送流量
圖5 多僵尸機匯聚流量
以之前步驟測得的每個僵尸主機開啟4個線程,使用4個僵尸主機的實驗拓撲,鏈路帶寬從10 Mb/s到100 Mb/s進行變化,攻擊流量從40 Mb/s變化到之前測試的瓶頸匯聚流量260 Mb/s,進行攻擊測試。每個參數(shù)進行10次實驗,每次實驗時設(shè)定最大攻擊時間為2 h,2 h內(nèi)若BGP連接斷開則計數(shù)加1,進行下一次實驗,超過2 h則直接進行下一次實驗。
帶寬為10 Mb/s、20 Mb/s、40 Mb/s和60 Mb/s時的流量范圍實驗結(jié)果見表2,帶寬大于60 Mb/s時與60 Mb/s的實驗結(jié)果相同。故只有10 Mb/s、20 Mb/s和40 Mb/s有被打斷的可能。
表2 發(fā)送流量范圍實驗結(jié)果
Tab. 2 Send traffic range experiment results %
帶寬 攻擊流量4060801001401802202601000303030505040200020020103020400000102010206000000000
得到指導(dǎo)實驗參數(shù)范圍后,在能夠打斷BGP連接的參數(shù)范圍內(nèi)進行實驗,每組參數(shù)進行10次攻擊實驗,每次實驗攻擊中記錄BGP數(shù)據(jù)包,直到BGP連接斷開為止,記錄BGP連接斷開所需的時間。實驗結(jié)果記錄如圖6所示。該結(jié)果說明測試得能打斷的BGP鏈路帶寬為10 Mb/s、20 Mb/s、40 Mb/s。其中,10 Mb/s時可以用100 Mb/s攻擊流量打斷,其他帶寬只能用大于140 Mb/s的攻擊流量。大部分成功攻擊參數(shù)下可以在120 s內(nèi)打斷BGP連接。
圖6 不同參數(shù)打斷所需時間
本文研究了針對BGP會話的低速率分布式拒絕服務(wù)攻擊,按照低速率分布式拒絕服務(wù)攻擊周期性攻擊的特性,對BGP會話的周期性Keepalive包進行周期性阻斷,達到攻擊BGP會話的目的,并對此攻擊進行模擬。模擬結(jié)果說明在對網(wǎng)絡(luò)進行相應(yīng)帶寬限制的情況下,按照一定攻擊流量和頻率,低速率分布式拒絕服務(wù)攻擊可以打斷BGP會話。