Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Hermes Agent 安全策略

本文档介绍了Hermes Agent的信任模型,明确了项目中被视为核心安全屏障的要素,并规定了漏洞报告的范围。

1. 漏洞报告方式

请通过GitHub安全建议功能或security@nousresearch.com以私密方式提交报告。严禁为安全漏洞创建公开问题。Hermes Agent不设立漏洞赏金计划。

一份有效的报告应包含以下内容:

  • 简洁的描述及严重性评估;
  • 受影响组件,需通过文件路径和行号范围标明(例如:path/to/file.py:120-145);
  • 环境信息(如hermes --version、提交SHA值、操作系统及Python版本);
  • 在main分支或最新版本上的复现步骤;
  • 说明违反了第2节中哪一项信任边界。

在提交报告前,请先阅读第2节和第3节。对于那些因当前启发式机制存在局限而未被视为安全边界的报告,将根据第3节被归类为超出范围而不予处理——但请参见第3.2节:此类报告仍可作为普通问题或拉取请求提交,只是不能通过私密的安全渠道。


2. 信任模型

Hermes Agent是一款单租户个人代理。其架构采用分层设计,各层承担的安全责任并不对等。报告者和操作人员应使用相同的概念来理解这些层级。

2.1 定义

  • Agent进程:运行Hermes Agent的Python解释器,以及它所加载的所有Python模块(包括技能、插件及钩子处理程序)。
  • 终端后端:terminal()工具的可插拔执行目标。默认情况下,命令会在主机上直接执行;其他后端则可在容器、云沙箱或远程主机中执行命令。
  • 输入通道:内容进入Agent上下文的任何途径,例如操作员输入、网页获取内容、电子邮件、网关消息、文件读取、MCP服务器响应以及工具执行结果。
  • 权限范围:操作员通过运行Hermes Agent而隐式授予其访问权限的资源集合——通常为操作员自身在主机上可访问的所有资源。
  • 处理方式:Hermes Agent文档或代码中关于使用层(适配器、用户界面、文件写入工具、命令行界面等)应如何处理Agent输出的具体说明,例如“仪表板将Agent输出呈现为静态HTML”。

2.2 边界:操作系统级隔离

抵御恶意大语言模型的唯一安全边界就是操作系统。 Agent进程内的任何机制均无法实现真正的隔离——无论是审批机制、输出审查、模式扫描工具,还是工具白名单,都无济于事。任何用于筛选大语言模型输出的内部组件,其实都只是对攻击者可能篡改过的字符串进行基于规则的判断,而本策略也将其视为此类工具。

Hermes Agent支持两种操作系统级隔离方案,它们针对不同的威胁场景,操作员需根据实际需求慎重选择。

终端后端隔离

非默认的终端后端会在容器、远程主机或云沙箱环境中执行由大语言模型生成的shell命令。由于文件操作工具(如read_file、write_file、patch)也是基于shell契约实现的,因此它们同样通过该后端运行——无法访问后端未暴露的路径。

这意味着:代理通过shell操作或文件操作所执行的任何行为都会受到限制。但以下操作则不受限制:代理在其自身的Python进程中所做的所有事情。这包括代码执行工具(作为主机子进程启动)、MCP子进程(从代理环境启动)、插件加载、钩子调度以及技能加载(所有内容均被导入到代理解释器中)。

当需要防范大语言模型生成的破坏性shell命令或不必要的文件操作,且操作者值得信任时,终端后端隔离是一种有效的防护措施。

整个进程封装

整个进程封装会将代理的整个进程树置于沙箱环境中运行。无论是shell操作、代码执行、MCP功能、文件工具、插件、钩子还是技能加载,所有代码路径都需遵循相同的文件系统、网络、进程以及(如适用)推理策略。

Hermes Agent通过两种方式支持此功能:

  • Hermes Agent 自带的 Docker 镜像及 Compose 配置。该方案更为轻量,Agent 在标准容器中运行,并具备由操作员配置的挂载点与网络策略。
  • NVIDIA OpenShell。OpenShell 能为每个会话创建沙箱环境,并针对文件系统、网络(L7 出站流量)、进程/系统调用以及推理路由层实施声明式策略控制。网络策略与推理策略均支持热加载。凭证从提供者存储库中注入,且不会触及沙箱内的文件系统。

在整体进程封装结构之下,Hermes Agent 的进程内启发式机制(§2.4)作为实际安全边界之上的额外防护层,用于预防意外风险。当 Agent 需要处理操作员无法控制的数据源——如开放网络、收到的邮件、多用户频道以及不可信的 MCP 服务器——以及在进行生产环境或共享部署时,即采用此安全模式。

那些使用默认本地后端处理不可信输入数据,或运行终端后端沙箱却期望其中不经过 Shell 的代码路径能够被正常处理的操作员,其实是在非支持的安全模式下运行。

2.3 凭证范围控制

Hermes Agent 会对其传递给低信任级别的进程内组件——如 Shell 子进程、MCP 子进程、cron 作业脚本以及代码执行模块——的环境进行过滤。默认情况下,提供者 API 密钥和网关令牌等凭证会被移除;而由操作员明确声明或通过加载的技能传递的变量则会被保留。

此举旨在减少随意的数据外传,但并不能实现完全的隔离。在代理进程内部运行的任何组件(如技能、插件及钩子处理程序)都能读取代理进程本身可访问的所有内容,包括内存中的凭证。针对进程内组件被攻破的防护措施是要求操作员在安装前进行审查(参见§2.4、§2.5),而非对环境进行清理。

2.4 进程内行为检测机制

以下组件用于监控或警告大语言模型的异常行为,它们虽能起到辅助作用,但并不能构成真正的安全边界。

  • 审批门控能够识别常见的破坏性命令shell模式,并在执行前向操作员发出提示。由于shell具备图灵完备性,仅依靠命令字符串的黑名单在结构上存在缺陷,该机制主要用于防范合作模式下的错误行为,无法检测恶意输出。
  • 输出过滤功能会从显示内容中剔除类似机密信息的模式,但心怀不轨的输入生成者仍可绕过此限制。
  • 技能防护机制会扫描可安装的技能内容,查找注入攻击的模式。它仅作为审查辅助工具,而第三方技能的安全边界仍在于安装前的操作员审查。审查技能意味着需要阅读其Python代码及脚本,而不仅仅是SKILL.md描述文件——因为这些技能在导入时会执行任意的Python代码。

2.5 插件信任模型

插件会被加载到代理进程中,并以完整的代理权限运行:它们能够读取与内置组件相同的凭证、调用相同的工具、注册相同的钩子,以及导入相同的模块。对于第三方插件而言,其安装前的唯一限制是需经过操作员审核——这一规则与技能组件(§2.4节)相同,之所以单独提及插件,是因为其在架构上更为复杂,通常还会自带后台服务、网络监听器及各种依赖项。

恶意或存在缺陷的插件本身并不构成Hermes Agent的漏洞。而那些存在于Hermes Agent的插件安装或发现流程中的缺陷,若导致操作员无法知晓自己正在安装的内容,则属于§3.1节所涵盖的范围。

2.6 外部接口

外部接口指的是位于本地代理进程之外的任何通道,通过这些通道,调用方可以分配代理任务、处理审批请求或获取代理输出结果。虽然每种外部接口都有其独立的授权机制,但以下规则对所有接口均适用。

Hermes Agent中的外部接口:

  • 网关平台适配器。 大多数消息集成均以插件形式打包在 plugins/platforms/<名称>/ 目录下(如 Telegram、Discord、Slack、电子邮件、短信等)。而通用的基础类型以及少量旧版/直接适配器则位于 gateway/platforms/ 目录中(如 base.py、Signal、API 服务器、Webhook 等),这些适配器通过 gateway/platform_registry.py 实现自动发现与延迟加载功能。
  • 面向网络的 HTTP 接口。 包括 API 服务器适配器、控制面板插件、看板插件对应的 HTTP 端点,以及任何绑定监听套接字的插件。
  • 编辑器/集成开发环境适配器。 即 ACP 适配器(acp_adapter/),以及其他能够接收本地客户端进程请求的类似集成方案。
  • TUI 网关(tui_gateway/)。 为 Ink 终端界面提供的 JSON-RPC 后端,通过本地进程间通信实现访问。

统一规则:

  1. 凡是跨越信任边界的接口均需进行授权验证。 对于消息传输及网络 HTTP 接口,其边界为网络层;授权方式由操作员配置调用者白名单来实现。而对于编辑器及本地 IPC 接口(如 ACP、TUI 网关),其边界为主机上的用户账户;此时授权依赖于操作系统级的访问控制机制(如文件权限、仅限回环绑定),且在没有额外的网络授权层保护的情况下,不会向本地用户以外的实体开放该接口。
  2. 每个已启用的面向网络的适配器都必须配置允许列表。 在设置允许列表之前,这些适配器不得处理代理任务、审批请求或传递输出结果。若未配置允许列表而导致相关代码路径异常运行,则属于第3.1条所规定的代码缺陷范畴。
  3. 会话标识符仅用于路由定位,而非权限边界。 了解其他调用者的会话ID并不意味着可以访问其审批内容或输出结果;权限验证始终需依据允许列表(或操作系统层面的等效机制)重新进行。
  4. 在已获授权的范围内,所有调用者均被视作同等可信。 Hermes Agent不会在单个适配器中为不同调用者设置独立的权限等级。若需要区分不同调用者的权限,操作人员应运行多个独立的代理实例,并为每个实例配置不同的允许列表。
  5. 将仅限本地访问的接口绑定到非回环接口上属于紧急处理决策(见第3.2条)。 控制面板及其他插件HTTP服务器默认以回环方式运行;若通过--host 0.0.0.0或类似参数将其暴露在外,那么落实公共访问安全防护措施(见第4条)便成为操作人员的责任。

3. 范围

3.1 所属范围

  • 逃逸已声明的操作系统级隔离状态(§2.2):由攻击者控制的代码路径突破了该隔离状态本应限制的范围。
  • 未经授权的外部接口访问:来自配置的授权集(允许列表,或本地IPC接口对应的操作系统级机制)之外的调用方试图发起任务、获取输出结果或处理审批流程(§2.6)。
  • 凭据泄露:操作员凭证或会话授权信息通过本应防止其泄露的机制,泄漏到信任范围之外的目标位置(如环境清理漏洞、适配器日志记录、将凭证上传至上游的传输错误等)。
  • 违反信任模型规范:代码行为与本政策、Hermes Agent自身的文档说明或操作员的合理预期相悖——包括那些Hermes Agent已明确规定其输出应如何被后续处理层(如仪表板、网关适配器、文件写入工具、命令行界面)处理的场景,而某些代码路径却违背了这些规定。

3.2 不在覆盖范围内

此处所说的“不在处理范围内”指的是“根据本政策不属于安全漏洞”,并不等同于“无需上报”。针对进程内启发式检测机制的优化、系统加固方案以及用户体验方面的改进,均可以通过常规问题反馈或拉取请求的形式提交——审批机制总能识别更多异常模式,内容屏蔽功能也能愈发精准,适配器行为亦可进一步得到优化。这类内容只是不会通过私下披露渠道处理,也不会获得相关安全通告。

  • 绕过进程内启发式检测机制的行为(§2.4)——包括绕过审批机制的正则表达式检测、内容屏蔽机制、Skills Guard模式检测,以及针对未来可能出现的类似检测机制的规避行为。这些机制本身并非安全漏洞的界定标准,因此突破这些机制并不构成本政策所定义的安全漏洞。
  • 提示注入行为本身。通过注入内容、幻觉现象、训练数据残留或其他任何方式促使大型语言模型产生异常输出,其本身并不属于安全漏洞。若仅声称“实现了提示注入”,但并未引发§3.1条所述的连锁反应,则根据本政策不属于可处理的安全报告范畴。
  • 所选隔离策略的后果。那些报告指出,在特定隔离策略覆盖范围内的代码路径能够执行该策略允许的操作,其实并不属于漏洞。例如:在本地后端模式下,shell或文件工具获取主机状态;在仅能限制shell运行的终端后端隔离模式下,代码执行功能或MCP子进程获取主机状态;以及那些前提条件要求预先拥有对操作员拥有的配置文件或凭证文件的写入权限的报告(这类文件本就处于信任范围内)。
  • 已记录的应急设置。操作员主动选择的、旨在绕过安全保护的配置选项,如控制面板或其他组件上的--insecure及其同类标志、已禁用的审批流程、生产环境中的本地后端模式、可绕过hermes-home安全机制的开发配置文件等。针对此类配置生成的报告不属于漏洞——这正是相关标志存在的意义。
  • 社区贡献的技能与插件。第三方技能(包括社区技能仓库)以及第三方插件均处于操作员的审核范围内,而不属于Hermes Agent的信任范围(参见§2.4、§2.5)。若某个技能或插件被用于恶意目的,那只是未经审核的产物所可能出现的正常故障情况,而非Hermes Agent本身的漏洞。而Hermes Agent在技能安装或插件安装流程中存在的缺陷,导致操作员无法察觉其所安装的内容,则属于§3.1的覆盖范围。
  • 无外部管控的公开暴露。 在未设置身份验证、VPN或防火墙保护的情况下,将网关或API直接暴露在公共互联网上。
  • 在允许使用shell的环境中仍需对工具级读写操作进行限制。 若某个路径可通过终端工具访问,那么其他文件处理工具也能访问该路径的检测结果便毫无意义。

4. 部署加固措施

最重要的加固决策在于根据Agent将要处理的内容的信任级别来匹配相应的隔离机制(§2.2)。除此之外还需注意:

  • 以非root用户身份运行Agent。所提供的容器镜像默认已实现这一要求。
  • 将凭证存储在权限受限的操作员凭证文件中,切勿将其放入主配置文件或版本控制系统中。在OpenShell模式下,应使用Provider存储机制而非磁盘上的凭证文件。
  • 未经VPN、Tailscale或防火墙保护,不得将网关或API暴露在公共互联网上。在OpenShell模式下,应利用网络策略层来限制数据出站流量。
  • 对每个已启用的公开网络适配器配置调用者允许列表(§2.6)。
  • 在安装第三方技能和插件之前务必进行审查(§2.4、§2.5)。对于技能模块,需仔细查看其Python代码及脚本内容,而不仅仅是SKILL.md文件。Skill Guard的检测报告以及安装审计日志可作为审查依据。
  • Hermes Agent为MCP服务器的启动过程以及CI环境中的依赖项/打包包变更提供了供应链安全防护机制;具体细节请参阅CONTRIBUTING.md文件。

5. 信息披露

  • 统一披露时间: 自报告提交之日起 90 天内,或直至修复补丁发布为止,以较早者为准。
  • 沟通渠道: GHSA 讨论帖,或与 security@nousresearch.com 的邮件往来。
  • 致谢说明: 除非报告人要求匿名,否则其姓名将在版本更新说明中予以致谢。