一、国内AndroidApp漏洞检测发展简史
1.1石器时代(2007-2011)
2007年11年,Google正式发布了Android操作系统,2011年12月,Google发布了Android2.3版本,Android应用市场App数量突破10万个,随着Android系统的完善及Android设备数量的增加,Android超过塞班成为主流智能手机操作系统。与此同时,一些安全研究人员已经敏感的嗅到了Android客户端安全可能会成为未来的安全热点之一,不少传统的二进制安全研究人员开始转战移动安全。
1.2农业时代(2012-2014)
关键词:自动化审计、静态分析、动态分析
国内一些厂商也开始研发自己AndroidApp自动化审计系统,其中最早的对外发布的腾讯金刚审计系统算是国内这类产品的鼻祖之一,其早期版本在功能上实现了AndroidApp自动化静态分析与简单的动态分析,审计点包括:明文保存敏感信息,文件权限问题,日志信息泄露,组件权限问题,明文传输,拒绝服务等。
此时遇到AndroidAPP自动化审计遇到的主要问题有:1.静态分析主要依赖于关键词匹配,如果缺少上下文分析与可达性分析,开发者正好自定义了一个相同关键词的函数,或者存在漏洞的代码根本没有调用到,则会产生误报。2、大多AndroidApp的代码与UI是紧密交互的,如果动态分析部分只进行了简单安装启动App与自动随机点击,无法覆盖App大部分界面与功能,则无法覆盖更多的应用执行路径,产生有效业务数据,容易导致漏报。
1.3工业时代(2015-至今)
关键词:模糊测试、污点分析、通用脱壳、UI自动化遍历
1.3.1AndroidAppFuzzing
1.3.2AndroidApp污点分析
污点分析可分为静态污点分析与动态污点分析。静态污点分析不需要运行程序,以FlowDroid为例,目前主流的App静态污点分析技术主要包括如下步骤:
App二次打包,破解等问题的泛滥催生了App加固产业的发展,两者技术在也攻防中不断发展和进化,目前国内主流的加固方案有梆梆,爱加密,百度加固,360加固,阿里聚安全,腾讯御安全/乐固,通付盾,NAGA等,对于在线漏洞检测平台来说,如果没有通用的自动化脱壳方案就意味无法对应用市场中的很多App代码进行静态分析,甚至由于应用被加固无法运行于模拟器中或特定测试设备中,影响动态分析结果。
)。
1.3.4移动AppUI自动化遍历
AppUI自动化遍历常在App开发测试中用于检测App性能与兼容性,目前在App漏洞检测领域用的比较少(主要由于效率较低)。一般主流的App漏洞检测平台都包含动态分析,主要是安装App后自动运行App并监测App行为,通常使用的是AndroidMonkeytest脚本或其它工具随机点击APP界面。
二、AndroidApp漏洞检测
2.1国内AndroidApp在线漏洞检测平台
注:排名不分先后
2.2开源AndroidApp漏洞检测工具
1.MobSF
)开发的一个智能化、一体化的开放源代码的移动应用(Android/iOS)自动化测试框架,支持静态和动态分析,App后端WebAPI漏洞检测。
主要特点:基于PythonDjango的开源在线漏洞检测框架,前端UI完善,基础功能全面,安装布署方便,但总体来说审计点偏少,不适合实战,更适合辅助分析与二次开发,国内目前不少在线APP检测的平台都有这个框架的影子。
2.Drozer
3.Marvin
Marvin是西班牙ProgramaSTIC组织发布一个开源AndroidApp漏洞检测框架,该框架主要分为四个项目:
(1)Marvin-Django
主要包含框架前端UI界面与数据库部分;
(2)Marvinstaticanalyzer
一个主要基于Androguard及StaticAndroidAnalysisFramework的AndroidApp静态分析引擎。
(3)MarvinDynamicAnalyzer
一个APP动态分析引擎,基于OpenNebula及Android-x86模拟器,可搭建分布式分析系统,用于复现静态分析发布的漏洞与动态检测漏洞。
(4)Marvintoqueton
一个自动化遍历APPUI的工具,用于分析APPUI控件并进行自动化交互遍历,辅助动态分析。
主要特点:
笔者刚看到这个项目发布时研究了一番,主要特点有可直接搜索下载Google应用商店或者上传应用进行分析,可编写自定义静态分析脚本,使用动态引擎复查静态分析的结果提升准确性,使用本地应用去遍历APPUI等,但仔细实践后发现动态分析环境(ubuntu+openNebula+Android-X86)的布署很麻烦,多次尝试都未成功。
4.Inspeckage
一个Xposed插件,用于调试分析AndroidApp。
使用方便,自带WEB界面,装Xposed插件可以分分钟开始挖漏洞;2.功能全面:查看Manifest信息,监控本地文件读写,查看文件内容,查看Logcat日志,查看网络通信请求(支持SSLuncheck),监控IPC通信,查看加密操作,调用未导出组件等。
三、IOSApp漏洞检测
3.1常见IOSApp漏洞测试工具
测试iOSApp安全性离不开一台越狱过的iOS设备,以及一些测试利器。在此简单简介两个iOSApp安全测试工具:
1.Idb
Idb是一款开源的iOSApp安全评估工具,作者是DanlA.Mayer。
主要功能:
查看应用以下信息:应用包名;注册的URLSchemes;SDK版本;应用数据文件夹位置;应用权限等,
查看/下载应用数据文件;
查看应用文件保护级别;
DumpiOSkeychain;
检测应用是否加密;
检测应用编绎安全选项(ASLR/PIE,DEP,ARC);
查看应用的sharedlibraries;
提取应用binary中的字符串;
Classdump;
查看应用URLHandler;
InvokeandfuzzURLhandlers;
查看系统剪切板
截屏
安装系统证书;
编辑/etc/hosts文件;
查看系统日志;
2.Needle
Needle是MWRLabs开发的一个开源iOS安全测试框架,同样支持开发自定义模块来扩展Needle的功能,目前主要功能包含对iOS应用数据存储,IPC,网络通信,静态代码分析,hooking及二进制文件防护等方面的安全审计。
与drozer类似,Needle提供了一个shell界面,基本idb有的功能needle都有或者说以后也会有(因为可以自己写模块),而Needle还同时支持Cycript与Frida两个hooking方案,可以方便的加载hook脚本与执行命令。
3.2IOSApp自动化漏洞检测
四、构建移动App漏洞检测平台
目前国内无论是3BAT,还是移动安全公司,都已经提供了移动APP漏洞检测产品,笔者平时也会对这些平台做一些深度体验,总体来说随着技术发展,构建APP漏洞检测平台门槛已经很低技术也很成熟了。
在移动互联网时代,不同的企业对于移动APP产品安全性要求是不一样的,如金融,支付,通信,游戏类APP产品对App客户端安全,业务安全,后端服务器安全都提出了很高要求,定制企业自已的移动APP漏洞检测平台还是很有必要的。
笔者仅从个人角度谈谈对如何构建移动App漏洞检测平台的几点看法:
(1)在平台建设之初可以参考业界优秀的同类产品与开源方案,目前大部分移动App漏洞检测平台后端基本功能都是使用Python/Java开发,便于快速开发迭代。
(2)移动APP安全威胁是不断变化的,漏洞审计规则也应该支持快速更新,同时企业移动App漏洞检测平台应该满足移动App产品正式上线前审计,上线后日常排查两个基本需求。
(3)很多开发人员和安全工程师对漏洞的理解是不一致的,在输出漏洞检测报告后,还需要提供详细的漏洞利用场景讲解与修复指引。
(5)平台的主要建设者应该精通移动App漏洞挖掘实战,能够针对企业重点产品特性(如动态加载,热补丁等技术)提供专业的解决方案。
同时笔者提出了一个甲方/乙方企业通用的移动App漏洞检测平台架构,企业可以在此基础上直接接入Web漏洞扫描系统扫描App后端Web漏洞,也可以收集URL测试业务安全漏洞。
五、未来移动App漏洞检测平台发展方向
在Google最新发布的Android7.0系统增加了不安全特性,如APP开发者可以使用系统提供的接口自主配置信任的证书,默认也不再信任用户安装的第三方CA证书,此举可提升AndroidApp网络通信的安全性。
可见未来移动APP安全问题还将不断变化,目前大部分移动APP漏洞检测平台最终的检测结果也需要专业的安全研究人员评估实际风险,历史上很多移动端严重漏洞也是需要结合业务场景的,所以说移动App漏洞检测平台也只是企业移动App安全建设中的一环,此外推动移动安全人才培养,移动App安全开发规范,应用加固,盗版监测等体系建设也同样重要。
笔者个人认为未来移动APP漏洞检测平台可发展的几个方向有:
1.机器学习
2.威胁感知与大数据
如何从移动App中挖掘数据,并分析,整合进而利用于漏洞检测与威胁感知也是未来移动APP漏洞检测发展方向之一。目前部分漏洞检测平台已经开始支持采集应用市场所有移动APP源码及运行过程中产生的网络通信数据(如域名,IP,URL等),进行聚合分析与WEB接口漏洞检测。同时四维智创,梆梆等安全公司开始推广移动应用威胁感知产品,此类产品通过SDK收集应用的行为与网络数据,用于检测APT攻击,防刷单等场景。