70+
技能扫描规则
skills_guard.py
10
上下文注入规则
prompt_builder.py
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-719:if 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)