使用 Burp 拦截 Android 应用程序流量

信息安全 安卓 代理人 打嗝套件
2021-08-26 20:32:30

我试图了解当流量为 https 时 Burp 和 Android 应用程序会做什么。我没有手机上安装 Burp CA。

  1. 一些应用程序完全拒绝工作。他们显示错误消息或认为电话不在线。这是因为 SSL Pinning 吗?

  2. 一些应用程序正常工作,但 Burp 没有捕获任何数据包。这是怎么回事?没有 burps CA,手机和服务器如何通信?Burp 只是中继流量吗?

  3. 一些应用程序工作正常,但 Burp 仅拦截少数操作的数据包。被截获的操作可能正在使用空信任管理器或类似的东西,但其余代码如何与服务器通信?

2个回答

首先要记住的是 Burp 是一个 HTTP(S) 代理。它不会对任何不是 HTTP(S) 的数据做任何事情(好的,除了 websockets)。另一方面,Android 应用程序可以使用他们想要的任何协议。很多人使用 HTTP(S),只是因为它适合他们发送的数据类型,但实际上并不是必需的。

如果应用不使用 HTTP(S),则该流量不会出现在 Burp 中。最明显的例子是 DNS 流量 - 即使您通过 Burp 使用浏览器,您也不会看到任何 DNS 查找请求。

所以:

  1. 完全拒绝工作的应用程序。他们可能正在使用证书固定——不过这里有两个选项。第一种类型,他们正在为要安装在设备上的目标站点寻找有效证书。在这种情况下,安装 Burp CA 证书将使它们再次工作。第二种类型,他们使用一些自定义固定,这需要服务器提供特定的证书,或者由信任链中的特定条目签名的证书。这些不会被 Burp CA 证书愚弄。
  2. 无需捕获任何数据包即可运行的应用程序。他们可能没有使用 HTTP(S)。这可能是诸如 SSH 客户端、Whatsapp 等消息服务或游戏之类的东西,其中数据包的丢失不如大多数快速到达的数据包重要,这更适合基于 UDP 的网络连接而不是基于 TCP 的网络连接(如 HTTP)。他们也可能会忽略任何现有的代理设置,特别是如果您只是使用 HTTP 代理应用程序进行拦截。要查看这些数据,您需要像 Wireshark 这样可以处理其他类型数据的工具,以及支持监控模式的 wifi 卡。
  3. 仅显示一些流量的应用程序。如果您看到的流量是统计数据包或广告,它们可能属于上述第 2 类 - 大多数统计系统似乎都使用 HTTP(S),因为它在任何东西中都相对容易实现,而且您通常必须有某种 HTTP无论如何打开连接以下载广告。
  4. 实际未连接的应用程序。有些应用程序看起来应该连接到互联网,但实际上并没有,或者只是不定期地这样做。这些可以包括时间表应用程序、一些游戏(例如,高分每天更新)或大部分可以在本地存储数据的任何东西(地图应用程序可能会在本地存储“常规”区域,并调用景点或更远的地方的评论)。在这种情况下,您可能没有看到他们在您观看时尝试连接。

如果可以的话,我建议使用 Wireshark 查看流量,看看正在使用哪些协议,然后使用适当的软件挖掘有趣的协议,记住有些是故意难以检查的——来自 Whatsapp 的加密数据包应该是不可读的,否则他们就大错特错了!

我在测试 iPhone 应用程序时遇到了类似的问题。该应用程序没有使用本机库,也不支持 http 代理。为了“解决”这个问题,我将所有流量透明地转发到 Burp 代理。请参阅如何捕获 Android 应用程序的所有流量?有关此设置的说明。

一些应用程序使用证书固定。一些应用程序将固定它看到的第一个证书,其他应用程序将其硬编码在应用程序中。在第一种情况下,您只需确保在首次运行代理时流量将通过您的代理。

如果客户端过早断开连接(拒绝证书),我相信您会在 Burps 警报选项卡中看到警告。

在后者中,这有点困难,因为您必须修改二进制文件本身。

我自己没有尝试从 android 应用程序中破坏证书固定,但这个链接看起来是个不错的方法。