ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

检测 OAuth 令牌失窃:Entra ID / Okta API 取证与 Token 重放检测实战指南

检测 OAuth 令牌失窃:Entra ID / Okta API 取证与 Token 重放检测实战指南 检测 OAuth 令牌失窃Entra ID / Okta API 取证与 Token 重放检测实战指南【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills导读本文是 Anthropic-Cybersecurity-Skills 仓库中detecting-oauth-token-theft技能SKILL.md配套的 API 实战参考指南聚焦微软 Entra IDAzure AD与 Okta 两大身份平台下的 OAuth 令牌失窃检测。读完本文你将掌握如何通过 Microsoft Graph Sign-In Logs 与 Okta System Log API 检索登录事件、如何基于不可能旅行Impossible Travel、令牌重放、新设备与敏感 Scope 四类检测逻辑识别令牌窃取、如何对照高敏 OAuth Scope 评估风险以及如何把相关检测结果映射到 MITRE ATTCK 技术编号形成可落地的取证与检测工作流。攻击面哪些令牌会被偷、怎么被偷要检测令牌失窃首先需要明确攻击目标。不同令牌类型的生命周期、窃取途径与影响范围差异巨大SKILL.md 给出了清晰的对比令牌类型生命周期窃取途径影响Access Token访问令牌60–90 分钟内存转储、代理拦截在令牌有效期内获得 API 访问Refresh Token刷新令牌最长 90 天浏览器 Cookie 窃取、恶意软件持久访问可不断签发新访问令牌Primary Refresh TokenPRT会话级Mimikatz、AADInternals、恶意软件对全部 M365/Azure 应用实现完全 SSOSession Cookie会话 Cookie不定XSS、浏览器漏洞、AitM 代理完全会话劫持Device Code Token设备码令牌认证后 15 分钟钓鱼设备码流程滥用攻击者通过社工获得刷新令牌常见攻击手法包括AitM 钓鱼攻击者用 Evilginx2 之类的工具代理合法登录页在受害者完成 MFA 后截获会话 Cookie 与令牌、设备码钓鱼攻击者生成设备码并通过邮件/Teams 发送给受害者受害者认证后攻击者获取令牌、PRT 提取拥有设备本地管理员权限的攻击者使用 Mimikatzsekurlsa::cloudap或 AADInternals 提取主刷新令牌、以及浏览器 Cookie 窃取信息窃取类恶意软件外泄含会话令牌的浏览器 Cookie。数据源 API获取登录事件的两种途径Microsoft Graph Sign-In LogsEntra ID 的登录日志可以通过 Microsoft Graph 的auditLogs/signIns端点检索。API 参考文档给出了基础查询方式# 查询登录日志 curl -H Authorization: Bearer $MS_TOKEN \ https://graph.microsoft.com/v1.0/auditLogs/signIns?\$filtercreatedDateTime ge 2025-01-01\$top100注意这里使用了$filter按时间过滤并用$top限制返回条数最多 100 条/页分页需处理odata.nextLink。$MS_TOKEN需要通过具有AuditLog.Read.All或Directory.Read.All权限的应用凭据换取。返回的每个签名事件中与令牌失窃检测直接相关的字段如下字段说明userPrincipalName用户邮箱 / UPNipAddress来源 IP 地址location.city地理位置城市location.geoCoordinates经纬度坐标deviceDetail.deviceId设备标识符resourceDisplayName目标资源名称status.errorCode0 表示成功riskStatenone、confirmedCompromised、remediated 等Okta System Log API对于使用 Okta 的组织可通过 Okta 的 System Log API 检索身份事件流# 查询事件 curl -H Authorization: SSWS $OKTA_TOKEN \ https://your-org.okta.com/api/v1/logs?filtereventType eq \user.session.start\since2025-01-01该 API 使用 SSWSSSWS API Token认证filter参数按eventType过滤例如会话启动事件user.session.startsince指定起始时间。Okta 的 System Log 还支持q、after游标分页等参数可用于持续拉取增量事件适配 SIEM 的定时同步场景。检测逻辑四类核心检测方法API 参考文档将令牌失窃检测归纳为四类核心方法这些检测逻辑正是仓库中 scripts/agent.py 的源码实现基础检测项方法不可能旅行Impossible travelHaversine 距离 / 时间 900 km/h令牌重放Token replay同一用户在 5 分钟窗口内出现 3 个不同 IP新设备New device设备 ID 不在已知设备清单中可疑 ScopeSuspicious scopes请求了 2 个以上敏感 OAuth Scope不可能旅行Haversine 公式源码实现agent.py中的detect_impossible_travel函数是这一检测的完整实现。它按用户分组登录事件并按时间排序对相邻两条事件计算大圆距离与时间差得出“移动速度”并判定是否超过阈值EARTH_RADIUS_KM 6371 def haversine(lat1, lon1, lat2, lon2): 计算两点之间的大圆距离千米 lat1, lon1, lat2, lon2 map(math.radians, [lat1, lon1, lat2, lon2]) dlat lat2 - lat1 dlon lon2 - lon1 a math.sin(dlat / 2) ** 2 math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2) ** 2 return 2 * EARTH_RADIUS_KM * math.asin(math.sqrt(a))检测主逻辑中speed dist / hours计算两点间的等效移动速度当speed max_speed_kmh and dist 100即速度超过阈值且距离超过 100 公里时产生HIGH严重级别的impossible_travel告警。max_speed_kmh默认值 900 与 API 参考文档中“900 km/h”的判定阈值完全对应也可以通过命令行参数--max-speed调整。令牌重放滑动时间窗口去重detect_token_replay使用 5 分钟300 秒的滑动窗口统计同一用户在该窗口内出现的不同 IP 数window [e for e in window if (ts - datetime.datetime.fromisoformat( e[timestamp].replace(Z, 00:00))).total_seconds() 300] window.append(event) unique_ips set(e.get(ip) for e in window if e.get(ip)) if len(unique_ips) 3: # 产生 CRITICAL 级别的 token_replay 告警当同一用户在 5 分钟内出现 3 个以上不同 IP 时判定为令牌被复制到多个位置同时使用产生CRITICAL严重级别告警——这与 API 参考文档“Same user, 3 IPs within 5 min window”的规则逐字对应。新设备与可疑 Scopedetect_new_device将事件中的device_id缺省时回退到user_agent与已知设备清单比对出现未知设备即产生MEDIUM级别new_device告警对应“Device ID not in known device inventory”。detect_suspicious_scopes内置敏感 Scope 集合当单次 OAuth 请求同时请求 2 个以上敏感 Scope 时产生HIGH级别suspicious_scopes告警对应“2 sensitive OAuth scopes requested”。agent.py支持--log-file指定 JSON 格式登录事件文件、-o/--output输出 JSON 报告不指定--log-file时会以内置的演示数据运行alice 用户在纽约与伦敦 30 分钟内登录、bob 用户请求了 3 个敏感 Scope便于快速验证检测逻辑。敏感 OAuth Scope 清单微软评估令牌请求风险的核心依据是所请求的 Scope 权限。API 参考文档给出了微软生态中的高风险 Scope 及其风险含义Scope风险Mail.ReadWrite邮箱读写访问Mail.Send以用户身份发送邮件Send-asFiles.ReadWrite.All全部文件访问Directory.ReadWrite.All修改 Active DirectoryApplication.ReadWrite.All应用注册管理agent.py的detect_suspicious_scopes在上述基础上进一步扩展了User.ReadWrite.All与RoleManagement.ReadWrite.Directory覆盖用户资料改写与角色管理等高权限范围。实战中应结合应用的真实业务需求审查 Scope一个仅用于“发送待办提醒”的应用如果请求Directory.ReadWrite.All就应触发告警。从日志到告警的完整检测工作流API 参考文档解决的是“拿到什么数据、看哪些字段、按什么规则判”而 SKILL.md 提供了在 Entra ID 环境中的完整落地流程二者配合使用启用 Entra ID 登录风险检测在Entra Admin Center Protection Identity Protection Risk Detections中启用风险检测重点关注 Anomalous Token、Token Issuer Anomaly、Unfamiliar Sign-in、Impossible Travel、Malicious IP Address、Suspicious Browser 等与令牌窃取直接相关的检测项并配置基于风险的条件访问策略——“高风险登录阻断”“中风险登录要求 MFA 改密”。启用 Token Protection预览通过条件访问策略将会话令牌与设备绑定Windows 平台 合规设备/混合 Azure AD 加入设备访问令牌被密码学绑定到设备 TPM攻击者在其他设备上重放令牌会被拒绝。在登录日志中检索令牌重放指标使用 KQL 在 Sentinel/Log Analytics 中检测“令牌签发地与使用地不一致”“一小时内多地登录”“deviceCode 认证协议滥用”“同一 CorrelationId 多 IP”等模式。调查与响应通过 Microsoft Graph PowerShell 撤销会话Revoke-MgUserSignInSession、强制改密Update-MgUser、审查并移除恶意 OAuth 授权Get-MgUserOauth2PermissionGrant/Remove-MgOauth2PermissionGrant、排查可疑企业应用Get-MgServicePrincipal与邮件转发规则Get-MgUserMailFolderRule。启用持续访问评估CAE让令牌撤销在数分钟内生效而不是等待 60–90 分钟的令牌自然过期账户被禁用/删除、密码变更、MFA 启用、管理员撤销刷新令牌、Identity Protection 检测到高风险、网络位置违反条件访问策略等关键事件都会立即触发令牌撤销。配置 Defender for Cloud Apps 会话策略例如“阻止未托管设备使用失窃令牌下载文件”“5 分钟超过 10 次下载的批量下载行为告警”用于实时会话监控与阻断。MITRE ATTCK 映射将检测到的行为映射到 ATTCK 技术编号便于与威胁情报、SOC 剧本和覆盖率矩阵对齐技术描述T1528窃取应用程序访问令牌Steal Application Access TokenT1550.001使用替代认证材料应用程序访问令牌复用Application Access Token reuseT1078.004有效账户云账户Cloud Accounts从 SKILL.md 的 frontmatter 看该技能还关联了 T1530从云存储收集数据、T1537转移到云账户、T1580云基础设施发现并进一步映射到 MITRE Fight Fraud FrameworkF3 v1.1的欺诈战术——例如 F1004使用被盗会话 Cookie 访问、F1006账户接管、T1539窃取 Web 会话 Cookie、T1557中间人、T1185浏览器会话劫持覆盖initial-access与positioning两个战术。关于 F3 的映射规范可参考 docs/mitre-f3-mapping.md。若需可视化本仓库的 ATTCK 覆盖情况可将 mappings/attack-navigator-layer.json 导入 MITRE ATTCK Navigator 查看其中蓝色深浅代表技能覆盖密度浅蓝 1–2 个技能引用、中蓝 3–5、深蓝 6–10、最深 11。验证清单与适用边界实践该方案时建议逐项确认对应 SKILL.md 的 Verification 章节Identity Protection 风险检测已启用并产生异常令牌活动告警条件访问策略已阻断高风险登录、对中风险要求 MFAToken Protection 策略已在试点组生效从未注册设备访问应失败KQL 查询在 Sentinel 中对合成令牌异常事件能返回结果CAE 已启用并验证撤销会话后数分钟内访问被阻断Defender for Cloud Apps 会话策略已监控下载活动设备码流程已通过条件访问限制阻断或要求合规设备响应手册包含令牌撤销、改密与 OAuth 授权审查步骤对被攻陷账户的邮件转发规则与 OAuth 应用授权已完成审计。需要强调的是本文方案仅适用于云身份令牌OAuth/OIDC失窃场景本地 Kerberos 票据攻击Pass-the-Ticket、Golden Ticket不在本技能范围内应使用 Active Directory 专项调查技术。另外使用本仓库的 scripts/agent.py 前需确认环境已安装requests可选依赖该脚本默认以内置演示数据运行正式使用请通过--log-file传入经 Graph/Okta API 拉取的真实登录事件 JSON。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表