多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 1 SSL连接检测 # 08001 URL没有使用SSL安全协议。 风险等级:`提示` 问题示例: 所有不使用https的url字符串常量 建议: * 如果使用https协议加载url,应用进行证书校验防止访问的页面被篡改挂马 * 如果使用http协议加载url,应进行白名单过滤、完整性校验等防止访问的页面被篡改 * 如果加载本地html,应将html文件内置在apk中,以及进行对html页面完整性的校验 ## 2 SSL不安全组件检测 # 08002 SSLCertificateSocketFactory#getInsecure方法无法执行SSL验证检查,使得网络通信遭受中间人攻击。 风险等级:`提示` 问题示例: 检测是否使用了SSLCertificateSocketFactory#getInsecure方法 建议: 移除SSLCertificateSocketFactory#getInsecure方法。 ## 3 HttpHost检测 # 08003 `HttpHost target = new HttpHost(uri.getHost(), uri.getPort(), HttpHost.DEFAULT_SCHEME_NAME);` HttpHost.DEFAULT_SCHEME_NAME默认是http,不安全。 问题示例: 检测HttpHost使用的参数是否是`http` 建议: 改成使用`https` ## 4 HttpURLConnection漏洞检测 # 08004 在`Android 2.2`版本之前,HttpURLConnection一直存在着一些令人厌烦的bug。比如说对一个可读的InputStream调用close()方法时,就有可能会导致连接池失效了。 风险等级:`低危` 问题示例: 判断使用HttpURLConnection是否进行了版本判断 建议: 判断Android版本,并设置http.keepAlive为false。 ``` private void disableConnectionReuseIfNecessary() { // 解决Android Froyo(Androdi 2.2)版本之前,在HTTP连接重用时会出现的BUG if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) { System.setProperty("http.keepAlive", "false"); } } ``` ## 5 网络端口开放威胁检测 # 08005 Android应用通常使用`PF_UNIX`、`PF_INET`、`PF_NETLINK`等不同domain的socket来进行本地IPC或者远程网络通信,这些暴露的socket代表了潜在的本地或远程攻击面,历史上也出现过不少利用socket进行拒绝服务、root提权或者远程命令执行的案例。特别是`PF_INE`T类型的网络socket,可以通过网络与Android应用通信,其原本用于linux环境下开放网络服务,由于缺乏对网络调用者身份或者本地调用者id、permission等细粒度的安全检查机制,在实现不当的情况下,可以突破Android的沙箱限制,以被攻击应用的权限执行命令,通常出现比较严重的漏洞。 风险等级:`低危` 建议: 直接传递命令字或者间接处理有敏感信息或操作时,避免使用socket实现,使用身份认证、鉴权、参数校验等安全要素。