您的登录是通过还是失败?理解风险
很少有人意识到,对于IT安全而言,身份验证应该提供比"通过或失败"的裁决更多的信息。我们使用的术语——登录、登入、身份验证、验证——将这个过程框定为一个以裁决结束的决定。但仅凭裁决并不能保护任何东西。
端点现实:身份验证必须解锁
考虑您的端点——您用于工作和访问互联网及网络资源的设备(PC或手机)。一个安全的设计必须解决几个基本问题:
- 设备的数据必须受到保护(安全加密)。攻击者可能拥有端点,并尝试读取磁盘上的原始数据——如果设备开机,甚至可能读取内存中的数据。
- 加密密钥在用户登录前必须不可用。将密钥隐藏在"只有研发知道的地方"是隐蔽性,而不是安全性。
因此,对于端点和"静态数据",登录/身份验证必须提供一个端点登录前没有的秘密——一个密钥。
对于端点,我们称之为解锁。登录时恢复的密钥通常不是数据加密密钥本身;相反,它可能解锁一个密钥文件,该文件解锁密钥加密密钥(KEKs),依此类推——最终到达磁盘扇区加密密钥。重要的部分是转换:没有密钥,无法使用。
在线现实:身份验证必须启用
解锁不适用于在线身份验证,因为服务器在登录时完全运行。理论上,登录可以解锁服务器上的用户数据,但这并不常见。此外,保护在线数据——会话或交易——的密钥通常是(并且正确地是)新的,而不是现有的密钥。
问题在于:与静态数据不同,在线身份验证必须产生密钥的概念远未被广泛认识。大多数熟悉的在线用户身份验证方法——推送批准、OTP代码,甚至FIDO——都不包括为后续操作设置加密密钥的步骤。TLS确实创建密钥,但TLS不是用户的登录;它发生在之前,不是我们讨论的用户身份验证。
当身份验证停止在裁决时,就会出现一个缺口:我们决定用户是谁,但我们没有让这个决定产生保护后续交换的密钥。攻击者利用这个缺口,例如通过中间人(AiTM) 活动,将用户的登录中继到真实站点,然后在身份验证步骤之外已经建立的连接上继续交换。¹
修复方法简单明了:
在线环境中,身份验证行为必须产生保护后续内容的加密密钥。
不仅仅是裁决。一个密钥——作为身份验证的输出。
关于先例的简要说明
现实世界已经承认身份验证应该产生一个秘密。使用FIDO2安全密钥的Windows登录/解锁依赖于FIDO扩展(hmac-secret),以便身份验证仪式产生一个可供Windows登录使用的秘密——包括机器不在线的情况。微软记录了Windows的FIDO2密钥登录,在其WebAuthn平台API中公开了hmac-secret,供应商将hmac-secret精确描述为获取加密/解密操作秘密的一种方式。2, 3, 4
关键点不是扩展本身;而是它所服务的原则:身份验证应该产生密钥。
最佳解决方案是最简单的——但不要过于简单
更简单但不足:进行身份验证而不设置密钥更简单——但不足。它在身份和保护之间留下了一个缺口,攻击者会利用这个缺口。¹
原则优先:让身份验证产生密钥比修补更简单。它将"您是谁"与"保护交换的内容"统一在一个步骤中。
不是(过度)最简单:围绕仅裁决模型构建层层加固并不是爱因斯坦意义上的"最简单"——它仍然可以被位于用户和服务器之间的攻击者绕过。¹
一个规则,两个领域:
- 端点:身份验证 → 解锁(恢复现有密钥)。
- 在线:身份验证 → 启用(为交换创建密钥)。
如果密钥不是来自身份验证,那么它不是安全——只是仪式。
参考文献
-
Microsoft安全博客——中间人活动及其影响。 https://www.microsoft.com/en-us/security/blog/2023/06/08/detecting-and-mitigating-a-multi-stage-aitm-phishing-and-bec-campaign/
-
Microsoft Learn——使用FIDO2安全密钥登录Windows(Windows如何支持密钥登录)。 https://learn.microsoft.com/en-us/entra/identity/authentication/howto-authentication-passwordless-security-key-windows
-
Microsoft Win32 WebAuthn API——HMAC-Secret结构/常量(平台支持)。 https://learn.microsoft.com/en-us/windows/win32/api/webauthn/ns-webauthn-webauthn_hmac_secret_salt https://learn.microsoft.com/en-us/windows/win32/webauthn/webauthn-constants
-
Yubico——FIDO2 hmac-secret解释(目的和用法)。 https://docs.yubico.com/yesdk/users-manual/application-fido2/hmac-secret.html