Ibrahimx1bh/oauth-silent-auth-detections

GitHub: Ibrahimx1bh/oauth-silent-auth-detections

OAuth静默认证滥用检测工具

Stars: 0 | Forks: 0

# OAuth 静默认证滥用 - 检测规则 识别 OAuth/OIDC `prompt=none` 静默认证用于钓鱼重定向滥用的检测内容。 ## 背景 攻击者在自己的租户中注册 OAuth 应用程序,配置一个指向攻击者控制的基础设施的跳转 URI,并通过钓鱼邮件分发包含 `prompt=none` 的授权 URL。当受害者点击链接时,身份提供者尝试静默认证失败,并通过符合协议的错误重定向将受害者重定向到攻击者的端点。初始 URL 来自受信任的域名(`login.microsoftonline.com`),绕过 URL 声誉检查并减少用户怀疑。 完整技术分析:[Medium 文章](https://medium.com/@ibrahimxibh/oauth-silent-authentication-abuse-in-microsoft-entra-id-the-protocol-mechanics-behind-modern-7cd2004829df) ## 检测策略 ### 为什么电子邮件中的 `prompt=none` 是最强信号 静默 SSO 请求(`prompt=none`)由客户端库(MSAL.js、ADAL.js)程序化生成,并在隐藏的 iframe 或后台 HTTP 请求中执行。它们**永远不会**作为可点击的电子邮件链接传递。 没有合法的工作流程会让用户收到包含 `prompt=none` 授权 URL 的电子邮件。交付机制本身就是一个异常。这使得电子邮件层检测有效,无需额外的关联。 ### Entra ID 登录日志实际显示的内容 POC 测试确认了当用户点击 `prompt=none` 钓鱼链接时,受害者租户的登录日志中出现了以下行为: | 字段 | 值 | 备注 | |---|---|---| | 登录类型 | **非交互式** | 在交互式登录日志中不可见 | | 应用程序名称 | 攻击者控制 | 攻击者命名应用程序的任何名称 | | 资源 | 依赖于作用域 | POC 显示了具有 openid/profile/User.Read 作用域的 Microsoft Graph | | 状态 | **中断** | 不是 "失败" | | 错误代码 | 不可见 | 日志条目中没有错误代码 | 这意味着在身份层上的检测不能依赖于错误代码。它必须依赖于**应用程序 ID**(攻击者无法伪造的字段)与批准的应用程序基线进行交叉引用。 ## 检测矩阵 | # | 文件 | 层 | 信号 | 描述 | |---|---|---|---|---| | 1 | `email-prompt-none.kql` | 邮件网关 | **关键** | 电子邮件传递的 OAuth URL 中的 `prompt=none` | | 2 | `email-redirect-url-misdirection.kql` | 邮件网关 | **关键** | `prompt=none` + 非标准 `redirect_url` 参数 | | 3 | `identity-unfamiliar-appid.kql` | 身份 | **中等** | 非熟悉的应用程序 ID 在非交互式日志中的中断状态 | | 4 | `identity-campaign-detection.kql` | 身份 | **中等** | 在短时间内多个账户中的相同应用程序 ID | | 5 | `oauth-silent-auth-email.yml` | 邮件网关 | **关键** | Sigma:电子邮件 URL 中的 `prompt=none` | | 6 | `oauth-redirect-url-misdirection.yml` | 邮件网关 | **关键** | Sigma:`prompt=none` + `redirect_url` 误导 | | 7 | `oauth-unfamiliar-appid.yml` | 身份 | **中等** | Sigma:非交互式登录中的不熟悉应用程序 ID | | 8 | `oauth-campaign-detection.yml` | 身份 | **中等** | Sigma:多个账户(活动)中的相同应用程序 ID | | 9 | `proxy-prompt-none-redirect.yml` | 网络 | **中等** | Sigma:OAuth 错误重定向到外部托管平台 | ## MITRE ATT&CK 映射 | 技术 | 名称 | 环境 | |---|---|---| | T1566.002 | 钓鱼:鱼叉式钓鱼链接 | 通过电子邮件传递的 OAuth URL | | T1078.004 | 有效账户:云账户 | 滥用 OAuth 应用程序注册 | | T1036.005 | 匿名:匹配合法名称或位置 | URL 来自受信任的 IdP 域名 | | T1071.001 | 应用层协议:Web 协议 | OAuth/OIDC 作为重定向机制 | ## 要求 | 查询 | 数据源 | |---|---| | KQL 1-2 | Microsoft Defender for Office 365(EmailUrlInfo、EmailEvents、UrlClickEvents) | | KQL 3-4 | Microsoft Sentinel(SigninLogs)或 Defender XDR(AADSignInEventsBeta) | | Sigma(电子邮件) | 具有电子邮件 URL 检查功能的 SIEM | | Sigma(身份) | 具有 Azure AD 登录日志摄取功能的 SIEM | | Sigma(代理) | 具有 HTTP Referer 和完整 URI 字段的 Web 代理日志 | ## 调整说明 - **邮件网关查询**需要最小的调整。查询 1 的误报率几乎为零,查询 2 的有效误报率为零。 - **身份查询**需要批准的应用程序 ID 基线。请将其作为 Sentinel 中的监视列表或参考表维护。随着新第三方集成上线,需要将它们添加到基线中。 - **身份查询需要进一步测试**。在受控 POC 测试中,观察到以下行为:中断状态、非交互式分类和 Microsoft Graph 资源,测试中使用了特定的作用域配置(openid、profile、User.Read)。行为可能因不同的攻击者作用域配置、租户条件访问策略或 Entra ID 更新而有所不同。首先作为狩猎查询运行,以在您的环境中建立基线噪声,然后再部署为自动警报。KQL 查询中的 ResourceDisplayName 过滤器被注释掉,Sigma 规则中省略了它,以避免错过使用不同作用域的攻击。 - **代理 Sigma 规则**是一个辅助信号,不应单独使用。与邮件网关和身份层检测进行交叉引用。 ## 参考 - [OAuth 静默认证滥用 - 完整技术分析](https://medium.com/@ibrahimxibh/oauth-silent-authentication-abuse-in-microsoft-entra-id-the-protocol-mechanics-behind-modern-7cd2004829df) - [OpenID Connect 核心版 1.0 - prompt 参数](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest) - [RFC 9700 第 4.11.2 节 - 授权服务器作为开放重定向器](https://www.rfc-editor.org/rfc/rfc9700#section-4.11.2) - [RFC 6749 - OAuth 2.0 授权框架](https://www.rfc-editor.org/rfc/rfc6749)
标签:子域枚举