专栏首页卓文见识APP端测试系列(3)——客户端安全

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

一、概述

在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测试的一些典例汇总。

本文分享自微信公众号 - 卓文见识(zhuowenjianshi)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring整合Mybaits java.sql.SQLException: Access denied for user '***'@'localhost' (using password: YES

    最近在搞Spring和Mybatis的整合,当我们在Spring里面配置数据源,而数据源是从外部的properties文件读取过来的时候就会报错

    Arebirth
  • 恢复带宽与时延的平衡

    随着数据集规模的不断增长,数据中心负载对内存、存储的性能和容量的要求也在不断提高。与此同时,每单位时间需要处理更多数据,组成计算系统的组件性能也在不断提高。所谓...

    冬瓜哥
  • GEO数据库挖掘(2)--快速锁定目标数据

    在上一期的推文 GEO数据库挖掘(1)--SCI文章速成 ,我们讲解了关于GEO数据库的背景知识,想必大家也了解了GEO是一个非常实用和权威的基因表达谱数据库。...

    用户6317549
  • 辨析BI、数据仓库、数据湖和数据中台内涵及差异点(建议收藏)

    随着大数据技术的不断更新和迭代,数据管理工具得到了飞速的发展,相关概念如雨后春笋一般应运而生,如从最初决策支持系统(DSS)到商业智能(BI)、数据仓库、数据湖...

    木东居士
  • Oracle模糊查询CONCAT参数个数无效

    在使用MyBatis操作Oracle数据库的时候,写模糊查询突然发现原本在MySql中正确的代码,在Oracle中报错,参数个数无效

    Arebirth
  • Java 实现MD5加密

    通过上边的资料我们大概可以知道,MD5是一种难以逆向(逆转)的加密方式,那么我们在程序中,究竟怎么使用呢??

    Arebirth
  • 浅谈数据治理、数据管理、数据资源与数据资产管理内涵及差异点(建议收藏)

    随着信息技术的不断涌现和普及,业务发展加快了数据膨胀的速度,行业内衍生了较多的新名词,如数据治理、数据管理、数据资源管理、数据资产管理等名词的定义很多,概念容易...

    木东居士
  • 操作mysql第一次访问速度慢(远程)

    最近在使用java操作远程的mysql数据库的时候,第一次请求非常的慢,而且极其容易引起系统的崩溃报错连接超时

    Arebirth
  • Redis简明教程

    Redis是一个开源的、基于内存的数据结构存储器,可以用作数据库、缓存和消息中间件。

    Java3y
  • GEO数据库挖掘(1)--SCI文章速成

    最近这段时间,相信好多人都在忙着写国自然标书,一晃2019年的2月份已经过去,今年只剩下10个月了,留给我们的时间不多啦(像不像导师或者主任开会时的讲话啊

    用户6317549

扫码关注云+社区

领取腾讯云代金券