王 凱, 陳立云, 王增光
(1. 陸軍工程大學石家莊校區(qū)裝備模擬訓練中心, 河北 石家莊 050003;2. 陸軍工程大學石家莊校區(qū)裝備指揮與管理系, 河北 石家莊 050003)
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展和個人隱私保護意識的增強,HTTP協(xié)議明文傳輸帶來的安全性問題日益突出,由于HTTPS協(xié)議具有良好的兼容性,現(xiàn)有的Web應(yīng)用可無縫地從HTTP遷移到HTTPS[1],越來越多的網(wǎng)站拋棄不安全的HTTP協(xié)議,轉(zhuǎn)而采用基于SSL/TLS(Secure Socket Layer/Transport Layer Security)加密的HTTPS協(xié)議來保護用戶隱私和信息安全。然而,在保護用戶信息安全的同時,加密技術(shù)的應(yīng)用使得網(wǎng)絡(luò)的可視性降低,給網(wǎng)絡(luò)管理、流量分析和網(wǎng)絡(luò)預測帶來挑戰(zhàn)。尤其是軍事信息網(wǎng)絡(luò)對安全性要求極高,大多數(shù)通信流量經(jīng)加密后進行傳輸[2],普通檢測技術(shù)難以判斷數(shù)據(jù)的合法性與安全性,采用加密通道傳輸非法數(shù)據(jù)將會帶來巨大的安全威脅。因此,對加密流量進行監(jiān)管與審查具有重要意義。
雖然加密機制能夠隱藏客戶端和服務(wù)器之間的傳輸內(nèi)容,但不能有效隱藏數(shù)據(jù)包的大小、時序和方向等信息,網(wǎng)站指紋(Website Fingerprinting,WF)攻擊可以利用這些信息猜測客戶端所訪問的網(wǎng)站[3]。基于WF攻擊的加密流量分析技術(shù)通過竊聽用戶訪問網(wǎng)站時產(chǎn)生的數(shù)據(jù)包序列,能夠根據(jù)其特征猜測用戶訪問網(wǎng)站的內(nèi)容,對加密流量的合法性與安全性進行分析。WF攻擊問題通??梢远x為有監(jiān)督多分類問題,目的是訓練一個多分類學習模型預測輸入數(shù)據(jù)序列的類別[4]。目前,大多數(shù)研究者將WF攻擊看作是對網(wǎng)站主頁的攻擊,實際上一個網(wǎng)站還包括大量的子頁面[5],對網(wǎng)站子頁面的精細化指紋攻擊與識別技術(shù)是當前研究的一個重要方向[1]。HINTZ[6]在2002年最先提出指紋攻擊的概念,并針對加密代理SafeWeb,利用數(shù)據(jù)包長度特征在小規(guī)模實驗下驗證了指紋攻擊的有效性,提出了防止指紋攻擊的措施,如添加噪聲、減少數(shù)據(jù)包傳輸數(shù)量和在同一個連接中傳輸數(shù)據(jù)包等;KIM等[7]提出了一種利用SSL/TLS報文頭部的SessionID和服務(wù)器IP地址特征進行服務(wù)識別的方法,將服務(wù)識別分為SSL/TLS流量檢測、基于簽名的流量識別和基于ID-IP的服務(wù)識別3級過程,采用該方法進行了實驗,其對SSL/TLS加密流量分類的準確率達到了95%,對SSL/TLS加密服務(wù)識別的準確率達到了90%;HUSK等[8]將SSL/TLS協(xié)議握手過程中的ClientHello報文包含的密碼套件列表作為指紋,建立了SSL/TLS密碼套件列表和HTTP的User-Agent關(guān)系字典,利用該方法在實時網(wǎng)絡(luò)環(huán)境下進行了實驗,其對網(wǎng)絡(luò)客戶端的識別率達到了95.4%。
上述方法利用不同特征對加密流量進行指紋攻擊,取得了一定的效果,但由于互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,在當前廣泛應(yīng)用內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Distribute Network,CDN)技術(shù)分發(fā)資源的情況下,這些方法存在較大的局限性:1)由于CDN站點的資源來自多個不同的服務(wù)器,因此難以建立準確的ID-IP與服務(wù)的對應(yīng)關(guān)系;2)采用密碼套件列表作為指紋的攻擊方法受軟件環(huán)境的影響較大,不具有普適性,因為不同的軟件環(huán)境支持的密碼套件中加密方法不同,不同的操作系統(tǒng)、瀏覽器甚至相同瀏覽器的不同版本支持的密碼套件中加密方法也不同。為更好地對HTTPS加密流量實施監(jiān)管與審查,筆者提出一種在CDN分發(fā)資源情況下利用域名系統(tǒng)(Domain Name System,DNS)查詢序列作為頁面指紋的WF攻擊方法,該方法利用HTTPS加密協(xié)議未對DNS查詢信息進行加密的特點,建立DNS查詢過程與網(wǎng)站頁面之間的關(guān)系,對用戶訪問頁面進行WF攻擊,實現(xiàn)針對HTTPS協(xié)議網(wǎng)站的精細化指紋攻擊。
WF攻擊的基礎(chǔ)是建立有效的網(wǎng)站指紋,用于識別特定網(wǎng)站頁面。HTTPS協(xié)議與SSH(Secure Shell)、Tor(The onion router)等加密協(xié)議的不同在于:HTTPS協(xié)議基于SSL/TLS加密算法對數(shù)據(jù)進行加密,其僅加密實際負載部分,對其他數(shù)據(jù)包不加密。當用戶使用HTTPS加密協(xié)議訪問網(wǎng)絡(luò)時,產(chǎn)生的DNS數(shù)據(jù)包未被加密,其中可泄露出用戶訪問網(wǎng)站的相關(guān)信息。對于非CDN加速站點,DNS查詢僅返回服務(wù)器IP地址,但在CDN環(huán)境中單一頁面產(chǎn)生大量DNS請求,這是網(wǎng)站及其子頁面的重要特征,可作為頁面指紋。
瀏覽器處理網(wǎng)頁的方式對網(wǎng)絡(luò)中的DNS數(shù)據(jù)報文具有直接的影響,當用戶請求訪問網(wǎng)站某個頁面時,瀏覽器對返回的HTML文件進行解析、渲染后成為可視化的頁面。瀏覽器渲染頁面的步驟如下[9]:
1) 處理HTML標記并構(gòu)建文檔對象模型(Document Object Model,DOM)樹;
2) 處理CSS標記并構(gòu)建CSSOM(CSS Object Model)樹;
3) 將DOM與CSSOM合并成一個渲染樹(Render-Tree);
4) 根據(jù)渲染樹進行布局,并計算每個節(jié)點的幾何信息;
5) 將各個節(jié)點繪制到屏幕上。
在步驟1)中瀏覽器構(gòu)建的DOM樹結(jié)構(gòu)如圖1所示,該DOM樹描述了整個頁面的結(jié)構(gòu),頁面結(jié)構(gòu)不同,其資源加載順序也不同。
在步驟4)中,瀏覽器遍歷渲染樹以布局頁面,當遍歷遇到阻塞渲染的資源時(如DOM樹中的link、img、具有src屬性的script等),暫停遍歷請求加載資源,此時產(chǎn)生新的網(wǎng)絡(luò)請求。
隨著大量實時性要求高的互聯(lián)網(wǎng)的應(yīng)用和提升用戶訪問體驗的需要,CDN技術(shù)被廣泛應(yīng)用,利用CDN分發(fā)站點的通常做法是:把站點所需的資源存放在不同地理位置的CDN緩存服務(wù)器,用戶訪問網(wǎng)頁時從多個服務(wù)器加載資源,以提高訪問速度、優(yōu)化用戶體驗。CDN流媒體服務(wù)利用DNS將用戶重定向到一個就近的鏡像服務(wù)器上,獲得高帶寬、低延遲等性能,為用戶提供優(yōu)質(zhì)的媒體服務(wù)[10]。DNS重定向過程如圖2所示,具體如下:
1) 客戶端向公共DNS服務(wù)器請求解析目標域名,公共DNS服務(wù)器返回CNAME記錄;
2) 客戶端再次請求解析CNAME域名,由全局CDN中域名解析服務(wù)器解析并返回離用戶地理位置最近、負載最輕的鏡像服務(wù)器IP地址;
3) 客戶端向鏡像服務(wù)器請求數(shù)據(jù)。
當用戶訪問使用CDN分發(fā)資源的站點頁面時,瀏覽器渲染頁面并請求加載新的網(wǎng)絡(luò)資源,這一過程中會按照請求資源的順序產(chǎn)生大量DNS請求,由此構(gòu)成DNS查詢序列,如圖3所示。
通常網(wǎng)站頁面結(jié)構(gòu)相對固定,僅內(nèi)容發(fā)生變化,每個頁面所需的資源在一段時間內(nèi)不發(fā)生變化,且CDN服務(wù)器在一定的時間內(nèi)具有緩存,因此每個頁面具有相對穩(wěn)定的DNS查詢序列,故可將客戶端訪問頁面過程中產(chǎn)生的DNS查詢序列作為頁面指紋,可記為
S=(d1,d2,…,dn),
(1)
式中:di(i=1,2,…,n)為第i個DNS查詢請求;n為單個頁面DNS查詢總數(shù)。
網(wǎng)站頁面的DNS查詢序列雖然相對穩(wěn)定,但往往因操作系統(tǒng)內(nèi)多個軟件同時運行而產(chǎn)生其他DNS請求,形成噪聲信息;網(wǎng)絡(luò)速度差異和瀏覽器內(nèi)核對頁面渲染方式的差異均會造成DNS請求數(shù)據(jù)包亂序;廣泛存在于網(wǎng)絡(luò)中的各級緩存造成的數(shù)據(jù)包缺失等對指紋的精確性也有一定的影響。
1.3.1 噪聲
客戶端上往往有多個應(yīng)用同時運行,不斷發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包,非Web訪問的應(yīng)用在連接服務(wù)器交換數(shù)據(jù)時也產(chǎn)生DNS查詢報文,相對于頁面指紋,其屬于噪聲信息,可記為
S1=(d1,d2,…,v,…,dn),
(2)
式中:v為噪聲DNS查詢請求。
1.3.2 DNS數(shù)據(jù)包亂序
筆者將DNS查詢序列作為頁面指紋,即上行DNS數(shù)據(jù)包,由于不同瀏覽器內(nèi)核對頁面的渲染和資源加載的處理方式不同,導致資源請求數(shù)據(jù)包的發(fā)送順序不同,造成DNS查詢數(shù)據(jù)包亂序,可記為
S2=(d1,d2,…,dt+1,dt,…,dn),
(3)
式中:dt+1與dt為亂序DNS查詢請求。
1.3.3 DNS緩存影響
DNS緩存廣泛存在于瀏覽器、系統(tǒng)、ISP服務(wù)器等,其緩存時間對DNS請求均有一定影響。TTL(Time To Live)是影響DNS緩存時間的重要因素,在CDN中通常對DNS響應(yīng)設(shè)置較小的TTL,用以實現(xiàn)負載均衡[11]。由于緩存的影響,部分DNS解析不向DNS服務(wù)器發(fā)送查詢請求,造成DNS查詢序列缺失,可記為
S3=(d1,d2,…,dt-1,dt+1,…,dn),
(4)
其中,dt為因緩存影響而缺失的DNS查詢請求。
經(jīng)實驗驗證,在以DNS查詢序列為指紋的網(wǎng)站指紋攻擊中,常用的最小編輯距離[12]、樸素貝葉斯分類器[13]和最長公共子串[14]等指紋識別算法均不能達到有效識別的程度。因此,筆者采用支持向量機(Support Vector Machine,SVM)模型對頁面進行精細化識別。
向量化是數(shù)據(jù)處理的基礎(chǔ)工作,筆者使用詞袋(Bag of Words,BoW)模型對DNS查詢序列進行向量化,首先在詞袋模型中構(gòu)建一對一映射的詞表D,對于數(shù)據(jù)集中所有DNS查詢請求dj,不重復加入詞表,則
D={(j,dj)},j=1,2,…,N,
(5)
式中:j為詞表中dj的序號;N為詞表D中詞條的總數(shù)。
將DNS查詢序列作為頁面指紋,對其進行向量化,具體步驟如下:1)遍歷頁面指紋s中的DNS查詢請求di;2)在詞表D中查找與di相同的DNS查詢請求dj;3)獲取dj在詞表D中的序號j;4)將j追加到頁面指紋向量
x=(j1,j2,…,jn)。
(6)
這樣,DNS查詢序列指紋就被映射到一個n維空間,構(gòu)成DNS查詢序列的頁面指紋向量。
SVM是一種廣泛應(yīng)用于統(tǒng)計學習和分類的監(jiān)督式學習方法,針對高維數(shù)據(jù)具有很好的學習效果。SVM的基本模型是定義在特征空間上的間隔最大的線性分類器。設(shè)指紋數(shù)據(jù)集
T={(x1,y1),(x2,y2),…,(xn,yn)},
(7)
式中:xi為頁面指紋向量;yi為xi的類別標記,yi∈ψ,其中ψ為所有頁面的類別空間。
根據(jù)T的非線性特性,分類決策函數(shù)可表示為
(8)
(9)
則式(8)可改寫為
(10)
式中:γ=1/(2σ2)>0,表示數(shù)據(jù)集中單個樣本對分割目標空間的超平面的影響程度。
在實際應(yīng)用中,SVM模型通常引入懲罰系數(shù)C以防止過擬合,C和γ對模型性能起關(guān)鍵作用,一般采用網(wǎng)格搜索法進行參數(shù)調(diào)節(jié),以取得最優(yōu)結(jié)果。
在指紋攻擊的相關(guān)研究[12,14]中,大多數(shù)采用準確率作為指紋攻擊效果評價指標。然而,這種單一評價指標難以滿足對攻擊方法的全面評價要求,因此,本文采用準確率和F-1分數(shù)2個評價指標評價WF攻擊方法的性能。
在本文的方法中,將每個頁面的類別預測看作一個二分類問題,預測結(jié)果分為真正例(True Positive,TP)、假正例(False Positive,F(xiàn)P)、真反例(True Negative,TN)和假反例(False Negative,FN)4類。
2.3.1 準確率
準確率A是評價攻擊性能的重要指標,反映模型預測正確數(shù)量在總體樣本中的比例,其定義為
(11)
2.3.2 F-1分數(shù)
查準率P和查全率R是反映識別效果的基本指標,分別定義為
P=PT/(PT+PF),
(12)
R=PT/(PT+NF),
(13)
式中:PT、PF、NF分別為真正例、假正例、假反例數(shù)量。
F-1分數(shù)為結(jié)合查準率和查全率得到的綜合指標,定義為
F1=2PR/(P+R),
(14)
F-1分數(shù)越高,表明算法對頁面的精細化識別效果越好。
為了評估本文提出的指紋攻擊方法,根據(jù)圖4所示的流量采集模型部署實驗,在互聯(lián)網(wǎng)環(huán)境下進行數(shù)據(jù)采集。
實驗采用編寫的Python程序收集網(wǎng)絡(luò)請求過程中的DNS數(shù)據(jù),程序分為監(jiān)聽和訪問2個線程,其中:監(jiān)聽線程使用Scapy模擬攻擊者監(jiān)聽網(wǎng)卡流量;訪問線程從列表中隨機訪問加密站點,鑒于部分站點利用異步加載技術(shù),請求采用Selenium和Phantomjs瀏覽器的方案對頁面進行訪問,模擬用戶使用瀏覽器加載完整頁面資源,且關(guān)閉Phantomjs瀏覽器的緩存功能。
實驗利用國內(nèi)外2臺云服務(wù)器,配置同為CPU 1核1 GB,內(nèi)存1 GB,Ubuntu16.04 x64系統(tǒng)。在1個月的時間內(nèi),連續(xù)隨機訪問用HTTPS加密的50個站點下的200個二級頁面,將捕獲的pcap網(wǎng)絡(luò)數(shù)據(jù)包文件標記頁面編號和訪問時間,構(gòu)成原始數(shù)據(jù)集,數(shù)據(jù)集中單個頁面訪問次數(shù)在150~1 100次,去除訪問失敗和訪問超時未抓取到DNS數(shù)據(jù)的0字節(jié)數(shù)據(jù)包文件,利用Python中的dpkt模塊解析pcap文件,提取每個頁面的DNS查詢序列,經(jīng)清洗后構(gòu)成本實驗所用的數(shù)據(jù)集,共有數(shù)據(jù)53 343條。數(shù)據(jù)集描述如表1所示。
表1 數(shù)據(jù)集描述
由于網(wǎng)格搜索的計算復雜度極高,本文中采用2段調(diào)節(jié)的方法:第1段調(diào)節(jié)過程在小范圍內(nèi)確定參數(shù)C或γ的最優(yōu)值;第2段固定其中一個參數(shù),對另一個參數(shù)進行大范圍搜索。
在第1段調(diào)節(jié)過程中,參數(shù)γ的最優(yōu)值確定結(jié)果如圖5所示,可以看出:γ=0.2時準確率最高。故在第2段調(diào)節(jié)過程中固定γ=0.2,對參數(shù)C進行大規(guī)模搜索以確定最優(yōu)準確率,結(jié)果如圖6所示,可以看出:隨著C的增大,準確率不斷提高,當lgC=4,即C=104時準確率最高,且繼續(xù)增大lgC,準確率趨于穩(wěn)定。因此,在實驗中設(shè)定參數(shù)γ=0.2,C=104。
針對采集到的數(shù)據(jù)集,筆者分別測試了在不同訓練集樣本數(shù)量下,基于SVM的頁面指紋識別算法和樸素貝葉斯算法對頁面精細化識別的準確率,結(jié)果分別如圖7、8所示??梢钥闯觯弘S著訓練集樣本數(shù)量的增加,基于SVM的頁面指紋識別算法的預測準確率最高達到93%,且在訓練集上自測的訓練分數(shù)穩(wěn)定,具有良好的性能;而樸素貝葉斯算法的預測準確率最高為51%。圖中線條陰影是在訓練集和測試集交叉驗證的準確率范圍,可以看出:基于SVM的頁面指紋識別算法在交叉驗證中準確率穩(wěn)定,幾乎沒有陰影;而樸素貝葉斯算法陰影明顯,準確率波動較大。
圖9為在不同方法下的F-1分數(shù)對比,可以看出:基于SVM模型的方法所得F-1分數(shù)較高,表明其對頁面精細化識別效果較好;而基于樸素貝葉斯模型的F-1分數(shù)較低,表明其對頁面的精細化識別效果不佳。
針對當前互聯(lián)網(wǎng)中加密流量比例上升給網(wǎng)絡(luò)管理、流量分析和網(wǎng)絡(luò)預測帶來的困難,在詳細分析CDN環(huán)境下DNS解析過程及其影響因素的基礎(chǔ)上,筆者提出了一種針對HTTPS加密協(xié)議的網(wǎng)站精細化指紋攻擊方法。通過在互聯(lián)網(wǎng)環(huán)境下采集的數(shù)據(jù)集進行了驗證,結(jié)果表明:該方法對HTTPS指紋攻擊準確率達到93%,能夠有效精細化識別經(jīng)HTTPS協(xié)議加密頁面,從而對網(wǎng)絡(luò)進行監(jiān)管與審查。
在現(xiàn)有WF攻擊研究中,普遍存在一些實驗限制條件,如關(guān)閉緩存、配置相同客戶端環(huán)境等,雖然這些限制條件具有一定的合理性,但降低了攻擊方法的實用性,如何進一步減少WF攻擊的限制條件,提高WF攻擊的實用性是下一步亟待解決的問題。