ESAA-Security
基于事件溯源架构的自主安全审计框架,通过108条结构化检查消除LLM幻觉漏洞
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于事件溯源架构的自主安全审计框架,通过108条结构化检查消除LLM幻觉漏洞
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下这个场景:凌晨两点,某安全团队负责人盯着屏幕上密密麻麻的漏洞报告,眉头紧锁。AI agent 报告了 127 个"高危漏洞",但仔细核查后发现,其中 86 个是误报——它把正常的日志配置识别成了信息泄露,把标准的错误处理代码误判为 XSS 注入。
这不是孤例。2025 年,随着 LLM 驱动的代码审查工具大规模落地,一个根本性问题逐渐浮出水面:LLM agent 天生的"幻觉"倾向,与安全审计所需的严谨性之间,存在不可调和的张力。
ESAA-Security 给出了自己的答案:不是让 agent 变得更"聪明",而是给它装上一套刚性约束——每一条漏洞发现必须附带可验证的技术证据,每一次审计结论必须经过确定性校验,每一个审计轨迹都必须被不可篡改地记录下来。
"Agents investigate, the Orchestrator adjudicates." agent 负责调查,编排器负责裁断。
传统安全审计依赖人工专家,效率低、成本高、覆盖有限。LLM agent 的出现让自动化成为可能,但带来了三个核心问题:
1. 幻觉漏洞(Hallucinated Vulnerabilities)。LLM 会自信地生成看似合理但实际不存在的漏洞描述,比如把一段正常的错误处理代码误判为 SQL 注入风险。在没有约束的情况下,这种误报率可高达 60-80%,直接导致有意义的发现被淹没在噪声中。
2. 覆盖不一致(Inconsistent Coverage)。不同 agent 运行时,由于提示词的微小差异或随机性,同一个代码库可能被标记出完全不同的漏洞集合。缺乏结构化的检查清单,导致审计结果无法横向比较。
3. 审计轨迹缺失(No Audit Trail)。传统 agent 运行完就结束,结论来自黑盒推理过程,无法事后复现和验证。当安全决策需要合规审计或法律举证时,这是致命缺陷。
ESAA-Security 由巴西开发者 elzobrito 提出,构建在 ESAA(Event-Sourcing Agent Architecture)框架之上,将安全审计重新定义为确定性管道,而非自由格式的检查清单。其核心理念来自两篇 arXiv 论文的交叉研究:ESAA 论文(arXiv:2602.23193)提供治理内核,PARCER 论文(arXiv:2603.00856)提供操作契约规范。
ESAA-Security 的架构分为三个层次,每一层都服务于同一个目标:消除 agent 决策的模糊性。
第一层:ESAA 治理内核。这是整个系统的地基,提供:
.roadmap/activity.jsonl 记录 agent 的每一个操作和结论,任何对历史记录的篡改都会被哈希验证发现。第二层:PARCER 操作契约。定义了 agent 与系统交互的规范:
第三层:ESAA-Security 领域专化。在前两层的基础上,定义了安全审计特有的:
架构执行流程可以简化为:agent 产生漏洞发现 → 事件携带发现结果 → 编排器基于 playbook 验证结果(不合规则拒绝) → 追加到事件日志 → 投影器生成确定性报告。
Phase 1 — 侦察(Reconnaissance)。在安全检查之前,agent 先摸清目标地形。SEC-001 识别技术栈(语言、框架、依赖);SEC-002 映射架构(组件、数据流、信任边界);SEC-003 枚举攻击面(端点、接口、上传点、WebSocket、外部 API)。侦察阶段的输出为后续所有检查提供上下文。
Phase 2 — 审计执行(Audit Execution)。这是核心阶段,17 个安全领域的 agent 任务依次执行。每个任务对应一个 playbook,playbook 定义了该领域所有检查的执行策略和通过/失败标准。以 输入验证(Input Validation) 领域为例,包含 10 条检查:
| 检查ID | 描述 | 严重性 |
|---|---|---|
| IV-001 | 命令注入 | CRITICAL |
| IV-002 | SQL 注入 | CRITICAL |
| IV-003 | 路径遍历 | HIGH |
| ... | ... | ... |
| IV-010 | 开放重定向 | MEDIUM |
每条检查的 playbook 都明确定义了:检查 ID、severity_if_fail、agent_instructions(策略和工具)、evidence_requirements(必须提供的证据类型)、false_positive_guidance(误报指南)。没有技术证据的漏洞发现会被编排器拒绝。
Phase 3 — 风险分类(Risk Classification)。SEC-030 将 Phase 2 发现的不同来源证据合并为统一的风险矩阵;SEC-031 对严重性进行分类(CRITICAL/HIGH/MEDIUM/LOW/INFO)并评估 CIA 影响;SEC-032 生成最终风险矩阵,关联漏洞、严重性、影响和修复方案。
Phase 4 — 建议和报告(Recommendations & Reporting)。基于 Phase 3 的风险矩阵,生成结构化的修复建议和可验证的审计报告。
ESAA-Security 覆盖的安全领域远不止常规的 OWASP Top 10,还包括了 AI/LLM 特定的安全问题:
| 领域 | 检查数 | 优先级 | 代表检查 |
|---|---|---|---|
| 机密信息与配置 | 8 | CRITICAL | 硬编码密钥、配置文件泄露 |
| 依赖与供应链 | 6 | HIGH | 第三方库漏洞、依赖混淆 |
| 认证 | 9 | CRITICAL | JWT 弱点、会话管理 |
| 授权 | 6 | CRITICAL | 越权访问、权限提升 |
| API 安全 | 9 | HIGH | Mass assignment、Unsafe API consumption |
| 输入验证 | 10 | CRITICAL | SQLi、XSS、命令注入、XXE |
| 文件上传 | 6 | HIGH | 路径穿越、恶意文件类型 |
| 会话安全 | 6 | HIGH | Cookie 安全、CSRF |
| 密码学 | 5 | HIGH | 弱加密算法、密钥管理 |
| 安全响应头 | 5 | MEDIUM | CSP、X-Frame-Options |
| 日志与监控 | 5 | MEDIUM | 敏感信息泄露、审计日志缺失 |
| 基础设施 | 7 | HIGH | 容器安全、配置硬化 |
| DevSecOps | 6 | MEDIUM | CI/CD 安全、Secrets 管理 |
| 数据安全 | 5 | CRITICAL | 传输加密、存储合规 |
| 前端安全 | 4 | MEDIUM | DOM XSS、CSRF |
| AI/LLM 安全 | 7 | HIGH | Prompt injection、模型/数据溯源、Token 预算 |
| 业务逻辑 | 4 | HIGH | 反自动化绕过、竞争条件 |
特别值得注意的是 AI/LLM 安全(AI-001 ~ AI-007)。这是 ESAA-Security 最具时代特征的部分,涵盖了:
Playbook 支持三种检查策略:
对于 hybrid 策略,默认只执行静态分析部分,运行时确认是可选项且需要显式提供 endpoint_base_url。当可选工具不可用时,检查降级到静态分析模式,而不会因此失败——这是避免假阴性的设计。
ESAA-Security 的源代码组织在 src/esaa/ 下,核心文件超过 30 个。整体采用混合架构:Python 实现编排器内核,JavaScript 实现安全审计 plugin。
核心 Python 模块(src/esaa/):
| 模块 | 职责 |
|---|---|
service.py | 组合式服务类,混合了 TaskAdminMixin、SubmissionMixin、ExecutionMixin |
security_audit.py | 安全审计专化核心:精度策略强制、工具决策、playbook 引导 |
events.py | 事件构建与序列化(make_event、dumps_pretty、build_hotfix_event) |
validator.py | JSON Schema 验证,拒绝不符合契约的输出 |
store.py | 仅追加事件存储 |
boundary_paths.py | 受治理状态路径的边界检查(重要安全模块) |
dispatch.py | 任务分发与编排 |
runner_inputs.py | 生成 agent 运行时的输入( playbook + 上下文) |
plugins.py | Plugin 加载与验证,plugin 禁止写入受治理状态 |
secrets.py | 安全相关常量定义 |
安全 plugin(plugins/security-audit/0.1.0/):
| 文件 | 描述 |
|---|---|
dist/index.js | 安全审计 plugin 入口点(Node.js) |
plugin.yaml | Plugin 元数据,声明版本、入口、API 版本 |
schemas/security-audit-input.schema.json | 输入数据 JSON Schema |
roadmap.json | Plugin 自己的 roadmap |
模板与契约(.roadmap/):
| 文件 | 描述 |
|---|---|
agents_swarm.yaml | Agent 集群配置:agent-spec/agent-impl/agent-qa 三个角色 |
playbooks.security.json | 108 条安全检查的执行手册(YAML 格式的声明式定义) |
PARCER_PROFILE.*.yaml | PARCER 操作契约配置 |
REPORT_TEMPLATE.md | 审计报告模板 |
RUNTIME_POLICY.yaml | 运行时策略:token 预算、执行模式 |
Agent 角色分工(agents_swarm.yaml):
ESAA-Security 定义了三种 agent 角色,形成分工明确的 swarming 协作模式:
支持多种 LLM runner:Claude (Cowork)、Claude Code (CLI)、Codex、human-terminal。
ESAA-Security 最具特色的设计是其精度策略(Precision Policy),明确定义了防止误报的具体规则:
fallback_applied=true 永远不能与 status=fail 共存。当 agent 因为工具缺失而降级到静态分析时,不能同时声称发现了漏洞。confidence=high + status=fail 必须包含强证据类型(code_snippet、tool_output 或 runtime_probe 三选一)。仅靠模式匹配的误报无法达到高置信度。编排器在 agent 提交结果时执行拒绝逻辑,不符合精度策略的结果会被标记为 PRECISION_POLICY_VIOLATION 并返回给 agent 重试。
ESAA-Security 是一个纯 Python CLI 工具,对外暴露 esaa 命令行入口。
安装方式(二选一):
# 方式一:从源码安装
git clone https://github.com/elzobrito/ESAA-Security.git
cd ESAA-Security
pip install .
# 方式二:直接安装发布包
pip install esaa-core
运行审计:
# 对本地代码仓库进行安全审计
esaa audit --target /path/to/your/project
# 提供 endpoint_base_url 启用运行时混合检查
esaa audit --target /path/to/your/project --endpoint-url https://api.example.com
环境要求:
1. 静态分析的固有局限。ESAA-Security 默认运行在"仅静态本地代码"模式,审计范围限于版本控制仓库内的代码和配置。对于生产环境特有的运行时问题(如云端 WAF 配置、网络策略),只能通过 endpoint_base_url 手动补充,无法自动发现。
2. Playbook 维护成本。108 条检查项分布在 17 个领域,维护一个覆盖最新漏洞类型的 playbook 需要持续投入。README 显示 playbooks 已更新到 v1.2.1,但 OWASP 每月都有新漏洞类型出现,维护速度是否能跟上值得观察。
3. 依赖 ESAA 内核的学习曲线。ESAA-Security 不是独立工具,它依赖 ESAA 框架的事件溯源和编排机制。理解这个工具需要先理解 ESAA 的核心概念——append-only event log、boundary contracts、PARCER 契约。对于只想做快速安全审计的团队,这个学习成本可能过高。
4. 尚未经过大规模实战验证。目前 star 数仅 199,缺少在大型真实代码库上的基准测试数据。playbook 中定义的检查项是否真正能捕获目标漏洞,需要社区贡献更多的测试用例。
ESAA-Security 的价值不在于它能发现多少漏洞,而在于它提出了一种约束 LLM 行为的系统性方法。
当前主流的 LLM 安全工具(如 Semgrep Pro、CodiumAI、Bito)大多依赖 prompt engineering 来引导 agent,输出质量高度依赖提示词的好坏。ESAA-Security 的思路完全不同:不信任 agent 的自由裁量权,用确定性规则和结构化验证来约束其输出。
这种"将 LLM 视为不可靠组件,用工程手段兜底"的思路,与形式化方法(formal methods)有异曲同工之妙,但比 Z3/Symbolic execution 更容易上手。108 条检查项的 playbook 模式,既保留了专家知识的结构化表达,又允许 agent 在执行中保持灵活性。
从更宏观的视角看,ESAA-Security 处于三个趋势的交汇点:LLM 代码生成的普及(更多 AI 生成代码需要审计)、自主 agent 的崛起(agent 行为需要可验证性)、安全合规的要求(审计轨迹需要可追溯)。它的实验性很强,但其核心理念——"确定性约束 + LLM 调查能力"——可能会影响未来安全工具的设计方向。
数据来源:GitHub 仓库分析(199★)、arXiv 论文(2603.06365)、playbooks v1.2.1