DeepFlow: Deep Learning-Based Malware Detection by Mining Android Application

題目:

DeepFlow: Deep Learning-Based Malware Detection by Mining Android Application for Abnormal Usage of Sensitive Data
單位:中國科技大學
摘要:
Android的開放性允許應用程序開發人員充分利用系統。雖然這種靈活性給開發人員和用戶帶來了好處,但也可能帶來與惡意應用程序相關的重大問題。傳統的基於簽名或異常行爲的惡意軟件檢測方法在處理新型惡意軟件時是無效的。爲了解決這個問題,機器學習算法被用來自動學習惡意軟件和良性應用程序之間的區別。深度學習作爲機器學習的一個新領域,由於其更好地表徵了樣本,正在迅速發展。我們因此提出一種基於深度學習的新方法,可以直接從Android應用程序的數據流中識別惡意軟件。
我們在成千上萬的善意軟件和惡意軟件上測試DeepFlow。實驗結果表明,深度流能夠獲得較高的F1檢測分值95.05%,優於傳統的基於機器學習的方法,顯示了深度學習技術在惡意軟件檢測中的優勢。
關鍵詞:Keywords-Android惡意軟件檢測;深度學習;數據流;特徵。
介紹:
根據高那德的最近的一份報告,Android手機的出貨量已經大大超過了16億部。2016. 隨着Android智能終端的普及,Android應用市場發展迅速。傳感器報告Tower[15]顯示,在2016年第一季度,用戶從應用程序下載的數量(簡稱應用程序)Android應用市場,像谷歌Play Store和其他第三方市場一樣,高達172億。然而,Android的開放性使這些市場成爲惡意軟件攻擊的熱門目標。一種常見的攻擊手段是上傳惡意軟件,竊取敏感數據到市場。什麼使應用程序具有惡意?一個至關重要的因素是,惡意應用程序對待敏感數據的方式總是不同於良性應用程序。Avdiienko等人在[3]中發現,對於來自每個敏感源的數據,它總是以少量典型的匯聚結束,這在良性和惡意應用程序之間存在很大的差異。在這種情況下,我們可以首先從惡意軟件和(或)benignware,然後分析這些數據流,以確定一個應用程序是否有惡意。
    以前從應用程序中提取敏感數據流的對策主要是動態污染分析機制,它在運行時[7]、[9]期間標記敏感數據並跟蹤其流。這種機制是相當無效的,因爲分析可能會遺漏一些信息流,即如果沒有觸發或觀察到信息流。針對這一問題,提出了一種靜態數據流分析方法。分析將靜態分析app程序,並報告是否存在導致信息泄漏的路徑[2],[18]。從app中提取敏感數據流後,分析這些數據流特徵,判斷app是否有惡意。提出了幾種基於機器學習的技術來訓練從應用程序中提取的特徵,包括靜態特徵[1]、[14]、[19],如所需權限、敏感api、靜態數據流等,以及動態特徵[11],例如可疑行爲、網絡流等。
用於區分惡意軟件和良性軟件的常用機器學習算法包括樸素貝葉斯算法(Naive Bayesian),支持向量機、MLP等。這些方法可以自動檢測新的惡意軟件。然而,傳統的機器學習模型只有不到三層的計算單元。淺層結構會在一定程度上影響檢測效率。
    深度學習是機器學習的一個分支,它基於一組算法,這些算法通過使用具有多個處理層的深度圖(由多個線性和非線性轉換組成的[6])來嘗試對數據中的高級抽象建模。它在人工智能領域得到了廣泛的關注,在圖像分類、自然語言處理等方面有着廣泛的應用。由Guy Caspi和Eli David創立的Deep Instinct,是第一家將深度學習算法應用於安全領域[5]的公司。它可以檢測結構和程序功能的指示
PC惡意軟件通過使用深度學習模型。以前應用深度學習技術檢測Android惡意軟件的工作很少。在[20]中只有一項研究提取了192個特徵,包括權限、api和動態行爲,然後應用深度學習技術來區分惡意軟件和良性應用程序。
 設計師選擇了DBN架構來構建深度學習模型,並對Android應用進行了特徵描述。完成了96.76%的檢測準確率,優於傳統的機器學習模型。
     在本文中,我們構建了一個名爲DeepFlow的Android惡意軟件檢測工具。我們首先利用FlowDroid靜態分析工具[2]從成千上萬的良性和惡意應用程序中提取從所有敏感源到敏感匯的數據流。爲了跟上惡意軟件的進化,我們不斷地從谷歌Play Store抓取良性應用程序,從知名惡意軟件源[1]、[17]抓取惡意應用程序,[21]。然後,我們應用SUSI技術[12]將特徵粒度從方法級轉換爲類別級。在此之後,我們通過應用深度學習技術自動標記具有可疑數據流特徵的應用程序來實現一個分類器。我們的前提是,使用深度架構的深度學習可以演化出高級表示,從而更好地刻畫Android應用程序的特徵。據我們所知,
DeepFlow是第一個區分惡意軟件和善意軟件的方法,它利用深度學習技術來分析應用程序中的數據流。在大量真實應用程序上的實驗表明,與基於傳統機器學習模型的檢測方法相比,使用深度學習技術顯示了我們的優越性。根據我們的分析,我們發現深度學習在Android惡意軟件檢測中很有前途。
     本文的提醒組織如下:在第二節中,我們將介紹FlowDroid的污染分析。在第3節中,我們使用FlowDroid和SUSI技術提取了總共323個數據流特徵。在第四部分,給出了深度學習模型的體系結構,並介紹了深度流的檢測框架。通過與第5節中基於傳統機器學習模型的檢測方法進行對比,我們找到了最佳的深度學習結構並展示了我們的優越性。最後,我們以第六部分的結論和未來的工作結束。
     2用FLOWDROID進行污染分析
DeepFlow使用靜態污染分析工具FlowDroid來識別Android應用程序中的敏感數據流。我們選擇
因爲它是完全上下文、流、字段和對象敏感的,同時精確地建模Android生命週期,包括在應用程序中正確地處理用戶定義的UI小部件。一個Android應用程序包含多個組件,比如Activity、Service、Content Provider和Broadcast
接受者,其中活動是靜態分析的主要入口。與普通的Java程序不同,Android應用程序沒有主功能。與普通Java程序不同,Android應用程序中沒有main函數。因此,我們無法通過main函數定位程序的入口和出口來構建控制流圖。然而,每個Android組件都採用一些方法來反映其生命週期。FlowDroid通過對這些生命週期建模來構建Android應用程序的控制流圖。我們可以從an的生命週期中發現活動組件[2]與傳統的單入口和單出口結構不同,活動組件可以在任何節點上以任何順序執行。除了onCreate()、onStart()、onDestroy()等生命週期函數之外,活動組件還包含各種回調,它們通知應用程序系統事件或GUI事件。要識別Android應用中的敏感數據流,首先,FlowDroid搜索生命週期和回調方法,以及對源和匯的調用。接下來,爲了構建控制流圖,FlowDroid創建了一個虛擬的main函數來模擬所有這些註冊的事件處理程序和組件之間的交互。基於這個虛擬的主函數,FlowDroid分析可以訪問的所有函數,並在這些函數之間構建控制流。在這種情況下,啞主函數被視爲an的唯一入口
這大大簡化了分析過程。
此外,FlowDroid將數據流分析形式化爲IFDS框架[13]上的污染分析。對於每個敏感源,FlowDroid都將其作爲基於控制流圖的污染分析過程的起點。FlowDroid結合了前向污點分析和按需後向別名分析。最後,FlowDroid可以報告從敏感源到應用程序中的匯點的所有發現流量。
III. FEATURE EXTRACTION
單App特徵提取
對於每個應用程序,我們所需要的只是安裝文件。apk文件)。DeepFlow使用FlowDroid從所有敏感源提取所有敏感數據流到所有敏感匯。清單1顯示了Android應用程序如何泄漏用戶隱私數據的示例。然後,我們詳細介紹瞭如何使用FlowDroid來獲得數據流的特性。清單1所示的示例通過調用百度Map提供的API讀取手機的位置信息(包括經度、緯度和詳細地址),並通過SMS將其發送到常數電話號碼“+1 11”。
真實世界惡意軟件常見攻擊模式的縮影,反映了來自LocationClient的敏感數據流。(源)到SMS API(接收器)。然而,在真實的惡意軟件中,源和接收器之間的路徑要複雜得多。FlowDroid中的數據流分析由兩部分組成:跟蹤污染值的正向污染傳播和解決堆模型中的別名問題的按需向後別名分析。圖1展示了FlowDroid如何在清單1所示的示例應用程序中,通過以下步驟提取從源到接收器的數據流:
步驟1~3:經度、緯度和細節,作爲從來源獲得的變量,被污染,並正向傳播到方法loc(細節、緯度、經度);
步驟4~6:在調用被調用方法loc(detail, latitude, longitude)時,detail、latitude和longitude是形式參數。我們對調用者進行反向分析,發現a、b和c實際上是細節、緯度和經度的別名。污染他們。
第七步:繼續跟蹤a, b, c,然後污染l;
第8步:l,作爲返回值,被映射回調用者。
因此,可變位置被污染了。分析可以識別出存在一個匯聚的位置。
FlowDroid是上下文敏感的,所以它可以用不同的參數區分對loc()方法的不同調用。
更重要的是,它使用特殊的手工編寫的摘要來調用沒有源代碼可用的庫方法。它適應了大量的優化,擴大了操作規模,減少了噪音,從而提供了大量高質量的輸入數據,在此基礎上訓練了DeepFlow的深度處理方法。這樣,DeepFlow可以從應用程序中提取所有敏感數據流。結果可以表示爲一組對像:流(app) = {source1→sink1, source1→sink2,尀},這裏每個sourcei sinki是一個敏感的Android API方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章