InnerFireZ/air-bt

GitHub: InnerFireZ/air-bt

一款面向低功耗蓝牙(BLE)设备的实时安全扫描与测试工具,集成了自动GATT枚举、CVE检测以及交互式深度漏洞探测功能。

Stars: 1 | Forks: 0

# air-bt **实时低功耗蓝牙安全扫描器** 由 **InnerFireZ** 创建 ## 功能介绍 air-bt 会被动扫描 BLE 广播包,并在后台**自动连接**每一个被发现的设备,枚举其 GATT 服务,从而在实时显示界面中丰富以下信息: - 开放的写入 / 读取 / 通知特性(无需身份验证) - 安全评分(A → F) - 匹配的 CVE 和安全公告(涵盖所有主要蓝牙攻击家族的 65 个条目) - 实时拉取的电池、固件、制造商信息 - 协议检测(MiBeacon、Tuya、ELK-BLEDOM、Nordic UART、iBeacon、Govee 等) 扫描结束后,按下 **Ctrl+C** 即可进入交互菜单,您可以根据扫描发现的内容,从动态构建的列表中选择目标及攻击方式。 ## 界面 ``` air-bt | Mode: probe | Devices: 7 | Elapsed: 34s ⟳ 70:28:45:XX:XX:XX Ctrl+C → select target MAC RSSI NAME SEC FLAGS CVE ⟳ 70:28:45:XX:XX:XX ▂▄__-77 Oclean ? … … BE:58:00:XX:XX:XX ▂▄▆_-62 ELK-BLEDOM F OPEN_WRITE NO_BONDING ADV-ELKBLEDOM-001 UnauthWrite 94:B3:F7:XX:XX:XX ▂▄__-75 LG S60TR C NOTIFY_UNAUTH - F0:18:98:XX:XX:XX ▂___-84 Oclean X Pro D OPEN_WRITE OPEN_READ NO_BONDING CVE-2023-24023 AuthBypass+3 ╭─ Probe Results ──────────────────────────────────────────────────────────╮ │ BE:58:00:XX:XX:XX ELK-BLEDOM 2 open-write ADV-ELKBLEDOM-001 │ │ 70:28:45:XX:XX:XX Oclean Y3L 4 open-write 2 open-read CVE-2023-24023│ ╰──────────────────────────────────────────────────────────────────────────╯ ``` 该表格会**自动适应终端宽度** —— 列会随着您调整窗口大小而自动显示或隐藏。 ## 攻击菜单(选择目标后) ``` ╭─ Target — Attack Menu ──────────────────────────────────────────────────╮ │ 70:28:45:XX:XX:XX Oclean BLE RSSI=-77 SEC=F │ │ Flags: OPEN_WRITE OPEN_READ NO_BONDING NOTIFY_UNAUTH KNOWN_VULN │ │ Services: 6 Open writes: 4 Open reads: 2 Notifiable: 3 │ │ CVEs: CVE-2023-24023 AuthBypass +3 more │ ╰─────────────────────────────────────────────────────────────────────────╯ 0 Back to target list 1 Show full device details 2 Re-enumerate GATT 3 Subscribe Notifications (30s) Stream 3 notifiable chars 4 Exploit Open Writes Write test payloads to 4 unauth writable chars 5 Overflow / Boundary Probe Sweep payload sizes 0→512B; detect crashes & ATT errors 6 Mutation Fuzzer Structured seed mutations (100 iterations) 7 Fuzz Characteristics Send random payloads (50 iterations) 8 Reconnect Auth-Bypass Probe Test BLESA-style bypass on 3 auth-gated chars 9 IoT Sensor Dump Read temperature, humidity, pressure, battery 10 Generic GATT Dump Read all open chars, subscribe notifications 11 Systematic Write Probe Probe with known command patterns 12 Auto PoC (best match) 13 Show CVE/Advisory details (4 entries) 14 Export device results ``` 可用的攻击是基于探测期间发现的内容**动态构建**的 —— 您只会看到与特定设备相关的选项。 ## 支持的设备 PoC | PoC | 安全公告 / CVE | 触发条件 | |-----|---------------|-------------| | ELK-BLEDOM Rainbow | ADV-ELKBLEDOM-001 | ELK-BLEDOM 协议 / LED 灯带 UUID | | 音频设备 | ADV-SPEAKER-001 | VCS / MICS / AICS / ASCS / BASS 服务 | | BLE 扬声器音量控制 | ADV-SPEAKER-002 | VCS 服务或开放的音量控制点 | | HID 键盘注入 | CVE-2023-45866 | 具有开放写入权限的 HID 服务 | | IoT 传感器数据转储 | — | 温度 / 湿度 / 气压 / 心率 特性 | | 智能插座控制 | — | GPIO / 继电器 / 开关 功能 | | 健身追踪器 | — | RSC / CSC / 计步器 服务 | | 健康监测器 | — | 血压 / 血糖 / 脉搏血氧 | | 涂鸦 BLE 控制 | ADV-TUYA-001 | 涂鸦制造商数据 / 服务 UUID | | Govee 智能设备控制 | CVE-2020-7958 | Govee 名称 / 制造商数据 | | MiBeacon 解码器 | ADV-MIBEACON-001 | Xiaomi/Mi 制造商数据 (0x0157) | | Nordic UART 命令注入 | ADV-UART-001/002 | NUS 服务 UUID / Nordic UART 协议 | | Nordic DFU / OTA 暴露 | ADV-DFU-001/002/003 | Nordic DFU / Silabs OTA / TI OAD 服务 UUID | | 智能锁未授权探测 | ADV-LOCK-001 | 锁相关的名称关键字或服务 UUID | | iBeacon / Eddystone / Tile 解码 | ADV-IBEACON-001 | Apple 0x004C 制造商数据 / Eddystone / Tile | | SweynTooth / BrakTooth 崩溃探测 | CVE-2019-16336 + BrakTooth 家族 | SweynTooth/BrakTooth CVE 匹配 | | 助听器未授权探测 | CVE-2019-13473/13474 | 助听器 / 医疗音频服务 | | BlueBorne / BleedingTooth 信息 | CVE-2017-0781 + 家族 | 通过操作系统/平台类型检测 | | WhisperPair(Fast Pair 绕过) | CVE-2025-36911 | Google Fast Pair 服务 (0xFE2C) 或名称匹配 | | 通用 GATT 转储 | — | 任意设备 | | 系统性写入探测 | — | 任意可写入的特性 | | 自动 PoC | — | 自动分发最佳匹配项 | ## 安全探测 三个深度分析工具,用于发现超出简单开放写入检测范围的真实漏洞。 ### 溢出 / 边界探测 使用不断递增的有效载荷大小扫描每个可写入的特性:`0, 1, 20, 21, 64, 128, 244, 255, 256, 512` 字节。 **它能发现:** | 发现结果 | 严重性 | 含义 | |---------|----------|---------| | 设备崩溃(无法重连) | CRITICAL | 栈/堆溢出 —— 固件缺陷 | | 设备断开连接但可恢复 | HIGH | 解析器不稳定 / 断言失败 | | 接受超长写入 | HIGH | 无长度限制(潜在溢出) | | ATT `0x0E` 不太可能的错误 | HIGH | 属性处理程序中存在设备端缺陷 | | ATT `0x0D` 无效的属性长度 | INFO | 已正确执行长度限制 | | ATT `0x05`/`0x0F` 身份验证错误 | INFO | 写入需要身份验证 | 所有发现结果均包含确切的有效载荷大小、ATT 错误代码以及崩溃/恢复分类。如果检测到崩溃,该探测将停止对该特性的所有进一步测试。 ### 变异模糊测试 针对单个特性运行可配置数量的结构化变异,并在所有迭代中保持持久的 BLE 连接。 **变异策略**(按权重): | 策略 | 权重 | 目标 | |----------|--------|---------| | 位翻转 | 25% | 标志字段,位掩码 | | 字节边界 | 25% | 整数溢出 (0x00, 0xFF, 0x7F, 0x80…) | | 随机字节 | 10% | 通用数据破坏 | | 半字节交换 | 10% | 字节序 / 半字节顺序缺陷 | | 截断 | 10% | 长度不足处理 | | 零扩展 | 5% | 越界缓冲区读取 | | 0xFF 扩展 | 5% | 越界缓冲区读取 / 符号扩展 | | 长度破坏 | 5% | 长度字段不匹配 | | 零范围 | 2.5% | Null 字节注入 | | 0xFF 范围 | 2.5% | 饱和注入 | **输出:** ATT 错误细分表、按策略的接受度热图,以及高亮显示的*值得注意的*事件列表 —— 断开连接、超时、接受超长写入以及意外的 ATT 错误代码。 如果设备在运行中途崩溃(意外断开连接且重新连接失败),模糊测试器会将最后一个有效载荷标记为崩溃触发器并停止。 ### 重连身份验证绕过探测 (BLESA 风格) 测试设备在客户端重新连接时是否错误地跳过了重新身份验证 —— 这是 [BLESA (CVE-2020-9770)](https://dl.acm.org/doi/10.1145/3395351.3399353) 背后的核心弱点。 **每个特性的三阶段测试:** | 阶段 | 间隔 | 检查内容 | |-------|-----|----------------| | 阶段 1 — 基线 | — | 确认该特性确实被阻止(需要身份验证) | | 阶段 2 — 立即重连 | 0.5 秒 | 立即重新连接;重试被阻止的操作 | | 阶段 3 — 延迟重连 | 3.0 秒 | 暂停后重新连接;捕获时间窗口绕过 | **结果:** | 结果 | 严重性 | 含义 | |--------|----------|---------| | 写入绕过已确认 | CRITICAL | 设备在重连时跳过重新身份验证 —— 未经身份验证的写入 | | 读取绕过已确认 | HIGH | 受身份验证保护的数据无需配对即可读取 | | 时间窗口绕过(仅限阶段 3) | HIGH | 连接安全设置中存在竞态条件 | | 不一致的阶段 1 | HIGH | 该特性在 GATT 扫描中显示被阻止,但现在处于开放状态 | | 未发现绕过 | INFO | 设备正确执行了身份验证 | 当确认发生任何绕过时,`AUTH_BYPASS` 标志将被添加到该设备的安全标志中,并计入安全评分。 ## 安全探测 三个深度分析工具,用于发现超出简单开放写入检测范围的真实漏洞。 ### 溢出 / 边界探测 使用不断递增的有效载荷大小扫描每个可写入的特性:`0, 1, 20, 21, 64, 128, 244, 255, 256, 512` 字节。 **它能发现:** | 发现结果 | 严重性 | 含义 | |---------|----------|---------| | 设备崩溃(无法重连) | CRITICAL | 栈/堆溢出 —— 固件缺陷 | | 设备断开连接但可恢复 | HIGH | 解析器不稳定 / 断言失败 | | 接受超长写入 | HIGH | 无长度限制(潜在溢出) | | ATT `0x0E` 不太可能的错误 | HIGH | 属性处理程序中存在设备端缺陷 | | ATT `0x0D` 无效的属性长度 | INFO | 已正确执行长度限制 | | ATT `0x05`/`0x0F` 身份验证错误 | INFO | 写入需要身份验证 | 所有发现结果均包含确切的有效载荷大小、ATT 错误代码以及崩溃/恢复分类。如果检测到崩溃,该探测将停止对该特性的所有进一步测试。 ### 变异模糊测试 针对单个特性运行可配置数量的结构化变异,并在所有迭代中保持持久的 BLE 连接。 **变异策略**(按权重): | 策略 | 权重 | 目标 | |----------|--------|---------| | 位翻转 | 25% | 标志字段,位掩码 | | 字节边界 | 25% | 整数溢出 (0x00, 0xFF, 0x7F, 0x80…) | | 随机字节 | 10% | 通用数据破坏 | | 半字节交换 | 10% | 字节序 / 半字节顺序缺陷 | | 截断 | 10% | 长度不足处理 | | 零扩展 | 5% | 越界缓冲区读取 | | 0xFF 扩展 | 5% | 越界缓冲区读取 / 符号扩展 | | 长度破坏 | 5% | 长度字段不匹配 | | 零范围 | 2.5% | Null 字节注入 | | 0xFF 范围 | 2.5% | 饱和注入 | **输出:** ATT 错误细分表、按策略的接受度热图,以及高亮显示的*值得注意的*事件列表 —— 断开连接、超时、接受超长写入以及意外的 ATT 错误代码。 如果设备在运行中途崩溃(意外断开连接且重新连接失败),模糊测试器会将最后一个有效载荷标记为崩溃触发器并停止。 ### 重连身份验证绕过探测 (BLESA 风格) 测试设备在客户端重新连接时是否错误地跳过了重新身份验证 —— 这是 [BLESA (CVE-2020-9770)](https://dl.acm.org/doi/10.1145/3395351.3399353) 背后的核心弱点。 **每个特性的三阶段测试:** | 阶段 | 间隔 | 检查内容 | |-------|-----|----------------| | 阶段 1 — 基线 | — | 确认该特性确实被阻止(需要身份验证) | | 阶段 2 — 立即重连 | 0.5 秒 | 立即重新连接;重试被阻止的操作 | | 阶段 3 — 延迟重连 | 3.0 秒 | 暂停后重新连接;捕获时间窗口绕过 | **结果:** | 结果 | 严重性 | 含义 | |--------|----------|---------| | 写入绕过已确认 | CRITICAL | 设备在重连时跳过重新身份验证 —— 未经身份验证的写入 | | 读取绕过已确认 | HIGH | 受身份验证保护的数据无需配对即可读取 | | 时间窗口绕过(仅限阶段 3) | HIGH | 连接安全设置中存在竞态条件 | | 不一致的阶段 1 | HIGH | 该特性在 GATT 扫描中显示被阻止,但现在处于开放状态 | | 未发现绕过 | INFO | 设备正确执行了身份验证 | 当确认发生任何绕过时,`AUTH_BYPASS` 标志将被添加到该设备的安全标志中,并计入安全评分。 ## CVE 数据库 **65 个 CVE 和安全公告** 涵盖范围: | 家族 | 条目 | |--------|---------| | BlueBorne | CVE-2017-1000251/1000250/0781/0782/0783/0785 | | BleedingTooth | CVE-2020-12351/12352/24490 | | BrTooth | CVE-2021-34143/34145/34146/34147/34148 | | SweynTooth | CVE-2019-16336/17517/17518/17519/17520/17061 + CVE-2021-28135/28136/28137/28138/28139 | | BLEEDINGBIT | CVE-2018-16986/7080 | | 身份验证攻击 | KNOB (CVE-2019-9506) / BIAS (CVE-2020-10135) / BLUFFS (CVE-2023-24023) / BLESA / 无效曲线 (CVE-2018-5383) / CVE-2020-26555/26558 | | HID 注入 | CVE-2023-45866 (MouseJack / KeyDucky) | | Android / iOS / Windows | CVE-2020-0022 / CVE-2023-42846 / CVE-2024-21306 / CVE-2022-30190 | | Google Quick Share | CVE-2024-38271 (强制 Wi-Fi) / CVE-2024-38272 (未经同意写入文件) | | WhisperPair | CVE-2025-36911 — Fast Pair KBP 身份验证绕过;影响 Sony、Jabra、JBL、Pixel Buds 及更多设备 | | IoT 未授权访问 | ADV-ELKBLEDOM-001 / ADV-TUYA-001 / ADV-MIBEACON-001 / ADV-UART-001/002 | | OTA / 固件 | ADV-DFU-001 (Nordic) / ADV-DFU-002 (Silabs) / ADV-DFU-003 (TI OAD) | | 智能设备 | ADV-SPEAKER-001/002 / ADV-LOCK-001 / ADV-CGMS-001 | | 追踪 / 隐私 | ADV-IBEACON-001 / ADV-TRACKER-001 | | 医疗设备 | CVE-2019-13473/13474 | | 拒绝服务 | ADV-BLE-FLOOD-001 / CVE-2016-8375 / CVE-2022-30190 | 每个条目包含:严重性(CRITICAL/HIGH/MEDIUM/LOW)、类型(RCE/DoS/AuthBypass/UnauthWrite/OTA/Spoof/Inject/InfoDisc),以及基于设备名称模式、广播的 UUID 和蓝牙设备类型的匹配逻辑。 ## 系统要求 - 带有 BlueZ 的 Linux 系统 - Python 3.11+ - Root 权限 / CAP\_NET\_ADMIN(用于原始 BLE 访问) ``` sudo apt install bluetooth bluez python3-pip pip install bleak rich ``` ## 用法 ``` # 使用 auto-probe 进行完整扫描(推荐) sudo python3 main.py # 降低 RSSI 阈值以捕获微弱/远距离设备 sudo python3 main.py --rssi -100 # 仅 Passive — 扫描期间无连接 sudo python3 main.py --passive # 不同的 adapter sudo python3 main.py -i hci1 # 退出时导出结果 sudo python3 main.py --output results.json # 详细日志记录 sudo python3 main.py -v ``` ### 选项 | 标志 | 默认值 | 描述 | |------|---------|-------------| | `-i / --adapter` | `hci0` | HCI 适配器 | | `--rssi` | `-80` | 最小 RSSI 阈值(单位:dBm) | | `--timeout` | `10.0` | 单设备连接超时时间(秒) | | `--probe-delay` | `1.5` | 后台探测间隔时间(秒) | | `--passive` | 关闭 | 在扫描期间禁用自动探测连接 | | `--output` | — | 退出时导出为 `.json` / `.csv` / `.html` | | `-v / --verbose` | 关闭 | 调试日志输出 | ## 免责声明 air-bt 仅用于**授权的安全测试、研究和教育用途**。 仅扫描和测试您拥有或获得明确书面许可的设备。 未经授权访问蓝牙设备在您所在的司法管辖区可能是违法的。 作者不对滥用行为承担任何责任。
标签:BLE, Claude, CVE检测, GATT, GATT枚举, GraphQL安全矩阵, IoT, 交互式攻击, 低功耗蓝牙, 协议识别, 安全扫描器, 插件系统, 无线网络, 智能设备安全, 物联网安全, 网络安全, 自动化探测, 蓝牙协议, 蓝牙安全, 蓝牙攻击, 蓝牙渗透, 蓝牙漏洞, 设备指纹, 逆向工具, 隐私保护