朱璋穎 ,馬 永 ,燕錦華 , 吳振宇 ,徐文博
(1.上海犇眾信息技術有限公司,上海 201199;2.上海電機學院,上海 200240;3.華東計算技術研究所,上海 201808)
隨著移動智能終端的普及,移動應用日益增多,移動終端遭受惡意應用的攻擊和威脅也日趨增長。惡意扣費、竊取隱私類病毒等對手機用戶產生了惡劣的影響,雖然應用分發渠道對應用進行了安全審核,但是惡意應用可以通過動態類加載等技術繞過應用商店或者防病毒引擎的安全檢查[1]。
目前,有很多研究工作關注于惡意移動應用程序檢測[2-6]。楊歡等[7]采用動靜態結合的方法提取能夠反映惡意應用行為的組件,函數調用和系統調用類特征構建最優分類器評判Android應用的惡意行為。Gorla等[8]對應用進行聚類,并分析同類應用中API調用異常的應用,尋找潛在的惡意應用。張家旺等[9]提出對APK文件提取權限特征、DVM API調用序列特征以及native程序的OpCodes特征進行N-gram建模,并使用機器學習進行惡意應用檢測。這些檢測方法都直接以安卓移動應用為檢測目標,并沒有針對用戶評論數據進行深入研究。
在評論數據分析方面,有研究工作探索移動應用屬性和行為之間的差異。WHYPER[10]和AutoCog[11]基于用戶對應用行為的認知,建立應用描述和其敏感權限之間的映射關系。還有相關工作基于Lin等人[12]提出的眾包研究技術展開[13-14],通過靜態分析研究敏感權限的使用及其使用意圖,研究用戶對不同的<應用,權限,意圖>組合的評分,為應用提取多維度特征構建特征向量,并對數據集進行預處理,使用機器學習技術建立準確的隱私評級預測模型,評判應用是否存在嚴重的風險。
本文以一種以用戶評論數據為基礎,建立了一種惡意應用檢測模型,自動化檢測應用存在的安全威脅。目前,大部分應用市場都提供接口供用戶提交針對應用的評論。用戶評論數據可分為功能、性能、用戶體驗等幾個方面。當然,用戶也可以通過此渠道發布應用的安全問題評論。通過對這些評論數據進行分析,可以獲取用戶所觀察到的這些應用在運行中的安全問題。
鑒于應用的用戶評論數據是一類非結構化、非標準化的數據,為了對其進行分類,使用自然語言處理工具和分類器對其進行處理(如圖1所示),最終獲取用戶對應用安全方面的評價。為實現準確的惡意應用檢測模型對數據集進行預處理,提取特征向量,使用機器學習技術建立準確的惡意應用檢測模型。

圖1 用戶舉報數據分類工具
為對用戶評論數據分類,發現惡意應用,設計系統對用戶評論數據進行評價。系統包括評論數據獲取、評論數據預處理和評論數據分類三個模塊。評論數據獲取模塊通過爬蟲獲取各類原始樣本。預處理模塊使用自然語言處理工具,對評論數據進行分詞、停用詞去除、詞頻分析等工作,最終形成結構化數據用來構建模型。
為獲取用戶評論數據,分析移動應用市場評論數據接口,實時抓取評論數據。考慮到這些市場中的正例樣本數量有限,從移動病毒分析報告、貼吧等渠道獲取更多的正例樣本用來訓練模型。為對評論數據進行監控、分析,設計針對GooglePlay、百度應用市場等在內的11個移動應用市場的評論數據爬取工具。
評論數據預處理即對評論數據進行過濾篩選,如限定語言、對文本分詞、去掉停用詞等,然后將文本用模型表示進行特征提取,獲取最終的數據集。
2.2.1 定義標簽
為了標注這些評論數據,首先參照移動互聯網惡意代碼描述規范[15]中的定義,將標簽分為惡意扣費、隱私竊取、惡意傳播、誘騙欺詐、流氓行為五類,如表1所示。

表1 用戶評論數據舉例
為了實現對數據的分類與驗證,需要提前(手動)獲得訓練的語料庫,為此將數據分配給兩個組分別進行標簽標記,應用Cohen’s kappa[16]系數對標簽進行評估,初步確立數據集。
2.2.2 語言限定
由于數據的來源不僅僅是國內的應用市場,因此數據集中還存在非中文文本,所以需要對數據集進行語言檢測。
從自然語言處理的角度分析,進行語言檢測實際上是對文本從語言角度進行分類,為此選擇采用langdetect[17]工具。langdetect基于N-Gram模型,通過設置有關語言概率的先驗信息,初始化語言概率圖,再從目標文本中提取相關的N-grams,使用N-grams字符串(N=1,2,3)更新語言概率,對概率進行歸一化處理,返回最大概率的語言名稱。
2.2.3 文本分詞
由于中文文本沒有像英文單詞空格那樣隔開,因此不能直接像英文一樣直接用最簡單的空格和標點符號完成分詞。于是,本文采用jieba[18]分詞算法來實現分詞。
jieba分詞工具實現文本分詞的過程分為三步。(1)通過自帶的詞典生成trie樹。字典在生成樹的同時,把每個詞的出現次數轉換成頻率,根據trie樹對中文文本根據給定的詞典進行查詞操作,生成幾種可能的句子切分。(2)查找帶劃分句子中已經切分好的詞語,對該詞語查找出現的頻率,根據動態規劃查找最大概率路徑的方法,對句子從右往左反向計算最大概率(由于中文文本的主干在后面,因此從右往左的正確率較高)得到最大概率的切分組合。(3)使用HMM模型對未在詞典中的詞語進行識別,如進行地名、人名等未登錄名詞的識別,重新計算最佳切分路徑。
在使用jieba分詞精確模式后,能獲得較理想的分詞結果。
2.2.4 去除停用詞
文本中會存在諸如“啊”“這”等停用詞,這類停用詞對文本分析沒有任何貢獻度,因此通過引入停用詞表將它們從文本中刪除。
2.2.5 詞頻分析
使用的模型是Gerard Salton和McGill[19]提出的向量空間模型。向量空間模型的基本思想是把文檔簡化為以特征項的權重為分量的向量表示(W1,W2,W3,…Wn),其中Wi為第i個特征項的權重,選取詞作為特征項。
這里采用TF-IDF算法[20]。TF-IDF的主要思想是:如果某個詞或短語在一篇文章中出現的頻率高,且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。 TF-IDF算法如下:

式中TF表示詞頻,IDF表示逆文檔頻率。將數據集構建一個詞向量空間,在這個空間中儲存每個詞的權重數據,確立文本與標簽的映射關系,獲得最終實驗數據集。
評論數據預處理后得到的數據集,用來構造并訓練檢測模型,最后用檢測模型對新數據進行分類和檢測。測試不同機器學習分類器的性能,包括樸素貝葉斯、邏輯回歸、支持向量機和決策樹。
在機器學習中,樸素貝葉斯分類器是一類簡單的概率分類器。它基于貝葉斯定理,在特征之間具有很強的獨立性假設。邏輯回歸對于訓練集,利用回歸分析研究文本特征和其所屬類別之間的關聯,預測文本的所屬類別。SVM是具有相關學習算法的監督學習模型,將訓練數據集生成推斷函數,該函數可用于對新實例進行分類。決策樹基于特征屬性分類,算法包括ID3與C4.5。
在比較四種模型的性能后,選擇最優分類器作為惡意應用檢測模型。
本文設計的檢測方法全部使用Python語言能實現,涉及到的工具有jieba和scikit-learn,共搜集到20萬條評論數據存儲在MongoDB數據庫中。物理主機為8 GB內存,處理器為i7-7700,開發環境為64位Win10系統。
為了保證實驗的可靠性和準確性,共計20萬條評論數據來源于Google Play市場中各種不同類別的應用。其中,使用80%的樣本進行訓練,20%的樣本作為測試集。
樣本基于人工分析和數據處理后,通過四種模型進行訓練與測試。實驗結果如表2所示,可看出五種類別在每個模型中檢測的精確度和四種模型的精確度。

表2 性能評估精確率(P%),召回率(R%)和F1%
本文提出的惡意應用檢測方法從檢測指標來看,具有很好的表現,SVM模型相比于其他三種有較好的分類效果。之后的工作中,將選擇SVM模型作為惡意應用檢測模型。
為了驗證基于評論數據的惡意移動應用檢測方法的有效性,對其有效性進行測試。通過從百度手機助手和貼吧等渠道爬取用戶評論,發現了11款惡意應用。圖2為用戶對一款名為溫控拜拜的應用(表3為該應用的基本信息)提出安全方面的 討論。

圖2 用戶評論

表3 應用基本信息
評論數據檢測模型將該評論判定為“流氓行為”,對應的應用存在惡意行為。實際測試表明,該應用運行后會自動彈出廣告,并且自動下載應用,隨后通過virustotal[21]和Janus[22]對該病毒進行了確認,如圖3所示。

圖3 應用界面截圖
本文介紹的是一種基于自然語言處理的通過用戶評論發現惡意應用行為的方法,通過對應用評論進行文本分類,從而確定應用是否存在惡意行為。對獲取到的數據按照移動互聯網惡意代碼描述規范的標準進行類別劃分,嘗試使用四種分類模型訓練數據,獲取較高精準度的檢測模型,進而實現從用戶評論層面檢測包含惡意行為的移動應用。