ARTICLE / 安全
Passkey与无密码认证安全取证深度分析
无密码认证(Passwordless Authentication)正在迅速重塑互联网身份验证的基本范式。FIDO Alliance 的统计数据表明,截至2025年底,全球已有超过30亿台设备支持FIDO2标准,Google、Apple和Microsoft三大平台均已将Passkey作为默认推荐的认证方式。Passkey通过公私钥对替代传统密码,结合设备本地生物识别或PIN码完成认证,从根本上消除了密码泄露、钓鱼攻击和凭据填充等传统认证威胁。
然而,Passkey并非万无一失的安全银弹。攻击面已从密码存储和传输环节转移到设备端密钥管理、跨设备同步链安全、近场通信中继攻击、以及RP(Relying Party)端的WebAuthn实现缺陷等全新领域。2024年以来,针对Passkey的BLE/NFC中继攻击、通过iCloud Keychain同步链注入恶意设备、利用浏览器扩展拦截WebAuthn API调用等攻击手法已相继被安全研究者公开披露。这些新型攻击模式要求蓝队取证分析人员建立全新的分析方法论:从CTAP2二进制协议的解码到Secure Enclave密钥生命周期的追踪,从WebAuthn Challenge-Response时序分析到跨设备同步链完整性的验证。
本文从蓝队取证实战视角出发,系统性地覆盖Passkey与FIDO2无密码认证体系的全链路安全分析——从WebAuthn协议栈的安全审计到CTAP2通信链路的取证分析,从密钥存储硬件安全模块的取证到BLE/NFC中继攻击的检测,从设备同步链完整性的验证到认证日志的重建与异常行为检测,结合Apple/Google/Microsoft三大平台Passkey实现差异与真实安全事件还原完整的取证链。
0x01 技术基础与取证概述
认证技术演进历程
从密码到Passkey,认证技术经历了四个主要阶段的演进。每个阶段在解决前一阶段核心威胁的同时,也引入了新的攻击面和取证挑战。
| 认证阶段 | 核心机制 | 主要威胁 | 取证关注点 | 时间范围 |
|---|---|---|---|---|
| 密码认证 | 用户名+密码 | 撞库、钓鱼、暴力破解 | 密码存储、传输加密、登录日志 | 1960s-2010s |
| MFA多因素认证 | 密码+OTP/SMS/硬件令牌 | SIM Swapping、实时钓鱼代理、MFA疲劳攻击 | OTP日志、设备绑定、推送审批记录 | 2010s-2020s |
| 无密码认证(FIDO2) | 公私钥对+设备本地验证 | 设备丢失、平台认证器绕过 | 密钥注册链、设备信任锚、认证日志 | 2020s- |
| Passkey同步密钥 | 同步的平台认证器密钥对 | 同步链注入、中继攻击、云端密钥泄露 | 同步链验证、设备链完整性、跨平台同步日志 | 2022- |
FIDO2协议栈架构
FIDO2协议栈由两大核心组件构成:W3C WebAuthn(Web Authentication API)和FIDO Alliance CTAP2(Client to Authenticator Protocol)。WebAuthn定义了浏览器与RP服务器之间的认证接口规范,CTAP2定义了客户端(通常是浏览器或操作系统)与认证器(Authenticator)之间的通信协议。
| 协议层 | 标准规范 | 职责范围 | 通信边界 |
|---|---|---|---|
| WebAuthn API | W3C WebAuthn Level 3 | 浏览器JS API与RP Server交互 | Browser ↔ RP Server(HTTPS) |
| CTAP2 | FIDO Alliance CTAP 2.2 | 客户端与认证器通信 | Client ↔ Authenticator(USB/BLE/NFC) |
| CBOR/COSE | RFC 8949 / RFC 8152 | 二进制编码与密码学算法 | 数据序列化层 |
| FIDO Server | FIDO Alliance Server Spec | RP端注册与认证验证逻辑 | Server ↔ RP Database |
Passkey vs FIDO2 Security Key vs Resident Key
Passkey是FIDO2 Resident Key(也称为Discoverable Credential)的一种实现形态,但三者之间存在重要区别。理解这些区别对于正确分析取证数据至关重要。
| 特性 | FIDO2 Security Key | Resident Key | Passkey |
|---|---|---|---|
| 硬件形态 | 独立USB/BLE/NFC设备 | 认证器内部存储 | 设备平台认证器或密码管理器 |
| 密钥存储 | Security Key安全芯片 | 任何支持的认证器 | Secure Enclave / TPM / StrongBox |
| 跨设备同步 | 不支持 | 取决于认证器实现 | 支持(通过iCloud/Google/第三方) |
| Discoverable | 部分支持 | 支持 | 完全支持 |
| 用户验证 | Security Key上的按钮/PIN | 认证器自身的UV方式 | 设备生物识别/PIN |
| RP指定Authenticator | 政策可指定 | 政策可指定 | 通常不限制 |
| 典型用途 | 高安全场景 | 企业SSO | 消费者日常认证 |
| 取证复杂度 | 低(物理设备) | 中 | 高(涉及云同步链) |
Platform Authenticator vs Roaming Authenticator
WebAuthn协议将认证器分为两大类:Platform Authenticator(平台认证器,与宿主设备物理绑定)和Roaming Authenticator(漫游认证器,可跨设备使用)。两者在取证分析中需要关注的数据源截然不同。
| 维度 | Platform Authenticator | Roaming Authenticator |
|---|---|---|
| 物理绑定 | 绑定宿主设备 | 可在多台设备间移动 |
| 通信方式 | 本地API调用(无外部通信) | USB HID / BLE / NFC |
| 典型实现 | Touch ID / Face ID / Windows Hello / Android Biometric | YubiKey / Feitian / Google Titan |
| userVerification | 通常为 internal | 通常为 preferred 或 required |
| 取证数据源 | 操作系统本地日志 | USB/BLE/NFC流量 + 操作系统日志 |
| attestation | platform attestation | indirect 或 direct attestation |
| 攻击面 | 操作系统层面 | 通信链路 + 操作系统层面 |
FIDO2注册与认证流程
理解FIDO2的注册(Registration)和认证(Authentication)流程是取证分析的基础。以下ASCII流程图展示了完整的注册过程(navigator.credentials.create)。
认证过程(navigator.credentials.get)的流程如下:
取证工具链
Passkey安全事件取证需要一套覆盖协议分析、密钥审计、日志聚合和流量捕获的专用工具链。
| 工具名称 | 功能定位 | 适用场景 | 安装方式 |
|---|---|---|---|
| Wireshark | 网络包分析 | CTAP2 BLE/USB流量解码 | brew install wireshark |
| fido2-tools | FIDO2命令行工具 | Security Key管理与测试 | brew install libfido2 |
| py_webauthn | WebAuthn Python库 | RP端认证逻辑测试与验证 | pip install py-webauthn |
| libfido2 | FIDO2 C语言库 | FIDO2协议分析与fuzzing | brew install libfido2 |
| cose | COSE编码解码库 | CBOR/COSE数据结构解析 | pip install cose |
| CBORDiag | CBOR诊断工具 | CBOR数据包分析 | pip install cbor-diag |
| AuthenticatorInfo | 认证器信息查询 | 认证器元数据和功能分析 | fido2-token -L |
| Chrome DevTools | 浏览器调试工具 | WebAuthn API调用监控 | 内置Chrome |
| macOS Unified Log | 系统日志 | Apple Passkey事件分析 | log stream –predicate |
| Windows Event Viewer | 事件查看器 | Windows Hello事件分析 | 内置Windows |
| logcat | Android日志 | Android Passkey事件分析 | Android SDK Platform Tools |
| mitmproxy | HTTPS中间人代理 | RP通信流量拦截 | pip install mitmproxy |
0x02 WebAuthn协议栈安全审计
WebAuthn API 深度解析
WebAuthn API是浏览器暴露给Web应用的JavaScript接口,包含两个核心方法:navigator.credentials.create()(注册)和navigator.credentials.get()(认证)。对这两个API的调用参数和返回值的正确性验证是RP端安全审计的关键。
注册请求参数结构:
认证请求参数结构:
RP服务端验证逻辑审计
RP服务器端的验证逻辑是Passkey安全的关键环节。验证不当将导致认证绕过或凭据伪造。RP端需要验证的核心要素包括:
| 验证环节 | 验证内容 | 常见漏洞 | 安全影响 |
|---|---|---|---|
| Challenge验证 | challenge与会话中存储的一致性 | 未绑定会话、可重用challenge | MITRE ATT&CK T1557 |
| Origin验证 | response.origin与预期域名匹配 | 未验证origin或子域名匹配过宽 | MITRE ATT&CK T1566 |
| RP ID验证 | responserpId与预期一致 | RP ID匹配逻辑缺陷 | 认证绕过 |
| Signature验证 | 使用存储的公钥验证签名 | 未验证或使用不可信公钥 | 签名伪造绕过 |
| Sign Counter | 签名计数器单调递增 | 未检查计数器 | 克隆检测失效 |
| Attestation验证 | Attestation Object有效性 | 跳过attestation验证 | 伪造认证器注册 |
| User Presence | UserVerification标志匹配 | 未检查UV标志 | 降级攻击 |
Challenge-Response安全分析
Challenge-Response机制是WebAuthn安全性的核心。Challenge必须满足以下安全属性,任何违反都应视为取证关注点。
| 安全属性 | 要求 | 取证检查方法 | 违规后果 |
|---|---|---|---|
| 随机性 | 使用密码学安全随机数生成器 | 检查RP源码中challenge生成逻辑 | 可预测的challenge |
| 唯一性 | 每次注册/认证使用唯一challenge | 检查日志中challenge重复使用 | Challenge重放 |
| 绑定性 | Challenge绑定到用户会话和RP ID | 检查会话cookie与challenge的关联 | 跨会话攻击 |
| 时效性 | Challenge在合理时间内过期 | 检查timeout值与实际验证时间差 | 延迟攻击 |
| 长度 | 至少16字节(128位) | 解析认证日志中的challenge长度 | 穷举攻击 |
Attestation Statement验证
Attestation Object包含认证器生成的attestation statement,用于证明注册请求确实来自合法的认证器。RP可以选择验证或跳过attestation,但从取证角度看,attestation提供了关键的认证器身份信息。
| Attestation Format | 认证器类型 | 信任锚 | 取证价值 |
|---|---|---|---|
| packed | FIDO2 Security Key | 认证器制造商证书 | 高:可追溯到具体硬件 |
| tpmt | TPM-based (Windows Hello) | TPM制造商证书 | 高:可关联TPM硬件 |
| android-key | Android Keystore | Google设备认证证书 | 中:可关联设备型号 |
| android-safetynet | Android SafetyNet | Google服务端验证 | 中:需要Google API验证 |
| apple | Apple平台认证器 | Apple根证书 | 高:可追溯Apple设备 |
| none | 无attestation | N/A | 低:无法验证认证器来源 |
常见WebAuthn实现漏洞
WebAuthn的RP端实现不当是Passkey安全事件中最常见的攻击入口。以下汇总了近年公开披露的典型漏洞类型。
| 漏洞类型 | 漏洞描述 | MITRE ATT&CK | 危害等级 |
|---|---|---|---|
| Challenge重用 | 同一challenge用于多次认证 | T1557 Man-in-the-Middle | 高 |
| Origin验证缺失 | 未验证浏览器发送的origin字段 | T1566 Phishing | 严重 |
| RP ID匹配过宽 | 使用后缀匹配而非精确匹配 | T1566 Phishing | 高 |
| 公钥未绑定用户 | Credential ID与用户ID之间无绑定检查 | T1078 Valid Accounts | 高 |
| 签名计数器不检查 | 未验证signCount单调递增 | T1557.001 LLMNR/NBT-NS | 中 |
| Attestation绕过 | 未验证attestation statement | T1199 Trusted Relationship | 中 |
| UV标志降级 | 未强制检查userVerification标志 | T1562 Impair Defenses | 中 |
| 超时未设置 | Challenge无过期时间 | T1557.002 ARP Cache Poisoning | 中 |
0x03 CTAP2通信链路安全取证
CTAP2协议概述
CTAP2(Client to Authenticator Protocol 2.2)定义了客户端(浏览器/操作系统)与认证器之间的通信协议。CTAP2消息使用CBOR(Concise Binary Object Representation)编码,支持四种传输层:USB HID、BLE(Bluetooth Low Energy)、NFC和Thunderbolt。不同传输层的安全特性和取证方法存在显著差异。
| 传输层 | 带宽 | 延迟 | 安全特性 | 距离限制 | 取证可行性 |
|---|---|---|---|---|---|
| USB HID | 高(64KB/s) | 极低(<1ms) | 物理连接,无无线嗅探 | 有线连接 | 高(USB监控) |
| BLE | 中(125KB/s) | 中(10-50ms) | AES-CCM加密,ECDH密钥交换 | ~10m | 中(BLE嗅探) |
| NFC | 低(424Kbit/s) | 低(<100ms) | 无额外加密(依赖CTAP2层) | ~4cm | 低(NFC嗅探困难) |
| Thunderbolt | 极高(40GB/s) | 极低 | 物理连接,高带宽 | 有线连接 | 低(工具不成熟) |
CTAP2 over USB/HID协议分析
USB HID是CTAP2最常用的传输方式。每个CTAP2消息封装在64字节的HID报告中,使用特定的消息分片机制处理超过单帧大小的CBOR数据。
USB HID CTAP2帧结构:
| 字节偏移 | 长度 | 字段名 | 描述 |
|---|---|---|---|
| 0-3 | 4 bytes | Channel ID | 通道标识符(0xFFFFFFFF为广播通道) |
| 4 | 1 byte | CMD/BUS | 命令字节(高4位)+ 数据包类型(低4位) |
| 5-6 | 2 bytes | Payload Length | 有效载荷长度(大端序) |
| 7-63 | 57 bytes | Payload Data | CBOR编码的命令/响应数据 |
| CTAP2 USB HID命令 | 命令码 | 功能 | 取证价值 |
|---|---|---|---|
| MSG | 0x10 | CTAP2 CBOR消息 | 高:包含MakeCredential/GetAssertion |
| INIT | 0x86 | 通道初始化 | 中:通道建立痕迹 |
| CBOR | 0x10 | CBOR编码消息 | 高:同MSG |
| PING | 0x81 | 连通性测试 | 低:设备存在确认 |
| CANCEL | 0x11 | 取消操作 | 低:用户交互取消 |
| ERROR | 0xBF | 错误响应 | 中:错误模式分析 |
| KEEPALIVE | 0x82 | 保持活跃 | 低:操作进行中提示 |
CTAP2 over BLE传输安全
BLE传输是Passkey中继攻击(MITRE ATT&CK T1557)的主要攻击面。CTAP2 over BLE在CTAP2消息层之上增加了BLE会话加密层,但初始配对过程仍可能存在安全风险。
BLE传输的加密层级:
| 层级 | 加密机制 | 密钥交换 | 安全特性 |
|---|---|---|---|
| BLE Link Layer | AES-CCM(BLE 4.2+) | LE Secure Connections | 链路层加密 |
| CTAP2 Session | AES-CCM | ECDH P-256 | 会话层加密 |
| CTAP2 Message | 无额外加密 | N/A(依赖会话层) | 无 |
BLE传输取证要点:
| BLE取证环节 | 数据采集方法 | 取证信息 | 分析工具 |
|---|---|---|---|
| 配对过程 | BLE嗅探器(Ubertooth) | 配对请求/响应、IO能力 | Wireshark + BLE插件 |
| GATT服务发现 | BLE扫描 | 认证器服务UUID | nRF Connect / GATTacker |
| CTAP2消息交互 | BLE嗅探 | CBOR编码的认证消息 | 自定义解析脚本 |
| 信号强度(RSSI) | BLE监听 | 物理距离估计 | 自定义RSSI分析 |
| 连接事件间隔 | BLE监听 | 连接模式特征 | 自定义时序分析 |
CTAP2 over NFC传输安全
NFC传输的物理距离限制(~4cm)使其在理论上是最安全的传输方式,但也面临NFC中继攻击(MITRE ATT&CK T1557.006)的威胁。NFC传输没有额外的加密层,所有安全性依赖CTAP2消息层自身的保护。
| NFC安全特性 | 描述 | 取证意义 |
|---|---|---|
| 物理距离限制 | ~4cm通信距离 | NFC relay攻击需要专用设备 |
| 无链路加密 | 依赖CTAP2层保护 | NFC嗅探可获取完整CTAP2消息 |
| 传输速率低 | 212/424 Kbit/s | 长消息传输可见 |
| NFC论坛协议 | ISO 14443 / ISO 18092 | 协议指纹可识别认证器类型 |
CBOR/COSE编码安全
CTAP2消息使用CBOR编码,密码学操作使用COSE(CBOR Object Signing and Encryption)算法。取证分析中需要解码CBOR数据包以提取认证器返回的关键信息。
COSE算法标识:
| COSE算法ID | 算法名称 | 适用场景 | 安全强度 |
|---|---|---|---|
| -7 | ES256(ECDSA P-256 SHA-256) | FIDO2首选算法 | 128位安全 |
| -257 | RS256(RSASSA-PKCS1-v1_5 SHA-256) | RSA认证器 | 128位安全 |
| -35 | ES384(ECDSA P-384 SHA-384) | 高安全需求 | 192位安全 |
| -37 | PS256(RSASSA-PSS SHA-256) | RSA-PSS | 128位安全 |
| -39 | EdDSA | Ed25519曲线 | 128位安全 |
CTAP2 PIN/UV认证协议
CTAP2定义了两个安全协议用于保护敏感操作:PIN协议(用于验证用户PIN码)和User Verification(UV)协议。这两个协议使用AES-CTR加密和HMAC-SHA256进行消息完整性保护。
| 安全协议 | 版本 | 加密算法 | MAC算法 | 用途 |
|---|---|---|---|---|
| PIN Protocol 1 | v1 | AES-CTR | HMAC-SHA256 | PIN验证(已废弃) |
| PIN Protocol 2 | v2 | AES-CTR | HMAC-SHA256 | PIN验证+权限管理 |
| UV Protocol | v1 | AES-CTR | HMAC-SHA256 | 生物识别验证 |
0x04 密钥存储安全取证分析
Apple Secure Enclave密钥存储架构
Secure Enclave是Apple设备中的独立安全协处理器,负责密钥生成、存储和密码学运算。在Passkey场景中,私钥始终生成并存储于Secure Enclave中,即使操作系统被root,也无法直接提取私钥。
| Secure Enclave安全特性 | 描述 | 取证影响 |
|---|---|---|
| 硬件隔离 | 独立处理器,独立内存 | 无法通过内存转储获取密钥 |
| 密钥派生 | 每个密钥从硬件UID派生 | 密钥与特定硬件绑定 |
| Access Control | Secure Enclave策略保护密钥访问 | 需要用户认证才能使用密钥 |
| 不可导出 | 私钥无法离开Secure Enclave | 传统取证方法无法提取私钥 |
| 计数器保护 | 单调递增计数器 | 可检测密钥克隆 |
| 防重放 | 每次签名包含唯一nonce | 签名不可重放 |
macOS上Passkey取证数据源:
| macOS日志子系统 | 相关事件 | 取证信息 |
|---|---|---|
| com.apple.Accessibility | 生物识别验证 | Face ID/Touch ID使用记录 |
| securityd | 密钥操作 | 密钥创建、签名、删除事件 |
| com.apple.cryptex | 密钥同步 | iCloud Keychain同步事件 |
| com.apple.fido | FIDO2协议 | WebAuthn操作日志 |
| com.apple.passkeyd | Passkey管理 | Passkey注册、使用、删除事件 |
TPM 2.0密钥证明与Windows Hello
Windows平台使用TPM 2.0(Trusted Platform Module)作为Passkey的密钥存储后端。TPM提供硬件级的密钥生成和存储,同时支持远程证明(Remote Attestation)以验证密钥的硬件来源。
| TPM密钥层级 | 密钥类型 | 存储位置 | 取证提取可能性 |
|---|---|---|---|
| EK(Endorsement Key) | RSA/ECC | TPM内部 | 不可提取(硬件根信任) |
| AK(Attestation Key) | RSA/ECC | TPM内部 | 不可提取(用于证明) |
| SRK(Storage Root Key) | RSA/ECC | TPM内部 | 不可提取(密钥层次根) |
| 用户密钥(Passkey私钥) | ECC P-256 | TPM加密存储 | 不可直接提取(可通过TPM操作) |
Windows Event Log取证:
| Windows Event ID | 事件描述 | 取证价值 |
|---|---|---|
| 300 | WebAuthn注册开始 | 事件起始点 |
| 301 | WebAuthn注册完成 | 注册结果和认证器信息 |
| 302 | WebAuthn注册失败 | 失败原因分析 |
| 400 | WebAuthn认证开始 | 认证事件起始点 |
| 401 | WebAuthn认证完成 | 认证结果和断言信息 |
| 402 | WebAuthn认证失败 | 认证失败原因分析 |
| 1000 | Windows Hello凭据注册 | 平台认证器注册 |
| 1001 | Windows Hello凭据使用 | 平台认证器使用 |
Android Keystore/StrongBox实现
Android平台提供两级密钥存储后端:Keystore(基于TEE,Trusted Execution Environment)和StrongBox(基于专用安全芯片,如Google Titan M或硬件安全模块)。从Android 9开始,StrongBox被要求支持FIDO2 Authenticator功能。
| 存储后端 | 硬件基础 | 安全等级 | 取证提取难度 | 典型设备 |
|---|---|---|---|---|
| Android Keystore (TEE) | ARM TrustZone | 中 | 高 | 大多数Android设备 |
| StrongBox (SE) | 专用安全芯片 | 极高 | 极高 | Pixel 3+、Samsung S10+ |
| ARM CryptoCell | ARM TrustZone+ | 中高 | 高 | 部分ARM设备 |
Android Passkey取证数据源:
密钥备份与同步机制
Passkey的核心优势之一是支持跨设备同步。但同步机制本身也引入了新的攻击面和取证挑战。不同平台的同步实现差异显著,对取证方法论提出了差异化要求。
| 同步平台 | 同步服务 | 加密方式 | 密钥托管 | 攻击面 |
|---|---|---|---|---|
| Apple | iCloud Keychain | E2EE + iCloud Advanced Data Protection | iCloud密钥链同步 | iCloud账号接管、同步链注入 |
| Google Password Manager | E2EE(默认开启) | Google账号密钥 | Google账号接管、同步链注入 | |
| Microsoft | Windows Hello | Microsoft Account + TPM | 企业域信任 | Azure AD账号接管 |
| 1Password | 1Password云 | E2EE(SRP + Secret Key) | 1Password密钥 | 主密码泄露、Secret Key泄露 |
| Bitwarden | Bitwarden云 | E2EE(PBKDF2/Argon2) | 主密码+加密密钥 | 主密码泄露 |
密钥生命周期取证
完整的密钥生命周期取证需要追踪密钥从创建到销毁的全过程。以下分析框架适用于不同平台的Passkey密钥。
| 生命周期阶段 | 取证数据源 | 关键信息 | 时间精度 |
|---|---|---|---|
| 密钥生成 | RP认证日志+设备日志 | 密钥ID、算法、时间戳 | 秒级 |
| 密钥注册 | WebAuthn Attestation日志 | 认证器信息、RP ID | 秒级 |
| 密钥使用 | RP认证日志 | Assertion数据、时间戳 | 秒级 |
| 密钥同步 | 平台同步服务日志 | 同步设备列表、时间戳 | 分钟级 |
| 密钥导出 | 平台导出操作日志 | 导出目标、授权信息 | 秒级 |
| 密钥删除 | RP认证日志+设备日志 | 删除操作来源、时间戳 | 秒级 |
0x05 Passkey中继攻击与欺骗检测
BLE-to-Cloud中继攻击架构
BLE中继攻击(MITRE ATT&CK T1557)是针对Passkey最复杂也最危险的攻击方式之一。攻击者在受害者附近部署BLE中继设备,在远程服务器上架设云端中继,将受害者的Passkey认证操作实时转发到攻击者的设备上,使RP服务器误认为是合法的受害者认证。
NFC中继攻击
NFC中继攻击(MITRE ATT&CK T1557.006)利用NFC通信的短距离特性,通过专用中继设备扩展NFC通信的有效距离。与BLE中继不同,NFC中继需要更精密的硬件设备和更低的延迟。
| 中继攻击类型 | 攻击设备 | 延迟要求 | 硬件成本 | 成功率 | 取证线索 |
|---|---|---|---|---|---|
| BLE中继 | Raspberry Pi + BLE Dongle | <500ms | 低 | 高 | BLE日志异常 |
| NFC中继 | Proxmark3 + 双天线 | <100ms | 中 | 中 | NFC操作时序异常 |
| USB中继 | USB Redirection设备 | <10ms | 高 | 低 | USB连接模式异常 |
| Cloud中继 | VPS + WebSocket | <200ms | 低 | 高 | IP地理位置异常 |
近场验证绕过技术
近场验证(Proximity Verification)是防止中继攻击的关键防线。主要的近场验证机制包括超声波验证、信号强度(RSSI)检测、时间飞行(ToF)测量等。攻击者已经开发出多种绕过这些验证的手段。
| 近场验证机制 | 验证原理 | 绕过方式 | 检测难度 |
|---|---|---|---|
| RSSI信号强度 | 检测BLE/NFC信号强度判断距离 | 功率放大器 + 信号衰减模拟 | 中 |
| 超声波验证 | 设备间超声波距离测量 | 超声波中继设备 | 高 |
| 时间飞行(ToF) | 信号往返时间测量 | 高速中继 + 预测响应 | 极高 |
| Wi-Fi RTT | Wi-Fi飞行时间测量 | Wi-Fi信号中继 | 高 |
| 地理位置绑定 | 检查认证设备GPS坐标 | GPS欺骗 | 中 |
中继攻击检测签名
在取证分析中,可以通过以下模式识别中继攻击的痕迹。这些检测签名可集成到自动化检测系统中。
| 检测维度 | 正常模式 | 中继攻击模式 | 检测方法 |
|---|---|---|---|
| BLE RSSI | 稳定在-40至-70dBm | 波动大或异常低 | RSSI时序分析 |
| 认证延迟 | <200ms端到端 | >500ms(含网络延迟) | 时序分析 |
| IP地理位置 | 用户常驻位置 | 远程位置或频繁变化 | GeoIP分析 |
| 设备指纹 | 一致的设备特征 | 浏览器/OS指纹矛盾 | 指纹对比 |
| 认证时间 | 合理的工作/休息时间 | 异常时间段 | 时间模式分析 |
| 并发会话 | 单一活跃会话 | 多地并发活跃会话 | 会话状态分析 |
| BLE连接模式 | 短暂有序的GATT操作 | 长时间持续连接 | 连接时序分析 |
中继攻击日志分析模式
| 日志字段 | 正常值范围 | 异常值范围 | 分析工具 |
|---|---|---|---|
| BLE连接间隔 | 15-30ms | <10ms或>100ms | BLE日志解析 |
| CTAP2消息往返 | <50ms(本地) | >200ms(中继延迟) | 时序分析脚本 |
| GATT操作次数 | 3-10次/认证 | >20次/认证 | 流量统计 |
| RSSI变化率 | <5dBm/秒 | >10dBm/秒 | RSSI分析 |
0x06 设备同步链完整性取证
Apple iCloud Keychain同步链分析
Apple的Passkey同步基于iCloud Keychain基础设施。密钥通过端到端加密(E2EE)同步到用户的所有Apple设备。当启用Advanced Data Protection时,同步数据额外受到iCloud密钥的保护。
同步链架构:
iCloud Keychain同步链取证:
| 取证数据源 | 命令/方法 | 获取信息 |
|---|---|---|
| 密钥链记录 | security dump-keychain | 密钥条目元数据 |
| 同步状态 | security cms -D -i ~/Library/Keychains/*/keychain-band.db | 同步链状态 |
| 设备列表 | Apple ID设备管理页面 | 关联设备信息 |
| 恢复密钥 | 钥匙串访问应用 | Recovery Key状态 |
Google Password Manager跨设备同步
Google的Passkey同步基于Google Password Manager服务。密钥在Android设备间通过Google账号同步,在Chrome浏览器间通过Google Smart Lock同步。
| 同步路径 | 加密方式 | 同步范围 | 取证特征 |
|---|---|---|---|
| Android ↔ Android | E2EE | 已登录同一Google账号的Android设备 | Android Keychain日志 |
| Chrome ↔ Chrome | E2EE | 已登录同一Google账号的Chrome | Chrome Sync日志 |
| Android → Chrome | E2EE | 通过Google Password Manager桥接 | 跨平台同步事件 |
| 第三方密码管理器 | 管理器自身的E2EE | 管理器支持的所有平台 | 密码管理器日志 |
Windows Hello跨设备Passkey
Windows 11支持通过Microsoft Account同步Passkey。同步的密钥存储在Microsoft的云服务中,登录时通过Windows Hello生物识别或PIN码解锁。
同步协议安全性验证
跨设备同步的安全性取决于密钥在传输和存储过程中的加密保护。以下检查框架用于验证同步链的安全状态。
| 检查项 | 安全状态 | 风险等级 | 检查方法 |
|---|---|---|---|
| E2EE启用 | ✅ 密钥端到端加密 | 低 | 检查同步服务配置 |
| 恢复密钥保护 | ✅ 恢复密钥已安全存储 | 低 | 验证Recovery Key状态 |
| 设备信任链 | ✅ 所有设备均为已知设备 | 中 | 对比设备列表 |
| 同步延迟 | ✅ 正常同步延迟 | 低 | 检查同步时间戳 |
| 未授权设备 | ❌ 发现未授权设备 | 严重 | 设备列表审计 |
| 同步中断 | ⚠️ 同步服务异常 | 中 | 检查同步日志 |
未授权设备检测
检测同步链中是否被注入了未授权设备是Passkey取证的关键环节。攻击者可能通过入侵用户云端账号添加恶意设备到同步链中。
| 检测维度 | 正常指标 | 异常指标 | 取证工具 |
|---|---|---|---|
| 设备数量 | 稳定(用户已知设备数) | 突然增加 | 平台设备管理API |
| 设备类型 | 用户已知设备型号 | 未知设备型号 | 设备指纹数据库 |
| 设备地理位置 | 用户常驻位置 | 异地设备 | IP/设备定位 |
| 首次同步时间 | 合理的时间分布 | 异常的首次同步时间 | 同步时间线分析 |
| 同步频率 | 正常的周期性同步 | 高频或零同步 | 同步模式分析 |
密钥导出/导入取证痕迹
Passkey的导出/导入操作在取证中具有重要价值,因为这些操作可能指示密钥迁移或攻击者试图窃取密钥。
| 操作类型 | 平台支持 | 取证痕迹 | MITRE ATT&CK |
|---|---|---|---|
| iCloud密钥链导出 | macOS Keychain Access | 导出操作日志、文件创建记录 | T1555 Credentials from Password Stores |
| Google密码导出 | Chrome设置 | 导出CSV创建记录 | T1555 Credentials from Password Stores |
| FIDO2密钥备份 | 认证器特定 | Backup操作日志 | T1555 Credentials from Password Stores |
| 第三方密码管理器导出 | 管理器特定 | 导出日志+文件 | T1555 Credentials from Password Stores |
| 硬件Security Key重置 | 管理工具日志 | 重置操作日志 | T1562 Impair Defenses |
0x07 认证日志重建与异常行为检测
WebAuthn事件日志标准
各主流平台和RP在WebAuthn事件日志的记录格式和内容上存在差异。标准化的日志收集和分析框架对于跨平台取证至关重要。
| 平台/服务 | 日志位置 | 事件类型 | 时间精度 | 格式 |
|---|---|---|---|---|
| Azure AD | Sign-in Logs | WebAuthn认证 | 秒级 | JSON |
| Okta | System Log | WebAuthn操作 | 毫秒级 | JSON |
| Google Workspace | Admin Audit Log | Passkey事件 | 秒级 | JSON |
| AWS Cognito | CloudWatch Logs | FIDO2事件 | 毫秒级 | JSON |
| 自建RP | 应用日志 | 自定义 | 取决于实现 | 自定义 |
Relying Party认证日志分析
RP端的日志是Passkey取证的核心数据源。标准的WebAuthn认证日志应包含以下关键字段。
| 日志字段 | 数据类型 | 描述 | 取证用途 |
|---|---|---|---|
| timestamp | ISO 8601 | 操作时间戳 | 时序分析 |
| event_type | Enum | create/get/error | 操作类型识别 |
| user_id | String | 用户标识 | 用户行为关联 |
| credential_id | Base64URL | 凭据标识 | 密钥追踪 |
| rp_id | String | Relying Party标识 | RP关联 |
| authenticator_type | Enum | platform/roaming | 认证器类型 |
| attestation_fmt | Enum | packed/tpmt/apple/none | 认证器来源 |
| user_verification | Boolean | 用户验证结果 | UV状态检查 |
| sign_count | Integer | 签名计数器 | 克隆检测 |
| origin | URL | 请求来源Origin | 钓鱼检测 |
| challenge | Base64URL | Challenge值 | Challenge验证 |
RP端日志分析脚本:
浏览器级Passkey遥测
浏览器作为WebAuthn API的宿主环境,提供了额外的遥测数据源。Chrome、Firefox和Safari在Passkey操作的记录方式上各有特色。
| 浏览器 | 遥测数据源 | 数据获取方式 | 信息丰富度 |
|---|---|---|---|
| Chrome | chrome://flags/#webauthn | 标志位+控制台日志 | 高 |
| Chrome | chrome://system | 系统信息转储 | 中 |
| Firefox | about:config | 配置项日志 | 中 |
| Safari | WebKit Inspector | 开发者工具日志 | 中 |
操作系统级Authenticator事件日志
操作系统层面提供了Passkey操作的底层日志,这些日志对于还原完整的认证事件链至关重要。
| 操作系统 | 日志系统 | 日志命令 | 关键过滤条件 |
|---|---|---|---|
| Windows | Windows Event Log | Get-WinEvent | Microsoft-Windows-Hello-FIDO |
| macOS | Unified Log | log show/stream | com.apple.fido / passkeyd |
| Android | logcat | adb logcat | Fido2Manager / WebAuthnManager |
| iOS | Unified Log | sysdiagnose | com.apple.passkeyd |
| Linux | journald | journalctl | fido2 / libfido2 |
Windows综合取证脚本:
异常行为检测模式
以下异常检测模式综合了Passkey认证场景的常见攻击特征,可集成到SIEM或自动化检测平台中。
| 检测模式 | 异常描述 | MITRE ATT&CK | 检测置信度 | 响应优先级 |
|---|---|---|---|---|
| Impossible Travel | 用户在不可能的时间内从两个远距离位置认证 | T1078 Valid Accounts | 高 | 紧急 |
| 设备指纹异常 | 认证设备指纹与历史记录不匹配 | T1557 MITM | 高 | 紧急 |
| 时序异常 | 认证时间模式明显偏离历史基线 | T1078 Valid Accounts | 中 | 高 |
| 注册激增 | 短时间内大量新Passkey注册 | T1199 Trusted Relationship | 中 | 高 |
| 同步链异常 | 同步链中出现未知设备 | T1550 Use Alternate Auth Material | 高 | 紧急 |
| Sign Count异常 | 签名计数器不单调递增或异常跳变 | T1557 MITM | 高 | 紧急 |
| Origin不一致 | 认证Origin与预期RP域名不符 | T1566 Phishing | 高 | 紧急 |
| 批量认证 | 同一Credential短时间内多次认证 | T1078 Valid Accounts | 中 | 高 |
0x08 跨平台Passkey实现差异与取证要点
Apple Passkey实现(iOS 16+ / macOS Ventura+)
Apple是Passkey的最早推动者之一,其实现深度集成了Apple生态系统。Apple Passkey基于Secure Enclave生成和存储密钥,通过iCloud Keychain实现跨设备同步,并与iCloud Advanced Data Protection集成提供端到端加密保护。
| Apple Passkey特性 | 描述 | 取证要点 |
|---|---|---|
| 密钥存储 | Secure Enclave硬件隔离 | 无法直接提取私钥 |
| 同步机制 | iCloud Keychain E2EE | 需要iCloud日志分析 |
| 平台认证器 | Touch ID / Face ID | 生物识别验证日志 |
| Attestation格式 | apple attestation | Apple根证书链验证 |
| 密钥导出 | 不支持直接导出 | 检查导出尝试痕迹 |
| 恢复机制 | Recovery Key / 账号恢复 | 恢复操作日志 |
| Enterprise管理 | MDM配置描述文件 | 企业策略审计 |
Google Passkey实现(Android 14+ / Chrome)
Google的Passkey实现横跨Android平台和Chrome浏览器两个主要渠道。Android端使用Keystore/StrongBox存储密钥,Chrome端使用Google Password Manager管理密钥。
| Google Passkey特性 | 描述 | 取证要点 |
|---|---|---|
| 密钥存储 | Android Keystore / StrongBox | Android KeyStore审计 |
| 同步机制 | Google Password Manager | Google账号活动日志 |
| 平台认证器 | Android BiometricPrompt | 生物识别日志 |
| Attestation格式 | android-key / android-safetynet | Google设备认证验证 |
| Chrome集成 | WebAuthn API + Chrome Sync | Chrome同步日志 |
| 跨平台 | Android ↔ Chrome | 跨平台同步事件 |
Windows Hello/Passkey实现
Windows平台通过Windows Hello提供平台认证器功能,密钥存储在TPM 2.0中。Windows 11开始支持通过Microsoft Account同步Passkey,并支持第三方FIDO2 Security Key。
| Windows Passkey特性 | 描述 | 取证要点 |
|---|---|---|
| 密钥存储 | TPM 2.0 | TPM事件日志 |
| 同步机制 | Microsoft Account | Azure AD登录日志 |
| 平台认证器 | Windows Hello (PIN/指纹/面部) | Hello事件日志 |
| Attestation格式 | tpmt | TPM证书链验证 |
| 企业集成 | Azure AD / Active Directory | 域控审计日志 |
| 第三方支持 | FIDO2 Security Key | USB HID日志 |
第三方密码管理器Passkey支持
随着Passkey的普及,主流密码管理器也纷纷集成Passkey支持,作为跨平台同步的替代方案。不同密码管理器的实现安全特性差异显著。
| 密码管理器 | 平台支持 | 密钥存储 | 同步加密 | Attestation | 安全审计 |
|---|---|---|---|---|---|
| 1Password | Win/Mac/Linux/iOS/Android | 安全飞轮+Secure Enclave | E2EE (SRP + Secret Key) | 无attestation | SOC 2 Type II |
| Bitwarden | Win/Mac/Linux/iOS/Android | 本地加密存储 | E2EE (主密码) | 无attestation | 第三方审计 |
| Dashlane | Win/Mac/iOS/Android | 安全保险库 | E2EE | 无attestation | SOC 2 |
| KeePassXC | Win/Mac/Linux | 本地数据库文件 | 无云同步 | 无attestation | 社区审计 |
| Proton Pass | Win/Mac/iOS/Android | Proton加密层 | E2EE (Proton) | 无attestation | 第三方审计 |
跨平台取证方法对比
不同平台的取证方法、数据源和工具存在显著差异。以下对比表提供了跨平台取证的方法论框架。
| 取证环节 | Apple | Windows | 第三方管理器 | |
|---|---|---|---|---|
| 密钥枚举 | security命令+Keychain日志 | Android KeyStore日志 | TPM日志+Event Log | 管理器日志/数据库 |
| 认证日志 | Unified Log (com.apple.fido) | logcat (Fido2Manager) | Hello-FIDO Event Log | 管理器事件日志 |
| 同步链审计 | iCloud设备管理 | Google账号设备列表 | Microsoft Account设备 | 管理器同步设置 |
| 密钥删除追踪 | Keychain审计日志 | KeyStore删除事件 | TPM密钥操作日志 | 管理器日志 |
| 导出检测 | Keychain导出日志 | Google密码导出CSV | 无标准导出路径 | 管理器导出日志 |
| 取证工具 | macOS内置 | Android SDK | PowerShell | 管理器CLI/API |
| 实时监控 | log stream | logcat实时 | Event Viewer实时 | 管理器日志API |
| 远程取证 | iCloud Web + 查找 | Google账号活动 | Azure AD日志 | 管理器Web面板 |
0x09 证据强度分层与案例关联
🔴 确认恶意
无可争议的恶意行为证据。当出现以下证据时,可以确认发生了Passkey相关的安全事件。
| 编号 | 证据类型 | 具体示例 | 确认依据 | MITRE ATT&CK |
|---|---|---|---|---|
| C-1 | 未授权密钥创建 | RP日志显示在用户未操作时创建了新Passkey | 用户行为时序矛盾 | T1199 Trusted Relationship |
| C-2 | 中继攻击确认 | BLE中继设备日志包含CTAP2消息转发记录 | 完整的中继攻击链证据 | T1557 Man-in-the-Middle |
| C-3 | 密钥窃取 | 云端账号日志显示从未知设备导出了Passkey | 未授权的密钥导出操作 | T1555 Credentials from Password Stores |
| C-4 | 同步链注入 | iCloud Keychain日志显示未知设备被添加到同步链 | 未授权设备接入 | T1550 Use Alternate Auth Material |
| C-5 | 签名计数器不一致 | RP日志显示Sign Count出现回退或异常跳变 | 计数器回退表明密钥克隆 | T1557 Man-in-the-Middle |
| C-6 | Origin欺骗 | WebAuthn请求来自与RP域名不匹配的Origin | 伪造的认证来源 | T1566 Phishing |
| C-7 | 恶意Browser Extension拦截 | 浏览器扩展列表中发现拦截navigator.credentials的扩展 | 明确的WebAuthn API劫持 | T1176 Browser Extensions |
🟡 高度可疑
强烈暗示恶意活动但需要进一步验证的证据。
| 编号 | 证据类型 | 具体示例 | 可疑原因 | MITRE ATT&CK |
|---|---|---|---|---|
| S-1 | 异常注册模式 | 新Passkey注册发生在用户非活跃时间段 | 可能为自动化攻击 | T1078 Valid Accounts |
| S-2 | 同步链新增设备 | 同步链中出现未在用户管理中登记的设备 | 可能为账号泄露 | T1550 Use Alternate Auth Material |
| S-3 | 异常认证时序 | Passkey认证的端到端延迟显著高于基线 | 可能为中继攻击 | T1557 Man-in-the-Middle |
| S-4 | 设备指纹矛盾 | 认证请求的User-Agent与已知设备不匹配 | 可能为代理或伪造 | T1071 Application Layer Protocol |
| S-5 | 认证器类型变更 | 同一用户从platform认证器切换到roaming认证器 | 可能为正常的硬件迁移 | T1550 Use Alternate Auth Material |
| S-6 | Challenge重用 | 同一Challenge被用于多次认证尝试 | 可能为重放攻击 | T1557 Man-in-the-Middle |
| S-7 | 高频认证 | 同一Credential短时间内认证次数异常 | 可能为自动化攻击 | T1078 Valid Accounts |
🟢 需要关注
可能为正常行为但需要结合上下文判断的证据。
| 编号 | 证据类型 | 具体示例 | 关注原因 | MITRE ATT&CK |
|---|---|---|---|---|
| W-1 | 平台认证器升级 | 设备OS升级后Passkey认证器版本变化 | 正常的系统更新 | N/A |
| W-2 | 备份密钥创建 | 用户创建了额外的备份Passkey | 可能为正常的多设备管理 | N/A |
| W-3 | 跨平台同步活动 | Passkey从Android同步到Chrome | 正常的跨平台同步 | N/A |
| W-4 | Attestation格式变更 | 新注册的Passkey使用了不同的Attestation格式 | 可能为认证器更新 | N/A |
| W-5 | 密码管理器注册 | 在第三方密码管理器中注册了新的Passkey | 可能为用户主动管理 | N/A |
| W-6 | 时区变化 | 认证时区与用户旅行计划一致 | 可能为正常旅行 | N/A |
| W-7 | 认证失败后成功 | 认证多次失败后成功 | 可能为用户操作失误 | N/A |
0x0A 自动化检测与狩猎
Sigma规则:FIDO2/Passkey认证异常检测
以下Sigma规则用于检测Passkey认证过程中的关键异常行为。
Bash脚本:Passkey事件日志采集与分析器
以下脚本用于自动化采集和分析多平台Passkey事件日志。
Python脚本:WebAuthn Assertion异常检测器
YARA规则:恶意认证器识别
0x0B 公开案例分析
案例一:Passkey Phishing中继攻击活动(2024)
2024年,安全研究人员披露了一起针对企业用户的Passkey中继攻击活动。攻击者通过精心构造的钓鱼页面诱导用户在攻击者控制的域名上发起WebAuthn认证,同时在后台通过BLE中继设备将CTAP2消息实时转发到受害者的真实设备,完成看似合法的Passkey认证。
攻击链还原:
取证发现:
| 取证环节 | 发现 | 严重度 |
|---|---|---|
| RP认证日志 | Origin字段显示攻击者域名而非合法RP域名 | 严重 |
| BLE流量日志 | 认证期间BLE连接持续时间异常(15秒 vs 正常3秒) | 高 |
| 时序分析 | CTAP2消息往返延迟450ms(正常<50ms) | 高 |
| 设备指纹 | User-Agent显示Chrome但认证器为platform类型 | 中 |
| 网络日志 | 认证期间存在异常WebSocket连接到外部IP | 高 |
IOC(Indicators of Compromise):
| IOC类型 | IOC值 | 描述 |
|---|---|---|
| 域名 | auth-verify-login[.]com | 钓鱼域名 |
| IP | 185.xx.xx.42 | C2中继服务器 |
| 文件哈希 | SHA256: a1b2c3… | 恶意浏览器扩展安装包 |
| WebSocket | wss://relay-ctl[.]com/ws | 中继控制通道 |
| 扩展ID | chrome-extension://abcdef123456 | 拦截WebAuthn的恶意扩展 |
案例二:Yubico Security Key固件漏洞与Passkey影响(2024)
2024年,安全研究人员发现特定版本的Yubico Security Key固件在处理CTAP2 MakeCredential请求时存在缓冲区溢出漏洞。攻击者可以构造特殊的attestation请求来触发内存损坏,可能导致密钥泄露或认证器行为异常。
攻击链还原:
取证发现:
| 取证环节 | 发现 | 严重度 |
|---|---|---|
| USB HID日志 | MakeCredential请求rp.id字段异常长度(>256字节) | 高 |
| 认证器响应 | CTAP2 Error Response code 0x35(CBOR parsing error) | 中 |
| 系统日志 | 认证器crash后重新初始化事件 | 高 |
| 固件版本 | 受影响固件版本号记录 | 高 |
| RP服务器日志 | 使用异常rp.id的注册请求 | 高 |
IOC(Indicators of Compromise):
| IOC类型 | IOC值 | 描述 |
|---|---|---|
| 固件版本 | <5.2.7 | 受影响的Yubico固件版本 |
| USB HID数据 | rp.id长度>256字节的MakeCredential | 溢出触发特征 |
| CTAP2错误码 | 0x35 | CBOR解析错误 |
| CTAP2状态码 | CTAP1_ERR_OTHER | 认证器异常响应 |
0x0C 参考资料
免责声明: 本文仅供安全研究和取证分析学习之用。文中涉及的攻击技术描述旨在帮助安全专业人员理解和防御此类攻击。未经授权对他人系统实施任何形式的攻击均属违法行为。所有取证分析操作都应遵循当地法律法规,并在获得适当授权的前提下进行。