前言:本文是《移动APP客户端安全笔记》系列原创文章中的第一篇,主要讲的是企业移动APP自动化漏洞检测平台建设,移动APP漏洞检测发展史与前沿技术,APP漏洞检测工具与平台,以及笔者的一些思考。希望能对移动App自动化漏洞检测感兴趣的同学有所帮助,限于笔者技术水平与文章篇幅,有些内容暂没有逐一详细分析,后续我争取多学习多分享,在此也欢迎大家指点和交流。
一、国内Android App漏洞检测发展简史
1.1石器时代 (2007-2011)
关键词:反编绎,人工审计
2007年11年,Google正式发布了Android操作系统,2011年12月,Google发布了Android 2.3版本,Android 应用市场App数量突破10万个,随着Android系统的完善及Android设备数量的增加,Android超过塞班成为主流智能手机操作系统。与此同时,一些安全研究人员已经敏感的嗅到了Android客户端安全可能会成为未来的安全热点之一,不少传统的二进制安全研究人员开始转战移动安全。
这个时间段国内对Android安全问题的关注主要集中在恶意App分析与检测,App逆向与破解以及Android系统Root。对于Android客户端安全问题刚主要集中在信息泄露,敏感权限使用的方面,通常使用反编绎工具分析APK源码,然后进行人工审计。
1.2农业时代 (2012-2014)
关键词:自动化审计、静态分析、动态分析
2012到2014年间,Google发布了Android4.0-5.0系统,此间爆出不了不少Android 相关漏洞,比如影响深远的Webview远程代码执行漏洞,HTTPS中间人漏洞,让越来越多的安全研究人员的焦点慢慢转向Android App客户端本身的安全漏洞挖掘上来。
国内一些厂商也开始研发自己Android App自动化审计系统,其中最早的对外发布的腾讯金刚审计系统算是国内这类产品的鼻祖之一,其早期版本在功能上实现了Android App自动化静态分析与简单的动态分析,审计点包括:明文保存敏感信息,文件权限问题,日志信息泄露,组件权限问题,明文传输,拒绝服务等。
此时遇到Android APP自动化审计遇到的主要问题有:1.静态分析主要依赖于关键词匹配,如果缺少上下文分析与可达性分析,开发者正好自定义了一个相同关键词的函数,或者存在漏洞的代码根本没有调用到,则会产生误报。2、大多Android App的代码与UI是紧密交互的,如果动态分析部分只进行了简单安装启动App与自动随机点击,无法覆盖App大部分界面与功能,则无法覆盖更多的应用执行路径,产生有效业务数据,容易导致漏报。
图2 金刚审计系统主界面
1.3工业时代 (2015-至今)
关键词:模糊测试、污点分析、通用脱壳、UI自动化遍历
从2015年开始,360捉虫猎手(现改名为360显微镜),阿里聚安全等开放的在线Android App漏洞检测平台的出现让开发者和安全研究者更加方便的进行漏洞审计,一些开源在线检测平台的出现(如MobSF)也降低了定制化APP漏洞审计系统的开发门槛。同时模糊测试,污点分析,通用脱壳,UI自动化遍历等学术界与工业界技术也开始被应用到移动App漏洞审计中。下面简单谈谈几种技术在Android App漏洞检测领域的应用,如果有读者感到兴趣的话后续再做详细分享。
1.3.1 Android App Fuzzing
一般而言Fuzzing技术常用于二进制漏洞挖掘,在移动安全领域常见于挖掘系统组件漏洞(如libstagefright),文件解析类应用漏洞(如adobe reader,视频播放器)及第三方组件漏洞,常使用的工具有:peach/afl/honggfuzz,以及DroidFuzzer(https://github.com/manfiS/droidfuzzer)/MFFA(https://github.com/fuzzing/MFFA)等框架,为了提升成功率,通常可将几种工具与框架组件使用,如AFL+PEACH+MFFA。除此之外,fuzzing技术同样可用于测试Android 进程间通信(IPC),比如intent fuzzer(https://github.com/MindMac/IntentFuzzer)可以直接检测App拒绝服务等漏洞。
1.3.2 Android App 污点分析
污点分析可分为静态污点分析与动态污点分析。静态污点分析不需要运行程序,以FlowDroid为例,目前主流的App静态污点分析技术主要包括如下步骤:
1. 解析应用AndroidManifest.xml,Layout配置文件和相关Dex字节码,根据预先建模的Android LifeCycle Model生成超调用图 ,又称过程间控制流图(Inter-procedural control flow graph, ICFG);
2. 根据定义的污点源和锚点(Source and Sink),将其转换为基于ICFG的后向或前向数据流问题进行求解;
3. 根据求解结果,回答是否存在从某输入到输出的数据流流动路径,以显式Intent问题为例,FlowDroid会检测到一个以发送intent的sink方法到最后接收intent的source的路径存在。
动态污点分析则是在程序运行中过程,通过跟踪变量、内存及寄存器的值,依据执行流程跟踪污点数据的传播,最后达到跟踪攻击路径与获取漏洞信息的目的,以TaintDroid为例,需要对Android系统进行定制化修改以便对App运行过程中的污点数据进行跟踪,但由于Android设备或模拟器性能瓶颈问题,动态污点分析无法获取App所有可能的可执行路径。
以往污点分析常用于Android恶意App分析,信息泄露检测等问题,现在越来越多的厂商也应用于App漏洞检测上(如阿里聚安全使用的基于TaintDroid方案)。相比传统的App漏洞检测,污点分析可以跟踪污点数据的传播过程,确定漏洞是否在实际环境中可能被触发,检测能力更加强大。目前也有不少开源的Android污点分析方案与工具如:TaintDroid、FlowDroid、amadroid及CodeInspect,在此之上也发展出一些针对Android App漏洞检测方面的工具,如腾讯科恩实验室Flanker之前开源的JAADS(https://github.com/flankerhqd/JAADAS)。
1.3.3Android App 通用脱壳
二、Android App漏洞检测
注:排名不分先后
2.Drozer
Drozer是MWR Labs开发的一个开源Android 安全测试框架,支持编写自定义模块。目前已经有不少介绍Drozer文章,这里就不多说了。
3.Marvin
Github:https://github.com/programa-stic/
Marvin是西班牙Programa STIC组织发布一个开源Android App漏洞检测框架,该框架主要分为四个项目:
(1)Marvin-Django
主要包含框架前端UI界面与数据库部分;
(2)Marvin static analyzer
一个主要基于Androguard 及Static Android Analysis Framework (SSAF)的Android App静态分析引擎。
(3)Marvin Dynamic Analyzer
一个APP动态分析引擎,基于OpenNebula及Android-x86 模拟器,可搭建分布式分析系统,用于复现静态分析发布的漏洞与动态检测漏洞。
(4)Marvin toqueton
一个自动化遍历APP UI的工具,用于分析APP UI控件并进行自动化交互遍历,辅助动态分析。
主要特点:
笔者刚看到这个项目发布时研究了一番,主要特点有可直接搜索下载Google应用商店或者上传应用进行分析,可编写自定义静态分析脚本,使用动态引擎复查静态分析的结果提升准确性,使用本地应用去遍历APP UI等,但仔细实践后发现动态分析环境(ubuntu+openNebula+Android-X86)的布署很麻烦,多次尝试都未成功。
4.Inspeckage
https://github.com/ac-pm/Inspeckage
一个Xposed插件,用于调试分析Android App。
主要特点:
使用方便,自带WEB界面,装Xposed插件可以分分钟开始挖漏洞;2.功能全面:查看Manifest信息,监控本地文件读写,查看文件内容,查看Logcat日志,查看网络通信请求(支持SSL uncheck),监控IPC通信,查看加密操作,调用未导出组件等。
三、iOS App漏洞检测
官网:http://www.idbtool.com
Github:https://github.com/dmayer/idb
Idb是一款开源的iOS App安全评估工具,作者是Danl A.Mayer。
主要功能:
1.查看应用以下信息:应用包名;注册的URL Schemes;SDK版本;应用数据文件夹位置;应用权限等,
2.查看/下载应用数据文件;
3.查看应用文件保护级别;
4.Dump iOS keychain;
5.检测应用是否加密;
6.检测应用编绎安全选项(ASLR/PIE, DEP, ARC);
7.查看应用的shared libraries;
8.提取应用binary中的字符串;
9.Class dump;
10.查看应用URL Handler;
11.Invoke and fuzz URL handlers;
12.查看系统剪切板
13.截屏
14.安装系统证书;
15.编辑 /etc/hosts文件;
16.查看系统日志;
Github:https://github.com/mwrlabs/needle
Needle是MWR Labs开发的一个开源iOS安全测试框架,同样支持开发自定义模块来扩展Needle的功能,目前主要功能包含对iOS应用数据存储,IPC,网络通信,静态代码分析,hooking及二进制文件防护等方面的安全审计。
与drozer类似,Needle提供了一个shell界面,基本idb有的功能needle都有或者说以后也会有(因为可以自己写模块),而Needle还同时支持Cycript与Frida两个hooking方案,可以方便的加载hook脚本与执行命令。
3.2 iOS App自动化漏洞检测
在移动互联网时代,不同的企业对于移动APP产品安全性要求是不一样的,如金融,支付,通信,游戏类APP产品对App客户端安全,业务安全,后端服务器安全都提出了很高要求,定制企业自已的移动APP漏洞检测平台还是很有必要的。
笔者仅从个人角度谈谈对如何构建移动App漏洞检测平台的几点看法:
(1)在平台建设之初可以参考业界优秀的同类产品与开源方案,目前大部分移动App漏洞检测平台后端基本功能都是使用Python/Java开发,便于快速开发迭代。
(2)移动APP安全威胁是不断变化的,漏洞审计规则也应该支持快速更新,同时企业移动App漏洞检测平台应该满足移动App产品正式上线前审计,上线后日常排查两个基本需求。
(3)很多开发人员和安全工程师对漏洞的理解是不一致的,在输出漏洞检测报告后,还需要提供详细的漏洞利用场景讲解与修复指引。
(4)多多关注学术界与工业界的新研究成果,如果能加入优化与利用,可以推动平台整个技术能力的进步。
(5)平台的主要建设者应该精通移动App漏洞挖掘实战,能够针对企业重点产品特性(如动态加载,热补丁等技术)提供专业的解决方案。
同时笔者提出了一个甲方/乙方企业通用的移动App漏洞检测平台架构,企业可以在此基础上直接接入Web漏洞扫描系统扫描App后端Web漏洞,也可以收集URL测试业务安全漏洞。
五、未来移动App漏洞检测平台发展方向
2.威胁感知与大数据
如何从移动App中挖掘数据,并分析,整合进而利用于漏洞检测与威胁感知也是未来移动APP漏洞检测发展方向之一。目前部分漏洞检测平台已经开始支持采集应用市场所有移动APP源码及运行过程中产生的网络通信数据(如域名,IP,URL等),进行聚合分析与WEB接口漏洞检测。同时四维智创,梆梆等安全公司开始推广移动应用威胁感知产品,此类产品通过SDK收集应用的行为与网络数据,用于检测APT攻击,防刷单等场景。
3.社区化
目前国内已经有一些社区化的WEB漏洞检测平台,如Seebug,Tangscan等,盘古即将公测的Janus(http://appscan.io)也同样开始主打社区化,Janus支持社区用户自定义检测规则,后台结合海量全网应用数据,可用于全网应用快速漏洞扫描。同时社区化加入了安全研究员的人工审计流程,后续可以不断提升漏洞特征建模的细度与广度,提升平台检测能力。
参考资料:
[1] http://www.ijcaonline.org/research/volume134/number7/dhavale-2016-ijca-907855.pdf
[2] http://www.droidsec.cn/
[3] https://loccs.sjtu.edu.cn/
[4] http://jaq.alibaba.com/community/index.htm
[5] http://drops.wooyun.org/
[6] https://blog.flanker017.me/
本文由 安全周 作者:SecJack 发表,转载请注明来源!
您必须[登录] 才能发表留言!