来自 Knostic 的 OpenAnt 是首个基于 LLM 的开源漏洞发现产品(现在称为 harness),帮助防御者主动发现经过验证的安全缺陷,同时最大限度地减少误报和漏报。阶段 1 检测。阶段 2 攻击。存活下来的才是真实的。
请记住,这最初是一个研究项目,随着我们开发新功能,我们经常将其作为 beta 版本发布。我们欢迎贡献。
您可以在 arXiv 上找到我们关于构建 OpenAnt 的研究论文:OpenAnt: LLM-Powered Vulnerability Discovery Through Code Decomposition, Adversarial Verification, and Dynamic Testing,作者为 Nahum Korda 和 Gadi Evron。
当我们首次发布 OpenAnt 时,这是 readme 中的一个相关问题,因为许多其他 harness 已经发布。我们仍然希望,随着 AI 发现的漏洞激增,OpenAnt 能帮助开源维护者领先于攻击者,让他们可以自己使用它。或者免费提交他们的仓库进行扫描。
还有一个事实是,Knostic 的重点是保护 agent 和编码助手,而不是漏洞研究或应用安全,而且我们喜欢开源,所以我们决定在 Apache 2 许可证下发布 OpenAnt。 此外,您可能听说过 OpenAI 的 Aardvark(现为 Codex Security)和 Anthropic 的 Claude Code Security,我们完全没有与它们竞争的意图。
有关技术细节、限制和 token 成本,请查看这篇博客文章: https://knostic.ai/blog/openant
要提交您的仓库进行扫描: https://knostic.ai/blog/oss-scan
维护者和研究:Gadi Evron
原始研究、构思和原始原型:Nahum Korda。 原始产品化:Alex Raihelgaus、Daniel Geyshis。
感谢:Michal Kamensky、Imri Goldberg、Daniel Cuthbert、Josh Grossman 和 Avi Douglen。
如果您喜欢我们的工作,请了解我们在 Knostic 所做的工作,以保护您的 agent 和编码助手,防止它们删除您的硬盘和代码,并控制相关的供应链风险,如 MCP 服务器、扩展和技能。
构建 CLI 二进制文件(需要 Go 1.25+):
cd apps/openant-cli && make build
这会编译 Go 源代码并将二进制文件输出到 apps/openant-cli/bin/openant。
将其符号链接到您的 PATH 中,以便您可以从任何位置运行 openant:
ln -sf "$(pwd)/apps/openant-cli/bin/openant" /usr/local/bin/openant
注意:从仓库根目录运行此命令,以便 $(pwd) 解析为正确的绝对路径。
OpenAnt 将每个流水线阶段路由到可配置的(provider, model)对。最快的路径是交互式向导:
openant setup llm
您为配置命名(例如 my-llm),为每个流水线阶段选择一个 provider(以下任何随附的适配器),每个 provider 输入一次其 API 密钥(Bedrock 改用 AWS 凭证链——将密钥留空),向导会在写入 ~/.config/openant/config.json 之前,用 1-token 请求探测每个唯一的 provider+model 对。使用 --llm-config 对其运行扫描:
openant scan /path/to/repo --llm-config my-llm
向导默认值反映了项目的各阶段推荐(检测/验证/可达性审查使用更强的推理模型;上下文、报告和测试生成使用更轻量的模型)——可根据喜好覆盖任何答案。
| Provider 类型 | API 密钥来源 | 备注 |
|---|---|---|
anthropic | console.anthropic.com | 参考适配器。不包含在 Claude Pro / Max 订阅中——单独计费。 |
openai | platform.openai.com | 不包含在 ChatGPT / Codex 订阅中——单独计费。 |
google | aistudio.google.com | 不包含在 Gemini Advanced 中——单独计费。 |
bedrock | —(AWS 凭证链) | AWS Bedrock 上的 Claude。没有 api_key:凭证来自 AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY 环境变量或 ~/.aws 配置文件,区域来自 AWS_REGION。模型 ID 是推理配置文件(us.anthropic.claude-sonnet-4-6、global.anthropic.claude-haiku-4-5-20251001-v1:0 等)——在 Bedrock 控制台的 "Model access" 下启用它们,并使用 aws bedrock list-inference-profiles 列出它们。由 openant setup llm 提供(将 API 密钥留空——AWS 凭证链,跳过探测)——完整指南:utilities/llm/providers/BEDROCK.md。 |
openrouter | openrouter.ai | 使用一个密钥和一个预付余额访问多个 provider 的网关(也会读取 OPENROUTER_API_KEY)。模型 ID 是 vendor/model 形式的 slug(anthropic/claude-sonnet-4.6、openai/gpt-4o-mini 等)——在 openrouter.ai/models 浏览它们。由 openant setup llm 提供(将 base URL 留空以使用 OpenRouter 默认值)——完整指南:utilities/llm/providers/OPENROUTER.md。 |
ollama | —(本地服务器) | 通过 Ollama 使用本地模型。没有 api_key:将其留空(会自动发送占位符);base URL 默认为 http://localhost:11434/v1。必须先拉取模型(ollama pull <model>);模型 ID 正是 ollama list 显示的内容。本地推理是免费的——$0 成本报告。由 openant setup llm 提供——完整指南:utilities/llm/providers/OLLAMA.md。 |
它们都支持工具调用,因此其中任何一个都可以驱动使用 agentic 工具使用循环的 enhance 和 verify 阶段。对于 Ollama,请为这些阶段选择支持工具的模型——非常小的本地模型可能无法可靠地处理工具调用。
如果您只想要当前的各阶段 Claude 默认值,而不需要其他任何东西,请跳过向导:
openant set-api-key sk-ant-...
openant scan /path/to/repo
这会使用内置的 openant-default 配置(编译到二进制文件中,不需要 config.json)——检测阶段使用 Claude Opus 4.6,其余阶段使用 Sonnet 4。
向导会为您写入 ~/.config/openant/config.json,但您也可以直接编辑它。每个 llm-config 必须列出所有七个流水线阶段:
{
"$schema_version": 2,
"default_llm": "my-llm",
"llm_providers": {
"anthropic": {"type": "anthropic", "api_key": "sk-ant-..."},
"openai": {"type": "openai", "api_key": "sk-proj-..."},
"google": {"type": "google", "api_key": "AIza...", "request_timeout": 600}
},
"llm_configs": {
"my-llm": {
"app_context": {"provider": "openai", "model": "gpt-4o-mini"},
"llm_reach": {"provider": "anthropic", "model": "claude-opus-4-6"},
"enhance": {"provider": "openai", "model": "gpt-4o-mini"},
"analyze": {"provider": "anthropic", "model": "claude-opus-4-6"},
"verify": {"provider": "anthropic", "model": "claude-opus-4-6"},
"dynamic_test": {"provider": "google", "model": "gemini-2.0-flash"},
"report": {"provider": "google", "model": "gemini-2.0-flash"}
}
}
}
llm_providers[name].request_timeout(秒,正整数或 null)设置适配器的每请求 HTTP 超时——由 google provider 类型使用(唯一一个 SDK 默认无限制的类型);其他类型如果设置了它,会在启动时大声警告。
Provider 接受自定义 base_url 用于 OpenAI 兼容 / Anthropic 兼容代理(vLLM、Bedrock、内部网关);OpenRouter 有自己的第一类 openrouter provider 类型。openant-default 配置(所有阶段使用 Claude)是内置的,无论文件内容如何都始终可用。
OpenAnt 的适配器层是一个小型 Python 配方——一个实现 LLMAdapter Protocol 的 Python 文件,一个用于契约测试 harness 的工厂,加上一个注册表条目——仅此就足以从手动编写的配置运行适配器。要让它也由 openant setup llm 向导提供并通过其保存前探测,请在 apps/openant-cli/cmd/setup.go 中添加一些 Go 接触点(支持的 provider 列表、一个探测 case、各阶段默认模型映射)以及一个 Go 探测函数。一旦接入,12 个契约测试会自动针对您的适配器运行。完整配方请参见 docs/features/llm-providers/HOW_TO_ADD_AN_ADAPTER.md。
OpenAnt 的解析、增强、分析和报告代码是 Python 3.11+。Go CLI 按以下顺序选择解释器:
OPENANT_PYTHON 环境变量(将其设置为固定特定解释器——例如 OPENANT_PYTHON=python3.11)。~/.openant/venv/ 的托管 venv(首次使用时自动创建)。CLI 在 Linux/macOS 上使用 bin/python,在 Windows 上使用 Scripts\python.exe。PATH 上的 python3 / python。如果都没有产生 Python 3.11+,命令会退出并报错,指向 python.org。要重建过时的托管 venv(例如升级 Python 后),请删除 ~/.openant/venv/ 并重新运行任何 openant 命令。
OpenAnt 创建两个目录:
~/.config/openant/ — CLI 配置(config.json)。存储您的 API 密钥、活动项目和偏好设置。文件权限限制为 0600。~/.openant/ — 项目数据。每个初始化的项目在 ~/.openant/projects/<org>/<repo>/ 下获得一个工作区,包含 project.json 和一个 scans/ 目录,其中有每次提交的输出。将 OpenAnt 指向一个仓库。-l 标志(语言)是必需的——使用 go 或 python。
# Remote — clones the repo
openant init <repo-url> -l go
# Remote — pin to a specific commit
openant init <repo-url> -l go --commit <sha>
# Local — references the directory in-place
openant init <path-to-repo> -l go --name <org/repo>
这会创建一个项目工作区并将其设置为活动项目。所有后续命令自动对活动项目操作——不需要路径参数。
每一步从项目的扫描目录中获取上一步的输出:
openant parse
openant enhance
openant analyze
openant verify
openant build-output
openant report -f summary
或者用一个命令运行整个流水线:
openant scan --verify
openant scan——以及逐步运行时的每个步骤动词(analyze、verify 等)——
在发现漏洞时退出 1——这是工具在工作,而不是失败。契约: