土法炼钢兴趣小组的算法知识备份

【零信任安全架构】持续验证 vs 一次性认证:信号流、会话风险和策略降级

文章导航

分类入口
architecturesecurity
标签入口
#continuous-verification#caep#shared-signals#session-revocation#step-up-auth#risk-based-auth#zero-trust

目录

传统认证模型的时序是:登录时验证一次 → 签发一个数小时有效的 Session → 期间不再验证。零信任把这个模型变成了:信任分数随时间动态变化,会话可能在任何时刻被降级或撤销。

前置阅读:设备姿态与远程证明

一、一次性认证的四个不可能假设

传统模型隐含四个假设,每个都在现代威胁面前不成立:

假设 现实
认证时设备合规 → 整个会话期间合规 设备在会话中途感染恶意软件、关闭防火墙、或连接不安全网络
凭据认证时未被泄露 → 整个会话期间未被泄露 凭据在会话中途的 phishing 攻击中被窃取
用户认证时的行为正常 → 会话期间所有操作正常 合法用户的凭证被攻击者使用后,异常行为需要数小时才能被检测到
会话不会超过合理时长 攻击者通过会话劫持(Session Hijacking)无限延长已经被攻破的会话

MGM 度假村 2023 年的攻击就是第三个假设崩塌的实例——攻击者冒充员工重置了 Okta MFA 令牌,此后的所有操作都被系统视为”已认证用户”。

二、三种持续验证模式

模式 机制 安全窗口 性能开销 适用场景
Event-driven 收到风险信号时触发降级/撤销 信号到达之前 极低(平时无额外成本) 设备姿态变化、威胁情报告警
Periodic 定时(1-15 分钟)重新评估设备姿态 评估间隔 低-中 大多数 Web 应用
Request-granular 每个请求携带短有效期凭据 凭据有效期 高敏感 API、mTLS 证书

2.1 Event-driven 模式

Event-driven 持续验证是最”零信任原生”的模式:系统不在固定时间点重新评估,而是订阅风险信号事件(如设备不合规、密码被修改、用户被从组中移除),当事件到达时立即触发对应会话的降级或撤销。

这个模式的协议层实现是 OpenID Shared Signals Framework (SSF)Continuous Access Evaluation Profile (CAEP)——目前仍处于草案阶段(CAEP 1.0 draft-05)。

CAEP 定义的事件类型:

事件类型 含义 触发动作
session-revoked 会话已被 IdP 撤销 撤销所有依赖该会话的令牌
credential-change 凭据创建/修改/撤销 降级或撤销会话,要求重新认证
device-compliance-change 设备合规状态变化 根据新合规状态调整访问权限
assurance-level-change 认证保证等级变化 限制对高敏感资源的访问
risk-level-change 抽象风险等级变化 触发 Step-up auth 或降级

CAEP 基于 RFC 8417(Security Event Token, SET)——SET 是一个 JWT 格式的事件载荷,包含事件类型、主体标识符(iss_sub)、事件时间戳和事件特定的属性。

SET 的交付机制有两种(RFC 8935 推 / RFC 8936 拉):

推模式 (RFC 8935):
IdP/Transmitter → HTTP POST → Client/Receiver
                   ↓
              POST /events
              Body: {"events": {"https://schemas.openid.net/secevent/caep/event-type/device-compliance-change": {...}}}

拉模式 (RFC 8936):
Client/Receiver → HTTP GET → IdP/Transmitter
                             ↓
                        返回未送达的事件列表

目前 CAEP 的主要采纳者是 Microsoft(Azure AD Continuous Access Evaluation)、Okta 和 Google——但它们之间的互操作(跨厂商的 CAEP 事件传递)仍在早期阶段。Shared Signals 工作组的重大成果是定义了标准化的 Subject Identifiers(RFC 9493)——不同系统之间用相同的格式识别同一个用户/设备。

2.2 Periodic 模式

Periodic(周期性)持续验证是当前最主流的折中——它不需要复杂的事件基础设施,而是在固定的时间间隔重新查询设备状态。

周期长度是一个工程权衡: - 1 分钟:接近实时,但策略引擎和信号源的查询负载很高 - 5 分钟:当前主流选择——JWT 常见有效期(5 分钟)匹配评估周期 - 15 分钟:Google BeyondCorp 使用的间隔——足够应对大多数风险场景,同时保持较低的负载

Periodic 模式的一个工程挑战是时钟同步——如果 10000 台设备都在每分钟的第 0 秒触发重新评估,策略引擎会在那一刻承受全部的负载。实践中的做法是为每台设备分配一个随机的评估偏移量(stagger),把负载平滑到整个周期内。

2.3 Request-granular 模式(短有效期凭据)

证书有效期设为极短(如 1 小时或 5 分钟),每次证书续期时必须重新走完整的姿态检查。SPIRE 的默认 SVID TTL 就是 1 小时——这本质上就是一种 request-granular 的持续验证,以证书生命周期为原子单位。

但短有效期证书不等于真正的”每一个请求都验证”——证书在有效期内的所有请求都被视为”已认证”。Google 的做法是将访问代理的 Session Cookie 有效期设为短于 JWT 证书有效期——用户在操作过程中如果设备姿态变化,访问代理在下一个请求的 Cookie 验证中就能发现。

三、会话降级的工程机制

当信任分数从高降到低,系统不能简单地”关掉所有连接”——那会导致用户的工作被中断。降级有三种策略:

3.1 权限衰减(Authorization Attenuation)

用户的 Session 仍然有效,但访问的权限被缩减。原先可以访问生产数据库,降级后只能访问开发数据库。原先可以 POST/PUT/DELETE,降级后只能 GET。

实现方式:JWT 中编码的 scopepermissions 在续期时按新策略重新签发。旧的 JWT 仍然有效但不包含危险操作——因为这些操作在策略引擎中被拒绝。

3.2 Step-up 认证

当分数下降但尚未到需要完全撤销的程度时,要求用户完成额外的认证因素以恢复分数。例如: - 设备补丁落后 → 用户登录后看到”因为你的设备需要更新,访问此资源之前需要输入 FIDO2 安全密钥” - IP 地址变化 → “检测到你的位置变化,请输入手机验证码” - 非工作时间访问高敏感资源 → 同样触发 Step-up

Step-up 认证对用户体验的影响大——如果过于频繁触发,用户会产生”安全疲劳”,开始寻找绕过方法。

3.3 会话撤销(Session Revocation)

当信任分数降到阈值以下——设备被报告为被盗、用户密码被重置、IdP 发出 session-revoked 事件——PDP 通知所有 PEP 撤销该用户的全部活跃会话。

实现方式:JWT 无法被”撤销”(因为它是自包含的),所以撤销的实现依赖于: - JWT 短有效期(5-15 分钟)限制泄露窗口 - Token Introspection(RFC 7662)——资源服务器在每次请求中向 IdP 查询 token 是否仍有效 - 引用型令牌(Reference Token)——不发放 JWT,发放不透明标识符,资源服务器每次都查 IdP

引用型令牌给出了最强的撤销保证(即时生效),但引入了每次请求的额外网络延迟。这是安全性和性能之间的典型零和博弈。

四、信号源的不对等性

持续验证依赖的四种信号源的更新频率和可靠性完全不同:

信号源 更新频率 延迟 可靠性 可伪造性
设备姿态(TPM/osquery/MDM) 分钟级 信号采集窗口 高(TPM 硬件级) 低(需攻破 TPM 或 osquery)
网络位置(IP/GeoIP) 每次请求 即时 中(VPN 可能误判) 中(Tor/VPN/代理)
用户行为基线 天级 基线构建延迟 中(需要大量数据) 中(模仿行为模式)
时间上下文 每次请求 即时 极低

这些信号的不对等性意味着持续验证不能”等所有信号就绪后再做决策”——因为用户行为基线可能还没算出来。实际工程中,持续验证策略是分层级的:

五、与 IAM 会话管理的衔接

本站 Session、Refresh Token 与吊销体系 讨论的是”令牌本身的生命周期管理”。持续验证是在这个基础上的叠加——它不仅关心”令牌是否过期”,还关心”令牌的有效性是否应该因为外部信号变化而被提前终止”。

具体衔接: - Refresh Token Rotation(每用一次 Refresh Token 就签发新的 Refresh Token)与持续验证结合:在刷新时重新评估风险分数 - Token Introspection 端点在持续验证中可以整合设备姿态检查——不仅返回 active: true/false,还返回 risk_levelallowed_scopes - Session 吊销事件(session-revoked)通过 CAEP 事件传播到所有依赖该 Session 的资源服务器


下一篇:零信任策略引擎:OPA/Rego 与 Cedar 在 ZT 中的落地

参考资料

  1. OpenID Foundation. Shared Signals Framework 1.0. https://openid.net/specs/openid-sharedsignals-framework-1_0.html
  2. OpenID Foundation. Continuous Access Evaluation Profile 1.0 (draft 05). https://openid.net/specs/openid-caep-1_0-05.html
  3. IETF. Security Event Token (SET). RFC 8417.
  4. IETF. Push-Based SET Delivery Using HTTP. RFC 8935.
  5. IETF. Subject Identifiers for Security Event Tokens. RFC 9493.
  6. IETF. Token Introspection. RFC 7662.

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-06-16 · architecture / security

【身份与访问控制工程】风险感知认证:设备信任、异常登录与挑战升级

MFA 是固定策略——启用后每个人每次登录都要输入验证码。风险感知认证(Adaptive/Risk-based Authentication)让认证强度随风险动态调整:从新设备、新位置触发额外验证,到持续的行为分析和会话风险评估。本文拆解风险引擎的信号模型、设备指纹的实现选型、挑战升级的 UX 设计,以及硅谷大厂的实践对比。

2026-06-12 · architecture / security

零信任安全架构深度系列

零信任是 IAM 的自然延伸——当身份变成新边界,VPN 的'拨入即信任'模型必须被'永不信任、始终验证'取代。本系列从 NIST SP 800-207 规范、Google BeyondCorp 六篇论文、SPIFFE/SPIRE 联邦到微分段、持续验证、ZTNA 和零信任迁移的工程策略,系统拆解零信任的每一种组件和每一步实施。

2026-06-13 · architecture / security

【身份与访问控制工程】IAM 全景:为什么这是高价值赛道

从 2020 年 SolarWinds 到 2024 年 Okta 支持系统泄露,身份基础设施的安全失败反复证明一件事:IAM 不是 IT 支撑系统,而是安全架构的承重墙。本文建立现代 IAM 的全景地图——从认证协议、令牌体系、权限模型到身份治理与平台选型,给出 5 个贯穿全系列的核心问题。

2026-06-17 · architecture / security

【身份与访问控制工程】服务身份:mTLS、SPIFFE/SPIRE 与 Workload Identity

前 9 篇讨论的都是'人'的身份——用户怎么登录、怎么验证。但微服务世界中,80% 的 API 调用是服务之间的。服务身份(Workload Identity)是整个 IAM 体系的另一半:mTLS 解决'传输层你是谁',SPIFFE/SPIRE 解决'在平台层你是谁且怎么证明',JWT Profile for OAuth 解决'我怎么拿到一个服务身份的 Token'。本文从这三条线拆解服务身份的工程实现。


By .