- 网络安全
- 应用安全
【免费下载链接】monkey
Infection Monkey - An open-source adversary emulation platform
SSH 是 Linux 环境中远程管理最常用的协议,也是攻击者在网络中横向移动的高价值目标。Infection Monkey 的 SSH Exploiter 正是针对这一入口设计的传播工具:它利用 Agent 已掌握的凭据(密码或 SSH 私钥)对目标主机的 SSH 服务发起登录尝试,成功后将自身复制到目标主机并继续传播。阅读本文后,你将掌握 SSH Exploiter 的完整配置方法、工作原理、凭据利用链路,以及它与其他组件(如 SSH Credentials Collector 和 SSH Fingerprinter)的协同方式。
支持的操作系统
SSH Exploiter 的攻击能力受限于操作系统对 SSH 客户端的支持情况。下表总结了它在不同平台上的表现:
| 操作系统 | 发起攻击端(Agent 运行处) | 目标主机 |
|---|---|---|
| Linux | ✅ 支持 | ✅ 支持 |
| Windows | ✅ 支持 | ❌ 不支持 |
从上表可以看出,Linux 主机既可以作为攻击发起方,也可以作为目标;而 Windows 主机虽然能发起攻击(Agent 在 Windows 上运行时可以利用内置的 SSH 客户端),但不能作为 SSH Exploiter 的目标——即 SSH Exploiter 不会尝试通过 SSH 攻击 Windows 主机。这符合 SSH 协议的实际部署场景:绝大多数 SSH 服务运行在 Linux/Unix 系统上。
配置说明
SSH Exploiter 的配置非常简单,只有一个可选参数。文档中提到,该配置说明由插件自身的config-schema.json自动生成,并经人工修订而来,这保证了文档与插件实际配置逻辑的一致性。
配置属性总览
| 属性 | 类型 | 必填 | 可空 |
|---|---|---|---|
| connect_timeout | number | 可选 | 不可为 null |
connect_timeout
建立 SSH 连接的最大等待时间(秒)。
connect_timeout
- 可选
- 类型:
number - 不可为 null
connect_timeout 约束
最大值:该值必须小于或等于100
最小值(不包含):该值必须大于0
connect_timeout 默认值
默认值为:
15即默认情况下,Agent 会在 15 秒内等待 SSH 连接建立;如果超时则放弃该目标。该参数需要在(0, 100]区间内取值,既不能为 0 或负数,也不能超过 100 秒。合理设置该值可以在网络延迟较高的环境中提高攻击成功率,同时避免在无响应的主机上浪费时间。
与其他组件的协同:完整的 SSH 攻击链路
SSH Exploiter 并非孤立运行。在 Infection Monkey 中,它与其他两个 SSH 相关组件配合,构成完整的攻击链路:
- SSH Credentials Collector(参考文档):在攻陷 Linux 主机后,收集该主机上所有用户的
$HOME/.ssh目录中未加密的 SSH 密钥对。 - SSH Fingerprinter(源码):通过端口扫描结果中的 SSH 横幅识别目标主机及其操作系统。
- SSH Exploiter:利用收集到的凭据(密码或 SSH 密钥)对目标 SSH 服务发起登录尝试,成功后将 Agent 复制到目标主机。
这一链路在 monkey_zoo 黑盒测试 中得到了完整验证:
SSHCollector 从机器 A(10.2.3.14)窃取密钥,然后 B(10.2.4.15)利用该密钥攻击 C(10.2.5.16)。
测试配置还体现了实际攻防场景中的典型配置:
- 将最大传播深度设为 3(
set_maximum_depth); - 保持隧道开启时间设为 20 秒(
set_keep_tunnel_open_time); - 启用 SSH Exploiter 与 SSH Credentials Collector;
- TCP 扫描端口设为
22; - 配置传播凭据:用户名
m0nk3y、密码u26gbVQe和5BuYHeVl。
SSH Exploiter 的目标发现:SSH Fingerprinter 原理
在 Exploiter 发起攻击之前,Agent 需要先确认目标主机上存在 SSH 服务。这一工作由 SSHFingerprinter 完成,其核心逻辑位于 monkey/infection_monkey/network_scanning/ssh_fingerprinter.py。
服务识别
Fingerprinter 使用正则表达式SSH-\d\.\d-OpenSSH(不区分大小写)匹配端口扫描得到的服务横幅(banner)。一旦某个开放端口的横幅匹配成功,该端口就被标记为SSH服务:
SSH_REGEX = r"SSH-\d\.\d-OpenSSH"这一机制可从单元测试 test_ssh_fingerprinter.py 中得到验证。测试中,横幅为SSH-2.0-OpenSSH_8.2p1的端口 22 和 2222 均被识别为 SSH 服务;而横幅为空的端口 123、443、8080 则不会被识别。
操作系统识别
除了识别服务,Fingerprinter 还会从横幅中提取操作系统信息。它维护了一份已知 Linux 发行版名单(LINUX_DIST_SSH = ["ubuntu", "debian"]),若横幅中包含这些关键词,则提取横幅末尾的版本字符串作为 OS 版本,并将 OS 类型判定为 Linux:
for dist in LINUX_DIST_SSH: if banner.lower().find(dist) != -1: os_version = banner.split(" ").pop().strip() os = OperatingSystem.LINUX测试用例test_ssh_os验证了这一行为:横幅SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.2会被识别为 Linux 系统,OS 版本为Ubuntu-4ubuntu0.2。测试用例test_os_info_not_overwritten还验证了当多个端口都匹配横幅时,OS 信息不会被后续扫描结果覆盖。
事件发布与监控
识别完成后,Fingerprinter 会发布一个FingerprintingEvent,携带目标 IP、时间戳、OS 信息和发现的 SSH 服务列表,并打上ssh-fingerprinter、ACTIVE_SCANNING_T1595(主动扫描)和GATHER_VICTIM_HOST_INFORMATION_T1592(收集受害者主机信息)等标签,与 MITRE ATT&CK 技术编号对应。这使得用户在 Island 的感染地图上可以看到 SSH 服务的识别结果。
实战:如何启用并配置 SSH Exploiter
在实际使用中,你可以通过 Infection Monkey Island 的 Web 界面或配置文件来启用 SSH Exploiter。
在配置界面启用
- 进入 Island 的配置页面,找到传播(Propagation)部分;
- 在 Exploiters 列表中启用SSHExploiter;
- 按需设置
connect_timeout(默认 15 秒,取值范围(0, 100]); - 确保在凭据配置中提供了可用的身份与密钥(见下文),否则 Exploiter 无凭据可试。
配置传播凭据
凭据配置是 SSH Exploiter 能否成功的关键。Infection Monkey 支持配置多种凭据类型,包括密码、LM hash、NTLM hash 以及SSH 私钥(详见凭据配置文档)。
从 credentials_reuse_ssh_key.py 可以看到典型的凭据结构——Credentials对象由身份(identity)和密钥(secret)组成:
- 身份可以是用户名(如
m0nk3y); - 密钥可以是密码(如
u26gbVQe),也可以是 SSH 私钥。
在凭据表格中,同一行的身份与密钥组合会最先尝试;若失败,则所有可能的跨行组合都会被尝试。
在测试环境中验证
如果你想在自己的环境中验证 SSH Exploiter 的效果,可以参考 monkey_zoo 黑盒测试的配置思路:
- 准备至少两台 Linux 机器(分别作为攻击发起端和目标);
- 在攻击发起端的
$HOME/.ssh放置未加密的密钥对; - 在 Island 配置中启用 SSH Credentials Collector(自动窃取密钥)与 SSH Exploiter;
- 将目标 IP 加入扫描范围,TCP 扫描端口设为 22;
- 运行 Agent,观察感染地图上的传播路径。
整个验证过程由 ExploitationTest 类驱动,它会导入测试配置、运行 Agent、轮询分析结果直到超时,最后清理所有 Agent 并重置 Island。
小结
SSH Exploiter 是 Infection Monkey 在 Linux 网络环境中实现横向移动的核心组件之一,其配置极其精简——唯一参数connect_timeout控制连接建立的最长等待时间(默认 15 秒,取值范围(0, 100])。它支持 Linux 与 Windows 作为攻击发起端,但目标仅限 Linux 主机。
理解 SSH Exploiter 需要将其放在完整的攻击链路中看待:SSH Credentials Collector 窃取密钥 → SSH Fingerprinter 发现 SSH 服务并识别目标 OS → SSH Exploiter 利用凭据实现传播。三者协同,使得 Infection Monkey 能够真实模拟攻击者利用 SSH 弱凭据或泄露私钥进行横向移动的攻击路径,帮助安全团队验证网络防御的有效性。
- 网络安全
- 应用安全
【免费下载链接】monkey
Infection Monkey - An open-source adversary emulation platform
相关推荐
RouterSploit 实战:使用 Netcore Router Default SSH Creds 模块进行 SSH 默认凭据攻击
RouterSploit 实战:使用 Netcore Router Default SSH Creds 模块进行 SSH 默认凭据攻击 导读 本文围绕 Rout
网络安全嵌入式routersploit 实战:Grandstream 摄像头 SSH 默认凭据检测模块(creds/cameras/grandstream/ssh_default_creds)深度解析
routersploit 实战:Grandstream 摄像头 SSH 默认凭据检测模块(creds/cameras/grandstream/ssh_defau
网络安全嵌入式Routersploit Thomson 路由器 SSH 默认凭据攻击模块实战指南
Routersploit Thomson 路由器 SSH 默认凭据攻击模块实战指南 导读 本文围绕 routersploit 项目中的 creds/router
网络安全嵌入式
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考