专栏首页FreeBufMEDUZA:一款针对iOS应用程序的通用SSL解绑工具

MEDUZA:一款针对iOS应用程序的通用SSL解绑工具

MEDUZA

MEDUZA是一款针对iOS应用程序的通用SSL解绑工具,该工具基于Frida开发,可以当作SSLKillSwitch工具的替代品。本来我是想自己开发自己用的,而且原本并不打算开源出来。我个人不太喜欢开源,但棱角总会被磨平的…

工具运行机制

该工具的运行机制非常简单,当你首次运行一款应用程序并且没有开启网络嗅探的时候,也就是正常使用一款App的时候,MEDUZA会在后台静默执行,并收集App用于连接后台服务器时所使用的证书信息。接下来,MEDUZA会生成一个Frida脚本,并伪造(相当于解绑操作)一份收集到的证书。那么当你第二次运行这款应用程序时,我们就可以使用生成的脚本并配合中间人代理(Mitmproxy)来捕捉应用程序流量了。

工具限制

MEDUZA只能解绑那些使用iOS系统SSL库的应用程序,像Instagram(Instagram使用了OpenSSL)这样的应用程序并没有使用iOS系统SSL库,而是使用某些第三方自定义的SSL实现栈,那MEDUZA可就没办法了。

除此之外,MEDUZA跟SSLKillSwitch相比,使用了完全不同的功能实现方式。因此理论上来说,MEDUZA应该可以跟SSLKillSwitch等类似的工具结合起来一起使用,不过我还没有进行过测试。

工具要求

  • 适用于macOS Majave及更新版本,也许MEDUZA能在Windows和Linux平台上运行,不过我也没有进行过测试。
  • 一台已越狱的iOS设备,MEDUZA已在iPhone SE 2016(iOS 13.3)和iPhone 6s(iOS 14.0)上进行过测试,理论上来说MEDUZA也可以在其他iOS设备上运行。
  • 需要在macOS和iOS设备上安装最新版本的Frida。
  • 在macOS上安装好Mitmproxy
  • macOS和iOS设备需要使用USB数据线连接起来,并且连接到同一个WiFi网络。
  • 在macOS上安装好Python3以及cryptography库,安装命令如下:
pip install cryptography

工具下载

广大研究人员可以使用下列命令将该项目源码克隆至本地:

git clone https://github.com/kov4l3nko/MEDUZA.git

如何嗅探HTTP(s)流量

该操作分两步,首先我们需要获取到目标应用程序绑定的所有证书,然后生成一个脚本来伪造这些证书,即解绑操作。需要注意的是,这一步必须在一开始就执行。接下来,你就可以使用生成的脚本来嗅探网络流量了。第一步操作的命令步骤如下:

1、在macOS上打开终端窗口,然后运行MEDUZA来枚举出iOS设备上安装/运行的应用程序:

$ python3 meduza.py -l

命令的输出结果如下:

MEDUZA iOS SSL unpinning tool

by Dima Kovalenko (@kov4l3nko)

============================================================

[*] Waiting for an iOS device connected to USB...

[*] A list of installed applications:

+ Uber (com.ubercab.UberClient) is running, pid=40663

- Home (com.apple.Home)

- Files (com.apple.DocumentsApp)

- Podcasts (com.apple.podcasts)

- Contacts (com.apple.MobileAddressBook)

- Music (com.apple.Music)

- Photos (com.apple.mobileslideshow)

- TV (com.apple.tv)

+ App Store (com.apple.AppStore) is running, pid=40627

- Clock (com.apple.mobiletimer)

+ Settings (com.apple.Preferences) is running, pid=40619

- TikTok (com.zhiliaoapp.musically)

- Watch (com.apple.Bridge)

- FaceTime (com.apple.facetime)

- Maps (com.apple.Maps)

- Voice Memos (com.apple.VoiceMemos)

<...etc, you'll see remaining apps here...>

2、确保iOS设备的WiFi设置是干净的,比如说,没有配置代理或指定自定义路由器IP等等。在第一步,我们不用尝试嗅探网络流量,因此WiFi网络连接应该跟往常一样。

3、选择目标应用程序,比如说Uber,然后使用下列命令运行MEDUZA:

$ python3 meduza.py -s <app name of id> <path/to/the/frida/script.js>

目标应用程序为Uber:

$ python3 meduza.py -s com.ubercab.UberClient ./unpinUber.js

这里的-s参数表明重新生成Uber客户端,如果你想要跟一个正在运行的App连接而不需要重新生成客户端的话,可以使用-a参数来代替-s。

运行结果如下:

MEDUZA iOS SSL unpinning tool

by Dima Kovalenko (@kov4l3nko)

============================================================

[*] Waiting for an iOS device connected to USB...

[*] Spawning com.ubercab.UberClient...

[*] Attaching to com.ubercab.UberClient...

[*] Reading JS payload meduza.js...

[*] Injecting JS payload to the process...

[*] SecCertificateCreateWithBytes(...) hooked!

[*] Resuming the application...

[*] Press ENTER to complete (you can do it anytime)...

[*] Got another certificate, its raw SHA256 hash: 99b05557bafde776f0afc15bbf6733585b8a03606cbf757158fb96324e01310a

crashlytics.com

reports.crashlytics.com

firebase-settings.crashlytics.com

apps-ios.crashlytics.com

android-sdk.crashlytics.com

api.crashlytics.com

settings-api.crashlytics.com

download.crashlytics.com

distribution-uploads.crashlytics.com

cm-us-east-1.crashlytics.com

www.crashlytics.com

try.crashlytics.com

kits.crashlytics.com

cm.crashlytics.com

apps.crashlytics.com

cm-ap-southeast.crashlytics.com

settings.crashlytics.com

e.crashlytics.com

[*] Got another certificate, its raw SHA256 hash: 954a9f7dd9f03784bdc5ca9183484a5bfc278ca9ba9f42b3a82f96cffddf277b

[*] Got another certificate, its raw SHA256 hash: 649a4665273e60b353fe9b4db1807d9669f82cb0ee85bd1e562e7c2f33fdec3a

*.cfe.uber.com

cfe.uber.com

cn-dca1.cfe.uber.com

[*] Got another certificate, its raw SHA256 hash: eae72eb454bf6c3977ebd289e970b2f5282949190093d0d26f98d0f0d6a9cf17

<...etc, you can see many messages about certificates, it's ok...>

4、在App上执行正常操作,比如说登录账号,然后点一些按钮,或者注销登录之类的,也就是像正常用户一样操作。每当App使用证书来跟服务器进行通信连接时,MEDUZA都将捕捉到证书。

5、在App上完成正常操作之后,在终端窗口按下回车键。MEDUZA将生成一个脚本,比如说./unpinUber.js。

第一步操作完成之后,第二步就是使用脚本了:

1、在macOS终端窗口中运行下列命令来查看macOS的IP地址:

ifconfig | grep "inet "

2、在macOS上运行Mitmproxy;

3、在你的iOS设备上,设置macOS的IP地址以及Mitmproxy端口(默认为8080),以作WiFi连接的代理;

4、运行目标程序对应的生成脚本,然后在macOS终端运行下列命令来解绑Uber应用程序证书:

$ frida -U -f com.ubercab.UberClient --no-pause -l ./unpinUber.js

如何防止应用程序被MEDUZA攻击?

  • 使用第三方SSL实现,比如说使用OpenSSL之类的来代替iOS系统SSL库;
  • 你可以为你的App添加一些反Frida保护机制,因为MEDUZA基于Frida实现,如果Frida无法运行,那么MEDUZA也就无法运行了。

工具运行截图

项目地址

MEDUZA:https://github.com/kov4l3nko/MEDUZA

本文分享自微信公众号 - FreeBuf(freebuf),作者:Alpha_h4ck

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Gospider:一款基于Go语言的快速Web爬虫

    Gospider是一款运行速度非常快的Web爬虫程序,Gospider采用Go语言开发。

    FB客服
  • 匿名助手Tor-Router:Tor网关及流量配置工具使用全教程

    今天给大家介绍的是一款名叫Tor-Router的实用工具,这款工具可以帮助我们将Tor设置为默认网关,并将所有的网络流量通过Tor来发送,整个过程不需要用户手动...

    FB客服
  • iOS 9关键组件iBoot源码泄漏到GitHub,目前已经紧急删除

    近期,以安全著称的苹果iOS系统被曝出iBoot源码泄漏,被发布到GitHub,这几乎是iOS系统有史以来遭遇到的最大的安全事故了。黑客可利用此源码发现iOS ...

    FB客服
  • Excel VBA解读(144): 使用Application事件和缓存将更快地获取已使用单元格区域

    在上一篇文章中,建议加速检索已使用单元格区域最后一行方法之一是使用缓存和Application对象的AfterCalculate事件。

    fanjy
  • 邻汇吧获数千万元融资 官网为三拼域名

    邻汇吧-线下流量交易市场,是一个创新型的广告资源交易平台,专注于线下人群聚集场地上的人流量资源变现的问题。今日线下场地对接平台“邻汇吧”获得了由招商...

    躲在树上的域小名
  • Javac命令使用ct.sym文件约束可使用的类

    在JDK6,升级为JDK7或者JDK8的过程中会遇到一些奇怪的问题,简单的介绍一下经典的ClassNotFound:sun.nio.*、com.sun.imag...

    白凡
  • iOS 9关键组件iBoot源码泄漏到GitHub,目前已经紧急删除

    近期,以安全著称的苹果iOS系统被曝出iBoot源码泄漏,被发布到GitHub,这几乎是iOS系统有史以来遭遇到的最大的安全事故了。黑客可利用此源码发现iOS ...

    FB客服
  • 用LogParser对IIS 日志进行分析

    LogParser 是一个命令行工具,可以通过SQL 语句对日志进行分析统计,LogParser功能非常的强大,不但可以分析IIS日志,还可以分析系统事件日志,...

    张善友
  • 如何避免程序运行过程中出现错误中断程序?(下)

    本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地...

    用户7054460
  • CDN掀起二次变革:从传输服务到边缘计算

    美国雇主评价网站 Glassdoor 在 4 月中旬发布的「美国薪酬最高的 20 大科技公司」榜单中,许多人并不熟悉的阿卡迈公司位列其中,其员工人均年薪为 12...

    云加社区

扫码关注云+社区

领取腾讯云代金券