转载

OWASP移动安全测试指南抢先看:证书锁定绕过

Certificate Pinning(证书锁定)是一项额外的安全层,对于应用程序而言它可以确保远程服务器提供的证书唯一性。

通过应用程序中包含的远程服务器x509证书或者公钥,可以实现本地存储的证书或者key与远程服务器提供的证书进行比对

OWASP移动安全测试指南抢先看:证书锁定绕过

如果你发现无法拦截(Man-in-the-Middle)应用程序的HTTPS通信信息,这极有可能就是应用程序使用了证书锁定。

绕过证书锁定

证书锁定是一项客户端安全保护机制,其可以通过伪造应用程序或者环境来进行绕过。

可以通过反汇编应用程序移除或者伪造证书锁定逻辑,当然也可以将应用程序嵌入的证书更换成另一个应用程序的证书。

虽说有工具可以实现自动化禁用证书锁定操作,但是这些工具不一定能跟上变换着的形式,你可能需要尝试学会使用手动方法进行上面所讨论的操作。

iOS应用程序

以下工具需要在越狱条件下才能运行或者禁用证书锁定操作:

iOS SSL Kill Switch 修补安全传输API中低层次SSL函数

iOS TrustMe 禁用SecTrustEvaluate

Android应用程序

以下工具需要在获取root条件下才能运行或者禁用证书锁定操作:

Android-SSL-TrustKiller 通过hooks各种运行时方法来绕过证书锁定

Android-ssl-bypass 使用到JDWP debugger中的JDI API

真实环境下的证书锁定绕过

为了进一步论证如何绕过证书锁定,我们将通过Facebook官方安卓版本来说明。

注意:以下步骤可能我能成功,但是你按部就班的操作就不一定成功了。

之前我将这个情况报告给Facebook的BUG赏金计划,他们认为这是一个可控的安全问题,但是根据Facebook的赏金计划,通过修改的APK绕过证书锁定不再他们的奖励范围之类,所以我无缘拿到奖励了。

首先我们从Google应用商店下载Facebook APK,下载完成之后对该应用解包,修改源代码,重新打包应用,应用签名,最后将其安装到设备中。

对APK进行反汇编

使用 apktool 工具对应用解包使用以下命令:

$ apktool d com.facebook.katana.apk -o com.facebook.katana_disassembled

修改证书锁定逻辑

完成解包操作后,我们需要定位证书锁定的smali源码。在smali代码中使用类似X509TrustManager,cert,pinning的关键字进行搜索。

在本例中搜索X509TrustManager返回结果在‘smali/com/facebook/acra/util/TrustEveryoneTrustManager.smali’文件中,该文件中包含了方法名“checkClientTrusted”, “checkServerTrusted” 以及 “getAcceptedIssuers”。

在这些方法中的首行中都添加有return-void操作码。return-void声明了其为Dalvik操作码,返回“void”或者null.更多信息可以访问http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html进行了解。

OWASP移动安全测试指南抢先看:证书锁定绕过

APK重新打包

更改完应用包中的方法之后,我们就要重新打包了,在apktool中使用如下命令:

$ apktool b com.facebook.katana_disassembled/ -o app_modified.apk

完成以上命令后会创建一个名为app_modified.apk的应用。

应用签名

在安装应用之前,我们还需要对应用进行签名,通过以下步骤可完成对app_modified.apk文件签名

生成密钥:

$ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

使用生成的密钥对APK进行签名:

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore app_modified.apk

现在这个APK文件的签名有效期为1000天,准备安装到安卓设备。要做到这点,首先我们得确保USB调试已经开启,然后将设备连入计算机USB端口,最后运行:

$ adb install app_modified.apk

安装完成之后我们便可以轻松的拦截(Man-in-the-Middle)HTTPS通信数据了

OWASP移动安全测试指南抢先看:证书锁定绕过

总结

最初本文内容是为了写入未来的OWASP移动安全测试指南中,然而我决定先将其分享出来。这样大家就可以先一步了解到这个问题,进而在实际应用中多一种思路。

这还是一个初步版本,我们需要你能够提出更多的想法!

*参考来源: DewhurstSecurity ,编译/FB小编鸢尾,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

正文到此结束
Loading...