首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你不知道的Android SDK安全测试

你不知道的Android SDK安全测试

作者头像
腾讯技术工程官方号
发布2018-01-29 16:49:24
2.3K1
发布2018-01-29 16:49:24
举报
anglia
anglia

作者介绍:anglia,2014年加入腾讯TEG,一直致力于信鸽和MTA两款产品的移动终端

引言

作为Android手机用户中的一枚残粉,假如突然手机掉了,脑电波蹦出的第一个念想是见鬼,还是您的理财产品上的钱不安全呢?

假如最新下载的app,进去时不仅弹出各种无聊广告,而且通知栏还会冒出意想不到的推送,您会想到这可能是钓鱼推送,马上卸载app?

假如X渡全家桶事件,您卸载了所有的X渡app,但乌云暴漏的X渡WH事件,无论是 wifi或3G/4G 蜂窝网络,只要手机在联网状态都有可能受到攻击,你是否会考虑换掉Android手机呢?

米厂狂热已经冷却,花厂手机开始跟着Android生态发展攻陷全球,物美价廉的Android手机走入寻常百姓家。面对Android安全漏洞认知不足的用户,如何保证我们的app给用户安心的体验?Android生态安全漏洞有哪些?Android安全测试技术探新在哪儿?如何将安全常规测试流程化?

Android常见安全漏洞汇总

首先,Android操作系统拥有开源的开发红利,也暗藏着后天发展的安全畸形,如:Android系统设计了沙箱系统(即虚拟机),但是底层却出现一个又一个漏洞让恶意程序(或工具)获取root权限以打破沙箱的限制。如同pc时代,没有绝对安全的pc操作系统,移动互联网时代,也没有有绝对安全的移动操作系统。Android开源生态的安全隐患,就像染血的警钟,敲击在每位Android开发者的心里。

其次,Android APP/SDK开发过程中的安全隐患就像未知黑洞,永远都不知道安全对抗的终点在哪,攻击者是谁,终结者又是谁,如何防御。

最后,常见的、可识别的用户层面的安全漏洞行为有哪些。

以上三个维度的已知安全漏洞总结如下:

信鸽Android版安全测试实例

漏洞原因概述

信鸽Android版SDK的一个可选组件,在本地开启了一个随机端口,用于监控java层service是否存活,但java层跟组件通讯时,未对输入参数做严格检验,导致在调用linux系统“system()”函数时,被填充攻击代码,从而被恶意利用。

如下截图是模拟端口被攻击后,在应用组件intent进行通信过程中,修改了url内容,webview显示乱码的情况:

漏洞潜在安全危害

Android APP的四大应用组件:activity、receiver、service和provider,以及应用组件通过intent进行IPC通信等安全角色,暂不发散。借助与信鸽漏洞相关点,展示APP侧相关的攻击维度如下图:

由于Android APP本地应用环境,网络socket先天缺乏细粒度的认证授权机制,因此,如果把Android客户端当做服务器,利用逆向代码搜索信鸽本地随机端口号,主动向端口发送攻击,就潜伏着如下安全危害:

1. 本地命令执行: 当嵌入信鸽应用的Packagename指定为应用自身,Componentname指定为应用的activity时,可以启动该应用的任意activity,包括受保护的未导出activity,从而造成安全危害。如,通过HTTP请求,逐一启动若干未导出的activity,可以发现拒绝服务漏洞。

2. 命令控制修改应用权限:通过开放socket端口传入启动Android应用组件的intent,然后以被攻击应用的权限执行启动activity、发送广播等操作。由于通过socket传入的intent,无法对发送者的身份和权限进行细粒度检查,绕过了Android提供的对应用组件的权限保护,能启动未导出的和受权限保护的应用组件,对安全造成危害

3. 敏感信息泄露,控制手机:本地某service打开UDP的端口监听,接收特定的命令字后,可返回手机的敏感信息。如百度手机管家,远程管理手机的secretKey,进而未授权的攻击者可通过网络完全管理手机。

信鸽Android安全测试执行

信鸽Android安全加固版本优化点

1. Native层和Java层增加对系统命令检查,特殊字符检查过滤

2.JNI Watchdog守护进程 socket通信加密

3. 本地通知功能,添加url、intent、activity的特性验证,防止点击通知后,跳转到恶意链接

4.修改Packagename在应用本地的存储位置

5.增加在线配置功能

以上是此次安全加固优化的重要需求点。

专项安全测试

如果按照常规的系统测试或者性能测试,只需要根据变动需求,进行正向的测试便可,但对于安全测试,保证SDK安全的健壮性需要进行逆向专项测试,模拟各种安全攻击手段,针对修改点发散测试用例。

Android常规的安全流程回归测试

1. 隐私数据:外部存储安全和内部存储安全;用户名、密码、聊天记录、配置信息等隐私信息是否被保存在本地,是否加密保存;使用数据前都判断信息是否被篡改;

2. 权限攻击:检查App所在的目录,其权限必须为不允许其他组成员读写;检查系统权限是否收到攻击;

3. Android组件权限保护:禁止App内部组件被任意第三方程序调用: 禁止Activity被任意第三方程序调用,禁止Activity劫持;Broadcast的接收和发送安全,只能接收本程序发出的广播,发送的内容不想让第三方获得;禁止恶意的启动或者停止service;Content provider的操作权限;若需要供外部调用的组件,应检查对调用者是否做了签名限制;

4. 升级:检查是否对升级包的完整性、合法性进行了校验,避免升级包被劫持;

5. 3rd库:如果使用了第三方库,需要跟进第三方库的更新并且检查第三方库的安全性;

6. ROM安全:使用官方ROM或者权威团队提供的ROM,避免ROM中被添加了植入广告、木马等;

7. 对抗反破解:对抗反编译,即无法通过反编译工具对其进行反编译,或者反编译之后无法得到正确的反汇编代码;对抗静态分析,采用代码混淆技术,代码加密;对抗动态调试,在软件中加入检测调试器和模拟器的代码;防止重编译,检查签名、校验编译之后dex文件的Hash值。

信鸽Android版,安全专项测试和常规流程测试完后,针对信鸽现有的功能、新旧版本兼容性、以及不同Android操作系统版本的兼容性,进行滚动回归测试。

总结

相对于普通的性能和系统功能测试用例,安全测试用例需要更全面的理解Android生态系统,如:用例需要覆盖到用户安全表象层面、应用系统本地和远程攻击层面、以及操作系统本身漏洞层面,且更多的需要设计逆向攻击思维的测试用例。

如果说开发的出发点是安全对抗防御,那么测试的出发点却是黑客攻击的思维,如何设计攻击场景的测试用例,攻击测试的技术如何实现,决定了SDK安全的健壮性。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯技术工程官方号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • Android常见安全漏洞汇总
  • 信鸽Android版安全测试实例
  • 信鸽Android安全测试执行
  • Android常规的安全流程回归测试
  • 总结
相关产品与服务
手游安全测试
手游安全测试(Security Radar,SR)为企业提供私密的安全测试服务,通过主动挖掘游戏业务安全漏洞(如钻石盗刷、服务器宕机、无敌秒杀等40多种漏洞),提前暴露游戏潜在安全风险,提供解决方案及时修复,最大程度降低事后外挂危害与外挂打击成本。该服务为腾讯游戏开放的手游安全漏洞挖掘技术,杜绝游戏外挂损失。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档