😇
牛牛的安全 Odin
  • 个人介绍
  • 数据安全
  • 工控安全
    • 工控概念
  • 车联网安全合规
    • R155
    • CSMS\VTA
    • GDPR认证
  • 车联网安全
    • 漏洞订阅
    • 汽车攻击时间轴
    • 汽车信息安全研究
      • 车厂安全需求 Custom Requirement
      • 安全威胁
      • 参考文章
      • Who’s Behind the Wheel?
      • 安全研究基础
      • 智能网联汽车安全渗透指标
      • 智能网联汽车软件安全测试关键技术研究
      • 基于硬件在环的整车控制器功能安全测试技术研究
      • 智能网联汽车信息安全解决方案
      • 自动驾驶汽车的安全性-识别挑战
    • ECU逆向案例
      • 特斯拉攻击链
      • 汽车动力系统ECU固件逆向工程初探
  • 物联网安全
    • IoT 技术和协议
    • 智能设备常规测试思路总结
    • 各种调试接口(SWD、JTAG、Jlink、Ulink、STlink)的区别
    • QEMU 系统仿真
      • 如何“用 QEMU 模拟它”
      • 处理加密的路由器固件
    • 自动分析Automated Approach
    • IOT渗透测试(一)
    • 物联网安全目录
  • 固件分析案例
    • 智能门锁、手环
      • MCU固件反汇编
      • 云丁鹿客门锁中bootloader和FreeRTOS的分析
      • 云丁鹿客门锁BLE通信的分析(下)
      • 云丁鹿客门锁BLE通信的分析(中)
      • 云丁鹿客门锁BLE通信的分析(上)
      • 华为智联旗下小豚AI摄像头的完整分析(下)
      • 华为智联旗下小豚AI摄像头的完整分析(上)
      • 海康萤石智能门锁的网关分析(4)
      • 海康萤石智能门锁的网关分析(3)
      • 海康萤石智能门锁的网关分析(2)
      • 海康萤石智能门锁的网关分析(1)
      • idapython编写和调试
      • 果加智能门锁的全面分析(下)
      • 果加智能门锁的全面分析(中)
      • 果加智能门锁的全面分析(上)
      • BLE智能手环
      • 耶鲁智能门锁的简单测试(下)
      • 耶鲁智能门锁的简单测试(上)
      • 耶鲁门锁漏洞
      • 对一款BLE灯泡的分析
      • BLE协议栈与Android BLE接口简介
    • 在IoT设备中查找端口对应进程的四种方法
    • 路由器命令执行
    • 对基于Philips TriMedia CPU的网络摄像机进行逆向工程
    • 从Microsoft Band以及 Hello Sense 设备中提取自己的历史数据
    • CVE-2021-22909- 深入研究 UBIQUITI 固件更新错误
    • 复现|摄像头固件重打包
    • Dlink_DWR-932B路由器固件分析
    • 针对小米九号平衡车的无接触式攻击
    • 记一次智能印章设备的漏洞挖掘
  • APP 逆向
    • Go二进制文件逆向分析从基础到进阶——综述
    • Switch APP逆向分析
  • 传统静态代码分析
    • 静态分析案例
      • ELF恶意软件的静态分析原理和方法(上)
      • ELF恶意软件的静态分析原理和方法(下)
    • 静态代码分析工具清单
    • 企业级静态代码分析工具清单
  • 应用安全测试
    • DAST、SAST、IAST
    • IAST 工具初探
  • 芯片架构
    • ARM指令集概念
    • ARM指令集
    • 冯·诺伊曼结构
    • 指令集
    • 处理器架构、指令集和汇编语言,三者有何关系?
  • 病毒分析
    • 熊猫烧香
  • 编程知识
    • REST API 教程
  • 流量分析工具
    • 卡巴斯基开源的智能手机流量劫持工具
    • 利用 Burp Suite 劫持 Android App 的流量(二)
    • 利用 Burp Suite 劫持 Android App 的流量(一)
  • 区块链安全
    • 安全多方计算
    • Chainalysis 团队从区块链的角度分析发现 2020 年最大的 4 起勒索软件攻击实现存在关联
  • 攻击案例
    • 特斯拉Powerwall网关可能受到黑客攻击
  • 移动应用
    • Mac上使用Charles抓包
    • 手机抓包工具汇总
    • APP渗透测试流程和技巧大全
    • 加壳和脱壳
    • 浅谈 Android Dex 文件
    • 移动应用漏洞分析样例分享
    • 移动应用常见漏洞分析
    • 移动应用漏洞分析工具介绍
    • 渗透测试流程详解 及 移动APP安全测试要点
    • Frida Android hook
  • 安全设计
    • 【软件安全设计】安全开发生命周期(SDL)
Powered by GitBook
On this page
  1. 流量分析工具

利用 Burp Suite 劫持 Android App 的流量(二)

Previous卡巴斯基开源的智能手机流量劫持工具Next利用 Burp Suite 劫持 Android App 的流量(一)

Last updated 3 years ago

中,我详细介绍了设置设备、是否在设备上配置了代理?、Burp是否监听所有接口?等问题,这篇文章,我会接着介绍其他一些方法。

应用程序是否使用自定义端口?

这仅在应用程序不支持代理时才真正适用,在这种情况下,你或ProxyDroid将使用iptables拦截流量,但是这些iptables规则只针对特定的端口。在ProxyDroid源代码中,你可以看到仅针对端口80 (HTTP)和443 (HTTPS)。如果应用程序使用非标准端口(例如8443或8080),它将不会被拦截。

完整性检查

这个有点棘手,我们需要找到离开应用程序而不前往端口80或443的流量。最好的方法是监听所有离开应用程序的流量,我们可以在设备上使用tcpdump或者在使用第二个Wi-Fi热点的主机上使用tcpdump。

在具有root权限的adb shell上运行以下命令:

tcpdump -i wlan0 -n -s0 -v

你会看到许多不同的联系,理想情况下,你应该启动命令、打开应用程序并在知道应用程序发出了一些请求后立即停止tcpdump。一段时间后,你将看到使用非默认端口连接到远程主机。在下面的例子中,在端口8088上有多个到192.168.2.70的连接:

或者,你可以使用 tcpdump -i wlan0 -n -s0 -w /sdcard/output.pcap将tcpdump的输出发送到pcap。从设备检索到output.pcap文件后,可以使用WireShark打开它并进行检查:

解决方案

如果你的应用程序确实不了解代理并且无法通过自定义端口进行通信,则ProxyDroid将无法为你提供帮助。 ProxyDroid不允许你添加自定义端口,尽管它是一个开源项目,这意味着你必须手动使用iptables。

1.你可以在主机上充当路由器的地方设置第二个热点,这样就可以执行MitM;

2.你使用ARP欺骗在路由器和设备之间执行活动MitM;

3.你可以自己使用iptables并将所有流量转发到Burp,由于Burp在单独的主机上监听,所以最好的解决方案是使用adb reverse将设备上的端口映射到Burp实例。这样,你无需设置单独的热点,只需通过USB连接设备即可。

3.1在主机上:adb reverse tcp:8080 tcp:8080;

3.2在设备上,以root用户身份:iptables -t nat -A OUTPUT -p tcp -m tcp --dport 8088 -j REDIRECT --to-ports 8080。

应用程序是否使用SSL锁定?

此时,你应该在Burp的事件日志仪表板中看到HTTPS连接失败。下一步是验证是否使用SSL锁定,并禁用它。尽管许多Frida脚本都声称是通用的root权限绕过,但没有一个脚本可以接近。 Android应用程序可以使用许多不同的技术编写,并且通常仅支持其中一些技术。你可以在下面找到实现SSL锁定的各种方法以及解决方法。

注意,有些应用程序有多种锁定特定域的方法,为了禁用所有的SSL锁定,你可能必须组合脚本。

通过android:networkSecurityConfig 锁定

Android允许应用程序通过使用network_security_config.xml文件来执行SSL锁定,这个文件在AndroidManifext.xml中被引用,并且位于res/xml/中。名称通常是network_security_config.xml,但它不必是这样。作为一个示例应用程序,Microsoft Authenticator应用程序定义了以下两个引脚:

解决方案

使用任何常用的通用绕过脚本:

1.运行Objection并执行android sslpinning disable命令;

2.使用Frida代码共享:frida -U --codeshare akabe1/frida-multiple-unpinning -f be.nviso.app;

3.使用apktool d和apktool b删除AndroidManifest中的networkSecurityConfig设置。通常通过Frida会更快,而且很少需要。

通过OkHttp锁定

另一种流行的固定域的方法是通过OkHttp库,你可以通过grepping OkHttp或sha256来进行grep,你将很有可能找到与OkHttp相关的引用(甚至哈希) 以及所锁定的内容:

解决方案

使用任何常用的通用绕过脚本:

1.运行Objection并执行android sslpinning disable命令;

2.使用Frida代码共享:frida -U --codeshare akabe1 / frida-multiple-unpinning -f be.nviso.app;

3.使用apktool反编译apk,并修改锁定的域。默认情况下,OkHttp将允许未专门锁定的连接。因此,如果你可以查找和修改锁定的域名,则锁定将被禁用。但是,使用Frida的速度要快得多,所以这种方法很少被采用。

通过OkHttp在混淆的应用程序中进行锁定

通用的锁定脚本可以在混淆的应用程序上工作,因为它们挂接在无法混淆的Android库上。但是,如果应用程序使用的不是默认的Android库,那么类将被混淆,脚本将无法找到正确的类,OkHttp就是一个很好的例子。当应用程序使用OkHttp并已被混淆时,你必须找出CertificatePinner.Builder类的混淆名称。你可以在下面看到通过搜索相同的sha256字符串使用模糊的OkHttp的情况。这次,你将不会看到很好的OkHttp类引用,但通常仍会找到字符串引用以及一些程序包名称。当然,这取决于混淆的程度。

解决方案

你必须编写自己的Frida脚本,才能挂接CertificatePinner.Builder类的混淆版本。在这篇文章中,我已经详细介绍了轻松找到正确方法的步骤,并创建了一个自定义的Frida脚本。

锁定各种库

除了使用networkSecurityConfig或OkHttp,开发人员还可以使用许多不同的标准Java类或导入的库执行SSL锁定。此外,一些基于Java的第三方应用程序(例如PhoneGap或AppCelerator框架)为开发人员提供了特定功能,以向应用程序添加锁定。

有很多方法可以通过编程方式进行,所以最好的选择是尝试各种反锁定脚本,至少要弄清楚触发了哪种方法,以便你可以在应用程序上获取信息,之后你便可以进一步对该应用程序进行逆向工程,以弄清拦截为何仍不起作用。

解决方案

尽可能多地尝试找到的SSL锁定脚本,并监视它们的输出。如果你能够识别所使用的某些类或框架,这将帮助你创建针对应用程序的自定义SSL锁定绕过。

1.运行Objection并执行android sslpinning disable命令;

2.使用Frida脚本,其中许多具有重叠的功能,但你永远不会知道。请注意其中有多少声称是通用的:

https://codeshare.frida.re/@akabe1/frida-multiple-unpinning/
https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/
https://codeshare.frida.re/@sowdust/universal-android-ssl-pinning-bypass-2/
https://codeshare.frida.re/@masbog/frida-android-unpinning-ssl/
https://codeshare.frida.re/@segura2010/android-certificate-pinning-bypass/
https://codeshare.frida.re/@akabe1/frida-universal-pinning-bypasser/

在第三方应用框架锁定

第三方应用程序框架将有自己的针对TLS和HTTP的底层实现,默认的锁定绕过脚本将无法工作。如果应用程序是用Flutter, Xamarin或Unity编写的,你需要做一些手工逆向工程。

查明是否使用了第三方应用程序框架

如上所述,以下文件是Flutter,Xamarin或Unity编写的:

Flutter: myapp/lib/arm64-v8a/libflutter.so

Xamarin: myapp/unknown/assemblies/Mono.Android.dll

Unity: myapp/lib/arm64-v8a/libunity.so

在Flutter应用程序中锁定

Flutter不支持代理,也不使用系统的CA存储。每个Flutter应用程序都包含一个完整的可信CA,用于验证连接。因此,虽然它很可能不执行SSL锁定,但它仍然不信任你设备上的根CA,因此不可能被拦截。

解决方案

关注我关于ARMv7(x86)https://blog.nviso.eu/2019/08/13/intercepting-traffic-from-android-flutter-applications/或ARMv64(x64)https://blog.nviso.eu/2020/05/20/intercepting-flutter-traffic-on-android-x64/的文章。

在Xamarin和Unity应用程序中锁定

Xamarin/Unity应用程序通常并不太难,但它们确实需要手工逆向工程和补丁。Xamarin/Unity应用程序在程序集/文件夹中包含.dll文件,这些文件可以用.NET反编译器打开。我最喜欢的工具是DNSpy,它也允许你修改dll文件。

解决方案

步骤如下:

1.使用apktool提取apk并找到.dll文件;

2.使用DNSpy打开.dll文件并找到HTTP锁定逻辑;

3.通过修改C#代码或IL修改逻辑;

4.保存修改后的模块;

5.用修改后的版本覆盖.dll文件;

6.重新打包并退出应用程序;

7.重新安装应用程序并运行。

如果你仍然无法拦截流量怎么办?

很有可能在所有这些步骤之后,你仍然无法拦截所有流量,原因如下:

1.非HTTP协议(我们只使用HTTP代理,所以非HTTP协议不会被拦截);

2.很复杂的混淆;

3.防止篡改。

你通常会在手机游戏或金融应用程序中看到这些特性,此时,你必须对应用程序进行逆向工程,并编写自己的Frida脚本,这可能是一个非常困难和耗时的过程。

上一篇文章