denniskniep/DeviceCodePhishing

GitHub: denniskniep/DeviceCodePhishing

该项目利用 headless 浏览器自动化 Device Code Flow 钓鱼流程,突破 token 有效期限制并绕过包括 FIDO 在内的所有认证保护,主要用于安全研究与红队评估。

Stars: 204 | Forks: 27

# DeviceCodePhishing ## TL;DR; 2025年9月19日更新:Microsoft 已针对普通的 Entra 租户修复了此问题,但对于联合 Entra 租户仍然可行。 这是一种利用众所周知的 Device Code 钓鱼手法的新型技术。 它会在受害者打开钓鱼链接的瞬间动态启动流程,并立即将其重定向到认证页面。 后台的 headless 浏览器会自动将生成的 Device Code 输入到网页中。 这突破了 10 分钟的 token 有效期限制,并免除了受害者手动执行这些步骤的需要,将攻击效率提升到了一个新的水平。 Device Code 钓鱼之所以尤其危险,是因为没有任何认证方式(甚至是 FIDO)能够防范此类攻击。 此外,受害者交互的是他们所期望的原始网站,这使得基于可疑 URL 来检测攻击变得不可能。 ## 编辑:现在对普通 Entra 租户不再有效,但是... 联合 Entra 租户仍然受此技术影响。应用程序现在会执行预检,以确定指定的域名是否属于联合租户。如果是,则继续执行,并立即将用户重定向到联合登录页面。 ## 演示 https://gist.github.com/user-attachments/assets/bf6d1c2d-7199-4394-824d-e6f57e8136a2 ## 描述 DeviceCodePhishing 是一款利用 Device Code Flow 的高级钓鱼工具。 它可用于钓鱼 access-token,这反过来又允许绕过双因素认证保护,包括专门使用 FIDO 进行认证的账户。 虽然存在其他用于自动化 device code 钓鱼攻击的工具,但它们通常具有某些限制, 例如要求攻击者说服受害者在严格的 10 分钟内打开 URL 并输入代码。 该工具的目标是通过使用 headless 浏览器自动化该过程来克服这些限制,该浏览器会在受害者点击钓鱼链接后立即发起攻击。 这种攻击技术甚至比攻击者中间人 (AitM) 代理更危险,因为用户**在原始网页上输入他们的凭据**,这使得几乎不可能基于可疑 URL 检测到钓鱼企图。 此外,由于会话可能仍然处于活动状态,受害者可能不需要进行交互式认证。 因此,受害者几乎没有时间意识到这不是合法的操作。 更不用说 Device Code Flow 破坏了 FIDO 的抗钓鱼能力! 目前,该工具仅限于针对 Microsoft Azure Entra 用户,但其底层技术并不局限于任何特定供应商。 欲了解更多详情,请查看博客文章:[尽管有 FIDO 仍可进行钓鱼,利用基于 Device Code Flow 的新型技术](https://denniskniep.github.io/posts/09-device-code-phishing) ## 工作原理 1. 攻击者向受害者发送一个 URL 2. 受害者打开该 URL 3. 打开 URL 后,会启动一个 headless 浏览器,执行以下自动化步骤: - 使用 `` 和 `` 启动 Device Code Flow - 打开 device-code 网页并输入相应的 user-code - device-code 网页转发到用于交互式认证的 URL(通过点击“无法访问你的账号”并立即点击取消按钮返回,参见[此处](https://github.com/denniskniep/DeviceCodePhishing/blob/main/pkg/entra/devicecode.go#L101)) - 将用于交互式认证的 URL 作为重定向返回给受害者 4. 受害者被重定向到认证 URL 5. 受害者完成认证 6. 攻击者通过认证 可以在[此处](#demo)查看该流程的演示视频。 ## 安装 从 [Releases](https://github.com/denniskniep/DeviceCodePhishing/releases) 下载合适的二进制文件 或者使用 go 通过以下命令安装: ``` go install github.com/denniskniep/DeviceCodePhishing@v1.1.0 ``` ## 启动钓鱼服务器 使用 `--domain` 指定 TenantDomain。默认情况下,它使用 AuthenticationBroker ClientId `29d9ed98-a469-4536-ade2-f981bc1d605e` 运行。如果想定义不同的 clientId 或自定义 userAgent,请使用这些参数 ``` DeviceCodePhishing server --domain --client-id --user-agent ``` 有关语法或如何使用参数的更多帮助,请执行: ``` DeviceCodePhishing server --help ``` ## 使用 打开 URL: http://localhost:8080/lure ## Azure Entra ClientIds | ClientId | Description | |--------------------------------------|---------------------------------| | 29d9ed98-a469-4536-ade2-f981bc1d605e | Microsoft Authentication Broker | | 9ba1a5c7-f17a-4de9-a1f1-6178c8d51223 | Microsoft Intune Company Portal | 提示:使用 Microsoft Intune Company Portal 绕过 Intune 合规设备 Conditional Access Policy([更多详情](https://i.blackhat.com/EU-24/Presentations/EU-24-Chudo-Unveiling-the-Power-of-Intune-Leveraging-Intune-for-Breaking-Into-Your-Cloud-and-On-Premise.pdf)) ## 使用获取的 token 的后续步骤 一旦成功获取 token,您就可以将它们与其他攻击工具一起使用,例如: * https://github.com/dafthack/GraphRunner * https://github.com/f-bader/TokenTacticsV2?tab=readme-ov-file#azure-json-web-token-jwt-manipulation-toolset * https://github.com/secureworks/family-of-client-ids-research ## 自行构建 ``` go build main.go ``` ``` ./main server ``` ## 使用 Docker 运行 ``` docker run -p 8080:8080 ghcr.io/denniskniep/device-code-phishing:v1.1.0 ``` ## 使用 Docker 自行构建并运行 ``` docker build . -t device-code-phishing ``` ``` docker run -p 8080:8080 device-code-phishing ``` ## 免责声明 仅作为教育内容提供!
标签:EVTX分析, 安全攻防, 日志审计, 网络调试, 自动化, 请求拦截