评估一个安卓应用的安全性,最常见的技术就是静态扫描技术,而静态扫描必定遵循一定规则进行。本扫描体系将静态扫描划项目分成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 详细清单
这里需要说明一下关于唯一标识的定义规则:
![唯一标识说明](http://wiki-1252789527.picsh.myqcloud.com/%E5%94%AF%E4%B8%80%E6%A0%87%E8%AF%86%E8%AF%B4%E6%98%8E.png)
唯一标识总共由六位数字组成,前两位是第几类的意思,后三位代表是该类中的扫描项。如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 检测项详细清单