整体流程
初始访问、执行、持久化、权限提升、防御绕过、窃取凭据、探测、横向移动、影响
初始访问
云服务器攻击方式
实例登录信息泄露
在购买并创建云服务器后,用户可以自行配置云服务器的登录用户名以及登录密码,Linux云服务器往往支持用户通过ssh的方式使用配置的用户名密码或SSH密钥的方式远程登录云服务器;在Windows服务器中,用户可以通过RDP文件或是远程桌面的形式登录云服务器。当上述这些云服务器实例登录信息被窃取后,攻击者可以通过这些信息非法登录云服务器实例。
账户劫持
当云厂商提供的控制台存在漏洞时,用户的账户存在一定的劫持风险。以AWS 控制台更改历史记录功能模块处XSS漏洞以及AWS 控制台实例tag处XSS为例,攻击者可以通过这些XSS漏洞完成账户劫持攻击,从而获取云服务器实例的控制权。
网络钓鱼
为了获取云服务器的访问权限,攻击者可采用网络钓鱼技术手段完成此阶段攻击。攻击者通过向云服务器管理人员以及运维人员发送特定主题的钓鱼邮件、或是伪装身份与管理人员以及运维人员通过聊天工具进行交流,通过窃取凭据、登录信息或是安插后门的形式获取云服务器控制权。
应用程序漏洞
当云服务器实例中运行的应用程序存在漏洞、或是由于配置不当导致这些应用可以被非法访问时,攻击者可以通过扫描探测的方式发现并利用这些应用程序漏洞进行攻击,从而获取云服务器实例的访问权限。
使用恶意或存在漏洞的自定义镜像
云平台为用户提供公共镜像、自定义镜像等镜像服务以供用户快速创建和此镜像相同配置的云服务器实例。这里的镜像虽然与Docker镜像不同,其底层使用的是云硬盘快照服务,但云服务器镜像与 Docker镜像一样存在着类似的风险,即恶意镜像以及存在漏洞的镜像风险。当用户使用其他用户共享的镜像创建云服务器实例时,云平台无法保证这个共享镜像的完整性或安全性。攻击者可以通过这个方式,制作恶意自定义镜像并通过共享的方式进行供应链攻击。
容器攻击方式
应用程序漏洞
当容器中运行的应用程序存在漏洞,或是由于配置不当导致这些应用可以被非法访问时,攻击者可以通过扫描探测等方式发现并进行利用,从而获取容器的访问权限。
使用恶意或存在漏洞的自定义镜像
攻击者构造恶意或存在漏洞的镜像,上传至镜像仓库。在目标服务器主动或被动形式下载恶意镜像并运行时,攻击者通过恶意容器进行初始访问。
暴露 Kubernetes 控制面板
当用户开启enable-skip-login配置且错误的授权Kubernetes-dashboard过高权限后,攻击者可以直接访问Kubernetes 控制面板并以此控制集群。
Kubeconfig文件泄露
在一些攻击场景中,由于开发者不安全的开发以及配置,或者一些针对设备的入侵事件,导致Kubeconfig文件泄露,攻击者可以通过窃取到的Kubeconfig配置kubectl并访问集群。
Docker Engine API公网暴露
Docker Engine API是Docker提供的用于Docker客户端与Docker守护进程交互的API,如果配置开启 Tcp Socket,则会存在未一定的风险风险。攻击者可以利用公网暴露的Docker Engine API在远程主机上创建一个特权容器并挂载主机根目录进行后续攻击流程。
Kube Apiserver insecure-port开启
非安全端口提供HTTP服务且无需身份认证,默认开放在8080端口。此端口上开放的服务应该是用于测试,如果其在生产环境中被暴露出来,可以控制多数K8s总控组件,并获取多数容器交互式Shell。
Kube Apiserver secure-port开启匿名访问
安全端口提供HTTPS服务且支持身份认证,默认开放在6443端口。错误配置将会导致匿名访问。攻击者可以匿名访问Kube API Server,并在Pod中执行命令。
Kubelet API 匿名访问
Kubelet用于在Node上管理本机Pod,如果kubelet存在匿名访问漏洞,攻击者可以通过Kubelet API 10250端口在Node中任意容器里执行命令。
Etcd 2379端口公网暴露
Kubernetes使用Etcd v3存储数据,默认监听2379端口,如果Etcd 2379暴露到公网且存在未授权访问漏洞,将导致敏感信息泄露,攻击者可以通过收集到的凭据接管集群。
Kubectl proxy公网访问
Kubectl proxy命令以反向代理的模式运行 Kubectl,建立代理后用户可以使用 curl、wget 或浏览器访问Kube Apiserver 。Kubectl proxy公网访问,其危害与利用方式与Kube Apiserver一致。
cos存储攻击方式
对象存储SDK泄露
云平台所提供的对象存储服务,除了拥有多种 API 接口外,还提供了丰富多样的SDK供开发者使用。在SDK初始化阶段,开发者需要在SDK中配置存储桶名称、路径、地域等基本信息,并且需要配置云平台的永久密钥或临时密钥,这些信息将会被编写在SDK代码中以供应用程序操作存储桶。但是,如果这些承载着密钥的代码片段不慎泄露,比如开发者误将源码上传至公开仓库或者应用开发商在为客户提供的演示示例中未对自身SDK中凭据信息进行删除,这些场景将会导致对象存储凭据泄露,进而导致对象存储服务遭受入侵,攻击者通过冒用凭据所有者身份攻击对象存储服务。
存储桶工具配置文件泄露
在对象存储服务使用过程中,为了方便用户操作存储桶,官方以及开源社区提供了大量的对象存储客户端工具以供用户使用,在使用这些工具时,首先需要在工具的配置文件或配置项中填写存储服务相关信息以及用户凭据,以便工具与存储服务之间的交互。在某些攻击场景下,例如开发者个人PC遭受钓鱼攻击、开发者对象存储客户端工具配置文件泄露等,这些编写在存储服务工具配置文件中的凭据以及存储桶信息将会被泄露出来,攻击者可以通过分析这些配置文件,从中获取凭据,而在这些工具中配置的,往往又是用户的云平台主API密钥,攻击者通过这些信息可以控制对象存储服务,在一些严重的场景,攻击者甚至可以控制用户的所有云上资产。
前端直传功能获取凭据
在一些对象存储服务与Web开发以及移动开发相结合的场景中,开发者选择使用前端直传功能来操作对象存储服务,前端直传功能指的是利用iOS/Android/JavaScript等SDK通过前端直接向访问对象存储服务。前端直传功能,可以很好的节约后端服务器的带宽与负载,但为了实现此功能,需要开发者将凭据编写在前端代码中,虽然凭据存放于前端代码中,可以被攻击者轻易获取,但这并不代表此功能不安全,在使用此功能时,只要遵守安全的开发规范,则可以保证对象存储服务的安全:正确的做法是使用临时密钥而非永久密钥作为前端凭据,并且在生成临时密钥时按照最小权限原则进行配置。但是实际应用中,如果开发人员并未遵循安全开发原则,例如错误的使用了永久密钥,或为临时凭据配置了错误的权限,这将导致攻击者可以通过前端获取的凭据访问对象存储服务。攻击者通过分析前端代码,或者通过抓取流量的方式,获得这些错误配置生成的凭据,并以此发起攻击。
Serverless攻击方式
serverless service爆破
若serverless service仅使用简单的英文字母或单词作为命名,则攻击者可以通过字典枚举爆破serverless service服务名称来找到潜在目标。
serverless.yml泄漏
通过信息泄漏查找潜在的serverless service,如通过GitHub搜索serverless.yml关键字来发现潜在serverless目标。
应用程序漏洞
利用应用程序本身存在的安全漏洞攻击serverless service,若应用程序未对外部传入的参数进行严格过滤则可能导致注入风险。
组件漏洞/使用易受攻击的库
当选择编程语言开发功能时,必须保证导入的库以及代码本身是安全的。使用含有已知漏洞的组件是web应用程序10大威胁之一。若应用程序使用了存在漏洞的第三方组件,则serverless服务也将会受到漏洞威胁。
共同攻击方式
实例元数据服务未授权访问
云服务器实例元数据服务是一种提供查询运行中的实例内元数据的服务,云服务器实例元数据服务运行在链路本地地址上,当实例向元数据服务发起请求时,该请求不会通过网络传输,但是如果云服务器上的应用存在RCE、SSRF等漏洞时,攻击者可以通过漏洞访问实例元数据服务。通过云服务器实例元数据服务查询,攻击者除了可以获取云服务器实例的一些属性之外,更重要的是可以获取与实例绑定的拥有操作云服务的角色,并通过此角色获取云服务的控制权。
云平台账号非法登录
云平台提供多种身份验证机制以供用户登录,包括手机验证、账号密码验证、邮箱验证等。在云平台登录环节,攻击者通过多种手法进行攻击以获取用户的登录权限,并冒用用户身份非法登录,具体的技术包括使用弱口令、使用用户泄露账号数据、骗取用户登录手机验证码、盗取用户登录账号等。攻击者使用获取到的账号信息进行非法登录云平台后,即可操作云服务。
云平台主API密钥泄露
云平台主API 密钥重要性等同于用户的登录密码,其代表了账号所有者的身份以及对应的权限。API 密钥由SecretId和SecretKey组成,用户可以通过API密钥来访问云平台API进而管理账号下的资源。在一些攻击场景中,由于开发者不安全的开发以及配置,或者一些针对设备的入侵事件,导致云平台主API 密钥泄露,攻击者可以通过窃取到的云平台主API 密钥,冒用账号所有者的身份入侵云平台,非法操作云服务。
执行
云服务器攻击方式
通过控制台登录实例执行
攻击者在初始访问阶段获取到平台登录凭据后,可以利用平台凭据登录云平台,并直接使用云平台提供的Web控制台登录云服务器实例,在成功登录实例后,攻击者可以在实例内部执行命令。
写入userdata执行命令
Userdata是云服务器为用户提供的一项自定义数据服务,在创建云服务器时,用户可以通过指定自定义数据,进行配置实例。当云服务器启动时,自定义数据将以文本的方式传递到云服务器中,并执行该文本。通过这一功能,攻击者可以修改实例userdata并向其中写入待执行的命令,这些代码将会在实例每次启动时自动执行。攻击者可以通过重启云服务器实例的方式,加载userdata中命令并执行。
利用后门文件执行指令
攻击者在云服务器实例中部署后门文件的方式有多种,例如通过Web应用漏洞向云服务器实例上传后门文件、或是通过供应链攻击的方式诱使目标使用存在后门的恶意镜像,当后门文件部署成功后,攻击者可以利用这些后门文件在云服务器实例上执行命令。
利用应用程序执行
云服务器实例上部署的应用程序,可能会直接或者间接的提供命令执行功能,例如一些服务器管理类应用程序将直接提供在云服务器上执行命令的功能,而另一些应用,例如数据库服务,可以利用一些组件进行命令执行。当这些程序存在配置错误时,攻击者可以直接利用这些应用程序在云服务器实例上执行命令。
利用SSH服务进入实例执行
云服务器Linux实例上往往运行着SSH服务,当攻击者在初始访问阶段成功获取到有效的登录凭据后,即可通过SSH登录云服务器实例并进行命令执行。
利用远程代码执行漏洞执行
当云服务器上部署的应用程序存在远程代码执行漏洞时,攻击者将利用此脆弱的应用程序并通过编写相应的EXP来进行远程命令执行。
持久化
云服务器攻击方式
1.
权限提升
云服务器攻击方式
1.
防御绕过
云服务器攻击方式
1.
窃取凭据
云服务器攻击方式
1.
探测
云服务器攻击方式
1.
横向移动
云服务器攻击方式
1.