如何通过 Wi-Fi 通话建立电话网络

这不仅仅是一个普通的 Discord 频道或私人 VoIP PBX。

我将向您展示如何接管越狱 iPhone 上的 Wi-Fi 呼叫,以集成到本机电话拨号器和 SMS 应用程序中,就像真正的运营商一样。

我的最终目标是发行我自己的 SIM 卡,通过 Wi-Fi 将任何越狱或未越狱的手机连接到我的电话网络。

前言

本文转自国外大佬的一篇文章《VoLTE/VoWiFi research with $0 of equipment: set up a phone network over Wi-Fi calling》

正文

VoLTE/VoWiFi 研究不需要昂贵的设备!通过使用免费软件设置您自己的 Wi-Fi 呼叫服务器,了解 VoLTE/VoWiFi 的工作原理。

这个没有实际用处(你的私人电话网络不能连接到真实电话网络所以你只能给自己打电话),但它很有趣!

介绍

图片[1]-如何通过 Wi-Fi 通话建立电话网络-FancyPig's blog

这是 VoWifi/VoLTE 系列文章中的第二篇。第一个在这里

我正在建立自己的私人电话网络,你也可以!

这不仅仅是一个普通的 Discord 频道或私人 VoIP PBX。我将向您展示如何接管越狱 iPhone 上的 Wi-Fi 呼叫,以集成到本机电话拨号器和 SMS 应用程序中,就像真正的运营商一样。

我的最终目标是发行我自己的 SIM 卡,通过 Wi-Fi 将任何越狱或未越狱的手机连接到我的电话网络。

无用?也许:您只能拨打专用电话网络上的其他人。它就像一个 IRC 服务器,但通过短信和电话。但如果你想试试,给我发邮件吧!

VoLTE 和 Wi-Fi 通话基于 IPsec/IKEv2 和 SIP 等开放标准,因此我们的电话网络将使用免费软件构建:

iPhone ->越狱调整以重定向 Wi-Fi 呼叫->我的 Docker 容器-> StrongSwan -> Kamailio

检查 VoWiFi

要了解 VoLTE 和 VoWiFi,首先要在您拨打电话或发送 SMS 时捕获手机的流量。

您只需要一部 iPhone 和一台装有 Xcode 和 Wireshark 的 Mac。

Xcode 提供了rvictl从 iPhone 捕获所有网络流量的工具,无需越狱。

编辑:如果您没有 Mac,gh2o 的 rvi_capture可以在 Linux 和 Windows 上捕获。(谢谢,亚当,让我知道!)

电话和运营商之间的所有 SIP 消息都是可见的,完全未加密。您可以看到当您拨打另一部电话时会发生什么:

图片[2]-如何通过 Wi-Fi 通话建立电话网络-FancyPig's blog

或者您如何接收短信:

图片[3]-如何通过 Wi-Fi 通话建立电话网络-FancyPig's blog

在 VoWiFi 上,您甚至可以转储实际的语音编解码器数据包。

此外,iPhone 还提供来自 VoWiFi ePDG VPN 隧道和 SMS 处理的日志:

在 Mac 上打开控制台应用程序,过滤到 CommCenter,然后启用“操作 -> 包含信息消息/包含调试消息”。

然后,过滤 CommCenter 以获取 VoLTE/VoWiFi 消息,例如此 IKEv2 握手:

图片[4]-如何通过 Wi-Fi 通话建立电话网络-FancyPig's blog

我们自己的电话网络

如果您不想只查看 VoLTE/VoWiFi 数据包怎么办?如果你想建立自己的网络怎么办?

为此,您需要一个越狱的 iPhone 和一个 Docker 容器。

我在带有 Verizon SIM 的 iOS 14.1 上使用越狱的 iPhone 12。

如果您使用的是 Android,则搭载 Android 10 及更高版本的设备(所有 2020 年或更高版本的设备)可能会在没有 root 的情况下重定向 Wi-Fi 呼叫,但我还没有尝试过。

重定向 ePDG 连接

我们的目标是 VoWiFi(Wi-Fi 通话),因为运行 VoLTE 网络需要至少150 美元的收音机和 LTE 频率广播的批准。Wi-Fi 不需要任何特殊的硬件或繁文缛节。

Wi-Fi 通话使用 IPsec/IKEv2 VPN 隧道进行保护,并使用 EAP-AKA 进行身份验证,它使用 SIM 卡上只有运营商知道的密钥。(详情见我之前的帖子

因为我没有空白 SIM 卡,所以我编写了一个越狱调整,用简单的预共享密钥(密码)身份验证替换 SIM 卡检查。

要运行调整,您需要:

  • 越狱您的手机并安装 Substrate 或其他方法挂钩平台。
  • 设置Theos
  • 克隆RedirectVoWiFiTweak
  • 服务器地址指向您的 VoWiFi 服务器的地址
  • make package install
  • 将手机置于飞行模式,然后启用 Wi-Fi 通话(设置 -> 蜂窝网络 -> Wi-Fi 通话)

最终结果:VoWifi 隧道为您的 IPsec/IKEv2 VPN 服务器创建了一个 VPN,而不是 Verizon 的。

我是如何构建调整的

iPhone 在用户空间中运行整个 VoLTE/VoWiFi 堆栈:通过越狱,我们可以做任何事情。但是,我的最终目标是在未越狱的手机上使用自定义 SIM 卡进行这项工作,所以我只做了最少的更改。

ePDG 只是一个 IPsec/IKEv2 VPN 隧道,在 SIM 卡上具有 EAP-AKA 身份验证。要禁用 EAP-AKA 身份验证并切换到 PSK:

  • 我跑过去nm CommCenter看到它是NEIPSecIKECreateSessionWithInterface用来启动 VPN 隧道的。
  • 我在 NetworkExtensions 中找到了该符号并在 Ghidra 中将其拆解
  • 它是-[NEIKEv2Session initWithIKEConfig:firstChildConfig:sessionConfig:queue:ipsecInterface:ikeSocketHandler:saSession:packetDelegate:]`的包装
  • 我迷上了那个方法,并抛弃了论点
  • 我用 PSK 在 Mac 上创建了另一个 IPsec/IKEv2 隧道
  • 我附加到 macOS 的 VPN 实现:
    • lldb -n NEIKEv2Provider -w
    • b initWithIKEConfig:firstChildConfig:sessionConfig:queue:ipsecInterface:ikeSocketHandler:saSession:packetDelegate:
  • 我将其论点与 VoLTE ePDG 隧道进行了比较,以了解 macOS 如何设置 PSK
  • 我让我的调整为 PSK 设置了相同的标志

这是我第一次调整 iPhone,感谢所有帮助过我的人:

  • dlevi309向我发送拉取请求以自动重启 CommCenter
  • hbkirb将我指向HearseDev的 Theos 徽标语言的 clang 格式包装器

并感谢我查阅的资源:

  • Kanns103的调整开发指南
  • elihwyma的 commcenterpatch13,它也钩住了 CommCenter

带有 StrongSwan 和 Kamailio 的 Wi-Fi 呼叫服务器

电话与两项服务通话以设置 VoWifi:

  • ePDG,一个 IPsec/IKEv2 VPN 服务器。我们使用 StrongSwan。
  • P-CSCF,一个 SIP VoIP 服务器。我们使用 Kamailio。

我制作了一个预装的Docker 容器

在 macOS 12.1/Mac Mini 2020 (M1)/Docker for Mac 上测试。

首先,如果您不在 Verizon 上,请更改config 中IMS 域。您可以通过SIP REGISTER使用 rvictl捕获请求来找到域。

然后,运行:

docker compose build
docker compose up

等待来自电话的连接:

12[IKE] IKE_SA ikev2-vpn-iphone[4] established between 172.19.0.2[ims]...172.19.0.1
12[IKE] IKE_SA ikev2-vpn-iphone[4] state change: CONNECTING => ESTABLISHED

然后尝试向手机发送短信:

ssh -p 22222 root@localhost
Password: vowifi
$ encodesms 15554443333 19085823275 "hello"

将 <19085823275> 替换为手机中当前 SIM 卡的电话号码。

或紧急警报:

$ encodesms_cdma emerg 19085823275 "duck and cover"

或者打个电话。(你还不能回答!)

$ baresip
/uanew sip:+15554443333@localhost
/dial sip:+19085823275@localhost

甚至尝试在您自己的网络上复制普渡研究人员VoLTE/VoWiFi 攻击

深入了解容器

StrongSwan 配置:

Kamailio 资源

  • 我现在只是使用股票 Kamailio 配置,没有身份验证
  • 配置调整以侦听 IPv6 并接受vzims.comSIP 域
  • [Nick vs Networking] (https://nickvsnetworking.com/kamailio-introduction/) 是一个拥有大量关于设置电话网络的资源的网站 – 包括有助于理解概念的 Kamailio 教程

拨打电话

  • 编解码器很难
  • 手机使用受专利保护的EVSAMR-WB
  • Linphone 做不到——它只支持像 Opus 这样的开放编解码器
  • Baresip 说它支持它,但如果我接听,通话就会结束
  • 解决方案是添加一个额外的服务器进行动态转码
  • 另外:Kamailio 不支持tel:iPhone 手机应用程序使用的url
  • 所以你不能从电话拨号
  • 补丁,但不是上游
  • 没试过

向手机发送短信

  • 普通 SIP 应用程序使用 SIP MESSAGE text/plain
  • VoLTE/VoWiFi 不支持 – 无效的内容类型
  • 对于 VoLTE/VoWiFi,需要编码为 GSM或 CDMA 的 SMS 格式
  • 谢天谢地,有大量在线资源可用于编码 GSM
  • 对于 GSM,查看了 Wireshark 从我的手机中捕获的短信
  • 使用sms pduAndroid Emulator 的功能进行调试
  • adb logcat -b radio 查看错误

从手机接收短信

  • 手机可以从电脑接收短信,但不能发送到电脑(或我私人网络上的任何其他手机)
  • 如果您看一下,它不会直接将 SMS 发送到其他号码,而是发送到德克萨斯州的某个号码?
  • 这是SMSC – 运营商的 SMS 网关
  • 短信可以发送到关机的手机
  • SMSC 存储 SMS 并在目标电话在线时发送它
  • 多个 SMSC 实现 – 例如OpenBTS 的 SMQueueOsmocom 的 OsmoMSC
  • 我没有尝试集成一个,但应该很简单

制作广播消息

  • 您已经可以通过真实的电话网络研究短信
  • 我想演示一些你只能在你自己的私人电话网络上做的事情
  • 让我们发送小区广播/紧急警报/总统警报!
  • 过去的研究人员只能使用私人 LTE 设备发送紧急广播
  • GSM 小区广播不使用 SMS:它们使用我们无法通过 VoLTE/VoWiFi 发送的单独 SMS-CB 消息
  • 但是CDMA两者都使用SMS!
  • Verizon要求通过 VoLTE 使用 GSM (3GPP) 和 CDMA (3GPP2) SMS 格式
  • 所以编码的CDMA格式短信
  • 通过从我自己的代码中解码消息在 Android 模拟器上进行了测试
  • 一旦我弄清楚如何发送 CDMA 格式的 SMS,我只需将消息类型更改为广播,并将类型设置为“紧急警报”(或“总统警报”)

结论

  • 您无需特殊设备即可建立自己的电话网络
  • 您只需 iPhone 和 Mac 即可捕获手机的 VoLTE/VoWiFi 流量
  • 您只需越狱调整和免费软件即可设置自己的 Wi-Fi 呼叫服务器
  • 我们真的,真的需要更多的 VoLTE/VoWiFi 研究人员。
  • 这是我帮助降低进入门槛的方法。

40 年前,1982 年 1 月 8 日的和解解散了 AT&T。

是时候重建电话实验室了。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 共1条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片