評估一個安卓應用的安全性,最常見的技術就是靜態掃描技術,而靜態掃描必定遵循一定規則進行。本掃描體系將靜態掃描劃項目分成12個大類,細分為76子項目,依次對每個項目進行評估,對每項給出高危、中危、低危、警告、提醒和安全的標識,最終完成一套完整的應用掃描評估體系。該部分將會詳細介紹所有的掃描檢測項目,以及其相應的風險評級標準。
### 1 有哪些檢測項目?
該掃描體系涉及共12類大項目,細分為總共82個小項目(表1),詳細的檢測清單見表2。其中**前三大類**是應用的基本信息共12項,不具備風險等級的屬性;**后九大類**,總共有70項,每一項均具備風險等級屬性。該體系設定了高危、中危、低危、提醒和安全六個風險等級,應用在完全評估后,每個檢測項都會給出一個對應的風險等級。
12類風險掃描項涵蓋了大部分安卓應用存在的風險點。
| 類 | 子項目 | 描述 |
|:------------:|:--------:|---------------------|
| 1 | 7 | 文件信息 |
| 2 | 1 | 權限信息檢測 |
| 3 | 4 | 四大組件 |
| 4 | 8 | Menifest文件檢測 |
| 5 | 11 | 組件安全檢測 |
| 6 | 9 | Webview組件安全檢測 |
| 7 | 5 | Sqlite安全檢測 |
| 8 | 5 | 網絡通信安全檢測 |
| 9 | 6 | 弱加密風險檢測 |
| 10 | 12 | 數據安全檢測 |
| 11 | 11 | 敏感函數調用檢測 |
| 12 | 3 | 系統漏洞檢測 |
| 共12類 | 82個子項目 | |
:-: 表1 檢測項目總覽表
### 2 詳細清單
這里需要說明一下關于唯一標識的定義規則:

唯一標識總共由六位數字組成,前兩位是第幾類的意思,后三位代表是該類中的掃描項。如03004,代表第三類中的第四個掃描項;10011代表第十類中的第11個掃描項。
| 項目序號 | 唯一標識 | 風險描述 | 風險等級 | 檢測方式 |
|----|-------|-----------------------------------------------------------|:------:|:------:|
| 1 | 01001 | 文件名 | 無 | `靜態` |
| 2 | 01002 | 文件大小 | 無 | `靜態` |
| 3 | 01003 | MD5 | 無 | `靜態` |
| 4 | 01004 | 包名 | 無 | `靜態` |
| 5 | 01005 | Main Activity | 無 | `靜態` |
| 6 | 01006 | Min SDK | 無 | `靜態` |
| 7 | 01007 | Target SDK | 無 | `靜態` |
| 8 | 02001 | 權限信息檢測 | 無 | `靜態` |
| 9 | 03001 | Activity組件 | 無 | `靜態` |
| 10 | 03002 | Service組件 | 無 | `靜態` |
| 11 | 03003 | BroadcastReceiver組件 | 無 | `靜態` |
| 12 | 03004 | ContentProvider組件 | 無 | `靜態` |
| 13 | 04001 | AndroidManifest文件中PermissionGroup檢測 | `提醒` | `靜態` |
| 14 | 04002 | AndroidManifest文件中系統權限使用檢測 | `提醒` | `靜態` |
| 15 | 04003 | AndroidManifest文件中ProtectionLevel權限檢測 | `提醒` | `靜態` |
| 16 | 04004 | AndroidManifest sharedUserId檢測 | `提醒`,`高危` | `靜態` |
| 17 | 04005 | allowBackup標志檢測 | `低危` | `靜態` |
| 18 | 04006 | Debuggable配置檢測 | `高危` | `靜態` |
| 19 | 04007 | 非必要權限檢測 | `提醒` | `靜態` |
| 20 | 04008 | app最低版本檢測 | `展示` | `靜態` |
| 21 | 05001 | Activity組件導出檢測 | `中危` | `靜態` |
| 22 | 05002 | Service組件導出檢測 | `中危` | `靜態` |
| 23 | 05003 | Receiver組件導出檢測 | `中危` | `靜態` |
| 24 | 05004 | Provider組件導出檢測 | `高危` | `靜態` |
| 25 | 05005 | Provider: grant-uri-permission屬性檢測 | `提醒` | `靜態` |
| 26 | 05006 | Intent-Based攻擊檢測 | `低危` | `靜態` |
| 27 | 05007 | Intent Scheme URL漏洞攻擊檢測 | `高危` | `靜態` |
| 28 | 05008 | 應用本地拒絕服務器漏洞檢測 | `低危` | `靜態` |
| 29 | 05009 | manifest中定義組件未實現檢測 | `中危` | `靜態` |
| 30 | 05010 | Debug或Test敏感測試組件泄露檢測 | `中危`,`低危` | `靜態` |
| 31 | 05011 | Intent不安全反射風險檢測 | `低危` | `靜態` |
| 32 | 06001 | Webview遠程執行漏洞檢測 | `提醒` | `靜態` |
| 33 | 06002 | WebView潛在XSS攻擊檢測 | `提醒` | `靜態` |
| 34 | 06003 | WebView本地文件訪問漏洞檢測 | `高危` | `靜態` |
| 35 | 06004 | WebView密碼明文存儲漏洞檢測 | `提醒` | `靜態` |
| 36 | 06005 | 主機名弱校驗檢測 | `中危` | `靜態` |
| 37 | 06006 | 證書弱校驗檢測 | `中危` | `靜態` |
| 38 | 06007 | 中間人攻擊漏洞檢測 | `中危` | `靜態` |
| 39 | 06008 | WebView不校驗證書漏洞檢測 | `中危` | `靜態` |
| 40 | 06009 | WebView組件系統隱藏接口未移除漏洞 | `低危` | `靜態` |
| 41 | 07001 | SQLite數據庫加密(SQLCipher)檢測 | `展示` | `靜態` |
| 42 | 07002 | SQLite數據庫加密拓展(SQLite Encryption Extension,SEE)檢測 | `展示` | `靜態` |
| 43 | 07003 | SQLite數據庫的對稱密鑰檢測 - 未實現 | `提醒` | `靜態` |
| 44 | 07004 | SQLite Database Transaction Deprecated(SQL注入)檢測 - 未實現 | `所有` | `動態` |
| 45 | 07005 | Databases任意讀寫漏洞檢測 - 廢棄 | `中危` | `靜態` |
| 46 | 08001 | SSL不安全組件檢測 | `提醒` | `靜態` |
| 47 | 08002 | SSL連接檢測 | `提醒` | `靜態` |
| 48 | 08003 | HttpHost檢測 | `提醒` | `靜態` |
| 49 | 08004 | HttpURLConnection漏洞檢測 - 廢棄 | `低危` | `靜態` |
| 50 | 08005 | 網絡端口開放威脅檢測 | `低危` | `混合` |
| 51 | 09001 | 弱加密算法風險檢測 | `低危` | `靜態` |
| 52 | 09002 | 不安全的密鑰長度風險檢測 | `低危` | `靜態` |
| 53 | 09003 | ECB弱加密模式風險檢測 | `低危` | `靜態` |
| 54 | 09004 | IVParameterSpec不安全初始化向量風險檢測 | `低危` | `混合` |
| 55 | 09005 | RSA中不使用Padding風險檢測 | `低危` | `靜態` |
| 56 | 09006 | 檢測keystore是否使用密碼保護 - 未實現 | `高危` | `動態` |
| 57 | 10001 | 敏感信息檢測 | `展示` | `靜態` |
| 58 | 10002 | 剪貼板敏感信息泄露風險檢測 | `展示` | `靜態` |
| 59 | 10003 | Intent敏感數據泄露風險檢測 | `提醒` | `靜態` |
| 60 | 10004 | PendingIntent誤用風險 | `中危` | `靜態` |
| 61 | 10005 | 密鑰硬編碼風險檢測 | `提醒` | `靜態` |
| 62 | 10006 | 數據或程序加載檢查 - 未實現 | `提醒` | `動態` |
| 63 | 10007 | BASE64安全檢測 | `展示` | `靜態` |
| 64 | 10008 | 文件全局讀寫漏洞檢測 | `中危` | `靜態` |
| 65 | 10009 | 日志泄露風險檢測 | `提醒` | `靜態` |
| 66 | 10010 | 外部加載Dex檢測 - 去掉 | `高危` | `靜態` |
| 67 | 10011 | 外部存儲路徑檢測 - 未實現 | `提醒` | `動態` |
| 68 | 10012 | 明文數字證書風險 - 未實現 | `警告` | `靜態` |
| 69 | 11001 | 安全相關的函數檢測 | `提醒` | `靜態` |
| 70 | 11002 | 安全相關的類檢測 | `提醒` | `靜態` |
| 71 | 11003 | 運行命令檢測 | `提醒` | `靜態` |
| 72 | 11004 | Native Library加載檢測 | `提醒` | `靜態` |
| 73 | 11005 | 外部動態加載DEX檢測 | `高危` | `混合` |
| 74 | 11006 | root代碼檢測 | `提醒` | `靜態` |
| 75 | 11007 | 獲取IMEI和Device ID敏感信息代碼檢測 | `提醒` | `靜態` |
| 76 | 11008 | 獲取Android ID敏感信息代碼檢測 | `提醒` | `靜態` |
| 77 | 11009 | 發送SMS敏感代碼檢測 | `提醒` | `靜態` |
| 78 | 11010 | 文件刪除代碼檢測 | `提醒` | `靜態` |
| 79 | 11011 | signature代碼檢測 | `提醒` | `靜態` |
| 80 | 12001 | fragment注入漏洞檢測 | `中危` | `靜態` |
| 81 | 12002 | sqlite數據庫日志泄露漏洞檢測 | `低危` | `靜態` |
| 82 | 12003 | 隨機數生成漏洞檢測 | `高危` | `靜態` |
:-: 表2 檢測項詳細清單