PWNSAT открыл исходники учебного спутникового стенда после доклада на DEF CON 34
PWNSAT открыл исходники учебного спутникового стенда после доклада на DEF CON 34 На DEF CON 34 Ромел Марин (r0r0x, сооснователь проекта PWNSAT) выступил с докладом «Lowering the Orbit» и выложил в открытый доступ учебную платформу, которая целиком повторяет связку «спутник - радиоканал - наземная станция» на дешёвом железе и намеренно собрана уязвимой. Задача - дать инженерам без космического опыта среду для разбора протоколов управления (TT&C), не трогая реальные аппараты. Тезис доклада простой: защита через неизвестность в космосе закончилась. COTS-компоненты, открытое полётное ПО и стандарты CCSDS/SPP стоят почти везде - а значит, одна уязвимость в де-факто стандарте наследуется вниз, на все миссии, которые его используют. По приведённым в докладе данным (ESA, SpaceNews/GCAT, BryceTech) на орбите около 15 900 активных аппаратов, за 2025 год - 324 орбитальных запуска, к июлю 2026 - уже 172. Из чего собран стенд: 🛰 FlatSat (v1.0) - «плоский спутник» на двухъядерном RP2040. Два отдельных модуля LoRa Semtech SX1262 на приём и передачу, датчики BME280 и LIS2DH12, шины UART/I2C/SWD выведены наружу. Только ISM-диапазоны 433/915 МГц, чтобы не мешать реальным системам. 🛰 PWNCUBE (v1.0) - тот же протокол и те же командные APID, но на настоящем полётном железе: Rockchip RV1106 (ядро Cortex-A7 под Linux плюс ядро RISC-V под RT-Thread) и приёмник ГНСС u-blox NEO-6M. 🛰 PWNSAT-C3 - наземная станция, ЦУП в миниатюре: пульт в браузере на FastAPI, приём через RTL-SDR или HackRF (SoapySDR и поток GNU Radio под LoRa), мост ZeroMQ. Команды уходят только по проводу - радиотракт работает исключительно на приём. Каталог находок - 34 позиции по четырём векторам (радио, USB-консоль, сеть HTTP и ZMQ): 🤔 Радиоканал без защиты. Фиксированные частота, полоса, SF и слово синхронизации, нет ППРЧ и сессий - канал тривиально отслеживается и вскрывается. CRC у LoRa отключён: пакет с несовпадающей контрольной суммой всё равно принимается. Защиты от повтора нет. 🤔 Криптография только на словах. Нисходящий поток «шифруется» статическим зашитым ключом AES-128 в режиме ECB; сессия с наземной станцией подделывается через XOR с зашитым ключом 0xC0DEFACE; само шифрование снимается открытой командой конфигурации - понижение защиты, ключ не нужен. 🤔 Разбор пакетов SPP. Длину из заголовка никто не сверяет с реальным буфером, есть off-by-one (заявленная длина 200 пишет 201 байт), а нулевое поле данных уводит счётчик длины в переполнение снизу и роняет прошивку на вызове memcpy. 🤔 Внутренняя шина. SpaceCAN без аутентификации по CAN-ID, доверяет любому клиенту с правильным BUS_MAGIC, без защиты от повтора; переполнение при сборке фрагментов и «bus-off» кладут внутренний обмен. 🤔 Наземный сегмент. Зашитый логин operator/pwnsat без принудительной смены, вход без ограничения попыток, пульт по обычному HTTP, а через открытый мост ZeroMQ телеметрию можно подменить вообще без радио. Разбор бьёт ровно по слабым местам, знакомым по РТР и РЭБ. Канал без ППРЧ и без защиты от повтора - не «удобство», а открытая дверь для перехвата и повтора на уровне линии связи; шифрование, снимаемое одной открытой командой, обнуляет всё сквозное шифрование (E2EE) разом.шифрование (E2EE) разом. Отдельная тема - ГНСС: геозона наземной станции завязана на тот же незащищённый сигнал GPS L1, а NEO-6M на PWNCUBE принимает любое подсунутое решение о координатах без проверки правдоподобия и скорости изменения. Геозабор, повешенный на неаутентифицированную ГНСС, - не мера безопасности, а повод вспомнить про CRPA и анти-спуфинг. Главный вывод авторы подтвердили переносом с RP2040 на RV1106: уязвимость живёт не в кремнии, а в слое протокола и в наземном сегменте - там же, где она будет и в боевых системах на тех же стандартах.нции завязана на тот же незащищённый сигнал GPS L1, а NEO-6M на PWNCUBE принимает любое подсунутое решение о координатах без проверки правдоподобия и скорости изменения. Геозабор, повешенный на неаутентифицированную ГНСС, - не мера безопасности, а повод вспомнить про CRPA