授权码欺骗:俄罗斯黑客利用微软 OAuth 进行钓鱼

admin 2025年4月27日14:25:42评论5 views字数 9286阅读30分57秒阅读模式

扫码领资料

获网安教程

授权码欺骗:俄罗斯黑客利用微软 OAuth 进行钓鱼
授权码欺骗:俄罗斯黑客利用微软 OAuth 进行钓鱼

Track安全社区投稿~  

赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)

关键要点
  • • 自2025年3月初以来,Volexity 观察到多个俄罗斯威胁行为者密集攻击与乌克兰和人权相关的个人及组织。
  • • 这些近期攻击采用了一种新技术,目的是滥用合法的 Microsoft OAuth 2.0 认证流程。
  • • 攻击者伪装成多国欧洲官员,其中一起攻击甚至利用了一个被攻陷的乌克兰政府账户。
  • • 攻击者通过 Signal 和 WhatsApp 与目标联系,邀请他们参加或注册与欧洲各国政治官员的私人会议或即将举行的活动。
  • • 部分社会工程攻击试图诱导受害者点击托管在 Microsoft 365 基础设施上的链接。
  • • 主要策略是诱骗受害者提供 Microsoft 授权码,这使攻击者能够访问受害者账户,将攻击者控制的设备加入 Entra ID(前身为 Azure AD),并下载邮件及其他账户相关数据。

自2025年3月初起,Volexity 观察到多个疑似俄罗斯威胁行为者正在展开高度定向的社会工程攻击,目标是获取特定人员的 Microsoft 365(M365)账户访问权限。这些活动紧随 Volexity 于2025年2月 发布的报告,当时披露了俄罗斯威胁行为者利用设备码认证钓鱼攻击用户与组织的行为。

在该报告发布后,虽然威胁者使用设备码钓鱼的情况有所减少,但 Volexity 观察到他们正在转向滥用其他合法的 M365 OAuth 认证流程的新攻击方式。这些近期攻击高度依赖与目标的一对一互动,因为攻击者不仅需要说服目标点击链接,还要让他们返回 Microsoft 生成的授权码。

Volexity 目前正在追踪至少两个被认为是俄罗斯的威胁行为者,分别标记为 UTA0352 和 UTA0355。这些行为者被认为是此次攻击的幕后主使。可以合理推测,这些威胁行为者与 Volexity 早前在 2025 年 1 月和 2 月披露的设备码认证钓鱼攻击中的行为者存在重叠。本博客将详细介绍这些威胁行为者使用的不同技术手法,以及它们攻击活动中的共性,概括如下:

  • • 攻击者通过消息应用(如 Signal、WhatsApp)联系受害者,邀请其参加一次关于乌克兰冲突的视频会议;
  • • 一旦受害者回应,攻击者便发送一个 OAuth 钓鱼链接,声称这是加入会议所必需的;
  • • 受害者被要求将 Microsoft 生成的 OAuth 授权码返回给攻击者;
  • • 如果受害者共享了授权码,攻击者即可生成访问令牌,从而访问受害者的 M365 账户。

通向虚假的外交渠道

2025 年 3 月,Volexity 得知其部分客户的员工收到来自 Signal 和 WhatsApp 的可疑信息。被攻击的员工大多供职于支持人权的非政府组织,且具有处理与乌克兰相关问题的专业经验。这些消息自称来自欧洲政治官员,主题围绕讨论乌克兰相关事务展开。在每个已观察到的案例中,攻击者的“行动号召”是安排目标与其所声称代表国家的政治官员或大使进行会面。

如果目标回应消息,谈话通常很快会转向安排会议时间。为了避免引起怀疑,攻击者有时会以“大使当前不可用”为由,将会议安排在数天之后。

随着约定时间临近,这位所谓的欧洲政治官员会再次联系目标,并分享会议参与指南。这些指南通常以文档的形式通过消息平台发送,随后会附带一个加入会议的链接。这些链接均指向 Microsoft 365 的官方登录门户 —— login.microsoftonline.com

不出所料,这些链接实际上是钓鱼攻击的一部分,指南要求用户将某个授权码发回攻击者。但与此前观察到的攻击不同,这些 URL 并非 使用设备码认证流程,而是利用了与微软多个合法一方应用相关的其他 OAuth 2.0 认证流程。Volexity 将最早观察到的这批攻击归因于其标记为 UTA0352 的疑似俄罗斯威胁行为者。

在这些攻击中,单纯点击链接并不足以导致账户被攻陷。攻击者还需要受害者返回授权码。被点击的链接会跳转至微软官方页面,并在此过程中生成一个 Microsoft 授权码,该码可能会出现在 URI 中,或在某些情况下出现在重定向页面的正文中。攻击者随后可利用该授权码生成访问令牌,从而访问对应账户。在多个案例中,攻击者要求受害者通过电子邮件、WhatsApp 或 Signal 发送该授权码。

Volexity 观察到 UTA0352 冒充了以下国家或组织的人员身份:

  • • 乌克兰驻欧盟使团
  • • 保加利亚共和国驻北约常驻代表团
  • • 罗马尼亚驻欧盟常驻代表团

根据其他观察结果,Volexity 还认为 UTA0352 可能也冒充了 波兰 官员,但这一点尚未直接证实。下方图片展示了 UTA0352 在 Signal(左图)和 WhatsApp(右图)上冒充不同身份发送的初始消息示例。

授权码欺骗:俄罗斯黑客利用微软 OAuth 进行钓鱼
img

通过 Visual Studio Code 进行钓鱼攻击

2025 年 3 月中旬,Volexity 的一位客户收到了来自 UTA0352 的联系,攻击者自称是来自 罗马尼亚政府 的官员,试图安排客户与其“大使”进行会面。一旦用户开始互动,攻击者便发送了一条信息,称需要通过其托管在“安全服务器”上的网页系统——扩展验证系统(EVS) 来安排会议。

该信息还附带了一个 PDF 文件,文件中包含了用户应期待的内容及如何加入会议的说明。随后,攻击者向目标发送了一个经过恶意构造的 URL 链接。

下图展示的是该 PDF 文件的两个页面,文件伪装成由罗马尼亚外交部发布的官方文件。

授权码欺骗:俄罗斯黑客利用微软 OAuth 进行钓鱼
img

UTA0352 分享的 URL 格式如下:

https://login.microsoftonline[.]com/organizations/oauth2/v2.0/authorize?state=https://mae.gov[.]ro/[REMOVED]&client_id=aebc6443-996d-45c2-90f0-388ff96faa56&scope=https://graph.microsoft.com/.default&response_type=code&redirect_uri=https://insiders.vscode.dev/redirect&login_hint=<EMAIL HERE>

该 URL 格式被 M365 用于通过其 OAuth 流程登录 Microsoft 原生/第一方应用程序以及第三方应用程序。URL 中的关键参数在 Microsoft OAuth 官方文档 中有详细说明;为方便起见,以下是对这些参数的简要介绍:

Parameter Description
state
A value to denote the user’s state in the application before the request occurred
client_id
The application that made the request
scope
The access level requested
response_type
The method used to send the token back
redirect_uri
The handling URI to receive the generated token afterwards

如果用户已经使用 login_hint 参数中指定的账户登录,他们将会被无缝重定向。如果用户尚未完成身份验证,则会被提示登录其 M365 账户。完成身份验证后,用户会被重定向至浏览器版本的 Visual Studio Code,托管于 insiders.vscode.dev

该 URL 会将用户重定向至 /redirect 页面,该页面的设计目的是接收来自 M365 的登录参数,包括 OAuth。当用户被重定向至此页面时,将会看到如下对话框:

授权码欺骗:俄罗斯黑客利用微软 OAuth 进行钓鱼
img

通过 Visual Studio Code 对话框显示的代码是一个 OAuth 2.0 授权码,其有效期最长可达 60 天。该授权码可提交给 Microsoft 的 OAuth 流程以换取访问令牌(Access Token),进而用于访问 M365 Graph API。由于最初的请求申请了用户的默认访问权限,因此任何获得该授权码的人都将拥有与用户相同的 全部资源访问权限。需要注意的是,该代码也会出现在地址栏的 URI 中。Visual Studio Code 的这个页面似乎被特别设置,以便更方便地提取和共享该代码,而大多数其他实例中只会显示空白页面。

主标题下方显示的消息使用了前一个请求中的 state 值,该值通常用于指示身份验证请求的来源。然而,正如 Microsoft 文档中所描述的,这个值是任意的。是否使用以及如何使用该值,完全取决于处理该请求的应用程序(在本例中是 Visual Studio Code)。UTA0352 滥用了这一参数,使其看起来像是在尝试登录一个罗马尼亚政府服务系统。这种手法在其他钓鱼攻击中也被反复使用,目的是让链接看起来更合法可信。

下图展示了攻击者利用 Visual Studio Code 第一方应用程序攻击用户时所遵循的整体流程。该流程与后续观察到的其他攻击略有不同,但整体上非常相似。

授权码欺骗:俄罗斯黑客利用微软 OAuth 进行钓鱼
img

更早版本的 Visual Studio Code 钓鱼攻击

除了上文描述的钓鱼攻击外,Volexity 还发现了一个被认为是 UTA0352 早期使用的钓鱼活动变体。在这次早期的攻击活动中,使用了如下格式的 URL:

hxxps://login.microsoftonline[.]com/common/oauth2/authorize?redirect=https://zoom.us/j/<snip>&client_id=aebc6443-996d-45c2-90f0-388ff96faa56&resource=https://graph.microsoft.com&response_type=code&redirect_uri=https://vscode-redirect.azurewebsites.net&login_hint=<removed>&ui_locales=en-US&mkt=en-US&client-request-id=<removed>

该 URL 与前文所述的不同之处在于,它采用的是 AzureAD v1.0 规范的格式,而不是最初观察到的攻击中使用的 v2.0 规范。以下是两者在 URL 参数上的关键差异:

Parameter Initially Observed Campaign Earlier Campaign Variation
redirect_uri
Usesinsiders.vscode.dev
Uses vscode-redirect.azurewebsites.net.
resource
This is the scope parameter in the Oath 2.0 flow
This is the AzureAD v1.0 field used to define the resource for which access is required
redirect
Unused in the previously documented campaign
This parameter is included in the request to make it look like the user may be logging into a Zoom call, but it is unused in AzureAD v1.0 authentication workflows

早期版本的攻击活动启动的流程与最初观察到的攻击相似。如果用户已登录,他们将被重定向到 vscode-redirect.azurewebsites.net,该地址随后会重定向到本地 IP 地址 (127.0.0.1)。当这种情况发生时,不会显示包含授权码的用户界面,而是授权码仅通过 URL 提供。最终的 URL 格式如下:

hxxp://127.0.0.1:9217/callback?code=1.ARsAIGLD9ki0FE63WmhS-KbgFENkvK5tmX[snipped]D&session_state=[uuid]

这会在用户的浏览器中渲染为空白页面。攻击者必须要求用户分享浏览器中的 URL,以便攻击者获取授权码。

UTA0355:通过被攻击的乌克兰政府账户进行钓鱼

然后,在 2025 年 4 月初,Volexity 发现了另一起新的 Microsoft 365 OAuth 钓鱼活动。这次,攻击活动从一个合法的、被攻击的乌克兰政府电子邮件账户发送的电子邮件开始,随后通过 Signal 和 WhatsApp 发送了后续消息。电子邮件和后续消息邀请目标参加一个关于乌克兰努力“调查和起诉暴行犯罪,以及该国与国际伙伴在这一领域的合作”的视频会议。

与 Volexity 之前报告的 OAuth 钓鱼技术类似,这次活动的最终目的是利用合法的 Microsoft 365 身份验证 API 获取受害者的电子邮件数据。然而,在这次活动中,攻击者使用盗取的 OAuth 授权码将受害者的设备永久注册到受害者的 Microsoft Entra ID(前身为 Azure Active Directory)中。设备注册到 Entra ID 后,攻击者还需要进一步通过社交工程让受害者批准两因素身份验证请求,以便访问受害者的电子邮件。

尽管这次活动使用了与 UTA0352 使用的技术类似的手段,Volexity 目前将这些攻击分别追踪,并将该活动归因于一个被标记为 UTA0355 的威胁演员。

多阶段社会工程学

与 Volexity 观察到的 UTA0352 攻击不同,这次新的钓鱼活动首先通过电子邮件发送给多个目标。电子邮件邀请目标参加一个视频会议,并附有活动详情。邮件中没有包含任何链接或指示,但确实询问收件人是否有兴趣参加。然而,尽管初步接触是通过电子邮件进行的,Volexity 发现 UTA0355 很快通过 Signal 或 WhatsApp 跟进了每个收件人,提到了之前发送的电子邮件,可能是为了增加其信息的可信度。

Volexity 认为,UTA0355 只向那些它有其他联系方式的目标发送了来自被攻击的乌克兰政府账户的电子邮件。这可能是为了促进实时对话,协助社交工程工作,并将信息保存在电子邮件之外,避免其更容易被发现或后期审查。

下图展示了发送给多个目标的初始电子邮件。

授权码欺骗:俄罗斯黑客利用微软 OAuth 进行钓鱼
img

在这封电子邮件发送给多个目标后不久,UTA0355 通过 Signal 或 WhatsApp 发送了提及该电子邮件的后续消息;下面是一个示例。

授权码欺骗:俄罗斯黑客利用微软 OAuth 进行钓鱼
img

OAuth 网络钓鱼和设备注册服务

与其他 OAuth 网络钓鱼技术类似,本次攻击中的技术涉及与受害者的直接互动,要求他们点击链接并将代码返回给攻击者。攻击者随后利用该代码非法访问 M365 资源。

受害者互动

如果受害者回应了 UTA0355 通过 Signal 或 WhatsApp 发送的消息,他们将收到一个 M365 登录 URL 进行点击;该 URL 格式如下所示:

https://login.microsoftonline.com/common/oauth2/authorize?url=https://teams.microsoft.com/[redacted]&client_id=29d9ed98-a469-4536-ade2-f981bc1d605e&resource=01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9&response_type=code&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2FWebApp%2FCloudDomainJoin%2F8&amr_values=ngcmfa&login_hint=<[email protected]>

在受害者通过共享的 Microsoft URL 登录后,他们将被重定向到一个新的 URL,该 URL 中包含 OAuth 授权码。攻击者还附上了额外的说明,指示受害者在重定向发生后应分享他们在地址栏中看到的 URL。受害者浏览器生成并随后返回给 UTA0355 的 URL 格式如下:

https://login.microsoftonline.com/WebApp/CloudDomainJoin/8?code=[redacted]&session_state=[redacted]

通过与攻击者共享此 URL,受害者在不知情的情况下将交出所有需要验证其身份的信息。这与之前观察到和怀疑的其他攻击活动类似。同样,这需要目标点击链接并返回一个代码或 URL。然而,受害者仅被要求与合法的 Microsoft 365 服务进行互动,而这些服务用户本能地可能会认为是可信的。此外,对于用户来说,从地址栏或合法的 Microsoft 网页上分享数据可能不会立即显得显而易见,因此可能会导致攻击者获得对其 M365 账户的访问权限。

UTA0355 OAuth 滥用

受害者与攻击者共享的 URL 包含一个代码参数,内含 OAuth 授权码,该授权码将用于授予访问令牌。与之前的类似活动不同,初始登录请求的资源不是 Microsoft Graph API 的访问权限,而是设备注册服务。此服务被 Windows 用来将新设备加入到 Entra ID。攻击者将利用这一访问权限将名为 DESKTOP-**[已编辑]** 的新设备加入受害者的 Entra ID。Volexity 使用 ROADTools 项目 复制了这些步骤,并遵循了 这篇指南 创建了一个新的令牌,该令牌具有完全权限访问 Microsoft Graph API。该技术利用了 Entra ID API 设计中的漏洞,授予了比最初授予的访问权限更高的访问令牌。

在初步互动发生后,并且 UTA0355 已经将其设备注册到受害者的 Microsoft Entra ID(Azure AD)中,Volexity 观察到与受害者的额外互动。在此互动中,UTA0355 请求受害者批准一个双因素认证(2FA)请求,“以访问与会议相关的 SharePoint 实例”。这是绕过受害者组织设置的额外安全要求,以便访问其电子邮件所必需的。

受害者妥协后的活动

Volexity 高度确认,攻击者要求受害者批准 2FA 请求以访问电子邮件项目。在 Volexity 审查的日志中,初始设备注册在与攻击者互动后不久成功。第二天,UTA0355 设法让受害者批准其 2FA 请求,最终获得了访问电子邮件的权限。授权后,日志显示攻击者通过与新注册设备相关联的会话下载了目标的电子邮件。

登录活动、电子邮件访问和设备注册都使用了一个代理网络的客户端 IP 地址,该地址的地理位置与受害者所在位置相同。

检测相关活动

为了防止或检测这些攻击,Volexity 提出了以下建议:

1、考虑对 M365 登录活动进行警报,当 Visual Studio Code client_id 值 aebc6443-996d-45c2-90f0-388ff96faa5 与包含“Microsoft Graph”的 resourceDisplayName 一起使用时。根据你的环境和 Visual Studio Code 的使用情况,这可能是可行的,也可能不可行,因为合法用户也会使用该 client_id 登录。

2、考虑对以下 URL 格式发出警报(无论是嵌入在电子邮件中还是代理日志中)。请注意,URL 中的参数可以以任何顺序出现,并且

redirect_uri

值必须设置为

insiders.vscode.dev/redirect

vscode-redirect.azurewebsites.net

示例 URL:

https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?state=[任何_url]&client_id=aebc6443-996d-45c2-90f0-388ff96faa56&scope=https://graph.microsoft.com/.default&response_type=code&login_hint=[电子邮件]&redirect_uri=https://insiders.vscode.dev/redirect*
https://login.microsoftonline[.]com/common/oauth2/authorize?redirect=[任何_url]&client_id=aebc6443-996d-45c2-90f0-388ff96faa56&resource=https://graph.microsoft.com&response_type=code&redirect_uri=https://vscode-redirect.azurewebsites.net&login_hint=[电子邮件]&ui_locales=en-US&mkt=en-US&client-request-id=[已移除]

3、评估阻止访问 insiders.vscode[.]dev 和 vscode-redirect.azurewebsites.net 主机名的业务影响,并考虑实施这样的阻止措施。

4、教育用户关于通过安全消息平台建立的新联系人所带来的风险。用户必须理解验证通过 Signal、WhatsApp 或其他安全消息平台联系的联系人的重要性。验证应该通过其他途径进行,而不是信任通过未经请求或意外联系提供的信息。

5、考虑寻找新注册的设备,并与注册的 IP 地址关联,查找低信誉或代理 IP 地址出现在

ClientIPAddress

字段中:

  • • 请注意,通过 Microsoft Graph API 持续访问用户电子邮件时,ClientIPAddress 字段不会包含攻击者的 IP 地址;相反,它包含的是 Microsoft 的 IP 地址。这种行为似乎没有文档记录,且与安全分析相悖。
  • • 尽管攻击者活动不能轻易通过 ClientIPAddress 字段进行追踪,Volexity 通过与攻击者注册设备相关联的唯一 deviceId 值,成功追踪了攻击者活动。
  • • 持续访问的 ClientAppID 字段可能与用户的典型电子邮件客户端不同,因为它将使用一个由攻击者创建的 AppID。

6、考虑实施条件访问策略,仅允许已批准或已管理的设备访问组织资源。这可以有效防止设备注册和未经授权访问其他资源,例如电子邮件。

  • • 截至发布时,Volexity 尚未发现通过条件访问策略阻止特定 Microsoft 第一方应用程序的方法。条件访问可以用于阻止对所有服务的访问,针对不符合要求的设备;然而,在短时间内对组织实施这一策略可能会面临挑战。
  • • 还应注意,Microsoft Teams 是 Volexity 观察到的 UTA0352 目标之一。对于大多数组织来说,阻止这一点可能不现实或不可行,即使可能也不太可能。
获取更多精彩内容,尽在Track安全社区~:https://bbs.zkaq.cn

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。

原文始发于微信公众号(白帽子左一):授权码欺骗:俄罗斯黑客利用微软 OAuth 进行钓鱼

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月27日14:25:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   授权码欺骗:俄罗斯黑客利用微软 OAuth 进行钓鱼https://cn-sec.com/archives/4006836.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息