林中霖,時金橋,王美琪,王學賓,王雨燕
(1.北京郵電大學 網絡空間安全學院,北京 100876;2.中國科學院信息工程研究所,北京 100093;3.中國科學院大學 網絡空間安全學院,北京 100049)
Android 惡意應用的變異是一個持續的過程。黑客通常會在下一次入侵行動前改進原本的惡意代碼,從而產生更隱蔽的惡意應用變體,因此,每年都會有大量新的Android 惡意應用被發現。根據V-Test 數據顯 示,2020 年新出現的Android 惡意應 用總數達到881 萬[1]。智能移動設備的持續發展離不開移動安全研究的支撐,并且需要一個安全的移動設備使用環境。因此,實現快速且準確的Android 惡意應用檢測是一項重要的工作。
惡意應用是一種不安全的軟件或垃圾軟件,可能會竊取用戶的個人信息或損害用戶設備,被分為不同的類別,例如,廣告惡意軟件、風險軟件、短信惡意軟件、銀行木馬等。這些惡意應用通過偽裝成正常的良性應用誘使用戶安裝到移動終端上,進而控制用戶的個人終端設備,以實現其非法目的。
在目前的Android 惡意應用檢測技術研究中,單維度應用特征檢測技術存在易被對抗的問題,而多維度應用特征檢測技術存在對新樣本檢測準確率低的問題。同時,基于用戶交互信息的應用行為特征劃分方法被廣泛應用在多維度應用特征檢測技術上,能夠顯著提升對新惡意樣本的檢測準確率。但是,已有的研究工作都是通過在UI 控件上的文本信息識別用戶有意識行為與應用隱匿行為,但是該方法在面對簡短文本信息時存在識別困難的問題。
針對已有方法在利用用戶交互信息時存在的問題,本文設計一種基于用戶交互信息的應用行為劃分算法。通過從Java 層API 調用中提取用戶與應用交互的時間信息并進行應用行為劃分,得到用戶有意識行為特征集與應用隱匿行為特征集。針對傳統機器學習算法模型對時序特征的學習效果較差以及長短時記憶(Long Short-Term Memory,LSTM)和時間卷積網絡(Temporal Convolutional Network,TCN)等深度學習模型為單通道模型的問題,本文設計一種雙通道應用分類模型2ch-LSTM-TCN,通過LSTM 模型對時序特征進行提取優化,通過TCN 模型從時序中提取序列排序特征。
Android 系統架構可以劃分為5 層,從上到下依次是應用層、應用框架層、系統運行庫層、硬件抽象層和Linux 內核層。因為Android 系統具有以上多層結構,所以研究人員在選擇特征時可以有多個維度的應用特征進行選擇。
本節主要對單維度應用特征與多維度應用特征在Android 惡意應用檢測領域的研究成果進行介紹。
關于Android 應用的檢測方法,早期的研究工作主要使用單維度應用特征作為檢測對象,從靜態特征或動態特征的角度,又可以將基于單維度應用特征的惡意應用檢測方法分為基于靜態單維度應用特征的檢測方法和基于動態單維度應用特征的檢測方法。
1.1.1 基于靜態單維度應用特征的檢測方法
基于靜態單維度應用特征的檢測方法是通過從apk 文件的字符串信息、dex 字節碼、API 以及類名中的某一項特征進行惡意應用檢測。HE 等[2]模仿逆向工程分析惡意樣本過程,解析敏感API 周圍的代碼片段,由圖神經網絡識別惡意的代碼片段。但是,該方法的人工操作部分占比較大,不利于流程自動化,因此,無法適用于大規模的惡意應用檢測。JERBI 等[3]通過靜態分析API 序列,根據一組明確定義的演化規則來演化API 調用序列,以證明應用存在惡意行為。但是,由于僅利用Java 層API 作為輸入特征,而忽略了native 層API,因此惡意應用可以通過native 層的代碼逃逸其檢測。文獻[4-5]利用從apk 文件中提取的字節碼進行靜態解析并推理組件的行為,通過跟蹤應用程序中存在敏感流的源點和匯點,從而檢測惡意敏感信息泄露。但是,以上方法無法檢測到軟件加殼后的惡意字節碼,難以檢測APT 組織的高水平惡意樣本。
因此,靜態檢測方法往往具備檢測速度快和部署簡單的特點,但是其局限性在于難以對抗軟件加殼技術和代碼混淆技術,無法正確解析惡意代碼。
1.1.2 基于動態單維度應用特征的檢測方法
基于動態單維度應用特征的檢測方法是指從Android 應用的執行環境中獲取底層執行的硬件信息、指令信息以及API 調用序列中的某一項來進行研究。TANG 等[6]從系統底層收集指令信息,利用指令的特征訓練無監督機器學習模型,進而檢測被惡意軟件感染的程序在執行過程中發生的偏差。但是,該系統的部署會造成系統永久性改變,在部署過程中還需要提權,整體流程比較復雜。TAM 等[7]設計一個自動基于VMI 的動態分析系統,通過觀察和剖析系統調用序列(重構進程間通信IPC 和遠程過程調用RPC 交互)來重構操作系統和Android 特定高層行為。由于重構規則需要專家來更新,因此新Android 應用功能或服務的研究需要花費大量時間成本,無法識別新功能和新服務,也就無法分類新的惡意Android 應用。李舟軍等[8]構建一種運行在Library 層之上的沙盒,通過收集調用Java 框架層的API 調用信息并使用API 信息熵判別惡意應用。但是,該方法無法對抗軟件加殼技術,對加殼保護的惡意應用沒有檢測能力。
在應用運行過程中,不同維度的動態特征各有特點,其代表的應用信息也不同,同時具有一定的局限性。為此,若要獲得一個高效的基于動態單維度應用特征的惡意應用檢測方法,研究人員必須考慮其局限性且備有應對方法。
為提升檢測技術被對抗的難度以及更好地應對新型的惡意樣本,研究人員開始研究多維度應用特征組合在惡意應用檢測技術上的效果。文獻[9]表明利用多維度應用特征能夠提高檢測Android 惡意樣本的效率,然而,不同維度的應用行為特征可以反映Android 應用程序上不同屬性的差異。目前,基于多維度應用特征的惡意應用檢測方法分為基于靜態多維度應用特征的檢測、基于動態多維度應用特征的檢測、基于用戶交互信息與動態多維度應用特征的檢測。
1.2.1 基于靜態多維度應用特征的檢測方法
基于靜態多維度應用特征的檢測方法是指通過apk 文件的字符串信息、dex 字節碼、API、包類信息中等多種應用特征進行惡意應用檢測。QIU 等[10]開發一種新的多視圖特征智能框架,提取多視圖異構特征,包括語義字符串特征、API 調用圖特征和smali操作碼序列特征,實驗結果表明,其性能和效果均優于經典方法Drebin[11]。BAI 等[12]提出一種基于多種特征的惡意應用檢測框架FAMD,從樣本中提取權限和Dalvik 操作碼序列來構建原始特征集,實驗結果表明,組合特征可以有效提高惡意軟件在Drebin數據集上的檢測準確率,在惡意軟件家族分類上準確率可達97.38%。文獻[13]設計的檢測模型TSDroid 將API Level 作為描述API 生命周期的時間特征,還將apk 文件大小、dex 文件大小以及系統API的數量作為空間特征,結合2 類特征集訓練惡意應用分類模型。ZHANG 等[14]提出利用N-gram 分析和特征哈希化,從應用程序中提取多維度應用特征,通過綜合每種維度應用特征的分類結果來判斷應用的惡意程度。
然而,已有工作對不同維度應用特征組合效果相關的問題缺少關注。因此,組合后多維度應用特征的分類效果還需進一步分析并驗證。
1.2.2 基于動態多維度應用特征的檢測方法
基于動態多維度應用特征的檢測方法是指利用在應用運行過程中產生的字符串信息、指令序列、API 調用序列、數據流等多種維度的應用特征進行惡意應用檢測。文獻[15]使用靜態多維度應用特征訓練出的惡意應用識別準確率達到97.12%,使用動態多維度應用特征訓練出的準確率為86.18%,然而動靜態混合的多維度應用特征訓練出的識別準確率為96.29%。文獻[15]選擇動靜態混合的多維度應用特征的分類效果相較于使用靜態的多維度應用特征較差。其原因為選取的靜態特征和動態特征并無關聯性,而動態特征的檢測效果與靜態特征相比較差,因此,組合后混合特征的分類準確率受動態特征的影響而下降。因此,部分多維度應用特征在組合后有可能會對算法產生負面效果,多維度應用特征組合需要經過分析后再利用。
1.2.3 基于用戶交互信息與動態多維度應用特征的檢測方法
Android 應用是根據用戶的需求進行設計與開發的,通過用戶與應用的交互信息也可以反向推測用戶與應用的行為意圖。
研究人員從多維度應用特征中抽象出用戶行為意圖和應用行為意圖,以提升對Android 惡意應用檢測的準確率。文獻[16]根據疑似惡意應用UI 控件的可疑度對應用軟件進行針對性動態測試。UI 控件的可疑度是依據UI 控件上的文本信息來設置的,而基于UI 控件可疑度設計的動態測試方法對惡意樣本檢測的漏報率為18.3%。文獻[17]對UI 控件所反映應用意圖與應用行為之間的關聯性進行研究,實驗結果表明,UI 控件所反映應用意圖與應用行為之間的差異用于區分惡意的Android 應用。但是,在不同上下文中UI 控件的圖標和文本可能出現類似的情況,例如,登出界面里的“確認”鍵和文件發送界面的“確認”鍵在圖標和文本信息上存在相似的情況,導致語義解析結果相同。用戶交互信息有利于提高特征集的分類效果,但是基于UI 控件文字信息與動態多維度應用特征的檢測方法還存在待解決的問題。
針對已有方法不能充分利用用戶交互信息的問題,本文設計一種基于用戶交互信息的應用行為劃分算法,通過捕獲應用中發生的用戶與應用交互行為,獲取交互行為發生的時間信息,并以此構建反應時長序列,再通過反應時長序列對原始特征集進行應用行為劃分,劃分出用戶有意識行為特征集與應用隱匿行為特征集。本文所提算法將存在用戶交互環境下的應用行為特征與不存在交互環境下的應用行為特征進行分離,從而避免兩者在模型訓練過程中相互干擾,達到提升特征集分類效果的目的。針對用戶有意識行為特征集與應用隱匿行為特征集的算法學習問題,本文還設計雙通道應用分類模型2ch-LSTM-TCN,用于用戶有意識行為特征集與應用隱匿行為特征集的訓練,在保留特征向量中時序特性的同時充分利用2 組特征集生成深度學習網絡,從而實現對惡意應用的分類。本文基于以上研究內容實現Android 惡意應用自動化檢測原型系統,實現對惡意應用進行檢測的目的。
關于本文設計的惡意應用檢測系統運行時的平臺搭建工作,本文利用Genymotion 模擬器啟動一個Android 虛擬機,并將其作為Android 樣本的運行環境,虛擬機的設備類型選擇Android 9 系統下的Redmi Note 7。本文的實驗平臺架構如圖1所示。

圖1 實驗平臺架構Fig.1 The architecture of experimental platform
本文借助frida框架來收集應用行為,frida是一個動態代碼檢測工具包,將JavaScript 代碼片段或自定義的庫注入到Android 應用程序中。本文基于frida的hook 框架編寫了用于采集Android 應用運行時產生各類應用行為的工具,利用frida 收集Android 應用運行時多層次的應用行為信息。在數據采集開始時,本文通過frida 腳本聯系frida-server,并對剛完成安裝和啟動的目標應用程序進行動態修改,hook 其內部的目標函數。隨后,通過frida-server 將自動化點擊模塊的共享庫加載到應用程序的內存中,并主動調用自動化點擊模塊的功能函數設置定時任務。該過程具體步驟如下:1)等待20 s 后開始第一次點擊;2)依據第一次點擊的時間延后10 s 進行下一次點擊(其原因為應用程序在啟動后需要一個初始化時間,在初始化過程中大概率會存在觸發點擊異常的情況);3)讓應用程序在運行180 s 后結束運行并卸載;4)從原始數據(json 格式的應用行為日志)提取應用行為特征;5)將應用行為特征進行應用行為劃分;6)將劃分后的特征集輸入到檢測模型中并得到結果。
本文通過用戶交互行為(活動行為、用戶點擊行為、用戶輸入行為、剪貼板使用行為、權限請求行為等)對目標應用行為(網絡傳輸行為、文件訪問行為、6 類系統調用行為)進行劃分,將每10 s 內的目標應用行為統計信息作為一個狀態,代表該時段的應用運行狀態。最后,本文利用固定預訓練迭代50 次得到的2ch-LSTM-TCN 模型對測試集進行分類任務,檢測框架如圖2 所示。

圖2 Android 惡意應用自動檢測框架Fig.2 Automation detection framework of Android malware application
本文設計的Android 惡意應用檢測方法主要由特征選擇、自動化點擊、應用分類3 個階段完成。
在特征選擇過程中,本文需要完成3 項任務:1)本文給出所使用的應用行為特征定義;2)選取部分應用行為特征作為模型的輸入特征;3)將應用行為特征分為用戶有意識行為特征集和應用隱匿行為特征集。
2.2.1 特征定義
本文將應用行為定義為Android 應用在運行過程中觸發或響應的執行任務。在不同層中,應用行為存在多維度,如在應用層查看某個文件,而在應用框架層則是打開文件對象、獲取文件輸入流以及讀取文件。
由于Android 執行體系存在5 層結構(應用層、應用框架層、系統運行庫、硬件抽象層以及Linux 內核層),因此程序語義在執行過程中存在多層次表達,而惡意程序包含的惡意代碼也會在多個層次中出現惡意行為,并且越底層的惡意行為隱蔽性越高。多層次的應用行為特征為Android 惡意應用的檢測提供多維度特征選擇。從開發者的角度分析,Android 執行體系的5 層結構是由Java 代碼、C 語言代碼以及機器指令來實現的。對于應用的Java 代碼實現部分,一般稱為Java 層。對于應用的C 語言代碼實現部分,一般稱為native 層。本文通過分析不同層次語義特點,在不同層次中部署不同的API監控,并利用多維度應用行為描述Android 應用程序執行過程中的變化差異。不同維度應用行為間的關系如圖3 所示。

圖3 不同維度應用行為間的關系Fig.3 The relationship of application behavior in different dimensions
因此,在特征選擇階段,本文分析Android 系統中多個層次的應用行為特征,分別是活動行為、用戶點擊行為、用戶輸入行為、剪貼板使用行為、權限請求行為、網絡傳輸行為、文件訪問行為、系統調用等。依據文獻[18]的工作可知,系統調用是直接使用應用的系統調用序列或調用頻率作為特征進行分類應用,導致分類結果較差,并由此得出無法依據簡單的系統調用序列信息進行高效應用分類的結論。其原因為在目前Android 市場中上架的應用程序往往具有屬于多個行為類的功能,導致其產生的應用行為十分復雜,不同Android 應用產生的系統調用序列可能十分相似。以微信為例,微信將即時通信功能與社交媒體共享結合在一起,同時還集成了語音聊天、購買車票、轉賬付款、瀏覽視頻、在線購物等功能。惡意的Android 應用在實際入侵事件中大多偽裝成熱門應用來誘惑用戶安裝使用,甚至部分惡意應用為防止被檢測到,只是將小段的惡意代碼嵌入到正常代碼中,惡意代碼量占比極少,只需使用一個或多個系統調用即可達到目的。
為解決該問題,本文在對選擇系統調用特征時先對系統調用進行分類,再去除掉安全的或無法直接對用戶信息與設備造成危害的系統調用策略(如字符串處理、終端輸入輸出、內存分配等函數)。惡意應用在實現對用戶終端設備進行控制時需要依靠控制和管理類的系統調用。因此,這2 類系統調用屬于高危系統調用,共有119 個。本文選取所有的控制和管理類系統調用作為研究對象,并依據功能劃分類別,包括進程控制類、文件系統控制類、系統控制類、內存管理類、網絡管理類、用戶管理類、進程間通信類。
應用框架層的行為特征:應用層負責與用戶進行直接交互,而該部分的功能是由應用框架層提供的API 實現。因此,分析應用框架層的API 調用也可以知悉應用層的用戶行為變化。活動切換、用戶點擊、用戶輸入、剪貼板使用、權限請求這5 種行為是由用戶的交互行為主動產生的,因此能準確反映用戶的行為意圖。
系統運行庫的行為特征:任何Android 應用運行都離不開信息傳輸,而信息傳輸方式分為網絡傳輸和本地文件讀寫2 種。應用框架層的網絡傳輸任務和文件讀寫任務都是從系統運行庫中導出的函數實現的,并且部分惡意應用喜歡在native 層中實現網絡傳輸和文件訪問,在監視系統運行庫層中的網絡傳輸和文件訪問相關API 可以避免漏報。根據YERIMA 等[19]的研究,其中有超過93%的惡意應用程序需要網絡連接。因此,本文選擇在系統運行庫層研究網絡傳輸行為和文件讀寫行為。
Linux 內核層的行為特征:在Android 系統中有250多個Linux 內核的 系統調 用正在 被使用[20]。Android 的核心系統服務是基于Linux 內核,系統的安全性、內存管理、進程管理、網絡協議棧、驅動模型等都依賴于Linux 內核,而Android 應用獲取系統服務是通過系統調用實現的。因此,本文通過選擇進程控制類、文件系統控制類、系統控制類、內存管理類、網絡管理類、用戶管理類、進程間通信類這7 類系統調用作為研究對象。
本文不考慮應用層和硬件抽象層的內容,其原因為應用層對于應用程序執行只是個抽象概念,不涉及程序自身任務的執行過程,而硬件抽象層的接口往往受移動設備硬件改變而變化,不利于實驗結果的穩定性。
2.2.2 特征篩選
本文從活動切換、用戶點擊、用戶文字輸入、剪貼板的復制粘貼、權限申請、網絡傳輸、文件訪問,以及7 類系統調用(進程控制類、文件系統控制類、系統控制類、內存管理類、網絡管理類、用戶管理類、進程間通信類)中篩選一部分特征作為后續分析的輸入特征。為此,本文從行為發生頻率的角度,通過實驗對這些應用行為進行分析。
本文在API 層選取以Android 4 大組件和Intent Filter 作為API 特征(應用框架層),在native 層選取文件讀寫、網絡傳輸,以及7 類系統調用等作為API特征(系統運行庫層和Linux 內核層),并對API 層和native 層的API 特征進行對比。關于實驗采集對象,本文選取500 個惡意樣本與500 個良性樣本組成對照組,統計這2 組樣本在180 s 內出現與Android 4 大組件相關API、Intent 對象調用、文件讀寫事件、網絡傳輸事件,以及7 類系統調用的頻率,該實驗記為實驗1。為方便將2 組樣本的頻率特征一起表示,本文將分別取樣本組中各類行為頻率數值的平均值,并用于表示樣本組中各類行為的頻率特征情況。為了使數據更好的可視化,本文對該輪實驗的頻率結果進行對數變換,實驗1 的結果分別如圖4 和圖5所示。

圖4 在Java 層中應用行為頻率統計Fig.4 Application behavior frequency statistics in Java layer

圖5 在native 層中應用行為頻率統計Fig.5 Application behavior frequency statistics in native layer
從圖4 和圖5 可以看出,Java 層組件發生的調用次數明顯少于native 層的調用特征。雖然Intent 相關API 調用頻率較高,但是與其他Java 層組件發生調用次數的差異較大。因此,Java 層的API 調用頻率與native 層的API 調用頻率差異較大,并且Java 層的各類調用頻率存在明顯差異,表現并不穩定。native 層的應用行為和Java 層應用行為并不適合混合使用,而native 層的應用行為比高層次的Java 層應用行為更適合作為分類特征。
網絡管理類的系統調用在應用中被使用的頻率較低,因此將其從特征向量中去除。因為活動切換、用戶點擊、用戶文字輸入、剪貼板的復制粘貼、權限申請等行為是由用戶交互直接產生的,所以它們的調用頻率完全取決于人工操作的頻率。在本文檢測框架中所有的用戶交互行為均由自動化點擊模塊生成的。因此,該類行為的發生頻率會根據應用UI 布局設計的不同而不同。本文沒有將受UI 布局設計影響的活動切換、用戶點擊、用戶文字輸入、剪貼板的復制粘貼、權限申請等行為特征作為輸入特征,而是將網絡上下載數據量、文件讀寫頻次以及6 類系統調用頻次作為應用分類的輸入特征。
2.2.3 特征劃分
在惡意應用中,應用行為意圖與用戶行為意圖相悖,該特點可以被利用到惡意應用的檢測中。但是,應用行為意圖無法直接獲得,需要分析應用運行過程中產生的應用行為才能得到。
為獲取用戶與應用交互的行為信息,本文收集活動行為、用戶點擊行為、用戶輸入行為、剪貼板使用行為、權限請求行為等來自應用框架層的應用行為。在特征提取過程中,本文依據應用響應用戶的反應時間(后續本文以“反應時長”代替)來劃分用戶有意識行為和應用隱匿行為。反應時長代表用戶有意識地使用和控制應用程序的時間,在該時間范圍內應用程序主要服務于用戶的意圖,而本文將該部分時間產生的行為定義為用戶有意識行為。除反應時長以外的時間,應用在按開發人員設計的程序邏輯自主執行,而本文將在該段時間內應用產生的應用行為定義為應用隱匿行為。依據應用程序服務于用戶的理念,本文認為在用戶停止使用時(也就是除反應時長之外的時間),應用程序的活動頻率應該是較少的,只存在用于維持連接的少量通信活動和管理控制類行為。而依據反應時長劃分出的用戶交互時間段是由用戶與應用交互頻率確定的。用戶在使用app 時,app 上的界面發生改變、某個按鈕被點擊、某個輸入框被輸入文字、某段文字信息被剪貼板復制或粘貼等交互行為越頻繁,劃分出用戶交互的時間段就越多。在反應時長內,當用戶交互頻繁時,網絡通信、文件訪問和管理控制類的應用行為數量驟增,意味著應用程序可能正在竊取用戶的敏感信息。
本文試圖通過劃分出的用戶有意識行為特征集和應用隱匿行為特征集來研究惡意應用與良性應用的差異。雖然用戶在有意識行為和應用隱匿行為中都可能存在惡意行為,但是劃分出的2 類特征集能夠對原有特征集進行信息降噪,減弱2 類行為特征集在分析時相互干擾的影響。
反應時長數值的確定是應用行為劃分的關鍵問題。隨著硬件技術的進步,應用的執行速率也越來越快,大部分應用功能都可以在幾秒的時間區間內做出響應。因此,本文以ms 為單位設置反應時長,按固定梯度增加反應時長并觀察劃分后特征集的分類效果,最后選取具有分類效果最佳的反應時長數值作為最終的確定數值。
最后,本文將收集到的活動行為、用戶點擊、剪切板使用、輸入框輸入、權限請求等應用框架層應用行為的發生時間點加上nms 的反應時長后得到一個時間段,并將所有時段都加到一個集合中以得到應用響應時段集合。此外,本文在Android 應用剛啟動的前10 s 內,啟動過程產生的應用行為看作是由用戶啟動app 產生的,實際上該過程以初始化操作為主,應用主動發起的初始化任務較多。因此,本文沒有將該時段內的應用行為分為用戶有意識行為。因為目前應用啟動界面普遍默認停留的時間為10 s 左右(用戶不點擊“跳過”按鈕時所停留的時間),所以本文從Android 應用開始運行10 s 后啟動自動化點擊模塊,并依據反應時長分為用戶有意識行為和應用隱匿行為,而前10 s 的應用行為都屬于應用隱匿行為。
算法1用戶有意識行為特征集和應用隱匿行為特征集的劃分


本文設計原來表征每個Android 應用的特征向量是一條由18 個應用行為狀態段連接得到的序列,每個應用行為狀態段用于表示在10 s 時間間隔內應用行為的執行狀態,而每個應用行為狀態段用10 個字段表示,分別是網絡發送字節數、網絡接收字節數、文件讀取次數、文件寫入次數,以及6 類系統調用事件發生次數。本文將每10 s 的時間段看作一個應用行為執行狀態,每個狀態由以上10 個字段來描述。最終,本文設計的特征向量是由18 個時間段表示的狀態按順序拼接在一起組成的應用行為狀態序列,用于描述Android 應用在180 s 內的應用行為執行狀態變化。
在動態收集特征的方法中,為確保在應用行為收集過程中盡可能多地覆蓋應用功能,并產生足夠用于分類模型訓練的特征數量,研究人員在應用運行過程中使用如Monkey 自動化工具模擬用戶點擊。但是,該類自動化工具在使用前都需要編寫定制化腳本,對于大規模的應用測試實驗十分不便。為了方便本文應用行為采集工作,本文基于視圖樹設計與實現一個自動化點擊模塊。
在Android 應用程序中,View 是繪制在應用頁面上能與用戶交互的視圖對象,所有的用戶界面元素都是由View 對象和ViewGroup 對象構成的,如Button 按鈕類是由View 類繼承得到的。本文在應用啟動之初獲取應用的Top Activity,之后獲取該Activity 中的視圖View。通過頂層視圖的View 對象來逐層向下遍歷,獲取子視圖View 對象。ViewGroup 對象是指代一個View 集合,而移動應用UI 布局的層次結構就是一顆多叉樹。Android 應用UI 布局的層次結構如圖6 所示。為了將應用中所有的視圖控件合并到一顆多叉樹中,本文將ViewGroup 看作一個特殊的View 視圖對象,并作為父節點,結合其下的View 集合構建一顆多叉樹,即:ViewTree。因為只有可點擊的控件才是用戶可交互的控件,而像TextView 等控件并不是本文想要的,所以本文依據該ViewTree 通過篩選具備可點擊屬性的控件構建第2 棵ViewTree。

圖6 Android 應用UI 布局的層次結構Fig.6 Hierarchy structure of Android application UI layout
當一個應用接收到一個點擊事件時,每個View都是通過performClick 函數進行處理,因此,本文通過主動調用一個控件的performClick 函數,達到與用戶點擊該控件相同的效果。本文基于可點擊ViewTree,采用前序遍歷的方式遍歷每個可點擊的View 對象。由于父節點View 包含子節點View,因此先序遍歷符合View 節點間應用功能邏輯上的先后關系。開發人員通常將同一類別或相關功能放在同一ViewGroup 中,可以避免因誤觸功能相反的控件而產生異常情況。本文將自動化點擊模塊的代碼編譯為一個共享庫,隨腳本執行而加載到目標應用進程中,之后在開啟所有監聽模塊后運行自動化點擊模塊。
算法2獲取可點擊控件的視圖樹

本文從360 手機助手的應用市場中隨機抽取4 個Android 應用作為分析對象,記錄其在無自動化點擊模塊和加載自動化點擊模塊下運行產生的應用行為數量,以評估本文設計自動化點擊模塊的效果。本文將該實驗記為實驗2,實驗結果如表1 所示。

表1 在原始狀態和運行自動化點擊模塊下點擊行為數量對比 Table 1 Comparison of the number of clicks behaviors in the original state and running automation click module 單位:個
為了防止頻繁點擊導致程序崩潰,在實驗2 中設置每組應用運行3 min,自動化點擊模塊每5 s 觸發一次點擊行為。從表1 可以看出,在加載自動化點擊模塊后應用產生的應用行為數量顯著提高,相較于原來應用行為數量平均提高640%。
本節將介紹應用分類階段中的工作,該階段最重要的是設計并構建Android 惡意應用分類模型,即2ch-LSTM-TCN 雙通道應用分類模型。
本文模型的構建方案是使用2種類型的深度神經網絡:1)用于特征提取的LSTM 網絡;2)用于特征分類的TCN。1997年由HOCHREITER 等[21]提 出LSTM。LSTM 網絡根據歷史信息有選擇性地記住重要的歷史信息,而典型的LSTM 單元由輸入門、遺忘門和輸出門組成。與循環神經網絡(Recurrent Neural Network,RNN)相比,LSTM 學習速度更快,并且解決了RNN 的長期依賴問題。BAI 等[22]提出TCN 模型,它是一種適用于所有任務的通用時間卷積網絡體系結構。研究結果表明,TCN 模型比LSTM 和GRU 等規范循環網絡在處理序列特征時準確率更精確。TCN 模型的特點主要有2 個:1)在卷積網絡層之間是有因果關系的,說明不會有丟失的歷史數據或出現未知數據;2)體系結構可以獲取任意長度的序列,并將其映射到相同長度的輸出序列中。與具有相同容量的循環體系結構相比,TCN 具有更大的內存。
為解決傳統機器學習算法模型對時序特征的學習效果較差以及LSTM、TCN 等深度學習模型為單通道模型的問題,本文提出一種基于LSTM 和TCN的模型體系結構2ch-LSTM-TCN。2ch-LSTM-TCN雙通道應用分類模型的體系結構具有2 個輸入通道。本文模型初始輸入的是應用行為狀態序列,其本質是一種時間序列數據。通過分析和提取上文提到的應用行為執行狀態,得到網絡接收字節數、文件讀取次數、文件寫入次數等多個屬性。雖然這些屬性是獨立的,但是它們共同反映了Android 應用的執行情況。由于LSTM 是具有增強記憶能力的特殊類型遞歸神經網絡,適用于具有長期依賴關系的特征進行建模,因此本文將LSTM 用于模型的特征提取流程中,對初始輸入的序列特征進一步提取優化。TCN 根據因果卷積和空洞卷積的思想,適合解決與序列建模相關的問題,從時序序列中提取序列排序特征,并為特定任務構建表示向量。
2ch-LSTM-TCN 模型使用全連接層收集并組合用戶有意識行為序列和應用隱匿行為序列表示模型的輸出,將Sigmoid 函數作為Dense 層的激活函數,將合并的序列分類到相應的類別標簽。為避免出現過擬合的情況,本文在最后一個Dense 層使用衰減機制[23]。LSTM 模型對時序特征進行提取優化,但是參數的收斂速度較慢。TCN 模型可以跨層傳遞信息,從而促進各項參數快速收斂。因此,LSTM 模型結合TCN 模型可以促進梯度下降的快速收斂。此外,TCN 具有序列特征提取能力,本文模型可以在沒有任何人工特征或元數據的情況下獲得優異的結果。本文模型結構如圖7 所示。

圖7 2ch-LSTM-TCN 模型結構Fig.7 Structure of 2ch-LSTM-TCN model
本文所提模型2ch-LSTM-TCN 架構主要由LSTM 網絡和TCN 網絡組成。用戶有意識行為模型和應用隱匿行為模型共享相同的配置。為了盡可能地適應大規模數據集,本文使用16 層堆棧,給模型中的每個卷積層設置11 個具有8 個核大小的濾波器。對于擴展的因果卷積層,本文設置一個擴展因子列表{12,4,8},這些層將根據該列表設置擴展因子。在訓練過程中,本文使用binary_crossentropy 函數作為損失函數,并將Adam 算法[24]作為優化器,學習率為0.001。
本文通過構建一個自動化數據采集與分析平臺系統,對基于多種應用行為分析的惡意軟件檢測方法的有效性進行驗證。
本文實驗使用的Android 樣本集分為惡意樣本和良性樣本。惡意數據集來源于MAHDAVIFAR 等[25]提供的Android 惡意應用數據集CICMalDroid 2020,該數據集包含2018 年以及以前的Android 惡意軟件樣本,總共有17 341 個Android 惡意軟件。此外,該數據集已經對惡意樣本進行了歸類,包括廣告惡意軟件、銀行木馬、短信惡意軟件、移動風險軟件等類別的惡意應用。廣告惡意軟件通常隱藏在被惡意軟件感染的合法應用程序中的廣告材料。銀行木馬是一種專門的惡意軟件,旨在通過模仿原始銀行應用程序或銀行Web 界面來訪問用戶的網上銀行賬戶。短信惡意軟件利用短信服務作為其操作媒介來攔截短信有效負載以進行攻擊。風險軟件是指合法程序如果被黑客利用,風險軟件可能會威脅到普通用戶的移動終端設備安全。由于在該數據集中因部分樣本存在超時、無效apk 文件、內存分配失敗等錯誤而運行失敗的問題,因此本文實驗只抽取CICMalDroid 2020 數據集中可以正常運行的部分樣本作為實驗對象。
此外,本文還從Github 上下載122 個2016 年—2019年流行的Android病毒軟件作為實驗的補充樣本集,以確保實驗樣本集足夠廣泛且更具有說服力。對應的樣本數量如表2 所示,各類惡意樣本共計1 268個。

表2 本文實驗的惡意樣本數據集 Table 2 The malicious sample dataset of experiment in this paper 單位:個
關于良性樣本,本文收集了來自騰訊應用寶和360 手機助手2 個網站上的應用程序,如新聞閱讀、社交通信、生活工具、影視聽說等類別的良性應用,共計658 個良性樣本程序,并使用VirusTotal 對所有良性程序進行掃描驗證。
為驗證本文提出的Android 惡意應用檢測方法的效果,本文使用10 折交叉驗證法進行評估。10 折交叉驗證法是一個用于測試算法準確性的評估方法,具體過程是將整個樣本集中所有的樣本隨機分為10 份,在每次實驗時按序將其中一份作為測試集,而其余9 份作為訓練集,然后對10 次實驗得出的檢測結果取平均值。該驗證方法可以對算法準確性進行衡量,避免因訓練集和測試集劃分時的偶然因素對實驗結果造成影響。
本文分別將惡意樣本集和良性樣本集中的樣本隨機均分為10 份,依次將惡意樣本和良性樣本組合得到10 份惡意和良性樣本的組合。在10 次驗證過程中,每次驗證過程逐一選取其中一份作為測試集,其余9 份樣本集作為訓練集。
為衡量本文提出的惡意軟件檢測方法效果,本文采用準確率、召回率、精確率、誤報率、F1 值作為評估指標。準確率表示本文模型預測正確結果所占的比例;召回率表示在所有正類別樣本中,被正確識別為正類別的比例;精確率表示被識別為正類別的樣本中確實為正類別的比例;誤報率表示負類別樣本被識別為正類別樣本占總預測錯誤的比例。準確率(A)、召回率(R)、精確率(P)、誤報率(FFPR)、F1 值(F)的計算式如下:
其中:TTP為真良性樣本例數量;TTN為真惡意樣本例數量;FFP為假良性樣本例數量;FFN為假惡意樣本例數量。
本文提出的惡意應用檢測系統存在一個重要參數——反應時長,通過實驗分析該參數對結果的影響并選取一個合理的值。
為選取一個合理且有效的時間長度,本文使用不同時間長度作為反應時間,對比用它們分割出的用戶有意識行為特征集和應用隱匿行為特征集的分類效果,將該實驗記為實驗3。文獻[26]表明用戶在使用應用程序時的可容忍等待時間,范圍從2 s 到數秒不等,而1 s 則被認為是用戶思維活動保持連續的極限。本文認為用戶對UI 響應時間更敏感,因此以500 ms 為起始點,又以500 ms 為梯度,對使用不同反應時長劃分出的用戶有意識行為特征集和應用隱匿行為特征集進行訓練,并觀察它們對應的分類結果。不同反應時長的分類效果對比如表3 所示。

表3 不同反應時長的分類效果對比 Table 3 Classification effect comparison among different reaction times
從表3 可以看出,當反應時長為1 500 ms 時各項指標均最優。本文最終選擇1 500 ms 作為分割用戶有意識行為和應用隱匿行為的反應時長。
為分析單維度應用行為特征、多維度應用行為特征、不同維度應用行為特征集的檢測效果,以及驗證本文所提的基于應用行為劃分的Android 惡意應用檢測方法的有效性,本文設置6 組實驗對照組進行消融實驗,并將該實驗記為實驗4。6 組實驗對照組均使用相同的模型2ch-LSTM-TCN 進行訓練,結果如表4 所示。在實驗4 中,實驗對照組1 使用6 類系統調用特征作為輸入特征,實驗對照組2 使用6 類系統調用特征和網絡傳輸數據特征作為輸入特征,實驗對照組3 使用6 類系統調用特征和文件訪問行為特征作為輸入特征,實驗對照組4 使用6 類系統調用、網絡傳輸數據特征以及文件訪問行為特征作為輸入特征,實驗對照組5 使用6 類系統調用、網絡傳輸數據特征、文件訪問行為特征以及用戶點擊行為等特征作為輸入特征,實驗對照組6 使用6 類系統調用、網絡傳輸數據特征以及文件訪問行為特征(使用用戶有意識行為和應用隱匿行為分割算法處理)作為輸入特征。

表4 不同實驗對照組的分類效果對比 Table 4 Classification effect comparison among different experimental control groups %
從實驗對照組1、實驗對照組2 和實驗對照組3的結果可以看出,相比僅用系統調用特征作為輸入特征,系統調用特征加上網絡傳輸數據特征后準確率提高了6.8 個百分點,誤報率分別下降了2.8 個百分點,而添加文件訪問行為特征后準確率提升2.9 個百分點,同時,誤報率下降了1.5 個百分點。相比實驗對照組2,實驗對照組4 準確率并未得到提高,但是誤報率出現下降,而召回率與F1 值均得到提升。從實驗對照組4 和實驗對照組5 的對比結果可以看出,用戶點擊行為等5 種Java 層應用行為特征不適合與系統調用特征、網絡傳輸數據特征以及文件訪問行為特征一起作為輸入特征被學習。從實驗對照組4 和實驗對照組6 的結果可以看出,在進行劃分用戶有意識行為特征集與應用隱匿行為特征集后,深度學習模型的各項指標均得到明顯改善。因此,本文設計基于應用行為劃分的Android 惡意應用檢測方法具有一定的有效性。
為檢測本文所提檢測系統的有效性,本文將提出的檢測方法與近幾年相關方法進行對比,具體對比情況如表5 所示。
文獻[27]提出一種基于馬爾可夫圖像和深度學習的字節級惡意軟件分類方法(MDMC),通過將dex 字節碼轉換為馬爾可夫圖,使用深度學習來分類應用。MDMC 在Microsoft 惡意樣本數據集上的平均準確率達到99.2%,但是,軟件加殼技術使得屬于惡意代碼部分的dex 字節碼被隱藏起來,以致MDMC 難以將使用該技術的惡意樣本檢測出來。文獻[14]提出利用N-gram 分析和特征哈希化,從應用程序中提取多種特征輸入到分類器中,綜合每種特征分類結果判斷應用的惡意程度。文獻[14]在5 375 個惡意樣本與5 000 個良性樣本的基準數據集上實現了93%的準確率,使用的惡意樣本數據集Drebin 包括2010 年—2012 年的惡意樣本,發布時間較久遠,并且其中惡意樣本使用的技術也過時,因此難以代表近幾年的Android 安全態勢。本文使用的惡意樣本數據集發布于2020 年,良性樣本數據集發布于2022 年,在時間上較新,因而更具代表性。文獻[16]使用靜態分析技術獲取應用API 的調用情況,判定其是否為疑似惡意應用,根據疑似惡意應用UI 控件的可疑度進行針對性動態測試,從而自動確認疑似惡意應用中是否存在惡意行為。雖然文獻[16]所提的方法在統計2 類惡意吸費短信應用的場景下,誤報率為0,但是漏報率達到18.3%。本文實驗的樣本集相較于文獻[16]所提方法的規模更大且時間更新,而本文方法統計4 類惡意應用時的漏報率只有7.1%。
在數據特征方面,本文在使用應用行為特征的同時考慮了用戶與應用交互信息。實驗4 的結果表明,使用本文應用行為劃分后的特征集相較于原始特征集取得了更好的效果。在模型選擇方面,LSTM是具有增強記憶能力特殊類型的遞歸神經網絡,其設計允許學習數據中的長期依賴關系。TCN 模型則根據因果卷積和空洞卷積的思想,更適合解決與序列建模相關的問題。本文將LSTM 和TCN 這2 個模型相結合并應用在時序性強的應用行為數據上,以更完整地提取數據中的序列信息。因此,本文所提方法2ch-LSTM-TCN 模型的效果較單一的LSTM 網絡或TCN 網絡在具備時序依賴關系的特征向量上的訓練效果要優。
現有的動態檢測技術忽略了對于不同種應用特征間關聯效果的驗證和分析,此外,用戶行為意圖和應用行為意圖存在識別困難的問題。本文提出一種基于應用行為劃分的Android 惡意應用檢測方法。該方法通過從多種應用行為中劃分用戶有意識行為特征集和應用隱匿行為特征集,實現有效檢測Android 應用程序。從多維度應用行為角度分析,基于特征頻率和惡意樣本分析經驗選取由有效的應用行為特征組成的特征集,避免使用無效特征或者低效特征。本文基于用戶交互信息進行應用行為劃分,得到分類效果較原始特征集更優的用戶有意識行為特征集與應用隱匿行為特征集,在不增加時間及性能成本的情況下提升模型的各項指標。在此基礎上,本文設計的2ch-LSTM-TCN 雙通道應用分類模型能夠同時學習2 組特征集。實驗結果表明,本文方法對Android 惡意應用檢測的準確率達到94.8%。后續將繼續擴展和豐富樣本數據集,構建一個對復雜Android 應用市場具備代表性的樣本數據集。此外,細化和延長反應時長對于分類效果的影響也是本文重點研究方向,并將繼續優化2ch-LSTM-TCN 雙通道應用分類模型,以構建較優的深度學習模型。