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分析, 安全攻防, 日志审计, 网络调试, 自动化, 请求拦截