5.2 KiB
API Reference: BLE Attack Detection Agent
Overview
Scans, enumerates, and analyzes Bluetooth Low Energy devices for security vulnerabilities including weak pairing, replay attack susceptibility, insecure GATT permissions, advertising spoofing, and Man-in-the-Middle indicators. Combines Ubertooth/nRF hardware sniffing with bleak-based GATT enumeration and crackle-based encryption analysis. For authorized wireless security testing only.
Dependencies
| Package | Version | Purpose |
|---|---|---|
| bleak | >=0.21 | Cross-platform asyncio BLE GATT client for scanning and enumeration |
| tshark | (system) | Command-line Wireshark for BLE packet extraction and field analysis |
| ubertooth-btle | (system) | Ubertooth One CLI for passive BLE sniffing and packet capture |
| crackle | (system) | BLE Legacy Pairing encryption cracker for LTK recovery |
CLI Usage
# Scan for BLE devices in range
python agent.py --mode scan --scan-duration 15 --output scan_report.json
# Enumerate GATT services on a target device
python agent.py --mode enumerate --target AA:BB:CC:DD:EE:FF --output gatt_report.json
# Test replay vulnerability on a specific characteristic
python agent.py --mode replay --target AA:BB:CC:DD:EE:FF \
--char-uuid 0000fff1-0000-1000-8000-00805f9b34fb \
--replay-payload 0102030405 --output replay_report.json
# Monitor for BLE advertising spoofing
python agent.py --mode monitor --scan-duration 60 \
--known-devices known.json --output monitor_report.json
# Analyze a BLE packet capture
python agent.py --mode analyze --pcap capture.pcapng --output pcap_report.json
# Full assessment with Ubertooth capture
python agent.py --mode full --target AA:BB:CC:DD:EE:FF \
--ubertooth-capture 120 --pcap-format ppi \
--char-uuid 0000fff1-0000-1000-8000-00805f9b34fb \
--replay-payload 0102030405 --output full_report.json
Arguments
| Argument | Required | Description |
|---|---|---|
--mode |
No | Operating mode: scan, enumerate, replay, monitor, analyze, full (default: scan) |
--target |
Conditional | Target BLE device address (required for enumerate/replay modes) |
--scan-duration |
No | BLE scan duration in seconds (default: 10) |
--char-uuid |
Conditional | GATT characteristic UUID for replay testing |
--replay-payload |
Conditional | Hex-encoded payload for replay test |
--pcap |
Conditional | Path to BLE pcap/pcapng file for analysis mode |
--ubertooth-capture |
No | Capture with Ubertooth for N seconds; 0 to disable (default: 0) |
--pcap-format |
No | Ubertooth capture format: pcapng, ppi, le (default: pcapng) |
--known-devices |
No | JSON file mapping known device addresses to names for spoofing detection |
--output |
No | Output report file path (default: ble_security_report.json) |
Key Functions
scan_ble_devices(scan_duration)
Discovers BLE devices using bleak BleakScanner. Returns device address, name, RSSI, service UUIDs, manufacturer data, service data, and TX power for each device found.
enumerate_gatt_services(target_address, timeout)
Connects to a BLE peripheral and enumerates all GATT services, characteristics, and descriptors. Reads characteristic values when readable. Flags writable characteristics, write-without-response properties, and characteristics containing sensitive keyword patterns.
test_replay_vulnerability(target_address, char_uuid, test_payload_hex, read_after)
Writes a captured/test payload to a characteristic, then replays the same payload to detect if the device accepts stale commands without freshness validation. Reads state before and after to confirm replay effect.
detect_advertising_spoofing(scan_duration, known_devices)
Monitors BLE advertising in real-time to detect spoofing indicators: same device name from multiple addresses (cloned device), known device names from unknown addresses (impersonation), and abnormal RSSI fluctuations (relay attack).
analyze_pcap_for_ble_attacks(pcap_path)
Analyzes BLE packet captures using tshark and crackle. Detects Just Works pairing, Legacy Pairing without Secure Connections, excessive connection attempts, and attempts LTK recovery with crackle.
run_ubertooth_capture(output_path, target_address, duration, pcap_format)
Starts a passive BLE capture using Ubertooth One in either promiscuous or follow mode. Supports pcapng, PPI (crackle-compatible), and LE pseudoheader output formats.
generate_report(scan_results, gatt_profiles, replay_results, spoofing_findings, pcap_findings, output_path)
Aggregates all findings into a JSON report with severity breakdown and full device/GATT data.
Threat Detection Coverage
| Threat | Detection Method | Finding ID |
|---|---|---|
| Insecure GATT Permissions | GATT enumeration, property analysis | BLE-GATT-001/002/003 |
| Replay Attack | Payload write + re-write + state comparison | BLE-REPLAY-001 |
| Device Spoofing | Multi-address name monitoring | BLE-SPOOF-001/002/003 |
| Just Works Pairing | PCAP SMP opcode analysis | BLE-PAIR-001 |
| Legacy Pairing (No SC) | PCAP auth_req flag analysis | BLE-PAIR-002 |
| Weak Encryption | crackle LTK recovery | BLE-CRACK-001 |
| Connection Flooding | PCAP connection event counting | BLE-PCAP-002 |