☰
SSH Exploiter 深度解析:利用 SSH 凭据传播的实战指南
2026/10/8 1:42:02 网站建设 项目流程
  • 网络安全
  • 应用安全

【免费下载链接】monkey

Infection Monkey - An open-source adversary emulation platform

项目地址:https://gitcode.com/gh_mirrors/mo/monkey
点击查看免费下载

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_timeoutnumber可选不可为 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 相关组件配合,构成完整的攻击链路:

  1. SSH Credentials Collector(参考文档):在攻陷 Linux 主机后,收集该主机上所有用户的$HOME/.ssh目录中未加密的 SSH 密钥对。
  2. SSH Fingerprinter(源码):通过端口扫描结果中的 SSH 横幅识别目标主机及其操作系统。
  3. 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。

在配置界面启用

  1. 进入 Island 的配置页面,找到传播(Propagation)部分;
  2. 在 Exploiters 列表中启用SSHExploiter;
  3. 按需设置connect_timeout(默认 15 秒,取值范围(0, 100]);
  4. 确保在凭据配置中提供了可用的身份与密钥(见下文),否则 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 黑盒测试的配置思路:

  1. 准备至少两台 Linux 机器(分别作为攻击发起端和目标);
  2. 在攻击发起端的$HOME/.ssh放置未加密的密钥对;
  3. 在 Island 配置中启用 SSH Credentials Collector(自动窃取密钥)与 SSH Exploiter;
  4. 将目标 IP 加入扫描范围,TCP 扫描端口设为 22;
  5. 运行 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

项目地址:https://gitcode.com/gh_mirrors/mo/monkey
点击查看免费下载
上一篇:从WWW到Better Streaming Assets:Unity Android资源加载的终极优化指南
下一篇:OpenMPT完全指南:从入门到精通的音乐制作神器

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询