蔡榮彥,王 鶴,姚啟桂,何高峰
(1.國網福建省電力有限公司,福州 350003; 2.全球能源互聯網研究院有限公司,南京 210003;3.南京郵電大學 物聯網學院,南京 210023; 4.東南大學 計算機網絡和信息集成教育部重點實驗室,南京 211189)
隨著移動互聯網的迅速發展,移動智能終端(如智能手機、平板電腦、智能手表等)已經成為日常社會活動的重要輔助工具。但移動智能終端的廣泛使用也導致各類惡意移動應用攻擊事件不斷出現,例如:近期被檢測出的Android惡意移動應用GM Bot,能夠偽造美國運通銀行、美國大通銀行等50家大型金融機構的登錄頁面,并在3個月內感染超過20萬用戶[1];iOS惡意應用YiSpecter能夠繞過iOS權限控制,任意卸載或安裝其他應用,并惡意嵌入廣告信息[2];在高級可持續威脅(APT)攻擊如Luckycat中,惡意移動應用已成為新的攻擊手段[3]。更為嚴重的是,惡意移動應用的新增數量和感染用戶數一直呈現爆發趨勢[4],并開始廣泛借助代碼混淆技術躲避殺毒軟件的檢測,移動智能終端安全正面臨著嚴峻的考驗[5-6]。
通過分析惡意移動應用的攻擊行為可以發現,常見的如敏感信息泄露、網絡滲透等惡意攻擊大多通過網絡進行,借助SMS短信的不足1%[7]。文獻[8]統計結果表明,在5 560個不同Android惡意應用樣本中,5 344個樣本需要互聯網訪問權限,所占比率高達96.1%。因而基于網絡流量的惡意移動應用檢測已成為研究熱點[9],且具有重要實際應用價值。為此,眾多研究人員對基于網絡流量的惡意移動應用檢測開展了大量研究。文獻[10]通過判斷HTTP POST和GET請求中是否包含敏感信息(如IMEI、IMSI等),并結合遠程服務器端的信譽度進行惡意移動應用測檢測。文獻[11]以發送和接收的報數字節數、網絡狀態(WiFi、蜂窩等)、應用狀態(前臺、后臺等)為移動應用行為特征,利用機器學習方法建立惡意移動應用檢測模型。實驗結果表明檢測率超過80%,誤報率小于10%。文獻[12]針對重打包惡意應用,首先選擇類似應用,然后將待檢測應用的網絡行為同類似應用的網絡行為進行比對,若行為差別超過一定閾值,則判斷待檢測應用為惡意應用。實驗結果表明檢測準確度大于90%。
現有方法可通過網絡流量準確檢測出惡意移動應用,但在實際應用部署中多存在不足,如分析流量內容的方式[10]無法適合用于加密流量,因而易于規避,且有侵犯移動用戶隱私之嫌。網絡行為建模方法[11-12]無需檢測流量內容,適用于加密流量,能有效保護移動用戶的隱私信息。但此類方法大多需要離線訓練過程,且需要根據惡意移動應用行為的演變而更新檢測模型,實際部署時代價較大。
本文提出一種基于域名關聯的惡意移動應用檢測方法。以移動設備為觀察對象,分析移動應用產生的DNS流量。判斷DNS請求解析的域名是否為惡意域名。若為惡意,則在流量中尋找與該惡意域名相關聯的其他域名,并將這些域名作為識別特征進行移動應用的識別,從而檢測出具體的惡意移動應用。
惡意移動應用的檢測方法主要可分為基于靜態文件和代碼特征[13-14]、動態行為特征[15-16]和網絡流量特征[10-12]3類。由于本文提出的方法僅以網絡流量為考察對象,因此本節將重點闡述基于網絡流量特征的相關研究工作。
在發展早期,移動應用主要使用HTTP協議進行網絡通信,因而諸多研究對HTTP流量進行不同角度的分析以檢測惡意移動應用。文獻[10]提出一種三步驟檢測方法。首先識別HTTP POST/GET請求報文,然后在識別出的報文中查找用戶身份敏感內容,如國際移動用戶識別碼IMSI和移動設備國際識別碼IMEI等,若檢測出敏感內容,使用WHOIS工具查詢遠端服務器的注冊信息,并判斷遠端服務器是否為攻擊者服務器。文獻[17]對Android惡意移動應用產生的HTTP流量進行聚類研究,將聚類特征區分為HTTP流量的粗略特征和精細特征。其中,粗略特征即為統計類特征,包括HTTP請求數量、GET請求數量、POST請求數量、統一資源定位符URL的平均長度等,而精細特征為HTTP流量內容特征,包括具體的請求方法、頁面內容、參數名稱和參數值等。實驗結果表明,惡意移動應用產生的HTTP流量與正常移動應用有著明顯不同,而且粗略特征和精細特征有著類似的檢測能力,即精細特征并不能帶來更高的檢測率。文獻[18]提出CREDROID方法,結合APK文件分析、URL信譽度評分和HTTP流量內容3個部分進行惡意移動應用檢測。實驗結果表明,通過分析HTTP流量內容可以準確檢測出惡意移動應用,并且能夠識別泄露的敏感信息。
上述工作主要以HTTP明文內容為檢測對象,因而無法適用于加密流量,如HTTPS流量等。文獻[19]以平均報文長度、流平均長度、報文時間間隔等網絡流量統計值為檢測特征,利用機器學習分類方法進行Android惡意移動應用檢測。由于不考慮流量內容,因此該方法適用于加密流量。在測試的48個移動應用樣本中(包括正常和惡意應用),共成功檢測出43個樣本,準確率為93.75%。類似地,文獻[11]利用線性回歸、決策表、支持向量機等機器學習方法,以移動應用發送和接收的報數字節數、網絡狀態、應用狀態為行為特征建立惡意移動應用檢測模型,實驗結果表明其檢測率超過80%。
目前,Android惡意移動應用主要為重打包應用,即對正常應用進行反編譯,然后植入惡意代碼并重新打包發布[20-21]。重打包后的應用名稱、運行界面和主要功能均與原應用一致,具有很強的迷惑性,普通用戶難以區分。文獻[12]提出一種基于行為對比的重打包應用檢測方法。通過選擇類似應用,將待檢測應用的網絡行為同類似應用的網絡行為進行比對,若行為差別超過一定閾值,則判斷為重打包應用。此方法以網絡行為為考慮對象,不涉及流量內容,因而適用于加密流量,但如何選擇合適的類似應用是一項挑戰。文獻[22]提出基于一種基于移動邊緣計算的惡意重打包應用檢測方法,其在移動邊緣計算節點處對不同移動設備產生的同一應用流量進行聚類分析,從而準確發現重打包應用,從而克服文獻[12]中需要選擇類似應用的缺陷,直接以自身為比較對象,提升了檢測的準確度。文獻[22]方法同時以流量內容和流量統計特征為分析對象,可適用于加密流量。
現有基于網絡流量的惡意移動應用檢測研究主要從流量內容和流量統計特征兩方面展開。分析流量內容的方法需要進行特征匹配,無法適合用于加密流量,且不利于移動用戶的隱私保護。以流量統計數據為檢測特征的方法需要借助機器學習相關方法(分類或聚類),實現過程較復雜,且需要解決概念漂移等問題[23]。本文提出的基于域名關聯的惡意移動應用檢測方法僅以移動應用產生的DNS流量為分析對象,無需分析流量具體內容或提取統計特征,操作簡便,易于實際部署使用。
本節將闡述基于域名關聯的惡意移動應用檢測方法的設計思想,在此基礎上,分別對其中的惡意域名判別、域名關聯和移動應用識別等關鍵技術進行詳細介紹。
基于域名關聯的惡意移動應用檢測方法整體流程如圖1所示。首先觀察移動設備產生的網絡流量,記錄移動設備產生的DNS域名查詢流量,然后利用現有工具和特定算法分析流量中是否存在惡意域名。若存在,接著對時間特征進行聚類,尋找與該惡意域名相關聯的其他域名,最后將關聯域名轉變為字符文本,使用信息檢索方法識別出具體的移動應用,從而實現惡意移動應用的在線檢測。

圖1 本文檢測方法整體流程
關于DNS惡意域名的判別,研究者已提出多種有效方法,如基于知識、基于機器學習等方法[24]。本文在現有工作基礎上,采用一種本地與遠程相結合的方法進行惡意域名的判別。首先將DNS域名與本地黑名單庫進行比對,若存在,則判斷為惡意域名。本地黑名單庫可簡單存儲為文本文件,易于部署實現,其示例如圖2所示。

圖2 域名本地黑名單庫示例
若域名不存在于本地黑名單庫中,則繼續查詢遠程服務器,如Virustotal(https://www.virustotal.com/)等。Virustotal集成了70多種安全掃描引擎,且特征庫實時更新,可以準確有效地檢測出惡意域名。由于Virustotal同時給出多個掃描引擎的檢測結果,需要對檢測結果進行綜合分析處理。在本文工作中,對于待檢測域名U,若有一項及以上檢測結果標注為惡意,則判斷U為惡意域名;否則,判斷U為合法域名。如圖3所示,對于域名ytfkch.com,67個檢測引擎中只有CyRadar的檢測結果為惡意。本文仍將其判別為惡意域名,從而減少漏報。

圖3 Virustotal域名檢測結果示例
在檢測出惡意域名后,需要確定對應的移動應用,即分析出是哪款移動應用試圖訪問該惡意域名。為此,設計域名關聯步驟,尋找出與惡意域名相關聯的其他域名。這些相關聯的域名將作為識別特征,識別出具體的移動應用。移動應用識別將于2.4節中闡述,本節重點描述域名關聯過程。
在本文工作中,關聯域名定義為由同一移動應用所產生的DNS域名。以“百度”移動應用(com.baidu.searchbox)為例,其啟動時會查詢gss0.bdstatic.com、nsclick.baidu.com和browserkernel.baidu.com等域名。由于這些域名均由“百度”移動應用在運行時產生,因而為關聯域名。在實際中,筆者觀察到移動應用會在短時間內會產生多個DNS查詢請求,如圖4所示。

圖4 DNS查詢示例
圖4中的DNS查詢流量由“百度”移動應用產生,前7個DNS查詢請求幾乎同時發出,流量之間的時間間隔均較短(小于0.7 s)。通過分析可知,此流量特點與移動應用的使用特性相關。移動用戶閱讀完當前內容后,點擊或劃動屏幕以加載新的內容。移動應用此時需連接新的服務器獲取相應內容,因而會同時產生多個DNS請求。在傳統的Web瀏覽中也存在類似特點[25]。借助此特點,可以利用時間特征確定關聯域名。
域名關聯過程算法的具體描述如下:
輸入捕獲的DNS請求流量,惡意域名Um
輸出與Um相關聯的域名集合SU
//初始化
1.設定當前時間t=tUm;
2.SU=Um;
//前向搜索
3.While(true)
4.獲取t時刻的前一條域名Ui和其捕獲時間tUi;
5.If t-tUi<τ
SU=SU∪Ui;
t=tUi;
6.Else break;
7.End While
//后向搜索
8.t=tUm;
9.While(true)
10.獲取t時刻的后一條域名Ui和其捕獲時間tUi;
11.If tUi-t<τ
SU=SU∪Ui;
t=tUi;
12.Else break;
13.End While
14.Return SU
記檢測出的惡意域名為Um,DNS請求流量的捕獲時間為t,時間間隔閾值為τ。圖5中的前向和后向搜索都以Um為出發點,尋找時間間隔小于τ,即連續出現的DNS域名(實驗表明τ值設置為1 s較為合適)。這些連續出現的域名即為Um的關聯域名。注意算法第5步和第11步中時間差值計算的不同。在第2步,關聯域名集合SU初始化Um。最后,將關聯域名集合SU返回,為后續的移動應用識別做準備。其中前向和后向搜索可同時進行,提高運行效率。
在獲得關聯域名集合SU后,執行移動應用識別流程,從而最終確定惡意移動應用的名稱。惡意移動應用的識別流程如圖5所示,其由識別流程由訓練和識別兩部分組成。

圖5 惡意移動應用識別流程
訓練部分如圖5(a)所示,主要完成移動應用DNS域名的采集與處理。首先運行各種移動應用,包括已知的惡意移動應用和合法應用,然后采集其DNS查詢流量并提取其中包含的域名。針對提取的域名,按點號“.”進行分割處理,如將gss0.bdstatic.com分割為{gss0 bdstatic com},從而形成一個個“單詞”,并將“單詞”寫入文本文件保存,即每個移動應用都對應一個文本文件,該文件中存有移動應用產生的所有域名“單詞”,文件名設置為移動應用的名稱。最終得到的文本文件FM將作為分類樣本,用于識別移動應用。此過程中的具體技術細節可參考筆者的前期工作[26]。
識別部分如圖5(b)所示。將SU中的域名同樣按點號“.”進行分割處理,將得到的所有“單詞”保存為臨時文件FT。然后將FT同分類樣本庫中的每個FM進行檢索匹配,返回相似度最高的文件的名稱,從而確定惡意移動應用的名稱。文本檢索匹配過程的實現采用TF-IDF和余弦相似度算法,具體步驟如下:
記文本文件為Fdoc,“單詞”為wi,則wi的詞頻TF計算公式為:
(1)
wi的逆文檔頻率IDF計算公式為:
(2)
因此,wi的權重值可計算為:
Weight(wi)=TF(wi|Fdoc)×IDF(wi)
(3)
通過式(1)~式(3),可將文本文件Fdoc(包括FT和所有的FM)轉變為等長度值向量,其中每個向量項即為wi的權重值,向量長度為文本文件(包括FT和所有的FM)中所含有的不同“單詞”數量。
記FT所對應的向量為V(FT),FM所對應的向量為V(FM),向量長度為l,則FT和FM的最終比對過程即為計算向量V(FT)和V(FM)之間的相似度,計算公式如下:
(4)
需要說明的是,在訓練過程中需要采集合法移動應用的DNS域名,其目的是為了檢測出已知惡意移動應用之外的惡意重打包應用。若返回的移動應用名稱為一合法應用,則表明移動用戶安裝的是該應用的重打包版本,而非原始版本,即黑客對原始合法應用進行了反編譯,然后加入自己的惡意代碼,并重新打包發布,誘使用戶下載安裝。本文提出的方法可有效檢測出惡意重打包應用。
為測試本文方法的性能,從公開數據集AndroZoo[27]處下載200個合法移動應用和300個惡意移動應用。其中,200個惡意移動應用為重打包類型,與下載的200個合法移動應用一一對應,其余100個惡意移動應用為其他類型惡意應用。實驗環境設置如圖6所示。

圖6 實驗環境設置
針對下載的500個移動應用,首先將其運行于真實的智能手機中。若運行出錯(如移動應用版本較早,無法運行于最新手機),則根據移動應用的API版本配置對應虛擬機進行安裝運行。移動應用的安裝運行均自動化進行。安裝過程使用adb install命令實現。安裝完成后,使用開源的DroidBot[28]自動點擊產生點擊事件,運行移動應用不同組件。移動應用流量的采集由檢測服務器完成。檢測服務器運行Ubuntu 16.04操作系統,并配置WiFi熱點功能,智能手機及虛擬機均通過無線網絡連接至該服務器。在檢測服務器中,部署了tshark軟件(https://www.wireshark.org/docs/man-pages/tshark.html)進行網絡流量報文的抓取。DNS域名的提取同樣由tshark完成,具體命令為tshark-e dns.qry.name。惡意移動應用的檢測過程,包括域名與本地黑名單庫的匹配、Virustotal API調用、DNS域名關聯、移動應用識別等,均由Python代碼實現。
在訓練階段,首先運行下載的200個合法移動應用和100個其他類型的惡意移動應用,采集提取其DNS域名。每個移動應用運行3 min。然后將域名進行“單詞”化處理,按域名中的點號“.”進行分割,并將得到的“單詞”保存于以移動應用名稱命名的文本文件中,從而得出分類樣本庫。因此,實驗中分類樣本庫所包含的文件數量為300。在測試階段,逐個運行300個惡意移動應用,然后檢測惡意DNS域名并通過與分類樣本庫的比對,確定對應移動應用名稱。實驗中產生的數據統計如表1所示。

表1 實驗數據
實驗結果主要從檢測率方面進行衡量,具體計算過程如下:
設某一惡意移動應用M,其產生多個惡意域名。對于其中的某一域名UM,若能正確識別出其為惡意域名且由M產生,則判斷檢測正確,否則判斷為檢測錯誤。依據此定義,設測試階段共產生R個惡意域名,正確檢測出的數量為Q,則檢測率d的計算公式為d=Q/R。
實驗中共捕獲了1 187個惡意域名,其惡意性的確定通過代碼分析完成。通過反編譯APK文件為JAVA代碼,分析定位出具體的惡意代碼,并將出現在惡意代碼中的域名標記為惡意,從而保證數據標簽的真實性。利用本地黑名單庫(從http://www.malwaredomains.com下載)和Virustotal檢測,共檢測出1 187個惡意域名,即成功判別出所有的惡意域名。將圖5中時間間隔τ的值從0.1 s遞增至1.5 s,調整的步長為0.2,惡意移動應用檢測率實驗結果如圖7所示。

圖7 惡意移動應用檢測率
由圖7可知,惡意移動應用檢測率d的值先隨時間間隔τ增大而增加。當τ=1.1 s時,具有最高值97.1%;當τ>1.1 s時,d的值隨τ的值增大而有所降低。此特性由圖5中域名關聯算法和DNS查詢流量的時間特征所確定;當τ<1.1 s時,隨τ值增大,所關聯的域名數量越多,且如圖4所示,τ<1 s時關聯域名多由同一移動應用產生。因而文本匹配時準確度也就越高。當τ>1.1 s時,同樣地,隨著τ值的增大,所關聯的域名數量越多。但此時會包含其他干擾域名,即由其他應用產生的域名,因而文檔匹配時準確度有所降低。在實際中τ值設置為1 s較為合適。
為進一步檢驗本文方法,在實際的電力信息網絡中進行部署測試。在為期一個月的測試(2019年3月1日—2019年4月1日)中,共檢測出員工自帶移動設備上的13款惡意移動應用。通過APK文件的反編譯和代碼分析,確認檢測結果均為真實的惡意移動應用(均為Android重打包惡意應用),誤報數量為0,結果表明本文方法可實際部署于網絡中進行移動設備安全防護。
本文提出一種基于域名關聯的惡意移動應用檢測方法。以單個移動設備產生的DNS域名為檢測分析對象,當發現惡意域名后,通過時間特征尋找關聯域名,對關聯域名同樣本文件進行檢索匹配,從而準確、快速地確定惡意移動應用的名稱。基于公開數據集的實驗結果表明,該方法對惡意移動應用的檢測率可達97.1%,在實際的電力信息網絡的部署測試中,檢測發現13款惡意移動應用,且誤報數量為0,其具有高檢測率和低誤報率,可有效用于移動設備的安全防護。由于本文方法的準確性依賴于惡意域名判別的正確性,因此下一步將對惡意域名的判別進行研究以檢測未知惡意域名,并使惡意域名的判別僅在本地完成而無需訪問遠程服務器,以適用于生產控制網絡和工業互聯網。