浏览器安全界面解析:从状态气泡到地址栏的设计挑战

本文深入探讨了浏览器中“安全界面”的概念及其重要性,解析了为何某些UI组件(如地址栏)是关键安全决策点,而另一些(如状态气泡)则不是。文章通过具体案例,包括Chrome的安全表面文档和Windows LNK文件检查,阐述了安全界面的设计挑战与潜在风险。

Security Surfaces – text/plain

安全界面

在“可用安全性”领域中,一个重要概念是判断某个特定用户界面是否代表一个“安全界面”。从形式上讲,安全界面是指用户界面中向用户呈现信息、并依赖这些信息做出安全决策的组件。例如,在浏览器中,地址栏中的URL就是一个安全界面。关键在于,安全界面中的欺骗性问题通常代表着一个安全漏洞。

同样重要的是,并非所有的用户界面表面都是安全界面。总有许多其他界面表面可能呈现类似信息,但它们不是(也不可能是)安全界面。

不幸的是,识别哪些表面是安全界面、哪些不是,同时具有以下特点:

  • 至关重要 – 如果你认为一个不可靠的表面是可信的,你可能会遭受损失。
  • 反直觉 – 通常没有任何迹象表明一个表面是不可靠的。

八年前,Chromium编写了一份文档,列出了Chrome浏览器的安全界面。但几乎没有人见过它。

非安全界面

也许最著名的非安全界面是显示在浏览器窗口左下角的“状态气泡”,其设计目的是向用户显示给定链接将跳转至何处:

Chromium“状态气泡”

这个用户界面不能成为安全界面的原因有很多。 主要问题在于它位于“死亡线”以下,处于页面的一个视觉区域,攻击者可以控制该区域并绘制任何他们想要的内容。“死亡线”是许多用户界面不能被视作安全界面的一个重要原因——如果攻击者能够控制用户看到的内容,那么这个用户界面就不可能是“安全的”。

但即使没有这个“死亡线”问题,也存在其他漏洞:最明显的是,JavaScript可以在导航开始时取消它,或者在用户点击链接时重写链接的目标。或者,链接可能指向一个重定向站点(例如 bit.ly)而不是最终目的地。等等。

具有挑战性的安全界面:URL地址栏

也许现存最复杂的安全界面是浏览器的地址栏,在基于Chromium的浏览器中被称为“Omnibox”。

现代Edge浏览器中的“Omnibox”

“Omnibox”这个名称反映了它为何是一个如此棘手的安 全界面:因为它试图实现多种功能。它试图成为一个安全界面,显示当前加载页面的安全上下文(例如 https://example.com);同时,它又试图成为一个信息界面,显示页面的完整URL(例如 https://example.com/folder/page.html?query=a#fragment);此外,它还是一个输入界面,允许用户输入新的URL或搜索查询。只有URL信息的某些部分与安全相关,而URL的其余部分可能被用来混淆用户对安全相关部分的理解。

让事情更加复杂的是,Omnibox还必须处理异步性——当用户正处于导航过程中,用户输入的URL尚未加载,而当前URL也尚未卸载时,应该在地址栏中显示什么?

Windows LNK 文件检查

今年早些时候,一份安全漏洞报告被提交,抱怨如果.lnk文件的目标路径长度超过260个字符,Windows文件资源管理器将无法显示其完整目标。

Windows 文件资源管理器的 .lnk 属性对话框

报告者抱怨说,如果用户界面中没有准确的信息,用户就无法知道一个LNK文件是否安全。 这确实如此,但同样,用户并非在这个对话框中做出安全决策;要求用户做出安全决策的界面甚至根本不显示目标:

当从互联网区域打开LNK文件时显示的Windows安全警告提示

即使用户(极不可能地)使用了资源管理器的LNK检查界面,也极少有用户能真正根据其中的信息做出安全的判断。最终,安全警告提示中的指导是正确的建议:“如果您不信任此来源,请勿打开。”

Windows团队今年早些时候最终修复了显示截断的问题,但并不是作为安全修复,只是Windows 11 24H2+的一项通用质量改进。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计