Fieldwatch配对洪泛告警原理揭秘PairingFlood如何在几秒内识破大规模蓝牙伪装广播【免费下载链接】FieldwatchReceive-only Wi-Fi and Bluetooth LE observer for Android. MIT.项目地址: https://gitcode.com/gh_mirrors/fi/FieldwatchFieldwatch 是一款运行在 Android 上的只收型 Wi-Fi 与蓝牙 LE 观察者工具它的核心安全功能之一就是用 PairingFlood 配对洪泛检测器在几秒内识别出单个设备疯狂换地址、伪造海量配对广播的大规模蓝牙伪装行为。这篇文章带你看懂它的判定逻辑。先搞懂威胁什么叫配对洪泛蓝牙广播里有一类配对请求广告pairing advertisement正常场景下你在店里看到几台待售耳机、手表在喊快来配对我这很正常。但攻击者可以拿一台手持设备如 Flipper Zero或跑着 Marauder / Bruce 的 ESP32每个广播包换一个随机蓝牙地址同时发出配对广播几秒内就能在你的手机屏幕上刷出一大片新设备。源码注释说得很直白A burst of new Bluetooth addresses in a few seconds. A handheld can do this by advertising a pairing request or a new name and changing the address every packet. ——PairingFlood.kt 注释关键点是广播内容本身不会自报家门The advertisement does not name the tool所以 Fieldwatch 不用查证件而是用行为统计来抓人。原理一10秒滑动窗口只数新面孔PairingFlood 的核心是一个约10 秒的滑动窗口WINDOW_MS 10_000只数新地址每个 MAC 地址在整个窗口里只被计一次同一地址重复广播不算数macs 集合去重地址出了窗口就过期每来一个新地址或每次 tick就把 10 秒前的记录清掉evict双计数器 | 计数器 | 阈值 | 含义 | |---|---|---| | 配对广播popup |≥ 10个新地址 | 10 秒内 10 个不同地址发配对广告 → Pairing flood | | 纯改名name |≥ 15个新地址 | 随机地址 只带名字广播 → Name flood |阈值定义在 companion object。也就是说识破发生在一个 10 秒窗口内的瞬间计数而不是等一段时间慢慢攒。数据入口在扫描服务每批 BLE 观测入库后只有首次被看到的地址hitCount 1才会喂给检测器见 ScanService.kt。原理二六大配对家族识别——只有真配对才算 popup不是所有广播都算配对洪泛。classify() 会解析厂商广告数据命中以下任一家族才计入 popup 计数器家族识别特征Apple 邻近配对公司 ID 0x004CContinuity TLV 类型 0x07Apple Nearby Action0x004CTLV 类型 0x0FGoogle Fast PairFE2C 服务数据 3 字节型号 ID配对模式长载荷的账号密钥广播不算见 FastPair.ktSwift Pair0x0006Nearby Sharing 场景 0x01 或特定 Swift Pair 信标Samsung Easy Setup0x0075耳机或手表的固定前缀LoveSpouse0x00FF 固定 8 字节前缀这些家族共享一个计数器——10 个 Apple 3 个 Fast Pair 一样触发。而 Apple 的附近信息/查找0x10/0x12、SmartTag 之类的载荷会被明确排除。单元测试覆盖了这些边界如 PairingFloodTest.kt。原理三RSSI 中位数带宽挡住分散的群众商场里确实可能同时存在 15 台待售耳机——它们会触发吗不会。因为 band() 做了一道信号强度过滤取窗口内所有候选地址的 RSSI信号强度中位数只保留与中位数相差±12 dBm以内的地址RSSI_BAND_DB 12过滤后数量仍 ≥ 10 才告警。逻辑很朴素一台手持设备刷出来的地址信号强度几乎一样而散落在店铺各处的真设备信号强弱差异巨大会被带宽过滤拆散。测试 spreadOutRadiosDoNotTrip 专门验证了10 台强弱各异的设备不触发而 aWeakPairingClusterStillOpens 验证了再弱的聚集信号也会触发。触发之后弹窗、留痕、可隐藏跨过阈值的那一刻PairingFlood 会弹出 Notice 对话框标题 Pairing flood一行摘要如Pairing flood · 10 new addresses · about -48 dBmNotice.line()正文还会列出命中的家族给出两个选项Continue保留在 Live 视图约 15 分钟或Hide these把这一波burst及其后续从 Live 视图隐藏但日志仍保留见 body()记录 FloodBurst时间戳、数量、家族、中位 RSSI、涉及的地址全部存档FloodBurst之后会写进 sit 报告的 Debrief 里形成可回溯的证据链。姊妹机制Wi-Fi Beacon Flood蓝牙的思路被原样搬到了 Wi-FiWifiBeaconFlood 检测单次完整扫描中出现 ≥ 15 个全新网络名、信号强度相近±6 dBm、下一轮扫描就消失的模式——这正是 Flipper Zero 或 ESP32 刷 SSID 的典型特征。重复出现的名、mesh、信号扩展器和 guest 后缀-5ghz / -ext 等都会被归一化排除。小结行为统计胜过特征库设计作用10 秒窗口 只数新地址抓住瞬时爆发忽略常态广播六大配对家族白名单只认真配对排除查找类/标签类噪声RSSI 中位数 ±12 dBm 带宽排除物理分散的正常设备群FloodBurst 落档 15 分钟策略告警后可隐藏、可回溯、不刷屏Fieldwatch 没有依赖任何设备特征库或云端纯靠新地址 × 时间 × 信号形态三个维度就实现了对伪装广播的秒级识别。想深入了解每个阈值的边界行为可以通读单元测试 PairingFloodTest.kt安装与使用说明见 Fieldwatch_User_Manual.pdf。【免费下载链接】FieldwatchReceive-only Wi-Fi and Bluetooth LE observer for Android. MIT.项目地址: https://gitcode.com/gh_mirrors/fi/Fieldwatch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?