在本篇文章中,我们将探讨 SpaceX Starlink 路由器的逆向分析过程。Starlink 是 SpaceX 推出的一项革命性的卫星互联网服务,旨在为全球偏远地区提供高速、低延迟的互联网连接。为了实现这一目标,Starlink 需要一个高性能的路由器来管理用户的互联网连接。逆向分析这种设备对于理解其工作原理和潜在的安全隐患至关重要。

  图1-1 太空路由器概念图

一、本文的主要知识梳理

本文将以Starlink一代路由器(见下图1-2)为基础分析Starlink路由器的分析方法,包含以下内容。

  • 硬件分析:我们将首先介绍 Starlink 路由器的硬件组件,包括处理器、内存、NAND 闪存等。我们还将讨论与此相关的接口和通信协议。

  • 固件提取:在了解了硬件的基本结构之后,我们将介绍如何从路由器中提取固件。这将包括使用工具如 Binwalk 对固件进行分析,以获取文件系统、内核映像等关键组件。

  • 软件分析:接下来,我们将深入研究 Starlink 路由器的软件架构,包括操作系统、驱动程序、应用程序和其他软件组件。我们将关注如何对这些组件进行逆向工程,以了解其功能和安全性。

  • OOB 纠错算法:我们将特别关注 NAND 闪存中的 OOB(Out-of-Band)纠错算法,了解其在保证路由器可靠性和数据完整性方面的作用。

  • 安全性评估:在完成逆向分析后,我们将对 Starlink 路由器的安全性进行评估,探讨潜在的安全漏洞以及如何防范这些风险。

图1-2 Starlink 一代路由器

二、Starlink路由器硬件架构审计

路由器的核心是一款广受欢迎的Qualcomm IPQ4018 SoC:四核ARM Cortex A-7处理器,支持802.11ac WiFi 5GHz和2.4 GHz频段,两个通道都支持。此外,这款SoC还集成了加密引擎和支持硬件NAT和流量引导的交换引擎。

以下是主板上所有组件及其简要说明:

图2-1 Starlink TOP主板电路分析

图2-2 Starlink BOTTOM主板电路分析

图2-3 Starlink 硬件设计框架图

这里我们重点关注如下,后面会进行详细分析。

1. 串行NAND Flash IC W25N01GV,路由器操作系统存储在该芯片上。

2. GD25Q128B,它是一个 SPI NOR 闪存,带有高通引导加载程序、u-boot 和一些附加数据。

3. STSAFE-A芯片,这种特殊的 MCU 提供安全存储、身份验证和一些加密功能,完全受 OpenSSL 支持,MCU 用于存储电路板配置和证书,我将在下面介绍。

、Starlink固件安全审计

由于在硬件上没有发现串口shell,所以直接对nand 和 nor flash固件进行提取。路由器固件基于 OpenWRT ,下面是官方的 SpaceX 存储库,GitHub 存储库仅包含 GPL 代码,没有任何驱动路由器的 SpaceX 专有组件。https://github.com/SpaceExplorationTechnologies/starlink-wifi

路由器系统从烧录到 SoC 中的主引导加载程序 (PBL) 启动,该 PBL 在 NOR 闪存的零地址寻找辅助引导加载程序 (SBL),SBL 初始化硬件(CPU、DDR)并启动主引导加载程序 (u-boot)。u-boot 的目的是支持特定于系统的任务,如引导环境、固件恢复和操作系统引导。

下图是 Starlink NOR 的简化分布情况:

图3-1 Starlink nor flash 分区分布

可以看到,在NOR Flash分区中,有两个u-boot ELF二进制文件(u-boot ELF binary 0和u-boot ELF binary 1),这通常是因为采用了双引导分区(dual-boot partition)的设计,以提高系统的稳定性和可靠性。

下图是 Starlink NAND flash介绍:

图3-2 Starlink nadn flash 块分区分布

从图3-2可以发现,每个 2048 数据页包含一个额外的 64 字节尾部,这些 OOB 块应该与实际数据分开并正确处理。

、Starlink固件分析

1.  在进行固件处理后,就可以得到UBI image的镜像文件,程序可从文末尾github获取。

图4-1 nand flash固件提取python程序

$ file test_out.bin test_out.bin: UBI image, version 1

2.  使用 ubi_reader 分析和提取此图像:

$ ubireader_display_info test_out.bin
UBI File
---------------------Min I/O:2048LEB Size:126976PEB Size:131072TotalBlockCount:1024DataBlockCount:407LayoutBlockCount:4InternalVolumeBlockCount:0UnknownBlockCount:613First UBI PEB Number:0Image:1911121817---------------------ImageSequenceNum:1911121817VolumeName:kernelVolumeName:ubi_rootfsVolumeName:rootfs_dataPEB Range:512-1023Volume: kernel---------------------Volume: ubi_rootfs---------------------Volume: rootfs_data---------------------
******Image:1899964099---------------------ImageSequenceNum:1899964099VolumeName:kernelVolumeName:ubi_rootfsVolumeName:rootfs_dataPEB Range:0-511Volume: kernel---------------------Volume: ubi_rootfs---------------------Volume: rootfs_data---------------------

3.  由于典型的 NAND 可能总是包含一定数量的坏扇区或翻转位,这些错误可以通过 OOB 纠正,通常由 NAND 控制器完成,正确的解决方案是使用一些真正的硬件 NAND 控制器或nandsim(NAND 闪存模拟器驱动程序),这里我们使用nandsim。

sudo modprobe nandsim id_bytes=0x98,0xd1,0x90,0x15,0x76,0x14,0x01,0x00 parts=512,512
sudo nandwrite -k -a -o --input-skip=69206016/dev/mtd1 'W25N01GV@WSON8.BIN'
sudo modprobe ubi mtd=/dev/mtd1,2048,0,2
sudo mount -t ubifs /dev/ubi2_2 /mnt/ubi2_2

4.  现在可以读取数据了,数据读取后分析如下,简化的 NAND 布局如图4-1。

两个相同的镜像用于冗余和简单的固件升级过程。

  • 卷 0包含带签名的Linux 内核FIT 映像。

  • 第 1 卷是带有 OpenWRT 操作系统和 SpaceX 软件的squashfs rootfs 映像。

  • 第 2 卷是一个带有路由器配置文件的r/w ubifs映像。

图4-2 nand flash镜像文件分布

注解:

1. SquashFS文件系统是一个只读的文件系统,通常用于在嵌入式系统中存储和分发操作系统、应用程序和数据。在这个例子中,Volume 1是一个SquashFS文件系统,其中包含了预安装的OpenWRT操作系统和SpaceX软件。因为SquashFS文件系统是只读的,所以Volume 1是一个只读文件系统,不能被直接写入或修改。如果您需要修改操作系统或安装新的软件包,则需要重新创建一个可写的文件系统,并将其挂载到适当的位置上。在Linux系统中,常用的可写文件系统包括ext4、Btrfs、XFS、JFS等。

虽然SquashFS文件系统的内容是固定的,但它具有许多优点,如快速启动、高效存储、压缩和加密等。SquashFS通常用于存储和分发只读的操作系统和应用程序。如果需要修改系统或添加新的软件包,则需要使用其他可写文件系统。

2. UBIFS(Unsorted Block Image File System)是一种针对闪存设备设计的文件系统。与传统的文件系统如EXT4不同,UBIFS是为了更好地适应闪存设备的特性而设计的。具体来说,UBIFS支持闪存设备的特殊要求,如自动坏块管理、物理擦除块大小匹配、挂载时间和可靠性等方面的优化。

、总结

1. 本文主要介绍了 SpaceX 推出的 Starlink 路由器设备的硬件固件安全分析方法,以及其相关的通信协议和安全机制。

2. 本文所提到的固件及相关资料可从下面链接获取:

https://github.com/MasterTaiBai/Sat-Hacking

Sat-Hacking愿景:成为一名合格的卫星黑客需要长时间的学习和实践。只有通过持续的努力,掌握各种卫星安全知识和技能,才能真正成为一个专业的卫星白帽子。

在此祝愿安全爱好者及从业人员都能够取得成功,实现自己的梦想,为网络安全贡献自己的力量!

Sat-Hacking(4):Starlink路由器逆向分析-上篇相关推荐

  1. 路由器逆向分析------Running Debian MIPS Linux in QEMU

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70176583 下面的文章内容主要参考英文博客<Running Debian ...

  2. 路由器逆向分析------在QEMU MIPS虚拟机上运行MIPS程序(ssh方式)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69652258 在QEMU MIPS虚拟机上运行MIPS程序--SSH方式 有关在u ...

  3. 路由器逆向分析------MIPS系统网络的配置(QEMU)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69378333 MIPS系统网络的配置  使用QEMU 模拟正在运行的MIPS系统并 ...

  4. 路由器逆向分析------路由器固件分析和动态调试环境搭建简述

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70140865 01.路由器固件分析和动态调试环境搭建简述的原文 <Emula ...

  5. 路由器逆向分析------binwalk工具的安装

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/65441110 一.binwalk工具运行支持的平台 binwalk工具安装支持的平 ...

  6. 路由器逆向分析------binwalk工具的详细使用说明

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/66971242 一.binwalk工具的基本用法介绍 1.获取帮助信息 $ binw ...

  7. 路由器逆向分析------在Linux上安装IDA Pro

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69665905 01.在Linux系统上安装Linux版本的IDA Pro Linu ...

  8. (48)逆向分析 KiFastCallEntry 函数填充 _KTRAP_FRAME 部分

    一.回顾 上一篇博客我逆向了 KiSystemService 函数填充 _KTRAP_FRAME 部分. 逆向分析 KiSystemService 函数填充 _KTRAP_FRAME 部分 里面涉及了 ...

  9. Python爬虫:逆向分析某酷音乐请求参数

    文章目录 前言 1. 请求分析 2. 获取参数 3. 提取信息 结束语 前言   免责声明:     本篇博文的初衷是分享自己学习逆向分析时的个人感悟,所涉及的内容仅供学习.交流,请勿将其用于非法用途 ...

最新文章

  1. Java学习笔记32
  2. mysql受影响的行: 0_mysql执行update语句受影响行数是0
  3. 【MFC系列-第32天】控件自绘技术
  4. Storing and Retrieving Images from SQL Server using Microsoft .NET
  5. Redis 会遇到的「坑」,你踩过几个?
  6. 反斜杠转义mysql java_mysql数据库中的反斜杠”\“怎么使用Java进行转义
  7. 软件设计师1991下午试题1(流程图解析)
  8. (29)VHDL实现时钟分频
  9. 大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验---大数据之hadoop3.x工作笔记0078
  10. PowerShell实现“机器人定时在企业微信群中发送消息”功能(上)
  11. 雷林鹏分享:Redis 简介
  12. QListView超简单的更新列表
  13. Jemalloc源码解析_源码剖析
  14. NetWare网络操作系统
  15. DC升压直流高压电源模块12V24v转100V150V200V250V300V350v1000伏线性变化电压控制输出
  16. 用计算机观察声音的波形,用几何画板观察声音的波形
  17. 【CV作业02】图像灰度值变换+UI
  18. 华为防火墙NAT策略原理+实验验证!
  19. linux 32位中文版,Linux_Deepin_2014下载|Linux Deepin 2014.3 官方简体中文最新版(32位/64位) - 飞极下载站...
  20. 【软件架构】软件架构师

热门文章

  1. 如何使用 testdisk 恢复已删除的文件
  2. window系统关机睡眠快捷方式及编译android app gradle命令
  3. 周黑鸭:“美味缔造者”的背后,蕴藏着数据驱动的奥秘
  4. Cocos Creator 3.x开发《切水果3D》
  5. 什么是损失函数?通俗理解
  6. 宠物貂南京“卖萌” 渐成都市白领新宠
  7. 华为OD机试真题 Java 实现【机器人】【100%通过率】【2022.11 Q4 新题】
  8. wget安装,wget: 无法解析主机地址
  9. Vczh Library++3.0 开源啦!
  10. Django之二级路由