通过Scheme Flooding达成的本地安装软件痕迹探测浅析
字数 1869 2025-08-06 18:07:40

Scheme Flooding技术深度分析与防御指南

1. 技术概述

Scheme Flooding(方案泛洪)是一种利用浏览器自定义Scheme协议特性进行本地软件痕迹探测的技术。严格来说,这不是一个传统意义上的"漏洞",而是对Scheme特性的一种非常规利用方式。

1.1 技术效果

  • 批量探测本地安装软件:通过特定技术手段可以批量检测用户设备上安装的软件
  • 高准确率:对有特征的软件探测准确率很高
  • 残留检测:即使软件已卸载但未清除Scheme注册信息,仍可被检测到

2. 技术原理

2.1 Scheme协议基础

Scheme是一种页面内跳转协议,主要用于:

  1. 通过小程序打开原生App
  2. H5页面锚点跳转App特定页面
  3. 处理PUSH通知栏消息跳转
  4. App间URL跳转
  5. 短信URL打开App

2.2 核心检测机制

检测流程:

  1. 创建一个隐藏的小窗口
  2. 遍历预定义的Scheme列表
  3. 尝试通过每个Scheme协议启动对应应用
  4. 根据响应判断应用是否存在

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 关键点说明

  1. 窗口创建:使用window.open创建小尺寸隐藏窗口
  2. 输入元素:创建隐藏的input元素用于检测焦点变化
  3. Scheme触发:通过修改窗口location触发Scheme协议
  4. 检测逻辑:如果Scheme有效触发应用启动,input无法获得焦点

4. 获取应用Scheme特征的方法

以百度网盘为例:

  1. 在火狐浏览器中访问百度网盘资源
  2. 点击下载按钮
  3. 观察浏览器提示的协议名称(如baiduyunguanjia)
  4. 此协议名称即为该应用的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 用户端防御

  1. 浏览器设置

    • 禁用不必要的自定义协议处理程序
    • 使用隐私模式浏览敏感网站
  2. 系统层面

    • 定期清理无用的协议注册信息
    • 使用安全软件监控异常协议调用
  3. 行为防御

    • 避免在检测过程中进行其他操作,防止检测中断导致误判
    • 注意浏览器弹出的小窗口行为

6.2 开发者防御

  1. 应用卸载时

    • 彻底清理注册的Scheme协议信息
  2. 应用设计

    • 避免使用过于简单的Scheme名称
    • 实现Scheme调用的二次确认机制

7. 扩展研究

7.1 CORS绕过技术

原始资料提到存在通过CORS绕过浏览器限制的方法,但未详细说明。推测可能涉及:

  1. 利用跨域资源共享机制绕过浏览器安全策略
  2. 结合iframe和postMessage进行跨域通信
  3. 利用Service Worker等现代Web API增强检测能力

7.2 红蓝对抗中的应用

在安全测试中,此技术可用于:

  1. 内网资产探测
  2. 终端安全审计
  3. 用户画像构建
  4. 攻击面评估

8. 参考资源

  1. Exploiting custom protocol handlers for cross-browser tracking - Fingerprint
  2. Scheme协议详细介绍 - 杨充
  3. schemeflood - drivertom
  4. external-protocol-flooding - fingerprintjs

9. 总结

Scheme Flooding技术展示了Web与本地应用交互中存在的隐私风险。虽然这不是传统意义上的安全漏洞,但确实可能被滥用于用户指纹收集和隐私侵犯。理解其原理有助于更好地防御此类技术,同时也能在合法安全测试中加以应用。

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 基础实现代码 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与本地应用交互中存在的隐私风险。虽然这不是传统意义上的安全漏洞,但确实可能被滥用于用户指纹收集和隐私侵犯。理解其原理有助于更好地防御此类技术,同时也能在合法安全测试中加以应用。