视频汇总首页:http://edu.51cto.com/lecturer/index/user_id-4626073.htmljavascript
随着运营商新技术新业务的发展,运营商集团层面对安全的要求有所变化,***测试工做将会面临内容安全、计费安全、客户信息安全、业务逻辑及APP等方面的挑战。随着运营商自主开发的移动APP愈来愈多,这些APP可能并不会经过应用市场审核及发布,其中的安全性将面临愈来愈多的挑战。html
这个问题也引发了运营商的足够重视,已经自主开发了自动化检测工具及按期的APP安全测试评估工做。在此,绿盟科技博客特别邀请到移动APP安全测试专家,让他们结合一次Android APP安全测试实例,为你们讲解评估特色,并将评估检查点、评估细节和整改建议一一列出,给你们提供移动终端APP安全测试的思路。java
评估思路android
移动APP面临的威胁安全
风起云涌的高科技时代,随着智能手机和iPad等移动终端设备的普及,人们逐渐习惯了使用应用客户端上网的方式,而智能终端的普及不只推进了移动互联网的发展,也带来了移动应用的爆炸式增加。在海量的应用中,APP可能会面临以下威胁:服务器
新技术新业务移动APP评估思路微信
在此次的移动APP安全测试实例中,工做小组主要经过以下7个方向,进行移动终端APP安全评估:网络
运营商自动化APP测评思路架构
运营商自主开发的自动化APP安全检测工具,经过”地、集、省”三级机构协做的方式,来完成移动终端APP安全检测与评估。APP测试思路以下:ide
安全检测要点
Allowbackup漏洞
AndroidManifest.xml文件中allowBackup属性值被设置为true。当allowBackup标志为true时,用户可经过adb backup来进行对应用数据的备份,在无root的状况下能够导出应用中存储的全部数据,形成用户数据的严重泄露。
整改建议:
将参数android:allowBackup属性设置为false,不能对应用数据备份。
WebView漏洞
应用中存在WebView漏洞,没有对注册JAVA类的方法调用进行限制,致使***者能够利用反射机制调用未注册的其余任何JAVA类,最终致使javascript代码对设备进行任意***。
整改建议:
经过在Java的远程方法上面声明一个@JavascriptInterface 来代替addjavascriptInterface;
在使用js2java的bridge时候,须要对每一个传入的参数进行验证,屏蔽***代码;
Note :控制相关权限或者尽量不要使用js2java 的bridge 。
关键数据明文传输
应用程序在登陆过程当中,使用http协议明文传输用户名和密码,并未对用户名和密码进行加密处理。经过监控网络数据就能够截获到用户名和用户密码数据,致使用户信息泄露,给用户带来安全风险。
整改建议:
在传输敏感信息时应对敏感信息进行加密处理。
任意帐号注册
使用手机号133*****887注册某个APP,获取验证码46908;
在确认提交时,拦截请求,修改注册的手机号码,便可注册任意帐号,这里修改成1338*****678(任意手机号);
分别使用133**887和133**678(任意手机号)登陆,都可以经过验证登陆,看到最终结果。
整改建议:
注册过程最后的确认提交时,服务器应验证提交的帐号是不是下发验证码的手机号。
登陆界面可被钓鱼劫持
应用存在钓鱼劫持风险。应用程序没有作防钓鱼劫持措施,经过劫持应用程序的登陆界面,能够获取用户的帐号和密码,可能致使用户帐号信息的泄露。
整改建议:
应用程序自身经过获取栈顶activity,判断系统当前运行的程序,一旦发现应用切换(可能被劫持),给予用户提示以防范钓鱼程序的欺诈。
获取栈顶activity(以下图),当涉及敏感activity(登陆、交易等)切换时,判断当前是否仍留在原程序,若不是则经过Toast给予用户提示。
使用HTML5架构或android+HTML5混合开发,实现登录、支付等关键页面,下降被劫持的风险。
有争议的整改建议
在实施整改过程当中,运营商、APP厂商及安全厂商之间就以下几点存在争议:
关键数据明文传输
根据客户测评结果以及移动终端APP厂商理解,目前的数据安全问题可为:
客户端安全(数据录入) 客户端到服务器安全(数据传输) 服务器端安全(数据存储)
而关键数据明文传输属于客户端数据录入安全,针对此部分,目前不只是移动终端APP,包括Web安全方面,对此部分要求也是不一而分,具体能够体现为:
具备现金流的交易平台:此类业务安全级别要求最高,在数据传输方面也是目前作得最好的。主要表明是:淘宝、京东、各大银行网银等。
具备较大社会影响力的平台:此类业务安全级别低于上述业务,但因为帐户数据丢失之后,对其自身以及社会影响较大,因此在传输上也不会采起明文传输。如:百度、腾讯等。
数据丢失自己不会形成较大的影响的平台:此类业务帐户数据自己价值不大,丢失之后也不会形成影响,或者自己不会受到太大关注,通常都不会对传输数据进行加密。这样的例子比比皆是。
固然也有厂商提出,明文传输在某些专业的漏洞检测和通报的网站上,是不属于安全漏洞的,为了验证此异议,在某平台上提交了一份关于明文传输的漏洞,获得的结果请看下图:
登陆界面钓鱼劫持
APP应用存在钓鱼劫持风险。应用程序没有作防钓鱼劫持措施,经过劫持应用程序的登陆界面,能够获取用户的帐号和密码,可能致使用户帐号信息的泄露。
这一条检测结果,最大的争议在于按照整改建议整改之后,对通常用户来讲,没有任何做用。首先,咱们了解一下钓鱼劫持如何产生。
Android钓鱼原理
须要理解,Android启动一个Activity时,是这样设计的,给Activity加入一个标志位FLAG_ACTIVITY_NEW_TASK,就能使它置于栈顶并立马呈现给用户。可是这样的设计却有一个缺陷。若是这个Activity是用于盗号的假装Activity呢?这种现象在XcodeGhost事件中,已经被证明是能够实现的。
在Android系统当中,程序能够枚举当前运行的进程而不须要声明其余权限,这样的话,就能够编写一个程序,启动一个后台的服务,这个服务不断地扫描当前运行的进程,当发现目标进程启动时,就启动一个假装的Activity。若是这个Activity是登陆界面,那么就能够从中获取用户的帐号密码,具体的过程以下图:
检测原理描述清楚之后,就须要给出让软件厂商可以明白的整改建议以及漏洞情景重现。
Android钓鱼情景演示
以小米手机为例:
1.当打开3个APP时,最后一个打开的APP”语音助手”,切换至手机桌面,长按HOME键查看进程,”语音助手”会显示在进程的第一个。
2.点击”微信”之后,切换至”微信”,再查看进程,能够看到,进程中因为”微信”已切换至当前窗口,故进程中不存在。
3.能够从第1步看到,当切换至手机桌面时,不管是语音助手、手机令牌、仍是微信,都是默认后台运行,并且切换出来之后无任何提示。这样,当恶意activity收到微信登陆界面或者其余敏感界面的时候,就会抢先推送至客户,从而让客户轻易的输入了账号,并获取了客户的信息,但此时微信不会作任何提示。
4.再来观看一下某行手机APP,当切换至手机桌面时,会对客户作出提示。以下图:
假设一下页面是恶意推送的activity,那么在恶意推送的APP页面,应该会显示出此类提示,告知客户,此页面并不是正常APP的页面。
用户打开正常页面 vs 用户打开了恶意页面: