KULeuven-COSIC/Starlink-FI
GitHub: KULeuven-COSIC/Starlink-FI
针对Starlink用户终端的电压故障注入modchip设计方案,通过绕过ROM引导阶段签名验证实现任意代码执行。
Stars: 1028 | Forks: 134
# Starlink 用户终端 Modchip
本仓库是题为“Glitched on Earth by Humans: A Black-Box Security Evaluation of the SpaceX Starlink User Terminal”(被地球上的人类故障攻击:SpaceX Starlink 用户终端的黑盒安全评估)的演讲的配套资料。
演示文稿幻灯片可在[此处](./GlitchedOnEarth_slides.pdf)获取,演讲录像应该很快就会发布。
该演讲介绍了我们如何利用执行电压故障注入的定制 modchip,在 Starlink 用户终端上执行任意代码。
该 modchip 可用于在片上系统 ROM 引导加载程序 (BL1) 执行期间绕过签名验证。这允许从 BL2 开始在 SoC 上执行任意代码,并允许进一步探索 Starlink 用户终端和系统的网络侧。
我们提供了 modchip 设计,以便其他研究人员可以在我们工作的基础上继续构建。
# 🚨 风险自负 🚨
尽管我们测试并使用了提供的 modchip 设计,但使用此 modchip 仍有可能对用户终端造成永久性损坏。
同样,拆卸用户终端可能会导致永久性损坏,并且极有可能使保修失效。
## Modchip 设计概述
Modchip 由 RP2040 微控制器控制,它通过 eMMC D0 线路触发,并为 MOSFET 驱动器生成两个具有(可编程)延迟和偏移的脉冲。
其中一个脉冲控制故障注入 MOSFET,当该 MOSFET 的栅极被驱动为高电平时,SoC 核心电压 supply 将被短路到地。RP2040 生成的第二个脉冲允许控制两个 MOSFET,这两个 MOSFET 可以启用/禁用两个电容组。这些电容是 UT 完全启动所必需的,但在电压故障注入期间不能启用电容组,因为这会阻止我们获得所需的故障。
用于制作您自己的 modchip 的原理图和 gerber 文件已在[此处](./pcb/)提供。

## 前置条件
* 拆解您的 UT。如果您不想让 UT 保修失效,或者不愿意冒永久性损坏的风险,请在此停止。
* [YouTube](https://youtu.be/-v7E7JIrW5Y) [上](https://www.youtube.com/watch?v=yBnOS7V3oS4) 的 [几个](https://www.youtube.com/watch?v=omScudUro3s) [视频](https://youtu.be/iOmdQnIlnRo) 演示了该过程。
* 读取 eMMC 芯片的内容。做一个备份!
* 可以通过连接到 CMD、CLK 和 D0 测试点在电路中读取 eMMC 芯片。 
* eMMC 期望 1V8 逻辑电平!
* 存在多种读取 eMMC 芯片的工具,[exploitee.rs 的 Low Voltage eMMC Adapter](https://shop.exploitee.rs/shop/p/low-voltage-emmc-adapter) 是一个不错且便宜($12)的选择。
* 您必须提取、修补并重新打包不同的启动阶段以禁用签名验证。
* eMMC 布局在 [U-Boot GPL 发布版](https://github.com/SpaceExplorationTechnologies/u-boot/releases/tag/sx_2022_05_03)的 `spacex_catson_boot.h` 文件中有文档记录。
* 有关提取固件的更多信息可以在我们的[博客文章](https://www.esat.kuleuven.be/cosic/blog/dumping-and-extracting-the-spacex-starlink-user-terminal-firmware/)中找到。
* 早期启动阶段均基于 [ARM Trusted Firmware-A 项目](https://trustedfirmware-a.readthedocs.io/en/latest/)。
* 您可以使用 TF fiptool 将固件镜像包解包为不同的部分。
* 在进行一些基本的静态分析之后,可以使用 [Ghidra](https://github.com/NationalSecurityAgency/ghidra) 修补这些启动阶段(使用开源 TF-A 代码来指导您的工作)。
* 确保禁用签名验证并重新启用 UART 输出。
* 更新证书中的固件哈希。我们对签名验证进行故障注入,但哈希仍然必须是有效的。
* 同样,您必须对 U-Boot 镜像进行一些更改以禁用签名验证。
* 您还可以增加 `bootdelay` 参数。
* Flattened uImage Tree 可以使用作为 U-Boot 项目一部分提供的 [dumpimage](https://github.com/u-boot/u-boot/blob/master/tools/dumpimage.c) 进行解包。
* 进行所需的更改并重新打包。
* 将修补后的固件重写到 eMMC 芯片。
## 在 Starlink UT PCB 上安装 Modchip
* 在尝试焊接之前,请确保您组装的 modchip 工作正常。
* 移除红色方块内的去耦电容,这些电容通常用于稳定 SoC 核心电压 supply。

* 将组装好的 modchip 在 UT PCB 上对齐,并使用半孔将其焊接到位。确保不要在核心电压 supply 和地之间造成任何短路。
* 最右侧的半孔位置不正确。您可以重新设计 PCB,或者简单地遮盖 UT PCB 上暴露的焊盘,并将半孔连接到附近的接地焊盘(见图)。
* 将标记为 `UT RST` 的测试点连接到核心电压稳压器的使能引脚。
* 将标记为 `12V` 的测试点连接到 UT PCB 上的附近 12V 电源。
* 将最右侧的跳线焊盘(按钮下方)连接到 eMMC D0 测试点。
* 我们不得不这样做是因为固件更新禁用了 UART 输出。
* 将标记为 `1V8` 的测试点连接到 UT PCB 上的附近 1.8V 电源(eMMC 旁边有一个连接到 1V8 的去耦电容)。
您现在应该已经准备好开始故障注入了,祝您好运!
[Python 文件夹](./src/)包含一个示例,演示了如何开始使用 modchip 进行实验。

## 已知问题和限制
* Modchip 是在 SpaceX 推出通过熔断保险丝来禁用所有 UART 输出的固件更新之前设计的。Modchip 最初设计为通过 UART 输出触发,但可以调整为通过 eMMC D0 信号触发。在较新的修订版中,能够读取 UART 输出以及通过 eMMC D0 数据触发将非常有用。UART 可以在 BL2 中重新启用,并提供一种验证故障注入是否成功的简便方法。
* Modchip 是为圆形用户终端设计的,相同的攻击应该适用于方形用户终端,但需要您创建新的 PCB 设计。
* 一部分半孔位于错误的位置。按原样使用设计时要小心,并遵循相应的安装说明。
* 在故障注入成功后从控制 PC 拔下 modchip 可能会导致接收器重启。这可能是因为 MCP1405 MOSFET 驱动器的 `IN A` 引脚上缺少下拉电阻。
* 提供的固件期望外部控制 PC 来编排故障注入尝试。使用(当前未使用的)第二个 RP2040 Cortex-M0 核心,将其转变为独立 modchip 应该相当简单。
## 常见问题解答
* 我们不出售成品 modchip
* 我们不提供(修补后的)Starlink 用户终端固件
* 我们不提供确切的故障注入参数。演示幻灯片包含各种提示,并且参数将根据您修补固件的方式而有所不同。
标签:Bootloader漏洞, CISA项目, eMMC, Modchip, PCB设计, RP2040, SOC安全, SpaceX, Starlink, 云资产清单, 侧信道攻击, 卫星互联网, 后端开发, 后端开发, 固件破解, 嵌入式安全, 微控制器, 改版芯片, 故障注入, 星链, 漏洞分析, 物理攻击, 电压毛刺, 硬件黑客, 签名验证绕过, 网络安全, 路径探测, 逆向工具, 逆向工程, 隐私保护, 黑盒测试