Bbabo NET

Наука & Технології Новини

Маршрутизатор Starlink перезавантажуватиметься кожні 20 днів.

Маршрутизатор Starlink

Інженер вбудованих систем і астрофізик Олег Кутков, чекаючи тарілки Starlink, розібрав фірмовий маршрутизатор і почав розбір прошивки. Хоча за функціональністю це звичайний Wi-Fi-роутер, але виявилося кілька цікавих деталей реалізації.

Маршрутизатор не спроектований для легкого розбору та самостійного ремонту. Кришка не прикручена гвинтами, а скріплена внутрішнім кріпленням, так що при знятті доведеться трохи пом'яти алюмінієвий корпус.

Весь металевий корпус насправді працює як великий радіатор, це одна цілісна деталь.

Тут і далі фото Олега Куткова

Усередині досить проста материнська плата.

Маршрутизатор працює на популярній однокристальній системі Qualcomm IPQ4018: це 4-ядерний ARM Cortex A7 (тактова частота 717 МГц), 802.11ac WiFi, по два канали 5 та 2,4 ГГц, SIMD DSP, Crypto Engine, QualcommTrusted і т.д.

Компоненти на нижній стороні материнської плати підписані на фотографії, у тому числі мікросхема TPS2378 та флеш-пам'ять NAND W25N01GV із операційною системою маршрутизатора.

На лицьовій стороні плати найцікавіший компонент – мікросхема STSAFE-A110 для криптографічних операцій Linux з апаратною підтримкою OpenSSL. На цьому чіпі зберігається конфігурація плати та сертифікати. А також мікросхема NOR флеш-пам'яті GD25Q128B із завантажувачем Qualcomm та деякою додатковою інформацією.

Олег Кутков витяг із плати чіпи NOR і NAND, зробив аналіз прошивки, у тому числі пропрієтарних файлів, які відсутні в офіційному репозиторії SpaceX. Прошивка базується на OpenWRT.

З чіпа NAND вдалося зняти образ Linux, образ rootfs файлової системи SquashFS з операційною системою OpenWRT та софтом SpaceX, а також образ ubifs із конфігураційними файлами.

Там лежить захищений файл /etc/config/WifiConfig, це бінарник, який використовується пропрієтарними програмами SpaceX.

В цілому, базова прошивка не особливо відрізняється від ванільної OpenWRT, крім кількох специфічних параметрів SpaceX у скриптах. Наприклад, таке налаштування з цікавими коментарями:

# SpaceX: Як failsafe, ми є обмеження наших годин до 20 днів. After 20 days# this script will stop petting the watchdog, which will lead to it rebooting after# about 2 minutes. Для того, щоб першим виконати автоматичний контроль watchdog from# procd, використовуючи ubus commands.pet_watchdog() { # Wait one minute to let ubus system fully boot sleep 60 echo "Start Petting Watchdog" ubus call system'wat magicclose": true}' ubus call system watchdog '{"stop": true}' # Pet every 10 seconds for 20 days (1,728,000 seconds) for var in `seq 1 172800`; do echo 1; sleep 10; done /dev/watchdog}

Тут пояснюється, що аптайм маршрутизатора Starlink обмежений 20 днями, після чого він автоматично перезавантажуватиметься, що гарантує йому даунтайм на 1 хвилину. Кажуть, що це нормальна практика у світі вбудованих систем. Багато хто з них іде в примусове перезавантаження за таймером, часто це відбувається непомітно для користувача.

Серед файлів особливу цікавість викликає бінарник /usr/sbin/wifi_control: це гігантська програма на Go, яка контролює всі аспекти роботи маршрутизатора. Зважаючи на все, деякі параметри типу серверних IP-адрес та URL зашиті прямо в код.

Автор запустив прошивку на сторонній платі AP.dk04. Крім того, він підключив криптографічний чіп STSAFE-A110 до Raspberry Pi через спеціальний адаптер.

За допомогою офіційної бібліотеки та набору інструментів можна протестувати вміст чіпа та витягти з нього сертифікат, дійсний до 2050 року.

На даний момент автор продовжує аналіз вищезгаданого пропрієтарного файлу /usr/sbin/wifi_control, який робить багато цікавого: піднімає сервери gRPC (основний протокол зв'язку в Starlink), відправляє телеметрію до SpaceX та багато іншого.

Наразі Олег Кутков проводить реверс-інжиніринг внутрішнього протоколу, щоб можна було нормально спілкуватися із серверами Starlink. Наприклад, запитувати оновлення прошивки з пред'явленням сертифіката тощо.

Чекаємо на продовження.

Маршрутизатор Starlink перезавантажуватиметься кожні 20 днів.