绕过安卓SSL验证的办法

本文详细介绍了如何绕过Android应用程序的SSL验证,包括向用户证书中添加自定义CA、重写已打包的CA证书、使用Frida Hook以及逆向自定义证书验证代码等技术。这些方法旨在帮助安全研究人员测试和分析移动端应用的SSL通信安全性。

为什么我们要特别关注移动端应用程序的SSL MitM安全情况呢?为了观察或对移动端应用程序的Web服务调用情况,我们需要使用类似BurpSuite或ZAP这样的拦截代理。当我们利用代理拦截下SSL流量之后,客户端的SSL链接将会中断。默认情况下,类似Burp这种工具所生成的自签名证书将失效,如果证书不被信任,那么移动端App将会中断连接。接下来,我们所要介绍的技术将能够让移动端应用程序信任我们的拦截代理所提供的证书。

技术#1-向用户证书中添加自定义CA
避免SSL错误的最好方法就是设置一个有效可信任的证书。这种方法相对比较简单,如果你可以向设备安装一个新的可信任CA证书,并且操作系统信任你的CA,那么它就会信任由你CA签名的证书。

Android有两个内置的证书存储(即System Store和User Store),它们会对操作系统信任的CA进行跟踪。其中System Store用于存储预装的CA,User Store存储用户安装的CA。默认配置下,使用了类似TLS或HTTPS的安全连接会信任预安装的系统CA,而Android 6.0(API Level23)及以下版本默认会新人用户添加的CA。

这意味着什么呢?如果我们向User Store中添加自己的CA,那我们就可以尝试对Android 6.0及以下版本的设备进行中间人攻击了。如果针对的是高于Android 6.0版本的设备,那么我们所添加的证书将不会被信任。为了解决这个问题,我们可以编辑应用程序的Manifest文件,并强制它适配Android 6.0。目标API Level定义在AndroidManifest.xml文件中的‘platformBuildVersionCode’属性(’manifest’元素):

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package=“com.test.app” platformBuildVersionCode="25"platformBuildVersionName=“7.1.1”>
我们要把‘platformBuildVersionCode=25’改成23:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package=“com.test.app” platformBuildVersionCode="23"platformBuildVersionName=“6.0”>
重新打包之后,应用程序将会信任用户添加的CA证书了。

当然了,如果你想要在特定平台版本中运行的话,你也可以在APK的‘/res/xml/network_security_config.xml’文件中定义一个。比如说,下面的代码就定义了一个新的受信任CA,文件存储在/res/raw/my_ca:

<?xm lversion="1.0" encoding="utf-8"?> 这样一来,我们就能够顺利完成MitM了。

技术#2-用自定义CA证书重写已打包的CA证书
如果第一种方法不起效的话,可能是因为开发人员限制了应用程序所能信任的CA证书了。还记得刚才我们使用自定义的 来提供CA证书路径吗?而开发人员同样可以使用这种方法来保护自己的应用程序免受SSL拦截攻击。

在这种场景下,为了让我们的拦截证书可以被信任,我们就需要提取APK并用我们自定义的CA证书来重写应用程序所提供的CA证书。需要注意的是,这种方法可能会要求进行一系列验证。

2.png

使用APK Studio之类的工具打开APK文件,然后在窗口中找到应用程序所捆绑的证书。在上图中,证书位于应用程序的assets目录下。接下来,用我们自定义的CA覆盖应用程序原本的CA(‘UniversalRootCA’证书),这样就可以让应用程序直接信任我们的证书了并实现流量拦截了。

技术#3-Frida Hook
如果安装自定义CA也无法成功的话,说明应用程序可能使用了某种SSL绑定技术或采用了额外的SSL验证。一般来说,为了绕过这种验证方法,我们需要对应用程序的代码以及验证接口设置钩子。这种接口一般用于限制手机被root或越狱,但是在Frida框架【工具下载】的帮助下,我们就可以在不root设备的情况下,对应用程序进行动态分析了。

Frida可以在操作系统中以独立应用程序的形式运行,但是这需要对设备进行root。为了避免root操作,我们可以直接将Frida注入到目标APK之中。Frida工具中包含了一个能够让应用程序在运行时加载Frida的动态库,并允许我们对目标应用程序的代码和指令进行动态修改。

接下来,我们需要提取APK文件,注入动态库,然后编辑一些smali代码来让我们的代码库在应用程序启动时最先被调用。完成之后,重新打包APK并进行安装。整个过程的完整操作方法可以参考【这篇文章】。

除此之外,我们也可以使用Objection工具【项目地址】来实现我们的目标。Objection可以让整个过程自动化完成,我们只需要在命令行中提供目标AP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值