上周,一位研究人员描述了他所称的通行密钥(passkey)中存在的"新型攻击面"。通行密钥是一种新兴身份验证方式,被视为比传统密码更安全的替代方案。然而,该文章中演示的攻击手法既非全新,也并非通行密钥所独有的漏洞。厘清这一点至关重要,因为相关研究已在普通用户和安全专业人员之间引发混乱,令他们难以判断这种新机制是否真的安全可靠。
这一攻击手法被命名为"Pass-ta-key"——由"passkey"(通行密钥)与"pass the key"(传递密钥)两个词组合而成,同时也是对意大利面(pasta)的一个双关致意。来自安全公司Palo Alto Networks的研究员阿里·奥尔什泰因(Arie Olshtein)在上周发布的一篇文章中描述了Pass-ta-key如何在感染了恶意软件的Windows机器上,提取谷歌密码管理器(GPM)应用中存储的所有通行密钥。
这一发现令许多人感到意外,因为他们此前认为通行密钥只会存储在可信平台模块(TPM)中。TPM是Windows设备中专用硬化芯片内的封闭区域,专门用于存储加密密钥及其他高度敏感的信息。既然通行密钥存储于TPM,Pass-ta-key又是如何提取出应用中存储的全部通行密钥的?许多人对此百思不得其解。
事实上,与普遍认知相悖,由行业组织FIDO联盟管理的FIDO 2规范并未强制要求将通行密钥保存在TPM或任何其他专用硬件中(这类硬件在不同平台上有不同名称,包括安全飞地、可信执行环境和StrongBox等)。实际上,大多数平台及第三方通行密钥管理软件均未将通行密钥存储于此类专用硬件。几乎唯一的例外是微软——该公司为用户提供了将通行密钥存储在Windows TPM中的选项,但主要面向企业用户推荐,而非普通消费者。
直到我为本文展开调查研究之前,我并不知晓:除Windows以外,所有平台均将通行密钥以本地形式存储在设备上。这一转变发生在几年前。当时,操作系统和第三方应用开发者意识到,除非通行密钥能够方便地同步到用户的所有设备,否则它几乎不可能得到广泛采用。而强制使用TPM存储会让同步变得不可能——要将通行密钥加载到新设备的TPM中,唯一的方式就是逐一重新创建每一个密钥。
最终,FIDO规范的架构师认为,将通行密钥存储在设备本地总体上是安全的。他们的逻辑是:应用权限的颗粒度足够细,设备上潜伏的恶意软件无法访问构成通行密钥安全核心的私钥。例如,在运行macOS、iOS和Android的设备上安装的恶意软件,除非操作系统本身遭到某种高级零日漏洞的攻破,否则无法突破这种隔离机制。迄今为止,上述假设在实际应用中已被证明是成立的。
唯一的例外依然是Windows。与其他所有平台不同,Windows应用程序通常以用户的全部权限运行,而其他平台默认鼓励对每个应用程序的权限进行限制。尽管Windows提供了一定的沙盒保护机制以实现应用隔离,但它无法阻止未经沙盒处理的应用(如恶意软件)访问沙盒应用的数据。也就是说,沙盒只能提供单向保护。相比之下,其他平台的沙盒技术防护能力要强得多。
这意味着,Windows上的恶意软件访问其他应用数据时遇到的障碍要少得多。通行密钥架构师对这一差异早有清醒认识,而这在很大程度上是Windows向后兼容性的历史遗留问题。由于无法保证存储在Windows设备上的通行密钥不会在遭遇恶意软件感染时被窃取,许多第三方开发者选择了一种新的设计思路——将通行密钥以端到端加密的形式存储在云端。如今,这种服务器端存储通行密钥的设计不仅被GPM for Windows采用,也被1Password、Dashlane以及其他面向微软操作系统的第三方应用所采纳。
Q&A
Q1:通行密钥(passkey)是否都存储在TPM安全芯片中?
A:并非如此。FIDO 2规范并未强制要求将通行密钥存储在TPM或其他专用硬件中。目前除微软为Windows用户提供TPM存储选项外,其他平台(如macOS、iOS、Android)均将通行密钥存储在设备本地。部分第三方应用(如谷歌密码管理器、1Password、Dashlane)在Windows上则将通行密钥以端到端加密形式存储于云端。
Q2:Pass-ta-key攻击是怎么实现的?危险吗?
A:Pass-ta-key攻击由Palo Alto Networks研究员发现,能够在Windows感染恶意软件的情况下,提取谷歌密码管理器中存储的全部通行密钥。其根本原因在于Windows应用默认以用户全部权限运行,沙盒隔离机制较弱,导致恶意软件可访问其他应用数据。但在macOS、iOS、Android等平台上,此类攻击几乎无法实现,因为应用权限隔离更严格。
Q3:为什么通行密钥需要存储在云端而不是本地设备?
A:早期通行密钥要求存储在设备本地甚至TPM中,但这导致跨设备同步极为困难——用户换设备后需逐一重新创建密钥。为推动通行密钥普及,开发者转而将其存储在云端,采用端到端加密保障安全性,从而实现跨设备便捷同步。目前谷歌密码管理器、1Password等主流应用均已采用这一方案。
