
Modchip de injeção de falhas de tensão para avaliação de segurança em caixa-preta de terminais Starlink, contornando a verificação de assinatura do bootloader para executar firmware arbitrário.
Este repositório acompanha a apresentação intitulada "Glitched on Earth by Humans: A Black-Box Security Evaluation of the SpaceX Starlink User Terminal". Os slides estão disponíveis aqui; uma gravação da apresentação deverá estar disponível em breve.
A apresentação descreve como conseguimos executar código arbitrário no Terminal de Utilizador Starlink usando um modchip personalizado que realiza injeção de falhas por tensão. O modchip pode ser usado para contornar a verificação de assinaturas durante a execução do bootloader ROM do System-on-Chip (SoC) (BL1). Isto permite executar código arbitrário no SoC a partir do BL2 e permite explorar mais a fundo o Terminal de Utilizador Starlink e o lado de rede do sistema. Fornecemos o design do modchip para que outros investigadores possam desenvolver a partir do nosso trabalho.
Embora tenhamos testado e utilizado o design do modchip fornecido, é possível causar danos permanentes num terminal de utilizador com este modchip. Da mesma forma, desmontar o terminal de utilizador pode resultar em danos permanentes e provavelmente anulará a sua garantia.
O modchip é controlado por um microcontrolador RP2040 que dispara na linha eMMC D0 e cria dois pulsos com um atraso e um offset (programáveis) para o driver do MOSFET. Um destes pulsos controla o MOSFET de glitch; quando o gate deste MOSFET é colocado em nível alto, a alimentação de tensão do núcleo do SoC é curto-circuitada para a terra. O segundo pulso gerado pelo RP2040 permite controlar dois MOSFETs que podem ativar/desativar dois bancos de condensadores. Estes condensadores são necessários para o UT arrancar completamente, mas os bancos de condensadores não podem ser ativados durante o glitch de tensão, pois isso impediria a obtenção da falha desejada.
O esquemático e os ficheiros Gerber para produzir o seu próprio modchip são fornecidos aqui.


spacex_catson_boot.h.Certifique-se de que o modchip que montou funciona antes de tentar soldá-lo no lugar.
Remova os condensadores de desacoplamento dentro dos quadrados vermelhos; estes são normalmente usados para estabilizar a alimentação de tensão do núcleo do SoC.

Alinhe o modchip montado na PCB do UT e solde-o no lugar usando os furos castelados. Certifique-se de que não cria nenhum curto-circuito entre a alimentação de tensão do núcleo e a terra.
Ligue o ponto de teste marcado UT RST ao pino de ativação do regulador de tensão do núcleo.
Ligue o ponto de teste marcado 12V a uma fonte de 12V próxima na PCB do UT.
Ligue o pad de jumper mais à direita (por baixo do botão) ao ponto de teste eMMC D0.
Ligue o ponto de teste marcado 1V8 a uma fonte de 1,8V próxima na PCB do UT (há um condensador de desacoplamento ao lado do eMMC que está ligado a 1V8).
Agora está pronto para começar a fazer glitch, boa sorte! A pasta Python contém um exemplo que demonstra como pode começar a utilizar o modchip para experimentação.

IN A do driver MOSFET MCP1405.bootdelay.