面向Azure 的云平台渗透技术研究*

2020-12-23 00:28王轶骏
通信技术 2020年12期
关键词:红队域名账户

袁 枫,王轶骏,薛 质

(上海交通大学,上海 200240)

0 引言

随着生产科技的快速发展、计算能力的不断提高,以分布式、虚拟化、云计算为核心技术的云平台及云服务器服务ECS、对象存储服务OSS、内容分发服务CDN 等各类衍生服务飞速兴起。云平台使用基于互联网的云计算技术为用户提供虚拟信息技术服务,其规模经济、快速供应、弹性服务等特点让用户能够以低廉的价格享受优质计算能力等虚拟资源服务,从而提高了企业和个人信息的使用效益。

在新冠肺炎的影响下,远程办公需求激增,这也直接刺激了云计算行业的发展。根据Flexera 公司的云计算趋势报告,20%的企业每年在公有云上花费超过1200 万美元,59%的企业由于疫情影响,对云服务的使用需求超过了预计。而微软推出的Azure 云平台更是被广泛采用,其企业普及率目前已经达到了69%,仅次于亚马逊的AWS 平台[1]。

随着云上解决方案被全球企业逐步采用,其所具有的分布式、虚拟化等技术特性和高度网络依赖性也带来了网络和数据方面新的安全风险,数据泄漏、非法滥用、针对服务和应用漏洞的攻击[2-3]等问题层出不穷,在此背景下云平台的安全研究显得尤为重要。

1 Azure 云平台介绍

1.1 Azure 的主要功能

无论是传统的虚拟化、存储等功能,还是前沿的区块链、IoT、AI 领域,Microsoft Azure 都有较为完备的解决方案。目前,Azure 平台为用户提供了丰富的服务种类[4-5],主要包括:

(1)计算服务:虚拟机服务、桌面虚拟化服务、容器服务等。

(2)应用服务:支持Web 和移动应用的App服务、Serverless 的Logic App 服务、支持大型应用的App Fabric 等。

(3)存储服务:支持四种基本存储类型的Azure Storage 服务和支持Redis、SQL Server 等多种数据库种类的数据库服务。

(4)分析服务:数据获取(Event Hub、Data Factory、Stream Analytics 等)、数据分析(HDInsight、Machine Learning 等)和数据存储(Data Lake)。

(5)网络服务:VPN 网关、应用程序网关、CDN、防火墙等。

(6)身份标识:Azure AD、Azure AD 外部标识等。

(7)管理服务:Key Vault 凭据管理器、自动化服务、Security Center 等。

1.2 Azure 的资源管理器模式

早期Azure 采用经典模型管理云端资产,在此模型中资源彼此独立,因此在管理同一个解决方案时需要手动将资源组织到一起[6]。

从2014 年起,Azure 引入了资源管理器模型,该模型通过“管理组、订阅、资源组和资源”四种范围管理了彼此有关联的资产,通过资源管理模板优化了解决方案的基础结构,通过资源间的依赖关系确保了资源部署的正确顺序,通过基于角色的访问控制(Role-Based Access Control,RBAC)限制了资源的访问权限[7],有效改进了Azure 云端资产的管理效率。

1.3 Azure 的访问控制

为了方便管理云上资源,Azure 采用了基于角色的访问控制(RBAC)。Azure RBAC 的核心思想在于角色的分配,其中包含了三个要素:安全主体(Security Principal)、角色定义(Role Definition)和对象范围(Scope),即安全主体在访问某个范围的对象时具备了哪些角色[8-9]。

安全主体表示发起资源访问请求的对象,可以是用户、组、服务主体或托管标识。用户表示Azure AD 中的一个用户账户;组代表一组用户,当给用户组分配角色时,组中每个用户都将继承得到该角色;服务主体是应用程序或服务发起资源访问时所使用的账户;托管标识用于云应用程序向Azure 服务进行身份认证[10]。

角色定义用于列出某个安全主体所拥有的权限。Azure 内置了多种角色,最基础的四种为:所有者(Owner)、参与者(Contributer)、读取者(Reader)和用户访问管理员(User-access-administrator)。所有者具有所管理资源的完全访问权限,参与者不拥有分配角色的权限,读取者可以查看资源但不能修改,用户访问管理员仅管理其他用户的访问权限。除了内置角色外,Azure 还允许用户创建自定义角色。

对象范围采用父子关系结构,包括管理组、订阅、资源组和资源四种范围,用于定义所分配对象的范围。父级别范围分配的角色也会顺次继承给子范围,同一范围内的角色采取叠加的计算方法。

2 信息收集

在渗透前期,信息收集是红队人员最常采用的手段之一。在对目标掌握线索较少的情况下,开展全面、准确的公开资产扫描往往能帮助红队建立对目标资产规模、业务类型等最直观的认识。在了解目标大致的服务类型后,针对单个服务或功能可以进行进一步的细化扫描,从而收集服务版本、已注册账户、敏感文件泄露或可利用的公开漏洞等信息,以建立目标的资产地图,并确立大致的攻击路径。

2.1 域名、服务信息收集

为了方便管理,Azure 云平台为常用的相关服务提供了用于便捷访问的子域名。当用户在Azure Portal 添加服务时,Azure 会自动分配一个相应的子域名用于服务的访问或管理[11]。目前已整理的Azure 专用子域名和服务的对应关系如表1 所示。

表1 Azure 平台子域名及对应服务表

例如,想探测Testdance 公司在Azure 平台托管了哪些服务,则需要在上述子域名前加上该公司的专属域名。若testdance.file.core.windows.net 域名存在,则代表有用户申请创建了名为testdance 的文件存储服务,且有可能归属该公司。

在确认了目标所使用的服务类型后,有以下几种思路可开展进一步利用。

(1)攻击Web 应用服务。如前所述,azurewe bsites.net 子域指向目标的Web 站点,安全人员可以利用可能泄露的敏感信息或已知的公开漏洞对此服务开展常规内容的渗透测试。

(2)查看数据库服务。在管理员配置不当的情况下,目标的数据库服务很可能没有对访问IP采取较严的访问控制,导致数据库暴露在公网上,若其中恰好保存了一些登录信息或身份凭证,就很可能成为红队攻下其他服务的敲门砖。

(3)子域名接管攻击。由于Azure 的Web 服务子域名是可任意申请且唯一的,红队人员可以时刻关注目标子域名的过期情况,一旦发现有子域名指向失效的Azure 域名,就可以主动重新申请失效域名,从而接管目标的一个有效子域名。

2.2 文件存储资源信息收集

Azure 平台中有四种存储类型,分别是文件存储、非结构化Blob 数据存储、消息队列Queue 数据存储和NoSql 数据存储,四种存储方式由唯一的命名空间——Storage Account(存储账户)确定。每个存储账户在core.windows.net 中拥有子域名,且根据存储的数据类型不同,相应的唯一子域名也不同。例如,目标拥有名为test 的存储账户,其用于存储Blob 类型数据的访问接口为test.blob.core.windows.net[12]。

Blob 数据存储服务常用于保存图片、影音等多媒体数据,因此往往是可以公开访问的。Blob 数据存储的上级结构称为Container(容器),其本质和文件夹类似。容器有三种访问级别,当某个容器被赋予名为“Container”权限时,其中保存的所有文件不仅可以被访问,还可以被枚举。因此,若容器中保存了敏感文件,而访问级别又被错误配置为“Container”,则其中的敏感文件就会面临被枚举和泄露的风险。

3 数据获取

在获取了一定的账户权限后,利用已有权限开展数据获取工作是尤为重要的步骤,通过Portal 进行交互操作、使用Azure Powershell 命令集或对存储介质和网络传输流量进行取证等手段往往能搜集到应用于Azure 平台各类服务和应用的配置文件、登录证书乃至用户凭据。本节介绍了Azure 平台常见的凭据收集手段,在获得了这些信息的条件下,就可以进一步扩展权限,加大对目标系统的了解和控制程度,从而为接下来的渗透提供便利。

3.1 Azure 存储服务

前文介绍了Azure 存储服务提供的四种存储类型。常见的访问存储服务的方式有两种,除了使用Azure Portal 进行交互式操作,还可以针对四种不同的存储方式使用其各自的REST API来进行操作[13]。

存储访问密钥被用于请求Azure 提供的存储REST API[14-15],并可以获取存储服务中的各类数据。这种访问方法区别于Azure Portal 的操作,既可以绕过MFA 认证,也可以获取对存储账户的完全访问权限,是较为理想的访问手段。每个存储账户都分配有两对密钥/连接字符串可用于存储数据的完全访问,当重新生成其中一组密钥时,用户程序可以使用另一组来保持和存储账户的持续连接[16]。该密钥是由平台自动生成的64 字节数据,并经过Base64 编码,因此很容易在开发人员的项目代码或配置文件中进行识别。由于存储访问密钥默认不会自动过期,因此一旦被攻击人员掌握,就很可能造成较为严重且持续的数据泄漏,从而危害云平台其他服务的安全性。

3.2 Key Vault 密钥管理器

Key Vault 是Azure 提供的一项密钥管理服务,可用于各类密钥、密码和证书等凭证的安全存取[17]。如果当前用户具有足够权限,那么使用Key Vault 来收集凭据信息是最为直接和便捷的方法。除了使用portal 进行管理,还可以使用Azure Powershell 所提供的Get-AzureKeyVaultKey[18]和Get-AzureKeyVaultSecret[19]等方法查询当前Key Vault 中存储的单个凭证信息,并且可以直接编写脚本批量导出明文密码,尝试使用这些密码访问云中的其他服务。

3.3 应用程序服务

App Service 是Azure 用于快速部署Web 应用的一项服务,其支持构建云端原生Web 应用和远程迁移两种部署方式。用户可以使用应用服务快速管理Web 应用程序,并通过“应用程序服务配置”来为Web 应用配置和推送诸如数据库等服务的密码。因此,在获取了某个应用程序参与者权限的情况下,可以利用“应用程序服务配置”这项功能来收集Web 应用中的密码。若要使用Portal 来获取该配置,可以在门户页面“App Service”服务的“获取发布配置文件”处下载到。Azure Powershell 中获取App 配置文件对应的命令是Get-AzureRmWe bAppPublishingProfile[20],若要批量导出所有应用的配置文件,可以配合Get-AzureRmWebApp 和Get-AzureRmResource 两个命令编写用于遍历查询的脚本来实现。

3.4 自动化服务

Azure 自动化服务为用户提供了定制化的管理功能,用户可以通过部署Powershell 或Python 脚本来对云端资源进行管理,常见的工作场景包括虚拟机资源配置、定时云端资产检索和筛查、部署合规性检查以及设置安全保护触发条件等。Runbook 是Azure 自动化的核心功能,其本质是一段需要部署在Azure 平台上运行的计划任务脚本,用户可以通过制定脚本内容、输入输出格式、运行间隔和触发条件等参数来实现不同的功能。

由于自动化服务常被用于云端资产的管理,因此其中保存的密码、证书等凭据也具有较高的价值。自动化账户中的凭据资产一旦添加,就只能查看名称、介绍等基础信息,要想查询其明文密码等详细内容,需要结合Get-AzAutomationCredential 等Powershell 命令并编写runbook 脚本进行查询和导出[21-22]。由于在申请新的自动化账户时,Azure 会默认创建三个新手引导性质的runbook 脚本,因此在远程部署runbook 脚本时,可以将脚本名修改为“AzureAutomationTutorial”等类似的名称,从而达到混淆视听的目的。

4 权限提升

本节将介绍三种基于Azure 平台的权限提升思路,分别涉及自动化、Azure 存储和Cloud Shell 三种服务。在大多数场景下,渗透往往是从一个低级别的漏洞,或是低权限账户展开的,在获取到一定的普通权限后,权限提升是需要尝试的路径之一,若平台管理员没有配置好资源的权限设置,就很可能为他人留下可乘之机。

4.1 runbook 脚本提权

如前文所述,Key Vualt 是Azure 平台极为重要的凭据管理服务,若能导出其中信息,将对后续渗透提供极大的便利。而在实战环境中,管理员很可能对用户账户做了访问控制,如红队人员可能控制了某个参与者账户A,但该A 账户被限制了对Key Vault 的访问权限。由于缺少角色分配权,该账户无法给自己授予对Key Vault 的访问权限。但如果管理员错误地配置了权限,将该A 账户添加为某个可以访问Key Vault 的自动化账户的参与者,则红队人员就可以利用该自动化账户创建或修改一个代理Runbook 脚本并运行,用间接的方法提升账户A的权限,从而批量导出Key Vault存储的凭据信息[23]。

4.2 从VHD 到远程登录

在获得存储账户密钥的前提下。红队人员可以通过获取未被全盘加密的VHD 副本[24],利用相关取证手段获得虚拟硬盘中存储的凭据或证书,并进一步控制虚拟机。需要注意的是,若虚拟机正在运行,则虚拟硬盘可能处于占用状态,此时需要首先使用Azure 的快照API 为虚拟硬盘创建一个副本文件。在获取到虚拟硬盘的副本后,可以获取硬盘中的SAM 和SYSTEM 文件用于本地hash 的导出。若通过hash 得到了虚拟机的明文密码,则可以尝试连接运行中的虚拟机。

获取虚拟机连接地址的方式有两种:一是直接从虚拟硬盘的名称中提取,如下载的虚拟硬盘文件名为testvolume20200101000001.vhd,则虚拟机的主机名称通常为testvolume.cloudapp.net;二是直接通过虚拟硬盘副本中保存的注册表键值获取,虚拟机的主机名通常位于注册表的computerName 键下。获得虚拟机的主机名称后,即可使用凭据连接虚拟机,并获得进一步的控制权限[25]。

4.3 Azure Cloud Shell 提权

Azure Cloud Shell 服务是Azure Portal 提供的命令行工具,可以帮助用户通过浏览器快捷地操作云端资源,在首次启用该服务时,Azure 会创建一个虚拟环境,并新建一个专属于该用户的存储账户用于容器镜像的存储。若管理员为某个账户配置了对存储服务的参与者权限,则该账户就可读取存储服务下的所有存储账户,因此该账户也拥有了对该订阅下所有其他用户Cloud Shell 镜像存储的访问和修改权限。若要查找其他用户可能存在的信息泄漏,可以读取他人镜像文件下的.bash_history 和ConsoleHost_history.txt 等文件内容;若要获得其他用户Cloud Shell的执行权限,则可以通过修改.bashrc或Microsoft.Powershell_ profile.ps1 等开机启动脚本中的代码来实现[26]。

5 权限维持

本节将介绍两种基于Azure 云平台的权限维持手段。在获取目标系统一定的权限以后,很可能因为某些攻击痕迹被发现或对方无意中进行了修改密码、更新系统等操作而丢失已有的攻击成果,而防止这种情况发生的最好办法即是把握攻守中的主导权,采取一些权限维持手段来加强控制。

5.1 登录绕过

在部分场景下,只要获得了目标账户的权限,或者用户名和明文密码,就可以维持长时间的控制。但随着安全防护手段的升级,目前很多厂商都不再局限于仅验证用户名和密码,如Azure Portal 就默认开启了MFA 功能,若要登录门户获取用户权限,则需要至少使用短信、邮箱、Windows Hello 之一的方式进行二次认证。

显而易见的是,在有MFA 的前提下想要直接通过Web 交互来获取账户权限是较不现实的,但Azure 除了Web 端以外,还支持了另一种基于Token 的身份认证方式。为了便于开发人员的测试和管理,Azure 提供了Azure Powershell 工具集用于直接从命令行管理Azure 资产。当用户在命令行中使用Connect-AzAccount 登录账号以获取相应权限时,该工具集会自动将认证成功账户的上下文信息保存到$HOME/.Azure/AzureRmContext.json 文件中,该文件中的TokenCache 字段是一段经过Base64 编码的用户凭据。将这段凭据保存到文件中,并调用Import-AzureRmContext 方法导入本地Powershell 环境,即可绕过MFA 直接获取目标账户的操作权限[27-28]。

另一种绕过登录的手段需要利用自动化账户。前文介绍了如何利用自动化账户的runbook 功能导出用户凭据的明文密码,而runbook 还支持另一类凭据利用方式,即RunAsConnection 和RunAs Certificate[29],本节主要介绍后者的利用。在自动化服务中添加新的RunAs 证书资源时,Azure 会自动为其创建一个服务主体账户,并赋予其Azure AD的参与者权限[30]。由于Azure 支持用证书进行基于服务主体的身份认证,因此红队人员可以利用Get-AutomationCertificate 等方法导出已存在证书的相关信息,并在必要的情况下使用Import-PfxCertificate方法和ServicePrincipal 选项进行身份认证,从而达到绕过用户名密码获取访问权限的目的[31]。

5.2 后门部署

创建后门权限是较为常用的权限维持手段之一。后门则要具备一定的隐蔽性和潜伏性,WebHook 机制正是Azure 平台中具备此条件的一项功能,该功能可以创建一个用于接受POST 请求的Url 地址,并将该地址链接到某个runbook 脚本上。红队人员可以创建用于添加新用户的后门Runbook脚本,并使用WebHook 机制获取绑定的Url。在当前权限丢失且需要重新夺取权限时,只需向该Url发送一个POST 包,即可触发后门,令runbook 脚本自动运行[32]。

6 结语

随着基础设施的进一步完善,云平台解决方案逐渐成为用户更加倾心的选择。本文介绍了Azure云平台的主要功能、管理模式和访问控制等基本信息,并尝试将常见的Azure 云平台渗透技术按照信息收集、数据获取、权限提升以及权限维持这四

个渗透测试的步骤进行总结和分类,其中涉及了Azure 的自动化、存储、Key Vault 和App Service 等一些服务。虽然Azure 平台的渗透技术已受到了部分安全研究人员的关注,但由于云平台安全研究开始时间较晚,且Azure 平台各类服务更新快、关联多、学习成本高,因此目前该领域还缺乏较为完备的理论指导,而Azure 平台渗透技术体系的即时性、完整性和系统性也仍需进一步的完善。

猜你喜欢
红队域名账户
作文表意要清楚
作文表意要清楚
五红队建耀童心
《江苏教育研究》官方网站域名变更公告
如何切换Windows 10本地账户与微软账户
探索自由贸易账户体系创新应用
Windows10账户的删除、禁用与启用
外汇账户相关业务
巧用英文字母练习队列队形
顶级域名争夺战:ICANN放出1930个通用顶级域名,申请者有上千家