Knostic 出品的 OpenAnt 是一款基于 LLM 的开源漏洞发现产品,可帮助防御者主动发现经验证的安全缺陷,同时最大限度地减少误报和漏报。第一阶段负责检测。第二阶段负责攻击。能存活下来的才是真实漏洞。
我们对此产品相当自豪,目前正在就其发现走漏洞披露流程。但请记住,这最初是一个研究项目,部分功能仍处于测试阶段。我们欢迎贡献,让它变得更好。
考虑到 AI 发现的漏洞呈爆炸式增长,我们希望 OpenAnt 能成为帮助开源维护者领先于攻击者的工具——他们可以自己使用它,也可以免费提交自己的仓库进行扫描。
此外,由于 Knostic 专注于保护智能体和编程助手,而非漏洞研究或应用安全,加上我们本身喜爱开源,因此决定以 Apache 2 许可证发布 OpenAnt。另外,你可能听说过 OpenAI 的 Aardvark(现为 Codex Security)和 Anthropic 的 Claude Code Security,我们完全没有与它们竞争的意思。
有关技术细节、局限性和 token 成本,请查看这篇博客文章: https://knostic.ai/blog/openant
要提交你的仓库进行扫描: https://knostic.ai/blog/oss-scan
研究与构思:Nahum Korda。
产品化:Alex Raihelgaus、Daniel Geyshis。
感谢:Michal Kamensky、Imri Goldberg、Gadi Evron、Daniel Cuthbert、Josh Grossman 和 Avi Douglen。
如果你喜欢我们的工作,欢迎了解我们在 Knostic 所做的事情——保护你的智能体和编程助手,防止它们删除你的硬盘和代码,并控制相关的供应链风险,如 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),为每个流水线阶段选择一个提供商(anthropic、openai 或 google),每个提供商只需输入一次 API key。向导会用一次 1-token 请求探测每个唯一的 provider+model 组合,然后写入 ~/.config/openant/config.json。使用 --llm-config 运行扫描:
openant scan /path/to/repo --llm-config my-llm
向导默认值反映了项目对各阶段的推荐配置(检测/验证/可达性审查使用更强的推理模型;上下文、报告和测试生成使用更轻量的模型)——你可以按需覆盖任何选项。
三者都支持工具调用(tool calling),因此任何一个都可以驱动使用智能体工具调用循环的 enhance 和 verify 阶段。
如果你只想要当前各阶段的 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..."}
},
"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"}
}
}
}
提供商接受自定义 base_url,用于兼容 OpenAI / Anthropic 的代理(OpenRouter、vLLM、Bedrock、内部网关)。openant-default 配置(所有阶段均使用 Claude)已内置,无论文件内容如何都始终可用。
OpenAnt 的适配器层是一个精简的 Python 配方——一个实现 LLMAdapter Protocol 的 Python 文件、一个用于契约测试框架的工厂函数,外加一个注册表条目——仅此即可让适配器在手写配置中运行。如果还希望它出现在 openant setup llm 向导中并通过保存前探测,需要在 apps/openant-cli/cmd/setup.go 中添加几个 Go 接触点(受支持的提供商列表、探测 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/ 的托管虚拟环境(首次使用时自动创建)。CLI 在 Linux/macOS 上使用 bin/python,在 Windows 上使用 Scripts\python.exe。PATH 中的 python3 / python。如果以上都无法提供 Python 3.11+,命令将退出并报错,指向 python.org。要重建过期的托管虚拟环境(例如在升级 Python 之后),请删除 ~/.openant/venv/ 并重新运行任意 openant 命令。
OpenAnt 会创建两个目录:
~/.config/openant/ — CLI 配置(config.json)。存储你的 API key、活动项目和偏好设置。文件权限被限制为 0600。~/.openant/ — 项目数据。每个已初始化的项目都会在 ~/.openant/projects/<org>/<repo>/ 下获得一个工作区,其中包含 project.json 和一个存放各提交产物的 scans/ 目录。将 OpenAnt 指向一个代码仓库。-l(language)标志为必填项——使用 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 init 会将新初始化的项目设为活动项目,因此之后的所有命令默认都针对它。
如果你同时处理多个项目,有两种选择:
# Option 1: switch the active project
openant project switch org/repo
openant parse
# Option 2: target a project directly with -p
openant parse -p org/repo
openant project list # shows all projects, marks active
openant project show # details of active project
openant project switch <org/repo> # switch active project
以下事项按无特定顺序列出:
openant setup llm 中,还需添加少量 Go 向导/探测接触点)。降低本地/私有化部署推理的门槛。以上任何一项都欢迎提交 PR——如果范围不小,请先开一个 issue,以便你在动手之前我们先对齐。
本项目采用 Apache 2 许可证。详情请参阅 LICENSE 文件。
本项目仅用于防御和研究目的。OpenAnt 仍处于研究阶段,请谨慎使用,风险自负。Knostic、OpenAnt 及其相关的开发人员、研究人员和维护者不对因使用本工具而产生的任何滥用、损害或后果承担任何责任。
只扫描你拥有或明确获准测试的代码。如果你通过合法途径在他人的项目中发现了漏洞,请遵循协同漏洞披露(coordinated vulnerability disclosure)实践,在公开之前先向维护者报告。
| 提供商类型 | API key 获取地址 | 备注 |
|---|
anthropic | console.anthropic.com | 参考适配器。不包含在 Claude Pro / Max 订阅中——需单独计费。 |
openai | platform.openai.com | 不包含在 ChatGPT / Codex 订阅中——需单独计费。 |
google | aistudio.google.com | 不包含在 Gemini Advanced 中——需单独计费。 |