titiomathias/sec-for-ble

GitHub: titiomathias/sec-for-ble

基于ESP32与FastAPI的BLE攻击性安全教学靶场,通过模拟存在漏洞的智能家居环境演示未认证写入、重放攻击和客户端冒充等BLE安全威胁。

Stars: 0 | Forks: 0

# 蓝牙低功耗(BLE)的攻击性安全 这是一个教学实验室,旨在使用两个存在漏洞的 ESP32 设备和一个模拟实时智能家居的外部 API 来演示 BLE 攻击。 ## 场景目标 本项目专为蓝牙低功耗(BLE)的攻击性安全实践课程而设计: - `ESPA (home)` 充当存在漏洞的 BLE 外围设备,并控制房屋状态。 - `ESPB (client)` 充当 BLE 中心设备并发送命令。 - `Smart Home API` 在浏览器中呈现房屋,记录事件,并便于直观观察攻击的影响。 其核心是重现、观察并解释不安全的行为,例如未经验证的写入、重放攻击以及 BLE 客户端冒充。 ## 架构 ``` [ESPB_CLIENT_VULN] --BLE plaintext--> [ESPA_HOME_VULN] --HTTP--> [Smart Home API + UI] | | | (comandos) (sem auth BLE) (estado + eventos) ``` ## 仓库结构 ``` . ├── espa_home_vuln/ │ └── espa_home_vuln.ino # ESPA: periférico BLE vulnerável + integração HTTP com API ├── espb_client_vuln/ │ └── espb_client_vuln.ino # ESPB: central BLE vulnerável (auto/demo/manual) └── smarthome/ ├── app/main.py # FastAPI + WebSocket + painel visual ├── app/state_store.py # Persistência e trilha de eventos ├── data/state.json # Estado da casa └── requirements.txt ``` ## 蓄意设置的漏洞 在固件 `espa_home_vuln` 中: - 无强制性的 pairing/bonding。 - 无 BLE 链路加密。 - 命令采用明文形式(`SALA:ON`, `COZINHA:OFF` 等)。 - 无防重放的 nonce/counter/token。 - 用于命令的 Characteristic 具有开放的写入权限。 在固件 `espb_client_vuln` 中: - 客户端以纯文本形式发送命令。 - 自动化流程便于生成可重复的流量,以用于重放/演示。 ## 实验室使用的 BLE 协议 - `BLE_DEVICE_NAME` (home): `ESP32_HOME_VULN` - `SERVICE_UUID`: `b7e15000-7d99-4c80-9a9e-b8d537d9e111` - `CMD_CHAR_UUID`: `b7e15001-7d99-4c80-9a9e-b8d537d9e111` (write) - `STATE_CHAR_UUID`: `b7e15002-7d99-4c80-9a9e-b8d537d9e111` (read/notify) 房屋接受的命令: - `SALA:ON` / `SALA:OFF` - `COZINHA:ON` / `COZINHA:OFF` - `BANHEIRO:ON` / `BANHEIRO:OFF` - `STATUS` - `RESET` ## 启动房屋 API(外部模拟器) 前置条件: - Python 3.10+ 步骤: ``` cd smarthome python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt cd app python3 main.py ``` API 将启动于: - `http://127.0.0.1:8080` - `http://SEU_IP_LOCAL:8080`(用于在同一网络内访问 ESPs) ## ESPs 配置 ### ESPA(存在漏洞的房屋) 文件:`espa_home_vuln/espa_home_vuln.ino` 在上传前调整以下值: - `WIFI_SSID` - `WIFI_PASS` - `API_BASE_URL`(例如:`http://192.168.0.10:8080`) 使用 NimBLE-Arduino 栈进行编译,并上传到房屋的 ESP32 设备。 ### ESPB(存在漏洞的客户端) 文件:`espb_client_vuln/espb_client_vuln.ino` 将其上传到客户端 ESP32。它将进行扫描,连接 BLE 服务,并支持: - 自动模式(周期性随机命令) - 演示模式(引导序列) - 通过串口的手动模式(任何文本命令) ## 如何运行演示 1. 启动 API(`python3 main.py`)并打开 Web 面板。 2. 打开 ESPA(`ESP32_HOME_VULN`)并确认其处于广播状态。 3. 打开 ESPB 并等待 BLE 连接。 4. 通过 ESPB 的串口发送命令(`demo`, `STATUS`, `SALA:ON` 等)。 5. 在面板上观察实时变化(WebSocket + 事件)。 ## 用于课堂演示的攻击场景 1. 未经验证的 BLE 写入 使用另一个 BLE 中心设备(例如:手机上的通用 BLE 应用程序)直接向 `CMD_CHAR_UUID` 写入。 预期结果:无需合法客户端,房屋状态即发生改变。 2. 命令重放 重新发送之前截获的有效命令。 预期结果:动作重复发生,因为不存在 nonce/counter 或新鲜度验证。 3. 客户端冒充 攻击者以预期格式发送 payload(`SALA:ON`, `COZINHA:OFF` 等),即可获得相同的操作效果。 预期结果:API 会记录具有技术来源的事件,但无法保证可靠的身份认证。 ## 主要 API 端点 - `GET /api/state` -> 房屋当前快照 - `POST /api/command` -> 按目标执行操作 - `PATCH /api/state/{device_type}/{device_id}` -> 直接更改状态 - `GET /api/events?limit=20` -> 事件历史记录 - `POST /api/reset` -> 重置场景 - `WS /ws` -> 面板的实时更新 通过 API 发送命令的示例: ``` curl -X POST http://127.0.0.1:8080/api/command \ -H 'Content-Type: application/json' \ -d '{"target":"doors.front","action":"open","source":"attacker-replay"}' ``` ## 负责任的使用 本项目仅限于受控实验室、教学环境及授权研究。未经明确许可,请勿在设备、网络或系统上使用这些技术。
标签:ESP32, Homebrew安装, 数据展示, 漏洞环境, 物联网安全, 红队, 蓝牙低功耗, 逆向工具