浅谈云上攻防——云服务器攻防矩阵
浅谈云上攻防——云服务器攻防矩阵
前言
云服务器(Cloud Virtual Machine,CVM)是一种较为常见的云服务,为用户提供安全可靠以及高效的计算服务。用户可以灵活的扩展以及缩减计算资源,以适应变化的业务需求。使用云服务器可以极大降低用户的软硬件采购成本以及IT 运维成本。
由于云服务器中承载着用户的业务以及数据,其安全性尤为重要而云服务器的风险往往来自于两方面:云厂商平台侧的风险与用户在使用云服务器时的风险。与用户侧风险相比,平台侧的漏洞往往带来更广泛的影响,例如于2018 披露的AWS Launching EC2s did not require specifying AMI owner漏洞(CVE-2018-15869)、2020年披露的AWS XSS on EC2 web console漏洞;而与平台侧漏洞相比,用户侧漏洞更容易产生,并且可以对用户资产代理严重影响,例如2020年美高梅(MGM.US)大规模客户数据泄露为例,美高梅酒店由于错误配置,导致云服务器可以在未经授权情况下访问,导致1.42亿有关客人的信息暗网上出售,这些数据包含客人的家庭住址、联系信息、出生日期、驾照号码和护照号码。
云服务器的安全性至关重要,只有深入了解针对云服务器的风险以及攻击手段,才能够有效的帮助云厂商以及用户在面对这些威胁时有效的识别并采取对应的防护手段,从而保护云上业务以及数据的安全。
云服务器攻防矩阵概览
腾讯安全云鼎实验室以公开的云厂商历史漏洞数据、安全事件,以及腾讯云自身的安全数据为基础,抽象出针对云的攻防矩阵,并于2021年9月26日西部云安全峰会上发布的《云安全攻防矩阵v1.0》中首次亮相。《云安全攻防矩阵v1.0》由云服务器、容器以及对象存储服务攻防矩阵共同组成。
本文将详细介绍《云安全攻防矩阵》中关于云服务器攻防矩阵部分内容,以帮助开发、运维以及安全人员了解云服务器的安全风险。
云服务器攻防矩阵详解
初始访问
云平台主API密钥泄露
云平台主API密钥重要性等同于用户的登录密码,其代表了账号所有者的身份以及对应的权限。
API 密钥由SecretId和SecretKey组成,用户可以通过API密钥来访问云平台API进而管理账号下的资源。在一些攻击场景中,由于开发者不安全的开发以及配置导致凭据泄露;而在另一些针对设备的入侵场景中,攻击者将入侵设备并获取设备中存储的云平台凭据,例如2020年TeamTNT组织针对 Docker的攻击事件中,恶意程序将会扫描受感染系统的 ~/.aws/credentials 和 ~/.aws/config文件并窃取,导致AWS 凭证泄露。
在攻击者可以通过窃取到的云平台主API 密钥后,冒用账号所有者的身份入侵云平台,非法操作云服务器,篡改其中业务代码、添加后门程序或窃取其中数据。
云平台账号非法登录
云平台提供多种身份验证机制以供用户登录,包括手机验证、账号密码验证、邮箱验证等。在云平台登录环节,攻击者通过多种手法进行攻击以获取用户的登录权限,并冒用用户身份非法登录,具体的技术包括使用弱口令、使用用户泄露账号数据、骗取用户登录手机验证码、盗取用户登录账号等。攻击者使用获取到的账号信息进行非法登录云平台后,即可操作云服务器。
实例登录信息泄露
在购买并创建云服务器后,用户可以自行配置云服务器的登录用户名以及登录密码,Linux云服务器往往支持用户通过ssh的方式使用配置的用户名密码或SSH密钥的方式远程登录云服务器;在Windows服务器中,用户可以通过RDP文件或是远程桌面的形式登录云服务器。当上述这些云服务器实例登录信息被窃取后,攻击者可以通过这些信息非法登录云服务器实例。
账户劫持
当云厂商提供的控制台存在漏洞时,用户的账户存在一定的劫持风险。以AWS 控制台更改历史记录功能模块处XSS漏洞以及AWS 控制台实例tag处XSS为例,攻击者可以通过这些XSS漏洞完成账户劫持攻击,从而获取云服务器实例的控制权。
网络钓鱼
为了获取云服务器的访问权限,攻击者可采用网络钓鱼技术手段完成此阶段攻击。攻击者通过向云服务器管理人员以及运维人员发送特定主题的钓鱼邮件、或是伪装身份与管理人员以及运维人员通过聊天工具进行交流,通过窃取凭据、登录信息或是安插后门的形式获取云服务器控制权。
应用程序漏洞
当云服务器实例中运行的应用程序存在漏洞、或是由于配置不当导致这些应用可以被非法访问时,攻击者可以通过扫描探测的方式发现并利用这些应用程序漏洞进行攻击,从而获取云服务器实例的访问权限。
使用恶意或存在漏洞的自定义镜像
云平台为用户提供公共镜像、自定义镜像等镜像服务以供用户快速创建和此镜像相同配置的云服务器实例。这里的镜像虽然与Docker镜像不同,其底层使用的是云硬盘快照服务,但云服务器镜像与 Docker镜像一样存在着类似的风险,即恶意镜像以及存在漏洞的镜像风险。当用户使用其他用户共享的镜像创建云服务器实例时,云平台无法保证这个共享镜像的完整性或安全性。攻击者可以通过这个方式,制作恶意自定义镜像并通过共享的方式进行供应链攻击。
实例元数据服务未授权访问
云服务器实例元数据服务是一种提供查询运行中的实例内元数据的服务,云服务器实例元数据服务运行在链路本地地址上,当实例向元数据服务发起请求时,该请求不会通过网络传输,但是如果云服务器上的应用存在RCE、SSRF等漏洞时,攻击者可以通过漏洞访问实例元数据服务。通过云服务器实例元数据服务查询,攻击者除了可以获取云服务器实例的一些属性之外,更重要的是可以获取与实例绑定的拥有高权限的角色,并通过此角色获取云服务器的控制权。
执行
通过控制台登录实例执行
攻击者在初始访问阶段获取到平台登录凭据后,可以利用平台凭据登录云平台,并直接使用云平台提供的Web控制台登录云服务器实例,在成功登录实例后,攻击者可以在实例内部执行命令。
写入userdata执行
Userdata是云服务器为用户提供的一项自定义数据服务,在创建云服务器时,用户可以通过指定自定义数据,进行配置实例。当云服务器启动时,自定义数据将以文本的方式传递到云服务器中,并执行该文本。
通过这一功能,攻击者可以修改实例userdata并向其中写入待执行的命令,这些代码将会在实例每次启动时自动执行。攻击者可以通过重启云服务器实例的方式,加载userdata中命令并执行。
利用后门文件执行
攻击者在云服务器实例中部署后门文件的方式有多种,例如通过Web应用漏洞向云服务器实例上传后门文件、或是通过供应链攻击的方式诱使目标使用存在后门的恶意镜像,当后门文件部署成功后,攻击者可以利用这些后门文件在云服务器实例上执行命令
利用应用程序执行
云服务器实例上部署的应用程序,可能会直接或者间接的提供命令执行功能,例如一些服务器管理类应用程序将直接提供在云服务器上执行命令的功能,而另一些应用,例如数据库服务,可以利用一些组件进行命令执行。当这些程序存在配置错误时,攻击者可以直接利用这些应用程序在云服务器实例上执行命令
利用SSH服务进入实例执行
云服务器Linux实例上往往运行着SSH服务,当攻击者在初始访问阶段成功获取到有效的登录凭据后,即可通过SSH登录云服务器实例并进行命令执行。
利用远程代码执行漏洞执行
当云服务器上部署的应用程序存在远程代码执行漏洞时,攻击者将利用此脆弱的应用程序并通过编写相应的EXP来进行远程命令执行。
使用云API执行
攻击者利用初始访问阶段获取到的拥有操作云服务器权限的凭据,通过向云平台API接口发送 HTTP/HTTPS 请求,以实现与云服务器实例的交互操作。
云服务器实例提供了丰富的API接口以共用户使用,攻击者可以通过使用这些API接口并构造相应的参数,以此执行对应的操作指令,例如重启实例、修改实例账号密码、删除实例等。
使用云厂商工具执行
除了使用云API接口完成云服务器命令执行之外,还可以选择使用云平台提供的可视化或命令行工具进行操作。在配置完成云服务器实例信息以及凭据后,攻击者即可使用这类工具进行服务器实例的管理以及执行相应命令。
持久化
利用远程控制软件
为了方便管理云服务器实例,管理员有可能在实例中安装有远程控制软件,这种情况在windows实例中居多。攻击者可以在服务器中搜索此类远程控制软件,并获取连接凭据,进行持久化。攻击者也可以在实例中安装远控软件以达成持久化的目的。
在userdata中添加后门
正如“执行”阶段所介绍,攻击者可以利用云服务器提供的userdata服务进行持久化操作,攻击者可以通过调用云API接口的方式在userdata中写入后门代码,每当服务器重启时,后门代码将会自动执行,从而实现了隐蔽的持久化操作目的
在云函数中添加后门
云函数是是一种计算服务,可以为企业和开发者们提供的无服务器执行环境。用户只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可弹性、安全地运行代码,由平台完成服务器和操作系统维护、容量配置和自动扩展、代码监控和日志记录等工作。
以AWS Lambda为例,用户可以创建一个IAM角色并赋予其相应的权限并在创建函数时提供该角色作为此函数的执行角色,当函数被调用时,Lambda 代入该角色,如果函数绑定的角色权限过高,攻击者可以在其中插入后门代码,例如在调用该函数后创建一个新用户,以此进行持久化操作。
在自定义镜像库中导入后门镜像
在攻击者获取云服务器控制台权限后,可以对用户自定义镜像仓库中的镜像进行导入、删除等操作,攻击者可以将其构造的存在后门的镜像上传至用户镜像仓库。此外,为了提高攻击成功率,攻击者还可以使用后门镜像替换用户镜像仓库中原有镜像。当用户使用后门镜像进行实例创建时,即可触发恶意代码以完成持久化操作。
给现有的用户分配额外的API密钥
API密钥是构建腾讯云 API 请求的重要凭证,云平台运行用户创建多个API密钥,通过此功能,拥有API密钥管理权限的攻击者可以为账户下所有用户分配一个额外的API密钥,并使用这些API密钥进行攻击。
建立辅助账号登录
拥有访问管理权限的攻击者可以通过建立子账号的形式进行持久化操作,攻击者可以将建立的子账号关联等同于主账号的策略,并通过子账号进行后续的攻击行为。
权限提升
通过访问管理提权
错误的授予云平台子账号过高的权限,也可能会导致子账号通过访问管理功能进行提权操作。由于错误的授予云平台子账号过高的操作访问管理功能的权限,子账号用户可以通过访问管理功能自行授权策略。通过此攻击手段,攻击者可以通过在访问管理中修改其云服务器的权限策略,以达到权限提升。
利用应用程序提权
攻击者通过云服务器中运行的Docker容器中应用漏洞,成功获取Docker容器的权限,攻击者可以通过Docker漏洞或错误配置进行容器逃逸,并获取云主机的控制权,从而实现权限提升。当然,攻击者也可以通过其他应用程序进行提权。
创建高权限角色
当攻击者拥有访问管理中新建角色的权限时,可以通过调用云API接口的方式,建立一个新的角色,并为这个角色赋予高权限的策略,攻击者可以通过利用此角色进行后续的攻击行为。
利用操作系统漏洞进行提权
与传统主机安全问题相似,云服务器实例也同样可能存在操作系统漏洞,攻击者可以利用操作系统漏洞,进行权限提升。
防御绕过
关闭安全监控服务
云平台为了保护用户云主机的安全,往往会提供一些安全监控产品用以监控和验证活动事件的真实性,并且以此辨识安全事件,检测未经授权的访问。攻击者可以通过在攻击流程中关闭安全监控产品以进行防御绕过,以AWS CloudTrail为例,攻击者可以通过如下指令指令关闭CloudTrail监控:
aws cloudtrail delete-trail —name [my-trail]
但是进行此操作会在CloudTrail控制台或GuardDuty中触发告警,也可以通过配置禁用多区域日志记录功能,并在监控区域外进行攻击,以AWS CloudTrail为例,攻击者可以通过如下指令关闭多区域日志记录功能:
aws cloudtrail update-trail —name [my-trail] —no-is-multi-region-trail —no-include-global-service-events
监控区域外进行攻击
云平台提供的安全监控服务,默认情况下是进行全区域安全监控,但是在一些场景中可能出现一些监控盲区,例如用户在使用安全监控服务时,关闭了全区域监控,仅开启部分区域的监控,以AWS CloudTrail为例,可以使用如下指令来查看CloudTrail的监控范围,并寻找监控外的云主机进行攻击以防止触发安全告警:
aws cloudtrail describe-trails
禁用日志记录
与直接关闭安全监控服务相比,攻击者可以通过禁用平台监控告警日志的方式进行防御绕过,并在攻击流程结束后再次开启告警日志。以AWS CloudTrail为例,攻击者可以通过使用如下指令关闭CloudTrail日志
aws cloudtrail stop-logging —name [my-trail]
并在攻击完成后,使用如下指令再次开启日志记录功能:
aws cloudtrail start-logging —name [my-trail]
日志清理
攻击者在完成攻击流程后,可以删除监控服务日志以及云主机上的日志,以防攻击行为暴露。
通过代理访问
大多数云服务器提供操作日志记录功能,将记录时间、操作内容等。攻击者可以利用代理服务器来隐藏他们真实IP。
窃取凭证
获取服务器实例登录凭据
当攻击者获取云服务器实例的控制权后,可以通过一些方式获取服务器上用户的登录凭据,例如使用mimikatz抓取Windows凭证,并将获取到的这些登录凭据应用到后续的攻击流程中。
元数据服务获取角色临时凭据
云服务器为用户提供了一种每名实例元数据的服务,元数据即表示实例的相关数据,可以用来配置或管理正在运行的实例。用户可以通过元数据服务在运行中的实例内查看实例的元数据。以AWS举例,可以在实例内部访问如下地址来查看所有类别的实例元数据:
http://169.254.169.254/latest/meta-data/
在云服务器使用过程中,户可以将角色关联到云服务器实例。使用元数据服务可以查询到此角色名称以及角色的临时凭据,以AWS为例,可以通过如下请求获取角色名称:
http://169.254.169.254/latest/meta-data/iam/info
在获取到角色名称后,可以通过以下链接取角色的临时凭证:
http://169.254.169.254/latest/metadata/iam/security-credentials/<rolename>
获取配置文件中的应用凭证
云服务器应用中的配置文件中可能存储着一些敏感信息,例如一些应用的访问凭据或是登录密码,攻击者可以在云服务器中搜寻这些配置文件,并将其中的敏感数据进行窃取并在后续的攻击中加以利用。
云服务凭证泄露
在云服务器实例中运行应用程序中,往往使用环境变量或是硬编码的方式明文存储云服务凭据,应用程序使用这些凭据调用其他云上服务的凭据,攻击者可以通过读取环境变量中的参数,或是分析应用程序代码的方式获取这些凭据,以此获取其他云服务的凭据,甚至是云平台主API密钥。
用户账号数据泄露
在一些场景中,开发者使用对象存储服务存储其业务中的用户数据,例如用户的姓名、身份证号码、电话等敏感数据,当然也会包含用户账号密码等凭据信息。
攻击者通过对存储桶中用户数据的提取与分析以窃取这些用户的凭据数据,并通过获取的信息进行后续的攻击。
探测
云资产探测
攻击者在探测阶段,会寻找环境中一切可用的资源,例如实例、存储以及数据库服务等。
通常攻击者可以使用云平台提供的API或工具来完成云资产探测,通过发出命令等方法来搜集基础设施的信息。以AWS API接口为例,可以使用DescribeInstances接口来查询账户中一个或多个实例的信息,或是使用ListBuckets API接口来查询目标存储桶列表信息。
网络扫描
与传统的内网扫描类似,攻击者在此阶段也会尝试发现在其他云主机上运行的服务,攻击者使用系统自带的或上传至云服务实例的工具进行端口扫描和漏洞扫描以发现那些容易受到远程攻击的服务。此外,如果目标云环境与非云环境连同,攻击者也可能能够识别在非云系统上运行的服务。
横向移动
使用实例账号爆破
当攻击者在窃取凭据阶段,在实例中成功获取了有效的账号信息后,攻击者可以利用这些账号数据制作账号字典并尝试爆破目标的云资产或非云资产,并横向移动到这些资产中。
通过控制台权限横向移动
当攻击者获取了目标控制台权限后,可以通过控制台提供的功能,横向移动到目标用户的其他云资产中。
窃取角色临时凭据横向访问
攻击者通过实例元数据服务,可以获取与实例绑定的角色的临时凭据,攻击者可以利用获取的角色临时凭据,横向移动到角色权限范围内的云资产中。
窃取凭据访问云服务
通过云服务器中Web应用程序源代码的分析,攻击者可能会从Web应用程序的配置文件中获取的应用开发者用来调用其他云上服务的凭据。攻击者利用获取到的云凭据,横向移动到用户的其他云上业务中。如果攻击者获取到的凭据为云平台主API密钥,攻击者可以通过此密钥横向移动到用户的其他云资产中。
窃取用户账号攻击其他应用
攻击者通过从云服务器中窃取的用户账号数据,用以横向移动至用户的其他应用中,包括用户的非云上应用。
影响
窃取项目源码
攻击者通过下载云服务器中的应用程序源码,造成源码泄露事件发生。通过对源码的分析,攻击者可以获取更多的可利用信息。
窃取用户数据
当用云服务器中以文件、数据库或者其他形式保存用户数据时,攻击者通过攻击云服务器以窃取用户敏感数据,这些信息可能包含用户的姓名、证件号码、电话、账号信息等,当用户敏感信息泄露事件发生后,将会造成严重的影响。
破坏文件
攻击者在获取云服务器控制权后,可能试图对云服务器中的文件进行删除或者覆盖,以达到破坏服务的目的。
除了删除以及覆盖云服务器文件之外,攻击者可以对云服务器中文件进行篡改,通过修改应用程序代码、文本内容、图片等对象以达到攻击效果。在一些场景中,用户使用云服务器部署静态网站,攻击者通过篡改其中页面内的文本内容以及图片,对目标站点造成不良的影响。
植入后门
攻击者在云服务器应用中插入恶意代码,或者在项目目录中插入后门文件,攻击者可以利用这些后门发起进一步的攻击。
加密勒索
在获取云服务器控制权后,攻击者可能会对云服务器上的文件进行加密处理,从而勒索用户,向用户索要赎金。
写在后面
云服务器作为一个基础而又重要的云产品,面临着众多的安全挑战。深入了解云服务器存在的风险点以及对应的攻击手段,可以有效的保障用户在使用云服务器时的安全性。
在腾讯安全云鼎实验室推出《云安全攻防矩阵》中,用户可以根据矩阵中所展示的内容,了解当前环境中所面临的威胁,并以此制定监测手段用以发现风险,详见腾讯安全云鼎实验室攻防组官网:
https://cloudsec.tencent.com/#/home
除《云安全攻防矩阵v1.0》中已包含的产品外,腾讯安全云鼎实验室制定了云安全攻防矩阵未来发布计划,以云产品以及业务为切入点,陆续发布云数据库、人工智能、云物联网等云安全攻防矩阵。