- 网络安全
- 应用安全
【免费下载链接】monkey
Infection Monkey - An open-source adversary emulation platform
本篇指南以 Infection Monkey 官方文档的 Setup 章节为主体,系统梳理 Monkey Island 在 Linux(AppImage)、Docker、Windows、AWS 与 Azure 五大场景下的部署步骤、
server_config.json配置细节、服务化、证书与升级等实战问题。读完本文,你将能够从零搭建一套可用的对抗模拟(Adversary Emulation)控制端,并掌握端口、日志、证书等核心运维配置。
部署概览:选择适合你的安装方式
Infection Monkey 的部署形态是"控制端(Monkey Island Server)+ 攻击 Agent(Monkey Agent)"的双组件架构。控制端是整个平台的中枢,负责下发配置、接收 Agent 回传的扫描与利用结果、生成感染地图与安全报告,而 Agent 则由控制端通过网络传播释放到目标机器上执行探测与模拟攻击。
官方提供了四种部署路径,对应不同的使用场景:
| 部署方式 | 适用场景 | 核心形态 |
|---|---|---|
| Linux AppImage | 自托管、单机演示、企业内部安全评估 | 可执行的单文件包,自包含运行时 |
| Docker | 快速验证、CI 环境、需要隔离部署 | MongoDB + Monkey Island 双容器 |
| Windows 安装程序 | Windows 环境的实验室与生产评估 | 图形化安装向导 + 桌面快捷方式 |
| AWS / Azure 云市场 | 云上快速开通、公网可达的控制端 | 云市场镜像(底层为 AppImage 部署) |
无论选择哪种方式,部署完成后都会得到一个运行于https://localhost(默认 HTTPS 443 端口)的 Monkey Island Web UI。接下来按平台逐一展开。
Linux:使用 AppImage 部署
支持的操作系统与前置条件
AppImage 是一种"发行版无关"的、自包含运行时的打包格式——包内已经包含应用程序及其运行所需的全部依赖。因此 Infection Monkey 的 AppImage 包可以在大多数安装了 FUSE 的现代 Linux 发行版上运行。官方实测过的发行版包括 BlackArch 2023.04.01、CentOS/Rocky/RHEL 8+、Debian 11、Kali 2023.1、Parrot 5.2、openSUSE Leap 15.4、Ubuntu 18.04/20.04/22.04 以及 WSL 2,详见 系统需求参考。
在开始之前需要明确两点:
- 运行 AppImage 需要 root 权限:默认情况下 Monkey Island 服务器监听 443 端口,这是 Linux 的保留端口(<1024),需要为 AppImage 包设置
CAP_NET_BIND_SERVICE能力才能绑定成功; - 需要 FUSE 2.x:AppImage 挂载需要 FUSE 2 版本,安装 Ubuntu 等系统时若报 FUSE 相关错误,可先安装
libfuse2。
下载与校验安装包
从官方发布页下载InfectionMonkey-v2.3.0.AppImage后,建议先校验 SHA-256 哈希以确保安装包完整性和来源可信。在 Linux 上使用:
$ sha256sum InfectionMonkey-v2.3.0.AppImage得到的哈希值应与 发布产物哈希表 中 2.3.0 版本对应条目一致(8fc613a02c18c45d136753224b86a24740e18c0e3226786c92b93ca6be7d345d)。
启动 Monkey Island
# 1. 赋予执行权限 chmod u+x InfectionMonkey-v2.3.0.AppImage # 2. 启动 Monkey Island ./InfectionMonkey-v2.3.0.AppImage如果启动时出现与 FUSE 相关的错误,说明系统缺少 FUSE 2:
sudo apt update sudo apt install libfuse2启动成功后,在浏览器中访问https://localhost即可进入 Monkey Island Web UI,随后可参考 快速上手 完成首次配置。
提示:若安装新版后被要求删除数据目录,说明旧版本数据与新版本不兼容,可先备份再清理,相关说明见 FAQ。
注册为开机自启服务
AppImage 包内置了service子命令,可将 Infection Monkey 安装为 systemd 服务并随开机启动。这需要 root 权限,执行前先运行sudo -v并输入密码:
./InfectionMonkey-v2.3.0.AppImage service --install --user <USERNAME>卸载服务:
./InfectionMonkey-v2.3.0.AppImage service --uninstall从仓库中 服务安装脚本 可以看到底层实现:脚本会将 AppImage 复制到/opt/infection-monkey/bin/InfectionMonkey.AppImage,生成名为infection-monkey.service的 systemd unit(以User=<USERNAME>运行、携带AmbientCapabilities=CAP_NET_BIND_SERVICE能力、After=network.target),然后执行systemctl enable实现开机自启。卸载时会停止并禁用服务、删除 unit 文件,并提示清理$HOME/.monkey_island数据目录。
注意:服务安装功能目前仅在 Ubuntu 上实测过,其他发行版上可能无法正常工作。
Docker:双容器部署
Docker 方式将 Monkey Island 拆成 MongoDB 与 Monkey Island 两个容器。目前 Docker 容器仅支持 Linux,不兼容 Docker for Windows / Docker for Mac。
拉取镜像并启动 MongoDB
# 1. 拉取 MongoDB v6.0 镜像 sudo docker pull mongo:6.0 # 2. 拉取 Monkey Island 镜像 sudo docker pull infectionmonkey/monkey-island:latest # 3. 启动 MongoDB(使用命名卷持久化数据) sudo docker run \ --name monkey-mongo \ --network=host \ --volume monkey-db:/data/db \ --detach \ mongo:6.0升级提示:如果是从旧版本升级,务必先移除与旧版本关联的 MongoDB 容器和卷,避免新旧数据混用。
启动 Monkey Island(默认证书)
sudo docker run \ --tty \ --interactive \ --name monkey-island \ --network=host \ infectionmonkey/monkey-island:latest容器启动后,浏览器访问https://localhost即可进入 Web UI。两个容器均使用--network=host,因此 Monkey Island 可以直接通过localhost:27017访问宿主机网络中的 MongoDB。
使用数据卷与配置文件启动
如果希望把数据与配置持久化到宿主机,官方推荐以下流程(这也是配置server_config.json的标准姿势):
# 1. 创建配置目录(权限 0700) mkdir -m=0700 ./monkey_island_data # 2. 先以 --setup-only 模式运行一次,完成初始化 sudo docker run \ --rm \ --name monkey-island \ --network=host \ --user "$(id -u ${USER}):$(id -g ${USER})" \ --volume "$(realpath ./monkey_island_data)":/monkey_island_data \ infectionmonkey/monkey-island:latest --setup-only然后将server_config.json放入./monkey_island_data目录,内容至少包含:
{ "data_dir": "/monkey_island_data", "mongodb": { "start_mongodb": false } }最后以挂载卷 + 配置文件路径的方式正式启动:
sudo docker run \ --rm \ --name monkey-island \ --network=host \ --user "$(id -u ${USER}):$(id -g ${USER})" \ --volume "$(realpath ./monkey_island_data)":/monkey_island_data \ infectionmonkey/monkey-island:latest --server-config="/monkey_island_data/server_config.json"从 仓库的 Docker 配置 可以看出这正是官方预置的容器配置:data_dir指向容器内的/monkey_island_data,同时关闭容器内启动 MongoDB(start_mongodb: false),复用宿主网络中的外部 MongoDB。--user "$(id -u ${USER}):$(id -g ${USER})"让容器进程以当前用户身份运行,保证挂载目录的文件权限与宿主机一致。
--server-config与--setup-only两个命令行参数在 arg_parser.py 中有明确定义:--setup-only让 Island 完成初始化后直接退出而不真正启动服务,适合首次部署或打包场景;--server-config则指定服务器配置文件的路径。Docker 镜像的 entrypoint.sh 会把所有参数透传给monkey_island.py。
排查:UnicodeDecodeError 崩溃
如果monkey-island容器启动时崩溃并报:
UnicodeDecodeError: 'utf-8' codec cannot decode byte 0xee in position 0: invalid continuation byte根本原因是加密密钥不匹配:Monkey Island 用密钥加密敏感数据后存入 MongoDB,而从infectionmonkey/monkey-island:VERSION镜像新建容器会生成新的密钥,当用新密钥解密旧容器中已加密的数据时就会失败。三种修复方式:
- 复用旧容器:执行
docker container start -a monkey-island重启现有容器(它保留了正确的密钥材料); - 重建数据库:删除旧的 MongoDB 容器并启动新容器(会丢失全部旧数据),再启动新的 Monkey Island 容器;
- 持久化运行产物:启动 Monkey Island 时挂载命名卷
--volume monkey_island_data:/monkey_island_data,将加密密钥文件等运行时产物存入卷中,供后续容器复用。
Windows:图形化安装
在 Windows 上部署最直接的方式是运行安装程序InfectionMonkey-v2.3.0.exe。
提示:安装过程中杀毒软件可能将 Infection Monkey 标记为恶意软件——这是正常现象,它本质上是一个攻击模拟工具,详见 FAQ 说明。
安装完成后,屏幕上会出现 Windows 安装向导界面,按步骤完成安装即可。随后通过桌面快捷方式启动 Infection Monkey。注意:如果希望 Agent 在当前机器上采集更多数据,建议以 Administrator 身份运行。
提示:若升级后提示删除数据目录而你不确定如何处理,参考 FAQ 相关条目。
Windows 特有的注意事项
- 系统区域设置:仅支持英文系统区域设置;如果命令行输出为其他语言,Infection Monkey 无法保证正常工作;
- Windows 更新:安装程序依赖 Windows 更新 KB2999226(通用 C 运行时更新)。如果安装失败,请先通过 Windows Update 或手动安装该补丁;
- 浏览器支持:Monkey Island 支持 Chrome(及 Chromium 内核浏览器)。若服务器只有 Internet Explorer,请先安装 Chrome 或同类现代浏览器。
AWS / Azure:云市场一键部署
AWS Marketplace 部署
在 AWS Marketplace 的 Infection Monkey 页面点击Continue to Subscribe,然后:
- 选择目标区域(Region);
- 选择 EC2 实例类型——官方建议至少 1GB 内存以获得最佳性能,也可使用默认推荐机型;
- 为实例选择 VPC 与子网;
- 在安全组(Security Group)中放行入站 TCP 5000 端口(底层 AppImage 服务将 HTTPS 443 转发/映射至 5000 供平台访问);
- 选择用于登录的 EC2 密钥对(Key Pair);
- 点击Launch with 1-click。
实例就绪后,通过https://{public-ip}访问 Monkey Island,使用ubuntu用户名登录实例。
Azure Marketplace 部署
在 Azure Marketplace 的 Infection Monkey 页面点击GET IT NOW,按向导分四步完成:
- Basics:为实例命名(如
InfectionMonkey),选择用户名/密码或 SSH 公钥认证方式,选择资源组与区域; - Size:选择至少 1GB 内存的机型;
- Settings:选择网络,并在**网络安全组(Network Security Group)**中放行入站 TCP 5000 端口;
- Summary:确认订单信息后点击Create。
实例开通后,通过https://{public-ip-address}访问。
云上实例的配置方式
AWS 与 Azure 云市场镜像本质上都是AppImage 部署,因此进入 VM 后,其配置方法与 Linux AppImage 的配置章节 完全一致:SSH 登录后编辑server_config.json、传参启动即可。此外,Infection Monkey 还内置了 AWS 集成,可以在 EC2 实例上直接运行 Agent,详见 使用 -> 集成。
配置服务器:server_config.json 详解
Monkey Island 服务器的全部关键配置都集中在server_config.json文件中。仓库自带的 默认配置 为:
{ "island_port": 443, "log_level": "DEBUG", "mongodb": { "start_mongodb": true } }一个包含全部可选项的完整示例:
{ "island_port": 443, "log_level": "DEBUG", "ssl_certificate": { "ssl_certificate_file": "<PATH_TO_CRT_FILE>", "ssl_certificate_key_file": "<PATH_TO_KEY_FILE>" }, "mongodb": { "start_mongodb": true }, "data_dir": "/monkey_island_data" }配置文件支持"只写需要的选项",例如仅覆盖证书:
{ "ssl_certificate": { "ssl_certificate_file": "<PATH_TO_CRT_FILE>", "ssl_certificate_key_file": "<PATH_TO_KEY_FILE>" } }各配置项含义如下:
| 配置项 | 说明 | 默认值/取值范围 |
|---|---|---|
island_port | Island C&C 服务器监听端口 | 默认443(HTTPS) |
log_level | 日志级别 | "DEBUG"(最详细)/"INFO"(精简)/"ERROR"(仅错误) |
ssl_certificate | 自定义证书的.crt与.key文件路径 | 默认使用内置自签名证书 |
data_dir | Island 存储数据库及其他文件的可写目录 | 无默认,Docker 场景须显式指定 |
mongodb | MongoDB 相关选项(start_mongodb控制是否由 Island 自启 MongoDB) | 除非自建 MongoDB 实例,否则不建议修改 |
修改监听端口
默认 HTTPS 端口为 443。修改server_config.json并添加island_port:
{ ... "island_port": 8080, ... }重启 Monkey Island 后,Web UI 将变为https://localhost:8080。
使用企业私有 CA 签发的证书
默认情况下 Infection Monkey 使用自签名 SSL 证书。在企业或安全敏感环境中,官方建议改用私有证书颁发机构(Private CA)签发的证书:
停止正在运行的 Island 进程(或停止 Docker 容器);
(可选但推荐)将
.crt与.key文件移动到$HOME/.monkey_island(Linux)或%AppData%\monkey_island(Windows);确保证书文件仅对当前用户可读:
chmod 600 <PATH_TO_KEY_FILE> chmod 600 <PATH_TO_CRT_FILE>在
server_config.json中指定证书路径(Linux 示例):{ "ssl_certificate": { "ssl_certificate_file": "$HOME/.monkey_island/my_cert.crt", "ssl_certificate_key_file": "$HOME/.monkey_island/my_key.key" } }Windows 示例(默认配置位于
C:\Program Files\Infection Monkey\monkey_island\cc\server_config.json):{ ... "ssl_certificate": { "ssl_certificate_file": "%AppData%\\monkey_island\\my_cert.crt", "ssl_certificate_key_file": "%AppData%\\monkey_island\\my_key.key" }, ... }Docker 场景则需要把证书文件放进挂载的
./monkey_island_data目录,并在配置中使用容器内路径:{ "data_dir": "/monkey_island_data", "mongodb": { "start_mongodb": false }, "ssl_certificate": { "ssl_certificate_file": "/monkey_island_data/my_cert.crt", "ssl_certificate_key_file": "/monkey_island_data/my_key.key" } }通过
--server-config参数重启服务,然后在浏览器访问https://localhost。
调整日志级别
在server_config.json中加入:
{ "log_level": "INFO" }重启后生效。DEBUG最详细、INFO适中、ERROR仅在出错时输出。排查 Agent 通信或传播问题时,建议先切到DEBUG再复现。
配置文件的加载方式(各平台一览)
| 平台 | 配置文件位置 | 加载方式 |
|---|---|---|
| Linux AppImage | 任意路径 | ./InfectionMonkey-v2.3.0.AppImage --server-config="/path/to/server_config.json" |
| Docker | 挂载卷内,如/monkey_island_data/server_config.json | docker run ... infectionmonkey/monkey-island:latest --server-config="/monkey_island_data/server_config.json" |
| Windows | C:\Program Files\Infection Monkey\monkey_island\cc\server_config.json | 直接编辑文件,点击桌面快捷方式启动 |
| AWS / Azure | VM 内的 AppImage 部署 | SSH 登录后按 Linux 方式配置 |
升级与配置迁移
Infection Monkey 目前不支持原地升级(upgrade-in-place),升级策略因平台而异:
- Linux AppImage:下载新版 AppImage 包,按部署章节重新走一遍安装流程;
- Docker:下载新镜像,停止并移除当前 Monkey Island 与 MongoDB 容器及卷,再用新文件重新执行安装命令;
- Windows:下载新版安装程序并运行,新版本会覆盖安装到旧版本之上;
- AWS / Azure:从云市场重新部署一台新机器。
如果你希望保留现有配置,可以在旧版 Monkey Island 的 Web UI 中点击Export config按钮将配置导出为文件,再在新实例中通过Import config导入。官方在升级说明中配了导入导出界面的截图(import-export-configuration.png),该功能位于配置页面中,是跨版本迁移配置的标准做法。
附:系统需求速查
部署前建议对照 系统需求文档 检查环境:
Monkey Island(控制端)
- 架构:仅支持 x86-64;
- Linux 硬件基线:Intel Xeon 2.20GHz 或更好,2 核,4GB 内存;
- Windows 硬件基线:Intel Xeon 2.20GHz 或更好,4 核,6GB 内存;
- 已测试 Linux 发行版:BlackArch、CentOS/Rocky/RHEL 8+、Debian 11、Kali、Parrot、openSUSE Leap 15.4、Ubuntu 18.04/20.04/22.04、WSL 2(AppImage 需 FUSE 2);
- 已测试 Windows 版本:Windows Server 2016 / 2019、Windows 10。
Agent(攻击端)
- 架构:仅支持 x86-64;
- Linux:要求 GLIBC >= 2.23(Agent 基于 Python 3.11 构建,GLIBC 向前不向后兼容);
- Windows:Windows Server 2012+、Windows 7/Server 2008_R2(需安装 KB2999226)、Windows 10。
小结
本文覆盖了 Infection Monkey 的全部官方部署路径:Linux 用户优先选择 AppImage 单文件包(支持service子命令注册 systemd 开机自启),需要快速验证时使用 Docker 双容器方案(注意 MongoDB 密钥不匹配的 UnicodeDecodeError 问题),Windows 环境走图形化安装向导,云上环境则利用 AWS / Azure 市场镜像一键开通。无论哪种方式,server_config.json都是控制端口、日志级别、自定义证书与数据目录的枢纽,配合--server-config/--setup-only参数即可完成精细化的运维配置。完成部署后,即可参考 快速上手 开始你的首次对抗模拟演练。
- 网络安全
- 应用安全
【免费下载链接】monkey
Infection Monkey - An open-source adversary emulation platform
相关推荐
Infection Monkey Linux 部署指南:基于 AppImage 安装与 Monkey Island 服务配置详解
Infection Monkey Linux 部署指南:基于 AppImage 安装与 Monkey Island 服务配置详解 本篇指南以官方文档 docs/
网络安全应用安全Infection Monkey 开发环境搭建指南:Agent 与 Monkey Island 从零配置
Infection Monkey 开发环境搭建指南:Agent 与 Monkey Island 从零配置 Infection Monkey 是一个开源的 adv
网络安全应用安全Infection Monkey Linux 包构建器:AppImage 与 Docker 镜像的完整构建与部署指南
Infection Monkey Linux 包构建器:AppImage 与 Docker 镜像的完整构建与部署指南 导读 本文基于 Infection Mon
网络安全应用安全
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考