论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
安全
›
网络安全
›
红队视角下的公有云基础组件安全
红队视角下的公有云基础组件安全
千千梦丶琪
金牌会员
|
2024-8-24 04:07:41
|
显示全部楼层
|
阅读模式
楼主
主题
865
|
帖子
865
|
积分
2595
前言
“公有云是为广大用户、个人或企业提供的云基础办法。公有云就是第三方公有云供应商为用户提供可通过互联网访问的假造环境中的服务器空间。然后,用户可以通过购买云服务器、数据存储和其他与云相关的服务等公有云服务来访问这些服务器。固然用户可通过互联网访问公有云,但数据将通过假造化与其他用户的数据隔离,以进步安全性。公有云供应商还主动确保其服务器不受弊端影响,并使用最新的软件补丁进行更新。但终极还是由使用者负责数据在云中的使用,包罗访问、身份验证、加密和应用步伐配置。”
随着越来越多的企业将应用、存储上云,各大公有云提供了各种 IaaS、PaaS、SaaS
服务,针对公有云各组件的攻击面也伴随而生。公有云厂商在尽可能保证组件安全的条件下,由于各种基础配置还是由用户决定,因此仍然存在很多安全风险。
本文主要从红队视角讲述公有云基本服务中一些因配置题目产生的安全风险。
编者注:以下所有内容仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。
目次
● 云存储
● 云计算
● 容器集群
● 中间件
云存储
至于为什么一上来就讲述云存储,是因为如今很多云厂商使用本身原生的云存储去操作其他基本组件,很多功能都是基于对象存储完成的,以是,首先讲述云存储的安全题目,为以下攻击面做准备。
在对象存储中,用户所上传的文件都是以对象情势存储在云端,以对象情势情势存在的文件不具备可执行权限,再加上提供无条理结构的分布式存储产品,为用户提供单价较低且快速可靠的数据存储方案,以是如今的大趋势下很多企业选择将本身所有的静态文件(图片、网站静态文件、视频等)搬迁至对象存储上,由于对象存储一般都是托管在第三方,企业在自身安全建设时往往会忽视掉这一点,殊不知不安全的配置,也会带来很多安全题目。
国内常见的几家云厂商的对象存储如下:
腾讯COS:
https://cloud.tencent.com/product/cos
阿里OSS:
https://www.aliyun.com/product/oss
百度BOS:
https://cloud.baidu.com/product/bos.html
华为OBS:
https://www.huaweicloud.com/product/obs.html
七牛Kodo:
https://www.qiniu.com/products/kodo
又拍云USS:
https://www.upyun.com/products/file-storage
访问控制
创建空间时,可设置为公开空间或私有空间。

●公开空间:可通过文件对象的 URL 直接访问。
●私有空间:文件对象的访问则必须获得拥有者的授权才能访问。
如果设置为公开空间,则任何知道URL链接的人都能访问,此类空间得当存放公共文件,如网站静态资源、用户头像等公开资源(理论上你的文件名设置得足够复杂,在肯定程度上也能保证安全性,但还是不建议这样做),针对敏感文件,只管还是选择私有空间,私有空间在访问时一般要加上签名信息才能访问。
如今大部分云厂商会提供类似https://bucket.s3-china-
region.cloud.com/?ak=xxxx&sgin=xxxx&time=16xxxx的类似AWS S3
签名URL情势,大概直接兼容S3协议,以提供下载、上传、管理API,具体参数意义如下:
● AK用于控制用户权限
●
Sign用于验证签名,一般的云厂商都会把AK、domain、URI、Query、Header等哀求特性、身份特性以及时间戳拼接在一起,然后使用SK做为盐值进行hash,来生成最后的Sgin,用于校验此数据包是否正当。
● time是时间戳,用户标识此URL逾期时间
上传风险
通过查阅相关文件,我们可以知道使用表单上传文件到 OSS的技术方案里,有三种实现方式:
1、在客户端通过JavaScript代码完成签名,然后通过表单直传数据到OSS。
2、在服务端完成签名,然后通过表单直传数据到OSS。
3、在服务端完成签名,而且服务端设置了上传后回调,然后通过表单直传数据到OSS。OSS回调完成后,再将应用服务器响应结果返回给客户端。
密钥走漏
在对象存储的SDK中,一般都会存在JavaScript的SDK,也就是支持用户前端上传的组件。
https://github.com/ali-sdk/ali-oss
一般来说,在安全的配置下,前端上传会使用子用户、大概暂时密钥(STS token)的方式来进行,但是由于不严谨的开发,前端js文件、APK文件硬编码AK /
SK的环境还是屡见不鲜,一般来说只需要在burpsuite内里搜索对应云AK的名字,例如
AccessKey、SecretKey
等。

拿到了
AccessKey、SecretKey
就可以实现对OSS的完全控制,常见的方法有使用官网提供的API大概开源工具等对OSS进行管理操作。
恣意文件覆盖
在某些业务场景下,可能会存在如下流程:
1、首先联合时间戳生成一个随机文件名
2、通过此文件名信息在后端获取该文件的上传签名
3、最后通过PUT大概POST上传

这个时候,由于上传的路径是我们控制,以是我们可以通过修改签名路径的情势,来进⾏签名,从⽽去覆盖此存储桶下的恣意⽂件:


我们可以看到已经乐成上传了⼀个新⽂件覆盖原来的⽂件。
能到达⽂件覆盖的⽬的后,就可以对储存桶资⾥原有的资源进⾏修改,可能会带来XSS⻛险,严峻还可能造成供应链投毒攻击。
1XSS风险
在文件覆写条件成立后,先假设一个场景,某企业主站内里的静态js文件均放在OSS的云储存配合CDN进行加速,如今已知js文件的路径和名称,那么我们就可以在原有js里插入一段恶意js代码进行文件覆盖,从而到达xss乃至恒久信息窃取的风险。
2供应链投毒
在文件覆写条件成立后,先假设一个场景,某企业为软件提供商,为了节省服务器带宽,将软件/源码上传到OSS进行分发,因为配置不当恰好存在恣意文件覆盖,导致软件或源码中被插入恶意代码。
恣意文件上传
部分公有云厂商默认配置了已存在的文件克制覆盖,这种环境下文件覆盖是没办法了,但是可以控制文件的key进行恣意文件上传。

一般来说国内各大云厂商的OSS都支持html解析,当OSS配置了企业域名后,再配合恣意文件上传,也相称于控制了一个子域名的权限,可以用来XSS和钓鱼。


上传时将⽂件路径从upload更改为attack,获取此次上传的STS(Security Token
Service),将拿到的STS带⼊上传,修改key(⽂件名),即可实现恣意⽂件/恣意⽬录上传。


STS Token
由于前端使用SDK上传,会减少很多前后端交互API的编写,以是很多开发总是会选择前端上传,以是云厂商开发了STS(Security Token
Service)的模式,有关STS的介绍如下:

由于STS
token是对针对API接口而不是大范围的云产品的,有的时候在存在AK、SK、STS都返回以后,上传有限制,只允许在特定目次下传文件的时候,不妨试一试带上STS访问ECS、SLB等其他同样支持STS的服务,对于AWS
S3标准的STS,我们还可以通过BASE64解码来获取对应的权限。
PUT ACL接管存储桶
这是某云厂商关于PUT ACL的说明:

即然能覆盖原ACL,那就说明如果配置不当,就可能存在肯定的安全题目。
如果是前端哀求签名,而且前端上传的话,如果后端对路径没有做限制,我们就可以通过哀求SDK获得根目次的写入权限,接着配合PUT ACL进行覆盖。
GET /get_put_sgin?uri=/ HTTP/1.1
Host: 192.168.20.31:80
Accept:
/
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64;
Trident/5.0)
Connection: close
详细文档参考:
https://cloud.tencent.com/document/product/436/7737来对根目次进行ACL的写入,但是要留意的是PUT
bucket写入是一个覆盖操作,会覆盖原有业务的ACL导致业务无此bucket权限,导致业务中断,以是如果发现此题目不要贸然测试。
下载时产生的安全题目
对象存储为什么可以保证存储文件的安全?在私有读的存储桶里,读取恣意文件都需要授权签名,签名逾期后就无法读取,这样就会导致一张图片必须每次读的时候都去哀求权限,在哀求权限时,业务最常用的接口就是:
GET /download?uri=file HTTP/1.1
Host: 192.168.20.31
Accept:
/
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64;
Trident/5.0)
Connection: close
发送这个哀求就会返回一个加参数的url,但是如果我们的url设置为空,例如这样。
GET /download?uri= HTTP/1.1
Host: 192.168.20.31
Accept:
/
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64;
Trident/5.0)
Connection: close
那么就会访问到对象存储的管理节点信息,从而获取整个桶里的文件信息,再拿得到的key去构造访问链接,从而造成储存桶的文件遍历。
MinIO的安全题目
如今可选的资源服务器挺多,比如FastDFS,MinIO,AWS/S3等,云服务器供应商也提供资源服务器OSS租用,某些企业为了数据安全的思量,可能会选择用MinIO在企业内部自建一个OSS服务。
数据走漏
简单说,就是如果你想要提供永世性的资源下载链接,就需要把Bucket(桶)的BP设置为Read&Write。
当你用 http://minio_out_url/bucket_path/
访问时,会得到一个超大的XML,内里就会出现这样的环境,其中key字段就是文件名。

MinIO的桶有一个listObjects的功能,默认最多1000条纪录,这就意味着如果你打开永世下载链接模式,那么任何人可以通过桶路径来获取你保存的所有资源的信息,从而造成桶遍历。
CVE-2021-21287
参见PHITHON的文章,这里就不多介绍了。
云计算
云服务器
如今,基本上所有公有云都支持使用自界说镜像,而且镜像导入的方式比较统一,基本上都使用由对象存储导入,输入 oss-key
地址,然后公有云服务进行下载导入。以是,可以思量挟制用于导入镜像的 oss-bucket,直接污染镜像,实现“供应链攻击”。



此外,一些公有云还支持由其他服务器创建的镜像,新建的服务器会与原服务器完全相同。从攻击者视角来看,相同系统环境以及应用意味着相同的攻击方式。

批量计算
一些公有云厂商都提供了批量计算的服务,该服务为 SaaS 服务,只需配置参数,即可调用服务器资源进行计算,大多云厂商如今都选择使用 oss
去控制输入以及输出参数。从攻击者视角来看,同以上所说的服务镜像一样,若该 oss-bucket 可控,则可直接控制批量计算的服务命令等。


容器集群
不同公有云在容器集群服务方面出入较大:
阿里云针对不同的需求提供了 5 种不同版本的集群:ACK 托管版、ACK 专有版、ASK 集群、ACK 边沿托管版、注册集群等;
腾讯云针对资源类型分为TKE容器集群、EKS弹性容器集群与边沿集群;
华为云区分为容器引擎CCE 与实例CCI。
每个厂商的容器服务不同,以是从攻击者视角来看,攻击使用某一厂商的容器服务需对其进行特殊处理。
容器集群服务
敏感目次被挂载
某厂商在创建容器集群服务时提供了一个接口,可以修改容器存储路径。

若此处被运维人员修改,如改为 /root,那新建容器另外的运维人员挂在了 /root 进容器中,则该节点的所有容器都会被控制。
复现过程
创建集群时修改容器目次为 /docker

开启外网访问

新建 pod,并挂载 /docker 目次

进入 pod 内部 /mount/docker 目次,可控制所有容器。

所有节点使用相同 kube-config
所有的节点使用了相同的 kube-config,皆为 k8s master 权限,如有容器存在逃逸题目,则在恣意节点都可控制整个 k8s 集群。
该云厂商 k8s 配置自动办理了组件未授权等题目,但是 docker 用户逃逸题目未能制止,若容器发生逃逸或 /root/.kube/config
走漏,则可控制整个容器集群。
以下演示挂载 /root 导致整个集群被控制的过程:
新建pod,挂载 root

获取 kube-config

上传 kubectl,控制整个集群

容器镜像服务
所有提供容器服务的公有云皆提供了容器镜像服务。
存储挟制
有些云厂商为了方便操作,直接使用对象存储,创建镜像堆栈时会自动创建 Bucket,镜像的资源都会储存在对象存储中。此时镜像服务相称于一个中间件,封装了
sdk,对镜像的所有操作相称于调用 sdk 去操作 oss。

● Bucket 默认为私有读写,若配置为公有读写/公有读,则也可对镜像堆栈进行读取/控制。
● 若控制了 Bucket,则相称于控制了镜像堆栈,可通过设置回源造成镜像堆栈控礼服务器 SSRF。
Token 走漏
大多数云厂商使用两种认证方式登录堆栈,永世访问凭证大概暂时访问凭证。
若访问凭证走漏,则可对堆栈进行增编削查,完成“供应链攻击”。
中间件
是为应用提供通用服务和功能的软件。数据管理、应用服务、消息转达、身份验证和 API 管理通常都要通过中间件。我们这里中间件只说API网关和消息队列的内容。
消息队列
当前主流的消息队列有RocketMQ、Kafka、Pulsar、RabbitMQ等。
● RocketMQ是阿里巴巴研发的一款低延迟、高可靠、可伸缩、易于使用的消息中间件。
● Kafka是由 LinkedIn 公司开发的一个高吞吐量的分布式消息系统, 开发它的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
● Pulsar是由Yahoo开发的 Pub-Sub 模式的分布式消息平台,在 2016 年开源,并于2018年9月毕业成为 Apache
基金会的顶级项目。
● RabbitMQ是一个基于高级消息队列协议实现的消息系统,其服务器端用 Erlang 语言编写,支持多种客户端,如 Python、.NET、PHP、
Java、JMS 等。
某些云厂商在启动消费者订阅平凡消息时需要设置相关参数其中包罗AccessKey等云身份验证的参数需要留意防止走漏。

某云厂商的一款应用中在准备配置阶段明确说明了使用Log4j,这里需要留意下。

脚色密钥
有些产品的消息队列需要配置脚色,每个脚色的建立都会有密钥的生成,这个密钥是作为管理员身份的认证,如果脚色的密钥走漏那么绑定这个脚色队列数据存在走漏的风险。
消息队列开通需要进行一些配置新建集群会显示接入点

在其中新建命名空间,并新建Topic

针对空间进行权限配置,需要提前新建一个脚色

脚色建立时会配置权限

消息队列中每个集群可以建立多个命令空间,接入地址可以选择开放公网,但是打开之后就不能再关闭
每个空间需要绑定脚色,而且多个空间可以绑定一个脚色,如果这一个脚色的密钥走漏那所有空间的队列数据可读
API网关
API 网关将各系统对外提供服务的微服务聚合起来,所有要调用这些服务的哀求都需要通过 API
网关进行,基于这种方式网关可以对API进行统一管控,例如:认证、鉴权、流量控制、协议转换、 监控等等。
鉴权
API的鉴权设置不当的话会让恣意用户调用相关API
API创建的时候,会有鉴权的类型选择,如果不选默认为免认证,意味着谁都可以调用

鉴权选择应用认证,这个涉及到调用API的凭证,密钥类似于登录密码,密钥走漏他人可以恣意调用API
应用密钥也是一种签名方式,可以对哀求内容签名计算

鉴权为密钥对是只有使用正确密钥发起的访问才可以大概通过API网关的校验,不携带大概错误都不能通过鉴权,这种方式是汗青功能官方会提示不建议使用,密钥的走漏一样会造成恣意调用

云原生网关
某厂商有个产品叫云原生网关是基于Kong网关的,我们可以借助这个到达隐蔽ip的目标。

使用的条件是需要开通云原生网关(如今白嫖)、而且有一台和网关属于同一个地区、同一VPC下的云服务器

通过配置安全组添加规则放通VPC的网段10.0.0.0/8 、192.168.0.0/16、172.16.0.0/12三个VPC内网网段

访问创建的云原生网关可以看到网关的详细信息包罗Kong 管理控制台的地址和管理员账号、密码

第一次进入需要启用连接,使用默认的就好

在左侧进入服务列表并新建一个服务,创建时在url中填写云服务器在VPC的地址

创建乐成点击服务进入详情创建一个路由,在Paths中填写/,回车确定,然后点击最下面的提交

cs马配置为kong提供的公网代理地址,需要使用无阶段的马

目标乐成通过kong上线

总结
根据以上分析,本文涉及到的公有云基础组件安全风险总结如下:
从
云存储
角度看,包罗访问控制风险,文件上传中的密钥走漏、恣意文件覆盖风险,STS Token的未授权访问风险,PUT ACL接管存储桶配置不当,以及文件下载、MinIO等资源服务器也容易出现安全题目。
从
云计算
角度看,云服务器易出现镜像污染和因服务器环境相同带来连环攻击的风险;批量计算服务命令遭恶意控制等。
从
容器集群
角度看,容器集群服务易发生敏感目次被挂载的环境;容器镜像服务存在存储挟制、Token走漏等风险。
从
中间件
角度看,消息队列可能存在脚色密钥、云身份验证参数走漏等题目;API网关存在鉴权配置不当引起恶意调用、密钥走漏风险,云原生网关权限走漏等题目。
网络安全工程师(白帽子)企业级学习路线
第一阶段:安全基础(入门)
第二阶段:Web渗透(初级网安工程师)
第三阶段:进阶部分(中级网络安全工程师)
如果你对网络安全入门感爱好,那么你需要的话可以点击这里
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
千千梦丶琪
金牌会员
这个人很懒什么都没写!
楼主热帖
SQLserver的安装
【C++】ZZ1864- 解题精讲
StoneDB社区答疑第一期
一文搞清UNIX/Linux与Windows文件换行 ...
数据湖Hudi与对象存储Minio及Hive\Spar ...
C语言程序设计(一)计算机思维导论 ...
开发了一个Java库的Google Bard API, ...
学透shell 带你写常用的100个 shell 脚 ...
Cesium 几何体贴模型 sampleHeight(二 ...
多商户商城系统功能拆解06讲-平台端商 ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表