移动互联网时代,新威胁不断升级,安全问题频发,面对用户对手机APP安全性的更高要求,和更严格的安全性监管,需要构建高效完备的安全评估能力,以期全面提升自动化安全检测覆盖度与准确率。分为四个方面:

1. 智能终端APP新威胁与安全评估

2. DevSecOps与安全评估

3. 安全评估效率与质量提升实践

4. 总结

智能终端APP新威胁与安全评估

01 基础安全风险项

说起Android移动端安全评估,下面这些项经常出现在Android安全评估入门学习列表以及乙方安全公司检测评估报告中

  • 弱加密算法

  • 密钥硬编码

  • 本地拒绝服务

  • SharedPrefs任意读写

  • PendingIntent误用风险

  • AndroidManifest文件配置错误

  • Zip文件目录遍历

  • 端口监听

  • 本地SQL注入

  • Java代码未混淆

  • 敏感函数调用

  • 动态注册广播

  • Provider文件目录遍历

  • Webview明文保存密码

  • 组件导出

  • ...

这些基础安全风险项时至今日仍然很重要:

基础的安全风险项可能会导致更严重的安全漏洞,很多公司把这些项梳理成checklist,做为安全基线执行

客户特别是国外客户提出的安全需求也会涉及到上述测试项

国内外测评机构用这些项来衡量代码安全质量

获取安全认证时,上述部分项是必须满足项

上述基础安全风险项自动化评估相对容易

02 高风险漏洞

如今的智能终端提供丰富的智慧服务,方面人们的生产生活,同时复杂的系统与丰富的业务生态场景,会带更多的攻击面与安全新威胁。这里列举三个典型案例攻击模型:

1、 Webview

Webview是一个基于webkit的引擎,可以解析DOM元素,展示html页面的控件,Android开发中出现频率非常高。攻击模型如下所示:

Attack APP通过Intent、Binder调用、端口等跨进程通信方式将恶意URL传入到Victim APP中,或者访问恶意站点的浏览器通过Deeplink同样可以传入恶意URL。Victim APP中的Webview加载传入的恶意URL,由于Webview不安全设置,域名白名单校验存在缺陷可被绕过,存在高危的Java本地函数可被JS调用等原因导致诸多危害。

例如Victim APP中存在静默下载APK的Java本地代码并且通过@addJavascriptInterface注解导出可被JS调用,如果域名白名单校验不完整,容易导致用户手机远程被安装恶意应用;应用中具有导出的下载文件的java本地函数并且存在目录遍历漏洞,可导致下载的恶意文件覆盖掉应用中正常的jar或者so文件,导致RCE。还有访问恶意域名时请求中带上登录凭证,导致凭证信息泄露等。

该攻击模型业务逻辑复杂,往往涉及诸多参数与条件判断,自动化安全评估难度较大。

2、提权

这类攻击模型如下图所示:

高权限应用或者root进程提供服务给可信的低权限应用调用,随着开发者安全意识的增强,会对服务调用方进行严格的身份校验。低权限APP随意导出组件,导致恶意APP通过导出的组件间接调用高权限应用或者root进程提供的服务,从而提升权限或者获取用户隐私数据,或者攻击正常应用。

该攻击模型需要识别应用间的调用关系与服务调用方传参入口,完全自动化检测难度较大。

3、 框架服务调用

这类攻击模型如下图所示:

Android中应用APP会用到系统Server提供的服务,其中有些Server是Android 原生自带的,有些是OEM厂商定制添加,可以通过adb命令service list 查看,如果注册的系统服务函数接口身份校验不严或者权限控制不当,恶意应用通过反射或者binder调用高危函数接口获取隐私数据或者攻击其它应用。

这类服务通常在框架层实现,单纯评估APP无法涵盖高纬攻击,特殊攻击面需要特殊对待。

03 安全评估能力建设思考点

综述上文分析,安全评估能力建设时,需要考虑如下两个点:

针对基础安全风险项:

1.安全检测项覆盖全面

2.安全支撑文档完善

3.安全评估流程融入

4.安全评估效率与质量

针对安全漏洞

1.FUZZ中低风险漏洞

2.自动化信息收集

3.专家团队挖掘高危漏洞

上述大部分项安全团队内部可以解决,其中安全评估流程融入、安全评估效率与质量需要结合DevSecOps全局考虑。

DevSecOps与安全评估

DevSecOps在DevOps的流程节点中加入了安全活动节点。Android APP研发生命周期中,加入的安全节点大致如下图所示:

对于安全评估,可以在需求阶段对引入的三方SDK进行安全评估;编码阶段借助IDE插件对源代码进行安全扫描;构建debug包时APK中嵌入hook插件进行动态安全检测;测试阶段对APK进行整体的安全检测,包括工具测试与专家安全评估等。实践中发现如下两个问题至关重要:

1、安全评估流程融入: 如何做到流程节点管控能力强,不被跳过,同时流程又能有助于安全评估?

2、DevOps追求敏捷开发,如何提高安全评估效率与质量?关于这个问题,笔者认为高效安全检测引擎与工具,丰富的专家经验至关重要,会在下节详细讲解。

关于上文第1个点,各家公司的情况都不一样,这里拿三方SDK安全评估举例,供大家发散与思考。我们的目标是三方SDK需求阶段安全评估合格。

1、流程节点不可跳过

三方SDK的引入,最终都会走商务合同,可以跟商务流程关联,负责商务的同学流程中未收到安全评估合格报告不签署最终商务合同。所以负责开发对接的同学,再有合作意愿时都会事先提交安全评估单。技术上,在拉基线构建release包时进行APK新增成分分析,出现新增SDK未经安全评估或评估不合格的情况,打包失败。

2、 多方合作

模块开发负责人: 提供模块信息,如模块包名、模块版本号、引入SDK版本、用途等。

SDK提供方:提供SDK基础信息,如是否联网、是否自升级、申请权限、采集数据列表、安全自检报告等。

引入方安全工程师:对SDK进行安全评估,评估内容包括安全问题与隐私合规风险等,输出安全评估报告供SDK提供方修改问题,并对修复后的问题做审核。

3、 SDK模块复用

模块开发负责人将安全评估合格后的三方SDK上传到平台统一管理,方便其它模块复用,减少安全评估工作量。

4、 应急响应

引入方安全工程师将模块信息、评估出的安全问题、三方SDK指纹同步到数据管理平台,当三方SDK出安全漏洞或者隐私合规问题时能够快速应急响应

安全流程很难一下子做到完美,需要去糟取精、查漏补缺、精简有效。

安全评估效率与质量提升实践

01 编码与构建安全评估

IDE源码插件化检测与插桩动态检测相结合,具体如下图所示:

IDE 插件访问配置服务器,释放gradle配置文件与aar规则包,也可通过gradle配置文件去maven仓库下载规则包。gradle使用aar规则包对源代码进行静态扫描,输出静态扫描结果。

当构建debug包时,打入基于ASM构建的gradle hook插件,将敏感函数调用替换到自实现函数中,在测试同学进行功能测试时,检测出敏感信息打印、http传输、不安全加密算法等基础安全风险项。

02 静态评估引擎

在测试阶段先使用静态工具扫描,静态评估引擎如下:

通过浏览器上传或调用开放API的方式将检测文件上传到评估平台,后端识别文件类型后将可检测文件上传到文件服务器,并发送检测请求到消息队列,分析引擎进行文件反编译和静态检测,检测项包括配置文件安全性,代码安全性、SDK指纹等。

其中深度检测如下图所示:

通过Soot将APK中的类转变成Jimple中间语言,构建调用关系图;使用FlowDroid做数据流分析,通过Soot提供的模版驱动数据流和控制流分析框架,结合漏洞模型,进行漏洞检测。最终使用jadx实现Jimple与java代码行号关联。

03 动态评估引擎

动态评估检测引擎如下图所示:

通过静态分析收集APK中的信息,最重要的是组件信息以及对应组件内的参数信息和高风险API。根据漏洞类型编写FUZZ插件,使用参数类型值随机变异,参数名智能识别赋值等参数值生成方法构造Intent键值对中的value ,进行自动化FUZZ,使用Frida hook做FUZZ结果监控,输出结果供进一步分析。其中路径覆盖深度最难解决,通过单个文件内规则匹配可提升一部分,也再结合上节的深度检测进一步提升优化。

04 特殊攻击面定制化评估

Android系统复杂性,导致影响APP安全的层面也形形色色。还记得第一节中利用注册的系统Server发起的攻击吗?以这个攻击面为例,讲解定制化评估思路,这里不做详细的技术讲解。

首先需要弄清楚评估对象是什么,系统Server架构如下图所示:

ServiceManager用来管理注册的Server,给client提供查询Server接口的功能。Client通过binder驱动与Server端进行通信。

系统Server常用调用方法如下图所示:

Client通过Binder使用构造的parcel参数,通过Transact函数发起服务调用,系统Server中onTransact函数处理请求,并将处理结果返回。

总体FUZZ策略如下图所示:

此方法能发现函数越权调用或者拒绝服务类等问题。总结下来,know it, hack it, protect it.

05 数据分析能力

通过静态评估与动态检测后,收集到大量的数据,再整合DevSecOps的其它环节如需求安全评审、详细方案设计评审、应急响应等数据,可构建供安全评估使用的数据分析平台,如下图所示:

主要分为APK信息、业务信息、风险管理三大类。综合这些数据,可以进行安全评估优先级排序、安全评估策略调整优化、快速应急响应等。

06 专家评估

安全专家进行Android APP安全评估时,通常会先进行信息收集,包括业务场景分析、解析ROM包收集模块间调用关系等等。评估思路包括逆向追踪、正向追踪、业务功能漏洞挖掘、漏洞维度评估等。使用反编译、Hook等评估工具。单兵能力整体如下图所示:

专家经验也参差不齐,每个人的技术擅长点也各不同。如何做好技术传递,提高团队的安全评估能力?

1、 将安全评估经验整理成安全评估指南,指南包含每种漏洞类型的评估思路、所用工具、典型案例等等,并且做持续的迭代完善。

2、 定期组织组内成员拿具体的模块进行评估思路碰撞,互相交流想法,相互促进与提升。

3、 围绕武器库建设,分享“私藏”的工具与使用技巧。

4、 团队协作,举办组内漏洞挖掘比赛,提高组员积极性。

5、 持续关注业内最新的漏洞攻防技巧,并进行模块漏洞验证,定期引入外部专家进行培训等。

总结

基于智能终端厂商APP所面临的新威胁与挑战,总结典型案例攻击模型。以静态模拟分析和动态桩点技术为辅助,针对APP研发生命周期各个关键阶段,进行自动化安全评估实践,介绍通过流程+工具+专家技术提升APP安全评估的质量与效率。

不管是安全评估流程融入、安全评估工具研发、还是建设团队安全评估能力,都参照了业务诸多优秀实践,总结下来,还是那句老生常谈的话,安全没有银弹,有的是找到适合自己公司实际情况的流程与技术方案并且不断地调整优化。

声明:本文来自vivo千镜安全实验室,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。