Antinel

← 24 条规则

SEC-02 SSH key file read

拦截 本机命中 0 次 secrets 沙箱触发已验证

① 它防什么

读取 SSH 私钥或 authorized_keys

Agent attempted to read SSH private key or authorized_keys file

② 触发判据

级别critical
类别secrets
闸门Gate 2 sensitive surface
判据类型tool_call
适用工具Read、Bash

文件路径模式

以上判据由 rules/default.json 直接生成,不手写、不意译

③ 真实命中示例

证据 A:沙箱构造触发(一次性临时项目目录,用完即删;调用真实钩子)

2026-09-24T01:43:52+08:00 ✗ block [SEC-02] 工具:Read  退出码:2 判据:path 命中:.ssh/id_

复现方式:与仓库 challenge/generate_challenge.py 同一方法—— 建一次性沙箱 → 喂事件给真实 hooks/pre_tool_use.py → 读沙箱账本。 本机全部 24 条规则均以该方法触发成功(24/24)。

证据 B:本机日常账本命中

本机 13 天账本里这条规则命中 0 次——我们不贴示例。 命中 0 次不代表规则无效,只代表本机没遇到;有效性由上面的证据 A 覆盖。

④ 误报与豁免

① 内置排除模式:本规则无内置排除模式。

② 豁免机制:本规则适用全局的四类豁免(详见 已知边界):

机制含义本机次数
workspace_root_allow路径在已声明的 workspace root 内 ⇒ 放行890
dst02_path_whitelisted路径在项目根外但在 policy 白名单内 ⇒ 放行12
dst02_bash_path_suspectBash 命令提到根外路径 ⇒ 只提醒、不拦3033
exclude_patterns_allow命中 critical 规则但被 exclude_patterns 放行11

⑤ 边界

边界说明
匹配对象tool_call
适用工具Read、Bash
平台限定全平台
判据类型path
大小写实测:大小写不敏感RM -RFrm -rf 同样被拦,见边界实验 A2)
路径规范化实测:生效./sub/../.env 同样被拦,见边界实验 A3)
脚本不解析Bash 命令文本中提到项目根外的绝对路径,只提醒不拦—— 理由写进产品:scripts are not parsed (THREAT_MODEL Non-goals)
失败姿态fail-open:钩子自身故障时不拦截,也绝不拖垮宿主
强度best-effort 拦截,不是硬性安全边界(不是沙箱、不是防火墙)

全局边界与口径:已知边界

⑥ 怎么复现

grep -h "SEC-02" .psl/audit/*.jsonl | head # 本机这条规则的命中 python challenge/generate_challenge.py # 用真实钩子生成一条沙箱链 python challenge/verify.py # 复算整条哈希链

账本逐日 JSONL:.psl/audit/YYYY-MM-DD.jsonl; 记录带 prevhash,链算术公开在 AUDIT_SCHEMA

引用这一页

Antinel AgentState. SEC-02 读取 SSH 私钥或 authorized_keys —— 规则详情. https://antinel.com/agentstate/rules/SEC-02/(访问日期:YYYY-MM-DD)

Antinel. (2026). SEC-02 读取 SSH 私钥或 authorized_keys —— 规则详情. AgentState. https://antinel.com/agentstate/rules/SEC-02/

BibTeX

@misc{antinel_agentstate_rules_SEC_02,
  title        = {SEC-02 读取 SSH 私钥或 authorized_keys —— 规则详情},
  author       = {{Antinel}},
  year         = {2026},
  url          = {https://antinel.com/agentstate/rules/SEC-02/},
  note         = {口径: 已实测}
}

口径:已实测 采集时刻:2026-09-23T22:41:18+08:00