張源良, 張 宇
(哈爾濱工業大學 計算機科學與技術學院, 哈爾濱 150001)
BGP 是目前互聯網實際使用的標準域間路由協議,可將為數眾多、拓撲各異、大小不一的自治域連接在一起并相互交換路由信息。BGP 使用TCP 作為路由交換的底層傳輸協議,通常工作在互聯網提供商(ISP)搭建的大型BGP路由之間,在自治域之間建立BGP會話,使得自治域之間可達。
在互聯網中針對不同的網絡有各種不同的攻擊手段,其中拒絕服務(DoS)攻擊是一種常見的網絡攻擊手段,攻擊者利用可達到受害者的機器對受害者發送大量流量使得受害者的正常工作受阻,達到攻擊的目標。其中,受害者可以是網絡服務器、網絡鏈接或路由器、ISP等等。幾乎所有互聯網服務都容易受到拒絕服務攻擊。攻擊者往往會感染足夠多的終端主機,使很多終端主機變為可控制的僵尸機,利用足夠多的散布整個網絡的僵尸機對受害者進行拒絕服務攻擊,這種攻擊方法被稱為分布式拒絕服務(DDos)攻擊。
拒絕服務攻擊的種類有很多,包括利用軟件漏洞的Ping of death和Teardrop、耗盡應用資源的Fork bomb、耗盡操作系統資源的TCP SYN flood、LAND攻擊、HTTP SlowPOST、BlackNurse等[1]。本文要討論的是低速率分布式拒絕服務(Low-rate DDos)攻擊。與普通的DDos攻擊最大的區別是,Low-rate DDos攻擊不會長時間地發送攻擊流量,而是周期性地發送短暫的攻擊流量,在2個攻擊周期之間不發送任何攻擊流量。這樣的特性使得Low-rate DDos在統計流量特征中與普通用戶的流量區別不明顯,較難檢測[2]。
Low-rate DDos在實施上也比DDos復雜很多,需要針對攻擊的受害者服務特性進行分析,選擇合適的攻擊周期,達到設定的攻擊效果。本文研究的是針對BGP會話的Low-rate DDos。
根據低速率分布式拒絕服務攻擊周期性發送匯聚攻擊流量的特性以及BGP會話周期性發送保活包的特性,自然地可以想到如何針對BGP會話進行低速率分布式拒絕服務攻擊,其原理包括3個部分,對此可分述如下。
(1)2個自治域在建立BGP會話后,會周期性(holdtime時間通常為120 s)地發送Keepalive包。
(2)如果BGP路由在會話過程中對于一個路由器的連續3個Keepalive包都沒有收到,BGP路由會認為會話已經失效,會發送Notification包,表示會話斷開,并且向周圍的BGP路由發送Update包,更新自治域的互連情況。
(3)使用Low-rate DDos攻擊在攻擊BGP會話時,在攻擊峰值周期時有概率擁塞BGP路由器的接受隊列,使得其他BGP路由發送的Keepalive包被丟棄。
綜合以上原理,理論上,使用Low-rate DDos攻擊對BGP會話的Keepalive包進行阻塞即可打斷BGP會話,進而使2個自治域之間的通信受到影響。在應用中實施此攻擊時還需要考慮組織DDos攻擊流量的方法和攻擊參數的確定。
由于BGP路由往往是ISP間用于自治域互連的大型路由器,如果在其上進行Low-rate DDos攻擊,會使得正常的自治域通信出現問題,因此本文在虛擬的網絡環境中對攻擊進行模擬,驗證其攻擊效果。
本文使用的虛擬網絡環境,包括若干完全可控的僵尸主機Bot和若干建立BGP會話互連的BGP路由。整個網絡由若干個自治域構成,每個自治域包括若干僵尸主機Bot和BGP路由Router,自治域之間通過BGO路由互連,使得整個網絡互通。
僵尸機調度方法如圖1所示,欲攻擊的BGP連接為Target Link,發送攻擊流量f1,f2,…,fn的僵尸機為Bot1,Bot2,…,Botn。給僵尸機下達攻擊命令的控制機為Controller C。
調度僵尸機攻擊過程可闡釋論述如下。
(1)選取控制機。控制機應該滿足每個僵尸機都有到達控制機C的路徑,而且每條路徑都經過被攻擊連接Target Link,經過Target Link后通過同樣的路徑Route 2,…,RouteZ到達控制機。這是最優的控制機選取,因為攻擊機從被攻擊鏈路到達控制機的路徑相同,時鐘同步時只需考慮攻擊機到被攻擊鏈路的網絡延遲。

圖1 僵尸機調度方法
(2)時鐘同步。為了保證僵尸機的攻擊流量同時到達被攻擊鏈路,需要進行時鐘同步。控制機對每臺僵尸機發送時鐘同步請求,僵尸機返回其當前時間Tsi,控制機收到Ts時根據本機當前時間Tri計算時間差,計算公式表示為:
Di=Tri-Tsi,
(1)
將Di發送給僵尸機,每個僵尸機實際的開始時間bot_start_timei=strat_time-Di,其中start_time為控制機發送的開始攻擊時間。
(3)環境參數的設定。對于BGP連接之間的BGP協議的keepalive發送間隔、holdtime時間和reconnect時間等參數,以及被攻擊鏈路帶寬大小,在攻擊前可通過讀取配置文件中設定參數來求得。
(4)攻擊參數的設定。攻擊前從配置文件中讀取開始時間、攻擊流量、持續時間等參數,以此對僵尸機下達攻擊指令。其中,產生攻擊流量的方法為組裝UDP包。以14字節以太網頭,20字節IP包頭,8字節UDP包頭,32字節數據組裝UDP包。使用數據報套接字發包。指定接收方IP地址和端口,開啟多個線程,用SOCK_DGRM類型套接字發送UDP包。
在此基礎上,還需設定發包速率大小。設定預期發送流量大小為flow,可以計算出發包速率為:
rate=(flow*1 024*1 024)/(8*(42+length)).
(2)
每個線程中循環發包,設定全局變量記錄發包數量,每發送一百個包判斷當前速率是否達到設定值rate,若達到,此次循環不發送包;未達到,則繼續發包。
(5)攻擊結果的分析。攻擊的同時使用tcpdump抓包,待攻擊結束后將抓包結果進行分析,將結果存為日志文件。
考慮到普通的BGP鏈路帶寬為百兆或千兆帶寬,僵尸機匯聚的攻擊流量很難達到阻塞BGP鏈路的目的,所以在模擬實驗中對BGP帶寬鏈路進行限制。
本文的虛擬網絡帶寬限制采用Linux內核Traffic Control中的令牌桶算法。其原理如圖2所示,主要有以下要點:
(1)每過1/rs, 桶中增加一個令牌。
(2)桶中最多存放b個令牌,如果桶滿了,新放入的令牌會被丟棄。
(3)當一個n字節的數據包到達時,消耗n個令牌,然后發送該數據包。
(4)如果桶中可用令牌小于n,則該數據包將被緩存。
(5)緩存區滿后,后續的包會被丟棄。

圖2 令牌桶算法
本文在令牌桶算法的實際實施中采用集成tc的tcconfig模塊,例如控制端口eth1帶寬為1Mb/s的命令為tcset --device eth1 --rate 1 024 K,等價于表1中的Linux流量控制命令。首先在端口eth1上建立htb令牌桶,接著設置令牌速率rate,單位存儲cile為1 024 Kbit,緩沖區burst和子緩沖區cburst為12.8 KB,最后設置進出口列表為0.0.0.0/0,表示規則對所有IP地址有效。

表1 流量控制方法
根據Low-rate DDos攻擊的原理,模擬攻擊對BGP會話采用如圖3所示的間隔發送流量的方式。BGP會話在建立連接后會周期性地發送Keepalive包,發送流量的方法即在Keepalive包發送的前后覆蓋一段時間進行流量發送。因為模擬攻擊時為理想情況,如此一來就可以在BGP路由的端口進行抓包,確定Keepalive包的發送具體時間,根據該時間和holdtime參數設定確定持續發送流量發起的時間和間隔需要的時間。

圖3 間隔發送流量
在確定虛擬網絡以及攻擊方法后需要對每個僵尸機開啟多少攻擊線程,采用多少僵尸機,在哪個攻擊范圍內有打斷BGP連接的可能等參數進行確定,然后使用確定后的攻擊參數進行模擬攻擊,分析模擬攻擊結果。
分別設定發送30 Mb/s、50 Mb/s、80 Mb/s、100 Mb/s的流量,用ifstat在接收端口流量日志文件,流量發送控制是否精確。研究結果表明,4種設定攻擊流量時的接收端流量確切值與預期偏差不超過1 Mb/s,達到了流量設定控制預期效果。特別地,跨路由發送流量的情況下與直接相連路由發送流量結果相同。
在調度僵尸機發送匯聚流量前,需要確定發送流量參數。首先確定單個僵尸機的攻擊流量參數,然后確定同主機多個僵尸機攻擊流量匯聚的參數,最后改變匯聚攻擊流量和帶寬限制確定有可能攻擊成功的參數。
(1)單個僵尸機發送流量瓶頸。從1~8增加線程數量(高于8個線程內存占用過多),每個線程永真循環發包,與使用ifstat寫日志記錄不同線程數下最大發包值,線程從1~8時的最大入口流量如圖4所示。由圖4中可以看到單個虛擬僵尸機發送最大流量所需的線程數為4。
(2)多個僵尸機匯聚流量。通過多個連接相同BGP路由的僵尸主機,匯聚流量發送到與連接的BGP路由直連的BGP路由器,變化僵尸主機的數量,記錄匯聚攻擊流量的大小。
多僵尸機匯聚流量的情況如圖5所示,改變僵尸機數量,得到不同的僵尸機匯總流量大小,每個結果均為多次測試得到,仿真結果表明4臺僵尸機時候達到瓶頸匯聚流量。

圖4 不同線程數發送流量

圖5 多僵尸機匯聚流量
以之前步驟測得的每個僵尸主機開啟4個線程,使用4個僵尸主機的實驗拓撲,鏈路帶寬從10 Mb/s到100 Mb/s進行變化,攻擊流量從40 Mb/s變化到之前測試的瓶頸匯聚流量260 Mb/s,進行攻擊測試。每個參數進行10次實驗,每次實驗時設定最大攻擊時間為2 h,2 h內若BGP連接斷開則計數加1,進行下一次實驗,超過2 h則直接進行下一次實驗。
帶寬為10 Mb/s、20 Mb/s、40 Mb/s和60 Mb/s時的流量范圍實驗結果見表2,帶寬大于60 Mb/s時與60 Mb/s的實驗結果相同。故只有10 Mb/s、20 Mb/s和40 Mb/s有被打斷的可能。
表2 發送流量范圍實驗結果
Tab. 2 Send traffic range experiment results %

帶寬 攻擊流量4060801001401802202601000303030505040200020020103020400000102010206000000000
得到指導實驗參數范圍后,在能夠打斷BGP連接的參數范圍內進行實驗,每組參數進行10次攻擊實驗,每次實驗攻擊中記錄BGP數據包,直到BGP連接斷開為止,記錄BGP連接斷開所需的時間。實驗結果記錄如圖6所示。該結果說明測試得能打斷的BGP鏈路帶寬為10 Mb/s、20 Mb/s、40 Mb/s。其中,10 Mb/s時可以用100 Mb/s攻擊流量打斷,其他帶寬只能用大于140 Mb/s的攻擊流量。大部分成功攻擊參數下可以在120 s內打斷BGP連接。

圖6 不同參數打斷所需時間
本文研究了針對BGP會話的低速率分布式拒絕服務攻擊,按照低速率分布式拒絕服務攻擊周期性攻擊的特性,對BGP會話的周期性Keepalive包進行周期性阻斷,達到攻擊BGP會話的目的,并對此攻擊進行模擬。模擬結果說明在對網絡進行相應帶寬限制的情況下,按照一定攻擊流量和頻率,低速率分布式拒絕服務攻擊可以打斷BGP會話。