引用本文:袁枫,王轶骏,薛质. 面向Azure的云平台渗透技术研究[J].通信技术,2020,53(12):2885-2891.

摘要

Azure是Microsoft推出的重要云服务平台,为多种应用场景提供了解决方案。按照渗透测试中信息收集、数据获取、权限提升和权限维持的先后顺序总结了面向Azure平台的渗透测试技术,涉及的云服务包括自动化、Azure存储、Key Vault和App Service等,从理论体系上提炼总结了Azure云平台渗透技术的研究思路。

关键词:渗透测试;云计算;Azure;云安全

内容目录

0 引 言

1 Azure云平台介绍

1.1 Azure的主要功能

1.2 Azure的资源管理器模式

1.3 Azure的访问控制

2 信息收集

2.1 域名、服务信息收集

2.2 文件存储资源信息收集

3 数据获取

3.1 Azure存储服务

3.2 Key Vault密钥管理器

3.3 应用程序服务

3.4 自动化服务

4 权限提升

4.1 runbook脚本提权

4.2 从VHD到远程登录

4.3 Azure Cloud Shell提权

5 权限维持

5.1 登录绕过

5.2 后门部署

6 结 语

00 引言

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

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

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

01 Azure云平台介绍

1.1 Azure的主要功能

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

(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采用经典模型管理云端资产,在此模型中资源彼此独立,因此在管理同一个解决方案时需要手动将资源组织到一起。

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

1.3 Azure的访问控制

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

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

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

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

02 信息收集

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

2.1 域名、服务信息收集

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

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

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

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

(1)攻击Web应用服务。如前所述,azurewebsites.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。

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

03 数据获取

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

3.1 Azure存储服务

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

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

3.2 Key Vault密钥管理器

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

3.3 应用程序服务

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

3.4 自动化服务

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

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

04 权限提升

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

4.1 runbook脚本提权

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

4.2 从VHD到远程登录

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

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

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等开机启动脚本中的代码来实现。

05 权限维持

本节将介绍两种基于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直接获取目标账户的操作权限。

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

5.2 后门部署

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

06 结语

随着基础设施的进一步完善,云平台解决方案逐渐成为用户更加倾心的选择。本文介绍了Azure云平台的主要功能、管理模式和访问控制等基本信息,并尝试将常见的Azure云平台渗透技术按照信息收集、数据获取、权限提升以及权限维持这四个渗透测试的步骤进行总结和分类,其中涉及了Azure的自动化、存储、Key Vault和App Service等一些服务。虽然Azure平台的渗透技术已受到了部分安全研究人员的关注,但由于云平台安全研究开始时间较晚,且Azure平台各类服务更新快、关联多、学习成本高,因此目前该领域还缺乏较为完备的理论指导,而Azure平台渗透技术体系的即时性、完整性和系统性也仍需进一步的完善。

作者简介

袁枫,硕士,主要研究方向为网络空间安全;

王轶骏,硕士,主要研究方向为网络攻防及系统安全;

薛质,博士,教授,主要研究方向为计算机通信网及信息安全。

基金项目:

国家重点研发计划项目“网络空间安全”重点专项(No.2017YFB0803203)

选自《通信技术》2020年第12期(为便于排版,已省去原文参考文献)

声明:本文来自信息安全与通信保密杂志社,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。