Certificate Pinning(证书锁定)是一项额外的安全层,对于应用程序而言它可以确保远程服务器提供的证书唯一性。
通过应用程序中包含的远程服务器x509证书或者公钥,可以实现本地存储的证书或者key与远程服务器提供的证书进行比对
如果你发现无法拦截(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进行了解。
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移动安全测试指南中,然而我决定先将其分享出来。这样大家就可以先一步了解到这个问题,进而在实际应用中多一种思路。
这还是一个初步版本,我们需要你能够提出更多的想法!
*参考来源: DewhurstSecurity ,编译/FB小编鸢尾,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)