文章前言
AWS EFS(Elastic File System)是Amazon Web Services提供的一种完全托管的、可扩展的网络文件存储服务。它设计用于与多个EC2实例(以及其他AWS服务)共享文件系统。EFS 允许你将文件存储在多个 EC2 实例之间共享,且具有高度的可扩展性和高可用性。EFS可以扩展到海量的数据量并且能够自动根据存储需求增加或减少存储容量
EFS 作用
动态弹性:Amazon EFS 可在您添加或删除文件时自动即时地扩大或缩小您的文件存储容量,不会中断您的应用程序,可在您需要时为您提供所需的存储空间,您只需创建文件系统和开始添加文件,无需提前预置存储
完全托管:Amazon EFS 是一项完全托管型服务,可为通用工作负载提供共享文件系统存储。它提供简单的界面,可使您快速创建和配置文件系统并为您管理文件存储基础设施,从而消除部署、修补和维护文件系统基础的复杂性。
可扩展的性能:Amazon EFS 旨在提供通用工作负载所需的吞吐量、IOPS 和低延迟。吞吐量和 IOPS 可以随文件系统增长而扩展,并且可以在短时间内突增到较高的吞吐量水平,以支持不可预测的文件工作负载性能需求。对于最苛刻的工作负载,Amazon EFS 可以支持超过 10 GB/秒的性能和高达 500000 次 IOPS。
共享文件存储:Amazon EFS 可为数千个连接提供安全访问。Amazon EC2 实例和本地服务器可以使用传统的文件许可模型、文件锁定功能和分层目录结构通过 NFSv4 协议同时访问 Amazon EFS 共享文件系统。Amazon EC2 实例可以跨可用区和 AWS 区域访问您的文件系统,而本地服务器可以使用 AWS Direct Connect 或 AWS VPN 进行访问
环境搭建
首先创建文件系统:
https://us-east-1.console.aws.amazon.com/efs/home?region=us-east-1#/get-started
然后会涉及到 VPC
在AWS中VPC(Virtual Private Cloud)是一个虚拟网络,允许你在AWS云中定义和控制网络配置。通过VPC你可以选择IP地址范围、子网布局、路由表、网络网关等,构建一个完全隔离的网络环境,使得你的AWS资源(例如:EC2实例、RDS数据库、EFS文件系统等)能够在一个私有的、受控的网络中进行通信
其实也是为了安全考虑因为EFS是一个网络文件系统,它是基于NFS协议的,所以必须在VPC内进行配置和挂载
可以确保EFS文件系统只对特定的EC2实例、子网或网络区域开放访问,使用VPC的安全组和网络ACL保护文件系统免受未授权访问
这样打个比方,EFS(Elastic File System))是你公司中需要共享的文件柜,每个部门的员工都需要从这个文件柜中拿取文件,可能是财务部、开发部或销售部的员工。为了确保文件柜能够安全地让不同部门共享,你需要把文件柜放在一个子网中并通过你的VPC中的网络控制流量
如果你没有选择合适的 VPC 设置,文件柜(EFS)就无法被其他部门安全地访问或者可能会被不应该有权限的部门看到,造成安全隐患,然后VPC组成部分很多,GPT 来生动形象一手
VPC = 你公司里的大楼
想象你有一个公司,想在这栋大楼里放置不同的办公室(即:不同的计算资源),这栋大楼就是你的 VPC,它定义了你可以在哪里放置这些办公室以及它们如何相互连接。你决定了整个大楼的布局和访问控制。
子网 = 各个部门
在你的公司大楼里,你会把不同的部门分配到不同的楼层或区域,每个部门代表一个子网,这些部门可能有不同的功能,例如研发部、财务部和人力资源部,每个部门的人员只能在该部门内活动。
互联网网关(Internet Gateway)= 大楼的主门
互联网网关就像是你公司大楼的主门。通过这个门,你的大楼可以和外界(互联网)进行互动。你可以设置只让某些部门(比如公开的销售部门)通过主门与外界联系,而其他部门(如财务部门)则不允许直接与外界互动。
路由表 = 楼内的指示牌
公司的每个楼层都可能有指示牌,指引员工从一个部门走到另一个部门。路由表就是这样的指示牌,它告诉数据(例如,你的文件或请求)从一个子网流向另一个子网,或者如何通过主门(互联网网关)到达外面。安全组 = 部门的门禁系统
每个部门的门都有门禁系统,只有持有授权证件的人才能进入。例如,财务部的门禁系统只允许财务部的人进入,其他部门的人员无法进入。这就是安全组的作用,它控制着哪些流量能够进入和离开你的 VPC 中的每个资源(例如 EC2 实例、数据库等)
网络 ACL = 整栋大楼的安保人员
还可以想象大楼有一套总的安保措施,安保人员会检查进入大楼的每一位员工,确保没有未经授权的人进入。这就是网络 ACL,它在每个子网的入口和出口处进行安全检查,确保符合安全策略。
VPC Endpoints = 内部电梯
如果你不想让某些部门的员工每次都走出大楼到外面(互联网)去访问某些资源(比如S3存储),你可以设置VPC Endpoint,让他们直接通过内部电梯去到指定的楼层。这就像是通过VPC Endpoint,你的VPC资源可以直接与AWS服务(如:S3通信,而无需经过互联网
我这里选择的是默认 ,创建好后如下
连接方法官方提供了两种方法
DNS 挂载
IP 挂载
不同区域的IP不同,然后还可以设置安全组
这里为了后续的方便操作,我把安全组设置了为了全端口
漏洞利用
首先列出 EFS
root@VM-16-17-ubuntu:~# aws efs describe-file-systems
{
"FileSystems": [
{
"OwnerId": "985539798290",
"CreationToken": "quickCreated-fabee36e-15d7-415e-8f21-5fbddf43b45a",
"FileSystemId": "fs-02c4b8e240731004d",
"CreationTime": 1735479922.0,
"LifeCycleState": "available",
"Name": "test",
"NumberOfMountTargets": 5,
"SizeInBytes": {
"Value": 6144,
"ValueInIA": 0,
"ValueInStandard": 6144
},
"PerformanceMode": "generalPurpose",
"Encrypted": true,
"KmsKeyId": "arn:aws:kms:us-east-1:985539798290:key/96673331-8b8a-44ac-9d91-20ca55655ec7",
"ThroughputMode": "elastic",
"Tags": [
{
"Key": "Name",
"Value": "test"
},
{
"Key": "aws:elasticfilesystem:default-backup",
"Value": "enabled"
}
]
}
]
}
然后获取了 id 后我们就可以查看他的挂载的目标了
root@VM-16-17-ubuntu:~# aws efs describe-mount-targets --file-system-id fs-02c4b8e240731004d
{
"MountTargets": [
{
"OwnerId": "985539798290",
"MountTargetId": "fsmt-00b1a4f5544f2b3ec",
"FileSystemId": "fs-02c4b8e240731004d",
"SubnetId": "subnet-08399d31d84ecffb5",
"LifeCycleState": "available",
"IpAddress": "172.31.83.160",
"NetworkInterfaceId": "eni-04435ff50bd82c259",
"AvailabilityZoneId": "use1-az2",
"AvailabilityZoneName": "us-east-1b"
},
{
"OwnerId": "985539798290",
"MountTargetId": "fsmt-019dba41ef86e1ede",
"FileSystemId": "fs-02c4b8e240731004d",
"SubnetId": "subnet-00e8b8ebb946396e9",
"LifeCycleState": "available",
"IpAddress": "172.31.34.52",
"NetworkInterfaceId": "eni-0632861b76112e635",
"AvailabilityZoneId": "use1-az6",
"AvailabilityZoneName": "us-east-1d"
},
{
"OwnerId": "985539798290",
"MountTargetId": "fsmt-06ffa7ab1c4654158",
"FileSystemId": "fs-02c4b8e240731004d",
"SubnetId": "subnet-0f094e452fec4ae16",
"LifeCycleState": "available",
"IpAddress": "172.31.29.39",
"NetworkInterfaceId": "eni-0b4383bdeaec1c679",
"AvailabilityZoneId": "use1-az4",
"AvailabilityZoneName": "us-east-1c"
},
{
"OwnerId": "985539798290",
"MountTargetId": "fsmt-074a438191f1399ea",
"FileSystemId": "fs-02c4b8e240731004d",
"SubnetId": "subnet-04cf21921884d1b20",
"LifeCycleState": "available",
"IpAddress": "172.31.10.214",
"NetworkInterfaceId": "eni-01651c21cd6d61d9e",
"AvailabilityZoneId": "use1-az1",
"AvailabilityZoneName": "us-east-1a"
},
{
"OwnerId": "985539798290",
"MountTargetId": "fsmt-09a4ccce81498c634",
"FileSystemId": "fs-02c4b8e240731004d",
"SubnetId": "subnet-0ff05067211ddde3c",
"LifeCycleState": "available",
"IpAddress": "172.31.66.170",
"NetworkInterfaceId": "eni-01a0715e0632b63fe",
"AvailabilityZoneId": "use1-az5",
"AvailabilityZoneName": "us-east-1f"
}
]
}
然后我们查询一下他的安全组,方便我们观察是否可以利用
root@VM-16-17-ubuntu:~# aws efs describe-mount-target-security-groups --mount-target-id fsmt-00b1a4f5544f2b3ec
{
"SecurityGroups": [
"sg-0d6efe3bbd120c805"
]
}
root@VM-16-17-ubuntu:~# aws ec2 describe-security-groups --group-ids sg-072267c55125660a3
{
"SecurityGroups": [
{
"Description": "ok",
"GroupName": "test",
"IpPermissions": [
{
"FromPort": 0,
"IpProtocol": "tcp",
"IpRanges": [
{
"CidrIp": "0.0.0.0/0"
}
],
"Ipv6Ranges": [],
"PrefixListIds": [],
"ToPort": 65535,
"UserIdGroupPairs": []
}
],
"OwnerId": "985539798290",
"GroupId": "sg-072267c55125660a3",
"IpPermissionsEgress": [
{
"IpProtocol": "-1",
"IpRanges": [
{
"CidrIp": "0.0.0.0/0"
}
],
"Ipv6Ranges": [],
"PrefixListIds": [],
"UserIdGroupPairs": []
}
],
"VpcId": "vpc-07e3c3bd4b70be619"
}
]
}
然后我们开始挂载
首先需要下载一下工具
apt install nfs-common
下载好了之后我们就可以挂载了,只需要使用刚刚的命令就 ok 了,不过注意 VPC 的限制,如果我们控制了一台 EC2 服务器,就可以尝试挂载
原文作者:1341025112991831
原文连接:https://xz.aliyun.com/t/16967
原文始发于微信公众号(七芒星实验室):AWS云之EFS 挂载安全
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论