Series: Flysky

富斯ix6安全研究


富斯ix6安全研究

富斯 FlySky FS-i6X 发射机 + AFHDS 2A 接收机 来整理。需要注意:FS-i6X 能配多种接收机,例如 FS-iA6B、FS-iA10B、FS-X6B、FS-A8S

image.png

一、目前可以确定的核心信息

项目初步结论可信度
工作频段2.408–2.475 GHz
无线协议AFHDS 2A
调制方式GFSK
射频芯片AMICCOM A7106 系列
发射机主控Geehy 极海 APM32F072VBT6
跳频方式FHSS,单个连接使用16个跳频点
数据包周期公开兼容实现约3.85 ms一帧,约260帧/秒
加密和认证公开实现中未发现密码学加密、消息认证码或防重放计数器
优先研究方向SPI抓包、绑定过程、跳频同步、身份字段、重放与伪造、抗干扰能力

富斯官方给出的 FS-i6X 参数包括:2.408–2.475 GHz、AFHDS 2A、GFSK、135个射频信道、标称带宽500 kHz和小于20 dBm的发射功率。FCC 测试报告显示,它在一次通信中使用16个不同频点,相邻选中频点至少间隔约1 MHz;实测20 dB占用带宽约1.05 MHz,发射功率大约13~15 dBm。这里的“500 kHz”更接近频率栅格或厂商标称信道参数,不应直接理解为实际信号只占500 kHz。




二、AFHDS 2A 的公开协议结构

虽然富斯没有公开完整的 AFHDS 2A 空口协议,但 Deviation、Multiprotocol 和多个自制接收机项目已经完成了较完整的兼容实现,说明该协议能够通过 SPI 和射频抓包逆向恢复。

公开实现显示:

跳频

  • 每个连接使用16个频点;

  • 跳频表根据发射机身份参数计算;

  • 数据包在16个频点之间循环发送;

  • 一次数据帧周期约3.85 ms;

  • 绑定阶段会传输与跳频同步有关的信息。

数据包

公开代码中的典型结构为:

  • 发射数据包约38字节;

  • 接收机遥测包约37字节;

  • 数据包中包含4字节发射机ID;

  • 正常通信中还包含4字节接收机ID;

  • 通道摇杆值以固定格式排列;

  • 绑定数据中可出现16个跳频信道参数。

部分兼容接收机实现还提到:

  • 4字节同步字;

  • CRC校验;

  • Hamming(7,4)纠错编码;

  • 500 kHz频率栅格。

这些机制主要负责同步、纠错和抗随机干扰,不是密码学安全机制


四、可能存在的无线安全缺陷

以下结论主要根据公开兼容代码推断,最终需要在你手中的发射机和接收机上验证。

1. 空口数据可能没有加密

公开实现中,通道值、发射机ID、接收机ID等字段均以可直接解析的形式构造,未发现 AES、流密码或其他加密过程。

可能影响:

  • 被动获取摇杆通道值;

  • 判断油门、横滚、俯仰、偏航等控制变化;

  • 获取发射机和接收机身份参数;

  • 还原绑定及跳频过程。

风险判断:高可信度的信息泄露缺陷

2. 身份字段可能只是普通ID,不是认证凭据

公开代码主要通过4字节发射机ID和4字节接收机ID识别通信对象,没有看到基于密钥的挑战应答或消息认证码。

这意味着攻击者在掌握:

  • 发射机ID;

  • 接收机ID;

  • 跳频序列;

  • 发包周期和频点相位;

之后,理论上可能构造“看起来来自合法发射机”的数据包。

不过,单纯复制一个发射机ID未必立即成功,因为还可能受到接收机ID、模型匹配、跳频初始位置和时序窗口影响。因此应把它列为 身份冒充测试假设,而不是直接认定已经能够接管。

3. 可能缺少防重放机制

公开包结构中没有明显发现:

  • 单调递增帧序号;

  • 随机数;

  • 时间戳;

  • 会话级消息认证码;

  • 已认证的滚动码。

因此,接收机可能无法区分:

  • 当前合法数据包;

  • 之前录制的数据包;

  • 攻击者重新构造的相同数据包。

需要测试接收机是否依赖严格的跳频时序和连续包状态。即使完整录制后直接重放失败,也不代表不存在重放风险;攻击者可能需要重新对齐频点和时隙。

4. 绑定阶段可能是薄弱环节

绑定阶段需要让接收机学习发射机身份和跳频参数。公开实现中,绑定包包含发射机ID和跳频相关信息,但没有明显看到基于预共享密钥的身份验证。

潜在问题:

  • 接收机处于绑定模式时可能接受任意兼容发射机;

  • 攻击者可能先于合法发射机完成绑定;

  • 可能通过伪造绑定包替换保存的身份参数;

  • 断电后是否永久保存,需要针对具体接收机测试。

该风险通常要求接收机已经被人为置入绑定模式,所以攻击面比正常飞行状态小。

5. 跳频不能等同于加密

AFHDS 2A 使用 FHSS,可以降低同频干扰并提高共存能力,但公开实现显示跳频序列可以由身份参数计算,而且绑定过程还会交换跳频相关信息。

因此跳频只能提高普通监听和干扰的门槛,无法替代:

  • 加密;

  • 身份认证;

  • 完整性保护;

  • 防重放机制。

6. 干扰和失步攻击

FCC资料显示,一条连接只使用16个跳频点。若攻击者能够获得跳频表和当前相位,理论上可以进行比全频段噪声干扰更高效的跟随式或选择式干扰。

建议重点观察:

  • 丢失多少连续帧后进入 failsafe;

  • 重新收到合法包后恢复时间;

  • 单频干扰、部分频点干扰和宽带干扰的差别;

  • 是否能够用伪造数据阻止 failsafe;

  • 干扰消失后是否存在错误重同步。

7. 遥测和配置包伪造

AFHDS 2A 是双向协议,接收机可以返回遥测数据。公开实现中,遥测包的身份检查看起来主要依赖普通ID字段,因此应测试:

  • 电压、RSSI、传感器数据伪造;

  • 虚假低电压或虚假正常状态;

  • 遥测包是否影响发射机UI或告警;

  • failsafe、接收机设置等控制包是否具备认证。


五、最值得收集的资料

官方资料

  1. FS-i6X产品参数和用户手册
    包含频率、调制方式、信道数量、功率、接口和绑定流程。官方页面目前列出的固件版本为1.0.52,更新时间为2022年5月18日。
  2. FCC ID:N4ZFLYSKYI6X
    FCC档案中包含射频测试报告、内部照片、外部照片和用户手册,是确认PCB版本和射频参数的重要来源。
  3. A7105数据手册
    重点看寄存器表、频率计算、数据速率、同步字、CRC、FIFO和GIO引脚。
  4. STM32F072数据手册和RM0091
    在确认芯片丝印后,再选择准确容量和封装版本。

协议逆向资料

  1. Multiprotocol AFHDS2A A7105实现
    适合研究跳频算法、绑定包、数据包和遥测包。
  2. Deviation AFHDS2A实现及讨论
    包含早期SPI逆向过程和兼容发射实现。
  3. TinyHawkFlyskyRx等兼容接收机代码
    适合从接收机角度理解同步、纠错、绑定和跳频。


拆机


image.png


主控:Geehy 极海 APM32F072VBT6

APM32F072x8xB Datasheet V2.0.pdf

APM32F072x8xB User Manual V1.7.pdf

射频芯片A7106

官方页面:https://www.amiccom.com.tw/asp_cn/product_detail.asp?CATG_ID=2&PRODUCT_ID=105

A7106.pdf

5a68749dab219ef0f3bd582bd357cdcc.jpg


思路:

1、AFHDS 2A协议缺陷,是否可以知道跳频表

2、主控和射频芯片的SPI暴露,使用逻辑分析仪抓取通信数据

主板测试点逻辑分析仪作用
SCSD0/CH0射频芯片片选
SCKD1/CH1SPI时钟
MOSID2/CH2APM32 → A7106
MISOD3/CH3A7106 → APM32
AGNDGND共地

3、是否有缺陷可以断链

  • 官方固件

  • OpenI6X:有针对 FS-i6X 的 OpenTX/EdgeTX 移植版

重放数据:

RX和TX可以空口获得
16个跳频点可以通过TX算出来(AFHDS2A_calc_channels函数)/空口直接听


公开 AFHDS 2A 实现的绑定阶段不是立刻使用16项跳频表,而是在两个固定信道之间切换:

0x0D = 13
0x8C = 140

第三方接收机首次绑定时:

  1. 初始化 A7105/A7106;
  2. 写入 AFHDS 2A 固定同步ID;
  3. 0x0D0x8C 间扫描;
  4. 接收 0xBB/0xBC 绑定包;
  5. 从字节1~4保存 TX ID;
  6. 从字节11~26保存16个跳频点;
  7. 生成或读取自己的4字节 RX ID;
  8. 将 RX ID放入绑定响应包的字节5~8;
  9. 向发射机发送 0xBC响应;
  10. 将 TX ID、RX ID和跳频表保存到 Flash;
  11. 进入正常跳频接收。