文章目录
- 前言
- 一、安全威胁分析
- 二、主要风险项
- 三、Android测试思维导图
- 四、反编译工具
- 五、Android客户端
- 漏洞一、Jnaus漏洞
- 漏洞二、数据备份配置风险漏洞
- 漏洞三、Activity组件泄露漏洞
- 漏洞四、BroadcastReceiver组件泄露漏洞
- 漏洞五、允许模拟器Root环境登录漏洞
- 漏洞六、未识别代理环境漏洞
- 漏洞七、未使用随机布局键盘漏洞
- 漏洞八、键盘密码截屏漏洞
- 漏洞九、数字签名检测
- 漏洞十、反编译保护
前言
本篇文章针对Android APP渗透测试相关技术实施以及工具的使用,文中难免会出现其他问题,麻烦各位的大佬及时指出,共同学习,再此感谢!!!
一、安全威胁分析
安全威胁从三个不同环节进行划分,主要分为客户端威胁 、数据传输端威胁和服务端的威胁。
二、主要风险项
三、Android测试思维导图
四、反编译工具
有两种反编译方式:dex2jar 和apktool,两个工具反编译的效果是不一样的,dex2jar
反编译出java源代码,apktool
反编译出来的是java汇编代码。dex2jar主要是用来把之前zip解压出来的classed.dex转成jar包的jd-gui主要是用来打开Jar包的。
五、Android客户端
漏洞一、Jnaus漏洞
测试目标:APP应用包
格式:*.apk
测试工具下载:https://github.com/bihe0832/Android-GetAPKInfo
测试步骤:
使用工具包内GetAPKInfo.jar
命令:java -jar GetAPKInfo.jar *.apk
漏洞危害:
攻击者可利用Janus漏洞将一个恶意的DEX文件与原始APK文件进行拼接,从而不影响APK文件的签名。替代原有正常的App做下载、更新,用户端安装了恶意仿冒的App后,不仅会泄露个人账号、密码、照片、文件等隐私信息,手机更可能被植入木马病毒,进而或导致手机被ROOT甚至被远程操控。
安全建议
1、将APP的APK升级到最新的Signature scheme V2签名机制;
2、开发者及时校验App APK文件的开始字节,以确保App未被篡改。
漏洞二、数据备份配置风险漏洞
测试目标:APP应用包
格式:*.apk
测试工具下载:https://github.com/MobSF/Mobile-Security-Framework-MobSF
测试步骤:
本地安装该工具(安装步骤忽略),KALI中启动该工具并访问http://X.X.X.X:8000
打开网址,上传APK安装包,查看Android配置文件(AndroidMainifest.xml)
或直接将APK安装包后缀改为.zip,然后使用工具AMLPrinter2.jar
输出.txt。
命令:java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt
使用NotePad++ 打开即可看到配置文件信息
漏洞危害:
第三方应用开发者需要在APP的AndroidManifest.xml文件中配置 allowBackup 标志(默认为 true )来设置应用数据是否能能够被备份或恢复。当这个标志被设置为 true 时应用程序数据可以在手机未获取 ROOT 的情况下通过adb调试工具来备份和恢复。在接触用户手机的情况下攻击者可以在启动手机USB调试功能来窃取那些能够受到AllowBackup漏洞影响的APP数据,造成用户敏感信息泄露甚至财产损失。
安全建议
将AndroidManifest.xml文件中Application节点的android:allowBackup
属性设置为 false 或是 删除该属性。
漏洞三、Activity组件泄露漏洞
测试目标:APP应用包
格式:*.apk
测试工具下载:https://github.com/MobSF/Mobile-Security-Framework-MobSF
AMLPrinter2.jar
测试步骤:
通过AndroidManifest.xml文件查找关键字符串
com.******.******.icbcPay.PayResultHandler
com.******.******.wxapi.WXPayEntryActivity
com.******.******.alipay.AliPayEntryActivity
com.******.******.PushMessagesActivity
com.******.******.wxapi.WXEntryActivity
com.******.payment.thirdpay.channel.wx.WXEntryActivity
com.******.******.wxapi.WXPayEntryActivity
com.******.payment.thirdpay.channel.qq.QQPayEntryActivity
漏洞危害:
导出的Activity组件能被第三方APP任意调用,攻击者可构造恶意payload进行攻击,导致敏感信息泄露,并可能受到绕过认证、恶意代码注入等攻击风险。
安全建议:
1、如果Activity组件不需要与其它系统共享数据或交互,应在AndroidManifest.xml 配置文件中将该Activity组件的android:exported 属性值设置为false。如果Activity组件需要与其它APP共享数据或交互,应对Activity组件进行权限控制和参数校验。
2、在界面切换时,检测下一界面的Activity类,如不是被测系统内的界面,则提示并退出。
漏洞四、BroadcastReceiver组件泄露漏洞
测试目标:APP应用包
格式:*.apk
测试工具下载:https://github.com/MobSF/Mobile-Security-Framework-MobSF
AMLPrinter2.jar
测试步骤:
漏洞成因:com.gotop.yjdtzt.MyBroadCastReceiver
没有被保护
漏洞危害:
导出的Broadcast Receiver
组件能被第三方APP任意调用,攻击者可构造恶意payload进行攻击,攻击者可构造恶意payload进行攻击,造成用户敏感信息泄露、拒绝服务攻击等风险。
安全建议:
如果组件不需要与其它系统共享数据或交互,应在AndroidManifest.xml配置文件中将该receiver的android:exported
属性值设置为false
。如果该receiver需要与其它APP共享数据或交互,应对receiver进行权限控制和参数校验。
漏洞五、允许模拟器Root环境登录漏洞
tips:该测试环境需要使用模拟器,可支持Root模式模块的
测试目标:APP应用包
格式:*.apk
测试工具:逍遥模拟器
测试步骤:
打开工具配置,将模式改为Root模式运行,点击启动应用
可以看出启动应用并未提示有关警告类消息,存在问题。
漏洞危害:允许root设备/模拟器登录会存在不安全的风险。
安全建议:检测到root或模拟器设备,提醒当前环境存在风险。
漏洞六、未识别代理环境漏洞
测试目标:APP应用包
格式:*.apk
测试工具:逍遥模拟器
漏洞成因:当设置网络代理后,APP未检测到代理,攻击者会通过客户端所操作产生的数据流量进行劫持,获取敏感信息。
测试步骤:测试机中设置代理,并启动APP应用
启动应用过程中,并未显示警示类消息,该行为存在问题。
漏洞危害:APP未检测网络代理时,不安全的网络代理会劫持通讯数据,存在中间人劫持的风险。
安全建议:检测当前网络环境,当设置代理时提醒用户。
漏洞七、未使用随机布局键盘漏洞
测试目标:APP应用包
格式:*.apk
测试工具:逍遥模拟器
测试步骤:打开应用,点击输入账号密码,可从底部弹出输入法
漏洞危害:测试客户端程序在登录密码等输入框未设置随机软键盘,容易被木马根据点位获取登录密码。
安全建议:自定义随机布局键盘。
漏洞八、键盘密码截屏漏洞
测试目标:APP应用包
格式:*.apk
测试工具:逍遥模拟器
测试步骤:打开应用,在输入账号密码时进行屏幕截图。
输入密码时,可通过按键回应截屏得到密码等信息。
漏洞危害:通过连续截图,可以捕捉到用户密码输入框的密码。
安全建议:建议以震动方式代替回显效果给用户反馈输入信息。
漏洞九、数字签名检测
测试目标:APP应用包
格式:*.apk
测试工具:jarsigner.exe
测试命令:jarsigner.exe -verify -verbose -certs *.apk
当输出的结果为jar已验证
时,表示签名正常
检测签名的 CN 及其他字段是否正确标识客户端程序的来源和发布者身份
只有在使用直接客户的证书签名时,才认为安全。 Debug 证书、第三方(如开发方)证书等等均认为风险。
漏洞十、反编译保护
问题描述:APP源代码对于一个公司是非常重要的信息资源,对APP的保护也尤为重要,APP的反编译会造成源代码被恶意者读取,以及APP的逻辑设计。
反编译方法:我们一般想要反编译一个APK,无非就是要想获得三样东西:图片资源
、XML资源
、代码资源
图片资源获取:首先准备一个APK(.apk文件),我们将其后缀改为.zip,打开zip文件在res目录下,我们就可以获取到我们需要的图片了。
XML资源获取: 想要获取.xml文件,在我们打开zip压缩包里面可以看到存在一个.xml的文件,但是呢!直接打开的话会显示乱码或者空白,那我们该如何获取这个XML资源呢,这时就需要借助一个工具AXMLPrinter2.jar
,将这个工具放在与XML同一目录下使用cmd命令执行java -jar AXMLPrinter2.jar xxxxx.xml>xxxxx.txt
,这个时候你就能获取到xml里的东西啦。
代码资源获取:这个就比较重要了,但这里存在一个点,这里能够正确反编译出来的只有未加密或者没有混淆的代码,如果想要反编译一些加密或者混淆后代码,我们就需要其他途径解决了。首先需要准备两样东西:dex2jar.rar
和jd-gui.zip
这两个工具。dex2jar主要是用来把之前zip解压出来的classed.dex转成jar包的,jd-gui主要是用来打开jar包的。
Apktool用法:使用命令 java -jar apktool.jar d -f *.apk -o 文件夹名
。
dex2jar用法:把dex2jar解压后,然后将之前的zip的classes.dex放到dex2jar目录下,这里必须要与dex2jar.bat是同级目录。然后又要用到cmd。Cd到dex2jar目录下,打命令行 dex2jar.bat classes.dex
,然后你的目录里会多一个jar包,多了一个classes-dex2jar.jar
文件,再用jd-gui把jar打开,最终apk的代码就被剥离出来了。
检测方法:通过反编译工具看是否能够对APP进行反编译。
工具下载:
https://bitbucket.org/iBotPeaches/apktool/downloads/
-> apktool (资源文件获取)
https://github.com/pxb1988/dex2jar/releases
-> dex2jar (源码文件获取)
http://java-decompiler.github.io/
-> jd-gui (源码查看)
工具介绍:
Apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看。
dex2jar 作用:将apk反编译成java源码(classes.dex 转化成jar文件)。
Jd-gui 作用:查看APK中classes.dex转化为jar文件,即源码文件。
使用jd-dui将jar包打开
可以看到上图中被混淆过的class反编译后的效果图,(类文件名称以及里面的方法名称都会以a,b,c….之类的样式命名,较为安全,不会被轻易获取源码数据)。
修复方法:采用加密和混淆技术达到反编译保护。混淆技术作用是增加了用户反编译后阅读代码的难度。
未完,待续!!!