抓包是作为apk分析的首要切入点,获取apk的通信协议的必要手段。常见的抓包手段是基于中间人攻击来进行的,还有另外一种抓包手段是基于手机VPN进行的。这里将罗列常见的抓包手段,以及SSL Pinning手段的对抗。
比较常规的抓包手段,常用的抓包工具有Burpsuite、Charles、Fiddler、Mitmproxy等等。通常在手机端安装工具的证书,如若抓取的手机客户端未做SSL pinning便可直接进行抓包。
通常有些APP为了防止被抓包,会设置APP默认不走代理,在分析的时候你会发现即使你设置了APP代理,也不影响APP的正常通信。通过tcpdump抓取网络报文可以发现app直接和服务器建立了连接而没有和代理建立连接。对应Java代码如下。
这种情况下可以通过建立VPN服务,直接将流量导向我们的抓包工具。当然也有现成的工具,如SocksDroid直接将流量导向抓包工具,Burpsuite是不支持socks5代理的,可以使用Charles设置Socks5代理,然后设置Charles的上游代理到Burpsuite。
还有的检测手段就是检测代理状态,如果设置代理了就拒绝通信,这种情况下也可以使用SocksDroid工具直接转发流量,这种情况下检测不到代理,另外的方法就是将检测的代码Bypass掉。
之前遇到过用Flutter写的应用,这种应用默认不走系统代理,所以也使用SocksDroid进行流量转发,然后需要注意的是需要将抓包证书安装在System Level而不是User Level。因为在User level的证书,应用是不信任的。
[安装系统证书] 877K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2M7X3!0H3L8X3!0H3i4K6u0W2j5$3!0E0i4K6u0r3j5$3!0F1k6X3W2Y4N6i4u0A6L8X3N6Q4x3X3c8T1N6i4u0H3i4K6u0V1M7%4g2A6N6r3g2Q4x3X3c8%4K9i4c8Z5i4K6u0V1j5h3&6V1M7X3!0A6k6q4)9J5k6r3&6G2N6h3N6S2N6q4)9J5c8R3`.`.
证书绑定的安全策略在目前的APP开发中是越来越常见了,其根本策略就是检测客户端发来的证书是否合法,一般在APP中会硬编码合法的服务端证书信息,然后进行对比,笔者见的比较多的是OkHttp3中的一些SSL Pinning策略,而且很多APP也是使用的OKHttp3框架进行流量通信,比较常见的就是实现 HostnameVerifier接口中的verify函数,其verify函数中实现检测逻辑,返回值是boolean类型,常见的bypass策略就是Hook verify函数使其返回true。那么如何找到verify函数呢?下面将列举常见的方法:
frida-trace
可以看到的确调用了verify函数,上图是我在没有设置代理的情况下返回的是true。
frida Java.enumerateMethods
前不久frida提供了枚举Methods的接口,这样就比以前更易于操作了,不然之前得枚举类然后得到方法。使用以下脚本便可
找到verify函数,直接Hook
此方法不能实现通用脚本
上述情况是针对okhttp3的情况说明的,如遇到其他框架请采用网上集成的bypass脚本。
fdeK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6J5j5i4N6Q4x3X3g2Y4K9i4c8Z5N6h3u0#2M7$3g2J5j5$3!0F1N6r3g2F1N6q4)9J5k6h3y4G2L8g2)9J5c8W2N6G2L8%4W2#2L8V1c8G2N6r3q4Q4x3V1k6p5M7X3!0A6k6q4y4e0e0q4g2F1M7r3W2F1L8X3W2F1k6#2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8V1!0T1K9X3g2U0N6r3W2G2L8W2g2F1M7r3W2F1L8X3W2F1k6#2m8D9N6i4y4Q4x3V1k6Z5L8$3!0C8M7#2)9J5k6h3A6K6
双向绑定即客户端验证服务端证书,服务端验证客户端证书。要实现抓包需要绕过客户端对服务端的校验,以及服务端对客户端的证书校验,首先绕过客户端对服务端的校验一般采用以上方法即可。绕过服务端的校验一般需要提取嵌入在客户端中的证书,有的开发者将此加密了,有的可以在assets目录中找到,以及raw目录中。对于加密的证书提取,可以Hook Keystore的load方法
比如上述策略,证书是经过加密保存在apk中的,取出来先进行解密,然后使用Keystore进行加载,这时候可以通过Hook load方法得到证书以及证书的密钥,然后将证书导入到Burpsuite中,便可抓取报文。
4d5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6k6h3y4Q4x3X3g2E0M7X3k6S2L8W2)9J5k6i4S2&6P5W2)9J5c8U0t1H3x3e0W2Q4x3V1j5I4x3W2)9J5c8U0p5$3i4K6u0r3i4K6t1#2c8e0g2Q4x3U0g2m8c8g2)9J5y4e0R3&6i4K6t1#2c8e0g2Q4x3U0f1^5c8q4)9J5y4e0V1K6i4K6t1#2c8e0k6Q4x3U0g2n7y4g2)9J5y4e0S2n7i4K6t1#2c8e0S2Q4x3U0g2m8c8W2)9J5y4e0V1#2i4K6t1#2c8e0c8Q4x3U0g2n7z5g2)9J5y4e0S2n7d9r3!0G2K9#2)9J5y4e0t1H3f1#2y4x3i4K6g2X3M7X3g2S2k6q4)9J5y4f1f1#2i4K6t1#2z5e0u0Q4x3U0f1^5b7#2y4e0e0q4)9#2k6Y4N6J5K9i4c8W2i4K6u0r3
68fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6X3j5h3&6^5M7#2)9J5k6s2c8Q4x3V1k6m8L8X3c8J5L8$3W2V1i4K6u0V1f1#2y4x3i4K6g2X3M7X3g2S2k6q4)9J5k6s2N6J5K9i4c8W2i4K6u0V1d9r3!0G2K9#2)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5i4y4@1k6i4u0Q4x3V1k6X3M7X3W2V1j5g2)9J5k6r3S2G2L8$3E0Q4x3X3g2H3P5b7`.`.
这种方式抓取的是未经加密的报文,经测试,有的场景下无效。
这种技巧相当于PC上运行chrome设置SSLLOGFILE环境变量记录SSL协商的密钥,在android上,默认未设置需要通过Hook进行设置
frida -U -f com.realcloud.loochadroid.college -l hook.js --no-pause -o key
抓出来是这样的格式
[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!
最后于 2020-7-27 16:30
被ChenSem编辑
,原因: