倪永峰,閆連山,崔允賀,李賽飛
(西南交通大學 信息科學與技術學院,成都 611756)
作為一種新型網絡架構,軟件定義網絡(Software Defined Network,SDN)將網絡中的控制功能與數據轉發功能相分離,實現了網絡可編程化[1].在該網絡架構中,控制功能邏輯性地集中在控制器中,其負責計算路由和下發流表.數據轉發功能由交換機實現,其依據流表對數據報文進行轉發.當前SDN架構中,控制器與交換機之間多采用OpenFlow協議進行通信.OpenFlow協議是一種新型網絡協議,其定義了控制器與SDN交換機之間的通信方式及交換機處理到達報文的規則.基于此協議實現的SDN網絡能夠對其內的網絡設備進行集中管理[2].自2009年提出第一版本至今,OpenFlow協議已有5個版本,其中1.3版本的OpenFlow協議是當前使用最廣泛的南向接口協議之一.SDN架構使得控制器具備全局可見性,因此其能夠精細化地對流量進行調度.基于此優勢,目前SDN已成功應用于眾多數據中心[3,4].
高級持續性威脅(Advanced Persistent Threat,APT)是一種新型網絡攻擊,其比傳統攻擊手段更具威脅性和破壞性[5].APT攻擊持續時間通常可達數月甚至數年,所使用的技術較傳統攻擊手段更為復雜,同時較高的時間和金錢消耗決定了APT攻擊通常用于企業、軍工等重要目標.因此美國將APT攻擊納為網絡戰的范疇,并成立了專門的網絡部隊以應對和發起APT 攻擊.自 2010 年 Google 遭受“極光”攻擊以來,高級持續性威脅便引起網絡安全界的廣泛關注.經過長期研究,眾多研究者通常將APT攻擊分為攻擊準備、橫向攻擊、資料回傳、退出四個階段.2011年Tankard等人總結出了APT攻擊的流程,其中詳細敘述了APT攻擊中常用的水坑攻擊以及端口掃描等攻擊手段,并建議采用日志分析、文件完整度檢查、注冊監控以及惡意病毒檢測等技術檢測APT攻擊[6].Li等人總結了各攻擊階段常用的攻擊手段:APT進入階段通常使用水坑攻擊實現,潛伏階段多使用遠程控制、橫向移動、獲取特權、隱蔽通信等手段,退出階段通常包括資料回傳、銷毀數據等步驟[7].Chandra等人研究了APT攻擊開始階段攻擊者常用的社會工程學理論,針對網絡資源虛擬化框架OpenStack制定了縱深防御機制[8].由于APT攻擊具有高隱蔽性,傳統的監測設備不易察覺其行為目的,Stefan Rass等人提出了一種基于博弈論的APT檢測機制,該機制通過分析網絡行為評估網絡的風險性以檢測APT攻擊[9].針對APT攻擊的特點,Ibranhim Ghafir和 Vaclav Prenosil提出了八種檢測方法,分別為惡意附件檢測、惡意域名檢測、C&C隱蔽通信檢測、惡意證書檢測、魚叉攻擊檢測、惡意文件哈希值檢測、域名流量檢測以及匿名網絡TOR檢測[10].
隱蔽通信是指受控主機與攻擊者控制的C&C服務器(Command and Control server)建立的能夠躲避網絡監控的秘密通信,是APT攻擊各個階段必須使用的技術.無論是起初的橫向攻擊或獲取資料后的回傳過程,為避免被網絡中安全設備檢測出異常,攻擊者都必須在受控主機與C&C服務器之間建立隱蔽通信信道.文獻[11]中研究發現常見APT攻擊的隱蔽通信均采用SSL/TLS協議,此類協議是加密協議并且采用證書的方式交換客戶端與服務器使用的密鑰.因此如果能夠檢測網絡中存在的惡意隱蔽通信就可以及時阻止攻擊,避免APT攻擊造成的損失.Fu等人提出了一種區分SSL流量的機制,該機制采用報文長度、報文到達間隔以及流量方向作為特征值,利用C4.5機器學習算法對SSL流量進行分類[12].Ibranhim Ghafir等人利用開源架構Intelligence Framework[13]提出了一種SSL證書檢測機制,首先從互聯網中獲取IF架構證書黑名單并建立本地黑名單列表,當有SSL流量時提取其中的服務器證書信息,然后判斷此服務器證書是否在本地黑名單中,若不在本地黑名單中SSL報文才可通過[14].該方法依賴IF架構中的黑名單,同時需要及時更新黑名單信息.Cao等人提出了一種兩步檢測方法,該方法首先檢測SSL/TLS服務器可信度,然后提取證書信息對證書包含的信息進行評價,最后得到證書的安全等級[11].
為增強 SDN抵抗APT攻擊的能力,本文對APT攻擊的關鍵步驟-隱蔽通信-進行了分析及研究,基于此,本文提出了一種高效的隱蔽通信檢測機制.該機制利用SDN的特性便捷地抓取SSL/TLS流量,并從中提取證書信息,然后計算能夠表征證書特征的特征值,并將上述特征值輸入證書可信度檢測模塊以判斷是否存在隱蔽通信.實驗分析及結果表明本文的隱蔽通信檢測方案可以準確區分正常證書和惡意證書,進而檢測出SDN網絡中的隱蔽通信.
當前SDN通常采用OpenFlow協議作為南向接口協議.OpenFlow協議規定,當交換機收到新到達的報文時,其按照流表優先級依次匹配其內流表中的MATCH域.如圖1所示,MATCH域包含網絡層協議、運輸層協議以及運輸層協議端口等匹配項.交換機一旦找到能匹配數據報文的流表,就根據流表ACTION域中的端口將報文轉發出去.流表ACTION域中的端口可以為報文下一跳交換機與當前交換機所連接的端口,也可為控制器與當前交換機連接的端口,即交換機能夠將報文轉發至下一跳交換機或服務器,也能夠將報文轉發至控制器.若交換機不能找到匹配報文的流表,則將此報文上報至控制器,由控制器計算報文在網絡中的轉發路徑,并下發此報文能匹配的流表至交換機.
在SDN架構中,控制器具有全網拓撲可見性,因此其能夠精確控制流量轉發路徑:將大流量從帶寬較大的鏈路轉發,小流量從帶寬較小的鏈路轉發,當流量增大時能夠修改流表將數據從帶寬較小的鏈路轉至帶寬較大的鏈路.采用SDN架構除了可以對流量精確控制之外,還能夠通過部署在交換機上的流表抓取特定類型的報文,而在傳統網絡中獲取特定協議的流量通常需要進行流量的分類識別,因此在有選擇地抓取流量方面SDN架構具有較大的優勢.本文正是利用SDN的這一優勢抓取所需要的報文.

圖1 OpenFlow1.0 流表項結構
為增強網絡抵抗APT攻擊的能力,本文分析了幾種典型的APT攻擊案例,研究發現APT攻擊中隱蔽通信檢測的關鍵在于非法證書檢測.
2009年谷歌遭遇的極光行動是最典型的APT攻擊,在此次攻擊中攻擊者使用了SSL加密通信對受控服務器進行控制.持續時間長達五年的暗鼠行動中,攻擊者使用了遠程命令與控制通信遠程控制受控服務器竊取攻擊機密資料.在APT攻擊火焰病毒與高斯病毒中,攻擊者均采用自簽名證書建立隱蔽.由上述可知,典型的APT攻擊中攻擊者均使用了隱蔽通信,并且為躲避網絡安全設備的監測通常采用SSL協議加密.根據SSL協議,通信雙方傳輸數據之前需協商加密算法以及交換密鑰,這些信息均在數字證書(Server Certificate)中.數字證書包含攻擊者控制的C&C服務器的身份信息,以及C&C服務器密鑰和其支持的加密算法類型.攻擊者為防止自身信息暴露均會采用非法證書.因此若能在隱蔽通信建立階段檢測出攻擊者使用的非法證書,就能檢測出網絡存在的隱蔽通信,從而防止網絡遭受進一步的攻擊.
為獲取隱蔽通信使用的非法證書,需要對建立SSL通信的流程進行研究.SSL通信由受控服務器中的惡意軟件發起,惡意軟件根據其內部機制發起DNS請求,獲取 C&C服務器IP地址,進而建立TCP連接,進入 SSL握手階段.受控服務器發送ClientHello報文,C&C服務器接收ClientHello報文之后,回復帶有數字證書的ServerHello消息,其中數字證書包含C&C服務器的身份信息以及其使用的密鑰,然后受控服務器回復自身的密鑰發送給C&C服務器.最后,受控服務器與C&C服務器采用協商一致的加密算法建立通信信道,握手階段結束.SSL握手階段結束之后,受控服務器與C&C服務器進入正常通信狀態.
綜上所述,采用SSL加密的隱蔽通信在建立通信的握手階段均會使用非法證書,同時由于合法加密通信使用的證書均是由可信機構頒發的合法證書,因此網絡中的合法通信不存在非法證書.因此若能檢測出網絡中的非法證書,就能檢測出網絡中存在的隱蔽通信.本文提出的面向SDN網絡的隱蔽通信檢測機制正是檢測網絡中SSL協議使用的證書是否非法.
如圖2所示,本文假設有M個交換機和N個服務器,其中 CH為受控服務器,AT為 C&C服務器(Command and Control server),DS 為隱蔽通信檢測服務器,Controller為 SDN 控制器.根據 SDN 架構,交換機S={S1,S2,S3,…}均與控制器 Controller連接.
受控服務器CH為攻擊者通過社會工程學獲取到權限的目標網絡內的服務器,其與C&C服務器建立連接并按照指令對目標網絡發起掃描或嗅探以竊取網絡中的資料.C&C服務器AT為攻擊者控制的服務器,攻擊者通過C&C服務器與受控服務器CH進行隱蔽通信,控制CH在目標網絡中的行動,并且接收CH竊取的資料.

圖2 SDN 隱蔽通信檢測架構
如圖2所示,本文提出的面向SDN的隱蔽通信檢測機制(Software-Defined Convert Communication Detection mechanism,SD-CCD)由運行在隱蔽通信檢測服務器DS上的隱蔽通信檢測模塊及運行在控制器上的流量采集模塊及溯源抑制模塊組成.其中,隱蔽通信檢測服務器DS上運行隱蔽通信檢測模塊,該模塊包括證書提取、特征值計算以及隱蔽通信檢測算法.其主要對輸入的SSL流量進行處理,判斷SSL流量是否為非法隱蔽通信.若為非法隱蔽通信,隱蔽通信檢測服務器發送警報事件到控制器Controller,然后由控制器進行處理.
運行在控制器上的流量采集模塊和溯源抑制模塊負責SSL流量的采集及對非法隱蔽通信的溯源和抑制.流量采集模塊利用OpenFlow中的流表將SSL流量導入隱蔽通信檢測模塊DS,溯源抑制模塊對受控服務器發起溯源并抑制其在網絡中的行為.控制器Controller中流量采集模塊基于SDN特性利用OpenFlow流表對網絡中的SSL報文進行采集.雖然現行OpenFlow協議中還沒有針對SSL協議的匹配項,但是SSL協議封裝于TCP協議中且通常使用443端口,因此本文將使用TCP協議并且目的端口與源端口均為443的報文視為SSL報文.當第一個SSL報文由交換機上報至控制器,控制器計算完路由路徑并下發流表時,在流表MATCH域中添加運輸層協議為TCP且源端口和目的端口均為443的匹配項,同時在此流表的ACTION域中添加轉發至隱蔽通信檢測服務器所在的端口,以此就可抓取所需的SSL報文.
在進行APT攻擊時,攻擊者獲取CH權限后,需與AT建立SSL通信,但此時CH所掛載的交換機S3中沒有轉發SSL報文的流表,因此不能轉發CH發出的 ClientHello 報文.根據 OpenFlow 協議,S3將ClientHello報文轉發至控制器Controller,控制器計算出CH到AT的路由路徑并依次下發流表至路徑上的交換機,同時計算出受控服務器CH到隱蔽通信檢測服務器DS的路徑并下發流表至路徑上的交換機,由此就可在不影響正常通信的情況下將SSL流量導入隱蔽通信檢測服務器.
隱蔽通信檢測服務器DS對導入的SSL流量進行提取,得到SSL通信中服務器所使用的證書,然后調用基于iForest的隱蔽通信檢測算法檢測此證書是否異常.若檢測結果為證書異常,即表示當前SSL連接為非法隱蔽通信,則隱蔽通信檢測服務器DS立刻發送SSL連接異常警報事件至SDN控制器Controller.控制器收到隱蔽通信檢測服務器發送的警報后,立刻對當前網絡中與使用非法證書的SSL服務器連接的客戶端進行溯源,并下發流表至異常主機掛載的交換機以阻塞此主機發送的SSL報文,從而達到抑制非法隱蔽通信的目的.
基于iForest的隱蔽通信檢測算法(iFCCD)對SSL報文中提取的服務器證書進行檢測以判斷網絡中是否存在隱蔽通信.其檢測精度受特征值表征證書的準確度影響,因此在調用隱蔽通信檢測算法之前需提取能夠準確表征證書特性的特征值.
在介紹本文提取的證書特征值之前,引入兩個集合[11],分別是最常見通用名集合(the most Frequently Appeared CommonName Set,FAS)和最常見匿名性通用名集合(the most Frequently Appeared Anonymous CommonName Set,FAAS).其中 FAS 是根據統計得到的頻繁使用的通用名集合,FAAS也是相同方法得到,但目前只包含兩個元素,分別為localhost和localdomain.
攻擊者制作隱蔽通信使用的證書時,為保證隱蔽性,通常采用自簽名證書,并且為了避免自身信息暴露,此類證書使用者和頒發者的項通常較少.由于需保持通信的隱蔽性防止被網絡安全設備發現,攻擊者在制作證書時通常會設定較短的證書有效時間.同時攻擊者會采用隨機構成的域名作為證書通用名,以此進一步提高隱蔽性.本文中FAS集合和FAAS集合就是針對證書的域名而建立的,若證書的域名在FAS中說明其屬于網絡中常見的域名,即表示其可信度較高.若證書的域名出現在FAAS中說明其匿名性較強,即表示此證書的安全性較低.
基于上述特點,本文采用了8個特征值來表征證書,如表 1 所示,分別為:(1)是否為自簽名證書;(2)證書使用者包含的項數;(3)證書頒發者包含的項數;(4)證書是否被可信根驗證通過;(5)通用名是否在FAS中;(6)通用名是否在 FAAS 中;(7)使用者通用名是否符合域名格式(CN=xxx.com);(8)證書的有效年份.上述八個特征值是從證書中提取的關鍵信息,能夠表征證書的合法性.

表1 iFCCD 采取的證書特征值
iFCCD算法采用孤立森林算法(isolation Forest algorithm,iForest),iForest是一種基于決策樹的異常檢測算法,其基于數在二叉搜索樹中的深度判斷數據是否異常,具有較高的檢測精度.相對于神經網絡算法,iForest的訓練時間短,達到相同精度的計算時間少.
本文采用的八個參數特征值對應的當前iForest中的評價值計算公式如下[15]:

其中,E(h(x))為特征值x在樹中的平均深度,C為當前森林中數的平均深度,計算公式如下[15]:

隱蔽通信檢測啟動時,從配置文件中讀取已準備好的訓練數據,訓練數據均為從正常證書中提取的相關特征值,孤立森林算法使用這些特征值訓練算法模型.假設某一特征值訓練數據有L組,訓練階段孤立森林有放回的取出G組數據,然后構建K棵決策樹,得到K棵決策樹組成的森林,并根據孤立森林算法計算出當前森林的閾值thresholdi.8個孤立森林分類器均采用上述的訓練流程.孤立森林算法訓練完成之后,隱蔽通信檢測正式進入檢測階段.

算法.iFCCD Input:SSL 流量Output:惡意證書檢測結果1.Begin 2. Get Hello packet in SSL 3. Extract SSL certificate 4. Calculate features of SSL certificate 5. if this certificate is Self-signed certificate then 6. append ‘1’ to eigenvalue matrix 7. else 8. append ‘0’ to eigenvalue matrix 9. end if

10. Append the length of subject to eigenvalue matrix 11. Append the length of Issuer to eigenvalue matrix 12. if the root in certificate is trusty then 13. append ‘1’ to eigenvalue matrix 14. else 15. append ‘0’ to eigenvalue matrix 16. end if 17. if domain name in FAS then 18. append ‘1’ to eigenvalue matrix 19. else 20. append ‘0’ to eigenvalue matrix 21. end if 22. if domain name in FAAS then 23. append ‘1’ to eigenvalue matrix 24. else 25. append ‘0’ to eigenvalue matrix 26. end if 27. if subject’s domain name is belong to normal format 28. then 29. append ‘1’ to eigenvalue matrix 30. else 31. append ‘0’ to eigenvalue matrix 32. end if 33. Append valid time of certificate to eigenvalue matrix 34. Send matrix to iForest 35. if the result of detection is true then 36. send result to controller 37. else 38. goto end 39. end if 40.End
進行檢測時,隱蔽通信檢測算法接收新的證書特征值矩陣,然后調用訓練完成的算法模型判斷此證書特征值是否為異常.當待檢測的特征值矩陣輸入時,各特征值分別送入相應的分類器.在各自的分類器中,每個決策樹返回待測特征值在樹中的層數,然后得到當前特征值在該森林中的評價值Si.在一個分類器中,若特征值評價值小于該分類器閾值,則表示當前數據為異常數據.
在iFCCD中,最后計算分類器的評價值,若該評價值小于閾值則判定當前特征值矩陣為異常,即當前證書為非法證書;否則判定為正常證書,如公式(4)所示:

綜上所述,為準確表征證書特征,iFCCD算法采用八個特征值表征證書信息,同時使用孤立森林作為異常檢測算法,提高非法證書的檢測精度.在訓練階段中,iForest的訓練數據均為正常證書的特征值.在檢測階段中,iFCCD利用已訓練的iForest模型分別對8個特征進行判定,最后綜合判定表征證書信息的八元組矩陣是否異常,以此可判定網絡中是否存在隱蔽通信.
本文采用的數據集有三個:ITOC2009[16]、Contagio Malware Dump(CMD)[17]以及從本地抓取的正常HTTPS證書.訓練數據中有100個證書,其中50個為ITOC數據集中的正常證書,50個為CMD數據集中的正常證書.測試數據有271個證書,其中包括74個CMD數據集中正常的證書,26個本地抓取的正常證書以及171個CMD數據集中的非法證書.首先提取訓練數據集中證書的特征值,然后將訓練證書特征值作為輸入訓練孤立森林算法.在訓練iForest算法模型時,從100組訓練數據中有放回地取出75組數據,構建100棵決策樹.
本文采用文獻[11]中提到的證書可信度計算算法(文獻[11]中將其簡稱為CCD算法)作為對比實驗,其中計算結果小于0時視為證書非常可疑,計算結果大于0小于0.85時視為證書較可疑,大于0.85則認為證書正常.本文使用受試者工作特征曲線(Receiver Operating Characteristic curve,ROC 曲線)衡量iFCCD與CCD兩種算法的檢測精度.
本文對上述提出的檢測算法的實驗驗證過程如下:首先使用訓練數據訓練iForest模型,檢測時將數據集里的證書依次提取出來,獲得其中的證書特征值,然后將證書特征值依次送入訓練好的iForest模型中.在衡量iFCCD與CCD兩種算法精度時,通過動態調整iForest的閾值得到的ROC曲線如圖3所示.
圖3 中,橫坐標為誤檢率,縱坐標為檢測精度,其中實線為本文提出的iFCCD算法得到的檢測結果,虛線為對比算法CCD的檢測結果.從圖中可以看到,iFCCD算法的誤檢率在16%時可以達到100%的檢測精度,而CCD算法要達到100%的檢測精度其誤檢率需達到24%.顯然本文提出的證書檢測算法在提高證書檢測精度的同時能夠降低誤檢率.圖3中,兩種算法的ROC曲線均在誤檢率達到一定值時快速上升,出現上述現象的原因是數據集里的非法證書的特征值基本相似.

圖3 iFCCD 及 CCD 算法 ROC 曲線圖
為進一步說明iFCCD及CCD算法的檢測精度,本節對iFCCD及CCD算法的檢測結果進行了詳細分析.
數據集ITOC2009中出現了大量類似如下格式的非法證書:“Version=3;Issure:C=--;ST=SomeState;Validity:one year;OU=SomeOriganizationalUnit;EMAIL=root@localhost.localdomain;O=SomeOrganization;L=SomeCity;”,對于上述非法證書,CCD算法計算出的可信度為–0.1,CCD算法認定其為非常可疑的證書,既CCD算法能夠成功檢測上述非法證書.
但是對于圖4所示的非法證書,使用CCD算法計算的可信度為0.35(屬于較可疑級別),其不能精確檢測上述非法證書.通過進一步分析可知此證書屬于非法證書,因為其使用者項中都是匿名信息符合非法證書的特征,而且證書有效時間較短.此證書相對于ITOC2009數據集的一般非法證書僅僅將使用者CN換了一個匿名,就使得CCD產生漏檢.雖然可以將匿名域名加入到FAAS中提高CCD的檢測精度,但匿名性域名范圍太廣無法將全部新匿名域名包含在集合中,因此采用CCD方法容易導致漏檢.而在采用iFCCD方法檢測上述非法證書時,由于iForest 所具有的檢測精度高的優點,所以iFCCD方法能夠將其判定為非法證書.
與CCD算法相比,iFCCD算法的誤檢率更低.圖5所示為ITOC2009的合法證書,CCD算法計算該證書可信度為-0.1,判定其為非法證書,但是經查詢得知此證書為根級證書屬于可信任證書,CCD算法明顯導致了誤檢測.而iFCCD算法能夠正確判定其為合法證書.

圖4 非法證書使用者信息示例

圖5 正常證書使用者信息示例
從上述分析得知,本文提出的基于iForest的隱蔽通信檢測機制能夠在降低誤檢率的同時提高檢測精度.
為解決SDN網絡中存在的隱蔽通信檢測問題,本文提出了面向SDN的隱蔽通信檢測機制,該機制利用SDN的特性準確獲取網絡中可能存在的隱蔽通信流量.針對CCD方法較為模糊的判定結果問題,本文提出了基于iForest算法的隱蔽通信檢測算法iFCCD,該算法可以降低誤檢率、提高檢測精度,同時避免了使用經驗值作為閾值可能導致的誤檢率增高或精度降低的問題.本文提出的iFCCD方法具有較好的可擴展性,只需改變提取證書的特征值或訓練數據集就可運用于不同場景的SDN網絡.