ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

MonkeyZoo 搭建指南:用 Terraform 与 Packer 在 GCP 上部署 Infection Monkey 渗透测试网络

2026/10/8 1:35:49 拓冰建站 浏览量
MonkeyZoo 搭建指南:用 Terraform 与 Packer 在 GCP 上部署 Infection Monkey 渗透测试网络 网络安全应用安全【免费下载链接】monkeyInfection Monkey - An open-source adversary emulation platform项目地址https://gitcode.com/gh_mirrors/mo/monkey点击查看免费下载MonkeyZoo 是 Infection Monkey 项目自带的自动化渗透测试网络通过 Terraform 在 Google Cloud PlatformGCP上一键拉起一个由大量故意留有漏洞的虚拟机组成的隔离网络用于回归测试各类 exploiter、评估真实场景下的扫描耗时、演练凭证窃取与多跳传播等攻防能力。阅读本文后你将掌握从 GCP 服务账号配置、镜像构建、Terraform 状态后端设置到terraform apply完成整网部署以及登录两台 Monkey Island 主控机并配合黑盒测试运行测试的全部流程。本文以 zoo_setup.md 为骨架并补充仓库内 README.md、config.tf、monkey_zoo.tf、firewalls.tf 与 zoo_network.md 的源码级细节供读者对照实操。MonkeyZoo 是什么根据 monkey_zoo 目录 READMEMonkeyZoo 是一个用 Terraform 部署在 GCP 上的测试网络。Terraform 脚本允许你快速搭建一个布满脆弱主机的网络用于回归测试 Monkey 的 exploiters每个 exploiter 都有对应的靶机如 Hadoop、Log4Shell、RDP、SMB、ZeroLogon、SNMP、PowerShell/WinRM、MSSQL、SSH 等评估真实场景下的扫描耗时网络中专门布置了无漏洞的 Scan 机器如 Nr. 21、Nr. 22用于测试扫描性能基线演练复杂传播链多跳利用tunneling 机器链、凭证窃取mimikatz、浏览器凭证、SSH key steal、凭证复用credentials-reuse 子网等。安全警告务必先行阅读MonkeyZoo 是一个故意脆弱的网络。README 明确警告不要把生产服务器加入同一网络且必须保持网络对公网封闭。部署完成后建议及时销毁实例避免被他人利用。搭建前的准备搭建分为构建镜像与部署实例两条工具链对应需求如下详见 zoo_setup.md 的 Requirements 小节通用要求已下载本仓库尤其是envs/monkey_zoo目录所有指令、Packer/Terraform 配置均在其中。构建镜像Packer Ansible安装packerHashiCorp 官方教程get-started-install-cli安装ansibleAnsible 官方安装指南。部署实例Terraform S3安装terraformHashiCorp 官方教程install-cli准备一个S3 兼容的对象存储桶用于存放 Terraform 状态state具备访问该 S3 桶的access keyID 与 Secret。使用 GCP拥有一个 GCP 账号若想一次测试整个网络建议升级为付费账号否则资源配额可能不足安装gcloudCLIGoogle Cloud SDK 官方安装文档Linux 版。注原文档中的安装链接为外部站点本文不再罗列各工具均按官方文档安装即可。部署 MonkeyZoo 的完整步骤整体流程为配置 GCP 服务账号 → 获取官方镜像权限 → 配置 AWS 访问 → 配置 Terraform 后端 → 可选用 Packer 构建镜像 → 修改 Terraform 变量 →terraform init/plan/apply部署。步骤 1为项目配置 GCP 服务账号在 GCP 控制台的IAM Admin → Service Accounts → CREATE SERVICE ACCOUNT创建一个服务账号用于向你的项目发起部署并授予以下权限Compute Engine - Compute Image User Compute Engine - Compute Network Admin Compute Engine - Compute Instance Admin (v1) Compute Engine - Compute Security Admin如果图省事也可以直接授予Project - Owner但注意这会授予超出实际需要的权限不推荐在共享环境中使用。随后为该服务账号创建并下载 JSON 格式的 Service account key放置在monkey_zoo/gcp_keys目录下并命名为gcp_key.json即仓库内的 gcp_keys 目录。可选多 Zoo 实例的服务账号模拟impersonation如果你要同时管理多个 Zoo 实例可以为每个项目单独建一个服务账号再建一个管理员服务账号并授予其模拟impersonate其他账号的能力这样只需一把 key 即可管理所有项目。做法是在目标项目上启用IAM 和 Service Account Credentials API给管理员账号授予对每个项目服务账号的Service Account Token Creator权限并使用该管理员账号的 key在 Terraform 变量中把service_account_email设为要管理的那个项目服务账号。对应到代码config.tf 中service_account_email与credentials两个变量正是为此设计provider 会通过impersonate_service_account以credentials对应的账号去模拟service_account_email指向的账号。步骤 2获取官方生产项目镜像的权限MonkeyZoo 的机器镜像由维护方托管在官方项目guardicore-22050661中。你的服务账号需要被授予该项目的以下权限需联系 Infection Monkey 开发者添加参考官方技术文档获取使用与支持渠道Compute Engine - Compute image user这一点对应 images.tf 中的写法所有实例的启动盘镜像都通过data google_compute_image从project local.monkeyzoo_project即guardicore-22050661见 config.tf 的locals块拉取例如data google_compute_image hadoop-2 { name hadoop-2 project local.monkeyzoo_project }如果你在步骤 5 选择自行构建镜像也可以只使用自有项目内的镜像无需官方项目权限。步骤 3配置 AWS 访问用于 Terraform 状态存储首先在 AWS或兼容 S3 的服务生成 access key然后通过以下两种方式之一配置环境方式 a环境变量export AWS_ACCESS_KEY_IDyour-access-key-id export AWS_SECRET_ACCESS_KEYyour-secret-access-key方式 bAWS 配置文件编辑或创建~/.aws/config定义 profile[profile my-profile] output text region us-east-1编辑或创建~/.aws/credentials写入该 profile 的密钥[my-profile] aws_access_key_idaccess-key aws_secret_access_keysecret-key步骤 4配置 Terraform 后端S3修改仓库中 terraform/setup/state.tf原文档写的是terraform/state.tf当前仓库中该文件实际位于terraform/setup/子目录的backend s3配置段逐项确认字段含义endpointS3 API 的端点地址profile若使用~/.aws/config填写其中的 profile 名bucketS3 兼容桶的名称key状态文件在该桶中存储的路径region桶所在区域更多字段细节可参考 Terraform 官方的 s3 backend 文档。值得一提的源码佐证该文件不仅定义了 backend 变量还配套声明了状态存储基础设施本身——一个开启了版本控制aws_s3_bucket_versioning、AES256 服务端加密、并阻止公开访问的 S3 桶外加一张用于状态锁的 DynamoDB 表aws_dynamodb_table以LockID为哈希键。也就是说先对setup/state.tf执行一次terraform apply把桶和锁表建好再把主配置的 backend 指向该桶可避免并发部署时状态竞争。步骤 5可选用 Packer 构建自定义镜像默认情况下直接使用官方项目镜像即可部署若需自行构建例如定制系统版本或修改漏洞环境从envs/monkey_zoo/packer目录执行packer init . packer build .packer build .会构建全部镜像可通过-only参数限定构建范围例如packer build -only googlecompute.tunneling-9,googlecompute.tunneling-10 . packer build -only googlecompute.tunneling-*常用附加标志见 README.md-debug关闭并行化并输出调试信息-on-errorask脚本失败后允许编辑并重试-force覆盖已存在的镜像。构建前请核对 variables.pkr.hcl 与 variables.auto.pkrvars.hcl 中的变量是否符合你的环境。关键变量包括project_id镜像构建目标项目account_file服务账号 key 文件路径默认指向../gcp_keys/gcp_key.jsonzone构建区域默认europe-west1-bmachine_type构建机规格默认e2-standard-4windows_source_image/linux_source_image基础镜像默认分别为windows-server-2016-dc-v20211216与ubuntu-2004-focal-v20230907packer_username/packer_user_passwordPacker 创建的构建账号与密码默认packer_user/Passw0rd。每个靶机镜像的定制脚本Ansible playbook位于 packer/tasks如windows_install_mssql.yml、windows_install_apache_solr.yml、linux_install_python.yml等构建定义文件为 packer 目录 下的各*.pkr.hcl。步骤 6修改 Terraform 部署配置编辑 terraform/config.tf必须提供project部署目标 GCP 项目 ID默认test-000000务必改成你自己的项目credentialsGCP 凭据。这里对应的是 JSON 字符串形式的凭据内容Packer 的account_file是文件路径二者不同。你可以通过 Terraform 变量文件把gcp_key.json的内容传进来例如在terraform.tfvars中写credentials file(../gcp_keys/gcp_key.json)。可选变量均已带默认值通常无需修改除非你的项目区域不同变量默认值说明regioneurope-west1部署区域main_zoneeurope-west1-a10.2.2.0/24 子网.2网段机器所在可用区main1_zoneeurope-west1-b10.2.3.0/24 子网.3网段机器所在可用区tunneling_zoneeurope-west1-atunneling 机器所在可用区credentials_reuse_zoneeurope-west1-bcredentials reuse 机器所在可用区service_account_email空要模拟的服务账号配合步骤 1 的可选 impersonationresource_policies空列表附加到实例上的资源策略列表从 monkey_zoo.tf 的源码可以看到 Zoo 的网络拓扑与 CIDR 规划主网monkeyzoo含10.2.2.0/24.2网段与10.2.3.0/24.3网段两个子网另有tunneling10.2.1.0/28、tunneling210.2.0.0/27、powershell10.2.4.0/24、credential-reuse10.2.4.0/24与credential-reuse210.2.5.0/24等隔离网络。机器列表与各机器 IP、凭证、漏洞说明可查阅 zoo_network.md。防火墙策略在 firewalls.tf 中定义值得注意的两点islands-in规则只对带有island标签的实例即两台 MonkeyIsland 主控机放行22/443/3389/5000端口的入站流量来源0.0.0.0/0其余靶机不对外暴露任何端口monkeyzoo-in / monkeyzoo-out规则仅允许10.2.2.0/24、10.2.1.0/27、10.2.3.0/24、10.2.4.0/24内部网段互相访问配合各隔离网络tunneling、credentials-reuse实现只有特定机器才能到达特定目标的拓扑约束——这正是多跳利用与凭证复用测试所需的网络隔离。步骤 7部署 Zoo进入 terraform 目录并依次执行cd envs/monkey_zoo/terraform terraform init terraform plan # 审查将在 GCP 上创建的资源 terraform apply # 在网络上创建全部虚拟机terraform init初始化后端与插件读取 backend 配置连接 S3 状态桶terraform plan先审查变更会显示将创建的 VPC、子网、防火墙与数十台实例确认无误再执行terraform apply实际创建资源。Zoo 机器数量较多apply 通常需要一段时间期间注意 GCP 配额是否充足。使用 MonkeyZoo islands主控机部署完成后网络中有两台 MonkeyIsland 主控机见 zoo_network.md 与 zoo_network.mdisland-linux-25010.2.2.250Ubuntu 16.04端口 22/443从 GCP 控制台直接 SSH 登录island-windows-25110.2.2.251Windows Server 2016端口 3389/443在 GCP 的 VM instances 页面点击该实例先为自己的账户设置密码再通过 RDP 登录。两台岛屿机都预装了 MonkeyIsland 服务器、git、mongodb 等组件且只能通过 GCP 访问Only accessible through GCP进一步印证了网络对外封闭的设计。在 Zoo 中安装 Monkey Island普通用户按操作系统登录island-linux-250Linux或island-windows-251Windows随后参考官方 setup guide 完成 Monkey Island 的安装与启动。开发者如需搭建开发环境参考官方 development setup 文档覆盖源码依赖、MongoDB、前端构建等步骤。仓库内 monkey_island 安装脚本、install_mongo.sh 等即为相关依据。用 MonkeyZoo 进行测试黑盒测试blackbox testsZoo 的自动化回归入口是 blackbox 测试套件。该目录包含基于 pytest 的测试框架测试配置定义在 test_configurations如depth_1_a.py、depth_2_a.py、depth_3_a.py、depth_4_a.py、credentials_reuse_ssh_key.py、smb_pth.py、zerologon.py等测试逻辑在 tests如basic_test.py、exploitation.py配合 island_client 通过 API 驱动 Island 下发配置并断言攻击结果。手动测试利用靶机zoo_network.md 中大多数机器可用对应的 exploiter 攻击。进入 MonkeyIsland 的配置界面把目标机器 IP 加入扫描/攻击目标列表若使用暴力破解类 exploiter还需填入表中列出的密码/凭证用户名未列出时通常为m0nk3y。复杂传播场景多跳利用与凭证窃取等测试的网络拓扑示意图见 network_diagrams如 tunneling 链、凭证复用链。演练这类场景时需在配置中调大攻击深度hops与传播深度。其他功能Zoo 网络也适合验证其他特性——扫描性能用无漏洞的 Scan 机器、凭证收集器mimikatz、Chrome/Chromium 浏览器凭证、SSH 密钥窃取等均可按 zoo_network.md 中的机器描述挑选合适靶机。注意事项与最佳实践网络封闭Zoo 内机器默认只对 islands 暴露少量管理端口22/443/3389/5000靶机之间仅按测试拓扑互相可达部署后请勿额外放行公网流量也绝不将生产服务器加入该网络。配额与成本一次terraform apply会创建数十台n1-standard-1/e2-standard-2规格实例注意 GCP 项目配额测试结束后建议terraform destroy清理避免持续计费。镜像权限使用官方镜像时务必先完成步骤 2 的权限申请否则terraform plan会因无法读取镜像而报错。状态锁多成员协作部署同一 Zoo 时S3 后端 DynamoDB 锁表setup/state.tf可防止 state 并发写入这也是该目录单独成setup子目录的原因。总结MonkeyZoo 把恶意软件测试网络的搭建成本压缩到了几条 Terraform/Packer 命令服务账号与镜像权限打通后修改 config.tf 中的项目与凭据terraform apply即得到一个由数十台脆弱主机、多段隔离子网与精确防火墙规则构成的攻防演练场。配合 blackbox 测试套件与 zoo_network.md 的机器清单你可以持续对 Infection Monkey 的各个 exploiter、扫描器与传播机制做回归验证——这正是开源对抗模拟平台自我验证的关键基础设施。赞分享网络安全应用安全【免费下载链接】monkeyInfection Monkey - An open-source adversary emulation platform项目地址https://gitcode.com/gh_mirrors/mo/monkey点击查看免费下载相关推荐Nomad GCP 部署指南使用 Packer 与 Terraform 在 Google Cloud 上搭建 HashiStack 集群Nomad GCP 部署指南使用 Packer 与 Terraform 在 Google Cloud 上搭建 HashiStack 集群 Nomad 是 Ha任务调度云原生运维后端Infection Monkey终极指南从零开始的渗透测试实战教程Infection Monkey终极指南从零开始的渗透测试实战教程 Infection Monkey是一款功能强大的开源攻击模拟平台专为测试数据中心对边界突网络安全应用安全使用 Packer 与 Terraform 在 AWS、Azure、GCP 上一键部署 Nomad HashiStack 沙箱集群使用 Packer 与 Terraform 在 AWS、Azure、GCP 上一键部署 Nomad HashiStack 沙箱集群 本文基于 Nomad 仓库任务调度云原生运维后端上一篇Bloom Docker部署教程3步搭建可扩展的API缓存服务下一篇certificate-photo 快速开始指南10分钟跑通微信云开发证件照小程序的本地环境创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考