Agent-Field/sec-af

GitHub: Agent-Field/sec-af

基于多 Agent 对抗验证架构的 AI 原生安全审计器,通过从源到汇的污点追踪证明漏洞可利用性,以极低的 LLM 成本产出带有判定结论和完整凭证的审计结果。

Stars: 35 | Forks: 6

# SEC-AF ### 基于 [AgentField](https://github.com/Agent-Field/agentfield) 构建的 AI 原生安全审计器 [![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-16a34a?style=for-the-badge)](LICENSE) [![Python](https://img.shields.io/badge/python-3.11%2B-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/downloads/) [![Built with AgentField](https://img.shields.io/badge/Built%20with-AgentField-0A66C2?style=for-the-badge)](https://github.com/Agent-Field/agentfield) [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/sec-af) [![More from Agent-Field](https://img.shields.io/badge/More_from-Agent--Field-111827?style=for-the-badge&logo=github)](https://github.com/Agent-Field)

输出基准测试工作原理对比快速开始API

其他工具只能标记模式。SEC-AF **证明可利用性**:每项发现都包含判定结论、数据流追踪和可操作的凭证。免费、开源,仅需一次 API 调用。一次包含 30 个已验证发现的完整审计成本约为 **$1.40 的 LLM 调用费用**。

SEC-AF — AI-native security auditor

## 一次调用 (One-Call DX) ``` curl -X POST http://localhost:8080/api/v1/execute/async/sec-af.audit \ -H "Content-Type: application/json" \ -d '{"input": {"repo_url": "https://github.com/dolevf/Damn-Vulnerable-GraphQL-Application"}}' ``` ## 你将获得什么 这是 SEC-AF 审计 [DVGA](https://github.com/dolevf/Damn-Vulnerable-GraphQL-Application)(一个故意存在漏洞的 GraphQL 应用)时的真实发现: ``` { "title": "OS Command Injection in run_cmd Helper Function", "severity": "critical", "verdict": "confirmed", // not "maybe" — confirmed exploitable "evidence_level": 5, "cwe_id": "CWE-78", "rationale": "Tracer confirms complete data flow from GraphQL parameters (host, port, path, scheme, cmd, arg) to os.popen(cmd).read() sink. Sanitization functions are bypassable in Easy mode...", "proof": { "verification_method": "composite_subagent_chain:sast", "data_flow_trace": [ { "description": "core/views.py:203 — GraphQL args defined (host, port, path, scheme)", "tainted": true }, { "description": "core/views.py:210 — URL constructed from user input", "tainted": true }, { "description": "core/views.py:211 — helpers.run_cmd(f'curl {url}') called", "tainted": true }, { "description": "core/helpers.py:9 — os.popen(cmd).read() executes input", "tainted": true } ] }, "location": { "file_path": "core/helpers.py", "start_line": 9, "code_snippet": "def run_cmd(cmd):\n return os.popen(cmd).read()" } } ``` 每项发现都包含一个**判定结论**(`confirmed` / `likely` / `inconclusive` / `not_exploitable`),一个带有完整污点追踪的**凭证对象**,以及确切的代码位置。不是“这可能是个问题”。SEC-AF 从源到汇追踪数据,并证明其是否真的可被利用。 ## 基准测试:DVGA 我们在 [Damn Vulnerable GraphQL Application](https://github.com/dolevf/Damn-Vulnerable-GraphQL-Application) 上运行 SEC-AF,这是一个故意包含 21 个已记录安全场景的漏洞应用。 | 指标 | 数值 | |---|---| | 发现的原始结果 | 106 | | AI 去重后 | 61 | | **对抗性验证后** | **28 个已确认** | | 不确定(需人工审查) | 1 | | 不可利用(正确拒绝) | 1 | | 噪声削减 | 94% | | DAG 边(推理器调用) | 82 | | Agent 调用 | ~166–255 | | 运行策略 | 11 | | 实际耗时 | ~78 min | | 预估成本 (Kimi K2.5) | ~$0.18–$0.90 |
详细分类:按类别划分的 30 个已验证发现 | 类别 | 数量 | 示例 | |---|---|---| | 缺失认证 | 8 | ImportPaste, delete_all_pastes, system_debug, CreateUser, file upload | | 命令注入 | 4 | 通过 ImportPaste, system_debug, system_diagnostics 执行 `os.popen(cmd)` | | SQL 注入 | 3 | `resolve_pastes` 中未过滤的 `filter`,LIKE 模式注入,登录 | | 认证绕过 | 3 | JWT 签名禁用,JWT 授权绕过,密码认证破损 | | 明文凭据 | 3 | 明文密码存储,明文比对,诊断信息中的密码 | | SSRF | 2 | ImportPaste mutation 在服务端跟随用户提供的 URL | | 业务逻辑 / URL 过滤 | 2 | URL 过滤不足,未认证的大规模删除 | | DoS / 资源耗尽 | 3 | users/audits 查询缺少分页,uncontrolled simulate_load | | 配置 / 密钥 | 2 | 硬编码的 JWT/Flask 密钥,生产环境开启 debug 模式 |
设计模式:AI 原生安全分析的工作原理 SEC-AF 应用了 several 架构模式,这些模式是通过组合多个专注的 AI Agent 而非运行单一单体扫描所独有的。这些模式解决了 AI 驱动安全分析中的根本性挑战。 **1. 对抗性 Agent 张力 (HUNT vs. PROVE)** 大多数 AI 安全工具只问单个模型“这是否有漏洞?”并接受答案。SEC-AF 在结构上分离了*发现* Agent 和*证伪* Agent。Hunters 的动机是发现漏洞;provers 的动机是证伪它们。每个发现都要经过一个 4-Agent 验证链 —— 追踪器重建数据流,过滤分析器寻找 hunter 可能遗漏的缓解措施,漏洞假设者构建具体的攻击场景,判定 Agent 权衡所有相互冲突的证据。Agent 之间的这种对抗性张力是实现 94% 噪声削减的关键 —— 架构本身就编码了怀疑态度。 **2. 信号级联与逐步收窄** Pipeline 不会将所有发现倾倒给用户,而是在每个阶段压缩信号:106 个原始发现 → AI 去重后 61 个 → 对抗性验证后 30 个。每个阶段都是一个过滤器。这模仿了人类安全团队如何进行分类 —— 先是广泛发现,然后是越来越严格的审查。关键见解在于,每个过滤器都是一种*不同类型*的 AI 推理:用于去重的语义相似性,用于验证的污点分析,用于确认的漏洞构建。 **3. 通过上下文修剪实现信息经济** 当给定不相关的上下文时,LLM 更容易产生幻觉。SEC-AF 仅路由每个 Agent 需要的信息:注入 hunter 接收经过修剪的、仅包含数据流图和输入入口点的侦测上下文,而加密 hunter 接收依赖树和密钥管理模式。验证者接收投影的发现视图,仅包含其特定验证方法所需的字段。这种针对策略的上下文修剪减少了幻觉和成本 —— Agent 不会因从未看到的信息而自我干扰。 **4. 流式阶段重叠** 传统 Pipeline 顺序运行:完成侦测,然后开始搜寻,再开始证明。SEC-AF 通过 `asyncio.Queue` 重叠阶段 —— hunters 开始接收实时产生的侦测输出,去重处理在每个 hunter 完成时即时处理发现。Provers 开始验证第一批去重后的发现,而后续的 hunters 仍在运行。这种流式架构减少了实际耗时,同时不牺牲信号级联 —— 每个发现仍然通过每个过滤器,只是更早。 **5. 通过 AI 门控实现动态路由** Pipeline 根据发现的内容在运行时调整。一个 AI 门控检查侦测输出并选择激活哪些 hunt 策略 —— 一个带有 JWT 认证的 Flask 应用会触发与带有 gRPC 的 Go 微服务不同的 hunter。一个单独的 CWE 扩展门控根据检测到的技术栈动态扩展漏洞目标列表。一个可达性门控评估依赖项漏洞是否具有可利用的调用路径,避免在不可达代码上浪费验证资源。 **6. 编码 Agent 的引导式自主** SEC-AF 通过 AgentField Harness 运行在编码 Agent(Claude Code, OpenCode, Codex)之上。Reasoner 不给 Agent 一个巨大的提示词,而是提供阶段感知的引导式自主:Agent 接收狭窄的任务定义、扁平的输出 Schema(2-4 个字段)和特定策略的上下文。Agent 在这些边界内拥有完全的自主权 —— 它可以读取文件、追踪代码并自由推理 —— 但 Harness 限制了其输出的*形状*。这防止了自主 Agent 偏离任务或产生非结构化结果的常见失败模式。 **7. 可组合的 Reasoner DAG 与完全可观测性** 每次 Agent 调用都流经 AgentField 控制平面,创建完整的审计有向无环图。你可以看到哪个 hunter 发现了哪个发现,每次验证花了多长时间,prover 生成了什么证据,以及 Pipeline 在哪里花费了时间。添加一个新的漏洞类别只需一个文件 —— 一个新的 hunter。编排器发现它,路由上下文给它,并将其发现集成到现有的去重 → 证明 → 修复 Pipeline 中。DAG 即架构。
它遗漏了什么(以及原因) 9 个遗漏的场景主要是 **GraphQL 协议级攻击**:批量查询、深度递归、别名滥用、字段重复、内省暴露。这些需要运行时/DAST 分析。SEC-AF 目前侧重于 SAST。协议级检测已在路线图上。
## 工作原理 SEC-AF 基于 [Composite Intelligence](https://github.com/Agent-Field/agentfield) 哲学构建:它不依赖单一的单体 LLM 调用,而是将多个专注的、引导式的 LLM 调用组合成一个 **Reasoner DAG**,其中架构本身就编码了智能(关于此模式的深入探讨,请参阅 [The Atomic Unit of Intelligence](https://www.santoshkumarradha.com/writing/atomic-unit-of-intelligence))。每个 LLM 调用处理一个带有扁平 Pydantic Schema(2-4 个属性)的小型、定义明确的任务。编排器管理上下文流、并行性和动态路由。 ### 架构:Reasoner 调用图 (DAG) 每个阶段都是一个 `@reasoner`,通过 AgentField 控制平面调用子 Reasoner,对于给定的查询,总共约有 ~200-300 个 Agent 同步工作:

SEC-AF Signal Cascade Pipeline — RECON → HUNT → DEDUP → PROVE → OUTPUT

### 信号级联 Pipeline 每个阶段都会收窄信号。原始发现通过越来越严格的门控进行过滤: | 阶段 | 目的 | 并行性 | |---|---|---| | **RECON** | 映射架构、依赖项、数据流、安全上下文 | 3 路并行 (arch + deps + config),然后 2 路 (data flow + security) | | **HUNT** | 运行 10+ 个专门的策略 Hunter | 信号量限制并行(默认 4 个并发),增量去重 | | **PROVE** | 对抗性验证:尝试**证伪**每个发现 | 信号量限制并行(默认 3 个并发) | | **REMEDIATION** | 为 confirmed/likely 发现生成修复建议 | 信号量限制并行(默认 3 个并发) | ### 为什么采用多 Reasoner 架构 大多数 AI 安全工具运行一个大型 Prompt 并寄希望于 LLM 正确完成。SEC-AF 将问题分解为约 258 个专注的 Agent 调用,每个调用都有扁平的 Schema(2-4 个字段)和狭窄的任务。架构编码了推理策略,而不是 Prompt(参见 [The Atomic Unit of Intelligence](https://www.santoshkumarradha.com/writing/atomic-unit-of-intelligence) 了解原因)。 - **多个专注 Agent > 一个强大 Agent。** 单个 LLM 调用无法同时映射架构、追踪数据流、搜寻注入、验证可利用性并建议修复。SEC-AF 将其中每一项分配给单独的 Reasoner,后者只做一件事并做好。编排器处理组合、并行性和上下文路由。 - **对抗性验证,而非确认偏差。** PROVE 阶段为每个发现运行 4 个目标对立的子 Agent:追踪器重建数据流,过滤分析器寻找阻断点,漏洞假设者构建攻击,判定 Agent 权衡所有证据。Agent 之间的这种张力比询问单个模型“这是否可利用?”产生更高的置信度。 - **通过 AI 门控实现动态路由。** 系统在运行时调整。一个 AI 门控检查侦测输出并选择激活哪些 hunt 策略。一个单独的门控根据检测到的堆栈扩展 CWE 目标列表。带有 JWT 认证的 Flask 应用会获得与带有 GPRC 的 Go 微服务不同的 Hunter。 - **渐进式信号收窄。** 106 个原始发现去重后变为 61 个,然后经过对抗性验证变为 30 个 —— 94% 的噪声削减。每个阶段都是一个过滤器。Pipeline 压缩噪声,而不仅仅是检测漏洞并将其倾倒出来。 - **信息经济。** 每个 Agent 只看到它需要的内容。Hunter 接收针对其策略修剪的侦测上下文。验证者接收具有最少字段的投影发现视图。这减少了幻觉,降低了成本,并保持每次 LLM 调用专注。 - **增量流式传输。** 去重作为一个消费者在 Hunter 仍在生产时运行。发现随着每个 Hunter 完成进行指纹去重,然后最后一次语义扫描捕获跨策略的重复项。Pipeline 是流式的,非批量的。 ## 对比 | | SEC-AF | Nullify | Snyk Code | Semgrep | CodeQL | |---|---|---|---|---|---| | **方法** | **AI 原生** | **AI 原生** | **AI 辅助** | **基于规则** | **基于规则** | | | 多 Reasoner DAG · LLM 对代码进行推理 | 自主安全劳动力 | DeepCode AI 引擎 | 模式 + 污点匹配 | 语义分析 + 数据流 | | **开源** | ✅ Apache 2.0 | ❌ 专有 | ❌ 专有 | 引擎: LGPL-2.1 · Pro 规则: 专有 | 查询: MIT · 引擎: 专有 | | **已验证发现** | ✅ 对抗性 PRO 阶段 · 每个发现包含判定 + 凭证 | ✅ 漏洞利用证明生成 | ❌ 优先级评分 (不透明) · 无利用凭证 | ❌ 仅模式匹配 | ❌ 静态分析警报 | | **每个发现的证据** | 带有污点传播的数据流追踪 | 漏洞利用路径 + 复现步骤 | 显示源到汇流 | - | 路径查询显示数据流 | | **架构** | 具有完全可观测性的可组合 Reasoner DAG | 单体 Agent | 单次通过引擎 | 规则引擎 | 查询引擎 | | **并行性** | ✅ 并行 Hunter、验证器、修复器,增量去重 | 未记录 | 未记录 | ✅ 规则并行 | ✅ 查询并行 | | **评分** | ✅ 公开的组合公式 | 内部 | 不透明的优先级评分 | 内部 | - | | **SARIF** | ✅ 原生 2.1.0 | 未记录 | ✅ | ✅ | ✅ 原生 | | **合规映射** | PCI-DSS, SOC2, OWASP, HIPAA, ISO27001 | 未记录 | 仅平台合规 | 有 OWASP 规则 | - | | **语言** | 任何 LLM 支持的语言 | 未记录 | 14+ | 35+ (基于解析器) | 10 | | **定价** | **免费 · 开源** (~$0.18–$0.90/审计 LLM 成本) | **$6,000/月** | $25-105/月/开发者 | OSS 引擎: 免费使用 · Pro: $30/月/贡献者 | 公开仓库免费 · $49/月/提交者 (GHAS) | **SEC-AF 的优势**:带有凭证对象的已验证发现、透明的评分、合规映射、具有完全 DAG 可观测性的可组合多 Agent 架构,以及完全开源。 **其他工具的优势**:Semgrep 和 CodeQL 拥有多年经过实战检验的规则覆盖,支持 35+ 种语言。Snyk 拥有深度的 IDE/SCA 集成。Nullify 添加了运行时云上下文和自动修复活动。SEC-AF 较新,目前在 AI 驱动的代码级分析方面最强。 ### 为什么多 Agent 架构很重要 传统的安全扫描器是单体的:一个引擎,一次通过,一套规则。SEC-AF 的多 Reasoner 架构提供了结构优势: - **专业化**:每个 Hunter 都是一个引导式 LLM 专家 —— 注入 Hunter 的推理方式与加密 Hunter 不同。架构在路由中编码了领域知识,而不仅仅是在 Prompt 中。 - **可组合性**:通过添加一个 Hunter 文件来添加新的漏洞类别。编排器自动发现并运行它。无需更改 Pipeline。 - **对抗性验证**:PROVE 阶段在结构上与 HUNT 分离。Hunter 试图发现漏洞;Prover 试图证伪它们。这种对抗性张力减少了误报。 - **可观测性**:每次 Reasoner 调用都流经控制平面,创建完整的 DAG。你可以确切地看到哪个 Hunter 发现了哪个发现,每个阶段花了多长时间,以及 LLM 在每一步推理了什么。 - **成本效率**:上下文修剪和 Schema 视图意味着每次 LLM 调用仅接收所需的上下文。一次包含 30 个已验证发现的标准深度完整审计,预计 LLM 调用成本约为 ~$0.18–$0.90(通过 OpenRouter 的 Kimi K2.5)。 ## 快速开始 ### 一键部署 (Railway) [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/sec-af) 部署 AgentField 控制平面 + SEC-AF Agent。你需要一个 `OPENROUTER_API_KEY`。 ### 本地运行 ``` git clone https://github.com/Agent-Field/sec-af.git && cd sec-af cp .env.example .env # Add OPENROUTER_API_KEY docker compose up --build ``` 启动 AgentField 控制平面 (`http://localhost:8080`) + SEC-AF Agent。 触发审计: ``` curl -X POST http://localhost:8080/api/v1/execute/async/sec-af.audit \ -H "Content-Type: application/json" \ -d '{"input": {"repo_url": "https://github.com/dolevf/Damn-Vulnerable-GraphQL-Application"}}' ``` 轮询结果: ``` curl http://localhost:8080/api/v1/executions/ ``` ## API
完整请求选项 ``` curl -X POST http://localhost:8080/api/v1/execute/async/sec-af.audit \ -H "Content-Type: application/json" \ -d '{ "input": { "repo_url": "https://github.com/org/repo", "branch": "main", "depth": "thorough", "severity_threshold": "high", "scan_types": ["sast", "sca", "secrets", "config"], "output_formats": ["sarif", "json", "markdown"], "compliance_frameworks": ["pci-dss", "soc2", "owasp", "hipaa"], "max_cost_usd": 15.0, "max_provers": 30, "max_duration_seconds": 1800, "include_paths": ["src/"], "exclude_paths": ["tests/", "vendor/"] } }' ```
深度配置 | 配置 | 策略 | 验证 | 典型时间 | 典型成本 | |---|---|---|---|---| | `quick` | 5 个核心策略 | 仅主要发现 | 2-5 min | ~$0.10-0.40 | | `standard` | 11 个策略 (核心 + 扩展) | 前 30 个发现 | 15-80 min | ~$0.18-0.90 | | `thorough` | 全部策略集 | 所有发现 | 30-120 min | ~$2-8 | 成本基于通过 OpenRouter 的 Kimi K2.5($0.22/M 输入, $0.88/M 输出)。DVGA 基准测试(standard 深度,30 个已验证发现,约 166-255 次估计 LLM 调用,82 个 DAG 边)估计成本为 **$0.18–$0.90**。完整分析:[`exampl/benchmark-analysis.json`](exampl/benchmark-analysis.json)。任何兼容 OpenRouter 的模型均可使用 —— 设置 `HARNESS_MODEL` 和 `AI_MODEL` 进行切换。
判定模型 | 判定 | 含义 | |---|---| | `confirmed` | 通过具体证据证明了可利用性 | | `likely` | 有强烈指标,部分验证 | | `inconclusive` | 证据不足,需要人工审查 | | `not_exploitable` | 证据表明无实际利用路径 |
输出格式 | 格式 | 消费者 | 描述 | |---|---|---| | `sarif` | GitHub Code Scanning, 安全工具 | SARIF 2.1.0,包含严重性和位置 | | `json` | Pipelines, API | 完整的结构化结果,包含判定、凭证、成本 | | `markdown` | 安全团队 | 叙述性报告,包含发现和修复建议 |
## GitHub Actions
CI 集成 ``` name: sec-af-audit on: pull_request: jobs: security-audit: runs-on: ubuntu-latest permissions: contents: read security-events: write steps: - uses: actions/checkout@v4 - name: Trigger SEC-AF run: | RESPONSE=$(curl -sS -X POST "$AGENTFIELD_SERVER/api/v1/execute/async/sec-af.audit" \ -H "Content-Type: application/json" \ -d '{ "input": { "repo_url": "${{ github.event.repository.clone_url }}", "branch": "${{ github.head_ref }}", "commit_sha": "${{ github.event.pull_request.head.sha }}", "base_commit_sha": "${{ github.event.pull_request.base.sha }}", "depth": "standard", "output_formats": ["sarif"] } }') echo "execution_id=$(echo "$RESPONSE" | jq -r '.execution_id')" >> "$GITHUB_ENV" env: AGENTFIELD_SERVER: ${{ secrets.AGENTFIELD_SERVER }} - name: Wait for results run: | for i in {1..60}; do RESULT=$(curl -sS "$AGENTFIELD_SERVER/api/v1/executions/$execution_id") STATUS=$(echo "$RESULT" | jq -r '.status') [ "$STATUS" = "succeeded" ] && { echo "$RESULT" | jq -r '.result.sarif' > results.sarif; exit 0; } [ "$STATUS" = "failed" ] && { echo "Audit failed"; exit 1; } sleep 10 done echo "Timed out"; exit 1 env: AGENTFIELD_SERVER: ${{ secrets.AGENTFIELD_SERVER }} - uses: github/codeql-action/upload-sarif@v3 with: sarif_file: results.sarif ```
## 配置
环境变量 | 变量 | 必需 | 默认值 | 描述 | |---|---|---|---| | `AGENTFIELD_SERVER` | 是 | `http://localhost:8080` | 控制平面 URL | | `OPENROUTER_API_KEY` | 是 | - | LLM 提供商凭证 | | `HARNESS_MODEL` | 否 | `moonshotai/kimi-k2.5` | 用于深度 `.harness()` 分析的模型 | | `AI_MODEL` | 否 | `moonshotai/kimi-k2.5` | 用于快速 `.ai()` 门控和判定的模型 | | `SEC_AF_MAX_TURNS` | 否 | `50` | 每次调用的最大 Harness 轮次 | | `AGENTFIELD_API_KEY` | 否 | unset | 安全环境的 API 密钥 | | `HARNESS_PROVIDER` | 否 | `opencode` | Harness 后端提供商 | | `SEC_AF_AI_MAX_RETRIES` | 否 | `3` | 模型调用的重试次数 |
## 开发设置 ``` python -m venv .venv && source .venv/bin/activate pip install -e .[dev] pytest ruff check src tests ``` ### 同样基于 AgentField 构建 [所有仓库 →](https://github.com/Agent-Field)
SEC-AF 基于 [AgentField](https://github.com/Agent-Field/agentfield) 构建,这是用于生产级自主 Agent 的开放基础设施。[看看我们还在构建什么 →](https://github.com/Agent-Field) **[Apache-2.0](LICENSE)**
标签:AI安全, AMSI绕过, Chat Copilot, CISA项目, DevSecOps, GraphQL安全, LLM, Maven, PE 加载器, Python, Unmanaged PE, Web报告查看器, 上游代理, 云安全监控, 命令注入, 威胁检测, 开源安全工具, 数据展示, 无后门, 漏洞验证, 红队, 结构化查询, 网络安全, 自动化安全, 计算机取证, 请求拦截, 软件供应链安全, 远程方法调用, 逆向工程平台, 隐私保护, 静态分析