应用抓包进阶

admin 2022年11月10日14:15:56评论293 views字数 2485阅读8分17秒阅读模式


应用抓包进阶



    做移动安全测试时,有时候我们设置好了代理,但抓不到应用包,本篇介绍如何对抗应用反抓包。

    防护手段大致分为如下几种:

1.  SSL证书绑定(单向校验和双向校验)。

2.  代理检测、VPN检测、利用发包框架强制不走代理。

3.  自定义Soket、ssl库等。




一、SSL证书绑定

应用抓包进阶

什么是证书绑定呢?

    网上叫法蛮多的,SSL证书绑定、英文名字:SSL Pinning或者证书检验。总之无论怎么叫都是检验证书是否可信任。


CA证书

    我们知道从HTTP到HTTPS数据在传输过程中添加了一层SSL/TLS,让我们数据流量处于加密状态,不再是明文可见。这时候便有了CA证书。我们在抓取https数据包的时候,做的就是利用安装的假的CA证书,来实现中间人劫持数据。一旦app校验了证书的指纹信息,我们的证书不再受信任了,自然而然就无法建立连接。所以必须想办法让app信任,才能继续抓包。

    当然这个分为两种情况:

    1.单项校验-客户端校验服务端的证书。
    2.双向认证-客户端不仅仅要校验服务端的证书,也会在app内放一张证书;服务端也会检验客户端里的证书。




二、单向校验

    Android 系统中已经提供了检验证书的api,我们只需要重写实现以下方法即可:    

    ①checkClientTrusted

    ②checkServerTrusted

    ③verify


    这类的对抗需要我们将这些函数的校验进行置空,默认信任所有证书即可。

应用抓包进阶


典型的 xposed 插件 SSLUnping

应用抓包进阶


Frida objection 中的 

android ansslpinning disable

应用抓包进阶



三、双向认证

    APP 除了校验服务端的证书,服务端还会校验 APP 的证书。https 双向证书校验在实际中几乎很少用到,因为服务器端需要维护所有客户端的证书,这无疑增加了很多消耗,因此大部分厂商选择使用单向证书绑定。


对抗双向认证需要完成两个环节

(1) 让客户端认为 burp 是服务端 

    这一步就是破解 ssl Pinning,方法和上述过程完全相同。

(2) 让服务端认为 burp 是客户端

    这一步我们需要导入客户端的证书burp,客户端的证书一定会存在于本地代码中,而且可能还会有密码,在这种情况下需要逆向客户端 app,找到证书和密码,并转为 pkcs12 格式导入到 burp。 

    User options->SSL->Client SSCertificate。
    通常情况下应用会将证书放置在资源目录app/asset下,后缀名为p12、pfx的文件。当然也可能会伪装成其他文件,例如图片文件等。

应用抓包进阶


怎么找到证书密码呢?

    一般逆向分析找到密码,还可以通过hook api java.security.KeyStore使密码自吐。

    1.jadx中搜索证书的名字、或者证书链x509certificate分析定位到关键位置。

应用抓包进阶

    2. 服务器对客户端进行校验过程中,客户端将证书公钥发送给服务器,以及从服务器获取session和私钥解密过程中,需要API进行操作。

    由于API存在于java层框架内,所以我们使用的是hook框架层代码:java.security.KeyStore,使密码自吐。

应用抓包进阶

    Burp 导入客户端中的证书教程:

    https://bbs.pediy.com/thread-265404.html



四、代理检测

    手机中去设置代理到我们的电脑,设置代理有两种方式。


第一种方法

应用抓包进阶


第二种方法

    adb shell settings put global http_proxy 192.168.xx.xxx:8888

    获取当前系统是否设置代理,可以根据不同的Api Level,通过以下方法检测:System.getProperty()和android.net.proxy.getXxx()

应用抓包进阶



五、利用框架强制不走代理

    对于一些常用的网络库,其实是提供了我们设置的代理的接口,我们只需要将其设置成无代理的模式,它就不会走应用系统默认的代理进行网络请求。即使我们设置了代理也是会被忽略。最直观的表现就是,明明设置了代理,抓包工具中没有app的流量但是app与服务器可以正常交互运行。
    例如比较常用的 OkHttp就可以直接设置 NO_PROXY。



六、VPN检测

    当我们抓不到包时,有时候会采用VPN抓包,VPN 抓包的本质是在网络层/路由层抓包,例如小黄鸟常见的检测方式是:tun0 PPP0和Transpoart 等特征。


检测tun0 PPP0

应用抓包进阶


检测 Transpoart

应用抓包进阶



七、如何应对代理检测、

强制不走代理、VPN检测

    1.hook相关函数。

    2.反编译修改代码逻辑。

    3.可以使用iptables对请求进行强制转发,ProxyDroid全局代理工具底层原理通过iptables实现的,所以使用ProxyDroid开启代理,可以比较有效的绕过代理检测。

    iptables路由重定向

    · 设置重定向:
    iptables -t nat -A OUTPUT -d 0.0.0.0/0 -p tcp -j DNAT --to <电脑IP地址>

    · 取消重定向:
    iptables -t nat -D OUTPUT -d 0.0.0.0/0 -p tcp -j DNAT --to <电脑IP地址>

    4.okhttp3中因设置NO_PROXY,不走系统代理情况的frida hook脚本。

应用抓包进阶

    5.同理我们知道VPN检测也是通过api获取判断,所以我们对api进行hook隐藏。

应用抓包进阶



总结

    攻防永无止境,有的开发者采用的是自身的SSL框架,这时候我们再去hook ssl库中的函数自然而然就无效了,还有的采用的是一些app内置Vray、Shadowsocks ,这些也可以一定程度上对抗抓包,但是最终还是需要具备比较强的逆向分析能力以及对系统的理解。


应用抓包进阶

联想GIC全球安全实验室(中国)

[email protected]



原文始发于微信公众号(联想全球安全实验室):应用抓包进阶

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月10日14:15:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   应用抓包进阶http://cn-sec.com/archives/1400966.html

发表评论

匿名网友 填写信息