• Stars
    star
    900
  • Rank 50,742 (Top 1.0 %)
  • Language
    HTML
  • Created over 2 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Starlink User Terminal Modchip

This repository accompanies the talk titled "Glitched on Earth by Humans: A Black-Box Security Evaluation of the SpaceX Starlink User Terminal". A slide deck is available here, a recording of the talk should be available soon.

The talk covers how we managed to execute arbitrary code on the Starlink User Terminal using a custom modchip that performs voltage fault injection. The modchip can be used to bypass signature verification during execution of the System-on-Chip (SoC) ROM bootloader (BL1). This allows to execute arbitrary code on the SoC from BL2 onwards and allows to further explore the Starlink User Terminal and networking side of the system. We provide the modchip design so that other researchers can build upon our work.

🚨 USE AT YOUR OWN RISK 🚨

Even though we tested and use the provided modchip design, it is possible to cause permanent damage to a user terminal using this modchip. Similarly, disassembling the user terminal may result in permanent damage and will likely void your warranty.

Modchip design overview

The modchip is controlled by a RP2040 microcontroller that triggers on the eMMC D0 line and creates two pulses with a (programmable) delay and offset for the MOSFET driver. One of these pulses controls the glitch MOSFET, when the gate of this MOSFET is driven high the SoC core voltage supply will be shorted to ground. The second pulse generated by the RP2040 allows to control two MOSFETs that can enable/disable two capacitor banks. These capacitors are required for the UT to fully boot, but the capacitors banks cannot be enabled during the voltage glitch as this would prevent us from obtaining the desired fault.

The schematic and gerbers to produce your own modchip are provided here.

Modchip overview

Prerequisites

  • Disassemble your UT. Stop here if you do not want to void your UT warranty or if you are not willing to risk permanent damage.
  • Read the contents of the eMMC chip. Make a backup!
    • The eMMC chip can be read in-circuit by connecting to the CMD, CLK and D0 test points. eMMC pinout
    • The eMMC expects 1V8 logic levels!
    • Several tools exist to read eMMC chips, a good and cheap ($12) option is the Low Voltage eMMC Adapter by the exploitee.rs.
  • You will have to extract, patch and repackage the different boot stages to disable signature verification.
    • The eMMC layout is documented in the U-Boot GPL release in the file spacex_catson_boot.h.
    • More information on extracting the firmware can be found in our blog post.
    • The early boot stages are all based on the ARM Trusted Firmware-A project.
      • You can use TF fiptool to unpack the Firmware Image Packages into the distinct parts.
      • Patching these bootstages can be done using Ghidra after some basic static analysis (use the open source TF-A code to guide your efforts).
      • Make sure to disable signature verification and to re-enable UART output.
      • Update the firmware hash in the certificates. We glitch signature verification, but the hash still has to be valid.
    • Similarly, you will have to make some changes to the U-Boot image to disable signature verification.
      • You can also increase the bootdelay parameter.
    • The Flattened uImage Tree can be unpacked using dumpimage, provided as part of the U-Boot project.
      • Make the changes you want and repackage.
  • Rewrite the patched firmware to the eMMC chip.

Mounting the modchip on the Starlink UT PCB

  • Make sure that the modchip you assembled works before you try to solder it into place.

  • Remove the decoupling capacitors within the red squares, these are normally used to stabilise the SoC core voltage supply. Decoupling capacitors

  • Align the assembled modchip on the UT PCB and solder it into place using the castellated holes. Make sure to not make any shorts between the core voltage supply and ground.

    • The rightmost castellated holes are not in the correct position. You can redesign the PCB or simply mask the exposed pads on the UT PCB and connect the castellated holes to a nearby ground pad (see picture).
  • Connect the test point marked UT RST to the enable pin of the the core voltage regulator.

  • Connect the test point marked 12V to a nearby 12V source on the UT PCB.

  • Connect the rightmost jumper pad (below the button) to the eMMC D0 test point.

    • We had to do this because of a firmware update that disabled the UART output.
  • Connect the test point marked 1V8 to a nearby 1.8V source on the UT PCB (there is a decoupling capacitor next to the eMMC that is connected to 1V8).

You should be all set now to start glitching, good luck! The Python folder contains an example that demonstrates how you can start using the modchip for experimentation.

Modchip mounted to the UT.

Known issues and limitations

  • The modchip was designed before SpaceX introduced a firmware update that blew a fuse to disable all UART output. The modchip was initially designed to trigger on UART output, but can be adapted to trigger on the eMMC D0 signal. On a newer revision it would be useful to have the ability to read UART output as well as trigger on eMMC D0 data. UART can be re-enabled in BL2 and can provide an easy way of verifying that the glitch succeeded.
  • The modchip was designed for the circular user terminal, the same attack should work on the square user terminal but will require you to create a new PCB design.
  • One section of castellated holes is in the wrong location. Be careful when using the design as is and follow the mounting instruction accordingly.
  • Unplugging the modchip from the control PC after the glitch succeeded may result in the dish rebooting. This is likely because of a missing pull-down resistor on the IN A pin of the MCP1405 MOSFET driver.
  • The provided firmware expects an external control PC to orchestrate the fault injection attempts. It should be fairly straightforward to turn this into a stand-alone modchip using the (currently unused) second RP2040 Cortex-M0 core.

FAQ

  • We are not selling finished modchips
  • We are not providing (patched) Starlink User Terminal firmware
  • We are not providing exact glitch parameters. The presentation slides contain various hints and the parameters will vary depending on how you patch the firmware.

More Repositories

1

SCALE-MAMBA

Repository for the SCALE-MAMBA MPC system
Verilog
247
star
2

SimpleLink-FI

Jupyter Notebook
67
star
3

HEAT

Repo for code developed during the HEAT project (Homomorphic Encryption Applications Technology)
C
54
star
4

SABER

SABER is a Module-LWR based KEM submitted to NIST
C
48
star
5

FINAL

The fully homomorhic encryption scheme based on NTRU and LWE.
C++
31
star
6

PRIME-SCOPE

The open-source component of Prime+Scope, published at CCS 2021
C
26
star
7

CSI-FiSh

Repo for the implementation of the isogeny based signature scheme CSI-FiSh
C
22
star
8

Marvellous

The instance generator of the Vision and Rescue block ciphers.
Sage
16
star
9

TCHES20V3_CNN_SCA

Python
15
star
10

fpt-demo

FPT: a Fixed-Point Accelerator for Torus Fully Homomorphic Encryption
Rust
14
star
11

NTRU_NTT_HW

Verilog
13
star
12

SortingHat

Implementation of SortingHat: Efficient Private Decision Tree Evaluation via Homomorphic Encryption and Transciphering.
C++
12
star
13

COSO-TRNG

Reference implementation for the COherent Sampling ring Oscillator based True Random Number Generator.
Verilog
11
star
14

Bootstrapping_BGV_BFV

MATLAB
9
star
15

Panacea

Rust
9
star
16

UnrolledBlockCiphers

VHDL
9
star
17

Feta

C++
8
star
18

ShowTime

Artifacts for our ShowTime paper (AsiaCCS '23), including distinguishing cache hits and misses with the human eye.
C
8
star
19

PQCRYPTO-decryption-failures

Scripts relating to decryption failures in PQCRYPTO schemes
C
8
star
20

SABER-masking

This repository contains ARM Cortex-M4 code for a first-order masked implementation of SABER.
Assembly
7
star
21

Griffinfly-ZPRIZE-FPGA-NTT

Griffinfly is COSIC's submission to the ZPRIZE competition under the category, Accelerating NTT Operations on an FPGA by Michiel Van Beirendonck, Jonas Bertels, Furkan Turan, and Ingrid Verbauwhede.
C++
7
star
22

lightmac

Reference implementation of the LightMAC mode of operation
C
6
star
23

Limbo

C++
6
star
24

Homomorphic-Heatmap

Two methods to fast computation of heatmaps over encrypted data using FHE
C++
6
star
25

CryptoNightHaven-FPGA-miner

Mining CryptoNight Haven on the Varium C1100
VHDL
6
star
26

Double-Trouble

C
4
star
27

Radical-Isogenies

MATLAB
4
star
28

Masked-Comparison

C
4
star
29

Revisiting-Masked-Comparison

This is the code supporting our paper: "Revisiting Higher-Order Masked Comparison for Lattice-Based Cryptography: Algorithms and Bit-sliced Implementations".
C
3
star
30

Higher-order-masked-Saber

Higher-order masked Saber
Assembly
3
star
31

3_3_isogenies

Magma code to efficiently compute chains of (3,3)-isogenies
M
3
star
32

TCHES2020_SABER

C
3
star
33

Bootstrapping_Polyfunctions

C++
2
star
34

A2B-table

Assembly
2
star
35

K-Cipher

C++
2
star
36

Eevee

The Eevee Family of AEAD modes for IoT-friendly encryption and MPC-friendly decryption
C
2
star
37

TCHES2018_SABER

C
2
star
38

ppknn

Rust
2
star
39

failure-boosting

Python
2
star
40

private_GWAS

code accompanying Towards Practical Privacy-Preserving Genome-Wide Association Study
C++
1
star
41

Multiradical-Isogenies

1
star
42

group_action_DDH

MATLAB
1
star
43

Horizontal_Radical_Isogenies

Sage
1
star
44

One-hot-masking

1
star
45

Chaghri

An FHE-Friendly Block Cipher
C++
1
star
46

oriented_DDH

Magma code for the paper On the decisional Diffie-Hellman problem for class group actions on oriented elliptic curves
MATLAB
1
star
47

ETC-transformation

C
1
star
48

NonPowerOfTwoNTT

Verilog
1
star
49

maestro

MAESTRO: Multi-party AES using Lookup Tables - Various oblivious AES protocols for passively and actively secure three-party secure computation
Rust
1
star