Мод-чип для пользовательского терминала Starlink
Этот репозиторий сопровождает доклад под названием «Glitched on Earth by Humans: A Black-Box Security Evaluation of the SpaceX Starlink User Terminal».
Слайды доступны здесь, запись доклада должна появиться в ближайшее время.
В докладе рассказывается, как нам удалось выполнить произвольный код на пользовательском терминале Starlink с помощью кастомного мод-чипа, который выполняет Voltage Fault Injection (инъекцию сбоя напряжения).
Мод-чип можно использовать для обхода проверки подписи при выполнении загрузчика ROM (BL1) System-on-Chip (SoC). Это позволяет выполнять произвольный код на SoC, начиная с BL2, и даёт возможность дальнейшего исследования пользовательского терминала Starlink и сетевой части системы.
Мы предоставляем дизайн мод-чипа, чтобы другие исследователи могли продолжить нашу работу.
🚨 ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК 🚨
Несмотря на то, что мы протестировали и используем предоставленную конструкцию мод-чипа, при его использовании возможно нанесение необратимого повреждения пользовательскому терминалу.
Кроме того, разборка пользовательского терминала может привести к необратимому повреждению и, скорее всего, лишит вас гарантии.
Обзор конструкции мод-чипа
Мод-чип управляется микроконтроллером RP2040, который срабатывает по линии eMMC D0 и создаёт два импульса с (программируемой) задержкой и смещением для драйвера MOSFET.
Один из этих импульсов управляет глитч-MOSFET: когда затвор этого MOSFET переводится в высокое состояние, основное напряжение питания SoC замыкается на землю. Второй импульс, генерируемый RP2040, позволяет управлять двумя MOSFET, которые могут включать/отключать две батареи конденсаторов. Эти конденсаторы необходимы для полной загрузки UT, но батареи конденсаторов нельзя включать во время глитча напряжения, так как это помешало бы получить желаемый сбой.
Схема и gerber-файлы для изготовления собственного мод-чипа предоставлены здесь.

Предварительные требования
- Разберите ваш UT. Остановитесь здесь, если вы не хотите лишаться гарантии на UT или не готовы рисковать необратимым повреждением.
- Прочитайте содержимое микросхемы eMMC. Сделайте резервную копию!
- Микросхему eMMC можно прочитать в схеме, подключившись к тестовым точкам CMD, CLK и D0.

- eMMC работает с логическими уровнями 1V8!
- Существует несколько инструментов для чтения микросхем eMMC; хороший и недорогой вариант ($12) — Low Voltage eMMC Adapter от exploitee.rs.
- Вам придётся извлечь, пропатчить и переупаковать различные стадии загрузки, чтобы отключить проверку подписи.
- Структура eMMC задокументирована в GPL-релизе U-Boot в файле
spacex_catson_boot.h.
- Дополнительная информация об извлечении прошивки доступна в нашем посте в блоге.
- Ранние стадии загрузки основаны на проекте ARM Trusted Firmware-A.
- Вы можете использовать TF fiptool для распаковки пакетов прошивки (Firmware Image Package) на отдельные части.
- Патчинг этих стадий загрузки можно выполнить с помощью Ghidra после небольшого статического анализа (используйте открытый код TF-A в качестве ориентира).
- Убедитесь, что отключили проверку подписи и заново включили вывод UART.
- Обновите хэш прошивки в сертификатах. Мы вызываем сбой при проверке подписи, но хэш всё равно должен быть корректным.
- Аналогично, вам придётся внести некоторые изменения в образ U-Boot, чтобы отключить проверку подписи.
Установка мод-чипа на печатную плату Starlink UT
-
Убедитесь, что собранный вами мод-чип работает, прежде чем пытаться припаять его на место.
-
Удалите развязывающие конденсаторы внутри красных квадратов — обычно они используются для стабилизации основного напряжения питания SoC.

-
Выровняйте собранный мод-чип на печатной плате UT и припаяйте его на место, используя отверстия с полуметаллизацией (castellated holes). Следите за тем, чтобы не допустить коротких замыканий между основным напряжением питания и землёй.
- Крайние правые отверстия с полуметаллизацией расположены неправильно. Вы можете переработать печатную плату или просто замаскировать открытые контактные площадки на плате UT и соединить отверстия с полуметаллизацией с ближайшей площадкой земли (см. рисунок).
-
Подключите тестовую точку с маркировкой UT RST к выводу enable регулятора основного напряжения.
-
Подключите тестовую точку с маркировкой 12V к ближайшему источнику 12V на плате UT.
-
Подключите крайнюю правую перемычку (под кнопкой) к тестовой точке eMMC D0.
- Нам пришлось это сделать из-за обновления прошивки, которое отключило вывод UART.
-
Подключите тестовую точку с маркировкой 1V8 к ближайшему источнику 1,8 В на плате UT (рядом с eMMC есть развязывающий конденсатор, подключённый к 1V8).
Теперь всё должно быть готово для начала глитчинга, удачи!
Папка Python содержит пример, демонстрирующий, как начать использовать мод-чип для экспериментов.

Известные проблемы и ограничения
- Мод-чип был разработан до того, как SpaceX выпустила обновление прошивки, которое пережгло предохранитель для отключения всего вывода UART. Изначально мод-чип был рассчитан на срабатывание по выводу UART, но его можно адаптировать для срабатывания по сигналу eMMC D0. В более новой ревизии было бы полезно иметь возможность как читать вывод UART, так и срабатывать по данным eMMC D0. UART можно заново включить в BL2, и это может стать простым способом проверки того, что глитч прошёл успешно.
- Мод-чип разработан для круглого пользовательского терминала; та же атака должна работать и на квадратном пользовательском терминале, но для этого потребуется создать новый дизайн печатной платы.
- Один участок отверстий с полуметаллизацией расположен в неправильном месте. Будьте осторожны при использовании конструкции как есть и следуйте инструкциям по установке соответствующим образом.
- Отключение мод-чипа от управляющего ПК после успешного глитча может привести к перезагрузке тарелки. Это, вероятно, связано с отсутствием подтягивающего резистора к земле на выводе
IN A драйвера MOSFET MCP1405.
- Предоставленная прошивка ожидает внешний управляющий ПК для координации попыток fault injection. Превратить это в автономный мод-чип с помощью (пока не используемого) второго ядра Cortex-M0 на RP2040 должно быть довольно просто.
FAQ
- Мы не продаём готовые мод-чипы
- Мы не предоставляем (пропатченные) прошивки пользовательского терминала Starlink
- Мы не предоставляем точные параметры глитча. В слайдах презентации содержатся различные подсказки, а параметры будут варьироваться в зависимости от того, как вы пропатчите прошивку.