Hermes Agent — Security Module Profile

基于源码的真实安全机制全景 · ATA Ontology SecurityChecker 标签设计参考
44
危险命令规则
approval.py
70+
技能扫描规则
skills_guard.py
12
记忆注入规则
memory_tool.py
10
上下文注入规则
prompt_builder.py
10
不可见Unicode
双重检测
3
审批模式
on/auto/off
3
技能信任级别
builtin/trusted/community
2
SubAgent 最大深度
delegate_tool.py
防御触发层级(从输入到执行)
I
Channel 入口
pii_redact.py
SessionSource 过滤
II
Context 扫描
prompt_builder.py
10规则 + Unicode
III
Memory 写入
memory_tool.py
12规则 + Unicode
IV
命令执行前
approval.py
44规则 + LLM审批
V
Skill 安装
skills_guard.py
70+规则 + 信任策略
VI
MCP 启动
mcp_tool.py
safe_env + osv_check
VII
SubAgent 委派
delegate_tool.py
深度限制 + 工具黑名单
🛡 命令执行安全 — approval.py
DANGEROUS_PATTERNS · 44条规则 · 触发点:EXECUTING 步骤前
CRITICALdestructiverm -rf / · 递归删除根路径
CRITICALdestructivemkfs · 格式化文件系统
CRITICALdestructivefork bomb :(){:|:&};:
CRITICALdestructivekill -9 -1 · 杀死所有进程
CRITICALexfiltrationcurl/wget | bash · 远程脚本执行
CRITICALSQLDROP TABLE/DATABASE
CRITICALSQLDELETE FROM 无 WHERE
HIGHdestructivechmod 777/o+w · 危险权限
HIGHdestructivesystemctl stop/disable
HIGHshell-injectbash/sh -c · 命令注入
HIGHshell-injectpython -e/-c · 脚本注入
HIGHpersistence写入 ~/.ssh / ~/.hermes/.env
HIGHpersistencegit reset --hard / force push
MEDself-protecthermes gateway stop/update(自终止保护)
MEDself-protectpkill hermes · 进程自杀保护
Smart Approval:LLM 辅助判断低风险命令自动放行
用户可设置永久 allowlist 持久化到 config.yaml
✗ 未覆盖:多步骤命令组合绕过(分步执行)
🧬 注入防护 — prompt_builder + memory_tool
触发点:ASSEMBLING(上下文组装)+ memory_tool.write()
上下文文件扫描(10规则 · prompt_builder.py)
injectionignore previous/all/above instructions
injectionsystem prompt override
injectiondisregard your rules/guidelines
injectionact as if you have no restrictions
injectionHTML注释注入 <!-- ignore -->
injection隐藏 div display:none
injectiontranslate + execute 双步绕过
exfilcurl $KEY/$TOKEN/$SECRET 外渗
exfilcat .env/credentials/.netrc
记忆写入扫描(12规则 · memory_tool.py)
injectionignore previous instructions(同上)
role-hijack"you are now ..." 角色劫持
deceptiondo not tell the user
persistenceauthorized_keys SSH 后门
persistence$HOME/.hermes/.env 路径访问
exfilwget $TOKEN 外渗
系统提示快照冻结:加载时锁定,会话中途不可改写(保护前缀缓存)
10种不可见 Unicode 字符检测(U+200B~U+202E)
✗ 未覆盖:语义伪装(正常语气包裹恶意指令)/ 分段注入
📦 技能安全 — skills_guard.py
70+ 规则 · 信任级别三分策略 · 触发点:skill_manage install
信任策略矩阵
来源 safe caution dangerous
builtin ✓ allow ✓ allow ✓ allow
trusted ✓ allow ✓ allow ✗ block
community ✓ allow ✗ block ✗ block
TRUSTED_REPOS = {"openai/skills", "anthropics/skills"}
规则分类(70+ 条)
exfiltrationcurl/wget/fetch/requests + KEY/TOKEN/SECRET
exfiltrationbase64 + env · DNS exfil(dig/nslookup + $)
exfiltrationos.environ / os.getenv(SECRET) · process.env[]
exfiltrationMarkdown 图片/链接 URL 含变量(图片外渗)
exfiltration~/.ssh / ~/.aws / ~/.kube / ~/.docker 访问
injectionignore instructions / role hijack / deception
injectionoutput system prompt / conditional deception
destructiverm -rf / · shred · mkfs · DROP TABLE
persistencecrontab · ~/.bashrc · authorized_keys
obfuscationbase64 decode + exec · eval(atob()) · exec(compile())
networknc -e · socat exec · reverse shell
🔌 MCP 安全 — mcp_tool.py
_build_safe_env() 启动 MCP 进程时过滤敏感环境变量,防止 API Key 泄露给 MCP Server
osv_check(install时) npm/pip 依赖包经 OSV.dev API 恶意软件检测
transport 限制 stdio / HTTP / StreamableHTTP 三种,无任意协议
✗ 未覆盖:MCP 响应内容注入(tool_call_result 注入)
📂 路径安全 — path_security.py
validate_within_dir() 文件操作必须在允许目录内,防止路径遍历(../ 攻击)
敏感路径模式 ~/.ssh · /etc/ · /dev/sd · ~/.hermes/.env 写入需额外审批
✗ 未覆盖:符号链接绕过
🤖 SubAgent 委派 — delegate_tool.py
MAX_DEPTH = 2 最大委派深度 2,防止无限递归委派
DELEGATE_BLOCKED_TOOLS 子 Agent 禁止使用:delegate_task / clarify / memory / send_message / execute_code
ThreadPoolExecutor 最多 3 并发子任务
✗ 未覆盖:子代理权限继承(子 Agent 仍继承父 Agent 工具权限)
🔍 供应链 — osv_check.py
check_package_for_malware() 查询 OSV.dev API(https://api.osv.dev/v1/query)
支持生态 npm(Node.js)· pip(Python)等主流包管理器
触发时机 MCP 安装时自动调用,非实时监控
✗ 未覆盖:litellm 等 pip 依赖的 typosquatting
⚠️ 安全覆盖缺口 — 对应 Top AttackPath
Gap ID 缺口名称 描述 利用的 AP 风险
GAP-01 供应链层零检测 litellm 等 pip 依赖安装无 OSV 检查,.pth 自动执行无拦截 AP-10 #1 CRITICAL
GAP-02 MCP 响应内容不过滤 MCP tool 返回值直接进入 PromptTemplate.tool_call_result,无注入检测 AP-04 #3 CRITICAL
GAP-03 browse_web 结果不过滤 网页内容仅有上下文规则扫描(10条),无语义级检测 AP-01 #2 · AP-09 #4 CRITICAL
GAP-04 CronCreate 无用户确认 注册持久化定时任务无需用户审批(不在 DANGEROUS_PATTERNS 中) AP-07 #9 HIGH
GAP-05 SubAgent 权限未隔离 子 Agent 继承父 Agent 工具权限(terminal_tool 可用),BLOCKED_TOOLS 不含 terminal AP-05 #6 HIGH
GAP-06 Gateway 无消息来源认证 Webhook / API Server 端点无强制认证,任意方可注入消息 AP-08 #7 HIGH
GAP-07 context_files 无完整性验证 AGENTS.md 自动信任,无哈希/签名校验,仅有关键词扫描 AP-03 #8 HIGH
GAP-08 语义伪装注入绕过 所有防护均为 Regex,正常语气包裹的恶意指令可绕过全部检测 AP-01~AP-09 全部 CRITICAL
🏷 SecurityChecker 标签族设计(ATA Ontology 扩展建议)
SC-RULE-* · 规则引擎检查器(基于 Regex/Pattern)
SC-RULE-EXEC
approval.py · 44条命令规则
SC-RULE-INJECT-CTX
prompt_builder.py · 10条
SC-RULE-INJECT-MEM
memory_tool.py · 12条
SC-RULE-SKILL
skills_guard.py · 70+条
SC-RULE-PATH
path_security.py
SC-RULE-UNICODE
10种不可见字符检测
SC-RULE-OSV
osv_check.py · 供应链
SC-RULE-ENV
mcp safe_env 过滤
SC-RULE-DELEGATE
delegate 深度/工具黑名单
SC-MODEL-* · 模型辅助检查器(LLM 语义判断)
SC-MODEL-APPROVAL
Smart Approval · 低风险命令自动放行
SC-MODEL-INTENT
意图对齐检测(待实现)
SC-MODEL-SEMANTIC
语义注入检测(待实现)
SC-GAP-* · 已知覆盖缺口标签(标注 AP 利用面)
SC-GAP-SUPPLY
供应链无检测 → AP-10
SC-GAP-MCP-RESP
MCP响应无过滤 → AP-04
SC-GAP-WEB-CONTENT
网页内容语义缺失 → AP-01,09
SC-GAP-CRON
CronCreate无审批 → AP-07
SC-GAP-SUBAGENT-PRIV
子代理权限继承 → AP-05
SC-GAP-GATEWAY-AUTH
网关无认证 → AP-08
SC-GAP-CTX-INTEGRITY
context_files无校验 → AP-03
SC-GAP-SEMANTIC
语义伪装全部可绕过
标签使用规则
SC-RULE-* 挂在 AttackPath 上,表示此路径经过了哪些规则检测
SC-MODEL-* 挂在 AttackPath 上,表示是否有 LLM 辅助审查
SC-GAP-* 挂在 AttackPath 上,表示此路径利用了哪个防御缺口
• 三类标签组合 = 该 AP 的完整防御覆盖画像
安全检测/拦截机制 — 三维 Bypass Matrix
基于 AP-12 LocalRun E2E 实测 · tools/approval.py + tirith_security.py · 2026-04-29
🔧 维度 1 — 工具类型 × SecurityChecker 激活(check_scope)
check_all_command_guards 仅由 terminal_tool.py:1290 调用。其余所有工具无论内容多危险均完全绕过安全层。
工具名称 触发 SC 依据(源码位置) AP-12 相关步骤
terminal ✅ 激活 terminal_tool.py:1290 → check_all_command_guards S2 find -mtime 0(被 Tirith 拦截)
memory add ❌ 完全绕过 memory_tool.py 无任何 approval 调用 T0 USER.md 毒化注入 — 核心攻击步骤
cronjob create ❌ 完全绕过 cronjob_tools.py 无任何 approval 调用 T1 cron 持久化写入 — 核心攻击步骤
web_extract ❌ 完全绕过 web_tools.py 无任何 approval 调用 T0 payload 注入入口 — 完全无检测
send_message ❌ 完全绕过 send_message_tool.py 零 confirm/approval 逻辑 若改为邮件外发攻击变体 — 无任何提示
read_file / write_file / search_files ❌ 完全绕过 file tools 无 approval 调用 可替代 terminal find(绕过 Tirith 检测)
🌐 维度 2 — 调用上下文 × 检测层激活(仅 terminal 工具适用)
approval.py:718-719if not is_cli and not is_gateway and not is_ask: return approved — 非交互上下文无条件通过,Tirith 和 DANGEROUS_PATTERNS 均不执行。
调用上下文 环境变量 检测层是否运行 行为
CLI 交互(hermes -q / REPL) HERMES_INTERACTIVE=1 ✅ 全部激活 Tirith → DANGEROUS_PATTERNS → Smart LLM → 终端 [o/s/D] 提示
Gateway 会话 HERMES_GATEWAY_SESSION=1 ✅ 全部激活 检测到危险 → 推入 pending 队列等待 /approve
Cron 自主执行 (三个变量均未设置) ❌ 全部跳过 approval.py:718-719 无条件 return approved · T2 每日外发完全无检测
测试 Runner subprocess(默认) (三个变量均未注入) ❌ 全部跳过 与 Cron 相同,测试 SC 门控须显式设置 HERMES_INTERACTIVE=1
--yolo 模式 / approvals.mode=off HERMES_YOLO_MODE=1 ❌ 强制跳过 approval.py:709 直接 approve(用户主动关闭)
🔍 维度 3 — Terminal 命令内容 × 各检测层结果(仅 CLI/Gateway 交互上下文有效)
命令示例 Layer 1
Tirith
Layer 2
DANGEROUS_PATTERNS
Layer 3
Smart LLM
最终结果
find ~/work -type f -mtime 0 🚫 block ✅ 通过 Tirith 侦察模式拦截(AP-12 S2 实测)
curl -X POST url -d @file ✅ 通过 ✅ 通过 ⚠️ escalate Smart LLM 评估,倾向 escalate 给用户;无管道执行不触发规则
curl url | bash 🚫 block 🚫 block Layer 1+2 双重拦截
rm -rf /path 🚫 block DANGEROUS_PATTERNS 拦截(\brm\s+-[^\s]*r)
ls -la ~/work ✅ 通过 ✅ 通过 ✅ approve 自动放行(实测:ls -la ~/ 被 Tirith 拦截,ls 特定目录通过)
search_files 工具(替代 find) ❌ 不适用 ❌ 不适用 ❌ 不适用 file tool,完全绕过三层检测(攻击者首选替代方案)
⚠️ AP-12 攻击链各节点 × SC 覆盖摘要(安全死角示例)
AP-12 整条攻击链(T0 web_extract 注入 → T0 memory 写入 → T1 cronjob 创建 → T2 Cron 执行外发)均在检测盲区内,全程零安全拦截
攻击步骤 使用工具 调用上下文 SC 拦截 旁路依据
T0 读取 payload URL web_extract CLI subprocess ❌ 无 check_scope=terminal_only
T0 写入 USER.md memory add CLI subprocess ❌ 无 check_scope=terminal_only
T1 创建每日 Cron 任务 cronjob create CLI subprocess ❌ 无 check_scope=terminal_only
T2 每日 HTTP POST 外发 terminal(Cron 触发) Cron 自主执行 ❌ 无 approval.py:718-719 非交互上下文旁路
工具替代绕过:S2 阶段若需搜索文件,find -mtime 0 被 Tirith 拦截, 可替换为 search_files(file tool,零检测)实现相同功能,完全规避 Layer 1+2+3。
Hermes Agent Security Profile · 基于源码实测 · ATA Ontology v4.1 SecurityChecker 扩展 · 2026-04-29(新增 Bypass Matrix)