攻击 Azure,Azure AD 及 PowerZure 介绍 | 申博官网
登录
  • 欢迎进入Sunbet!
  • 如果您觉得Sunbet对你有帮助,那么赶紧使用Ctrl+D 收藏Sunbet并分享出去吧
  • 您好,这里是Sunbet!

攻击 Azure,Azure AD 及 PowerZure 介绍

申博_安全预警 申博 17次浏览 已收录 0个评论

摘要

· 解释 Azure 的组件以及它们如何适应现代 IT 环境

· 从攻击性的角度解释 Azure 内部的某些东西是如何被利用的

· 介绍 PowerZure 项目,并解释它如何帮助对 Azure 进行攻击性操作

· https://github.com/hausec/PowerZure

背景

Azure 2010年以“ Windows Azure”的名字发布,并在2014年更名为微软 Azure” ,以暗示 Azure 不仅涵盖 Windows 产品,还涵盖了 Azure 资源管理器(Azure RM) Azure 活动目录(Azure AD)的主要功能。 它最初是作为平台即服务(platform as a ServicePaaS)发展起来的虚拟机(Virtual MachinesVMs)、存储、 WebApps SQL 数据库,但现在已经发展成为基础设施即服务(Infrastructure as a ServiceIaaS)和软件即服务(Software as a ServiceSaaS) ,提供超过600服务

 攻击 Azure,Azure AD 及 PowerZure 介绍

1: Azure 的产品概述

当前 Azure 的实现通常包括使用上面所示的几个组件,这些组件将被突出显示。

组件

Azure 的架构是复杂的,因为它有几个组成部分。 有几个组件是必须理解的,因为它们在企业中被普遍使用。

企业

这代表了 Azure 的全局账户。 它是企业拥有并允许访问订阅、租户和服务的唯一身份。

租客

租户是企业 Azure 的实例。 一个企业可以有多个租户。 这种情况经常发生在地理上相隔甚远的公司或子公司。 访问企业中的一个租户并不能访问另一个租户。 一个类比是租户类似于 Active Directory 中的 Forests,其中可以建立信任( Azure AD ) ,但这不是默认的,必须进行配置。

订阅

订阅是你获得 Azure 服务(Azure 本身、 Azure AD、存储等)的途径。 订阅经常被划分为商业用途,例如订阅产品网络应用程序,订阅开发网络应用程序等等。

资源

资源是特定的应用程序,如 SQL 服务器、 SQL DB、虚拟网络、run-book、帐户等。

资源组

资源组是存放资源的容器。 业务通常有多个资源组,这取决于它们对资源的使用情况。

Runbooks

Runbooks Azure 自动化服务的一部分,支持 PowerShell Python (2.7)脚本语言。 它们允许在 Azure 中实现操作的自动化,例如一次启动多个虚拟机。 Runbooks 内部有可能的攻击载体,将在后面介绍。

Azure 活动目录

Azure 活动目录(Azure AD)是云环境中的目录服务 它与本地活动目录有很多不同之处,后面也会讲到。

Azure AD Connect

Azure AD connect 是实际上与 Azure AD 进行本地连接的工具。 它具有哈希同步和联邦(在租户之间)等特性来链接到内部 AD

服务主体

Azure 服务主体是用户创建的应用程序、服务和自动化工具用来访问特定 Azure 资源的安全标识。 可以将其视为具有特定角色的用户标识”(登录和密码或证书) ,并严格控制访问资源的权限。 它只需要能够做特定的事情,不像一般的用户身份。 如果你只授予它执行其管理任务所需的最低权限级别,则可以提高安全性。 例如,组织可以将其部署脚本分配给作为服务主体运行经过身份验证的脚本。

架构

下面展示了 Azure 架构的可视化。

攻击 Azure,Azure AD 及 PowerZure 介绍

图2: 在一个单一租户设置中对 Azure 架构的可视化

AzureAD

Azure AD 不能替代本地AD 它主要是一个针对来自云端的 AD 的管理平台(重置密码、创建用户、将用户添加到组中等等) 本文介绍了一些有趣的攻击路径,这些路径也可能影响到本地 AD

Azure AD 和本地 AD 有几个明显的区别。 Dirk-jan Troopers 2019 的演讲中强调了主要的不同之处,总结如下:

 攻击 Azure,Azure AD 及 PowerZure 介绍

图3:https://troopers.de/downloads/troopers19/TROOPERS19_AD_Im_in_your_cloud.pdf

将本地活动目录集成到 Azure AD、密码散列同步(PHS)、传递身份验证(PTA)和联邦服务(ADFS)主要有三种方法。 PHS PTA 都有与之相关的潜在攻击载体。

密码散列同步

使用密码散列同步(Password Hash SynchronizationPHS) ,来自内部 AD 的密码实际上被发送到云中,类似于域控制器通过复制在彼此之间同步密码的方式。 这是通过安装 AD Connect 创建的服务帐户完成的。

 攻击 Azure,Azure AD 及 PowerZure 介绍

4:https://docs.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs

这引入了一个独特的攻击路径,如果同步帐户被攻击,攻击者就有足够的特权,可能会导致内部 AD 林的被入侵,因为该帐户被授予了 DCSync 所需的复制权。 实际上,同步帐户密码不应该被知道,因此不会在任何地方登录,然而 Dirk-jan 在他的 Troopers 2019演示中,发现了如何从 SQL DB 中逆向帐户密码,并制作了一个脚本来完成这项艰难的工作。

传递身份验证

传递身份验证可以将密码保存在本地,但也允许用户拥有 Azure 和本地的单一密码。 例如,当用户在 web 上登录 Outlook 时,他们将自己的凭证输入 web 门户(Azure AD) ,然后 Azure 使用 PKI 对凭证进行加密,并将其发送给本地代理。 代理解密凭证并根据 DC 验证它,DC 返回一个状态给代理,然后转发回 Azure AD

攻击 Azure,Azure AD 及 PowerZure 介绍 

5:https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-pta

可以执行向 PTA 代理注入 DLL 并拦截身份验证请求,这些身份验证请求以明文形式包含凭据。 @_xpn_ 写了一篇关于这个的优秀博文。

活动目录联邦服务(ADFS)

 攻击 Azure,Azure AD 及 PowerZure 介绍

6:https://docs.microsoft.com/en-us/azure/active-directory/hybrid/whatis-fed

Azure AD 可以通过 ADFS 连接到本地。 使用 ADFSAzure AD 被设置为联邦的可信代理,并允许使用本地凭据登录。

访问控制

策略

Azure 中的策略并不是对访问的实际控制,它们是为了对资源执行不同的规则和效果。 例如,使用策略,你可以在订阅中限制 VM 的某些大小,或者确保 VM 中的 Administrators 组没有太多成员。 策略分为两部分: 策略本身和策略定义。 下面是一个例子。

 攻击 Azure,Azure AD 及 PowerZure 介绍

7: Azure 的策略分配页面

攻击 Azure,Azure AD 及 PowerZure 介绍

8: Azure 中选择要分配的特定策略

策略包含多个定义,其中定义的是审计 / 操作的内容。 因此,你可以创建一个定义并将其应用于多个策略。

基于角色的访问控制(RBAC)与角色

Azure 以角色的形式提供了一种更细粒度的 RBAC 安全控制。 它不同于策略,因为它关注不同范围的用户操作。 可以将你添加到资源组的参与者角色中,允许你对该资源组进行更改。 Azure 中的 RBAC 允许定制角色,但是许多企业依赖于内置角色。 角色列表及其访问权限可以在这里找到。

在本文中,我们只讨论以下角色:

· 全局管理员(Global Administrator

· 全局所有者(Global Owner

· 全局参与人(Global Contributor

· 全局查阅人(Global Reader

原因是有太多的角色需要深入研究,而且还有定制角色的附加选项。 Azure 门户中,你可以读取资源的安全设置,比如哪些角色可以访问或更改哪些资源。 如果你不想使用 CLI,可以在 Azure 门户中的 Identity Access & Management (IAM)选项卡中查看这些内容。

 攻击 Azure,Azure AD 及 PowerZure 介绍

9: Azure 中检查用户在 IAM 中的角色

资源可以有自己的特定访问控制列表(ACL) ,因此你可以添加一个用户,以便只能查看该特定资源。 需要注意的是,角色 / 权限是基于继承的,这意味着如果一个用户在资源组的 Contributor 角色中,他们将有效地对资源组中的每个资源进行 Contributor 访问。 即使它们只分配给该资源组中某个资源的Reader 角色,因为它们具有整个组的 Contributor 访问权限,它们也将成为该资源的 Contributor

攻击 Azure PowerZure 介绍

对于 Azure 中的几个组件,平台中有几种不同的攻击途径。 这些攻击载体利用错误配置或设计缺陷,其中一些在这里列出。 需要解决的主要问题是,测试 Azure 实例的目标是什么? 这将取决于工作的参与度和范围,所以对此有多种答案,然而在这篇文章中,目的是展示 Azure 内部某些角色和资源的含义,以及这些角色和资源是如何被滥用的,无论是从权限提升的角度还是从整体数据提取的角度来看,都有可能实现这个目标。

通过 CLI az 模块与 Azure 进行交互后,我意识到这是一个很好的机会,可以用脚本完成攻击者在 Azure 中可能完成的许多任务。 因此,我创建了 PowerZure,这是一个 PowerShell 项目,其目的是让与 Azure 的交互变得更加容易,同时增加攻击性能。

PowerZure

PowerZure 利用了 Azure az 模块,因为它是当前比 CLI 更受推荐的与 Azure 交互的方式。 它有几个可用的功能,并且根据它们的用途进行了分类:

· 强制性——在做任何事情之前你必须做的事情

· 操作—— Azure 中引起操作的功能

· 信息收集ーー在 Azure 上收集资源信息的功能

代码分析平台CodeQL学习手记(十五)

代码分析平台CodeQL入门(一) 代码分析平台CodeQL学习手记(二) 代码分析平台CodeQL学习手记(三) 代码分析平台CodeQL学习手记(四) 代码分析平台CodeQL学习手记(五) 代码分析平台CodeQL学习手记(六) 代码分析平台CodeQL学习手记(七) 代码分析平台CodeQL学习手记(八) 代码分析平台CodeQL学习手记(九) 代码分析平台CodeQL学习手记(十) 代码分析平台CodeQL学习手记(十一) 代码分析平台CodeQL学习手记(十二) 代码分析平台CodeQL学习手记(十三) 代码分析平台CodeQL学习手记(十四) 在前文中,我们为读者详细介绍了如何在命令行环境下构建CodeQL数据库、更新数据库,以及如何通过自定义查询来分析数据库。从本文开始,我们为读者介绍如何利用CodeQL的标准库来分析JavaScript和TypeScript代码中

· 秘密收集——专门用于收集秘密的功能

· 数据外泄——可以外泄数据的函数

出于篇幅和时间的考虑,我不会涵盖所有的功能,但是有必要解释一些功能的用途以及在引擎盖下发生的细节。

启动

由于 PowerZure 需要 az 模块,在导入 PowerZure ipmo .\PowerZure 之后。 如果还没有提供,它将下载模块。 然后在使用函数之前需要登录。 Azure CLI 有三种登录方式:

· 互动: 只要输入 az login,你就会被引导到一个登录页面。 如果使用 MFA,你必须通过交互模式登录

· 令牌缓存:Azure 的令牌缓存在

C:\Users\[Name]\.Azure\accessTokens.json

因此,在你登录一次之后,令牌将被缓存。 这个允许显示了访问令牌可能被盗取和重用的可能性。

3. 传递证书。 你可以通过 az login-u User-p Password 登录(如果未启用 MFA 并且你使用的是非个人账户)

一旦登录,PowerZure 将显示你的用户名、你可以访问的订阅、你的角色以及你的 Azure AD 组成员身份。 了解用户拥有什么样的角色对于弄清楚你可以在操作上做什么以及你可以在 PowerZure 中使用什么函数是非常关键的。 PowerZure 的帮助菜单特别列出了运行该函数所需的角色。 这纯粹是对内置角色的引用,因为定制角色是不可预测的。 要查看帮助菜单,可以执行命令 PowerZure -h

攻击 Azure,Azure AD 及 PowerZure 介绍

图10: PowerZure 的帮助菜单

此外,每个函数都可以与 Get-Help 一起使用,以获取信息或语法。

 攻击 Azure,Azure AD 及 PowerZure 介绍

11: Get-Help 显示函数的语法

在进一步操作 PowerZure 之前,如果有多个订阅,则必须设置默认订阅,以便脚本知道对哪个进行操作。 订阅可以通过:

Set-Subscription -Id [idgoeshere]

使用 PowerZure 登录 Azure 后,将打印订阅 id 如果只有一个订阅,则可以忽略该订阅。

角色滥用

每个 Global 角色(Administrator Owner Contributor Reader)将被分解为可以完成的任务、完成任务的必要性以及 PowerZure 的帮助方式。

Reader

Global Reader 角色对 Azure 中的组件(订阅、策略、资源等)具有只读访问权限,这本身就可以授予攻击者有用的信息。 例如,如果攻击者拿到了具有 Reader 特权的帐户,他们可以阅读 Runbooks Runbooks 属于自动化帐户资源。 下面是一个例子:

 攻击 Azure,Azure AD 及 PowerZure 介绍

使用 Reader 角色查看 Runbook 注意编辑开始是灰色的

这可以用来查看这些Runbooks 中是否有任何硬编码凭据。

作为一个 Reader,你还可以读取其他一些资源的详细信息,以搜索硬编码的凭据或其他可能有趣的信息,包括:

· 逻辑应用程序

· 部署模板

· 虚拟网络(可能用于查看新的目标 / 地址空间)

· 虚拟机上的导出模板

· Azure SQL 中的连接字符串

· 几个其他资源 / 应用程序的配置

作为一个 ReaderPowerZure 可以用来执行许多枚举操作。 例如,收集所有用户、组、角色等。 Runbooks 也可以读取。 PowerZure 中,Runbooks 可以通过 get-Runbooks 列出

 攻击 Azure,Azure AD 及 PowerZure 介绍

12: 列出 PowerZure 中的 Runbooks

从这里,可以通过 Get-Runbook 获得 Runbook

 攻击 Azure,Azure AD 及 PowerZure 介绍

13: 显示 Runbook 的内容

Reader 可在此浏览「资料搜集」一栏内的所有功能。

Contributor

Contributor 角色允许你在 Azure 中编辑资源和服务,而不仅仅是读取属性。 来自 Contributor 角色的几个攻击载体可以使用 PowerZure 进行开发。

· Execute-Command 将在目标虚拟机上执行提供的命令。 作为 Contributor,这些命令作为 SYSTEM 执行

攻击 Azure,Azure AD 及 PowerZure 介绍 

14: Win10虚拟机上执行‘ whoami’显示命令默认作为 SYSTEM 运行

· Execute-MSBuild 是一个函数,它将接受 MSBuild 有效负载并执行它。 默认情况下,使用 Azure 模板部署的 Windows 虚拟机已安装了 .Net 4.0

点击查看演示视频

15: Azure 托管的 VM 中的Execute-MSBuild 等待时间被缩短了

· Execute-Program 将上传并执行任何提供的文件。 它通过标识一个存储容器来工作,通过

· Get-AzVMCustomScriptExtension , 然后执行该程序

az vm run invoke。不幸的是,由于文件上传到 VM 的动态位置,整个过程确实需要花费一些时间(大约2分钟)

· Get-AllKeyVaultContents 将自动通过一个密钥库,检查访问,并打印结果的任何秘密,密钥,或证书。 默认情况下,密钥库只允许访问他们的所有者,但是如果一个用户有Global Contributor,他们可以编辑的访问策略的密钥库和给自己访问。 这是 PowerZure 自动完成的:

 攻击 Azure,Azure AD 及 PowerZure 介绍

16: 密钥库中的秘密

· Get-AllAppSecrets 将返回存储了所有密码或证书凭据的任何应用程序

· Get-AllSecrets 是一个全面的函数; 它将运行返回所有密钥库秘密 / 密钥 / 凭证、应用程序秘密和自动化帐户运行并作为凭证

Contributor还可以从虚拟机下载磁盘。

· Get-AvailableVMDisks 列出可下载的可用磁盘。这样就可以提供所需的信息

· Get-VMDisk 会生成一个下载该磁盘的 URL 不过,一个公平的警告是,磁盘的大小可能是巨大的

所有者

所有者可以做 Contributor 可以做的任何事情,但是他们有一个额外的特性: 他们也可以对他们拥有的资源给予许可。 这对攻击者来说特别有用,因为它提供了许多机会来创建资源的后门。 例如,如果所有者控制虚拟机资源,他们可以显式地授予该虚拟机上的任何用户所有者状态。 PowerZure 中,这是通过 Set-Role 函数实现的。 此外,现有的角色可以通过 Get-RolesUser 函数进行检查。

Set-Role -Role Contributor -User test@contoso.com -Resource Win10VMTest

 攻击 Azure,Azure AD 及 PowerZure 介绍

17: VM 资源的 Owner 角色添加用户

管理员

订阅的管理员可以做任何所有者可以做的事情,并且可以在 Azure AD 中创建额外的用户和组。 它们还能够为订阅分配角色。 PowerZure 可以利用管理员帐户创建一个带有 Runbook 的后门。

· Create-Backdoor 当执行这个函数时,将创建一个 Runbook Runbook 内部有一个指令,创建一个新用户并将其分配给 Owner 角色,然后生成一个 Webhook,该 Webhook 将输出一个 URI 然后可以将此 URI 传递到 Execute-Backdoor

· Execute-Backdoor 将执行 Runbook 攻击者将创建一个后门,以防当前正在使用的帐户的密码被更改。 管理员角色需要创建一个用户,为了在 Runbook 实现这一点,还应该创建一个新的共同管理员,以防管理员角色中的用户的凭证发生变化

用例

那么,如果可以通过 Azure Portal 在线实现所有这些,那么 PowerZure 的意义何在呢? 尽管如此,PowerZure 的编写是为了帮助许多在通过 Portal 枚举 Azure 时需要忍受的繁琐任务实现自动化和脚本化,例如列出每个组的所有用户。 该工具的用例是情景化的。 举个例子,如果渗透测试人员或 red-teamer 侵入了一台计算机,并且发现用户以前登录过 Azure CLI (对于系统管理员来说并不少见) ,而且他们的电脑中有 accessToken.Azure 文件。 然后渗透测试人员可以使用这个令牌并在 Azure 中模拟用户,在 Azure 中他们现在可以使用 Contributor 访问几个不同的 vm 此外,门户内的操作并不总是返回作业的全部详细信息。 通过 az 返回原始 JSONPowerZure JSON 抽象为相关的细节,或者在某些情况下显示原始输出。

最后的想法

在过去的几年中,Azure 的使用量急剧增加,而 AzureAD 正变得越来越流行。 我的观点是,它不能替代现有的 AD,但是我确实预见到微软会向 AzureAD 添加更多的功能,以允许企业与现有的交互。 这篇博文的目的是在平台上建立一个基础知识层,并建立一些常见的错误配置,这些错误配置可以被 PowerZure 利用。

这篇文章提到的一件事就是围绕这种策略的侦查。 Azure 内部的检测功能严重滞后于 Azure 服务,缺省的检测功能还有很多需要改进的地方。 因此,这需要更多的细节,我相信最好在后续的文章中详细说明。

资料来源

· PowerZure 项目 https://github.com/hausec/PowerZure

· NetSPI Karl Fosaaen

· https://notpayloads.blob.core.windows.net/slides/Azure-PrivEsc-DerbyCon9.pdf、· https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/

· https://dirkjanm.io/assets/raw/Im%20in%20your%20cloud%20bluehat-v1.0.pdf

· https://media.defcon.org/DEF%20CON%2027/DEF%20CON%2027%20presentations/DEFCON-27-Dirk-jan-Mollema-Im-in-your-cloud-pwning-your-azure-environment.pdf

· https://troopers.de/downloads/troopers19/TROOPERS19_AD_Im_in_your_cloud.pdf

· https://adsecurity.org/?p=4179

· https://blog.xpnsec.com/azuread-connect-for-redteam/ 

本文翻译自:https://posts.specterops.io/attacking-azure-azure-ad-and-introducing-powerzure-ca70b330511a:


Sunbet|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明攻击 Azure,Azure AD 及 PowerZure 介绍
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址