本文将对云端环境中的横向移动技术和相关场景进行深入分析和研究,并给大家展示研究人员在云环境中观察到的一些威胁行为。云端环境中的横向移动可以通过利用云API和对计算实例的访问来实现,而云端级别的访问可能会扩展到后者。
威胁行为者通常会使用不同的横向移动技术来访问目标组织网络中的敏感数据,而且还可以帮助他们渗透到内部部署环境中。我们主要研究和分析了目前三大主流的云服务提供商Amazon Web Services(AWS)、Google cloud Platform(GCP)和Microsoft Azure中的云横向移动技术,并详细分析它们与内部部署环境中类似技术的差异。
在云端环境中,威胁行为者主要针对的是两个层级上的操作,即主机/实例、云基础设施。而威胁行为者所使用的方法允许他们将传统的横向移动技术与特定于云端环境的方法无缝结合。
云端服务提供商提供了网络分段和细粒度IAM管理等措施来限制横向移动,以及集中式日志记录来检测这种行为。但是,云API仍然会给威胁行为者提供可以滥用的额外机制,而错误配置则可能会为恶意行为带来更多机会。
本文还将介绍如何结合代理和无代理解决方案来防止横向移动,其中的每一个方案都有其独特的优势,这也有助于广大研究人员理解为什么结合这两种解决方案可以确保云环境中的安全全面覆盖。
云环境横向移动技术
技术1:快照创建
AWS:弹性块存储(EBS)
假设在某种情况下,威胁行为者获取到的目标云环境的访问权,并试图在Amazon弹性计算云实例(EC2)之间切换。威胁行为者首先尝试使用传统的横向移动技术访问EC2实例,例如利用默认的开放端口和滥用现有的SSH密钥等。
当这些方法都失败之后,威胁行为者随后便开始使用针对云端环境的横向移动技术。由于攻击者已经获取到了相对强大的IAM凭证,因此他们将能够采取另一种方法来访问EC2实例中的数据。
这种方法并不会授予威胁行为者针对目标实例上运行时环境的访问权限(包括内存中的数据和实例云元数据服务中可用的数据,如IAM凭据等),但却允许威胁行为者访问存储在目标实例磁盘上的数据。
威胁行为者首先可以使用自己的SSH密钥集创建了一个新的EC2实例,然后再使用CreateSnapshot API创建了其目标EC2实例的EBS快照,最后再加载到他们所控制的EC2实例上,相关命令代码具体如下图所示:
在云环境中,存储在主机虚拟块设备中的数据是可访问的,此时就需要使用IAM凭证和云服务提供商API的强大功能和权限来实现了。
当EBS快照加载至威胁行为者的EC2示例上之后,他们将成功获取到目标EC2示例磁盘中存储数据的访问权。下图显示的是这个示例的整个攻击事件链:
需要注意的是,该技术并不仅限于AWS,也同样适用于其他云服务提供商。
技术2:SSH密钥
AWS:EC2实例连接
在另外一种场景下,拥有身份和访问管理(IAM)凭证的威胁行为者可以使用AuthorizeSecurityGroupIngress API将入站SSH规则添加到安全组。因此,以前受安全组保护而无法通过互联网访问的实例将可以被访问,包括来自威胁行为者控制的实例。
修改安全组规则后将允许典型的网络横向移动,与内部部署环境相比,这种方法将更容易在目标云环境中配置网络资源。接下来,强大的IAM权限将允许威胁行为者使用EC2实例连接服务(用于管理计算机上的SSH密钥),并使用SendSSHPublicKey API临时推送公共SSH密钥,相关命令代码如下图所示:
此时,威胁行为者将能够连接到一个EC2实例,并允许访问实例的数据。需要注意的是,这种技术是云服务提供商用来访问计算实例以及操作系统本机身份验证和授权的,而这两者之间通常存在连接。
虽然云环境和运行在其中的计算实例之间是存在边界障碍的,但这些障碍在设计层面上看是可以被渗透的,并且支持在这些不同的身份验证和授权系统之间移动。这是一个很好的例子,足以证明IAM凭证允许访问计算实例(例如,容器和RDS数据库)的强大能力。
在EC2实例中,威胁行为者还可以发现存储在磁盘中的其他明文凭证,尤其是私有SSH密钥和AWS访问令牌。有了这些访问凭证,威胁行为者将能够渗透到其他EC2实例。
此时,威胁行为者就可以使用SSH密钥和云令牌进行横向移动,并渗透到其他开发环境,下图显示的是该示例的事件执行链流程图:
GCP:基于元数据的SSH密钥
如果配置不当,GCP也将存在等效的横向移动技术。只要不使用OS Login服务,威胁行为者就可以将计算引擎实例配置为将其SSH密钥存储在实例元数据中。
这些SSH密钥存储在实例元数据中,便于访问各个实例。但实例也可以将其SSH密钥存储在项目元数据中,这意味着这些密钥将授予对项目中所有实例的访问权。
只要实例不限制项目范围的SSH密钥,这种技术就可以工作。通过使用Google Cloud CLI,可以将公共SSH密钥附加到实例元数据中,相关命令代码如下图所示:
类似的,威胁行为者也可以使用提升的权限将公共SSH密钥添加到项目元数据中。此时,威胁行为者就可以使用权限足够高的云凭证来访问特定项目中的所有实例了,相关命令代码如下图所示:
值得一提的是,虚拟私有云网络安全设置可以防止SSH密钥的错误配置。
Azure:VMAcess扩展
另外一种值得注意的横向移动技术就是利用Azure中的VMAccess扩展,VMAccess扩展可以用于重置对虚拟机(VM)的访问,其在Linux VM中的功能之一包括更新用户的SSH公钥。
具备高级权限云凭证的威胁行为者可以使用此扩展并通过重置指定VM中特定用户的SSH密钥来访问VM,此操作需要在Azure CLI中执行,相关命令如下:
该技术还可以扩展为攻击同一资源组中多个VM的特定用户:
技术3:串行控制台访问
AWS:串行控制台访问
我们观察到的另一种技术涉及串行控制台访问,本文涉及到的三个主流云服务提供商都支持该功能。它通常负责在实例上提供交互式Shell,它只是一种故障排除工具,并不具备任何网络功能。
与EC2实例连接技术相比,这种方法具有更大的限制,因为它需要使用用户密码或其他功能(如SysRq)对实例的操作系统进行预配置。
在这种情况下,威胁行为者可以选择串行控制台作为SSH的替代方案,因为它可以绕过目标实例配置的安全组规则。此时,威胁行为者可以再次使用EC2实例连接服务,并使用SendSerialConsoleSSHPublicKey API临时推送公共SSH密钥,具体如下图所示:
但这一次,该操作将允许威胁行为者建立到EC2实例的串行控制台连接,并允许他们访问文件系统并在实例中执行Shell命令。
GCP:SSH密钥身份验证
在GCP中,串行控制台依赖于SSH密钥身份验证,需要将公共SSH密钥添加到项目或实例元数据中。具备足够云API权限的威胁行为者可以使用下图所示的命令,并使用Google cloud CLI建立到计算引擎实例的串行控制台连接:
Azure:VMAccess扩展
此技术在Azure中有一些限制,具备足够云API权限的威胁行为者可以使用VMAccess扩展创建新的本地用户(带密码),或重置现有本地用户的密码。接下来,攻击者可以使用Azure CLI中的命令来启动与VM的串行控制台连接,命令如下图所示:
技术4:System Manager
AWS:系统管理器
在另外一种场景下,威胁行为者具备系统管理器(System Manager)服务的IAM权限,并以该服务管理的实例为目标。此时,威胁行为者可以使用StartSession API建立到多个托管实例的连接,并使用如下图所示的命令在每个实例上启动交互式Shell会话:
需要注意的是,该方法不需要EC2实例中相关安全组的SSH入站规则,从而可以有效地绕过安全组规则。
威胁行为者还可以SendCommand API同时在大量托管实例中执行脚本,从而实现针对凭据文件的大规模信息收集任务。相关操作命令如下图所示:
下图所示的是该场景下的事件执行工作流:
更好的方案:代理和无代理结合
鉴于云端环境的性质,我们可以将威胁行为者的技术分为两层,即主机和云端。主机层包含在云实例中执行的所有操作,而云端层包括在云环境中进行的所有API调用。在我们观察到的每一种技术中,威胁行为者可以利用云API和主机中的操作在云环境和实例之间实现无缝移动。
无论计算实例采用了哪种身份验证或授权技术,我们都不应该将其视作强大的安全保障,因为如果威胁行为者拥有高级别权限的IAM凭证,则仍然可以访问云环境中的计算实例。
检测上述的威胁活动,需要关联来自代理和无代理解决方案的数据,这些解决方案可以给我们提供云环境的全面视图。
比如说技术2中描述的横向移动场景,其中威胁行为者可以利用EC2实例连接服务来访问目标EC2实例。我们可以通过无代理解决方案提供对所有已执行的云级别API调用可见性,包括安全组修改和SSH密钥注入等操作,来深入了解威胁行为者的访问方法。下图所示为AWS面板中发出的警报信息:
下图显示的Prisma云端资源查询语言(RQL)查询也可以用于识别威胁行为者执行的可疑SSH操作:
同时,如果在提供主机级可见性的EC2实例上安装了Cortex XDR代理,则同样能够发现威胁行为者搜索凭据和敏感文件的行为:
一般来说,使用代理和无代理解决方案来保护云环境安全会更加有效,但威胁行为者通常会禁用代理。另一方面,无代理解决方案提供了云级别的可见性。此外,正确配置的云日志环境不能轻易被威胁行为者修改或禁用,这样便能够为安全防御人员提供坚强的后盾。在保护云环境安全方面,两种解决方案的结合提供了两全其美的效果。
总结
在这篇文章中,我们将对云端环境中的横向移动技术和相关场景进行深入分析和研究,并给大家展示研究人员在云环境中观察到的一些威胁行为。在云API级别具有足够权限的攻击者威胁行为者可以利用云环境的特征,并利用云API实现横向移动,而使用代理和无代理解决方案则是检测传统技术与基于云的横向移动技术的有效方法。
参考资料
https://aws.amazon.com/ec2/
https://aws.amazon.com/ebs/
https://cloud.google.com/compute/docs/instances
https://cloud.google.com/compute/docs/oslogin
https://learn.microsoft.com/en-us/azure/virtual-machines/extensions/vmaccess
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-serial-console.html
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html#set-user-password
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SysRq.html
https://learn.microsoft.com/en-us/troubleshoot/azure/virtual-machines/serial-console-overview#prerequisites-to-access-the-azure-serial-console
https://docs.prismacloud.io/en