前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >APP端测试系列(3)——客户端安全

APP端测试系列(3)——客户端安全

作者头像
Jayway
发布2019-10-15 23:02:48
2.2K0
发布2019-10-15 23:02:48
举报
文章被收录于专栏:卓文见识卓文见识卓文见识
一、概述

在APP测试的第三部分之前插播一个新闻《自学黑客薅羊毛,薅出玫瑰金手镯》,一个通过测试APP客户端,绕过验证注册二十万账号,从而获利六万余元最终喜获金手镯的“励志”故事:

可见学会APP测试是可以“发家致富”的,同时APP客户端安全也是整个APP安全测试中最为重要、测试项最多的:

二、测试项

1、权限管理:

应用安装时会请求系统权限,如通话、存储、媒体等,标准要求系统不应存在与系统无关多余权限,近来工信部集中整治的App违法违规收集使用个人信息的情况就和应用权限有很大关联。

检查系统权限的方法为查看AndroidManifest.xml配置文件,它是XML格式的Android 程序声明文件,是全局描述性的文件。包含了程序的名称、图标、包名称、授权和SDK最低版本等信息,这个文件也包含了很多测试项目。

直接解压APK后得到的xml文件是被加密的,解密的方法很多,这里使用APKTOOL进行反编译,下载地址:

https://ibotpeaches.github.io/Apktool/install/

反编译命令为:

apktool d app-release.apk

反编译得到一个文件夹,打开其中AndroidManifest.xml文件:

查看uses-permission配置项,如这里申请的两个系统权限是网络和定位,若应用未涉及这两个权限,则不符合要求。

2、组件安全:

Android四大组件为Activity、BroadcastReceiver、Service、Content Provider,也是测试的重点,组件的功能介绍可见:

http://www.atksec.com/article/android-component-security/index.html,对于组件安全的测试,简单的方法是查看AndroidManifest.xml,分别找到组件对应组件标签的android:exported属性,属性值若设为false,则设定Activity不能被外部程序调用,在具体测试中需依次对各个组件进行确认,该组件是否是依业务要求可被外部程序调用的:

更正规、深入的测试方法是使用集成测试框架Drozer对组件权限等进行查看和操作:

在搭建drozer的过程中可能出现一些问题,搭建及使用可参考:

https://www.jianshu.com/p/826439b24467

3、allowBackup安全

allowback是关于Android 系统数据的备份和恢复功能,此功能的开关决定于该应用程序中 AndroidManifest.xml 文件中的 allowBackup 属性值,其属性值默认是 True。当 allowBackup 标志为 true 时,可使用adb backup 和 adb restore 来进行对应用数据的备份和恢复,是存在风险的。

通过一个微博数据窃取的案例了解allowBackup配置不当的攻击细节:

https://sobug.com/article/detail/16

4、debug调试

当在AndroidManifest.xml中配置android:debuggable="true"时可以在手机上调试Android程序,若开启了此配置则是不安全的:

同样,如果系统本身设置的debug关闭,若存在下面讲的二次打包漏洞,可将此配置开启,重新打包,同样可以动态调试,查看打印log。

5、代码层安全

以上都是通过xml文件进行排查的测试项,除了这个xml文件,将APK直接解压后还可以看到目录下包含一个classes.dex文件,这个二进制文件包含了程序源码,将其反编译为jar文件可查看源码,使用的工具为dex2jar,下载地址:

https://sourceforge.net/projects/dex2jar/下载后的工具较多,这里只用到d2j-dex2jar.bat,将classes.dex和 dex2jar 放在同一目录下,输入命令:

d2j-dex2jar.batclasses.dex

在同目录下则生成classes-dex2jar.jar,里面包含源码信息:

查看jar文件使用jd-gui,下载地址:http://jd.benow.ca/,将jar文件拖入,得到源代码:

当然这里看到的代码可能是未经任何处理的,可能是加壳的(只能看到壳代码)、混淆之后的(类名、方法名用a,b代替),可能是类抽空的(只有类名没有逻辑)等。这里涉及脱壳、反混淆等高级攻防对抗手段,这里后续需要可另开篇总结。

6、二次打包

对于已经编译发布的apk文件,通过反编译得到原始文件,并修改部分内容(源码逻辑、logo、收款二维码等)重新进行打包、签名发布的过程称为二次打包。

二次打包的测试过程主要用到的是apktool和keytool工具,如果要对代码进行修改还要用到dex2jar,测试过程大体为:反编译apk——>修改个别文件——>打包——>签名,反编译和打包是两个逆过程,都需要apktool,命令分别为:

Java-jar apktool.jar d app.apk

Java-jar apktool.jar b folderpath -o app_new.apk

签名需先使用keytool生成证书文件keystore。

keytool-genkey -alias androidauto.keystore -keyalg RSA -validity 20000 -keystore demo.keystore

然后使用jarsigner进行签名:

jarsigner-keystore demo.keystore -storepass password -signedjar demo.apk demo_signed.apkdemo.keystore

具体过程参考:

https://www.jianshu.com/p/6bcc42542997 注:若apk本身作了防二次打包(签名)验证,一般情况会安装成功后闪退。

7、截屏录屏保护

输入口令及其他重要操作处应作防截屏和防录屏保护,使用adb进行截屏和录屏尝试:

adb shellscreencap/sdcard/test.png

adb shellscreenrecord /sdcard/test.mp4

而后使用pull命令将文件拉取回物理机查看:

adb pull /sdcard/test.mp4E://test

8、键盘安全

对于口令输入键盘的要求是:自定义软键盘(非系统自带)且软键盘布局随机打乱。

9、数据存储安全

1)本地数据

使用root过的安卓机安装程序,使用adb查看目录/data/data/com.xx.xx/files/test/data/test/.apps下所有文件夹内的appcode文件下的业务相关js等文件均是否经过混淆;

2)Logcat日志

使用adb工具查看应用程序操作日志,查看是否有敏感信息:

adb logcat -b main -vtime>app.log

3)sdcard数据

同1)在/sdcard中找到被测app的文件夹,检查文件夹下是否存储了用户数据

4)SQLite数据库

同1)找到/data/data/<package name>/databases/*db,这是程序运行生成的*.db文件,将文件pull到本地使用SQLiteExpert查看是否存在敏感信息:

10、Webview安全

1) 密码明文存储

WebView默认开启密码保存功能,如果该功能未关闭,在用户输入密码时,会弹出提示框,询问用户是否保存密码,如果选择"是",密码会被明文保到

/data/data/com.package.name/databases/webview.db

2) 组件远程代码执行漏洞

webview组件包含3个隐藏的系统接口:searchBoxJavaBridge_,accessibilityTraversal以及accessibility,若未对注册JAVA类的方法调用进行限制,导致攻击者可以利用反射机制调用未注册的其他任何JAVA类,最终导致javascript代码对设备进行任意攻击。如CVE-2014-7224;

可搭建环境进行接口测试,参考:http://www.voidcn.com/article/p-otpwffpy-wx.html

除了上述涉及的漏洞,移动端还存在钓鱼劫持、APP升级安全等风险,可举一反三进行归纳总结,后续带来app测试的一些典例汇总。

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

本文分享自 卓文见识 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 1、权限管理:
  • 2、组件安全:
  • 8、键盘安全
  • 9、数据存储安全
  • 10、Webview安全
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档