面向红队的云端渗透测试(二)
原文:
annas-archive.org/md5/640c86a8583d91f9f3f8aa69d0ac774a译者:飞龙
第七章:Azure 中的安全功能
作为一名云渗透测试员,了解 Azure 这一最受欢迎的云平台之一是非常重要的。你可能会经常进行 Azure 网络和应用的渗透测试。
本章中,我们将首先检查 Azure 生态系统中最常用的方面,以及最受欢迎的 Azure 服务、应用和功能,以及它们为何被使用。接下来,我们将探讨 Azure 软件即服务(SaaS)、基础设施即服务(IaaS)和 平台即服务(PaaS)功能。最后,我们将讨论微软自有的 Azure 安全工具和第三方安全工具。
本章涵盖以下主要主题:
-
Azure 介绍
-
常用的 Azure SaaS 应用
-
Azure IaaS 应用
-
Azure PaaS 应用
-
Azure 安全控制与工具
让我们直接开始吧!
Azure 介绍
在 2000 年代初期,微软的数据中心基础设施比现在的云平台竞争对手 Amazon 和 Google 要小。但微软的财力相对雄厚。当它在 2002 年推出 Xbox Live(现为 Xbox 网络)时,已经构建了庞大的后台基础设施,以支持当时世界上最大容量的在线游戏服务。从那时起,微软不断扩大其数据中心容量,进入网络服务行业(MSN 不算)并与其视频游戏主机业务同步扩展。
从我了解的情况来看,微软为消费市场打造 Xbox Live/ Xbox 网络的经历,为其提供了进入企业市场提供网络服务的经验。2002 年,亚马逊以“Amazon.com Web Services”推出了 AWS,旨在为企业提供云服务。微软可能想,“我也想参与这场竞争。”
这花费了几年的研究和开发,以及更多的基础设施建设。但到 2008 年 10 月,微软准备宣布“红狗计划”。
红狗计划(Project Red Dog)
红狗计划是微软的云操作系统项目,是 Azure 的前身。并没有所谓的“红狗”操作系统;它演变成了本章提到的 Azure 服务。
到 2010 年,微软的新云服务以 Windows Azure 推出,2014 年更名为 Microsoft Azure。
与其主要竞争对手 Amazon 和 Google 一样,微软在过去几年里一直稳步向其云平台添加新功能和服务。
微软的一大优势是其在市场上占据主导地位的商业操作系统和应用程序。大量使用 Windows Server 和 Active Directory 的企业,在 Azure 托管云网络和应用程序时能够获得极大的协同效应。AWS 和 GCP 也可以与 Windows Server 和 Active Directory 一起使用,但那就像是法国人做的意大利菜。而 Windows Server 和 Microsoft Azure 就像是意大利人做的意大利菜!因此,许多组织选择将 Azure 集成到其网络中,无论其云是完全使用 Azure 还是多云环境。
在进行任何 Azure 网络渗透测试之前,确保遵守微软的渗透测试参与规则是很重要的。以下是微软官网上所述内容(www.microsoft.com/en-us/msrc/pentest-rules-of-engagement):
“该计划的目标是让客户能够在不对其他微软客户造成损害的情况下,测试其在微软云服务中托管的服务。
以下活动 是禁止的:
-
扫描或测试属于任何其他微软 云客户的资产。
-
访问任何非完全属于 自己的数据。
-
进行任何形式的拒绝服务 测试。
-
对任何资产进行网络密集型模糊测试,除了你的 Azure 虚拟机。
-
对生成大量流量的服务进行 自动化测试。
-
故意访问任何其他 客户的数据。
-
超越“概念验证”步骤,解决基础设施执行问题(例如,证明你通过 SQLi 获得了 sysadmin 访问权限是可以接受的,但运行 xp_cmdshell 则不行)。
-
以违反《微软在线服务条款》中所述的可接受使用政策的方式使用我们的服务。
-
尝试进行钓鱼或其他社交工程攻击 针对我们的员工。
以下活动 是鼓励的:
-
创建少量测试账户和/或试用租户,用于演示和证明跨账户或跨租户的数据访问。然而,禁止使用其中一个账户访问另一个客户 或账户的数据。
-
对自己的 Azure 虚拟机进行模糊测试、端口扫描或运行漏洞评估工具。
-
通过生成正常业务过程中预期的流量进行应用程序负载测试。这包括测试 激增容量。
-
测试安全监控和检测(例如,生成异常安全日志,丢弃 EICAR 等)。
-
尝试从共享服务容器中突破,如 Azure 网站或 Azure Functions。如果成功,你必须立即向微软报告并停止进一步探索。故意访问其他客户的数据是 违反条款的行为。
-
在 Microsoft Intune 中应用条件访问或移动应用管理(MAM)策略,以测试这些策略强制执行的限制。
即使有这些禁止性规定,微软保留对其网络中任何看起来具有恶意性质的行为作出响应的权利。微软云中采用了许多自动化的缓解机制,这些机制不会因为渗透测试而被禁用。
简而言之,你可以在 Azure 中进行渗透测试,而无需获得微软的许可。但你所能做的事情是有限制的。你不能执行可能干扰其他 Azure 客户的活动,例如分布式拒绝服务(DDoS)攻击模拟或压力测试。你甚至不能尝试访问不属于你所在公司的 Azure 数据和资产。模拟犯罪基础设施执行漏洞是严格禁止的。你可以对公司自己的服务和应用进行负载测试,但不能生成超过正常操作所需的数据或消耗更多带宽。微软鼓励你创建新的用户账户来测试身份和访问管理(IAM)问题,只要你不尝试访问不属于你所在公司的数据。当然,你还需要公司书面许可才能进行任何形式的渗透测试、安全测试或红队活动。
Microsoft Azure 是一个独特的云平台。但在许多方面,它与 AWS 和 GCP 相似。与 AWS、GCP 以及许多其他云提供商一样,Azure 提供了广泛的云服务,这些服务可以根据微软负责的程度和客户(你所在的公司)负责的程度进行分类。与其他云平台一样,所有 Azure 服务可以分为 SaaS、PaaS 或 IaaS。
无论服务是 SaaS、PaaS 还是 IaaS,组织都要对其自身数据的安全负责。如果客户自己的代码中的软件漏洞在网络攻击中被利用,这是客户需要处理的问题。微软提供了许多非常有用的安全工具,能够大大改善组织在 Azure 中的安全态势,但必须实际使用这些工具,它们才能发挥作用。
无论如何,微软负责其 Azure 基础设施的安全。这也是为什么没有人被允许在没有微软明确许可和严格监督的情况下访问其任何数据中心。这也是为什么在执行渗透测试和红队活动时,渗透测试人员在 Azure 中的权限受到限制的原因。客户对云中的安全负责;云服务提供商对云的安全负责。客户自己的代码和应用程序是他们的事;微软的服务器、网络设备、数据中心建筑和微软自己的代码是微软的事。
第三章详细介绍了云计算的共享责任模型。但为了方便起见,你可以查看微软的 渗透测试参与规则(www.microsoft.com/en-us/msrc/pentest-rules-of-engagement)和 微软在线订阅协议(azure.microsoft.com/en-us/support/legal/subscription-agreement/)。在你开始任何 Azure 渗透测试之前,务必理解并遵守微软的规则。因此,查阅这些资源并重新阅读 第三章,确保你了解你被允许做的事情和禁止的事项。如果你所在的组织要求你做微软禁止的事情,那么微软的权威将优于他们的。当你在 Azure 进行渗透测试时,你是在微软的“家”里做客。
SaaS、PaaS 和 IaaS 表示 Azure 服务中有多少部分是属于微软的,且你所在公司的责任和自主权有多少。在 SaaS 中,很多软件代码归微软所有。你的公司需要做的工作最少(相对于 PaaS 和 IaaS)。你公司的数据运行在微软的在线应用中。在 IaaS 中,微软提供的是自己的基础设施,其他几乎没有。你的组织拥有最多的灵活性和控制权,但也必须构建和维护几乎所有的软件代码和网络配置,这些都是在微软的基础设施中使用的。PaaS 介于这两者之间。PaaS 提供比 IaaS 更多的微软 API 和服务功能。微软提供一个应用程序和服务平台,但它支持你组织自己的软件。
现在,让我们探索一下最常用的 Azure 服务。
常用的 Azure SaaS 应用程序
我将总结 Azure 中最受欢迎的 SaaS 应用程序。你不太可能对它们进行渗透测试,因为微软在其 SaaS 的安全性方面负有更多责任,而不是 PaaS 和 IaaS。你的公司只是将自己的数据输入到这些应用程序中,或者将它们嵌入到自己的应用程序中。但作为一个 Azure 渗透测试员,理解 Azure 的多种使用方式非常重要,这样你才能将 SaaS 与 Azure 其他部分的关系进行背景化,并了解你所在公司如何使用 Azure 的 SaaS 应用程序。此外,你所在组织输入到 Azure SaaS 应用程序中的数据是你们组织的安全责任。例如,如果你所在组织的某个人将他们的敏感银行账户信息输入到 Microsoft Cost Management 中,而绕过了微软所实现的加密,那么这是你们组织的问题。如果你的组织有一个与 SaaS 应用程序接口的 PaaS 或 IaaS 应用程序,那么这个数据流很可能可以从 PaaS 或 IaaS 端进行渗透测试。
Azure Maps
Azure Maps 类似于 Google Maps。它提供了几乎所有建设区域的详细地图。内置功能使用 IP 和 GPS 地理定位,用户可以看到自己在地图上的位置以及目的地。Azure Maps 可以集成到 Azure 客户开发的移动应用和网页应用中。例如,企业可以在其网页上嵌入一个 Azure Maps 小组件,展示其实体位置的地图。Azure Maps 在 GitHub 上有大约 250 个不同的代码示例(samples.azuremaps.com/),使开发者的集成工作变得简单。代码示例涵盖了从在地图上为多个点添加动画,到展示带有不同类型地理和气象数据的不同地图层,再到使用 Azure Maps Web Control 实现室内空间地图等内容。
图 7.1 – Azure Maps 截图
Azure Maps 提供多种数据流,涵盖交通、天气、摄影图像和数据可视化。例如,哪里是最高的山峰和最深的峡谷?哪一地区的年降水量最多?零售商的所有门店都在哪些地方?Azure Maps 的数据可视化功能可以与商业客户自己的数据进行配合。
Azure Digital Twins
Azure Digital Twins 使用客户自己的物联网设备来创建物理对象、业务流程和地点的数字模型。当物联网设备检测到物理环境的变化时,Azure Digital Twins 可以相应地调整数字模型。它与 REST API、Azure IoT Hub、Logic Apps、Event Hubs、Azure Data Explorer 和 Azure Synapse Analytics 集成。虽然有点奇怪,但也有点酷。
Azure Monitor
前两个应用程序(Azure Maps 和 Azure Digital Twins)更为专业化。但 Azure Monitor 则更加通用。Azure Monitor 可以进行配置,使组织通过动态仪表板界面查看广泛的业务网络数据。度量、日志、变化和跟踪会传送到 Azure Monitor。然后,管理员可以观察不同的网络事件,其中并非所有事件都直接与安全事件相关。你还可以显示实时数据,查看如“有多少用户在使用哪些应用程序, 以及何时使用?”等指标。
Azure Monitor 集成到每一个可能的 Azure 服务和应用程序中。你还可以通过 Azure Arc 实现来自其他云服务提供商(多云环境)和本地网络的数据。
Microsoft 成本管理
Microsoft 成本管理 为 Azure 客户提供有关他们在各种 Azure 服务、应用程序和功能上的支出非常详细的信息。它有详细的面板,用于成本分析、成本警报、预算数据、账单费用和使用情况,以及与公司部门和账户相关的 Azure 成本。
可以显示图表,展示客户在 Azure 服务上的支出趋势和模式。会计人员和 首席财务官(CFO)对此类信息非常喜爱。它不仅仅是“我们公司本月在 Azure 上花费了 $25,657。” Microsoft 成本管理展示了所有可以在会计账本中显示的 Azure 支出指标。因此,当然,客户可以看到饼图,展示整体 Azure 支出的各个相关类别。
Azure Advisor
Azure Advisor 类似于 Microsoft 成本管理,但它显示的是与安全性、可靠性、性能、运营卓越性和成本相关的各种指标,而非预算和账单信息:
图 7.2 – Azure Advisor 截图
可以通过 Azure 命令行界面(Azure CLI)、Advisor API 或 Azure 门户启动 Azure Advisor,以显示相关的度量数据。如果管理员问“我们如何更有效地管理 Azure 资源和应用程序?”,Azure Advisor 将提供所需的信息,帮助他们做出这些决策。
网络观察器
Network Watcher 是一种全面的网络性能监控和诊断解决方案。它显示带有动态实时网络度量的仪表板,涵盖 虚拟机(VMs)、虚拟专用网络(VPNs)和网络流量模式。
查看组织中每个部分使用的 Azure 云网络带宽!通过安全中心查看一般安全指标、资源安全卫生、安保警报和合规数据。网络观察器也可以用来诊断各种连接性问题。
现在我们已经了解了 SaaS,让我们来看看 IaaS。虽然 SaaS 将最大控制权和安全责任交给微软,但 IaaS 则将大部分控制权和安全责任交给你所在的组织。
Azure IaaS 应用程序
Azure IaaS 仅为你的组织提供关于软件代码的基础内容。你所在的组织在 IaaS 中部署的大多数代码都属于你的组织,并且就网络安全而言是你组织的责任。
这里是 Azure 中一些最常用的 IaaS 应用程序。
Azure 虚拟机
Azure 虚拟机使你的组织能够部署带有 Windows 和 Linux 的虚拟机。你可以部署大量的虚拟化 Windows 和 Linux 服务器,用于执行 Linux 和 Windows 服务器的所有任务,从运行大型企业应用程序到部署 Web 服务器和其他类型的互联网服务。
Azure Kubernetes 服务
Azure Kubernetes 服务(AKS)支持 Azure 中的 Kubernetes 容器化编排 (azure.microsoft.com/en-ca/products/kubernetes-service/)。
AKS 是专为 Kubernetes 集群设计的,因此它是部署基于 Kubernetes 的应用程序到 Azure 的最佳方式。我能够在几分钟内通过 AKS 在 Azure 上部署 Kubernetes,而在没有 AKS 的情况下在 Azure 上部署 Kubernetes 至少需要数小时的工作,并且过程充满麻烦:
图 7.3 – AKS 的截图
有关 AKS 的更多信息,请参考第九章!
Azure 容器实例
Azure 容器实例(ACI)使 Azure 客户能够开发和部署自己的软件应用程序,而无需管理虚拟机或学习新工具:
图 7.4 – ACI 的截图
ACI 可以与 AKS 和 Azure Functions(更多内容将在下一节介绍)一起使用,以支持具有大量容器的复杂应用程序。
Azure 专用主机
Azure 专用主机是用于托管运行 Windows 和 Linux 的 Azure 虚拟机的专用物理服务器。是的,通过 Azure 专用主机,你的组织可以在微软的场地上拥有自己的物理服务器。这是一个相对昂贵的选择,适合那些有预算的企业,但它为企业提供了在 Azure 生态系统中能够获得的最大控制权:
图 7.5 – Azure 专用主机的截图
现在,让我们来看看 Azure 中的 PaaS。
Azure PaaS 应用程序
Azure PaaS 在控制和自主性方面介于 SaaS 和 IaaS 之间,具体取决于 Azure 客户(例如你所在的商业组织)。
在 PaaS 中,Azure 提供平台。只有 Azure SaaS 提供 Azure 自己的完整应用程序,客户可以将数据部署到其中,而 Azure IaaS 基本上提供 Azure 的服务器硬件和网络基础设施,几乎没有 Azure 的代码。在 IaaS 部署中,绝大多数代码属于客户,并由客户负责。
这是 Azure PaaS 服务,客户在这些平台系统中运行他们开发的应用,而这些系统由 Microsoft 开发。
Azure SQL 数据库
Azure SQL 数据库使客户能够构建带有 SQL 数据库的应用程序。SQL 是顶级的供应商中立数据库开发技术之一。需要后端服务支持的各种类型的应用程序使用 SQL,不仅仅是移动应用或 web 应用。
Web 应用
Web 应用用于托管 ASP.NET web 应用程序。ASP.NET 是一个开发平台,提供构建 web 应用的工具、编程语言和库。它使用 HTML、CSS、JavaScript、Node.js、Python、Java 和 C#。
移动应用
移动应用是 Microsoft Azure 提供的服务,用于部署各种 iOS 和 Android 应用的后台。它通过 Azure Active Directory 部署单点登录(SSO)认证,支持与 Facebook、Twitter 和 Google 的 API 集成。它还使应用能够在长时间离线的情况下工作,尽管移动应用应定期在线以进行同步。
Azure 逻辑应用
Azure 逻辑应用是一个非常专业的逻辑应用开发工具。逻辑应用可以创建和自动化工作流,而无需编写大量代码。逻辑应用可以通过图表构建,其中事件触发相应的动作。
Azure Functions
Azure Functions是一个无服务器计算平台,意味着 Azure 客户可以部署应用程序而无需管理服务器。Azure Functions 是事件驱动的,这意味着如果在你组织开发的应用程序中发生某些定义的事件,Azure Functions 将根据你定义的方式响应这些事件(azure.microsoft.com/en-us/products/functions/)。
现在,让我们看看 Microsoft 为 Azure 用户提供的用于管理网络安全的应用程序。
Azure 安全控制和工具
可以使用 Microsoft Azure 部署具有卓越安全性的云网络。但是,网络安全是日常工作。作为一名云渗透测试员,你将执行渗透测试、红队演练和漏洞扫描,这些工作将为组织提供所需的漏洞数据,帮助其不断加强网络和应用的安全性。防御安全专家需要将你的安全建议付诸实践,并且实际使用 Microsoft 为 Azure 提供的各种安全工具。
使用 Azure 可以实现卓越的网络安全。但你需要付出努力,并使用 Microsoft 提供的工具!
安全控制
微软提供了多个应用程序,帮助你的组织维护其在 Azure 中的应用和服务的网络安全。这些应用同样对于渗透测试人员检查 Microsoft 自身安全控制能够发现的安全警报和漏洞非常有用。
以下是微软提供的主要安全控制措施,用于确保 Azure 的安全。
Microsoft Defender for Cloud
Microsoft Defender for Cloud 是其主要的统一云原生应用保护平台。如果你已经熟悉 Windows 中的 Microsoft Defender,Microsoft Defender for Cloud 包含了许多这些功能,并且在此基础上进行了扩展,增加了保障云网络安全所需的功能。
Microsoft Defender for Cloud 不仅提供对 Azure 中安全状况的可见性,还能在 AWS、GCP 和组织的本地网络中提供可见性。它为各种服务提供反恶意软件和安全监控。管理员可以看到经过优先级排序的关键风险,并具有上下文感知的安全性。它还提供 扩展检测与响应(XDR) 来检测和响应网络攻击。你甚至可以看到有关网络合规性的实时数据。
如果 Microsoft Defender for Cloud 正在你进行渗透测试的服务中运行,组织应该能够看到你正在模拟的网络攻击的详细信息!
Microsoft Defender 外部攻击面管理
Microsoft Defender 外部攻击面管理(Defender EASM) 基于 Microsoft Defender 的基本功能进行扩展。组织可能会有独特的外部网络攻击面。Defender EASM 会发现未知的资源,帮助组织全面了解其安全状况。
Defender EASM 动态工作并实时更新,因此管理员可以在新的外部面向资源出现时获得警报。
注意
Shadow IT 是许多组织中的一个重大问题。Shadow IT 是指员工、承包商及其他公司内部人员在使用公司网络时,使用了自己的应用程序和设备。Shadow IT 的问题在于,内部人员将新技术引入公司网络时,这些技术并未由公司的网络安全或 IT 团队进行管理。因此,Shadow IT 可能会引入新的攻击向量、漏洞和恶意软件,而组织往往对此毫不知情。Shadow IT 是 Defender EASM 能够检测和缓解的众多外部风险之一。
Azure DDoS 保护
Azure DDoS 保护顾名思义。在 DDoS 攻击中,网络攻击者通过巨大的恶意数据流量淹没你的应用和网络服务,目的是使它们崩溃。这是对网络安全中机密性、完整性和可用性(CIA 三元组)中的“可用性”发起的重大攻击。分布式部分意味着攻击者利用多个分布式机器来执行攻击。DDoS 攻击最常用的方法是使用僵尸网络,这些设备通常是被恶意软件感染的计算设备,包括任何类型的 PC、服务器、手机、平板电脑、物联网设备和路由器。攻击者通过其指挥与控制(C2)服务器控制这些僵尸网络。因此,僵尸网络提供了大量计算能力,可用于执行 DDoS 攻击。
Azure DDoS 保护使用自适应的威胁智能(TI)结合人工智能(AI)和 DDoS 缓解能力。后者功能利用微软的数据处理和网络基础设施,在攻击者的大量恶意数据对你的组织 Azure 服务和应用造成损害之前,将这些数据吸收掉。
Azure Bastion
Azure Bastion使得组织能够以安全的方式部署对虚拟机的远程访问。这是一个常见需求,因为如今企业支持的远程工作者比以往任何时候都多。如果员工从家里连接到他们雇主的 Azure 托管虚拟机,应通过 Azure Bastion 进行路由。
可以随时在 Azure 门户中发起 RDP 和 SSH(常见远程网络互联网协议)会话的直接连接。你组织的虚拟机无需额外的软件即可使用 Azure Bastion。Azure Bastion 与防火墙和其他安全控制集成。最重要的是,Azure Bastion 防止分配给虚拟机的 IP 地址暴露给公众。这使得外部网络攻击者更难访问并危害你组织的虚拟机。
Azure 防火墙
Azure 防火墙旨在安全地管理并限制对组织 Azure 虚拟网络(VNet)的访问。可以动态拒绝来自恶意 IP 地址和域的流量。它使用传输层安全性(TLS)来防止通过加密会话传播恶意软件。网络和应用防火墙规则可以在组织的所有虚拟网络中进行管理。
Azure 防火墙还具备内置的入侵检测与防御系统(IDPS)功能,能够生成安全事件警报,输出日志,并实时阻止多种攻击。因此,它不仅具有根据一系列安全规则阻止或过滤流量的基本防火墙功能,还通过使用机器学习(ML),根据你组织的网络流量模式,随着时间推移不断提升其功能。
Azure Web 应用防火墙
Azure Web 应用程序防火墙(WAF)是一个专门针对 Web 应用程序的防火墙。开放 Web 应用程序安全项目(OWASP)是一个维护 Web 安全标准的组织,包括其十大安全风险。Azure WAF 专门设计用来缓解这些风险。
针对 Web 应用程序和 Web 服务器的特定技术有很多,因此 Azure WAF 被设计为在这种用例中本地工作。
Azure 防火墙管理器
Azure 防火墙管理器作为一个独立的应用程序列出。它仅作为 Azure 防火墙的配置和管理界面。它为管理员提供一个统一的控制平面仪表板,让他们可以随时看到 Azure 防火墙的所有操作,并查看安全警报。多个 Azure 防火墙实例可以通过一个 Azure 防火墙管理器控制平面进行管理。它还可以与第三方安全即服务(SECaaS)应用程序集成。
Microsoft Sentinel
Microsoft Sentinel是一个安全信息和事件管理(SIEM)系统,直接集成到 Azure 中。如果你的组织有安全运营中心(SOC),他们可能会使用它。
SOC 是做什么的?
SOC 是一个防御性网络安全团队和部门,负责实时监视安全事件和事故并对其做出响应。
SIEM 系统分析输入到系统中的各种网络和服务器日志,并在看起来可能发生安全事件(通常是网络攻击)时,向 SOC 分析人员显示安全警报。
SOC 在事件响应(IR)中扮演着重要角色。他们的工作是在攻击或泄露发生时尽早缓解或遏制事件,以尽可能减少损害。
通俗来说,使用 Microsoft Sentinel,SOC 分析人员可以查看一个控制平面和仪表板,显示通过网络和应用程序活动发现有不良事件正在发生。当确实出现严重问题时,SOC 分析人员会收到通知,内容大致是“危险,危险!”。然后,他们可以使用 Microsoft Sentinel 调查该事件,帮助阻止坏事发生。
密钥保管库
密钥保管库存储了你组织在 Azure 中使用的各种加密密钥和机密。密钥和机密用于获取对敏感数据和应用程序的特权访问。如果这些密钥落入不当之手,那将是非常危险的。因此,它们被保存在一个比喻的保险库中!
密钥保管库确保应用程序无法直接访问密钥。密钥既可以由密钥保管库创建,也可以导入到密钥保管库中。
你组织尽可能多的传输数据和存储数据应当被加密。这是网络安全基础 101的一部分。将明文数据加密为密文垃圾串,保护了 CIA 三原则中的机密性和完整性。
Azure 拥有您组织需要的所有工具,以确保所有存储和传输中的数据都经过强加密。应使用 Key Vault,以确保未经授权的人员和网络攻击者无法“解锁”其中任何数据。
Microsoft Azure Attestation
Microsoft Azure Attestation 存在的原因是,组织部署的 Azure 云不仅仅实现了 Azure 生态系统内的实体。许多组织还将第三方服务和应用程序集成到其 Azure 网络中。Microsoft Azure Attestation 在与这些平台交互之前,验证第三方平台的身份和安全态势。
您的组织有许多不同的安全政策、基准和标准。Microsoft Azure Attestation 将验证这些是否可以在第三方平台上建立。如果可以,Microsoft Azure Attestation 可以确保这些安全政策、基准和标准通过这些平台得以执行。
Active Directory 是 Windows Server 用来管理用户账户、用户组和管理员账户安全的工具。Azure Active Directory 将这些 IAM 功能扩展到 Azure。
控制用户账户可以执行的操作是安全运营的重要组成部分,同时确保这些账户具有适当的身份验证和授权也至关重要。控制平面提供了账户使用情况的完全可视化。Azure Active Directory 还实现了 SSO 和 多因素认证(MFA)系统。MFA 是绝对必要的!MFA 通常不是默认启用的,但它应该是。即使是最强的密码也容易受到数据泄露和某些类型的密码分析攻击的威胁。通过生物识别和 一次性密码(OTP)/PIN 应用等额外的身份验证方式来增强密码的安全性,可以大大提高账户的安全性。
Azure 信息保护
Azure 信息保护(AIP)是另一种描述其功能的通用名称。它通过根据敏感性标签对数据进行分类,并确保这些数据仅在允许的情况下与外部共享,从而执行大量的 数据丢失防护(DLP)功能。
AIP 可以保护文档、许多其他类型的文件和电子邮件。作为网络安全从业者,我们时刻将电子邮件附件视为恶意软件的传播途径。我们也意识到,带有指向危险钓鱼网站链接的钓鱼邮件频繁被发送和接收。但电子邮件也是突破机密或敏感数据的主要途径!AIP 有助于防止通过电子邮件泄露敏感数据。
Azure 专用 HSM
Azure 专用 HSM 是一种非常专业的 Azure 网络安全应用。HSM 代表 硬件安全模块。HSM 是一种物理计算设备,通常大小与 RAM 或显卡相似,用于保护加密密钥、执行数字签名的加密和解密操作,并通过其他方式确保强身份验证。
组织可以在其端点和客户计算机以及本地网络中使用 HSM 设备。 Azure Dedicated HSM 是支持在 Azure 云平台上运行的 HSM 的后端。 Azure Dedicated HSM 可用于管理组织内的 HSM 访问,并将其配置为与 Azure 服务配合使用。
VPN 网关
VPN 网关使组织能够将自己的 VPN 基础架构与其 Azure 服务集成。 VPN 是通过计算机网络在两个端点之间实现端到端(E2E)加密的一种方式,通常通过互联网实现。 企业通常拥有自己的 VPN 服务器,以便完全控制该技术的使用方式。
许多组织要求在诸如远程办公并连接到雇主网络以及保护员工出差和自带设备(BYOD)政策等使用情况下使用 VPN。 一个好的 VPN 可以防止中间人(MITM)攻击,即网络攻击者拦截网络会话以侵犯机密性或篡改网络传输数据的完整性。
应用配置
应用配置适用于在 Azure 中开发和部署自己的应用程序的组织。 应用配置使组织能够统一安全配置设置,涵盖其所有 Azure 应用程序和应用程序用户。 这对于遵守监管合规性和符合组织自身安全政策尤为有用。
如果应用程序配置存在关键问题,可以实时修复问题,而无需重新部署应用程序。 如果多个应用程序之间共享的组件存在安全漏洞或配置错误,也可以进行故障排除和修复。
这就是微软为 Azure 客户提供的所有主要安全控制措施,以帮助他们提高 Azure 网络、应用程序和服务的安全性。
现在,让我们来看看一些顶级第三方 Azure 渗透测试和漏洞扫描工具!
安全工具
Azure 有许多由第三方开发的漏洞评估和渗透测试工具。 作为渗透测试人员,您可能会使用其中至少一些! 在第 8和第 9章中,我将指导您使用其中一些工具,以便您可以按照 Microsoft 的 Azure 政策允许的方式发现 Azure 的网络安全漏洞。
Prowler
如果您已经阅读了关于 AWS 渗透测试的第 5和第 6章,您可能已经熟悉Prowler(github.com/prowler-cloud/prowler)。 Prowler 也可以用于对 Azure 进行渗透测试! Prowler 可以从 CLI 运行,检查常见的安全配置错误,并根据 CIS 基准进行漏洞扫描。
与 AWS 一样,当您在 Azure 上使用 Prowler 时,您可以生成漏洞扫描日志,这些日志为您提供可以直接用于渗透测试报告的数据,并附有 常见漏洞评分系统(CVSS) 的漏洞评分,涵盖严重、高、中、低四个类别。
MicroBurst
MicroBurst 是一组由 NetSPI 开发的 Microsoft Azure 安全评估脚本 (github.com/NetSPI/MicroBurst)。
它可以发现您网络中的 Azure 服务,审计弱配置,并模拟网络攻击者的行为,例如凭证转储。
MicroBurst 与 Az、AzureAD 和 MSOnline PowerShell 模块一起工作。PowerShell 是 Microsoft 用于管理 Windows Server 和 Azure 的命令行界面。
MicroBurst 使用 Az 模块从应用服务、存储帐户、Cosmos DB、密钥保管库、自动化帐户和 AKS 获取敏感的密码、密钥、证书以及其他敏感的身份验证和授权秘密。
AzureAD
AzureAD 是一个已过时的 PowerShell 模块,因此,已妥善修补且不支持遗留系统的 Azure 部署将不会使用它。但是,如果您正在对具有遗留系统的 Azure 实例进行渗透测试(这些系统本身就容易受到攻击!),AzureAD 模块将帮助 MicroBurst 利用与 Azure 中如何实现 Active Directory 相关的漏洞。不安全的 Active Directory 配置可能导致危险的权限提升攻击!它们还可能导致攻击者获得对特权用户帐户的未经授权访问。Active Directory 是 Azure 和 Windows Server 中 IAM(身份和访问管理)工作的核心,因此发现和减轻 Active Directory 漏洞至关重要。
MSOnline
MSOnline 是另一个过时的 PowerShell 模块,因此它仅对支持旧版 Azure Active Directory 的遗留系统的 Azure 网络有用。MSOnline 模块使 MicroBurst 支持类似于 AzureAD 模块的 IAM 相关漏洞利用。
PowerZure
PowerZure (github.com/hausec/PowerZure) 是另一个与 PowerShell 配合使用的有用 Azure 渗透测试工具,由 hausec 开发。
与 MicroBurst 一样,PowerZure 使用 az PowerShell 模块扫描 Azure 中的 Active Directory 漏洞。PowerZure 可以利用漏洞进行信息收集、数据提取和恶意凭证访问。一旦安装了 PowerZure,它可以通过一些简单的命令在 CLI 中执行。
ScoutSuite
ScoutSuite (github.com/nccgroup/ScoutSuite) 是一个由 nccgroup 开发的 CLI 应用程序。nccgroup 曾开发过 Azucar,一种 "用于 Azure 环境的安全审计工具"。由于不再维护 Azucar,nccgroup 推荐使用 ScoutSuite 替代它。
ScoutSuite 是一个多云安全审计工具。 因此,与 Prowler 一样,它也可以用于 AWS 和 GCP。 ScoutSuite 还在开发支持阿里云和 Oracle 云基础设施(OCI),这两个云平台在本书中没有涵盖。
ScoutSuite 扫描 API 以查找常见漏洞,使用该工具可以让渗透测试人员更准确地了解其云环境的外部网络攻击面的范围。
Azurite
蓝宝石 (github.com/FSecureLABS/Azurite) 是由 FSecureLABS 开发的,包括两个组件——Azurite Explorer 和 Azurite Visualizer。 Azurite 是一种新颖的使用 PowerShell 进行 Azure 渗透测试的方式。让我们稍微详细地看一下它的组件:
-
Azurite Explorer 可以导入 PowerShell 模块来指纹识别 Azure 实例并检索敏感配置数据。 这是个坏消息,作为 Azure 渗透测试人员,你需要警惕并模拟。 如果真正的网络攻击者知道你的组织的 Azure 服务和帐户如何配置,他们可以造成很大的伤害!
-
Azurite Visualizer 从 Azurite Explorer 的输出中生成数据可视化。 可视化可以帮助渗透测试人员和安全管理员更好地了解不同 Azure 漏洞之间的关系。
Azurite 扫描以下 Azure 组件:
-
VNets
-
子网
-
VNet 网关
-
Azure SQL 服务器
-
Azure SQL 数据库
-
Azure 网站
-
Azure 密钥保管库
云刀
云刀 (github.com/Azure/Cloud-Katana) 是由 Microsoft 领导开发的开源工具。 云刀 (cloud-katana.com/intro.html) 用于评估和评估客户在其 Azure 网络中使用的安全工具。 它是一个构建在 Azure Functions 之上的无服务器应用程序。
SkyArk
SkyArk (github.com/cyberark/SkyArk) 是由 CyberArk 开发的,用于发现、评估和保护 Azure 中最特权的实体。 它也适用于 AWS。
SkyArk 的 AzureStealth 模块用于扫描 Azure 环境。
SkyArk 的目的很简单——发现最特权的云用户!
如果网络攻击者能够获取高度特权的 Azure 帐户的恶意访问权限,他们可以造成巨大的破坏。 他们可以在 Azure 环境中安装各种恶意软件,获取非常敏感的数据,甚至使 Azure 网络完全失效。 如果他们可以访问管理帐户,数据泄露和勒索软件部署是攻击者可以轻松执行的两个主要网络安全问题!
云影子管理员是一个重大的安全风险,SkyArk 将帮助渗透测试人员和安全管理员发现它们,并防范给予攻击者特权和管理访问权限的漏洞。
MFASweep
MFASweep(github.com/dafthack/MFASweep)是由 dafthack 开发的一个工具,用于检查多种 Microsoft 服务中是否启用了 MFA,包括用于 Azure 的服务。
与云影子管理员(这是一种非常、非常糟糕的情况)不同,MFA 是一项非常、非常好的安全措施!希望在使用 MFASweep 时,能发现贵组织所有的 Azure 账户都启用了 MFA!
密码经常在数据泄露中暴露,因此网络安全界普遍认为,保护账户启用 MFA 是必要的。密码的第二因素可以是生物识别扫描(如指纹和虹膜扫描)或发送到用户设备的 OTP,且该 OTP 会在几分钟内过期。
MFASweep 扫描以下服务:
-
Microsoft Graph API
-
Azure 服务管理 API
-
Microsoft 365 Exchange Web Services
-
Microsoft 365 Web 门户(Windows、Linux、macOS、Android 手机、iPhone、Windows Phone)
-
Microsoft 365 ActiveSync
-
Active Directory 联邦服务(ADFS)
Azure AD Connect
Azure AD Connect 密码提取工具(github.com/dirkjanm/adconnectdump)由 Foxit 开发。它正如其名所示,利用了 Azure 中 Active Directory 配置的漏洞来提取密码。如果真正的网络攻击者能够做到这一点,那么贵组织的 Azure 网络存在一些非常危险的 Azure 漏洞!
该工具包可以从 Azure Active Directory 中提取高度特权的凭证。
CloudBrute
CloudBrute(github.com/0xsha/CloudBrute)是由 0xsha 开发的多云枚举工具。如果贵组织的网站和 Web 应用程序有公开的 URL,那么确保贵组织的云网络中敏感部分不被暴露给网络攻击者是非常重要的。
CloudBrute 不仅适用于 Azure 和其他 Microsoft 服务,还适用于 AWS、GCP、DigitalOcean、阿里巴巴、Vultr 和 Linode。
CloudBrute 将帮助你发现贵组织是否通过互联网暴露了敏感的云实体。暴露的服务是云网络攻击的重要攻击向量!理想情况下,任何服务都不应该以使其易受网络攻击的方式暴露。
BlobHunter
BlobHunter(github.com/cyberark/blobhunter)是 CyberArk 提供的另一个工具。与 CloudBrute 一般查找暴露的云服务不同,BlobHunter 查找在互联网上公开可访问的 Azure Blob 存储容器。
它可以发现配置不当的容器,这些容器可能存储大量敏感数据。在攻击者找到之前,先发现这些配置错误!
如你所见,Azure 中有广泛的应用程序,同时也有许多第三方工具用于对 Azure 进行渗透测试。
总结
微软 Azure 提供了多种 SaaS、PaaS 和 IaaS 应用程序和服务。您的组织将根据具体的业务需求选择使用哪些 Azure 组件。
微软还提供了多种安全控制措施,使得 Azure 实例能够实现有效的网络安全。这包括通过 Active Directory 保护身份和访问管理(IAM)、防止暴露服务,并保护高度敏感的加密密钥以及其他类型的认证数据和组件。
许多第三方开发了开源的 Azure 渗透测试和漏洞扫描工具,作为渗透测试员,您将使用这些工具。使用这些工具是发现 Azure 环境中漏洞的有效方法,同时避免违反微软的渗透测试政策。
在下一章,我们将部署我们自己的 Azure 网络并在其中进行一些渗透测试。
进一步阅读
要深入了解本章涉及的主题,您可以访问以下链接:
-
Microsoft Azure 服务列表:
azure.microsoft.com/en-ca/products/ -
Microsoft Azure 对 PaaS 的定义:
azure.microsoft.com/en-ca/resources/cloud-computing-dictionary/what-is-paas -
Microsoft Azure 对 IaaS 的定义:
azure.microsoft.com/en-ca/resources/cloud-computing-dictionary/what-is-azure/azure-iaas/ -
Kyuu-Ji 在 GitHub 上的 Azure 渗透测试工具合集:
github.com/Kyuu-Ji/Awesome-Azure-Pentest
第八章:通过无服务器应用程序和工具进行 Azure 渗透测试
在上一章中,我们查看了 Azure 提供的各种 SaaS、PaaS 和 IaaS 服务。
现在,是时候在你自己的 Azure 部署中实际进行一些漏洞扫描和渗透测试了!这将会既有趣又富有教育意义。如果你已经阅读过 第五章,通过无服务器应用程序和工具进行 AWS 渗透测试,我们将在本章进行类似的工作,但是在 Azure 上。
本章将提供一个逐步指南,教你如何使用 Azure 自有的第一方安全工具检查安全配置并进行漏洞评估。重点介绍的工具是 Microsoft Defender for Cloud 和 Azure Firewall Manager。之后,我们将学习如何配置最流行的第三方 Azure 渗透测试工具。重点介绍的工具有 Prowler、MFASweep 和 ScoutSuite。最后,我们将通过 Prowler、MFASweep 和 ScoutSuite,查看渗透测试教程,找出凭证、列举 Azure 服务、进行漏洞扫描,并发现暴露的服务。
本章将涉及以下主题:
-
设置 Azure 实例
-
设置 Azure 账户
-
使用 Azure Cloud Shell 和 PowerShell
-
Azure 原生安全工具
-
Azure 渗透测试工具
-
利用 Azure 应用程序
那么,让我们开始一些实际的练习吧!
技术要求
我们将与 Microsoft 的基础设施合作。本章练习中的大部分计算处理将由庞大的 Azure 数据中心完成。所以,幸运的是,你不需要拥有顶级工作站。你需要以下设备:
-
一个网页浏览器
-
一台桌面或笔记本电脑
-
一部 Android 或 iPhone 智能手机
-
一个良好的、可靠的互联网连接
请查看以下视频,查看代码实战:bit.ly/3rUulqT
设置 Azure 实例
任何人都可以设置自己的 Microsoft Azure 账户。许多 Azure 服务是免费的。我强烈建议你在为客户做付费工作之前,先部署自己的 Azure 实例来练习漏洞扫描和渗透测试,这样你可以练习你的技能。而且你在 Azure 上进行的测试部署可能比你所在组织的 Azure 网络还要简单!
多亏了云计算的魔力,以及计算处理、数据存储和带宽都托管在 Microsoft 的基础设施上,你不需要拥有一台强大的工作站电脑就能尝试本章中我所演示的练习。一台典型的桌面或笔记本电脑,配备 Windows、macOS 或 Linux,良好的网络功能和现代浏览器就足够了。
首先,打开你的网页浏览器,访问 Microsoft 免费 Azure 服务的指南(azure.microsoft.com/en-ca/free)。以下是截至 2023 年本书撰写时大部分免费的 Azure 服务:
-
Azure Active Directory始终免费,但你被限制为 50,000 个存储对象,并提供单点登录(SSO)身份验证接口。同样,对于你的测试部署,这应该不是问题。 -
Azure Advisor服务始终免费且不限量。Advisor 提供个性化建议,并识别使用 Azure 的最佳实践。 -
你可以免费使用 12 个月的
Anomaly Detector服务。Anomaly Detector 利用人工智能(AI)和机器学习(ML)帮助你在 Azure 中排除技术问题。 -
Azure App Configuration始终免费,但每日请求数限制为 1,000 次,存储空间为 10 MB。你的 Azure 测试部署不太可能超过每日 1,000 次请求。App Configuration 用于管理和存储你的 Azure 应用配置。 -
Azure App Service始终免费。App Service 使你能够使用 PHP 和 Node.js 等工具为任何平台或设备创建应用。你被限制为 10 个应用,存储为 1 GB,每天使用 1 小时。对于你的测试部署来说,这不太可能成为问题。 -
Azure DevOps始终免费,但限制为五个用户。Azure DevOps 帮助通过 CI/CD 方法构建应用,使用 Git 存储库。基本上,如果你的应用需要每天进行多次更新,Azure DevOps 将帮助你实现这一目标。 -
Azure Files在前 12 个月是免费的。它使你能够跨平台迁移文件,而无需更改任何代码。但你被限制为 100 GB 的本地冗余存储(LRS)事务和 200 万次文件操作。这对于一些企业客户可能会有些限制,但对于你的测试部署来说不太可能是个问题。(LRS 是指将数据同步复制到三个磁盘上。) -
Azure Kubernetes Service(AKS)始终免费。这非常重要,因为 Kubernetes 容器化是云网络中最常见的用例之一!你将在第九章中了解在 Azure 中渗透测试 Kubernetes 容器化。 -
Azure Lighthouse始终免费。它允许你在“零信任”网络安全模型下,管理与你的 Azure 网络接口的不同服务提供商。零信任是比旧的周界安全模型更安全的一种替代方案。与其有一个周界,信任内部的计算机,外部是互联网和其他不受信任的计算机,并在周界进行身份验证,零信任在所有可能的点创建身份验证矢量,并默认不信任所有未经身份验证的数据传输,即使它们来自你自己的网络内部。 -
Azure Maps是 Azure 生态系统中类似于 Google Maps 的服务。它拥有许多 API 和功能,并且与所有 Azure 应用程序本地集成。您可以在移动设备、桌面和 Web 应用程序中使用自定义嵌入地图。在您开发的应用程序中使用 Azure Maps 是免费的,但特定的地图和位置洞察功能限制为 1,000 到 5,000 个事务。 -
Azure Migrate总是免费的。它帮助您将虚拟机(VMs)从您的本地环境或其他云平台迁移到 Azure。 -
Azure Policy帮助您遵守数据隐私和网络安全法规。这对您的雇主可能比您的 Azure 测试部署更为重要。但您可以免费访问配置和更改跟踪功能。首次 12 个月内,您将免费获得 15 GB 的出站数据传输带宽,并且始终免费获得 100 GB 的入站数据传输。
-
Blob是一种非结构化数据对象。在 Blob Storage 中,首次 12 个月内免费获得 5 GB 的 LRS 存储空间,包括 20,000 次读取和 10,000 次写入操作。但我不预期您会在测试部署中使用 Blob Storage。 -
就
Cloud Shell而言,在 Azure 文件中免费获得 5 GB 存储空间,首次 12 个月免费。这是 AWS CloudShell 的 Azure 等效,我在 第 5 和 第 6 章中演示了它。在 Web 浏览器中访问 CLI 非常重要,您几乎肯定也会在 Azure 测试部署中使用 Azure Cloud Shell! -
Container Apps总是免费的,但有一些限制。Container Apps 可以在无服务器容器中部署应用程序和微服务,但您的使用受到 180,000 vCPU 秒、360,000 GiB 秒和 2 百万请求的限制,除非您愿意额外付费。 -
容器注册表 在 Azure 生态系统中存储和管理容器映像。首次 12 个月免费,但您的限制为一个标准层注册表,包括 100 GB 存储和 10 个 Webhook。
-
成本管理 总是免费的。因此,您不需要额外付费来节省和优化 Azure 云服务的费用,可以全面了解您的支出情况。当然,如果始终保持在免费服务及其限制内,那么就根本不会有支出!但无论如何,您都可以通过成本管理进行检查。
-
数据库迁移服务 使数据库从本地服务器迁移到云更加轻松。但是在测试部署中,免费标准计算级别总是免费的。
-
DevTest Labs让开发人员能够在开发/测试环境中测试其工作。它总是免费的。 -
Event Grid保证在大规模下可靠地传递事件,以促进服务集成。它总是免费的,但您每月的操作限制为 100,000 次。这应该足够了! -
函数使得可以使用无服务器代码架构处理事件。万一你需要使用它,1,000,000 次请求始终免费。
-
密钥保管库安全地存储你在 Azure 服务中使用的加密密钥。它的服务在前 12 个月免费,但你限于 10,000 次事务、RSA 2048 位密钥或标准级别的机密操作。
-
在前 12 个月内,你可以免费获得一定数量的 Linux 虚拟机。限制是 750 小时的 B1s 弹性虚拟机。
-
负载均衡器确保你的 Azure 部署根据任何给定时刻的需求,在服务器间平衡使用。在前 12 个月内,你可以免费获得 750 小时、15 GB 数据处理和最多五个规则的标准负载均衡器。
-
托管磁盘是用于 Azure 虚拟机块存储的服务。在前 12 个月内,你可以免费获得 2 个 64 GB SSD 存储驱动器、1 GB 快照和 200 万次 I/O 操作。超出部分将产生费用!
-
媒体服务让你能够将流媒体部署到任何设备上,如流视频或音频。你可能在测试部署中不需要这样做,但万一需要,你可以在前 12 个月内免费获得每项 5 小时的标准通道、实时转录和标准流媒体端点服务。
-
监控让你可以全面了解和观察你的应用程序、基础设施和网络。每个功能有不同的限制,但除此之外,它始终免费。
-
网络观察器帮助你监控、诊断并理解你的 Azure 网络性能。它始终免费,但你限于 5 GB 存储,1,000 次检查,10 次测试和 10 个连接度量。
-
通知中心允许你向任何移动设备(iOS 和 Android)发送推送通知。你限于 100 万次推送通知,但这些是免费的。不过,如果你用 Azure 部署移动应用,才需要关注这个限制。
-
私有链接让你可以从任何自己的端点私密地访问你的 Azure 服务。它始终免费。
-
资源管理器让你查看应用资源的使用情况,并使你能够管理它们。它始终免费。
-
安全中心使你能够在所有 Azure 部署中防止、检测和响应威胁。策略评估和建议始终免费!
-
很可能你的 web 应用和其他基于数据库的应用需要 SQL 数据库。在前 12 个月内,你可以免费获得一个 250 GB S0 实例,并附带 10 个数据库事务单元。
-
SQL Server 2019 开发版让你可以在生产环境之外构建、测试和展示应用程序。它始终免费。
-
在前 12 个月内,你也可以免费获得一定数量的 Windows 虚拟机。同样,限制是 750 小时的 B1s 弹性虚拟机。
-
你将免费获得 50 个 虚拟网络 实例,永久有效。但这是用于配置私有网络并将其连接到你本地的数据中心。对于你的测试部署来说,这不太可能是必需的。
-
VPN 网关 使得在数据中心和云服务之间部署 VPN 成为可能。这能非常有效地加密你的传输数据。前 12 个月内,你可以免费使用 750 小时。但这可能是对于你所在的组织来说,比对于你的 Azure 测试部署更有用的服务。
让我们部署一个 Azure 实例,供你用于测试目的。
设置 Azure 账户
启动你的第一个 Azure 实例并练习渗透测试技能所需的所有操作都可以通过网页浏览器完成。以下是操作步骤:
- 当你进入 Azure 免费服务网页时(
azure.microsoft.com/en-ca/free),点击绿色的 开始免费 按钮:
图 8.1 – Azure 免费账户创建页面
你将被引导到一个登录微软账户的页面。如果你在家使用 Windows 10 或 Windows 11,可能已经拥有微软账户。你可以选择使用现有的微软账户,创建一个新的微软账户(即使你已经有另一个微软账户,也可以创建新的账户),或者如果有 GitHub 账户,可以用 GitHub 凭证登录。
我决定使用我已经拥有的微软账户。我对网络安全很谨慎,所以我已经在我的 Android 手机上通过微软身份验证器设置了 多因素身份验证(MFA)。我使用密码和通过微软身份验证器发送到我手机的验证码成功登录。微软身份验证器适用于 Android 和 iOS,且免费使用,我强烈建议你在使用 Azure 服务时使用它。你可以在这里了解更多关于微软身份验证器的信息:www.microsoft.com/en-ca/security/mobile-authenticator-app。
为确保没有任何混淆,我使用手机进行微软身份验证器(Microsoft Authenticator),但我使用 Windows 11 笔记本电脑通过其网页界面与 Azure 进行工作。从手机管理云服务不太实际。幸运的是,MacBook 或 Linux 电脑与 Windows 电脑一样适合这项工作。
-
登录后,我被引导到一个表单,填写了我的姓名、所在地区(在我的情况中是加拿大)和电话号码。我还获得了 200 美元的信用额度,可以在前 30 天内使用!谢谢,微软。我的电话号码通过短信进行了验证。然后,我填写了我的家庭邮寄地址并同意了客户协议。在表单底部,点击 下一步。
-
然后,你将看到一个需要输入信用卡信息的屏幕。即使你正在使用免费服务,这一步也是必须的。如果你使用了任何收费服务或超出了免费服务限制,信用卡将会被扣费。我建议使用 Azure 的成本管理应用来密切关注这一点!
在底部,点击那个蓝色的注册按钮。
-
等待片刻,账户将会被设置好。然后,你将看到一个显示你已准备好开始使用 Azure的屏幕。点击那个蓝色按钮,按钮上写着前往 Azure 门户。听起来非常激动人心!我们将一起踏上云服务之旅。
快速入门中心将为你展示多种不同的选项,帮助你开始使用。你可以参加在线课程、跟随设置指南或开始一个项目。在项目和指南标签下的项目选项有:
-
创建一个Web 应用
-
部署虚拟机
-
部署并运行一个基于容器的应用
-
设置数据库
-
开始数据分析、机器学习和智能化工作
-
存储、备份或归档数据
-
构建、部署并运营一个无服务器应用
你可以在这里看到概述:
-
图 8.2 – Microsoft Azure 快速入门中心
现在,让我们来部署一个虚拟机。(我们将在第九章中部署并运行一个基于容器的应用。)
- 接下来,你将有机会创建一个 Windows 虚拟机或 Linux 虚拟机:
图 8.3 – 从快速入门中心部署虚拟机的屏幕
因为在 AWS 章节中我使用了 Linux 虚拟机,所以我们来点不同的,选择一个 Windows 虚拟机。但是如果你创建一个 Linux 虚拟机,你可以在 CLI 中使用我在第五章中为 AWS 使用的 Linux Bash 命令。
-
下一屏幕顶部显示创建虚拟机。你将需要填写一个表单:
-
在项目详情下,保持订阅为默认值或Azure 订阅 1。在资源组下,保持为**(新建)资源组**。
-
在实例详情下,为虚拟机取一个你容易记住的名字。我输入了
PentestingWindowsVM。不允许使用空格和特殊字符! -
我选择了**(美国)东部美国作为我的区域。但你可以选择任何你喜欢的区域。它甚至不需要靠近你的实际位置。你可以在印度并选择(欧洲)挪威东部**,如果你愿意的话!
-
在可用性选项下,我选择了不需要基础设施冗余。如果你希望避免服务费用,这是最安全的选择。不过,你所在的组织需求远大于你的测试部署,可能会选择不同的选项。
-
在 安全类型 下,我选择了 标准。这是针对你自己的测试部署来说最安全的选择,可以避免产生服务费用,但对于企业、机构或大公司来说,可能需要选择更高的安全级别。
-
我保留了默认的 Windows Server 2016 数据中心作为我的镜像。x64 是该镜像的唯一虚拟机架构选项。另外,ARM64 不是免费的服务选项。
-
我选择了最小的配置(1 vCPU,3.5 GiB 内存,月费用 200 USD 免费额度内。希望一切顺利!对于你自己的测试部署来说,不需要选择较大的配置。
-
-
在下一屏上,为你的管理员账户创建一个用户名和密码。确保你的密码足够强!我使用了密码管理器来生成一个包含大量字符的复杂密码。我也建议你使用密码管理器,或许是一个内置于你浏览器中的密码管理器。这样,你就不必记住那些复杂的密码了。
-
在下一屏上,我禁用了公共入站端口。然后,在左下角,我点击了蓝色的 审核 + 创建 按钮,因为我决定保留 磁盘、网络、管理 和 监控 的默认设置。你的界面可能看起来差不多,或者略有不同。仔细查看屏幕上的文字。我计划在大约一个月后取消我的 Azure 账户。如果你需要长时间保留你的 Azure 测试部署,我建议你点击 下一步 而不是 审核 + 创建,然后仔细考虑你的选项。
-
如果屏幕上的选项看起来不错,点击左下角的蓝色 创建 按钮。否则,点击 上一步 按钮来更改你的配置。
部署准备好需要一些时间,请耐心等待!
你的体验可能有所不同。但对我来说,部署大约花了一分钟时间才生效。然后,屏幕上显示 您的部署已完成。于是,我点击了蓝色的 转到资源 按钮。
在 第九章中,我们将对刚才部署的虚拟机进行渗透测试。
如果你真的很懂技术,你一定会喜欢点击 转到资源 后出现的界面。你可以浏览你虚拟机和其他 Azure 服务的所有技术细节。但现在,我们先进入 Azure Cloud Shell。
使用 Azure Cloud Shell 和 PowerShell
无论你在管理 Azure 服务的网页界面上在哪一位置(你地址栏中的 URL 应该显示为 portal.azure.com),只要你已登录,在页面顶部会有一条蓝色菜单栏。在搜索栏的右侧,会有一个类似命令提示符的图标(大概是这样:>_):
图 8.4 – Azure 菜单栏和 Cloud Shell
点击它来启动 Azure Cloud Shell。在 Azure Cloud Shell 中,你可以通过左上角的下拉菜单在 PowerShell 和 Bash 之间切换。首次启动 Cloud Shell 时,你可能需要选择 创建存储:
图 8.5 – Azure Cloud Shell 屏幕
你将在 第五章 中找到一些 Bash 命令,通过无服务器应用和工具渗透测试 AWS 功能。我们将在本章中使用 Bash 来安装和执行工具。但让我们先回顾一些你可以在 Azure Cloud Shell CLI 中使用的有用的 PowerShell 命令。它们非常实用,你可能在执行 Azure Cloud Shell 中的其他活动时需要使用 PowerShell 命令:
-
类似于 Bash,你可以使用以下命令来更改当前打开的目录:
-
cd -
chdir
-
-
在你复制项目之前,使用以下命令之一,并在命令中输入你想要复制的文件名:
-
copy -
cp
-
-
你可以使用以下任何命令来移动项目。你还需要在命令中输入要移动的文件路径和文件名,以及目标文件路径:
-
mi -
move -
mv
-
-
使用以下命令和你想要删除的文件名来移除一个项目。记住,这将删除你的文件:
-
del -
erase -
rd -
ri -
rm
-
-
这个命令将删除整个目录。使用时请小心:
rmdir
-
如果你想创建一个新项目,请使用以下命令。通常,我只会用它来创建可以在记事本中修改的文本文件。使用这个命令会创建一个空文件,并使用你在命令中选择的文件名:
ni
-
使用这个命令设置项目的新值:
si
例如,你可以输入
si path <string>来设置一个字符串,或者si value <object>来设置一个对象,例如ss64.com/ps/set-item.html。 -
使用这个命令启动一个后台任务(可执行任务):
sajb
-
使用这个命令挂起任务:
sujb
-
使用这个命令恢复任务:
rujb
-
启动一个已停止的服务:
sasv
在 Azure Cloud Shell 中,无论你运行的是 PowerShell 还是 Bash,启动 Cloud Shell 后,以下指南将会显示出来。我在这里展示的命令适用于 Azure CLI,查看内置帮助指南总是一个很好的时间利用方式:
Type "az" to use Azure CLI
Type "help"" to learn about Cloud Shell
接下来,让我们看看一些原生的 Azure 安全工具。
Azure 原生安全工具
这是 Azure 中内置的可以帮助你提高安全性的一些工具。
Microsoft Defender
Microsoft Defender for Cloud 是一个重要的应用程序,用于检查你在 Azure 中的安全状况。它会根据你当前的配置提供安全建议,并告知你存在的一些安全漏洞。这些信息可以用于你的渗透测试报告。
让我们打开 Microsoft Defender,看看我们能了解到有关 Azure 部署的安全性:
-
要执行该应用,首先确保你已在浏览器中登录 Azure 帐户。访问 portal.azure.com。你应该会看到这个屏幕。
-
接下来,在顶部的蓝色菜单栏中,在搜索框中输入
Defender。应该会显示出指向 Microsoft Defender for Cloud 的链接。点击它。你可能需要将 Microsoft Defender for Cloud 添加为付费服务。如果你尚未注册,可以在应用的主页面看到一个方便的升级按钮。提交前务必检查订阅费用!
-
一旦进入 Microsoft Defender for Cloud,你将在左侧菜单中看到多个不同的部分(图 8.6)。它们代表了用于了解你在 Azure 中安全态势的不同工具:
-
推荐将向你显示一些安全改进建议,按严重程度分类为高、中和低。
-
附加路径分析将显示 Defender 是否已识别出攻击者可能利用的攻击路径,指向你的 Azure 实例。希望该页面显示未找到攻击路径。无论是否找到攻击路径,你都可以将此信息纳入你的渗透测试报告。
-
安全警报类似于推荐。警报按严重程度分类为高、中和低。
-
云安全探索器将展示一系列你可以执行的查询模板:
-
互联网暴露的虚拟机
-
存在高危漏洞的互联网暴露虚拟机
-
存在特定漏洞的虚拟机
-
公开访问的带有托管身份的互联网暴露 SQL 服务器
-
没有 MFA 且具有存储账户权限的用户账户
-
运行具有高危漏洞的 Azure Kubernetes Pods
-
没有任何过期期限的 Key Vault 密钥和机密
-
拥有脆弱虚拟机权限的用户账户
-
标记为生产环境的互联网暴露 SQL 服务器
-
拥有 SQL 虚拟机权限并允许在主机上执行代码的外部用户
-
存在 Log4Shell 漏洞并具有存储账户权限的虚拟机
-
含有漏洞 Pods 的 Kubernetes 命名空间
-
公开访问的互联网暴露的简单存储服务(S3)存储桶,包含敏感数据
-
公开访问的存储账户容器,包含敏感数据并允许公开访问
-
-
诊断和解决问题提供了多个自动化故障排除工具,帮助解决以下领域的问题:
-
Defender 云安全态势管理(CSPM)计划
-
服务器防护
-
入驻和设置
-
定价、计费和使用情况
-
安全评分和推荐
-
安全警报
-
漏洞评估(VA)
-
后两个故障排除工具对你确保安全警报和漏洞评估正常工作特别有用!
-
在云安全下,安全态势会展示一个概览,包含安全评分和环境指标(管理组、订阅、不健康资源和建议)。你还可以从屏幕顶部生成治理报告。这些数据可能在你的渗透测试报告中有所帮助。
-
在 Microsoft Defender for Cloud 的左侧菜单中,你还可以查看Azure 防火墙管理器,它会显示监控报告和概览。
-
你还可以管理Azure 防火墙策略、分布式拒绝服务(DDoS)保护计划和Web 应用防火墙策略。
-
在下一节,我将带你了解我们在利用自己 Azure 测试部署时使用的安装过程。
Azure 渗透测试工具
在上一章,我列出了几种你在进行 Azure 渗透测试时可以使用的第三方应用程序。
我在这里演示的所有操作都符合 Microsoft 的政策,只要你是在自己的 Azure 实例中进行这些活动,或者你已获得你正在使用的 Azure 实例所有者的许可,允许你在其上进行漏洞扫描和渗透测试。
但我认为没有过于谨慎的说法。因此,我再次提供微软的政策链接(www.microsoft.com/en-us/msrc/pentest-rules-of-engagement)。请阅读并理解这些政策,以便你能够遵守它们,无论你在的 Azure 实例是否属于你,因为归根结底,无论如何你还是在微软的基础设施中工作!
Prowler
在 AWS 部分(第五章),我们发现 Prowler 是一个非常有用的漏洞扫描工具。Prowler 在 Azure 中也同样适用,所以我将带你了解如何在 Azure 中安装 Prowler:
-
通过查看顶部搜索栏右侧,点击一个类似命令提示符的图标(像这样:>_)来启动 Azure Cloud Shell。
点击它!
-
我们不打算在 Azure Cloud Shell 中启动 PowerShell CLI,而是需要运行 Bash。在 Azure Cloud Shell 显示的左上方,有一个下拉菜单,可以在 PowerShell 和 Bash 之间切换。确保选择了 Bash。
-
我们将使用
pip来安装 Prowler,因此确保你在 Azure 中安装的pip版本是最新的可能会很有帮助。首先尝试这个命令:pip install --upgrade pip -
现在,我们将通过一个简单的命令来安装 Prowler。首先,确保你位于主目录或者你希望在其中运行并安装 Prowler 的目录。如果需要,可以使用
cd命令来进行切换。然后,使用pip来安装 Prowler,像这样:pip install prowler
你会看到命令行中下载了各种 Prowler 组件,然后所有必要的包应该都会被安装。希望一切顺利!如果你需要更多帮助,可以查看官方的 Prowler 文档 (docs.prowler.cloud/en/latest/) 和官方的 pip 文档 (pip.pypa.io/en/stable/)。
接下来,让我们安装 MFASweep (github.com/dafthack/MFASweep)。
MFASweep
MFASweep 是一个 PowerShell 脚本,尝试使用提供的凭据登录到各种 Microsoft 服务,并检查是否启用了多因素认证(MFA)。对于 Azure 中的所有用户账户,启用 MFA 非常重要,以保护这些账户免受网络攻击者的侵害。
让我们开始安装吧!
-
在另一个浏览器标签页中,确保你已登录到你的 GitHub 账户,网址是 github.com。如果需要,可以创建一个新的 GitHub 账户。
-
接下来,运行此命令将你的 GitHub 账户与 Azure 账户关联。你可能需要输入 一次性密码(OTP)来完成此操作。如果是这样,你将会生成一个 OTP,输入到 GitHub(在另一个浏览器标签页中):
gh auth login -
现在,输入这个命令来使用 Git 安装 MFASweep:
gh repo clone dafthack/MFASweep
图 8.6 – MFASweep 在 Azure 中的安装过程
在前面的截图中,你可以看到 GitHub 仓库克隆过程以及 MFASweep 在命令行中的安装过程。
ScoutSuite
现在,让我们安装 ScoutSuite。ScoutSuite 对审计我们的 Azure 实例的安全状态非常有用。在 Bash 中输入以下命令:
pip install scoutsuite
各种 ScoutSuite 组件将会被下载并安装。如果这一步没有正常进行,建议访问 GitHub 上的 ScoutSuite 页面 (github.com/nccgroup/ScoutSuite) 获取更多帮助:
图 8.7 – ScoutSuite 安装过程
现在,让我们使用我们安装的工具!
利用 Azure 应用程序
现在,让我们使用我们安装的工具进行一些安全测试。
Prowler
首先,让我们在 Azure 中运行一个默认的 Prowler 扫描。默认扫描是一个有效的通用漏洞评估。请按照以下步骤进行:
-
启动 Azure Cloud Shell,确保使用的是 Bash。在 Azure Cloud Shell 界面左上方,有一个下拉菜单可以在 PowerShell 和 Bash 之间切换。搞定了!
-
我喜欢在开始扫描之前先确认 Prowler 是否正确安装。使用以下命令检查你安装的 Prowler 版本:
prowler -v -
接下来,让我们使用这个命令查看你可以在 Azure 中运行的 Prowler 安全检查:
prowler azure --list-checks -
现在,让我们运行一些先前命令响应中列出的检查。确保
--az-cli-auth位于你的prowler azure命令的末尾,以便你可以用必要的权限执行它。如果在命令行中遇到 IAM 的技术问题,你可以通过在另一个浏览器标签页中访问这个页面来检查你的 IAM 设置(确保你已正确登录到你的 Azure 管理帐户!):
-
运行几个来自
--list-checks输出的检查,像这样:prowler azure --checks defender_ensure_defender_for_app_services_is_on defender_ensure_defender_for_storage_is_on storage_infrastructure_encryption_is_enabled --az-cli-auth在
--checks和--az-cli-auth之间,你可以输入任何显示为prowler azure --list-checks命令结果的检查名称。试试看!尽可能多地尝试各种检查。检查扫描的结果将根据其通过或失败情况显示在屏幕上。你还可以通过访问
/home/<your_name_here>/output/目录,以 HTML、CSV 和 JSON 格式获取扫描日志。 -
接下来,你可以通过这个命令查看你可以在 Azure 中使用 Prowler 扫描哪些服务:
prowler azure --list-services你可以扫描的 Azure 服务将在命令行中输出一个列表。
-
接下来,让我们扫描这些服务!使用类似这样的命令:
prowler azure --services defender iam storage --az-cli-auth在
--services和--az-cli-auth之间,你可以输入任何你希望从prowler azure --list-services命令中显示在屏幕上的服务名称:
与检查扫描一样,你也可以通过访问/home/<your_name_here>/output/目录,以 HTML、CSV 和 JSON 格式获取扫描日志。
让我们使用 MFASweep 进行 MFA 检查。
MFASweep
确保在与你(或你的客户)Azure 实例关联的所有帐户上启用 MFA 非常重要!密码是一种相对较弱的身份验证方法,密码经常被破解或泄露。实施 MFA 对确保你的帐户仍然安全至关重要,即使在网络威胁者威胁到你的密码时。我在手机上使用 Microsoft Authenticator 作为我的第二身份验证因素。在网络安全术语中,我的密码是“我知道的东西”,而 Microsoft Authenticator(通过我的手机)是“我拥有的东西”。如果我实施某种生物识别技术,例如指纹扫描仪,那将是“我是谁”。
让我们执行 MFASweep 检查 Azure 中的用户帐户是否启用了 MFA。这个命令将让 MFASweep 检查我的主 Azure 帐户和Active Directory FederationServices(ADFS):
Invoke-MFASweep -Username <insert_username_of_account_email_address_here>@<insert_domain_name_here> -Password <insert_password_here> -Recon -IncludeADFS
注意我在那个例子中是多么小心地不分享我的 Azure 凭证!这就是你在网络安全中需要采用的思维方式。我们称之为OPSEC,即操作安全。
一个新的命令行将以 >> 开头。我发现查看扫描结果需要几分钟,因此你可能需要耐心等待:
图 8.8 – MFASweep 扫描结果
ScoutSuite
现在,是时候在 Azure 中进行基本的 ScoutSuite 扫描了。您的身份验证凭据应该已经通过使用之前的工具设置好了。
使用以下命令运行扫描:
scout azure --cli
一些操作将在命令行输出结果,如下所示:
图 8.9 – 在命令行上使用 ScoutSuite 扫描
完成后,JS、JSON 和 HTML 格式的日志将写入此处:
scoutsuite-report/scoutsuite-results/scoutsuite_results_azure-tenant-<unique_identifier_here>.<file_extension_here>
Prowler、MFASweep 和 ScoutSuite 应该会产生命令行输出和日志,这些内容在渗透测试 Azure 时非常有用。确保将这些结果包含在渗透测试报告中,并用你自己的话解释它们。
总结
您可以使用多种便捷工具来检查您在 Azure 中的安全态势,运行漏洞扫描并进行简单的渗透测试。您从这些工具中获得的所有信息都可以作为渗透测试报告的一部分。
Microsoft Defender for Cloud 是您的主要安全态势中心。它提供安全建议、安全警报、攻击路径分析、故障排除工具和安全配置相关信息。Azure 防火墙管理器也内置其中。Azure 防火墙有助于在您的 Azure 实例中允许或拒绝活动。您绝对需要拒绝可能帮助网络威胁行为者的活动!
Azure Cloud Shell CLI 可以在您登录 Azure Web 应用程序时在浏览器中执行。我们可以从 Azure Cloud Shell 安装并运行第三方渗透测试工具。
Prowler 在渗透测试 Azure 时与渗透测试 AWS 一样有用。
MFASweep 专为 Azure 设计。它是确保 MFA 设置保护所有访问您 Azure 实例的帐户的最有效方法。
ScoutSuite 是另一个工具,内置了许多非常有用的 Azure 扫描和检查功能。
在下一章中,我们将部署容器化应用程序到 Azure,并进行渗透测试。
进一步阅读
要了解本章涵盖的主题,您可以访问以下链接:
-
Azure 中的免费服务列表:
azure.microsoft.com/en-ca/free -
带有 PowerShell 命令的备忘单:
www.comparitech.com/net-admin/powershell-cheat-sheet/ -
Prowler 文档:
docs.prowler.cloud -
MFASweep:
github.com/dafthack/MFASweep -
ScoutSuite:
github.com/nccgroup/ScoutSuite
第九章:在 Azure 中对容器化应用进行渗透测试
在上一章,我们介绍了如何设置一个 Microsoft Azure 环境,以便我们在其中练习渗透测试和漏洞扫描。接着我们部署了一个虚拟机(VM),学习了一些 PowerShell 命令,并使用 Bash 在 Azure Cloud Shell CLI 中进行了一些应用扫描。
有时,组织会仅仅在普通的 Windows 和 Linux 虚拟机中运行它们的应用程序。然而,很多时候,组织需要一个高度可扩展的云配置,应用程序组件可以快速、灵活地启动和关闭。这在 DevOps 应用中尤其重要,这正是容器化派上用场的地方。
由于许多公司在其 Azure 网络中使用容器化,因此你学习如何进行渗透测试变得尤为重要。这正是本章的内容。
在本章中,我将解释什么是容器化,为什么使用容器化,以及容器化的基本工作原理。我们还将讨论 Docker 和 Kubernetes 在 Azure 中的工作方式,并介绍测试它们的渗透测试技术。
本章将涵盖以下主题:
-
容器化的工作原理
-
在 Azure 中的 Docker 和 Kubernetes 渗透测试技术
那么,让我们开始吧!
技术要求
我们将使用微软的基础设施。大量的 Azure 数据中心将负责本章练习的主要计算处理工作。所以,幸运的是,你不需要一台顶级的工作站。你将需要以下设备:
-
一个网页浏览器
-
一台台式机或笔记本电脑
-
一台安卓手机或 iPhone 手机
-
一个良好的、可靠的互联网连接
查看以下视频,查看代码实际操作:bit.ly/3QmGlKX
容器化的工作原理
虚拟机是模拟计算机。它不是直接运行在 PC 或服务器的硬件上,而是模拟操作系统运行所需的所有硬件组件。因此,一台物理计算机可以运行多个模拟计算机,每个模拟计算机就像在宿主操作系统的虚拟化程序(hypervisor)中运行的一个应用程序,或者在直接运行在硬件上的虚拟化程序中运行。
你可以使用自己的 PC 上的应用程序,如 Oracle VirtualBox 或 VMware Workstation Player,作为虚拟机的虚拟化程序。你只需要一个你想在虚拟机中运行的操作系统的磁盘映像文件,并将其配置在虚拟化程序中即可。操作系统不需要与宿主操作系统匹配,实际上,通常并不匹配。我可以在我的 Windows 11 PC 上运行一个 Kali Linux 虚拟机。你可以在你的 MacBook 上运行一个 Windows 11 虚拟机。而我可以在我的 Ubuntu Linux 桌面上运行一个 macOS 虚拟机。
然而,设置虚拟机确实需要一些时间,就像我们在第八章中所做的那样,当你设置虚拟机时,需要使用整个操作系统的磁盘映像。
也可以在云平台上运行虚拟机,正如我们在前一章中所做的那样。即使我使用的是微软的计算机,而不是自己的计算机来运行虚拟机,在 Azure 上设置一个虚拟机仍然需要几分钟的时间。此外,云平台上的传统虚拟机在功能上与自己计算机上的虚拟机类似;它使用整个操作系统。
在云平台上运行这样的虚拟机非常适合当公司希望让同一虚拟机运行几个月或更长时间时使用。在云平台上运行简单的 web 服务器是一个很好的使用案例。
然而,如今,DevOps 和 CI/CD 应用开发方法论使得公司能够部署需要快速扩展的动态应用程序。这些应用程序的后台可能会发生剧烈变化,每天甚至每时每刻都可能响应当前生产网络的需求。
容器 是部署虚拟化的一种非常精确的方式。一个 容器 只包含运行更大应用程序小部分所需的操作系统组件。单个容器的生命周期可能只有几天,甚至只有几个小时。
Docker 和 Kubernetes 是公司今天常用的两种容器化编排平台。容器化编排平台会自动启动和停止容器,而无需直接的人类干预。这些平台管理容器的部署,并处理虚拟化硬件中的负载均衡,只在需要时分配硬件资源,如 CPU 和内存。
云平台使得公司和其他类型的企业能够实现容器化应用。微软在其全球各地的 Azure 数据中心拥有巨大的硬件和网络能力。因此,如果容器化应用某天需要 1,000 台机器,第二天需要 200 台,第三天需要 2,000 台,Azure 可以提供这样的支持,这样公司就不需要在自己的场地上部署和停用这些机器。
你很可能会被要求在 Azure 中对基于 Docker 和 Kubernetes 的应用程序进行渗透测试。
正如 AWS 有自己管理 Docker 和 Kubernetes 的方式,Azure 也有自己的方式。因此,让我们来了解一下这些内容。
如何在 Azure 中使用 Docker
你可以通过 Docker Desktop 从本地计算机启动 Azure 中的 Docker 实例,或者直接通过 Azure CLI 启动。Docker Desktop 要求你在计算机上安装 Docker Desktop 应用程序(docs.docker.com/cloud/aci-integration/),但也可以直接通过 Azure Cloud Shell(这是一种在网页浏览器中访问 Azure CLI 的方式)启动 Docker 实例。我个人更倾向于后者。如果你只是为了测试目的以最简单的方式启动 Docker,这可能是最方便的方式。如果你要为特定的业务用途启动 Docker,并对其进行更多控制,Docker Desktop 可能是更好的选择。
让我们从 Azure Cloud Shell 开始工作,使用 Azure 默认提供的 Docker 镜像(当然也可以获取或创建你自己的 Docker 镜像,但对于本书中的练习,这不是必要的;Docker 镜像类似于传统虚拟机中使用的磁盘镜像,但它是为容器优化的):
-
通过你的网页浏览器登录到我们在上一章中设置的 Azure 帐户。
在 Azure 中部署 Docker 的原生方式是使用 Azure 容器实例,这是一个无服务器服务。严格来说,背后是有服务器的,但由 Azure 管理,而不是你!在你按照这些指令操作时,这就是后台运行的服务。
-
在网页顶部的蓝色菜单栏中,点击搜索栏右侧的第一个图标。它应该看起来像
>_。 -
点击它以启动 Azure Cloud Shell。接下来,我们将使用 Bash 而不是 PowerShell,因为本章中的渗透测试工具使用的是 Bash。在 Azure Cloud Shell 屏幕的顶部栏选择
Bash。 -
然后,确保你拥有所需版本的 Azure CLI。输入以下命令:
az version只要你有 2.0.55 版本或更高版本,就可以正常使用。我现在使用的是 2.50.0 版本,所以不需要升级。如果你需要升级,请输入以下命令:
az upgrade -
Azure 中的容器使用资源组来管理 Azure 的资源以满足你的需求。让我们设置一个资源组。输入以下命令:
az group create --name <resourceGroupNameOfYourChoiceHere> --location eastuseastus可以替换为你选择的任何 Azure 数据中心区域名称。例如,如果你愿意,可以选择canadacentral、brazilsouth或westus等。 -
接下来,我们需要创建一个容器!为了本章练习的目的,使用 Microsoft 默认的 Docker 容器镜像即可。使用以下命令操作:
az container create --resource-group <resourceGroupNameOfYourChoiceHere> --name mycontainer --image mcr.microsoft.com/azuredocs/aci-helloworld --dns-name-label <dns-name-label-of-your-choice-here> --ports 80确保你的资源组名称与前一个命令中创建的名称相同。
-
现在,你可以验证容器的状态,查看一切是否正常!输入以下命令:
az container show --resource-group <resourceGroupNameOfYourChoiceHere> --name mycontainer --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" --out table如果一切顺利,命令行上会打印出类似的内容:
FQDN ProvisioningState --------------------------------- ------------------- aci-demo.eastus.azurecontainer.io Succeeded如果没有成功,请从创建资源组命令重新开始。现在,我们已经启动了一个 Docker 实例,可以在其中测试我们的渗透测试技能!恭喜!
还有一个非常有用的命令,可以用来对你的新 Docker 实例进行渗透测试。我们在渗透测试报告中提到的许多漏洞数据都来源于日志记录。你可以使用以下命令来拉取容器实例日志:
az container logs --resource-group <resourceGroupNameOfYourChoiceHere> --name mycontainer
在命令行中,你会看到一条消息,显示监听端口 80(HTTP 的 TCP/IP 端口),最终,你将看到 HTTP GET 请求在命令行中显示出来,这些请求来自你的计算机或互联网上的其他计算机,针对你的 Docker 实例。
你可以使用这个命令删除你的 Docker 容器:
docker rm <name of folder with container here>
现在,让我们继续讲解 Kubernetes。
Kubernetes 在 Azure 中的工作方式
Azure 提供了专门用于部署 Kubernetes 的服务!Azure Kubernetes 服务(learn.microsoft.com/en-us/azure/aks/intro-kubernetes)使得在 Azure 平台上部署 Kubernetes 容器化变得非常简单。
Kubernetes 是目前最流行的容器编排平台。然而,有一个事实可能会让一些新手感到困惑——Kubernetes 扩展了 Docker 开创的一些技术。实际上,Kubernetes 中也可以运行 Docker 容器!因此,Docker 和 Kubernetes 在企业 DevOps 和 CI/CD 应用中经常相互交织,尤其是那些运行在云中的应用。
在前一部分中,我们部署了一个完全基于 Docker 的容器化系统,Azure 的无服务器 Azure 容器实例服务在后台支持这一切。现在,我们将把容器化部署到 Azure Kubernetes 服务中。
Kubernetes 具有非常特殊的架构(如 第六章 中所讨论的)。
注意
Kubernetes 的架构在不同的云平台中是相同的。
Kubernetes 部署的基础是控制平面。它是其他所有组件的父级,位于其上方。控制平面包含一个 API 服务器,用于管理与外部应用的连接,以及一个控制器管理器。我们将通过 kubectl(Kubernetes 的命令行工具)向其发送命令。
控制平面的子组件是节点。它们共享计算、网络和存储资源。节点的子组件是Pod,而 Pod 的子组件是单个容器。因此,可以这样理解——容器是容器的曾祖父母。
容器是最具动态性的组件;它们是变化最频繁的。它们根据应用的需求响应性地从容器镜像中生成。容器中仅包含执行代码所需的配置文件、库和依赖项。这是因为节点处理硬件资源的负载均衡,而控制平面对所有内容具有最终控制权,并且也是 Kubernetes 容器化系统外部系统的网关。
如果你想听起来像个真正的 Kubernetes 专家,可以称其为 K8s。这是 Kubernetes 开发者和管理员给它起的昵称。不过,我更喜欢用它的正式名称。
好的,让我们在 Azure 网络中部署 Kubernetes!我们可以在本章后面用它进行渗透测试:
-
首先,我们需要再次启动 Azure Cloud Shell。从网页顶部的蓝色菜单栏中,点击搜索栏右侧的第一个图标,它应该像
>_这样。 -
点击它以启动 Azure Cloud Shell。从这里,我们将使用 Bash 而不是 PowerShell。在 Azure Cloud Shell 屏幕的顶部栏中选择
Bash。 -
然后,确保你有正确版本的 Azure CLI。使用此命令:
az –version只要你有版本 2.0.55 或更高版本,就可以继续使用了。否则,输入此命令:
az upgrade在 Azure CLI 中操作 Kubernetes 时,我了解到首先需要创建一个具有访问我的容器注册表权限的服务主体,这样其他操作才能正常进行。
-
复制这段脚本并粘贴到文本编辑器中,如记事本。将
$containerRegistry替换为你选择的名称(例如 acrKim)。将$servicePrincipal替换为你选择的名称(例如 KIM_KUBERNETES):#!/bin/bash # This script requires Azure CLI version 2.25.0 or later. Check version with `az --version`. # Modify for your environment. # ACR_NAME: The name of your Azure Container Registry ACR_NAME=$containerRegistry # SERVICE_PRINCIPAL_NAME: Must be unique within your AD tenant SERVICE_PRINCIPAL_NAME=$servicePrincipal # Obtain the full registry ID ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv) # echo $registryId # Create the service principal with rights scoped to the registry. # Default permissions are for docker pull access. Modify the '--role' # argument value as desired: # acrpull: pull only # acrpush: push and pull # owner: push, pull, and assign roles PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv) USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv) # Output the service principal's credentials; use these in your services and # applications to authenticate to the container registry. echo "Service principal ID: $USER_NAME" echo "Service principal password: $PASSWORD" -
如果你的密码不会很快被丢弃,最好将密码更改为一个复杂的、包含大量随机字符的密码。
现在,我们终于可以部署我们的 Kubernetes 集群了!将
kimAKSCluster替换为你选择的集群名称。将acrKim替换为你在前一个脚本的ACR_REGISTRY_ID=$(az acr show --name $acrKim --query "id" --output tsv)行中使用的 ACR 名称:az aks create \ --resource-group myResourceGroup \ --name kimAKSCluster \ --node-count 2 \ --generate-ssh-keys \ --attach-acr acrKim -
几分钟后,JSON 输出将显示确认 Azure Kubernetes Service 部署的度量信息。
Kubernetes CLI,也就是 kubectl,已经安装在 Azure Cloud Shell 中。
-
然后,我们需要使用 kubectl 连接到我们的 Kubernetes 集群。输入以下命令,但将
myResourceGroup替换为你之前使用的资源组名称,将kimAKSCluster替换为你之前使用的集群名称:az aks get-credentials --resource-group myResourceGroup --name kimAKSCluster -
现在,我们可以验证一切是否正常,并确保我们的节点在运行。输入以下命令:
kubectl get nodes
现在,我们在 Azure 中使用 Azure 容器实例有了一个基础的 Docker 实例,并且使用 Azure Kubernetes Service 配置了一个基本的 Kubernetes 实例。
在接下来的部分,我们将在这些实例中运行一些漏洞扫描和渗透测试脚本。这才是有趣的部分!
Azure 中的 Docker 和 Kubernetes 渗透测试技术
让我们探索一些在 Azure 中进行容器渗透测试的工具。
kube-hunter
我们将尝试的第一个渗透测试应用程序是 GitHub 上 Aqua Security 提供的 kube-hunter。kube-hunter README 文件中的介绍在 github.com/aquasecurity/kube-hunter/blob/main/README.md 中提到如下内容:
“kube-hunter 会搜索 Kubernetes 集群中的安全漏洞。该工具的开发目的是提高 Kubernetes 环境中安全问题的意识和可见性。你不应该在你 不拥有的 Kubernetes 集群上运行 kube-hunter!”
绝对可以!这就是为什么我们在本章中在我们自己的 Azure 服务中设置了自己的 Kubernetes 集群。当你实际做渗透测试工作时,你将需要得到拥有 Azure 网络和 Kubernetes 实例的公司签署的法律许可。
使用 kube-hunter,你可以进行许多不同类型的扫描。首先,让我们安装它。然后,我们将进行一次快速扫描。
在 Azure Cloud Shell 中的 Bash 中,让我们使用此命令克隆 kube-hunter 的git仓库:
git clone https://github.com/aquasecurity/kube-hunter.git
现在,我们将安装它的依赖项:
cd ./kube-hunter
pip install -r requirements.txt
kube-hunter 是一个 Python 应用程序,所以我们可以使用以下命令启动它:
python3 kube_hunter
还有另一种安装方法我喜欢使用,它利用pip仓库。试试这个:
pip install kube-hunter
如果你是通过这种方式安装了 kube-hunter,你可以使用这个命令启动它:
kube-hunter
你也可以在指定特定日志级别的情况下运行 kube-hunter。试试这个命令:
kube-hunter --active --log WARNING
这样会输出WARNING级别的日志。这些事件你应该特别关注,它们在渗透测试报告中非常有用。或者,你可以使用这个命令输出DEBUG日志:
kube-hunter --active --log DEBUG
启动 kube-hunter 时,默认会记录INFO级别的事件。如果你更改了日志记录为WARNING或DEBUG,并且希望切换回INFO,可以使用以下命令:
kube-hunter --active --log INFO
由于我们在自己的 Kubernetes 实例中进行教育用途的操作,可以随意尝试不同的日志记录选项。
当你使用kube-hunter命令进行快速扫描时,命令行将输出以下内容:
图 9.1 – 在 Azure 中运行 kube-hunter
接下来,你输入1、2或3,选择你想执行的扫描类型。如果选择1或3,你需要在以下提示中输入 IP 地址。
我常常忘记在玩弄 Azure 实例时所使用的 IP 地址。我们在 Bash 中,因此检查 Azure 中 IP 地址的最简单方法是使用以下命令:
ifconfig
命令行应该会输出类似这样的内容:
图 9.2 – Azure 中的 ifconfig 命令
是的,我知道字符X在 IPv4 或 IPv6 IP 地址中并未使用。我替换了我的 IP 地址中的某些字符,目的是出于操作安全考虑。你永远也不能太小心!
你还可以在 Docker 容器内安装并运行 kube-hunter!通过以下命令在 Docker 中安装 kube-hunter:
docker run -it --rm --network host aquasec/kube-hunter
默认情况下,kube-hunter 通过一个名为stdout的实体输出所有扫描日志。因此,你可以通过 Azure Monitor 界面找到你的日志:
-
返回到您的 Azure 账户界面,portal.azure.com。
-
在顶部的蓝色菜单栏中,在搜索栏中输入 监控。
-
在左侧,有一个 监控 下的部分列表,例如 概述 和 活动日志。点击 活动日志。
以下屏幕将以这种方式显示您的日志:
图 9.3 – Azure 中的活动日志
您在 kube-hunter 中的操作将被记录在那里。我的操作产生了很多名为 列出存储帐户密钥 的条目。这就是 kube-hunter 要寻找的敏感信息!
探索 kube-hunter 文档(aquasecurity.github.io/kube-hunter/)以了解您可以执行的其他操作。
现在,让我们尝试 kdigger。
kdigger
kdigger 是一个多用途的 Kubernetes 渗透测试工具。它能够在您的 Kubernetes 实例中进行挖掘,查看它能找到哪些实体。当然,能够指纹识别和列举容器化部署对于网络威胁行为者来说是一项非常危险的能力,因为他们将知道如何继续进行攻击。
使用 kdigger 获得的数据也可以用于在 Kubernetes 中进行更有根据的渗透测试。
kdigger 还可以用于模糊测试。这意味着将无效、意外或随机的数据输入到应用程序中,以查看它是否会崩溃。如果应用程序设计用于验证输入并处理代码中的异常,它就不会容易受到模糊测试攻击。要了解如何使用 kdigger 进行模糊测试和其他功能,请查看它们的文档:github.com/quarkslab/kdigger。
让我们安装 kdigger 并进行一些挖掘。
根据您的配置,您可能会发现以下两种安装方法中的一种效果最佳:
-
第一个方法是默认的 Git 源技术:
git clone https://github.com/quarkslab/kdigger cd kdigger然后,您需要将二进制文件移到您的路径中的工作目录:
sudo install kdigger </usr/local/bin or enter your path name here>该方法将要求您记住您的
sudo密码。 -
这个更简单的安装方法使用
go:go install github.com/quarkslab/kdigger@main
现在,让我们试试 kdigger!
导航到您的 Pods 所在的目录以及 kdigger 安装的目录。当我在 Bash 中迷失方向时,我输入这个命令来列出当前目录的内容:
ls
然后,我输入这个命令来切换到我正在寻找的目录:
cd go/bin
当您进入 kdigger 安装目录时,您可以通过一个非常简单的命令进行一般扫描:
./kdigger dig all
对我来说,这就是命令行输出的内容。我出于操作安全的原因,将 DNS 名称和 IP 地址中的一些字符替换为 X:
; <<>> DiG 9.16.33 <<>>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33463
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1224
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 7048 IN NS XXX.net.
. 7048 IN NS XXX.net.
. 7048 IN NS XXX.net.
. 7048 IN NS XXX.net.
. 7048 IN NS XXX.net.
. 7048 IN NS XXX.net.
. 7048 IN NS XXX.net.
. 7048 IN NS XXX.net.
. 7048 IN NS XXX.net.
. 7048 IN NS XXX.net.
. 7048 IN NS XXX.net.
. 7048 IN NS XXX.net.
. 7048 IN NS XXX.net.
;; ADDITIONAL SECTION:
XXX.net. 1461 IN A 198.XX.X.X
XXX.net. 1461 IN AAAA 2001:503:XXXXX
XXX.net. 1461 IN A 192.58.XX.XX
XXX.net. 1461 IN AAAA 2001:503:XXXXX
XXX.net. 1461 IN A 192.XXX.XX.XX
XXX.net. 1461 IN AAAA 2001:XXXXX
XXX.net. 1461 IN A 199.X.XX.XX
XXX.net. 1461 IN AAAA 2001:XXX
;; Query time: 0 msec
;; SERVER: 168.63.129.16#53(168.XX.XXX.XX)
;; WHEN: Fri Jul 28 21:56:48 UTC 2023
;; MSG SIZE rcvd: 824
如果您想扫描所有的桶,试试这个:
dig all
您可以在渗透测试报告中提到 kdigger 找到的任何暴露的 Kubernetes 实体。
总结
组织通常在他们的云平台上部署容器化,因为这是一种非常响应迅速且动态的方式,利用虚拟化实施快速可扩展且不断发展的应用程序,使用 DevOps 或 CI/CD 方法。
容器只包含执行其处理的代码所需的操作系统部分。负载均衡和硬件资源管理由容器化平台内容器的父容器、祖父容器或曾祖父容器完成。
现在,我们知道如何在 Azure 中部署 Docker 和 Kubernetes 容器化实例,并测试其安全漏洞。Docker 和 Kubernetes 是最常用的容器化平台。Kubernetes 基本上是对 Docker 功能的进一步扩展,甚至可以与 Docker 镜像和容器一起使用。
在接下来的章节中,我将介绍 Google Cloud Platform 及其各种服务。
延伸阅读
要了解更多关于本章所涉及的主题,您可以访问以下链接:
- 使用 Azure CLI 部署容器实例:
learn.microsoft.com/en-us/azure/container-instances/container-instances-quickstart
)
- 什么是 Azure Kubernetes 服务?:
learn.microsoft.com/en-us/azure/aks/intro-kubernetes
)
- kube-hunter 文档:
aquasecurity.github.io/kube-hunter/
)
- kdigger 文档:
github.com/quarkslab/kdigger
第四部分:渗透测试 GCP
GCP是谷歌的云平台!不过,业内人士通常使用这个缩写。在这一部分,我们将了解 GCP 的各种软件即服务、平台即服务和基础设施即服务应用。我们将部署自己的 GCP 实例,在其中测试我们的渗透测试技能。我们将使用 Security Command Center 检查 GCP 部署的安全状态。我们还将逐步尝试一些在 GCP 中的渗透测试工具。然后,我们将部署 Docker 和 Kubernetes 容器,并对其进行测试。
本节包含以下章节:
-
第十章,GCP 中的安全特性
-
第十一章,通过无服务器应用和工具进行 GCP 特性渗透测试
-
第十二章,在 GCP 中进行容器化应用的渗透测试
第十章:GCP 中的安全功能
欢迎来到谷歌云平台,简称GCP。GCP 是本书中提到的三大最流行云平台中的最后一个。GCP 的工作方式与 AWS 和 Azure 非常相似,但也有一些独特的方面,渗透测试人员在进行平台渗透测试之前需要了解。
首先,让我们来看看 GCP 生态系统中一些最常用的方面。在本章中,你将了解最受欢迎的 GCP 服务、应用和功能,以及它们的用途。接下来,我们将深入探讨 GCP 的软件即服务(SaaS)、基础设施即服务(IaaS)和平台即服务(PaaS)功能。最后,我们将讨论谷歌自有的 GCP 安全工具以及第三方安全工具。
在我们进行 GCP 渗透测试之前,了解我们所在公司可能如何使用 GCP,以及谷歌提供的哪些安全功能可以帮助渗透测试人员了解他们所使用的 GCP 部署的安全态势,会有所帮助。
本章涵盖以下主要主题:
-
GCP 简介
-
常用的 GCP SaaS 应用
-
GCP IaaS 服务
-
GCP PaaS 服务
-
GCP 安全控制和工具
让我们开始吧!
GCP 简介
谷歌推出的第一项服务是它的同名搜索引擎。那是在 1998 年,当时普通人开始大量使用互联网。创始人拉里·佩奇和谢尔盖·布林使用的第一台服务器(infolab.stanford.edu/pub/voy/museum/pictures/display/0-4-Google.htm)配备了 10 个 4GB 的硬盘,它们的硬件放在由乐高积木搭建的框架中!他们的第一台服务器运行在斯坦福大学的网络基础设施和场地上。
谷歌专为企业客户推出的第一项服务是其 AdWords 广告平台,现在称为 Google Ads(ads.google.com/home/)。此后几年,它推出了许多仍然非常流行的服务,例如 Gmail,并且它也关闭了更多的服务(killedbygoogle.com/)。
一项应该能持续发展并进化多年的服务集合是 GCP。
GCP 最初只是 2008 年的 App Engine (cloudplatform.googleblog.com/2008/04/introducing-google-app-engine-our-new.html)。那是亚马逊推出 AWS(我们现在所知的版本)大约两年之后。App Engine 是一个让企业和其他实体能够在 Google 平台内推出自己网络应用程序的方式。在 App Engine 初期,Google 将其使用限制在 10,000 个客户。这样,Google 有机会修复漏洞,并逐步扩展其基础设施,以便与亚马逊的 AWS 和微软的 Azure 更具竞争力。
到 2011 年 11 月,Google 将 App Engine 作为正式支持的产品,提供给任何愿意为其服务付费并遵守其政策的个人或实体。Google 逐步推出更多云服务,而 App Engine 成为 GCP 旗下多个产品中的一个。
截至 2023 年,GCP 的免费套餐提供的磁盘存储(5 GB 的云存储)比 Google 第一台服务器机器中单个 HDD 的整个容量(4 GB)还要大。Google 服务 25 年来,我们的进步确实不小!
在 GCP 进行任何渗透测试之前,重要的是要审查 Google 的Google Cloud Platform 可接受使用政策,以确保我们遵守该政策。以下内容来自 Google Cloud (cloud.google.com/terms/aup?sjid=12831346254261876451-NA):
客户同意不使用,也不允许第三方使用 服务:
-
侵犯或鼓励侵犯他人法律权利 的行为;
-
从事、宣传或鼓励非法活动,包括儿童性剥削、儿童虐待或恐怖主义或暴力行为,这些行为可能对个人或群体 造成死亡、严重伤害或伤害;
-
出于任何非法、侵入性、侵权、诽谤或欺诈目的,包括非自愿明确图像(NCEI)、侵犯他人知识产权、网络钓鱼或创建 金字塔骗局;
-
传播病毒、蠕虫、木马、损坏文件、骗局或其他具有破坏性或 欺骗性质的项目;
-
未经授权访问、干扰或削弱客户、授权经销商或其他 授权用户使用服务或提供服务的设备;
-
禁用、干扰或规避任何服务、软件或用于提供服务的设备的任何方面;
-
生成、传播、发布或促进未经请求的大宗电子邮件、促销、广告或其他 solicitations(“垃圾邮件”);或
-
使用服务或与服务提供的任何接口,以违反其他 Google 产品或服务的服务条款的方式访问任何其他 Google 产品 或服务。
简而言之,你可以在 GCP 上进行渗透测试,而无需请求 Google 的许可。但你被允许做的事情是有限制的。你绝对不能进行任何可能对其他 GCP 客户造成干扰的渗透测试。这意味着不能进行 DDoS 攻击模拟,不能分发恶意软件,不能尝试访问你所在公司拥有的资产以外的内容,而且——显然——不能违反法律。鼓励非法活动和分发恶意软件还可能会危害到不使用 GCP 的人群。漏洞扫描、查找公司所拥有资源中的暴露和未受保护的敏感数据是被允许的。只要确保你的公司已经书面授权你进行这些操作。
现在,让我们探索一下 GCP 提供的内容。
常用的 GCP SaaS 应用
GCP 生态系统中有大量的应用和服务,其中许多被归类为 SaaS。这意味着 Google 提供了基础设施、平台和运行在其上的应用。作为用户或组织,你只需对输入到应用中的代码或数据负责。
由于 Google 对其 SaaS 服务有更大的责任和控制,因此你在遵守其政策的前提下,进行渗透测试的能力非常有限,甚至几乎没有。Google 支持团队表示如下内容(support.google.com/cloud/answer/6262505?hl=en#zippy=%2Cdo-i-need-to-notify-google-that-i-plan-to-do-a-penetration-test-on-my-project):
我是否需要通知 Google,我计划对 我的项目进行渗透测试?
如果你计划通过渗透测试评估你的云平台基础设施的安全性,你无需联系我们。你需要遵守云平台可接受使用政策和服务条款,并确保你的测试只影响你的项目(而不是其他客户的应用)。如果发现漏洞,请通过漏洞 奖励计划 进行报告。
这与基础设施有关,而非应用程序。你将拥有更多自由来渗透测试和漏洞扫描 Google 的 PaaS 和 IaaS 服务。
尽管如此,云渗透测试人员仍然需要了解 GCP 生态系统中有哪些 SaaS 服务。理解 GCP 中的 SaaS 有助于你了解你所在的组织如何整体使用 GCP。组织通常会使用一些 PaaS 或 IaaS 服务,除了 SaaS 之外,GCP 服务也能够互相连接。而且,有时,组织的 IaaS 和 PaaS 应用会与 GCP 的 SaaS 应用接口。如果一个组织的数据从 IaaS 或 PaaS 应用流向 SaaS 应用,那么这些数据的安全性可能会从 IaaS 或 PaaS 端进行渗透测试。
以下是一些最常用的 GCP SaaS 服务。
Google Workspace
Google Workspace (workspace.google.com/) 在某种程度上相当于谷歌的 Microsoft 365 for Business。Google Workspace 的特点是它将谷歌知名的生产力应用程序整合在一起,例如 Gmail、Google Calendar、Google Meet、Google Chat、Google Drive、Google Docs、Google Sheets、Google Slides 和 Google Forms。
如果这些听起来很熟悉,那是因为这个套件以前被称为 G Suite。谷歌确实喜欢不时地更改品牌名称!这让我们保持警觉!无论企业是否订阅 GCP,第一次使用 Google Workspace 时,都会获得 14 天的免费试用期。Google Workspace 及其组件具有更大的使用容量和企业特定功能,而这些功能在 Gmail、Google Docs 等消费者版本中是没有的。
Google App Engine
Google App Engine 在本章开头提到过,因为它是谷歌为企业市场提供的首个云服务,也是首个 GCP 组件。
App Engine (cloud.google.com/appengine) 是一种在谷歌基础设施上部署 Web 应用程序的“无服务器”方式。虽然技术上有服务器,但 App Engine 用户不需要管理或配置它。
由于 App Engine 用户不管理其平台或基础设施,因此它本质上是一个 SaaS 服务。App Engine 用户可以使用 Node.js、Java、Ruby、C#、Go、Python 和 PHP 等常用的应用程序开发技术来构建应用程序。如果开发人员在其他平台上已经熟练掌握这些语言之一或多个,那么学习如何使用 App Engine 应该是相当容易的。
Cost Management
AWS 和 Azure 都提供供其平台用户使用的应用程序,用于管理在这些平台上的云服务开支。谷歌也为 GCP 提供了类似的应用程序——Cost Management。
Cost Management (cloud.google.com/cost-management) 不仅仅是简单地说“你上个月花费了 $364.24。”相反,它提供了大量的图表和图形,让你能够理解自己在使用每个 GCP 组件时的开支趋势。
当我带你完成在 第十一章 中部署 GCP 环境以进行渗透测试教育时,我强烈建议定期检查 Cost Management,以确保不会产生意外费用。如果不小心,免费服务可能会变成付费服务!
Google Cloud app
Google Cloud app (cloud.google.com/app) 可以安装在你的 iPhone 或 Android 手机上,让你随时随地轻松查看你的 GCP 服务和网络。
配备物理键盘的笔记本电脑或台式 PC 是进行详细开发和管理工作时最理想的界面。但 Google Cloud 应用程序可以帮助您理解并发现生产问题,管理您的资源,如项目、计费、App Engine 应用和计算引擎虚拟机,接收和响应与生产相关的警报,并对您的 GCP 部署进行一般更改。
Google Cloud 应用程序的功能包括警报、错误报告、事件管理、可自定义的仪表板、计费以及检查您在计算引擎、云存储、云 SQL 和 App Engine 中的使用情况。
Google 营销平台
Google 最早的盈利模式是基于广告收入(Google AdWords,现在称为 Google Ads)和为广告商提供数据挖掘服务。因此,Google 不仅懂技术,也非常了解营销。因此,Google 营销平台对于企业来说是非常有用的。
Google 营销平台 (marketingplatform.google.com/about/enterprise/) 包括用于衡量用户如何使用您的应用程序的 Analytics 360,针对营销需求测试应用程序的 Optimize 360,帮助更好理解营销活动效果的 Search Ads 360,用于了解您在营销中使用的标签效果的 Tag Manager 360,以及帮助了解每个营销活动的效果的 Campaign Manager 360。
现在,让我们深入了解 IaaS。这些是提供给企业最多控制权的云服务,同时也将操作和确保服务安全的责任最大程度地委托给它们。
GCP IaaS 服务
使用 GCP IaaS 服务,您可以获得最大的控制权,但同时也承担最大的责任。Google 提供其网络基础设施以及用于部署虚拟机的硬件和工具。
使用 IaaS 服务与部署本地云网络之间的主要区别在于,您所在的组织无法物理接触到基础设施。您所在的组织中的任何人都不允许触碰 GCP 数据中心中任何计算机的物理电源按钮。您甚至不被允许物理进入这些数据中心。
但是,在 IaaS 服务中,您有更多的自由来进行渗透测试活动。您仍然需要确保遵守 Google Cloud Platform 可接受使用政策。不过不用担心,因为我在第十一章和第十二章中提供的所有渗透测试教程都是符合政策的!
以下是 GCP 组件,它们为您的组织提供了 Google 的基础设施,并让您的组织完成其余工作。(这些服务有时也可以与其他服务结合,用于 PaaS 和 SaaS 提供的服务。)
计算引擎
Compute Engine (cloud.google.com/compute) 是 GCP 组件,允许你的组织在 Google 的基础设施上运行虚拟机。Compute Engine 就是字面意思,它处理计算处理。Compute Engine 也推动了许多 GCP 的 PaaS 和 SaaS 服务。但如果你只是使用 Compute Engine 和 Cloud Storage,那你得到的就是一个 IaaS 解决方案。
Compute Engine 对于广泛的云网络应用场景非常有用,因为 Google 在其 GCP 数据中心拥有的硬件远远超过大多数公司能拥有的硬件。Compute Engine 特别适用于大量的 DevOps 和 持续集成/持续部署(CI/CD)需求。但你也可以在 Compute Engine 中部署简单的虚拟机(VM)。
Cloud Storage
虽然 Compute Engine 基本上负责 CPU 功能,Cloud Storage (cloud.google.com/storage) 负责磁盘功能。许多 SaaS 和 PaaS 解决方案也使用 Cloud Storage,但 Cloud Storage 也可以直接用于 IaaS 设置。
Google 说,使用 Cloud Storage,你可以存储任何数量的数据,并且可以随时检索。这个说法很大胆,但 Google 拥有存储 PB 级别数据的基础设施,如果你需要的话。只是不能免费提供——会收费的!当我们在下一章部署 GCP 网络用于教育目的时,我会免费获得 5 GB 的存储空间。这对于我的临时测试需求已经足够了。
受保护虚拟机(Shielded VMs)
如果你的组织处理的是额外敏感的数据,比如——例如——你在医疗、法律或公共部门工作,受保护虚拟机可能是最适合你云安全和合规需求的解决方案。
受保护虚拟机(Shielded VMs)(cloud.google.com/shielded-vm) 是专门配置的,用来实施防止启动病毒和根工具的安全控制。根工具是授予攻击者恶意管理员权限的恶意软件,而启动病毒是能够在操作系统启动过程中持久执行的恶意软件。
受保护虚拟机(Shielded VMs)运行在专用硬件上,使用特殊的 统一可扩展固件接口(UEFI)固件(该固件用于在物理机器启动操作系统或虚拟机监控程序前启动机器),虚拟可信平台模块和完整性监控。
在 GCP 的标准 Compute Engine 配置中,你可以以非常安全且符合规定的方式运行虚拟机,但受保护虚拟机通过其专用硬件和其他功能更进一步。如果一个组织的安全需求特别高,并且有相应预算,他们通常会选择多花点钱购买受保护虚拟机。尝试渗透测试受保护虚拟机中的额外安全控制将会带来麻烦,所以不要考虑这样做!
独占节点(Sole-tenant nodes)
独占节点是另一种可能非常昂贵的 IaaS 选项,用于在 Google 的基础设施上部署超敏感的应用程序。
像 GCP 这样的云平台可以用来部署公共云和私有云。大多数 GCP 用户实现的是公共云服务,这意味着我们的应用程序运行在同样也供其他 GCP 客户使用的硬件上。每当我在本书中向你讲解如何部署云网络用于教育目的时,我们使用的都是公共云服务。
私有云可以托管在公司自己的场所,但 GCP 和其他云平台也提供可以仅供单一客户使用的机器。这里所说的“客户”是指订阅云服务以托管自己应用程序的个人或公司,而不是指客户的客户,如果这样说清楚的话。假设我是一个 GCP 客户,我可以支付 GCP 服务费用来托管我的鞋店电子商务网站。我从我的 GCP 托管站点购买鞋子的顾客,在这个意义上并不是 GCP 客户;我才是 GCP 客户。呼!
不管怎样,GCP 所称的独占节点(cloud.google.com/compute/docs/nodes/sole-tenant-nodes)是另一种在 GCP 生态系统中部署私有云服务的方式。某些行业和公司出于合规性要求必须仅使用私有云服务。因此,他们可能会支付高额费用给 Google,以确保他们的机器不会与其他 GCP 客户共享。
所以,那些是可以用于 IaaS 部署的 GCP 服务。现在,轮到 PaaS 了。
GCP PaaS 服务
PaaS 介于 SaaS 和 IaaS 之间。SaaS 意味着你基本上只是在 Google 的应用程序中运行你的代码、命令、文档或媒体,运行在 Google 的平台和基础设施上。IaaS 意味着 Google 允许你使用它的硬件,但你负责提供自己的平台和应用程序。PaaS 意味着 Google 提供一个平台,你可以在其上运行自己的应用程序。
PaaS 的责任和工作量不如 IaaS 部署那样大,但它仍然比 SaaS 更具工作量。以下是 GCP 中的一些服务,它们为客户提供 Google 的平台,以支持客户自己的定制应用程序。
云 SDK
Cloud SDK(cloud.google.com/sdk)是开发人员的标准开发工具包。它包括 Java、Python、Node.js、Ruby、Go、.NET、C++、PHP 和 高级商业应用编程(ABAP)的客户端库。它具有可以集成到 Google Cloud CLI 中的特殊工具。
简而言之,Cloud SDK 是一组工具,开发人员可以使用它们来开发自己的定制应用程序,利用 GCP 生态系统中的各种技术。
Cloud SQL
Cloud SQL 用于在 GCP 上托管 结构化查询语言(SQL)数据库。绝大多数后台驱动的应用程序,无论是基于 Web 的还是其他类型的,都至少需要一个数据库。而如今,绝大多数数据库都使用某种类型的 SQL。
Cloud SQL (cloud.google.com/sql) 是一个托管的关系数据库服务,支持 MySQL、PostgreSQL 和 SQL Server。它消除了许多部署 SQL 服务器的麻烦。Cloud SQL 简化了 SQL 服务器的部署和管理过程。
Cloud Run
Cloud Run (cloud.google.com/run) 使得部署容器化应用程序变得更加容易。如果需要,Cloud Run 可以使用 Docker 镜像。(不过,Google Kubernetes Engine(GKE)可能是 Kubernetes 部署的更好选择。)
Cloud Run 支持 Go、Python、Java、Node.js、.NET、Ruby 以及其他许多流行的应用开发编程语言。
GKE
所以,这自然过渡到了 GKE。
Kubernetes 是一个容器编排平台,建立在 Docker 核心功能的基础上。Kubernetes 是开源的,并使用许多开源标准,但最初是由 Google 的一个团队开发的,包括 Joe Beda、Brendan Burns 和 Craig McLuckie。因此,尽管可以在 AWS 和 Azure 上通过原生支持部署 Kubernetes,但可以说 GCP 才是 Kubernetes 的真正家园。GKE (cloud.google.com/kubernetes-engine) 是在 GCP 中部署 Kubernetes 最便捷的方式。
Anthos
Anthos (cloud.google.com/anthos) 旨在帮助组织部署多云和混合云网络。
正如本书前两章所解释的,混合云是指公司在云平台上拥有服务,并在本地拥有服务器,两者互相集成。多云是指组织使用多个云服务提供商,并且来自多个提供商的云服务相互集成。
所以,一个组织可能拥有 GCP 服务和一些自有服务器,这就是混合云。它们可能在 AWS、Azure 和 GCP 上都有服务,这就是多云。它们也可能有自有服务器和 AWS、Azure、GCP 上的服务,这就是同时拥有混合云和多云的情况。这就是混合多云!
Anthos 使得管理这些不同类型的云配置变得更加简单。
接下来,让我们看看一些重要的 GCP 安全控制和应用程序。
GCP 安全控制和工具
让我们来看看 Google 为 GCP 客户提供的一些应用和功能,以提升他们的安全性。你的组织真应该使用这些功能!然后,我们将讨论一些有用的第三方安全工具。
安全控制
Google 提供了许多有用的应用程序,可以帮助我们管理 GCP 中的安全态势。让我们来看看它们。
身份与访问管理
身份与访问管理(IAM)(cloud.google.com/iam)是云安全的重要组成部分,GCP 也不例外。
用户和用户组会被授予有关他们可以对公司文件、应用程序和其他云资源执行哪些操作的权限。您的组织应当实施最小权限原则(PoLP),确保用户和用户组仅拥有执行工作所需的最小访问权限,而不会过度访问。
IAM 与 Cloud Identity 配合使用,用于在应用和项目之间同步用户帐户。双因素认证(2FA)可以直接通过 Google 管理控制台进行设置。这非常有用,因为云安全基准和一些数据法规要求用户除了密码外,还必须提供其他认证方式。
要求启用 2FA(或多因素认证,MFA)并不是为了让管理员和用户烦恼的愚蠢规定。密码被认为是一种弱认证方式,因为它们经常被破解或泄露。增加另一个认证因素可以像用户在手机上安装 Google Authenticator,并在登录公司 GCP 服务时输入该应用生成的 OTP 一样简单。
IAM 还具有强大的详细用户帐户日志功能。每个用户都必须对自己的行为负责,IAM 使管理员能够看到每个用户的操作记录。这些日志还可以传送到其他安全工具中,如入侵检测系统(IDS)。
Cloud IDS
说到 IDS,有Cloud IDS,这是 GCP 的原生 IDS。
当正确使用 Cloud IDS(cloud.google.com/intrusion-detection-system)时,它可以检测许多种恶意软件攻击和从命令与控制(C2)服务器发起的网络攻击。
Cloud IDS 可以监控 GCP 部署中的东西向流量和南北向流量。东西向流量是在云网络内部不同服务和机器之间的流量,而南北向流量则是云网络与公共互联网及其他外部网络之间的流量。网络攻击可以在东西向和南北向流量中传播!
Cloud IDS 可以生成警报,帮助管理员在攻击发生时及时应对。
Cloud IDS 生成的数据也可以在网络安全事件发生后用于调查。
Cloud Firewall
Cloud Firewall 可以配置为过滤或限制云网络内某些类型的流量或网络活动。
谷歌表示,Cloud Firewall (cloud.google.com/firewall) 可以提供“精细控制,包括无需重新架构网络的微分段”。这是一堆复杂的计算机网络术语,我很乐意将其翻译成简单的英语——Cloud Firewall 让管理员可以控制非常小的活动以及更大活动中的小组件,包括在不需要完全改变网络设置的情况下,将一个网络划分为更小的管理区段。
防火墙有很多方式来管理流量,包括 Cloud Firewall。流量可以根据其 TCP/IP 端口、IP 地址、域名和用户账户来管理。Cloud Firewall 可以利用 威胁情报(TI)来自第三方,来确定需要阻止的 IP 地址、域名和用户。
Secret Manager
Secret Manager (cloud.google.com/secret-manager) 为 GCP 用户提供了一种安全的管理其秘密的方式。这些秘密并不是指“我小时候数学课上不允许用计算器时偷偷用了计算器”这样的事,而是 Secret Manager 保护的是如密码、加密证书、API 密钥(它们让应用程序之间进行通信)以及其他各种敏感的身份验证数据。
因此,当您为 web 服务器设置 TLS 证书,或者用户通过 IAM 创建账户密码时,这些信息会被存储在 Secret Manager 中。可以把它当作一个巨大的银行保险库,里面有一扇厚重的防弹门,而所有的密钥都保存在里面。保护这些密钥是至关重要的,防止黑客和其他恶意实体对您的 GCP 应用程序和数据做出不良行为。
Cloud DLP
Cloud DLP(即数据丢失防护)(cloud.google.com/dlp) 帮助确保您的 GCP 中的重要数据不会丢失!没错—它的名字正好描述了它的功能,但显然,它所使用的技术需要更多的描述。
Cloud DLP 可以使用掩码和令牌化来模糊化您的数据。例如,如果一个信用卡号码通过您的电子商务应用的销售点(POS)系统,而它的号码是 G2F69,Cloud DLP 可能会将其伪装成 B7K31(请注意,实际信用卡号码不会使用这种格式;这里我为了安全起见做了额外的保守处理!)
Cloud DLP 还可以向安全管理员展示某段数据是如何从这里经过,然后那里再经过,最后从另一个更远的组件流出的。当然,这不是那么模糊。Cloud DLP 还可以追踪数据离开云端的路径,并防止那些不应该离开云端的敏感数据被泄露。
安全指挥中心
Security Command Center (cloud.google.com/security-command-center) 是一个统一的界面,将这些 GCP 安全控制与其他 GCP 安全控制结合在一起。
理论上,你可以在一台显示器上打开一个 IAM 面板,独立于另一台显示器上显示的 Cloud Firewall 面板。
然而,当所有这些安全应用程序相互集成时,它对安全管理员的帮助非常大。当管理员能够看到一个安全组件如何与另一个组件协同工作,或者网络攻击如何尝试做一种坏事,然后再做另一种坏事时,这对于防御网络攻击帮助巨大。
Security Command Center 使得识别安全配置错误和多种类型的安全漏洞成为可能,从而能够尽快有效地解决这些问题。
除了帮助管理员检测网络威胁外,Security Command Center 还可以设置以帮助公司确保他们遵守适用于他们的数据安全法规。
现在,进入你在 GCP 中进行漏洞扫描和渗透测试时可以使用的第三方工具。
安全工具
许多非常有才华的渗透测试人员开发了旨在 GCP 中使用的第三方渗透测试和安全测试工具。此处提到的所有工具都是开源的,并可以通过 GitHub 获得。在本节中,你将找到我认为最有用的 GCP 渗透测试工具。
GCPBucketBrute
GCPBucketBrute (github.com/RhinoSecurityLabs/GCPBucketBrute) 是由 Rhino Security Labs 开发的。你可能已经注意到,在本书中,Rhino Security Labs 还开发了一些我提到过的其他渗透测试工具,如 Pacu 和 CloudScraper。
GCPBucketBrute 是一个脚本,用于列举 Google Storage 桶,查看哪些组件和实体有权访问它们,以及是否可以提升权限。如果网络犯罪分子能够访问你组织的桶,尤其是当他们能够提升权限做任何他们想做的事情时,这非常危险。因此,渗透测试人员应该运行此工具,在坏人发现这些漏洞和攻击路径之前先找出这些问题。
根据 README 文件(github.com/RhinoSecurityLabs/GCPBucketBrute/blob/master/README.md),脚本执行以下步骤来查找安全问题:
-
给定一个关键词,这个脚本会根据从 关键词生成的多个排列组合来列举 Google Storage 桶。
-
然后,任何发现的桶都会 被输出。
-
然后,任何你被授予的权限(如果有)对任何已发现的桶都会 被输出。
-
然后脚本将检查这些权限是否存在权限提升(storage.buckets.setIamPolicy),并输出任何有趣的信息(例如公开可列出、公开可写、经过身份验证可列出、权限提升等)。
Scout Suite
我之前提到过 nccgroup 的 Scout Suite (github.com/nccgroup/ScoutSuite)。它也与 GCP 配合得很好,所以我再提一下。正如 README 所说:
“ScoutSuite 是一个开源的多云安全审计工具,能够对云环境进行安全态势评估。通过使用云服务商公开的 API,Scout Suite 收集配置数据供人工检查,并突出显示风险区域。与在 Web 控制台上浏览数十页不同,Scout Suite 自动呈现攻击面视图。”
和我提到的许多工具一样,您可以直接从每个平台使用的 CLI 运行 ScoutSuite。
Hayat
Hayat (github.com/DenizParlak/hayat) 由 Deniz Parlak 开发。Hayat 在土耳其语中意为“生命”,开发者还将其脚本命名为自己侄女的名字,真甜!
Hayat 是一款可以审计 Cloud SQL 实例、IAM、Cloud Storage、网络配置、VM、日志和监控系统以及 Kubernetes 集群的脚本。
Parlak 说这 暂时 就是这些,这似乎意味着将来会添加更多功能。我等不及了!
gcp_firewall_enum
Chris Moberly 的 gcp_firewall_enum (gitlab.com/gitlab-com/gl-security/threatmanagement/redteam/redteam-public/gcp_firewall_enum) 解析您的 GCP 数据输出,列举出通过其网络端口暴露在互联网上的计算实例!过多这种暴露肯定是个坏事。
然后,gcp_firewall_enum 根据结果生成 Nmap 脚本。Nmap 是最常用的网络安全测试工具之一;它是一个网络映射器,可以用来绘制网络图。我喜欢这些描述性的名字——它们非常方便。
Gcploit
Gcploit (github.com/dxa4481/gcploit) 是一套用于渗透测试的工具集,旨在发现 GCP 中的安全漏洞。
让我们来看看它们吧!
-
BFS Search是一款威胁建模工具。它可以帮助您找出威胁行为者可能如何攻击您的 GCP 应用程序。 -
Mock Graph也可以用于威胁建模。 -
然后,主要的 Gcploit 组件执行两个特定的漏洞利用,
actAs和dataproc。Dataproc API 用于配置数据资源,actAs 是一个可以用来进行恶意访问的漏洞利用。
Gcploit 基于 Dylan Ayrey 和 Allison D 在 2020 年 Black Hat 上的演示。在 Gcploit 的 README 中,他们提到过其他他们希望添加的漏洞,但尚未实现。
gcp-iam-role-permissions
Brad Geesaman 和 Josh Larsen 的 gcp-iam-role-permissions (github.com/darkbitio/gcp-iam-role-permissions) 是一个脚本,用于查找 GCP IAM 角色及其权限,包括基本角色和预定义角色。
在设置 GCP 中的用户帐户时,必须非常小心,保持默认设置通常是非常糟糕的主意,因为攻击者可能会尝试基于这些设置的漏洞。用户帐户及其访问权限应该根据一些与更改默认密码相同的原因进行定制。
Geesaman 和 Larsen 的工具帮助渗透测试人员在坏人之前检测出这些类型的漏洞。
GCP Scanner
GCP Scanner (github.com/google/gcp_scanner) 拥有许多不同的贡献者,并且它在 Google 的官方 GitHub 账户下发布。但 README 的开头有这样的免责声明:
“这个项目不是官方的 Google 项目。它不受 Google 支持,Google 特此声明不对其质量、适销性或特定用途的适用性承担任何保证。”
那肯定和 Google 的律师有关。这就像 Google 在说:“这是一个很酷的渗透测试工具,但如果它不能正常工作,别怪我们。”我觉得你还是应该尝试一下,尤其是如果你想在 GCP 部署中尝试,作为自己的教育用途。
GCP Scanner 可以帮助你确定在 GCP 网络和应用程序中某些凭据的访问级别。你可以将 GCP Scanner 的结果用于渗透测试报告,也可以用来加强你组织在配置 IAM 时的安全性。
GCP Scanner 可与以下类型的凭据一起使用:
-
GCP VM 实例元数据
-
存储在 Google Cloud (gcloud) 配置文件中的用户凭据
-
授予云平台范围的 OAuth2 刷新令牌
-
GCP 服务帐户密钥(JSON 格式)
GCP Scanner 可以测试 Compute Engine、App Engine、Cloud Storage、GKE、Bigtable、BigQuery 和 Cloud Functions。
我们一定会在 CLI 中运行 GCP Scanner,具体见 第十一章;应该会很有趣!
摘要
GCP 的根源可以追溯到 2008 年 Google 发布了 App Engine,这是一个让企业和其他实体可以在 Google 平台上发布自己 Web 应用程序的方式。App Engine 被证明非常受欢迎。因此,随着时间的推移,Google 发布了大量额外的云服务,企业和组织可以使用这些服务来管理其生产网络和网络应用程序。
GCP 是 Google 与 Amazon 的 AWS 和 Microsoft Azure 竞争的方式。然而,许多组织部署了多云网络,使用所有这些云平台以及更多平台。
在 IaaS 中使用的两个最重要的 GCP 组件(但也可以在 SaaS 和 PaaS 中使用)是 Compute Engine 和 Cloud Storage。Compute Engine 就像 CPU,Cloud Storage 就是你的磁盘。
Google 还提供了许多非常有用的安全控制,您的组织应该利用这些工具来增强抵御网络攻击的能力。它们包括云防火墙、IAM、密钥管理器、云 IDS 以及一些其他应用程序。管理员可以通过安全指挥中心的集成界面,全面实时查看组织的安全状态、安全事件和漏洞。
有许多第三方工具可用于对 GCP 进行渗透测试。它们包括 Scout Suite、GCPBucketBrute、Hayat、GCP Scanner、Gcploit 和 gcp_firewall_enum。
在我们已大致了解了如何对 GCP 进行渗透测试后,在下一章中,我们将对 GCP 中的 Docker 和 Kubernetes 集群进行渗透测试。
深入阅读
若要了解本章中涵盖的主题,您可以访问以下链接:
- GCP 免费 套餐:
cloud.google.com/free
)
- Google Cloud 产品:
cloud.google.com/products
)
- Google Cloud 平台服务条款:
cloud.google.com/terms/
第十一章:通过无服务器应用程序和工具渗透测试 GCP 特性
现在我们已经了解了 Google Cloud Platform(GCP)所提供的各种服务,是时候开始我们的 GCP 部署,并通过动手实践学习一些 GCP 渗透测试工具了。
我们将在我们在第十章中设置的 GCP 虚拟机上安装并执行一些渗透测试工具。这些工具包括 Prowler、GCPBucketBrute 和 GCP Scanner。我们还将查看 Google 在安全指挥中心为我们提供的安全工具。
本章将涵盖以下主题:
-
GCP 免费层
-
启动一个 GCP 网络
-
使用 GCP Cloud Shell
-
GCP 原生安全工具
-
GCP 渗透测试工具
-
利用 GCP 应用程序
让我们开始吧!
技术要求
我们将使用 Google 的基础设施。巨大的 GCP 数据中心将负责本章练习的大部分计算工作。所以幸运的是,你不需要一台顶级工作站。你将需要以下设备:
-
一个网页浏览器
-
一台台式电脑或笔记本电脑
-
一部安卓手机或 iPhone
-
一条可靠的互联网连接
查看以下视频,观看代码演示:bit.ly/4093wMk
GCP 免费层
我强烈建议你设置自己的 GCP 网络,以便测试本章和第十二章中的练习。
有几个 GCP 产品和服务,你可以在免费层中享受而不产生费用。然而,请记住,在注册时,你需要提供 GCP 的信用卡号码。如果你超出了免费层的限制,你的信用卡将被收费,因此你必须非常小心地检查你的使用情况和账单。当我注册时,我获得了 300 美元的免费服务费用信用额度,有效期为我订阅的前 90 天。根据你注册的时间、地点以及具体情况,你可能会或不会获得类似的信用额度。本章稍后我会展示如何检查你的账单状态,以确保你不会产生无法负担或不想支付的服务费用。
截至 2023 年撰写本文时,以下是 GCP 免费层中提供的服务以及它们的限制 (cloud.google.com/free/docs/free-cloud-features):
-
Compute Engine是为 GCP 上的虚拟机提供支持的服务。免费额度包括每月一个 e2-micro 实例。这意味着“每月在以下美国区域之一获得 1 个非抢占性 e2-micro VM 实例:us-west1、us-central1、us-east1。30 GB-月的标准持久磁盘。每月从北美到所有区域目的地(不包括中国和澳大利亚)的 1 GB 网络出口流量”(cloud.google.com/free/docs/free-cloud-features?hl=en#compute)。请记住,区域是 GCP 数据中心的位置。你不必物理上位于美国。你和你的笔记本电脑可以在巴西、印度、埃塞俄比亚或任何能够连接到 GCP 服务的国家。只要你使用的 GCP 数据中心位于us-west1、us-central1或us-east1,你就可以使用这些服务。 -
Cloud Storage是存储数据的主要服务。每月包含 5 GB 的免费额度。那么每月 5 GB 意味着什么呢?“每月 5,000 次 A 类操作,50,000 次 B 类操作,来自北美的 100 GB 网络出口流量,覆盖所有地区目的地(不包括中国和澳大利亚)每月。”(cloud.google.com/free/docs/free-cloud-features#storage)。如果你按照本书中我展示的方式使用 GCP 网络,应该没问题。 -
BigQuery是一个无服务器的数据分析平台。我们在本书中不会使用它,但在免费额度中,你每月可以获得 1 TB 的 BigQuery 查询。 -
App Engine是一个用于部署 Web 应用程序和移动应用的平台。免费额度为每天 28 小时实例。我们在本书中不会使用 App Engine,但如果你部署一个有大量用户的 App Engine 应用,你肯定会因此产生费用。 -
Cloud Run是一个用于部署无状态容器的服务。免费额度为每月 200 万次请求,因此你应该没问题。 -
Cloud Build可以从 Cloud Storage、Cloud Source Repositories、GitHub 或 Bitbucket 导入源代码构建,创建 Docker 容器或其他类型的软件工件。你每天可以获得 120 分钟的构建时间,免费额度内有此服务。本书中我们不会使用此服务,而是将使用标准的默认 Docker 和 Kubernetes 容器镜像。你应该没问题。 -
使用
Google Kubernetes Engine,每月可以获得一个自动驾驶或区域集群。我们将在第十二章中部署一个集群。在免费套餐中,你可以获得一些 Cloud Logging、Cloud Monitoring 和 Cloud Trace 的配额,这些都属于运营套件(以前称为 Stackdriver)。这些功能可以帮助你分析 GCP 中的云活动。免费配额有点复杂,但按照本书中的说明操作,超出配额的可能性很小。为了安全起见,你可以阅读更多关于免费配额的内容 (
cloud.google.com/stackdriver/pricing)。 -
Firestore是一个 NoSQL 文档数据库服务。在免费套餐中,你可以获得 1 GB 的存储空间,但我在这里不会使用它。它主要用于应用开发。 -
在免费套餐中,
Cloud Functions每月提供 200 万次调用。这是一个无服务器环境,用于构建和连接云服务。我们可能不会用到它。 -
Workflows便于在 GCP 与外部 HTTP API 之间进行服务调用。每月提供 5,000 个免费的内部步骤,这应该足够了。 -
免费套餐包括
Cloud Source Repositories的五个用户的免费访问权限,这是一个用于托管私有 Git 仓库的服务,适用于应用开发。我们也不会使用这个服务。 -
我们将使用
Secret Manager,它用于存储密码、证书、API 密钥等。每月在免费套餐中我们可以获得六个秘密版本,这已经足够了。
好的!现在我们知道了我们要做什么,让我们一起部署一个 GCP 网络。在本书中,我们将需要自己的 GCP 部署来测试我们的渗透测试技能。就像我们在 AWS 和 Azure 上部署实例一样,我会一步一步地引导你完成整个过程。
启动 GCP 网络
和 AWS、Azure 一样,你只需要一台运行 Windows、macOS 或 Linux 发行版的现代笔记本或台式电脑,就可以启动和管理 GCP 网络。谷歌的计算机和基础设施负责处理所有计算资源方面的工作。
我还建议你在 Android 手机上使用 Google Authenticator (play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&pli=1) 或 iPhone 上使用 (apps.apple.com/us/app/google-authenticator/id388497605),这样你就可以在 GCP 服务中启用 多因素认证(MFA)。我不建议你用手机做大部分的 GCP 工作,因为 PC 屏幕和物理键盘更适合这类操作。但如果你想查看 GCP 服务的状态,可以在手机上安装 Google Cloud 应用 (cloud.google.com/app)。它特别适合在路上检查你的账单,确保你没有做出任何昂贵的操作!
过去十年内制造的 PC 或 MacBook 和一个可靠的互联网连接,足以让你在全球任何地方部署 GCP 并进行 GCP 上的渗透测试。
所有开始自己的 GCP 部署的工作都可以在你的网页浏览器中完成。让我们开始吧:
- 设置自己的 GCP 网络的第一步是访问 Google Cloud 免费层页面(
cloud.google.com/free),并点击屏幕中央的蓝色免费开始按钮:
图 11.1 – Google Cloud 注册页面
- 在下一个屏幕中,确保你的 Gmail 或 Google 账户已登录。如果你还没有账户,设置一个,或者登录你已经有的账户。在下拉框中选择你的国家,并回答什么最能描述你的组织或需求?的问题。我选择了其他。确保你选择了你已阅读服务条款,然后点击上面写着继续的蓝色按钮:
图 11.2 – Google Cloud 注册屏幕
-
下一屏要求你选择你的支付配置文件。如果你在使用 GCP 服务时发生费用,Google 需要有一个方式向你收费,即使你能保持在免费层的限制内。我已经有了支付配置文件,因为我购买过 Google Play 应用和服务,是 YouTube Premium 订阅者,并且使用过 Google Pay。如果你没有支付配置文件,你可能需要输入信用卡号码或链接你的 Google Pay 账户(
payments.google.com/)。 -
在账户类型下,我选择了个人。除非你是代表企业或组织设置 GCP,否则我建议你选择个人。
-
在姓名和地址下,确保你的姓名和街道地址与信用卡或 Google Pay 账户上的信息一致。
-
在下面,点击蓝色的开始我的免费试用按钮。任何关于额外服务和信用的时间限制(例如我的 90 天$300 服务信用)现在开始!
如果你往下滚动一点,你会看到启动 GCP 项目的按钮。首先,是一些预建的解决方案模板:
-
部署负载均衡的托管虚拟机
-
创建一个安全的CI/CD 管道
-
使用Compute Engine 部署 Java 应用
也有按钮可以在没有模板的情况下启动产品:
-
创建虚拟机
-
创建一个容器化应用
-
运行容器化应用
-
现代化并运行应用
-
执行构建
-
开始使用容器
这是项目启动页面的样子:
-
图 11.3 – Google Cloud 项目启动页面
-
现在,让我们点击创建虚拟机,在 GCP 上使用 Compute Engine 部署一个简单的虚拟机,用于本章中的渗透测试。
-
下一屏显示计算引擎 API,概述中写着在 Google Cloud Platform 上创建和运行虚拟机。点击蓝色的启用按钮。
-
你将被引导到虚拟机实例仪表板,界面如下所示。点击蓝色的创建实例按钮:
图 11.4 – GCP 计算引擎屏幕
- 在下一屏中,我们可以为实例命名并选择其区域和可用区,以及其机器配置。我将向你展示一个最不可能产生服务费用的配置:
图 11.5 – 虚拟机实例的机器配置
-
在名称字段中,给你的实例取个名字。我给它取名为
crowgirl-1。 -
在免费层中,我们使用 Compute Engine 的配额限制为“每月在以下美国区域中的一个,最多创建 1 个不可抢占的 e2-micro 虚拟机实例:us-west1、us-central1、us-east1。”因此,我选择了
us-east1作为我的区域。无论你身处世界的哪个角落,你都可以选择us-west1、us-central1或us-east1。 -
在机器配置下,为了节省费用,我选择了通用型,E2 系列,
e2-micro机器类型(这是唯一一个在免费层中涵盖的机器类型),以及标准虚拟机配置模型。然后点击底部的蓝色创建按钮。
几秒钟到一分钟后,我们的基础虚拟机将在 Compute Engine 中准备好!你会看到类似这样的屏幕:
图 11.6 – 项目中的虚拟机实例列表
默认会安装 Debian Linux 镜像。我们现在有一台可以使用 Bash CLI 的 Linux 虚拟机!
我总是偏向使用云平台网页界面中内置的 CLI。因此,我们来启动 GCP Cloud Shell。
使用 GCP Cloud Shell
要启动 GCP Cloud Shell,请看顶部的菜单栏,点击位于搜索框右侧的>_图标。你是否注意到 GCP 的网页界面和 AWS、Azure 的网页界面非常相似?
图 11.7 – GCP 控制台中的顶部菜单栏
我们在第五章为 AWS 和第八章为 Azure 使用的所有 Bash 命令,在这里也能正常工作。我们在 GCP 中的 Linux 虚拟机本质上和任何其他基于 Linux 的计算机一样;Bash CLI 是标准配置。如果你愿意,可以回顾一下在第五章中提到的 Bash 命令。
Cloud Shell 屏幕长这样:
图 11.8 – Cloud Shell 屏幕
接下来,我们来看一下 Google 提供的一些工具,它们将在我们作为 GCP 渗透测试人员工作时发挥作用。
GCP 原生安全工具
Security Command Center 是您访问 GCP 中所有安全工具的起点。它集成了我在第十章中提到的多种第一方 GCP 安全工具。这意味着您可以在Security Command Center(SCC)面板中查看来自这些应用和服务的数据:
-
Identity and Access Management(cloud.google.com/iam),用于管理您 GCP 网络中所有用户身份和机器身份(例如,Web 服务器的 TLS 证书),并提供强大的日志记录功能,该功能已集成到 SCC 中,也可以集成到组织的第三方安全监控服务中。“Identity and Access Management (IAM) 允许管理员授权谁可以对特定资源进行操作,赋予您对 Google Cloud 资源的完全控制和可视性,以集中管理这些资源。” -
Cloud IDS(cloud.google.com/intrusion-detection-system),其功能与大多数基于网络的入侵检测系统(IDS)相同。它实时读取您的网络日志,并在可能出现网络威胁迹象时通知安全管理员。它可以监控并生成针对入口流量(东西向,从一个内部服务器或应用到另一个)和出口流量(南北向,在您的云网络和公共互联网或其他外部网络之间)的警报。这是零信任网络安全的核心概念——恶意流量可能来自任何地方。内部网络和外部网络之间的安全边界已经不再是过去的常态。Cloud IDS 能够检测的潜在威胁包括恶意软件和由指挥控制中心驱动的攻击。 -
Cloud Firewall(cloud.google.com/firewall),其功能类似于大多数其他基于状态检测的网络防火墙。可以应用全局网络防火墙策略,以根据一般的 GCP 安全基线允许或禁止流量。可以使用 IAM 管理的标签来根据用户和机器身份账户的标签标记来允许或禁止流量。Google Cloud Threat Intelligence 列表也可以应用,以便当 Google 发现新的网络威胁时,您的防火墙会相应更新。当然,安全和网络管理员也可以手动阻止或允许特定的用户和机器。 -
Cloud DLP(cloud.google.com/dlp),一个用于数据丢失防护(DLP)的工具。它追踪数据在您的 GCP 网络中的流动以及如何离开您的 GCP 网络,以确保敏感数据不会被网络泄露。敏感数据可以被防止上传到外部目的地,或者根据情况进行令牌化或掩码处理(例如,将信用卡号写为45xx-xxxx-xxxx-xxx)。
在测试 SCC 时,我了解到必须设置 Cloud Identity 才能访问该应用程序。Cloud Identity Premium 是一项收费服务,提供额外功能。我选择了Cloud Identity 免费版,因为我们希望在进行 GCP 渗透测试时保持低成本:
- 访问
workspace.google.com/gcpidentity/signup?sku=identitybasic,一旦你创建了 GCP 账户,就可以设置 Cloud Identity 免费版。以下截图显示了设置Cloud Identity 免费版的第一步:
图 11.9 – 设置 Cloud Identity 账户
-
在下一个界面,你需要输入你的名字、姓氏和联系邮箱地址。点击下一步。然后,你需要输入一个你有权限访问的域名(例如
packtpub.com,但不能是packtpub.com,因为该域名属于本书的出版社)。幸运的是,我已经有一个用于其他项目的域名。如果你没有自己的域名并且具有管理权限,建议通过 namecheap.com 获取一个。根据你选择的顶级域名(如.com、.net或 .io),每年可能只需 5.00 美元。 -
一旦你为 Cloud Identity 免费版提供了一个你拥有并且具有管理权限的域名,最后一步是为你的新 Cloud Identity/Google Workspace 账户输入用户名和密码:
图 11.10 – Cloud Identity 凭证创建界面
- 接下来,Cloud Identity 向导会引导你添加一个 DNS 验证记录到你的域名,以便 Cloud Identity 可以保护它。该应用程序知道我使用 Namecheap 注册域名,并在添加验证记录时引导我,如下所示:
图 11.11 – 如何将 Cloud Identity 账户与 DNS 提供商连接
一旦按照向导中的步骤操作,可能需要等待几分钟才能完成 DNS 验证过程。
- 然后,你将看到这样一个界面,在这里你可以点击蓝色的继续按钮:
图 11.12 – Cloud Identity 用户设置界面
一旦 Cloud Identity 设置完成,Google 还不会让你访问 SCC。请按照 Google Cloud 文档中 创建和管理组织资源 (cloud.google.com/resource-manager/docs/creating-managing-organization) 页面上的说明,将你的 Cloud Identity 添加到具有 SCC 访问权限的组织中。我发现 TechTrapture 的 YouTube 视频 如何在 GCP 中创建组织、文件夹和项目 (www.youtube.com/watch?v=QvpedBNZqvA) 对确保我的 Cloud Identity 账户是我可以添加项目的组织非常有帮助,从而能够访问 SCC。
在我的 Google Cloud 控制台的 IAM 部分(console.cloud.google.com),我需要确保我的所有者账户具有 Security Center Admin 访问权限,像这样:
图 11.13 – 在 GCP 中为用户账户分配角色
探索 GCP 控制台
一旦进入,你会看到左侧的菜单,其中包含以下面板:
-
概览
-
威胁
-
漏洞
-
合规性
-
资产
-
发现
-
来源
现在我们已经看过了 SCC,知道如何在进行渗透测试时访问它,以获取重要的安全状态信息。
一旦你用你的管理员 Cloud Identity 账户和组织设置好一切,你可以随时通过 console.cloud.google.com 的 Web 应用程序访问 SCC。我通常的做法是在控制台屏幕顶部菜单栏的搜索框中搜索 SecurityCommand Center。
你可以在渗透测试报告中使用这些数据。合规性 面板对你组织的蓝队尤其重要。你的组织可能需要遵守许多数据保护法规,包括 PCI DSS、萨班斯-奥克斯利法案、HIPAA、GDPR 等等。哪些适用于你的组织取决于你的行业、所在地区以及你公司管理哪些外国国家的数据。例如,你的公司可能位于印度,但如果一些客户在欧盟,GDPR 将适用于你组织如何处理他们的数据。
在进行 GCP 渗透测试之前,确保查看 Security Command Center,并在编写渗透测试报告之前。漏洞、资产 和 发现 面板对你的报告特别有用。
现在,让我们在 GCP 中运行一些漏洞扫描和渗透测试吧!
安装 GCP 渗透测试工具
我们将在 GCP 实例中使用一些不同的第三方工具来进行安全扫描。首先,我们将安装它们。
Prowler
我在 第五章 中提到过 Prowler 在 AWS 上的应用,在 第八章 中提到过在 Azure 上的应用。你也可以使用 Prowler 来查找 GCP 中的漏洞。我将简要地带你走过这个过程,因为 Prowler 在本书中已经讲解得比较多了。
我们将做的所有操作都将在 Cloud Shell 中完成。在 GCP 控制台的 Web 应用中,点击搜索栏右侧看起来像 >_ 的图标打开 Cloud Shell。默认的 CLI 是终端,即 Bash。我们在 AWS 和 Azure 章节中使用的所有 Linux Bash 命令都能在这里工作。
首先,我通过以下命令验证了是否安装了 pip 以及版本:
pip -V
这是我在命令行中得到的响应:
pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9)
因此,pip 已经在我的 GCP 基于 Linux 的虚拟机中安装好了 Python 3.9,而我无需做任何操作。pip 是一个用来安装 Python 应用程序的工具。Prowler 基于 Python。所以,你可以使用以下命令在 GCP 中安装 Prowler:
sudo apt-get install python3-distutils
pip install prowler
另外,你也可以使用 GitHub 来安装 Prowler,使用以下命令,然后安装后进行验证:
git clone https://github.com/prowler-cloud/prowler
cd prowler
python prowler.py -v
接下来,让我们安装 GCPBucketBrute,这是我在 第十章 中介绍的工具。
GCPBucketBrute
GCPBucketBrute 专门用于扫描 Google Storage 桶,确定你对它们的访问权限,以及是否能够进行权限提升。这对于你的渗透测试报告非常有用,因为如果 GCPBucketBrute 可以轻松访问你的桶,那么恶意的网络攻击者也能做到!
我们可以使用 git 从 Cloud Shell 安装 GCPBucketBrute(如果你仍在 Prowler 目录中,先使用 cd 命令返回主目录):
git clone https://github.com/RhinoSecurityLabs/GCPBucketBrute.git
cd GCPBucketBrute/
pip3 install -r requirements.txt
现在,让我们安装 GCP Scanner。
GCP Scanner
GCP Scanner 是一个由 Google 开发的 GCP 渗透测试应用程序,但他们在 README 文件中说明了这一点 (github.com/google/gcp_scanner):
“这个项目不是 Google 官方项目。它不受 Google 支持,Google 明确声明不对其质量、适销性或适用于特定用途的保证负责。”
我发现通过 git 安装 GCP Scanner 最为有效:
git clone https://github.com/google/gcp_scanner
cd gcp_scanner
pip install .
接下来,让我们运行刚刚安装的应用程序!
利用 GCP 应用
现在我们已经安装了一些第三方扫描工具,是时候使用它们了。
Prowler
让我们首先通过 Prowler 来了解 GCP 扫描的基础。
默认情况下,Prowler 会使用你用于登录 GCP 的账户凭证。如果你需要更换账户,可以在 GCP Web 控制台的 IAM 中验证你的账户。验证账户凭证后,你可以使用以下命令更改 GCP 中的账户:
gcloud config set account <account>
现在,我们可以通过这个命令在 GCP 中运行默认的 Prowler 扫描。首先确保你在 Prowler 目录中,然后运行扫描:
cd prowler
prowler gcp
如果你使用 GitHub 安装了 Prowler,请在命令中使用 prowler.py,而不是 prowler。
我建议首先执行 help 文件,这样你可以查看 Prowler 中可以使用的所有命令和选项。和之前的章节一样,你可以让 Prowler 列出服务和检查项,并在特定位置使用特定的日志选项运行服务扫描和检查。所有这些信息都可以通过以下命令在 Cloud Shell CLI 上打印出来:
prowler -h
或者,你也可以使用以下命令:
python prowler.py -h
扫描结果可以在屏幕上打印,也可以以 CSV、JSON 或 HTML 文件的形式保存在 Prowler 目录中。你可以在撰写渗透测试报告时使用这些日志。
GCPBucketBrute
接下来,让我们使用 GCPBucketBrute 进行扫描。只要你登录的是用户账户而不是服务账户,你就可以通过未认证扫描获得有效的结果。你可能需要先进入 GCP 网络控制台,确保你已登录用户账户。
接下来,输入这个命令:
python3 gcpbucketbrute.py -k <enter your keyword here> -u
在 CiA 视频中,我使用了 test 关键词,像这样:
python3 gcpbucketbrute.py -k test -u
我还建议尝试其他可能出现在你存储桶文件中的关键词,比如 file 或 print。
当我用 test 进行扫描时,这就是我的结果的开始。不过,我在命令行界面的输出远比这个长:
EXISTS: test-pubsub
EXISTS: project_test
EXISTS: dl_test
EXISTS: test_6
EXISTS: test-export
EXISTS: gcplogs-test
EXISTS: teamcity-test
EXISTS: testproject
EXISTS: appenginetest
EXISTS: test-artifacts
EXISTS: estest
EXISTS: ops_test
EXISTS: staging_test
EXISTS: testtemp
EXISTS: templates-test
EXISTS: bucket_test
EXISTS: testservices
EXISTS: syslog-test
EXISTS: test-sitemaps
EXISTS: cloudtest
EXISTS: trace-test
EXISTS: audit_test
EXISTS: test_ml
EXISTS: gcp-logs-test
EXISTS: test-videos
EXISTS: ux_test
EXISTS: test_tasks
EXISTS: tmp_test
EXISTS: dockertest
EXISTS: testassets
EXISTS: testops
EXISTS: test_support
UNAUTHENTICATED ACCESS ALLOWED: pictures-test
- UNAUTHENTICATED LISTABLE (storage.objects.list)
- UNAUTHENTICATED READABLE (storage.objects.get)
- ALL PERMISSIONS:
[
"storage.objects.get",
"storage.objects.list"
]
GCP Scanner
现在,让我们试一下 GCP Scanner。首先,确保你位于 GCP Scanner 所在的目录:
cd gcp_scanner
创建一个文件夹来保存你的扫描结果:
mkdir <folder name of your choice here>
如果你输入这个命令,你将在命令行中得到一个便捷的帮助指南:
python3 scanner.py -h
我使用这个命令运行了一个简单的元数据扫描。这个命令检查你 GCP VM 文件中的元数据,以查看是否有敏感凭证暴露在其中:
python3 scanner.py -o <folder name you used in mkdir command here> -ls -m
随时玩转 GCP Scanner 帮助指南中显示的所有选项和参数:
GCP Scanner
optional arguments:
-h, --help show this help message and exit
-ls, --light-scan Return only the most important GCP resource fields in the output.
-k KEY_PATH, --sa-key-path KEY_PATH
Path to directory with SA keys in json format
-g GCLOUD_PROFILE_PATH, --gcloud-profile-path GCLOUD_PROFILE_PATH
Path to directory with gcloud profile. Specify - to search for credentials in default gcloud config path
-m, --use-metadata Extract credentials from GCE instance metadata
-at ACCESS_TOKEN_FILES, --access-token-files ACCESS_TOKEN_FILES
A list of comma separated files with access token and OAuth scopes.TTL limited. A token and scopes should be stored in JSON format.
-rt REFRESH_TOKEN_FILES, --refresh-token-files REFRESH_TOKEN_FILES
A list of comma separated files with refresh_token, client_id,token_uri and client_secret stored in JSON format.
-s KEY_NAME, --service-account KEY_NAME
Name of individual SA to scan
-p TARGET_PROJECT, --project TARGET_PROJECT
Name of individual project to scan
-f FORCE_PROJECTS, --force-projects FORCE_PROJECTS
Comma separated list of project names to include in the scan
-c CONFIG_PATH, --config CONFIG_PATH
A path to config file with a set of specific resources to scan.
-l {DEBUG,INFO,WARNING,ERROR,CRITICAL}, --logging {DEBUG,INFO,WARNING,ERROR,CRITICAL}
Set logging level (INFO, WARNING, ERROR)
-lf LOG_FILE, --log-file LOG_FILE
Save logs to the path specified rather than displaying in console
恭喜你,你刚刚生成了一些 GCP 渗透测试扫描日志,你可以在渗透测试报告中引用它们!
在下一章中,我们将进行 GCP 中 Docker 和 Kubernetes 容器内的渗透测试扫描。
总结
创建一个 GCP 网络进行渗透测试练习所需的一切,都可以通过 GCP 免费层的服务来完成。只需确保你在 GCP 网络控制台中检查账单,确保不会产生费用。
你可能需要设置一个 Google Workspace 或 Cloud Identity 账户,才能充分利用 GCP。这包括使用 SCC。SCC 是所有 GCP 内置安全工具的起点。它整合了各种第一方的 GCP 安全工具。你可以使用 SCC 检查一些威胁、漏洞和基于 Google 威胁情报的安全建议。就像使用第三方渗透测试工具一样,SCC 也可以提供一些有用的信息,供你在渗透测试报告中使用。
就像在 AWS 和 Azure 中一样,Prowler 也可以用来扫描 GCP 中的漏洞和合规性。我们在 Cloud Shell 的命令行中运行了 Prowler 漏洞扫描。
GCPBucketBrute 检查攻击者是否能访问你的 GCP 存储桶,以及他们是否可以提权。因为我们刚刚在 GCP 上设置了一个简单的虚拟机部署,内容不多,没想到 GCPBucketBrute 竟然还能找到存在未认证访问权限的地方!
GCP 扫描器可用于确定特定凭证在你的 GCP 部署中拥有何种访问权限。
在下一章,我们将部署 Docker 和 Kubernetes 集群在 GCP 上,并在其中运行一些漏洞扫描。
深入阅读
若想了解本章涉及的更多内容,请查看以下资源:
-
GCP 中的免费服务列表:
cloud.google.com/free?hl=en -
TechTrapture 的 YouTube 视频 如何在 GCP 中创建组织、文件夹和项目:
www.youtube.com/watch?v=QvpedBNZqvA -
Prowler 在 GCP 中的使用:
docs.prowler.cloud/en/latest/#google-cloud -
GCPBucketBrute:
github.com/RhinoSecurityLabs/GCPBucketBrute -
GCP 扫描器:
github.com/google/gcp_scanner
第十二章:在 GCP 中进行容器化应用的渗透测试
如果你所在的组织从事 DevOps 或 CI/CD 应用程序开发,极有可能他们在 GCP 中有 Docker 或 Kubernetes 集群。让我们学习如何对它们进行渗透测试。
本章中,我将解释什么是容器化,为什么要使用容器化,以及容器化通常是如何工作的。我们将学习 Docker 和 Kubernetes 在 GCP 中的工作原理,以及如何在 GCP 中使用 Trivy 与基于 Docker 和 Kubernetes 的应用程序进行配合。
本章中,我们将涵盖以下主题:
-
容器化是如何工作的
-
Docker 在 GCP 中是如何工作的
-
Kubernetes 在 GCP 中是如何工作的
-
在 GCP 中进行 Docker 和 Kubernetes 的渗透测试技术
那么,让我们在 GCP 中探索容器化吧!
技术要求
我们将使用微软的基础设施。庞大的 Azure 数据中心将为本章中的练习提供大量计算处理工作。因此,幸运的是,你不需要一台顶级的工作站。你需要以下设备:
-
一个网页浏览器
-
一台桌面或笔记本电脑
-
一台安卓手机或 iPhone 手机
-
一个良好的、可靠的互联网连接
查看以下视频以查看代码演示:bit.ly/404CEg8
容器化是如何工作的
计算机虚拟化是关于软件模拟硬件功能的。例如,我的笔记本电脑是一台计算机。但在我的电脑上,我可以运行一些软件,假装同时运行几台不同的计算机。(幸好我将笔记本电脑的内存扩展到了 64GB,因为每台模拟计算机可能需要 4GB 的内存!)每台计算机的 CPU、RAM、硬盘和 I/O 设备接口都在软件中被模拟。软件使用我笔记本电脑的实际 CPU、RAM、硬盘和 I/O 接口,并分配它们的容量,以创建几台虚拟计算机。当操作系统和应用程序安装在这些虚拟计算机上时,就操作系统和应用程序本身而言,它们认为每台虚拟计算机都是在自己的物理计算机上运行。
在云网络中部署虚拟化有两种常见方式——虚拟机和容器。
虚拟机
VMs 是模拟计算机,正如我在示例中所描述的那样。它们并不是直接在 PC 或服务器硬件上运行,而是模拟运行操作系统所需的所有硬件组件。在这个模型中,我的笔记本电脑运行一个虚拟机监控器,它充当虚拟机与我的物理计算机之间的层。
你可以在自己的 PC 上使用像 Oracle VirtualBox 或 VMware Workstation Player 这样的应用程序,作为虚拟机的虚拟机监控器。你所需要的只是一个操作系统的磁盘镜像文件,想要在虚拟机中运行该操作系统,然后在虚拟机监控器中进行配置。操作系统不需要与主机操作系统匹配,实际上它们通常并不匹配。我可以在我的 Windows 11 PC 上运行一个 Kali Linux 虚拟机。你可以在你的 MacBook 上运行一个 Windows 11 虚拟机。我也可以在我的 Kubuntu Linux 桌面上运行一个 macOS 虚拟机。
虚拟机也可以在 GCP 等云平台上运行。这样,虚拟化计算机就运行在 Google 的计算机上,而不是你可以物理接触的自己设备上。虚拟机是 GCP 的一个常见使用案例,当公司希望长时间在 GCP 上运行单一计算机时,虚拟机是一个不错的解决方案,例如作为 Web 服务器或邮件服务器。你每天访问的许多网站都托管在运行在云平台(如 GCP)上的虚拟机上!
但是,当公司部署大规模的动态应用时,虚拟机并不是最佳选择,例如使用 DevOps 或 CI/CD 方法论,这些方法要求应用具有高度可扩展性和响应能力。DevOps 或 CI/CD 应用所需的计算处理能力、内存和网络带宽可能一天减少一半,第二天又增加一倍,而虚拟机的硬件容量无法像容器一样迅速变化。分配给虚拟机的硬件资源相对固定。
容器化应运而生。
容器
Docker 和 Kubernetes 是当今公司常用的两种容器化编排平台。容器化编排平台可以自动启动和终止容器,无需直接的人为操作。这些平台管理容器的部署,并处理虚拟化硬件内的负载均衡,只分配所需的硬件资源,如 CPU 和内存。
云平台使得公司和其他类型的企业能够实现容器化应用。Google 在全球各地的多个数据中心拥有庞大的计算机网络和硬件资源,其中很多资源专门用于向全球的商业客户提供 GCP 服务。
Docker 在 GCP 中的工作原理
Docker 不是第一个存在的容器化技术,但它可能是第一个被全球公司和组织广泛使用的容器化技术。它也是 Kubernetes 的基础,Kubernetes 是另一种流行的容器部署方式。Docker 和 Kubernetes 不是像可口可乐与百事可乐那样的竞争对手,而是 Kubernetes 是 Docker 的一个分支,就像将 Debian Linux 和基于 Debian 的 Ubuntu Linux 进行对比一样。
这是一个 Docker 容器化编排系统的基本架构(你可以参考第六章查看架构图)。
Docker 主机直接运行在你的电脑上,或在你管理的云服务上的计算机(例如 Google Compute Engine,或 GCE)。在 Docker 主机中,Docker 守护进程存储 Docker 镜像,并根据这些镜像创建和管理容器。Docker 镜像非常像操作系统的磁盘镜像 ISO 文件,你可以使用这些镜像来创建虚拟机。事实上,许多 Docker 镜像是使用普通操作系统(如 Ubuntu Linux)制作的。然而,这些镜像及其容器可能没有操作系统的所有组件,而仅包含运行容器化应用所需的部分。
Docker 主机连接到注册表,通常(但不总是)该注册表托管在外部网络上,通常是互联网。注册表使 Docker 镜像可以供 Docker 主机下载。注册表还会维护这些镜像并像其他互联网托管的软件一样进行更新,类似于 Git 仓库。
最后,运行在 GCP 控制台或 Docker Desktop 终端上的 Docker 客户端是你可以执行命令的地方,命令将传递给 Docker 守护进程(在你的 Docker 主机下)。这就是你如何向 Docker 容器化编排系统发送指令。在本章中,我们将通过这种方式向 Docker 系统执行命令。
在 GCP 中部署 Docker 容器化系统的默认方式是使用 Cloud Build 来简化 Docker 构建步骤,并利用 Cloud Run 来运行容器化的应用程序,同时 Docker 主机在 GCE 中运行。
这是 Google 对 Cloud Build 的描述(cloud.google.com/build):
“Cloud Build 根据需要进行扩展和缩小,无需设置、升级或扩展基础设施。在 Google Cloud 中的完全托管环境中运行构建,并与您自己的私有网络连接。”
Cloud Build 是一个在后台运行的系统,当你以常规方式在 GCP 中部署 Docker 容器化时,它会执行相关操作。它使开发人员免去管理运行 Docker 容器的服务器的繁琐工作。
这是 Google 对 Cloud Run 的描述(cloud.google.com/run/docs/overview/what-is-cloud-run):
“Cloud Run 使开发人员能够将更多时间花在编写代码上,而很少需要操作、配置和扩展 Cloud Run 服务。你不需要创建集群或管理基础设施就可以高效使用 Cloud Run。”
Cloud Run 是另一个在后台运行的系统,当你以常规方式在 GCP 中部署 Docker 容器化时,它将为开发人员省去调整计算处理配置的麻烦,这些配置用于执行 Docker 容器。
现在我们已经了解了在 GCP 中使用 Docker,接下来是时候学习 Kubernetes 在 GCP 中的工作原理。
Kubernetes 在 GCP 中的工作原理
Kubernetes 可以用于在 AWS 和 Azure 上部署容器化应用程序。在第六章和第九章中,我带领你们了解了如何在这些平台上部署 Kubernetes,并对其进行了渗透测试。但是,GCP 可以说是 Kubernetes 的发源地。原因如下。
Kubernetes 最初是由 Google 的一个团队开发的。Kubernetes 项目在 2014 年由 Google 云计算专家 Eric Brewer 宣布(web.archive.org/web/20150910171929/http:/www.wired.com/2014/06/google-kubernetes)。Kubernetes 的灵感来自于 Docker 所推动的一些容器化创新。但 Kubernetes 主要受到 Borg 的影响(web.archive.org/web/20160701040235/http:/www.wired.com/2015/06/google-kubernetes-says-future-cloud-computing/),Borg 是 Google 用于内部目的的专有云计算中间件。Borg 帮助支撑 Gmail、Google 搜索、Google 地图和其他许多流行的 Google 服务的后台运行。
Google 的 Joe Beda、Brendan Burns、Brian Grant、Tim Hockin 和 Craig McLuckie 将 Kubernetes 构思为一个开源平台,可以用于许多 Google 在内部为 Borg 部署的相同用例。到 2015 年 7 月,Kubernetes 的第一个版本公开发布。到 2017 年,Red Hat(IBM)、VMware、Docker, Inc.、Microsoft Azure 和 AWS 等大型科技公司和软件开发商都宣布支持它。这就是 开源软件(OSS)和开放标准的魅力!正如一些组织拥有集成 AWS、Azure 和 GCP 服务的多云网络一样,一些组织同时也拥有 Docker 和 Kubernetes 容器化应用。
这是一个 Kubernetes 容器化编排系统的基本架构(你可以参考 第六章 查看架构图)。
控制平面支持整个容器化系统,并作为 Kubernetes 基于的网络和云平台之间的载体,例如 GCP 中的 Google Kubernetes Engine(GKE)。控制平面包含几个组件,其中包括以下列出的组件:
-
etcd是一个键值存储。它维护着你所有集群的数据。 -
Pods 在节点的支持下运行,
kube-scheduler会为新创建的 Pods 分配节点。 -
kube-apiserver管理 Kubernetes API。因此,它帮助你的 Kubernetes 基于的应用程序与外部应用程序集成。这也是kubectl(ctl代表 命令行工具)连接的地方,以便向你的 Kubernetes 系统发送命令。 -
kube-controller-manager运行控制器过程。这里有用于维护节点的控制器、用于执行计划任务的控制器(例如,“每天晚上 6 点备份这些文件”)、用于在服务和 Pods 之间生成链接的控制器,以及用于创建服务账户的控制器。Pods 和节点将在本节后面讲解。 -
cloud-controller-manager将你的 Kubernetes 网络连接到云提供商的 API。在 GCP 中,cloud-controller-manager通常与 GKE 接口对接。 -
节点是控制平面的子资源。根据应用程序的需求,节点的数量可能是 2 个、20 个,或者更多。每个节点都包含一个 kubelet。kubelet 是一个节点代理,使用主机名或其他特定于云提供商的标识符将节点注册到 API 服务器。
-
Pod是节点的子资源,也因此是控制平面的孙子资源。每个节点中的 kubelet 根据 PodSpec 来定义节点,PodSpec 是以 YAML 或 JSON 文件形式编写的。需要知道的是,YAML 在某些方面类似于 HTML,而 JSON 是为 JavaScript 使用而创建的——这两种技术都是为 Web 开发而产生的。YAML 和 JSON 文件可以在文本编辑器中查看,有时它们仅包含几行代码。你在作为渗透测试员或红队成员进行漏洞扫描时,可能会扫描 YAML 和 JSON 文件,具体情况视情况而定。但本书的目的并不要求你学会编写自己的 YAML 或 JSON 文件。
每个 Pod 都有一个容器运行时环境,容器在其中运行。容器是由容器镜像构成的,这些镜像类似于操作系统的 ISO 磁盘镜像,通常用于虚拟机中。但是,Kubernetes 的容器镜像只包含执行代码所需的操作系统组件。可以使用许多默认的容器镜像,有时,容器镜像也会根据特定公司及其应用程序进行定制。
最后,节点(包含 Pods)通过负载均衡器与外部交互,负载均衡器帮助管理任何给定时间所需的硬件和网络资源。负载均衡器还为基于 Kubernetes 的应用程序和终端用户之间提供了一个接口。
作为一名云渗透测试员,了解负载均衡器和 API 服务器都可能成为针对 Kubernetes 应用的网络攻击的攻击面是很有帮助的!负载均衡器最常受到来自 Ingress 的网络攻击,Ingress 的流量是从你的云与外部网络之间的南北方向流动的,而 API 服务器则更容易遭受来自云网络内部组件之间东西向的攻击。有时,网络攻击会通过入口路由从公共互联网进入,然后利用横向移动在云网络的不同部分之间传播,这可能涉及权限提升。这有点像小偷闯入百货商店的珠宝部,接着又转到香水和化妆品部。
整个 Kubernetes 容器化系统被称为集群。某些组织可能会部署多个集群。但是,无论组织使用多少个集群,每个集群都由控制平面、节点和 Pods 组成,顺序从底至顶。
GKE(cloud.google.com/kubernetes-engine)是一个专为运行基于 Kubernetes 的应用程序而设计的 GCP 服务。它自动化了集群和节点管理,以及通过负载均衡器提供硬件资源的方式。在绝大多数情况下,大大小小的组织都会选择通过 GKE 在 GCP 上运行 Kubernetes 应用程序。
云计算和容器化的优势在于,应用程序可以变得非常可扩展、动态且高效地使用硬件资源。很多应用程序部署和网络管理的繁琐工作可以通过自动化来完成。因此,组织自然会倾向于使用 GKE,以免陷入服务器管理任务的困扰。在云中的容器化应用程序甚至可以在几天内实现翻倍或减半。无论何时,都应该根据需求提供足够的计算能力和带宽,而容器有时甚至只有几个小时的生命周期。
难怪云计算彻底改变了各类组织在各行各业中通过互联网部署应用程序的方式。然而,组织通过云部署的容器化应用程序与通过云部署的虚拟机一样,可能成为网络攻击者的有吸引力的目标。它们与互联网连接,这为攻击者提供了访问的途径。而且,它们可能包含敏感信息,这些信息能为网络犯罪分子带来丰厚的回报,比如敏感的财务数据。
作为云渗透测试员,你的任务是确保在攻击者尝试进行攻击之前,发现攻击者如何危害你客户的云网络。这样,你所在的公司就能相应地改进其安全措施。
因此,在本书的最后一组实际渗透测试练习中,让我们开始在 GCP 中进行 Docker 和 Kubernetes 的渗透测试吧!
GCP 中的 Docker 和 Kubernetes 渗透测试技术
既然我们了解了 Docker 和 Kubernetes,让我们在 GCP 中部署它们。然后,我们将进行渗透测试。首先,让我们部署我们将练习渗透测试的 Docker 和 Kubernetes 集群。
部署 Docker
我们将在 Docker 部署中使用基本的默认 Docker 容器镜像,因为我们并没有做什么复杂的操作;我们只是试用我们的渗透测试工具!请按照以下步骤进行:
-
我们在 GCP 中部署 Docker 集群的最简单方式是从 Cloud Run 开始。使用你的网络浏览器登录到我们在第十一章中设置的 Google Cloud 帐号。进入 GCP 网页控制台后,访问
console.cloud.google.com/run使用 Cloud Run。Cloud Run 界面应该像这样:
图 12.1 – GCP 控制台中的 Cloud Run 面板
- 点击顶部菜单栏下方的
+CREATE SERVICE。你将看到一个像这样的界面:
图 12.2 – 在 GCP 中创建 Cloud Run 服务以运行 Docker
我们将尽可能使用默认设置,以便创建一个基础的 Docker 环境来尝试我们的渗透测试工具。如果你打算使用 Docker 容器部署某种特定类型的应用,可能需要在 Cloud Run 中使用不同的设置。
为了简单起见,以下是我为我的 Docker 部署在 Cloud Run 中选择的选项:
-
在顶部提供的从现有容器镜像部署一个版本和从源代码仓库持续部署新版本选项中,我选择了第一个选项。
-
接下来,我没有输入容器镜像 URL,而是点击了使用示例容器进行测试。
在此页面,我点击了容器注册表选项卡,并选择了hello演示容器。然后,我点击了容器镜像 URL 旁的选择:
图 12.3 – 为我们的 Docker 实例选择 Docker 镜像
-
在服务名称字段中,我输入了
crawleydockertest。我保留了我的默认区域,对于我来说是us-central1 (lowa)。你的默认区域可能不同。每个区域代表一个特定的 Google 数据中心,而且可能不在你的国家。 -
为了节省费用,在CPU 分配和定价下,我选择了仅在请求处理期间分配 CPU。
-
我没有更改自动扩展选项。默认情况下,
0是最小实例数,100是最大实例数。这种设置反映了云应用的可扩展性。新实例可以根据应用的需求自动生成。 -
在入口控制下,我选择了全部,这将允许从互联网直接访问你的服务。
-
在身份验证下,我选择了允许未经身份验证的调用。这些选项可能不是最佳的网络安全实践,但它们使得在我们的 Docker 应用中尝试渗透测试工具变得更加简单。
-
最后,我点击了底部的蓝色创建按钮。
当服务创建完成时,你的网页控制台界面应该会像这样。对于我来说,创建过程大约花了 30 秒;我并没有等待很长时间:
图 12.4 – 为我们的 Docker 实例创建服务
现在,我们的 Docker 环境已经在 GCP 中创建好了,接下来是创建 Kubernetes 环境!
部署 Kubernetes
在 Cloud Shell 或其他某些 CLI 中也可以部署 Kubernetes,但我更喜欢使用网页控制台来部署服务,使用 CLI 来进行渗透测试工具的操作。按照以下步骤部署 Kubernetes:
-
在 GCP 的网页端登录并进入网页控制台后,访问
console.cloud.google.com/projectselector2/home/dashboard。 -
目前,保持你刚刚打开的项目选择器网页标签不动。在另一个标签页中打开启用 API 访问,并使用此链接:
console.cloud.google.com/flows/enableapi?apiid=artifactregistry.googleapis.com。你会看到如下界面:
图 12.5 – 为 Kubernetes 启用所需的 API 访问
-
点击确认项目。启用 API会过渡并显示你即将启用
Artifact Registry API和Kubernetes Engine API。这正是我们要做的。点击启用。 -
你可能需要等待几分钟才能完成 API 启用的处理。我很惊讶这比创建我的 Docker 测试容器还花了更多时间。但完成后,返回到带有项目选择器仪表板的网页标签。那应该看起来像这样:
图 12.6 – 在 GCP 中为我们的 Kubernetes 实例选择一个项目
-
点击一个项目。记下你的项目 ID;它应该类似于
blissful-axiom-115916,如前面的截图所示。 -
现在,我们将在 Cloud Shell 的 CLI 中完成剩下的工作。点击右上角菜单栏中看起来像这样图标:
>_。 -
首先,我们将确保我们选择的项目是默认项目,方法是在命令行中输入以下命令:
gcloud config set project <your project ID goes here> -
接下来,我们将使用此命令创建一个默认的自动驾驶 Kubernetes 集群。如果你之前设置的区域不是
us-central1,则将其更改为你的区域名称:gcloud container clusters create-auto hello-cluster \ --location=us-central1如你在本练习的Code in Action视频中所见,创建集群可能需要几分钟时间。耐心等待!幸运的是,Cloud Shell 中的命令行会显示等待时的进展。
-
在创建 Kubernetes 集群的几分钟过程完成后,你接下来需要为集群创建身份验证凭证。这将使
kubectl(你在命令行中用来管理 Kubernetes 集群的程序)准备好使用你的新集群。只要确保如果你的区域名称与us-central1不同,请更改为你所在的区域名称:gcloud container clusters get-credentials hello-cluster \ --location us-central1 -
接下来,我们将使用以下命令在新的 Kubernetes 集群中创建应用程序部署。
image=后面的目录路径是我们默认的helloKubernetes 容器镜像,用于测试目的。如果你在读完本书后,想在 GCP 中使用 Kubernetes 做一些特定的操作,可以修改命令以使用不同的容器镜像:kubectl create deployment hello-server \ --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 -
现在,我们需要设置负载均衡器,以便将我们的部署暴露到互联网上。我们将通过互联网访问我们的 Kubernetes 部署以进行渗透测试,所以这一步是绝对必要的:
kubectl expose deployment hello-server \ --type LoadBalancer \ --port 80 \ --target-port 8080 -
最后,我们需要运行一些检查,以确保我们的 Kubernetes 部署已经准备好使用。首先,让我们检查一下 Pods:
kubectl get pods命令行应该显示一个
hello-serverPod。 -
现在,我们将检查
hello-server:kubectl get service hello-server -
复制命令行上打印出的外部 IP。
-
在新的 Web 浏览器标签页中,在地址栏输入
http://<your external IP here>并按Enter。 -
我访问 Kubernetes 部署的外部连接较慢,但最终还是成功了。在 Firefox 中,我收到了一个错误提示,警告我目标是 HTTP 而非 HTTPS。我点击了按钮,访问 HTTP 网站,屏幕上显示了这个内容。成功了!
图 12.7 – 在 Web 浏览器中查看我们的 Kubernetes 部署的 IP 地址
现在我们在 GCP 中已经有了一个正常工作的 Docker 环境和 Kubernetes 环境,是时候利用这些环境来尝试一些渗透测试工具了。
Trivy
Trivy (github.com/aquasecurity/trivy) 是由 Aqua Security 开发的渗透测试工具,且可在 GitHub 上获取。它是一个安全扫描工具,可以在文件系统、虚拟机镜像和 AWS 中发现漏洞。同时,它也可以用来扫描 Docker 和 Kubernetes 镜像。
Trivy 可以在 Red Hat、CentOS、Arch Linux 和 macOS 上运行。所有支持平台的安装说明可以在此处找到:aquasecurity.github.io/trivy/v0.44/getting-started/installation/。我在 GCP 部署的 Linux 虚拟机基于 Debian,因此我将使用 Debian 的安装说明:
wget https://github.com/aquasecurity/trivy/releases/download/v0.44.1/
trivy_0.44.1_Linux-64bit.deb
sudo dpkg -i trivy_0.44.1_Linux-64bit.deb
现在我们已经在 GCP 的 Linux 虚拟机上安装了 Trivy,让我们尝试几个基本的容器扫描练习。如果你想尝试其他的,Trivy 用户和开发者在他们的网站上提供了广泛的容器渗透测试教程 (aquasecurity.github.io/trivy/v0.45/tutorials/overview/)。
让我们尝试寻找我配置 Docker 镜像时的错误配置。记住——错误配置是可以被网络攻击者利用的安全漏洞!按照以下步骤操作:
-
我使用了 GCP 的默认
hello测试 Docker 镜像来构建我的 Docker 容器。这是它的名称和地址:us-docker.pkg.dev/cloudrun/container/hello -
你需要验证你使用的镜像的名称和地址。在你的 GCP 控制台中,搜索
Cloud Run。然后你将看到如下画面:
图 12.8 – 在 Cloud Run 界面查看我们的 Docker 实例
-
我点击了我的 Docker 集群的名称,在我的案例中是
crawleydockertest。然后,我点击了
YAML选项卡,查看了用于构建我的 Docker 集群的 YAML 文件。在image:所在的位置,我找到了我使用的 Docker 镜像的名称和地址。你可以通过相同的方法找到你的镜像:
图 12.9 – 查看用于创建我的 Docker 集群的 YAML 文件
-
现在,让我们运行扫描:
trivy image --image-config-scanners config <insert image location and name here>我的 Docker 镜像找到了,而且配置非常错误!以下是我得到的结果:
图 12.10 – Trivy 扫描输出
如果你正在进行实际的渗透测试,你可以在报告中使用这种类型的数据。
现在,让我们尝试使用 Trivy 对我在 GCP 中的 Kubernetes 集群进行渗透测试:
-
首先,我发现我需要再次暴露我的 Kubernetes 集群,以便 Trivy 能够扫描它:
kubectl expose deployment hello-server \ --type LoadBalancer \ --port 80 \ --target-port 8080 -
然后,我检查了 Pods:
kubectl get pods -
现在,这里有一个 Trivy 命令,对我的 Kubernetes 集群进行了非常彻底的扫描:
trivy k8s -n kube-system --report summary all –timeout 1500s在 Cloud Shell CLI 中等待了几分钟后,我得到了一个非常详细的总结,可以用于渗透测试报告中:
图 12.11 – Trivy 扫描漏洞报告
Trivy 非常有趣,值得探索!
总结
在本章中,我们了解了 GCP 中哪些服务负责容器化管理。我们部署了自己的 Docker 和 Kubernetes 集群。然后,我们使用 Trivy 进行了安全评估。
在 GCP 中部署 Docker 容器化系统的默认方式是使用 Cloud Build 简化 Docker 构建步骤,使用 Cloud Run 帮助运行容器化应用,同时 Docker 主机运行在 GCE 中。
在 GCP 中部署 Kubernetes 的最简单方式是使用 GKE。
Trivy 是一个第三方渗透测试应用,具有许多出色的功能,用于扫描 Docker 和 Kubernetes 部署的漏洞。
在接下来的最后一章,我将测试你对前 12 章所学内容的掌握情况。此外,我还会给你一些编写和签署渗透测试合同的技巧,更多的渗透测试报告写作建议,并向你介绍一些云计算和渗透测试相关的认证,这些认证可能会使你作为云渗透测试员更具竞争力。
深入阅读
要了解更多关于本章所涵盖的主题,你可以访问以下链接:
- Google Cloud Run:
cloud.google.com/run
)
- Google Cloud Build:
cloud.google.com/build
)
)
- Google Cloud 文档关于将容器部署到 Cloud Run:
cloud.google.com/run/docs/deploying
)
- Google Cloud 文档:在 GKE中部署 Kubernetes 应用:
cloud.google.com/kubernetes-engine/docs/deploy-app-cluster
)