
KnosticのOpenAntは、オープンソースのLLMベース脆弱性発見製品のリーダーであり、防御側が検証済みのセキュリティ欠陥を積極的に発見できるよう支援し、誤検知と検出漏れの両方を最小限に抑えます。ステージ1は検出、ステージ2は攻撃です。生き残ったものが本物です。
Knostic による OpenAnt は、初のオープンソース LLM ベースの脆弱性発見・修復製品(現在はハーネスと呼ばれています)であり、防御側が誤検知と検知漏れの両方を最小限に抑えながら、検証済みのセキュリティ上の欠陥をプロアクティブに発見することを支援します。ステージ 1 は検出します。ステージ 2 は攻撃します。生き残ったものが本物です。
これは研究プロジェクトとして始まったものであり、新しい機能を開発する際にはベータ版としてリリースすることが多いことを覚えておいてください。コントリビューションを歓迎します。
OpenAnt の構築に関する研究論文は arXiv でご覧いただけます: OpenAnt: LLM-Powered Vulnerability Discovery Through Code Decomposition, Adversarial Verification, and Dynamic Testing、著者は Nahum Korda と Gadi Evron です。
これは OpenAnt を最初にリリースしたときの readme にあった関連する質問です。なぜなら、他にも多くのハーネスがリリースされているからです。AI によって発見される脆弱性が爆発的に増える中で、OpenAnt がオープンソースのメンテナー自身が使用して攻撃者より先手を打つのに役立つこと、あるいは無償でリポジトリをスキャンに提出できることを、私たちは今でも願っています。
また、Knostic の焦点は脆弱性研究やアプリケーションセキュリティではなく、エージェントとコーディングアシスタントの保護にあり、私たちはオープンソースが好きなので、OpenAnt を Apache 2 ライセンスの下でリリースすることにしました。 さらに、OpenAI の Aardvark(現在の Codex Security)や Anthropic の Claude Code Security について聞いたことがあるかもしれませんが、私たちはそれらと競合する意図は一切ありません。
技術的詳細、制限事項、トークンコストについては、こちらのブログ記事をご覧ください: 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 で私たちが行っていることをチェックしてください。エージェントとコーディングアシスタントを保護し、ハードドライブやコードの削除を防ぎ、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)、パイプラインのフェーズごとにプロバイダーを選択し(以下の同梱アダプターのいずれか)、プロバイダーごとに API キーを一度入力し(Bedrock は代わりに AWS 認証情報チェーンを使用するため、キーは空欄のままにします)、ウィザードは ~/.config/openant/config.json を書き込む前に、一意のプロバイダー+モデルのペアごとに 1 トークンのリクエストでプローブします。--llm-config を指定してスキャンを実行します:
openant scan /path/to/repo --llm-config my-llm
Wizard のデフォルトは、プロジェクトのフェーズごとの推奨事項を反映しています(検出 / 検証 / 到達可能性レビューにはより強力な推論モデル、コンテキスト、レポート、テスト生成にはより軽量なモデル)— どの回答も好みに応じて上書きできます。
| プロバイダータイプ | 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 | 1 つのキーと 1 つの前払い残高で多くのプロバイダーへのゲートウェイ (また OPENROUTER_API_KEY も読み取ります)。モデル ID は vendor/model スラッグ (anthropic/claude-sonnet-4.6、openai/gpt-4o-mini、...) です — openrouter.ai/models で閲覧できます。openant setup llm で提供されます (ベース URL は OpenRouter のデフォルトを使用するため空欄のままにしてください) — 完全なガイド: utilities/llm/providers/OPENROUTER.md。 |
ollama | — (ローカルサーバー) | Ollama 経由のローカルモデル。api_key は不要: 空欄のままにしてください (プレースホルダーが自動的に送信されます)。ベース URL はデフォルトで http://localhost:11434/v1 です。モデルは事前にプルする必要があります (ollama pull <model>)。モデル ID は ollama list に表示されるものとまったく同じです。ローカル推論は無料です — $0 のコスト報告。openant setup llm で提供されます — 完全なガイド: utilities/llm/providers/OLLAMA.md。 |
これらはすべてツール呼び出しをサポートしているため、エージェント型ツール使用ループを使用する 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 は 7 つのパイプライン フェーズをすべて列挙する必要があります:
{
"$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 プロバイダータイプ(SDK のデフォルトが無制限である唯一のタイプ)によって消費されます。他のタイプでは、これが設定されていると起動時に大きな警告が表示されます。
プロバイダーは OpenAI 互換 / Anthropic 互換プロキシ(vLLM、Bedrock、内部ゲートウェイ)用のカスタム base_url を受け付けます。OpenRouter には独自のファーストクラスの openrouter プロバイダータイプがあります。openant-default 設定(全フェーズで Claude)は組み込みで、ファイルの内容に関係なく常に利用可能です。
OpenAnt のアダプター層は小さな Python レシピです — LLMAdapter Protocol を実装する Python ファイル 1 つ、コントラクトテストハーネス用のファクトリー 1 つ、そしてレジストリエントリ 1 つ — これだけで、手書きの設定からアダプターを実行するのに十分です。さらに openant setup llm ウィザードで提供され、保存前プローブに合格するようにするには、apps/openant-cli/cmd/setup.go にいくつかの Go タッチポイント(サポート対象プロバイダーリスト、プローブの case、フェーズごとのデフォルトモデルマップ)と Go プローブ関数を追加します。アダプターを組み込むと、12 個のコントラクトテストが自動的に実行されます。
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 は 2 つのディレクトリを作成します: