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攻击, 博通芯片研究, 漏洞复现, 蓝牙安全, 逆向工具