AWS 渗透测试实验室
使用 Terraform 在 AWS 上通过 IaC 部署的渗透测试实验室。
它部署了一个可通过 SSH 和 WireGuard VPN 访问的 Kali Linux 实例。
易受攻击的实例位于私有子网中。
注意:
- 区域 ID 仅针对 "eu-west-1" 定义
- 对于其他区域,必须指定 Kali AMI ID,并且(在构建后)指定 Metasploitable3 ID
更新日志
- [2022-01-30]
- 设置 sudoers 以允许用户组使用 sudo nmap
- 安全组允许连接到端口 8800-8899(用于反弹 shell)
- [2021-12-26]
- 自动设置第一个可用区
- 使用 Packer 创建新的 Metasploitable AMI
- 初始集成 log4jshell 漏洞到 Metasploitable3 机器(但尚不可用)
- [2021-12-22]
- Packer 用于构建 Metasploitable 镜像(参见 ./metasploitable3/)
- 修复了 Kali 的 user_data 脚本
- 验证了在 us-east-1 区域的部署
- [2021-12-09]
- 改为查找最新的 Kali Linux AMI ID,而不是提供 ID
- 替换了已弃用的 terraform template_file
- Windows Server AMI(待办:安装漏洞软件)
- [2021-09-15]
- 修复了 WireGuard 多对端创建问题
- 在 Kali Linux 上集成了 Infection Monkey 应用
- 升级到新的 Kali 版本 2021.3
- [2021-06-02] AMI ID 更新为使用 Kali 2021.2
- [2021-03-10] 使用新的 Kali 版本 2021.1
架构图

组件
- Kali 实例(私钥保存为 kali.pem)
- WireGuard VPN 服务:客户端文件 client_vpn.wg
- 可通过 ssh/scp 访问
- 公有子网 10.0.0.5/24
- Infection Monkey 运行在 5000 端口(仅能通过 VPN 或 SSH 访问)
- 易受攻击的机器 "Metasploitable"(AMI 构建已公开)
- 更多易受攻击的实验室/机器/ Docker(待完成)
新增功能
- 用户管理
- 自动在 Kali 实例中创建非特权用户,并使用 RSA
- 每个用户的 WireGuard VPN 客户端文件
- 命令行审计日志记录到 syslog
- 启用 auditd,包含 sudo_log 和 users_log 密钥,用于审计用户操作(另请参阅 ausearch 命令)
- ToDO: 将终端审计转发到 CloudWatch 或具有一次写入策略的 S3 存储桶
使用指南
- 要求:
- Terraform CLI 安装指南
- AWS CLI 安装指南
- 配置了 AWS CLI 和 Terraform 的 $PATH
- AWS 账户并通过 aws cli 配置凭据:
aws configure
- AWS Marketplace 中的 Kali Linux 订阅
- 预先构建的 Metasploitable3 AMI 镜像(eu-west-1 区域有公开 AMI)参见
部署
- 在
variables.tf 中设置 0 或 1 启用/禁用要部署的易受攻击实例:
variable "deployment-control" {
type = map
default = {
#"instance" = 0 或 1,0 为禁用,1 为启用
"metasploitable3" = 1
"dvca" = 0
}
description = "控制部署哪些 EC2 实例,0 表示无,1 表示启用"
}
- 使用 Terraform 部署基础设施:
terraform init
terraform plan
terraform apply -auto-approve
输出
Terraform 输出将显示以下条目:
- Kali 用户的 SSH 连接命令(通过 sudo 以 root 身份)
- Kali 用户的 WireGuard 客户端文件将从 Kali 服务器自动获取
- 用于获取 WireGuard 客户端文件的 scp 命令(以防定义的 terraform local-exec 命令失败)
- 对于 Kali 实例中创建的每个普通用户:
- 用于 SSH 连接的私钥文件
- 用于 VPN 连接的 WireGuard 客户端文件
使用
通过 SSH 或 WireGuard 连接到 Kali:
- SSH:(仅命令行)使用自动生成的私钥(参见 Terraform 输出)
KALI_IP=<KALI_IP> # 配置 kali 公网 IP
ssh -i kali.pem -o StrictHostKeyChecking=no -o IdentitiesOnly=yes kali@${KALI_IP}
- WireGuard:通过 WireGuard 连接本地 Kali 实例(参见生成的 client_vpn.wg 文件)
KALI_IP=<KALI_IP> # 配置 kali 公网 IP
scp -i kali.pem -o StrictHostKeyChecking=no IdentitiesOnly=yes kali@${KALI_IP}:/home/kali/client_vpn.wg .
####
(local_kali)$ sudo apt-get install –y wireguard
(local_kali)$ sudo gedit /etc/wireguard/wg0.conf # 复制 client_vpn.wg 的内容
(local_kali)$ sudo chmod 700 /etc/wireguard/wg0.conf
(local_kali)$ sudo wg-quick up wg0
(local_kali)$ ping 10.0.0.5 # 测试与 AWS 中 Kali 实例的连通性
销毁
terraform destroy -auto-approve
参考