Krabby24/KNOB-Replication-Feasibility-on-Raspberry-Pi-5-BCM4345C0
GitHub: Krabby24/KNOB-Replication-Feasibility-on-Raspberry-Pi-5-BCM4345C0
该仓库记录了在树莓派5上复现蓝牙KNOB攻击的完整实验过程,最终证明观察到的密钥长度降级现象仅为HCI报告假象而非真实攻击成功。
Stars: 0 | Forks: 0
# 在 Raspberry Pi 5 / BCM4345C0 上复现 KNOB 攻击的可行性研究
## 概述
本仓库记录了基于 Broadcom/Cypress BCM4345C0/CYW43455 系列芯片,在 Raspberry Pi 5 蓝牙控制器上进行 KNOB 攻击实验性可行性研究的文档。
最初的目标是复现完整的 KNOB 式蓝牙 BR/EDR 熵降级攻击,即强制将协商的加密密钥长度从 16 字节降至 1 字节。在项目进行期间,我们最初观察到了明显的降级现象:修改活动连接结构内部偏移量为 `+0xA7` 的 RAM 字段,会导致 InternalBlue 和标准 HCI 命令 `Read Encryption Key Size` 同时报告 1 字节的密钥长度。
然而,随后的验证表明,这一效应不足以作为真实 KNOB 降级的充分证据。在一项决定性的时序追踪中,控制器在 `Encryption Change` 之后立即报告了 `Key size: 16`;而诸如 `0` 和 `1` 这样的被修改值,仅在对本地报告字段进行直接 RAM 写入之后才出现。
因此,本项目的最终结论是:
本仓库保留了完整的实验过程、内存映射工作、验证追踪、已测试的 RAM 候选项以及最终的研究结果。
## 最终结果
### 我们所证实的
* 通过 InternalBlue,可以对 Raspberry Pi 5 / BCM4345C0 控制器的 RAM 进行检查和部分修改。
* 活动连接结构中包含一个位于偏移量 `+0xA7` 的字段,该字段控制着 InternalBlue 和 HCI `Read Encryption Key Size` 所报告的密钥长度。
* 向该字段写入 `0x01` 可以使本地控制器报告 1 字节的密钥长度。
* 报告的密钥长度也可以被更改为无效值(例如 `0`),这表明 HCI 报告的值是可变的控制器状态。
* 时序验证表明,在 `Encryption Change` 之后立即进行的首次密钥长度读取依然是 16 字节。
* 因此,这种表面上的降级现象只是加密后 HCI/InternalBlue 报告产生的假象。
### 我们未能证实的
* 我们没有证明 LMP 协商的熵值 `N` 被降至 1。
* 我们没有在加密设置之前修改 LMP 密钥长度协商数据包。
* 我们没有在密钥派生之前获取可靠的固件 hook。
* 我们没有捕获到空中的 BR/EDR 密文以证明其可被暴力破解。
* 我们不声称在此设置下实现了完整的 KNOB 攻击复现。
## 主要贡献
1. **BCM4345C0 连接结构分析**
我们通过实验映射了活动蓝牙连接结构内部的相关字段。
2. **定位报告的密钥长度字段**
位于偏移量 `+0xA7` 的字段被识别为 InternalBlue 和 HCI 用于报告有效密钥长度的值。
3. **HCI/InternalBlue 误报验证**
我们展示了即使不能证明发生了 LMP 层面的降级,HCI 和 InternalBlue 也可能报告 1 字节的密钥长度。
4. **基于时序的验证**
决定性的追踪结果表明:
Encryption Change
Read Encryption Key Size -> 16
随后,在进行 RAM 写入之后:
Read Encryption Key Size -> 0
Read Encryption Key Size -> 1
5. **上游 RAM 候选项搜索**
我们测试了多个可能作为上游密钥长度输入的 RAM 候选项。如果不直接修改 `+0xA7` 报告字段,没有任何候选项能自然产生 1 字节的密钥长度结果。
6. **可行性评估**
我们明确了在该平台上完整复现 KNOB 攻击所缺失的能力:LMP 层面的可见性/修改能力、可靠的固件 patch(补丁),或者外部 BR/EDR 密文捕获。
## 仓库结构
```
.
├── README.md
├── PROGRESS.md
├── LICENSE
├── .gitignore
├── firmware_analysis.md
├── vulnerability_table.md
├── hcd_to_bin.py
├── docs/
│ ├── false_positive_validation.md
│ ├── upstream_candidates.md
│ ├── reproducibility.md
│ └── ai_disclosure.md
├── captures/
│ └── README.md
└── report/
└── From_Apparent_KNOB_Downgrade_to_HCI_Reporting_False_Positive__Experimental_Analysis_on_Raspberry_Pi_5___BCM4345C0.pdf
```
## 关于 PROGRESS.md 的重要说明
`PROGRESS.md` 是一份按时间顺序记录的研究日志。它特意保留了项目完整的演进过程,包括后来被纠正的早期解释。
一些较早的条目可能会将 `+0xA7` 方法描述为一次成功的 KNOB 降级。这些条目应作为历史记录来阅读。最终经过验证的结论是本 README 和最终报告中所述的内容:
## 实验设置
主要设置:
```
Attacker-controlled platform: Raspberry Pi 5
Bluetooth controller: BCM4345C0 / CYW43455 family
Framework: InternalBlue
Main target: Samsung Galaxy Ace Style 2014
Target BD address: F8:84:F2:62:96:AA
Linux tools: btmon, hcitool, bluetoothctl, l2ping
Windows tools: ADB, Wireshark, tshark
Target-side logging: Android Bluetooth HCI snoop log
```
Raspberry Pi 作为受控的蓝牙对等端。Samsung 设备作为目标设备。实验通过本地控制器 RAM 检查、HCI 追踪、目标端 HCI snoop 日志记录和时序分析来完成。
## 关键实验证据
关键的验证追踪表明:
```
7.516985 Encryption Change
7.517704 Read Encryption Key Size -> Key size: 16
40.384067 Read Encryption Key Size -> Key size: 0
50.359434 Read Encryption Key Size -> Key size: 1
```
解释:
* 在启用加密后,控制器立即报告了 16 字节。
* 数值 `0` 和 `1` 仅在几十秒后才出现。
* 这些数值是在对报告字段进行直接 RAM 写入后观察到的。
* 因此,观察到的 1 字节报告是加密后的报告篡改,而不是 LMP 协商使用了 `N = 1` 的证据。
## 上游候选项搜索
在确定 `+0xA7` 为报告字段后,我们搜索了可能在加密设置之前影响密钥长度协商的上游 RAM 字段。
除其他外,测试的候选项包括:
```
0x2002A8
0x2002CC
0x206484
0x20EBC0
0x20EBC2
0x201FE8
0x20360C
0x208A64
0x200704
0x201858
0x203660
0x20F75C
0x210D1E
0x210D1C
```
如果不直接修改 `+0xA7` 报告字段,没有任何测试的候选项能使控制器自然报告 1 字节的密钥长度。
## 当前状态
| 问题 | 结果 |
| ------------------------------------------------- | ------ |
| 我们能修改本地报告的密钥长度吗? | 是 |
| InternalBlue 能报告 1 字节吗? | 是 |
| HCI `Read Encryption Key Size` 能报告 1 字节吗? | 是 |
| 这是 KNOB 攻击的充分证明吗? | 否 |
| 我们观察到 LMP 协商 `N = 1` 了吗? | 否 |
| 我们捕获 BR/EDR 密文以进行暴力破解了吗? | 否 |
| 我们找到可行的上游 RAM 输入了吗? | 否 |
| 我们展示了完整的 KNOB 复现吗? | 否 |
| 我们发现了报告误报吗? | 是 |
## 最终报告
最终的科学报告可在以下位置找到:
```
report/From_Apparent_KNOB_Downgrade_to_HCI_Reporting_False_Positive__Experimental_Analysis_on_Raspberry_Pi_5___BCM4345C0.pdf
```
## 复现说明
这些实验需要:
* 配备板载 BCM4345C0/CYW43455 蓝牙控制器的 Raspberry Pi 5;
* 为本地控制器配置的 InternalBlue;
* Linux 蓝牙工具(`btmon`、`hcitool`、`bluetoothctl`、`l2ping`);
* 一台 BR/EDR 目标设备;
* 可选的 Android HCI snoop 日志记录,用于目标端验证。
本仓库不提供即插即用的 KNOB 漏洞利用程序。这些脚本和笔记旨在记录实验过程和可行性分析。
## 道德与安全声明
本仓库仅用于学术研究和防御性安全分析。实验均在我们受控的设备上进行。本仓库不提供完整可用的 KNOB 漏洞利用程序,也不应用于攻击第三方设备。
## 许可证
本仓库基于 MIT 许可证发布。详情请参阅 `LICENSE`。
## AI 辅助声明
在命令行故障排除、代码起草、日志解释和文本润色方面,我们使用了 AI 工具作为辅助支持。所有的实验、与控制器的交互、收集的日志、技术决策以及最终结论,均由作者亲自执行、验证并进行批判性审查。
标签:KNOB攻击, 博通芯片研究, 漏洞复现, 蓝牙安全, 逆向工具