本發(fā)明涉及互聯(lián)網(wǎng)攻擊檢測與過濾領域,特別涉及一種dns放大攻擊的檢測與過濾方法。
背景技術:
dns放大攻擊是一種利用dns服務器緩存功能的反射攻擊。其攻擊流程為:攻擊者入侵具有internet漏洞的權威域名服務器,并注冊大型文件;攻擊者控制僵尸電腦偽造源ip地址(受害者ip地址)并向緩存域名服務器發(fā)送查詢請求;緩存域名服務器向權威域名服務器發(fā)送請求并獲取上述大型文件;緩存域名服務器向受害者發(fā)送大型記錄信息。以這種方式,達到攻擊受害者的目的。
目前,針對dns放大攻擊的研究主要有:paul等介紹了一種通過響應速率(請求與響應之間的對應關系)來限制dns放大攻擊的方法。當響應頻率超過一定閾值時,將停止接受查詢;如果該值低于閾值,則dns服務器將再次恢復工作;由于這種操作,響應的頻率將會降低。即,這種機制確保每個查詢的頻率不超過閾值,因此可以減少dns放大攻擊的效果,但是需要確定每個dns服務器的閾值,且容易影響正常用戶的使用;倪等人提出了一種基于時間序列的方法來檢測dns放大攻擊,但是此方法僅僅以遞歸應答報文和發(fā)送的請求報文之間的比例關系作為判斷依據(jù),當存在正常用戶請求大型文件導致比例增加時,會大大增加誤報率;vernon提出基于ip-域名的多層級限速的方法來限制dns放大攻擊,此方法能夠有效實現(xiàn)對域名服務系統(tǒng)的防護,但是需要設立多個層級來過濾數(shù)據(jù)包,不能夠快速有效的檢測出攻擊,實時性較差。上述研究均提出了對dns放大攻擊的檢測方法,但在檢測出攻擊的基礎上并沒有做出后續(xù)的處理,并未實質(zhì)性地消除受害者受到的危害。
技術實現(xiàn)要素:
本發(fā)明所要解決的技術問題是針對背景技術的缺陷,提出一種dns放大攻擊的檢測與過濾方法,實現(xiàn)如何實質(zhì)性地減小受害者的受損程度。
本發(fā)明的上述技術問題是通過以下技術方案得以實現(xiàn)的:
一種dns放大攻擊的檢測與過濾方法,其特征是:包括以下步驟:
檢測:選取并分析發(fā)生dns放大攻擊時的特征,以單位時間內(nèi)的數(shù)據(jù)量作為計算項,通過k-means++算法進行聚類分析,判斷是否發(fā)生攻擊;
過濾:如果檢測步驟中判斷發(fā)生攻擊,通過hop-count信息,過濾流向受害者的攻擊流量。
進一步的,在檢測步驟中,選取的特征包括:請求速率、信息增益比和源ip熵。
進一步的,分析發(fā)生dns放大攻擊時的特征包括以下步驟:
步驟1:設置時間間隔t;
步驟2:計算t時間間隔內(nèi)的請求速率f;
步驟2.1:定義request_all為t時間間隔內(nèi)的總請求數(shù);
步驟2.2:求出t時間間隔內(nèi)的請求速率為:
步驟3:計算t時間間隔內(nèi)的信息增益比g;
步驟3.1:定義response_tra為t時間間隔內(nèi)的響應流量的總大??;
步驟3.2:定義request_tra為t時間間隔內(nèi)的請求流量的總大??;
步驟3.3:求出t時間間隔內(nèi)的信息增益比:
步驟4:計算t時間間隔內(nèi)的源ip熵值;
步驟4.1:對源ip序列引入滑動窗口機制,取窗口大小為m;
步驟4.2:計算窗口內(nèi)每個源ip概率,記為p={pi,i=1,2,…,l};利用公式1計算窗口中源ip的熵值;
步驟4.3:取出當前窗口第一個源ip出現(xiàn)的次數(shù)以及概率p1;
步驟4.4:滑動窗口后移一項,即:將原窗口第一項移除,將原第m+1項移入窗口,重新計算p1;同時計算新移入的源ip的概率;
步驟4.5:根據(jù)以上步驟,對每個滑動窗口均可計算當前窗口內(nèi)的源ip熵值,以得到一系列熵值,記為:{hi,i=1,2,…,t},t表示滑動窗口總數(shù)。
進一步的,在檢測步驟中,通過k-means++算法進行聚類分析包括以下步驟:
步驟1:基于求得的特征,對于每一個新數(shù)據(jù),利用k-means++算法進行聚類分析,判斷其屬于正常類還是攻擊類,從而判斷是否發(fā)生ddos放大攻擊;
步驟1.1:提取上述特征作為樣本,用于訓練;
步驟1.2:利用k-means++算法對上述樣本進行聚類;
步驟1.3:獲取待檢測樣本點yi;
步驟1.4:計算此樣本點與k個聚類中心的距離,求得最小距離min_dis,則此樣本暫屬于該簇;
步驟1.5:計算此聚類中各樣本與yi的距離,求得最大距離max_dis,若max_dis超過閾值,則判定為發(fā)生攻擊;相反,則說明未發(fā)生攻擊,將樣本加入正常簇,調(diào)整聚類中心。
進一步的,其中過濾包括以下步驟:
步驟1:根據(jù)檢測步驟確定受害者ip;
步驟2:統(tǒng)計此ip所有數(shù)據(jù)包的ttl值,具有相同值的數(shù)據(jù)包被認為是合法的;
步驟3:服務器僅對上述合法數(shù)據(jù)包發(fā)送響應,丟棄不匹配的其他數(shù)據(jù)包。
本發(fā)明采用以上技術方案與現(xiàn)有技術相比,具有以下技術效果:
通過分析發(fā)生dns放大攻擊時的特征并選取合理的多種特征:單位時間請求數(shù)、請求流量與響應流量的關系以及源ip熵值,以單位時間內(nèi)的數(shù)據(jù)量作為計算項,通過聚類分析,判斷是否發(fā)生攻擊;并通過hop-count信息,過濾流向受害者的攻擊流量,能夠有效檢測出dns放大攻擊,具有準確度高,實時性強的特點;且通過hop計數(shù),能夠有效地過濾非法流量,降低受害者的受損程度。
附圖說明
圖1是本發(fā)明中用于體現(xiàn)dns放大攻擊的原理圖;
圖2是本發(fā)明的具體流程圖;
圖3是本發(fā)明用于體現(xiàn)正常流量列表的示意圖;
圖4是本發(fā)明用于體現(xiàn)攻擊流量列表的示意圖;
圖5是本發(fā)明用于體現(xiàn)三種算法對比的示意圖;
圖6是本發(fā)明用于體現(xiàn)hop計數(shù)列表的示意圖。
具體實施方式
以下結(jié)合附圖對本發(fā)明作進一步詳細說明。
首先,如圖2所示,本發(fā)明提出一種dns放大攻擊的檢測與過濾方法,包括以下步驟:
檢測:選取并分析發(fā)生dns放大攻擊時的特征,以單位時間內(nèi)的數(shù)據(jù)量作為計算項,通過k-means++算法進行聚類分析,判斷是否發(fā)生攻擊;
過濾:如果檢測步驟中判斷發(fā)生攻擊,通過hop-count信息,過濾流向受害者的攻擊流量。
其中檢測步驟中,分析后選取的特征包括有請求速率、信息增益比和源ip熵,為了能夠更好的反應正常流和攻擊流的差異性,在特征的選取上,我們需要選擇正常流與攻擊流之間差異較為明顯的特征,根據(jù)上文的分析,我們選擇了以下三種特征作為判斷依據(jù):
1.請求速率(單位時間的請求數(shù))
如圖1所示,在dns放大攻擊中,攻擊者利用僵尸電腦在特定時間向被用作放大器的dns服務器發(fā)送大量請求,因此,作為梯階使用的dns服務器在單位時間內(nèi)將會收到比平常情況多的請求。所以我們認為,請求速率的大幅度增加可以作為重要特征之一。
2.信息增益比(響應流量/請求流量)
根據(jù)上述的多次查詢,一次單位時間內(nèi)的數(shù)據(jù)量(以字節(jié)計)也在攻擊期間大大增加。從與僵尸電腦發(fā)送的請求對應的響應包非常大的基本事實,可以使用從請求到響應的數(shù)據(jù)流量的擴展比率來檢測dns放大攻擊。
3.源ip熵
根據(jù)我們的研究發(fā)現(xiàn),只有上述兩種特征還不夠。因為,在高速互聯(lián)網(wǎng)的時代,會出現(xiàn)大量正常用戶發(fā)送的合法請求,導致一段時間內(nèi)的請求速率和信息增益比高于正常值,即,如果僅僅以上述兩個特性作為判斷依據(jù),會導致對正常用戶的誤判。
為了更加準確的檢測出攻擊行為、區(qū)分正常擁塞,我們引入源ip信息熵:對于攻擊者而言,為了達到攻擊效果,會設定源ip為受害者ip地址,從而導致單位時間內(nèi)ip會重復出現(xiàn),所以此時的ip熵值會很高;而對于正常流量而言,其請求所對應的響應流量的目標ip是分散的,不同的,即單位時間內(nèi)的ip熵值會低于前者。
因此,為了更直觀高效的展現(xiàn)源ip熵值的變化,以及對后續(xù)研究的幫助,我們引入滑動窗口機制(采用固定大小的滑動窗口,在此窗口里面計算每個ip出現(xiàn)的頻率):
1.將源ip地址信息放入滑動窗口中,每個窗口的最大容量設置為n。
2.計算窗口中的每個ip出現(xiàn)的概率,即p={pi,i=1,2,…,m},其中m為當前窗口中不同ip的總數(shù)(1≤m≤n),然后根據(jù)熵值公式計算窗口內(nèi)ip地址的熵值。
熵值計算公式:
3.將當前窗口中的第一項取出,并記錄此ip在滑動窗口中出現(xiàn)的次數(shù)以及相應的概率p1;
4.由步驟3所述,移除滑動窗口中的第一項后,同時將窗口后移一項,即第n+1項進入窗口中;此時,重新計算p1,也就是此前移除的那一個ip在當前滑動窗口中的概率,即p1=p1+1/n;同時,計算出移入項的ip的概率,如果移入的ip在上一個窗口中出現(xiàn)過,假設其概率是pj(1≤j≤m),則更新pj的值,pj=pj+1/n;反之,則計算此ip的概率,pi+1=1/n;
5.根據(jù)上述步驟,對于每一個窗口都能計算出其內(nèi)的當前ip熵值。那么,就可以得到一系列的熵值,即熵值序列
h={hi,i=1,2,…,t},t表示滑動窗口總數(shù)。
分析發(fā)生dns放大攻擊時的特征包括以下步驟:
步驟1:設置時間間隔t;
步驟2:計算t時間間隔內(nèi)的請求速率f;
步驟2.1:定義request_all為t時間間隔內(nèi)的總請求數(shù);
步驟2.2:求出t時間間隔內(nèi)的請求速率為:
步驟3:計算t時間間隔內(nèi)的信息增益比g;
步驟3.1:定義response_tra為t時間間隔內(nèi)的響應流量的總大??;
步驟3.2:定義request_tra為t時間間隔內(nèi)的請求流量的總大小;
步驟3.3:求出t時間間隔內(nèi)的信息增益比:
步驟4:計算t時間間隔內(nèi)的源ip熵值;
步驟4.1:對源ip序列引入滑動窗口機制,取窗口大小為m;
步驟4.2:計算窗口內(nèi)每個源ip概率,記為p={pi,i=1,2,…,l};利用公式1計算窗口中源ip的熵值;
步驟4.3:取出當前窗口第一個源ip出現(xiàn)的次數(shù)以及概率p1;
步驟4.4:步驟4.4:滑動窗口后移一項,即:將原窗口第一項移除,將原第m+1項移入窗口,重新計算p1;同時計算新移入的源ip的概率;
步驟4.5:根據(jù)以上步驟,對每個滑動窗口均可計算當前窗口內(nèi)的源ip熵值,以得到一系列熵值,記為:{hi,i=1,2,…,t},t表示滑動窗口總數(shù)。
其中檢測步驟中,通過k-means++算法進行聚類分析包括以下步驟:
步驟1:基于求得的特征,對于每一個新數(shù)據(jù),利用k-means++算法進行聚類分析,判斷其屬于正常類還是攻擊類,從而判斷是否發(fā)生ddos放大攻擊;
步驟1.1:提取上述特征作為樣本,用于訓練;
步驟1.2:利用k-means++算法對上述樣本進行聚類;
步驟1.3:由于訓練集中的數(shù)據(jù)都是正常狀態(tài)下的數(shù)據(jù),相似性較高,而在dns放大攻擊中,流量特征會發(fā)生突變,檢測樣本和訓練集中的樣本相似性低,通過聚類可判斷是否發(fā)生攻擊;
步驟1.4:獲取待檢測樣本點yi;
步驟1.5:計算此樣本點與k個聚類中心的距離,求得最小距離min_dis,則此樣本暫屬于該簇;
步驟1.6:計算此聚類中各樣本與yi的距離,求得最大距離max_dis,若max_dis超過閾值,則判定為發(fā)生攻擊;相反,則說明未發(fā)生攻擊,將樣本加入正常簇,調(diào)整聚類中心。
k-means(k均值)算法是一種經(jīng)典的基于距離的聚類算法,運用了迭代的思想,通過預先設定的k值及每個類別的初始質(zhì)心對相似的數(shù)據(jù)點進行劃分,并通過劃分后的均值迭代優(yōu)化獲得最優(yōu)的聚類結(jié)果。其處理過程如下:
1.從n個數(shù)據(jù)點中隨機選擇k個點作為初始聚類中心;
2.通過每一個聚類點的均值(中心點),計算每一個點到這些中心點的距離;并根據(jù)最短的距離重新對相應數(shù)據(jù)點進行劃分;
3.重新計算每個(有變化)聚類的均值(中心點);
4.重復執(zhí)行2,3兩個步驟,直到每個聚類不再發(fā)生變化。
該算法的優(yōu)點在于:算法本身確定的k個劃分達到平方誤差最??;當聚類是密集的,且類與類之間區(qū)別明顯的時候,效果較好;對于處理大數(shù)據(jù)集,該算法是相對可伸縮和高效的。但是,由于最開始的k個聚類中心的選擇好壞會影響到聚類結(jié)果,且該算法對噪聲和離群點很敏感,所以為了提高算法本身的健壯性,我們引入了k-means++算法。
k-means++算法的主要工作在于優(yōu)化上述問題,即k個初始聚類中心點的選擇。其基本原則是使得各個中心點之間的距離盡可能的大,同時還要排除噪聲的影響。其基本流程如下:
1.從輸入的數(shù)據(jù)對象集合里隨機選擇一個對象作為第一個聚類中心;
2.對于數(shù)據(jù)集中的每一個對象p,計算其與最近的聚類中心(已經(jīng)選擇的聚類中心)的距離d(p)并保存在一個數(shù)組里,然后將這些距離求和得到sum(d(p));
3.再隨機選取一個值,用權重的方式來計算出下一個聚類中心。其思想是:先選一個能落在sum(d(p))中的隨機值r,然后r=r-d(p),直到r<=0,此時對應的對象就是下一個聚類中心點;
4.重復2,3步驟,直到k個聚類中心被選擇出來;
5.利用這k個初始聚類中心,繼續(xù)運行標準的k-means算法。
為了減輕受害者的受損程度,在上述檢測出dns放大攻擊之后,我們需要對攻擊流量進行過濾。即,當我們確認受害者的ip之后,必須區(qū)分對于受害者ip的實際請求和攻擊者發(fā)出的欺騙請求。我們的方法是采用hop計數(shù),即ip數(shù)據(jù)包到達目的地的跳數(shù):
其中過濾包括以下步驟:
步驟1:根據(jù)檢測步驟的結(jié)果確定受害者ip;
步驟2:由于攻擊者可以偽造ip報頭中的任何字段,除了生存時間(ttl)字段,也就是我們所述的hop計數(shù),因為這完全是由internet路由基礎設施決定的,所以可以以此屬性作為過濾依據(jù),統(tǒng)計此ip所有數(shù)據(jù)包的ttl值,具有相同值的數(shù)據(jù)包被認為是合法的;
步驟3:計算受害者ip的所有的hop計數(shù),具有相同hop數(shù)的數(shù)據(jù)包被認為是合法的,服務器僅對上述合法數(shù)據(jù)包發(fā)送響應,丟棄不匹配的其他數(shù)據(jù)包。
為了驗證本發(fā)明所提出的方法的有效性,本節(jié)對k-means++算法進行仿真實驗。實驗運行在一個100mbps的共享局域網(wǎng)下,操作系統(tǒng)為win2003,內(nèi)存4gb。選擇bp(backpropagation)算法、knn(k-nearestneighbor)最近鄰算法2種主流檢測方法,與k-means++算法進行dns放大攻擊檢測對比實驗,以驗證k-means++算法的檢測性能。
步驟1:實驗環(huán)境搭建:在win2003下搭建dns服務器,并在dns服務器上創(chuàng)建一個異常(超大)的txt記錄:
步驟1.1:創(chuàng)建一個123test.com域;
步驟1.2:在123test.com域下面新建一個主機,記錄類型為a,記錄名稱為www,設置ip為10.61.1.176;
步驟1.3:在123test.com域下新建資源記錄,記錄類型為txt,記錄名稱為www,設置文件為任意字符串,最大為4000字節(jié)。
步驟2:實驗設計與實現(xiàn):為驗證k-means++算法對dns放大攻擊的檢測性能,將整個實驗過程分兩個部分,第一部分是實驗數(shù)據(jù)處理;第二部分是實驗驗證。實驗設計思路如下:
步驟2.1:實驗數(shù)據(jù)預處理:從shumon在他的博客中發(fā)表的數(shù)據(jù)集(正常數(shù)據(jù)集),提取用戶行為特征;隨機提取特征數(shù)據(jù)集的2/3作為訓練數(shù)據(jù)集dataset_train;隨機提取特征數(shù)據(jù)集的1/3作為測試數(shù)據(jù)集dataset_normal_test。(特征樣本如圖3所示)
步驟2.2:攻擊實現(xiàn):本發(fā)明使用pythonscapy模擬dns放大攻擊。scapy是一個可以讓用戶發(fā)送、偵聽和解析并偽裝網(wǎng)絡報文的python程序;這些功能可以用于制作偵測、掃描和攻擊網(wǎng)絡的工具。其攻擊腳本如下:
udp是面向無連接的,可以實現(xiàn)反射的效果,偽造源ip為受害者的ip地址10.61.1.156;dns服務器的端口是53,所以在udp層將目的端口設置為53;查詢域名www.123test.com,查詢類型為txt;
步驟2-3:采用python腳本,模擬dns放大攻擊,獲取攻擊數(shù)據(jù)。實驗限定總持續(xù)攻擊時間為10min,共產(chǎn)生有效記錄數(shù)1萬多條,從中隨機選出3000條記錄數(shù)作為攻擊測試數(shù)據(jù)集data_attack_test。(特征樣本如圖4所示)
步驟2-4:對比實驗:對k-means++和bp、knn兩種主流檢測方法進行dns放大攻擊的檢測性能對比試驗。
步驟3:驗證實驗與結(jié)果
步驟3.1:基于提取的訓練數(shù)據(jù)集dataset_train,利用本發(fā)明提出的k-means++算法進行建模;
步驟3.2:將測試數(shù)據(jù)集dataset_normal_test與攻擊測試數(shù)據(jù)集data_attack_test混合得到5組實驗的待測流fi(i=1,2,…,5);
步驟3.3:為驗證本發(fā)明方法的有效性,將此方法與常用的bp算法和knn算法進行比較;圖5給出了3種方法對5組數(shù)據(jù)的檢測結(jié)果
步驟3.4:提取受害者ip,利用hop計數(shù)(如圖6所示),過濾非法流量。
其中,設tp為被正確標記的正常樣本數(shù),fp為被錯誤標記的正常樣本數(shù),tn為被正確標記的攻擊樣本數(shù),fn為被錯誤標記的攻擊樣本數(shù);那么
檢測率:dr=tn/(tn+fn),
誤報率:fr=fp/(tp+fp),
總錯誤率:er=fn+fp/(tp+fp+tn+fn)。
步驟3.5:從圖5可以看出,在5組檢測實驗中,本文方法的平均檢測率為98.8%,平均誤報率為0.50%,平均錯誤率為0.88%;相比其他兩種方法,本發(fā)明的方法能更準確、高效的識別dns放大攻擊且能夠過濾攻擊流量。
本具體實施例僅僅是對本發(fā)明的解釋,其并不是對本發(fā)明的限制,本領域技術人員在閱讀完本說明書后可以根據(jù)需要對本實施例做出沒有創(chuàng)造性貢獻的修改,但只要在本發(fā)明的權利要求范圍內(nèi)都受到專利法的保護。