隐形窗口研究
这篇 13 页的 IEEE 格式论文记录了 WebRTC 在线监考的结构性缺陷。Windows 的 SetWindowDisplayAffinity 和 macOS 的 NSWindow.SharingType.none 都是有文档支持的 API,可将窗口排除在测试的捕获路径之外,同时保持它在物理屏幕上可见。这挑战了基于捕获的监考系统的信任假设。概念验证在测试的 Windows 和 macOS 实验室配置中达到 100% 规避,包括此前被认为已缓解该问题的 macOS 26。配置为模拟环境,并非商业监考产品;macOS 26 使用原生 CGWindowListCreateImage 和 screencapture,而非浏览器 getDisplayMedia(),Linux 未测试。结果反映截至 2026 年 3 月的测试软件版本,后续补丁可能改变行为。
01 / 概览
捕获可观测性
屏幕上显示的内容可能与捕获帧不同
选择一个平台,查看研究所述的窗口亲和设置和捕获范围。两个面板始终并列,便于比较。
示意图 · 非录制截图或像素测量物理显示器
窗口对显示器前的人仍然可见。
捕获帧
Windows 捕获路径文档所述设置与已测试的捕获范围
Windows · SetWindowDisplayAffinity / WDA_EXCLUDEFROMCAPTURE
研究报告称,在遵循此设置的已测试 Windows 10/11 捕获路径中,窗口会被排除。
研究范围与限制
- 测试对象是 Windows 10/11 实验室配置;这不代表所有浏览器或商业监考产品的行为。
- macOS 26 测试使用 CGWindowListCreateImage 和 screencapture;未在 macOS 26 上测试浏览器 getDisplayMedia() 或直接测试 ScreenCaptureKit。
- 评估使用模拟配置,而非商业监考产品。
- 未测试 Linux。结论描述截至 2026 年 3 月测试的软件版本,后续补丁可能改变行为。
图示解释文档记录的显示与捕获边界;面板不展示测量或录制输出。
问题
远程监考通过 WebRTC getDisplayMedia() 捕获考生屏幕以识别违禁内容,隐含假设是捕获帧忠实反映物理屏幕。研究展示了该假设中的缺口:有文档支持的系统显示 API 无需提权或修改内核,就能将窗口排除在测试的捕获路径之外。结论只针对受控、模拟的 Windows 和 macOS 配置,不证明可以绕过所有浏览器或商业监考产品。
解决方案概述
- 形式化分析 W3C 屏幕捕获 API 与系统图像合成管线之间的信任边界破坏。
- 研究 Win32 SetWindowDisplayAffinity 和 macOS NSWindow.SharingType.none;两者均载于官方 SDK 文档。
- 使用 Win32 C 和 Swift 构建概念验证,演示完整的屏幕捕获规避。
- 在受控实验室中,用 Windows 10/11 和 macOS 14–26 评估模拟监考配置;未测试商业产品,macOS 26 使用原生捕获而非浏览器 getDisplayMedia()。
- 分析视线跟踪、鼠标行为和进程枚举等检测方法的能力与局限。
- 提出并评估五项对策,从可部署的标志枚举到长期的硬件证明。
- 协调系统厂商披露:Microsoft MSRC(2026 年 2 月 通知,2026 年 4 月 分类)与 Apple Product Security(2026 年 3 月 通知并分类)均给出正式分类。
02 / 证据
证明与验证
- Windows 10/11 和 macOS 14–26 上规避率为 100%,每种配置测量超过 10,000 帧。
- 捕获帧中未发现视觉伪影,包括黑色矩形、合成错误或闪烁。
- 尽管 macOS 15 中有文档记录的 ScreenCaptureKit 变更,macOS 26.3.1 测试的原生捕获路径仍可排除窗口;macOS 26 未直接测试 ScreenCaptureKit 或浏览器 getDisplayMedia()。
- Linux(X11/Wayland)未评估;结果只适用于测试的 Windows 和 macOS 配置。
- 在此样本量下,行为检测未呈现显著效果:视线跟踪 p = 0.41、n = 8,统计效能不足;鼠标行为也在正常考试变异范围内。这不证明行为检测在所有场景中都不可能有效。
- 以 CC BY 4.0 在 Zenodo 发布预印本,DOI 10.5281/zenodo.20376495;IEEE 会议格式,13 页、53 篇参考文献。
研究论文
论文: 1The Invisible Window: Exploiting OS-Level Display Affinity to Bypass WebRTC Proctoring Systems
13 页论文,记录跨平台屏幕捕获规避及与厂商协调披露的过程。
下载论文03 / 方法
构建
技术栈
- Win32 C(Windows 概念验证)
- Swift / AppKit(macOS 概念验证)
- Python(像素级取证验证)
- LaTeX(IEEE 会议模板,13 页、53 篇参考文献)
- Windows 10 v2004+ 的 SetWindowDisplayAffinity + WDA_EXCLUDEFROMCAPTURE 将窗口排除在测试的 Windows 屏幕捕获路径之外,不产生视觉伪影。
- 在 macOS 14–26 测试的原生捕获路径中验证 NSWindow.SharingType.none 的窗口排除;macOS 26 使用 CGWindowListCreateImage 和 screencapture,未使用浏览器 getDisplayMedia() 或直接测试 ScreenCaptureKit。
- 像素级取证:Windows 捕获区域像素差异为 80.27%;macOS 的 1,170,560 像素捕获结果完全透明。
安全
- 发现与验证于 2026 年 1 月 完成。
- 2026 年 2 月 通知 Microsoft MSRC;2026 年 4 月 被归类为设计行为,而非安全漏洞。
- 2026 年 3 月 通知 Apple Product Security;当月被归类为符合文档的功能,而非安全问题。
- 收到系统厂商回复后,于 2026 年 5 月 公开发布。
- 概念验证代码未公开;经验证的安全研究人员可申请获取。
- 仅使用用户级、有文档支持的系统 API;无内核利用或提权。
- 遵循 ACM、IEEE 道德准则及 CISA 协调披露指南。