• 沒有找到結果。

第四章 實證與評估

4.5 實驗結果

在本研究之實驗中,將會評估 1. 利用五個分類演算法分別為梯度提升、極限梯度 提升、決策樹、支援向量機以及單純貝氏分類,何種分類演算法對於分類 Android 惡 意程式具有較好之效果。 2. 在不同的特徵資訊類別(應用程式權限請求、Android API 函式呼叫、Android API 函式呼叫順序)組合中,何種特徵資訊的組合對於分類 Android 惡意程式具有較好的分類效果。3. 在不同的特徵資訊類別組合下,利用資訊獲利、獲 利比率,單一規則所取得的何種特徵數量對於分類 Android 惡意程式具有較佳的分類 效果。

在本研究實際透過資訊獲利、獲利比率,以及單一規則此三種特徵篩選方法篩選 完後,結果顯示在三者所篩選出來的特徵中,以資訊獲利中的變數與其他兩者特徵篩 選方法之交集變數最多,因此本研究認為以資訊獲利之方法較具代表性。以下將根據 資訊獲利篩選特徵後,分別挑選排名前十個特徵、排名前二十個特徵、排名前三十個 特徵、排名前四十個特徵、排名前六十個特徵、排名前八十個特徵以及排名前一百個 特徵,對於各個特徵資訊組合在不同的分類演算法之分類結果進行說明。為了方便說 明,在表格中分別以 Permission 代表應用程式權限,API 代表 Android API 函式呼叫,

API Sequence 代表 Android API 函式呼叫順序。

26

表 3 資訊獲利排名前十名之各個特徵類別組合之實驗結果

Classifier Feature Set Accuracy Precision Recall F1-Score

API Sequence

92.3% 95.7% 88.6% 92.0%

Permission, API

87.5% 87.0% 88.2% 87.6%

Permission, API Sequence

91.1% 93.8% 88.0% 90.8%

API, API Sequence

92.1% 95.7% 88.2% 91.8%

Permission, API, API Sequence

27

Classifier Feature Set Accuracy Precision Recall F1-Score

API Sequence

94.0% 94.4% 93.6% 94.0%

Permission, API

87.3% 86.8% 88.0% 87.4%

Permission, API Sequence

95.3% 96.3% 94.2% 95.2%

API, API Sequence

94.1% 94.0% 94.2% 94.1%

XGBoost 93.0% 93.2% 92.8% 93.0%

Decision Tree 94.2% 93.8% 94.6% 94.2%

SVM 94.3% 93.9% 94.8% 94.3%

28

Naïve Bayes 93.3% 94.1% 92.4% 93.2%

GBM

Permission, API, API Sequence

Classifier Feature Set Accuracy Precision Recall F1-Score

API Sequence

93.9% 94.0% 93.8% 93.9%

Permission, API

87.3% 87.1% 87.6% 87.3%

Permission, API Sequence

95.9% 95.8% 96.0% 95.9%

29

Permission, API, API Sequence

Classifier Feature Set Accuracy Precision Recall F1-Score

API Sequence

93.7% 93.8% 93.6% 93.7%

Permission, API

87.0% 86.6% 87.6% 87.1%

Permission, API Sequence

95.6% 95.4% 95.8% 95.6%

XGBoost 95.9% 96.2% 95.6% 95.9%

Decision Tree 96.8% 97.8% 95.8% 96.8%

SVM 96.4% 96.6% 96.2% 96.4%

Naïve Bayes 94.2% 94.9% 93.4% 94.2%

30

GBM

API, API Sequence

94.4% 95.1% 93.6% 94.4%

Permission, API, API Sequence 96.4%,而 F1-Score 則有 97%。我們發現當特徵數量取到四十個時,各項指標已經與三 十個特徵數量時差異不大。

表 7 資訊獲利排名前六十名之各個特徵類別組合之實驗結果

Classifier Feature Set Accuracy Precision Recall F1-Score

API Sequence

93.7% 93.8% 93.6% 93.7%

Permission, API

87.5% 87.0% 88.2% 87.6%

Permission, API Sequence

96.0% 96.4% 95.6% 96.0%

31

Decision Tree 93.9% 94.7% 93.0% 93.8%

SVM 95.1% 95.9% 94.2% 95.1%

Naïve Bayes 91.3% 93.8% 88.4% 91.0%

GBM

Permission, API, API Sequence 96.8%,而 F1-Score 則有 97.4%。雖然在各項指標比起四十個時有些許上升,但仍然差 距不大。

表 8 資訊獲利排名前八十名之各個特徵類別組合之實驗結果

Classifier Feature Set Accuracy Precision Recall F1-Score

API Sequence

93.9% 94.0% 93.8% 93.9%

Permission, API

87.7% 87.2% 88.4% 87.8%

Permission, API Sequence

96.1% 96.4% 95.8% 96.1%

API, API Sequence

94.8% 95.3% 94.2% 94.8%

XGBoost 95.1% 96.7% 93.4% 95.0%

Decision Tree 94.3% 95.7% 92.8% 94.2%

SVM 95.4% 96.5% 94.2% 95.3%

32

Naïve Bayes 89.8% 93.8% 85.2% 89.3%

GBM

Permission, API, API Sequence

Classifier Feature Set Accuracy Precision Recall F1-Score

API Sequence

94.3% 94.6% 94.0% 94.3%

Permission, API

87.9% 86.8% 89.4% 88.1%

Permission, API Sequence

96.5% 96.8% 96.2% 96.5%

API, API Sequence

94.2% 94.7% 93.6% 94.2%

33

XGBoost

Permission, API, API Sequence

96.0% 96.0% 96.0% 96.0%

Decision Tree 96.3% 97.1% 95.4% 96.3%

SVM 97.3% 97.6% 97.0% 97.3%

Naïve Bayes 92.6% 94.2% 90.8% 92.5%

最後當本研究之特徵數量取至前一百名時如表 9 時,又改為以三項特徵類別所組 合而成之特徵資料集有最佳的分類效果,有準確率 97.3%,且精確率和召回率分別為 97.6%和 97%,而 F1-Score 則有 97.3%。各項指標仍然與取至前三十名差距不大。

整體而言,在五種分類演算法中以決策樹分類法之表現最佳,其次為支援向量機,

而單純貝氏分類較差。單獨比較應用程式權限、Android API 函式呼叫,以及 Android API 函式呼叫順序。本研究發現,無論特徵數量為何,對於分類惡意程式之效果,

Android API 函式呼叫順序之重要程度皆大於 Android API 呼叫和應用程式權限,顯示 順序確實對於分類效果有明顯效益。並且在挑選特徵數量時,以特徵數量為三十個時 即有相當不錯的分類效果。因此對於偵測 Android 惡意程式,本研究建議以決策樹演 算法較為適合,且特徵數量可限縮在三十個特徵。

此外,在本研究中,以應用程式權限要求、 Android API 函式呼叫以及 Android API 函式呼叫順序此組合而成之特徵類別在特徵數量為三十時,對於分類惡意程式即 可有相當好的分類預測效果。而此三十個特徵數量為透過資訊獲利來計算在分類預測 中,對於分類效果排名前三十個變數,並由應用程式權限要求、 Android API 函式呼叫 以及 Android API 函式呼叫順序此三類特徵資訊所組成。因此我們將各項特徵篩選方法 取出各個排名前三十個特徵並將重複的數值去除,共有 48 個特徵,而此 48 個不同的 變數其結果如表 10 所示。

34

表 10 三種特徵篩選方法排名前三十之特徵聯集

Number Category Feature Information

Gain

Gain Ratio

OneR

1 Permission android.permission.SYSTEM_ALERT_WINDOW   

2 Permission android.permission.CHANGE_NETWORK_STATE   

3 Permission android.permission.CHANGE_WIFI_STATE   

4 Permission android.permission.READ_SMS   

5 Permission android.permission.SEND_SMS   

6 API

Sequence

Ljava/io/File exists,Ljava/lang/Throwable printStackTrace   

7 Permission android.permission.RECEIVE_SMS   

8 API

Sequence

Ljava/io/File <init>,Ljava/lang/Throwable printStackTrace   

9 Permission android.permission.SYSTEM_OVERLAY_WINDOW  

10 API

Sequence

Ljava/io/File <init>,Ljava/io/ByteArrayOutputStream write   

11 API

Sequence

Ljava/lang/String substring,Ljava/lang/RuntimeException <init>   

12 API

Sequence

Ljava/io/File exists,Ljava/io/ByteArrayOutputStream <init>  

13 API

Sequence

Ljava/io/File getAbsolutePath,Ljava/lang/Throwable printStackTrace  

14 API

Sequence

Ljava/io/ByteArrayOutputStream write,Ljava/lang/Throwable printStackTrace

 

15 API

Sequence

Ljava/io/File exists,Ljava/io/InputStream read  

16 API

Sequence

Ljava/lang/String toLowerCase,Ljava/lang/Throwable printStackTrace  

17 API Landroid/view/ViewGroup indexOfChild   

18 Permission android.permission.READ_PHONE_STATE  

19 API Landroid/net/Uri$Builder appendPath   

20 API

Sequence

Landroid/net/Uri$Builder

appendQueryParameter,Landroid/net/Uri$Builder build

  

21 API

Sequence

Landroid/net/Uri$Builder appendPath,Landroid/net/Uri$Builder build   

22 API

Sequence

Ljava/lang/StringBuilder toString,Ljava/lang/Integer valueOf   

23 API Landroid/net/Uri parse  

24 API

Sequence

Landroid/content/Intent <init>,Ljava/lang/StringBuilder append  

25 API

Sequence

Ljava/io/File <init>,Ljava/io/ByteArrayOutputStream <init>  

26 API

Sequence

Ljava/io/File <init>,Ljava/io/InputStream read  

27 API

Sequence

Ljava/lang/StringBuilder append,Ljava/lang/Integer valueOf 

28 API Landroid/net/Uri getScheme  

29 API

Sequence

Ljava/lang/String valueOf,Ljava/lang/StringBuilder append 

30 API

Sequence

Landroid/content/Intent <init>,Ljava/lang/StringBuilder toString 

31 API

Sequence

Ljava/lang/String substring,Ljava/lang/Throwable printStackTrace 

32 API

Sequence

Ljava/io/File delete,Ljava/lang/Throwable printStackTrace 

33 Permission android.permission.EXPAND_STATUS_BAR 

34 API

Sequence

Ljava/io/File getAbsolutePath,Ljava/io/InputStream read 

35 API

Sequence

Ljava/io/ByteArrayOutputStream

<init>,Ljava/util/zip/InflaterInputStream <init>

36 Permission android.permission.DISABLE_KEYGUARD 

35

37 Permission android.permission.WRITE_SMS 

38 API Landroid/net/Uri toString 

39 API Ljava/lang/String endsWith 

40 API Landroid/app/Activity finish 

41 API

Sequence

Ljava/lang/Object getClass,Ljava/lang/Class getSimpleName 

42 API

Sequence

Ljava/lang/StringBuilder <init>,Ljava/lang/Class getSimpleName 

43 API

Sequence

Ljava/lang/Math min,Ljava/lang/Math min 

44 API

Sequence

Ljava/lang/StringBuilder toString,Ljava/lang/Math min 

45 API

Sequence

Ljava/lang/String startsWith,Ljava/lang/String length 

46 API

Sequence

Ljava/io/File <init>,Ljava/io/InputStream close 

47 API Landroid/app/Activity getIntent 

48 API

Sequence

Ljava/lang/StringBuilder append,Ljava/lang/Math min 

表 10 中,為此次實驗結果中以應用程式權限、Android API 函式呼叫以及 Android API 函式呼叫順序所組成,並使用三種特徵篩選方法分別為資訊獲利、獲利比率以及 單一規則所篩選出排名前三十名之特徵變數之聯集。由表 10 中可得知在前三十名的變 數 中 , 在 三 個 篩 選 特 徵 方 法 之 前 幾 名 皆 為 Android 應 用 程 式 權 限 , 其 中 SYSTEM_ALERT_WINDOW 權限為排名第一名,此權限能夠允許開發者使用全域性 彈出對話方塊,也就是在使用者手機螢幕上彈出一對話框,如果對話框的大小足夠大,

則能夠覆蓋住所有應用程式之上,導致使用者無法進行其他操作,除非徹底關閉此應 用程式。此權限常見於惡意廣告程式中,透過此方法,可以強迫使用者點擊廣告,亦 或是被用於勒索軟體中,如果使用者無法輸入正確的密碼,便無法操作手機畫面,以 此勒索受害者支付贖金。此外,在排名第二和第三之 CHANGE_NETWORK_STATE 權限和 CHANGE_WIFI_STATE 權限則是與網路連接狀態有關,在惡意程式中,駭客 經常為了與被害者手機系統建立連線管道或是遠端操控被害者之行動裝置系統,通常

36

(Ljava/io/File 類別)的使用較多,例如判斷檔案的存在與否、檔案建立,讀寫檔案等操 作,並進一步透過 (Ljava/io/ByteArrayOutputStream) 類別中 write 函式將之內容輸出至 檔 案 中 ,如 編 號 第 12 之 變 數 (Ljava/io/File exists -> Ljava/io/ByteArrayOutputStream

<init>) , 第 一 個 函 式 呼 叫 功 能 為 確 認 某 名 稱 之 檔 案 是 否 存 在 , 接 著 透 過 ByteArrayOutputStream 進行寫入檔案此操作。以及 (Landroid/net/Uri) 此類別的使用,

此類別能夠讀取手機上的共享資源,透過給予特定的字串資源,就能完成特定操作,

如讀取聯絡人、簡訊,手機號碼等等,也能進行撥打電話,瀏覽網頁,發送簡訊,是 在惡意程式中經常使用的 Android API 函式。因此我們可以在順序的特徵中,發現此 Uri 類別的 API 函式經常與字串操作之 API 函式一同出現。從此次實證評估中,我們可 以推測在判斷惡意程式時,存取特定資源以及進行網路傳輸或是簡訊操作,會是非常 重要的分類變數。最後在此次實驗結果顯示也如同本研究所預期之結果,使用權限、

Android API 函式呼叫以及 Android API 函式呼叫順序確實有更佳的分類效果。

37

相關文件