这不仅仅是一个普通的 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](https://www.cvv-goods.com/wp-content/uploads/2023/03/20220110170520618-1024x576-1.webp)
这是 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](https://www.cvv-goods.com/wp-content/uploads/2023/03/20220110170605140-1024x439-1.webp)
或者您如何接收短信:
![图片[3]-如何通过 Wi-Fi 通话建立电话网络-FancyPig's blog](https://www.cvv-goods.com/wp-content/uploads/2023/03/20220110170615719-1024x503-1.webp)
在 VoWiFi 上,您甚至可以转储实际的语音编解码器数据包。
此外,iPhone 还提供来自 VoWiFi ePDG VPN 隧道和 SMS 处理的日志:
在 Mac 上打开控制台应用程序,过滤到 CommCenter,然后启用“操作 -> 包含信息消息/包含调试消息”。
然后,过滤 CommCenter 以获取 VoLTE/VoWiFi 消息,例如此 IKEv2 握手:
![图片[4]-如何通过 Wi-Fi 通话建立电话网络-FancyPig's blog](https://www.cvv-goods.com/wp-content/uploads/2023/03/20220110170627469-1024x534-1.webp)
我们自己的电话网络
如果您不想只查看 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,感谢所有帮助过我的人:
并感谢我查阅的资源:
带有 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 配置:
- PSK 的配置
- P-CSCF(SIP 服务器)的配置。(21 是P_CSCF_IP6_ADDRESS)
- 配置密码套件 – 请参阅 Verizon 的 CarrierBundle
- 给 iPhone 一个 /64 IPv6 地址范围
- 通常,VPN 只给出 /128 的地址,但 iPhone 需要 /64 并且总是用随机值覆盖底部的 64 位。
- 感谢Kage Systems 的 Alan记录了如何让 StrongSwan 作为 iPhone 的 ePDG 工作。
Kamailio 资源
- 我现在只是使用股票 Kamailio 配置,没有身份验证
- 配置调整以侦听 IPv6 并接受
vzims.com
SIP 域 - [Nick vs Networking] (https://nickvsnetworking.com/kamailio-introduction/) 是一个拥有大量关于设置电话网络的资源的网站 – 包括有助于理解概念的 Kamailio 教程
拨打电话
- 编解码器很难
- 手机使用受专利保护的EVS或AMR-WB
- Linphone 做不到——它只支持像 Opus 这样的开放编解码器
- Baresip 说它支持它,但如果我接听,通话就会结束
- 解决方案是添加一个额外的服务器进行动态转码
- 另外:Kamailio 不支持
tel:
iPhone 手机应用程序使用的url - 所以你不能从电话拨号
- 有补丁,但不是上游
- 没试过
向手机发送短信
- 普通 SIP 应用程序使用 SIP MESSAGE
text/plain
- VoLTE/VoWiFi 不支持 – 无效的内容类型
- 对于 VoLTE/VoWiFi,需要编码为 GSM或 CDMA 的 SMS 格式
- 谢天谢地,有大量在线资源可用于编码 GSM
- 对于 GSM,查看了 Wireshark 从我的手机中捕获的短信
- 使用
sms pdu
Android Emulator 的功能进行调试 adb logcat -b radio
查看错误
从手机接收短信
- 手机可以从电脑接收短信,但不能发送到电脑(或我私人网络上的任何其他手机)
- 如果您看一下,它不会直接将 SMS 发送到其他号码,而是发送到德克萨斯州的某个号码?
- 这是SMSC – 运营商的 SMS 网关
- 短信可以发送到关机的手机
- SMSC 存储 SMS 并在目标电话在线时发送它
- 多个 SMSC 实现 – 例如OpenBTS 的 SMQueue,Osmocom 的 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。
是时候重建电话实验室了。
- 最新
- 最热
只看作者