记忆威胁扫描(INV-MEM-24)

wesgine 在每次记忆写入时扫描内容中的凭据泄漏和不可见字符攻击。


Always-on,无 opt-out

威胁扫描在 Store.Save 路径中强制执行,不可关闭。

匹配时返回 ErrThreatPatternDetected,拒绝写入。


5 条凭据正则

模式匹配示例
hardcoded_secretapi_key = "sk-..."
connection_string_passwordpostgresql://user:pass@host
aws_access_keyAKIA...
bearer_tokenBearer eyJ...
private_key-----BEGIN RSA PRIVATE KEY-----

不可见 Unicode 检测

检测隐藏在文本中的不可见字符:

U+200D(ZWJ)不在检测范围:它是 Emoji 组合序列和中文排版的合法字符。


写入侧 vs 读取侧

时机行为
写入(Store.Save)FirstThreatError() 扫描 → 匹配则拒绝
读取(recall 路径)SanitizeForRecall 剥离 invisible unicode

写入侧更严格(拒绝),读取侧做清洗(剥离)。


与 KB 扫描的区别

Memory 威胁扫描KB 威胁扫描
扫描器FirstThreatError()(5 条正则 + invisible unicode)ScanKBChunk()(仅 private_key)
粒度条目级拒绝chunk 级过滤
范围所有 5 类凭据仅 PEM 私钥
误报率低(记忆内容通常不含 DSN 示例)极低(只查 PEM 头)

KB 使用独立扫描器的原因:Memory 的 5 条正则对文档内容系统性误报(设计文档 DSN 示例、IM 配置模板、AWS 示例 Key 全部触发)。


Govern v2 收敛

威胁模式扫描从 Govern v1 的宽泛检测(含 prompt injection / exfiltration / C2 启发式)收敛为两类:

  1. 凭据泄漏:5 条正则
  2. 不可见 Unicode:控制字符检测

prompt injection / exfiltration / C2 启发式已移除——误报率过高。


内容质量门控(INV-MEM-31)

在威胁扫描通过后,还有内容质量门控:

Govern v2 仅保留 R1(引擎状态前缀拦截),R2-R4(大段 JSON、plan 签名、原始代码块)已废除。


在写入管线中的位置

层映射 → Actor 校验 → 去重 → Kind/Session 校验
  → **威胁扫描** → 内容质量门控 → 写入审批 → Embedding → 持久化

威胁扫描在去重和 Kind 校验之后、内容质量门控之前。


相关文档