Android应用典型问题分析
Activity暴露
某知名互联网手机隐藏工厂测试工具FactoryTest.apk中的Activity暴露,可被任意应用发起Intent调用,且有自动模式,
导致:可以打开蓝牙,WIFI;可以进入无限循环测试,对用户产生严重干扰。
Activity是组件的边界之一,使用隐式跳转+exported=false可以有效避免activity暴露问题。
Backup/Restore(备份恢复)
某视频客户端免登录的做法是服务器下发一个securityKey,在用户登出之前,客户端一直利用这个securityKey来跟服务器通信。
但是,这个securityKey是直接明文存放在数据库中,利用Backup/Restore就能在另外一台root手机中窃取这个securityKey,伪造客户端通信。
AllowBackup=false
某应用云服务存在中间人攻击
某云服务使用HTTPS通信,但是如果手机被安装上恶意证书(例如利用“证书相关权限绕过”漏洞),并通过恶意代理,HTTPS的数据包还是可以被窃取和篡改的,如登录帐号和密码!
很多应用为了省事(),进行https开发时信任所有证书,不对证书进行校验。年初的时候一大批app中枪,包括当当、滴滴、前程无忧、京东、天猫、我团、新浪微盘、携程、赶集、墨迹天气、拉手网。。。太多了。
举个点评的例子。。。
修复方案:
改SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER为SSLSocketFactory.STRICT_HOSTNAME_VERIFIER验证。
关于剪贴板的攻击
很多ROM厂商都提供的验证码短信的提取定制,支持一键复制功能,但是即使没有监听短信接收广播的恶意应用也可以通过监听剪贴板获得验证码。
微信抢红包神器
过年的时候出现了一大波抢红包神器app,可以监听到有人发红包后自动打开微信点击抢红包Button,秒杀双手。
原理:利用Android提供的AccessibilityService,拥有辅助功能的app都可以监控任何应用的view,并且可以触发输入事件。
与AccessibilityService相关的还有微信支付密码事故。
支付界面的键盘是由12个View组成,当用户打开辅助功能后,三方app能够监听到这12个Button的onClick,拿到相应的text,从而破解支付密码。
解决方案:
让敏感的View中Accessibility失效
-setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO) not important
-setAccessibilityDelegate(),空实现delegate类。
如何分类Android应用安全
安全的关键是定义边界
边界分类
有哪些工具可以帮助我们快速找到安全问题
github上有现成的开源项目帮助我们理解移动上的安全问题
https://github.com/nil1666/AuditDroid
AuditDroid提供测试用例代码,让开发者可以快速定位安全问题。
总结:安全问题是每个app都逃不开的,尤其身在O2O行业,既有来自天量用户的消费支付安全风险,又有来自竞争对手的逆向抓取破解,安全问题本着魔高一尺道高一丈的节奏,势必应该成为运营的一部分,打好这场攻防战。