2026年7月21日、Ciscoは、ソースコード内の脆弱性候補を探すことに特化した小型AIモデルAntaresを公開しました。

公開されたのは、次の二つです。

  • Antares-350M
  • Antares-1B

さらに、Antares-3Bも今後公開予定とされています。

Antaresが注目される理由は、単にCiscoが新しいLLMを公開したからではありません。

Antaresは、一般的な会話AIやコード生成AIではなく、次の一つの仕事へ特化しています。

脆弱性の説明を基に、巨大なソースコードの中から、問題が存在する可能性が高いファイルを探す。

例えば、セキュリティ担当者へ次の情報が届いたとします。

CWE-78
OS Command Injectionの可能性がある。

通常、担当者はリポジトリ全体を調査します。

  • shell_exec
  • system
  • exec
  • subprocess
  • Runtime.exec
  • ユーザー入力
  • コマンド組み立て処理

しかし、リポジトリが数千、数万ファイルある場合、問題の位置を特定するだけでも時間がかかります。

Antaresは、ターミナル上でgrep、find、catなどを使い、候補を絞り込みます。

人間のセキュリティ研究者が行うように、次の処理を繰り返します。

  1. CWEの意味を理解する
  2. 関係しそうな文字列を検索する
  3. 候補ファイルを読む
  4. 呼び出し関係を調べる
  5. 仮説が違えば検索方針を変える
  6. 脆弱な可能性が高いファイルを提出する

重要なのは、Antaresが脆弱性を完全に証明するツールではない点です。

また、修正パッチを自動作成するツールでも、攻撃コードを生成するツールでもありません。

Antaresの役割は、人間が優先的に確認すべきファイルを絞ることです。


Antaresのモデル

モデル 状態 想定用途
Antares-350M 公開済み 軽量な検証、研究
Antares-1B 公開済み 実用的なローカル解析
Antares-3B 公開予定 より高い精度

AntaresはIBM Granite 4.0を基盤とし、セキュリティ推論、リポジトリ探索、ターミナル操作へ特化する追加学習が行われています。

学習は大きく二段階です。

  1. 教師あり学習で、セキュリティ知識とターミナル操作を学ぶ
  2. 強化学習で、検索・確認・方針修正の行動を改善する

Antaresは何を入力として受け取るのか

基本的な入力は、次の三つです。

  • 調査対象のリポジトリ
  • CWE番号
  • CWEの一般的な説明

例えば次です。

CWE-78:
Improper Neutralization of Special Elements
used in an OS Command

AntaresはCVEの詳細な攻撃コードを必要としません。

CWEカテゴリの説明から、リポジトリ内を探索します。


Antaresの出力

Antaresが返すのは、脆弱性候補のファイル一覧です。

1. src/commands/runner.py
2. app/services/process.php
3. lib/executor.js

CLIでは、次の形式を利用できるとされています。

  • 人間向け表示
  • JSON
  • SARIF 2.1.0

SARIFはGitHub Code Scanningなどへ取り込める標準形式です。


Antaresが行わないこと

  • 脆弱性の最終確定
  • 攻撃成功の証明
  • PoC生成
  • 自動パッチ作成
  • 本番コードの変更
  • コンプライアンスの最終判定

Antaresが候補として出したファイルは、必ず人間が確認します。


Vulnerability Localization Benchmark

CiscoはAntaresを評価するため、VLoc Benchを公開しました。

構成は次のとおりです。

  • 500タスク
  • 290リポジトリ
  • 147種類のCWE
  • 6種類のパッケージエコシステム

対象には、npm、pip、Maven、Go、Rust、Composerなどが含まれます。

評価では、モデルが提出したファイルと、実際のセキュリティ修正で変更されたファイルを比較します。

重要な結果

Antares-1Bは、1B規模の小型モデルでありながら、多くの大型汎用モデルより高いFile F1を示しました。

ただし、最高性能のモデルでもFile F1は0.229程度です。

500件のうち190件は、評価されたすべてのモデルが解決できませんでした。

つまり、Antaresは非常に興味深い技術ですが、脆弱性検出を完成させたわけではありません。


リポジトリが大きいほど難しい

ベンチマークでは、リポジトリサイズが大きくなると性能が大きく低下しました。

小規模リポジトリと大規模リポジトリでは、性能差が約13倍になったと報告されています。

理由は単純です。

  • 検索すべきファイルが増える
  • 似た名前の処理が増える
  • 呼び出し関係が複雑になる
  • 15回のコマンドでは全体を調べられない
  • 脆弱性が複数ファイルへまたがる

Antaresの安全設計

Antaresは、対象リポジトリをそのまま自由操作するのではありません。

公式CLIでは、解析前に対象ファイルを一時的な読み取り専用スナップショットへコピーします。

さらに次の制限を行います。

  • リポジトリは読み取り専用
  • ネットワークアクセス禁止
  • 外部へ出るシンボリックリンクを除外
  • 許可された読み取りコマンドだけ実行
  • リポジトリ外へ移動できない
  • 認証情報の場所へアクセスできない
  • コマンド回数を制限

リポジトリ内にAIへの命令が埋め込まれている可能性も考慮され、Prompt Injectionパターンの検査と隔離も行う設計です。


利用前の準備

必要なもの

  • Ubuntu 22.04または24.04
  • NVIDIA GPU
  • Python 3.11前後
  • Docker
  • Hugging Faceアカウント
  • Antaresモデルへのアクセス承認

AntaresのHugging Faceリポジトリは公開されていますが、モデルファイルの取得には条件への同意とアクセス申請が必要です。

申請が承認されるまで、モデル本体とCLIの配布ファイルを取得できません。


Hugging Faceへログインする

python3 -m venv antares-env
source antares-env/bin/activate

pip install \
  huggingface_hub \
  transformers \
  accelerate \
  safetensors

ログインします。

hf auth login

Hugging Faceで作成したアクセストークンを入力します。


Transformersでモデルを読み込む

from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
)

MODEL_ID = "fdtn-ai/antares-1b"

tokenizer = AutoTokenizer.from_pretrained(
    MODEL_ID
)

model = AutoModelForCausalLM.from_pretrained(
    MODEL_ID,
    device_map="auto",
    torch_dtype="auto",
)

Antaresは通常のチャットモデルとして使うためのものではありません。

ターミナルツールと組み合わせるエージェントループを前提にしています。


vLLMでOpenAI互換APIを起動する

pip install vllm

サーバーを起動します。

vllm serve \
  fdtn-ai/antares-1b \
  --host 127.0.0.1 \
  --port 8000

外部ネットワークへ直接公開しないでください。

確認します。

curl \
  http://127.0.0.1:8000/v1/models

Antares CLIを取得する

Antares CLIは、独立したGitHubリポジトリではなく、Antares-1BのHugging Face配布物へZIPとして含まれています。

アクセス承認後、Filesタブのassetsディレクトリを確認します。

CLIファイルを取得したら、別の検証ディレクトリへ展開します。

mkdir -p ~/antares-cli
cd ~/antares-cli

unzip ダウンロードしたCLIファイル.zip

内容を確認します。

find . -maxdepth 2 -type f -print

最初にヘルプを表示します。

./antares --help

配布時点のCLI名やオプションは変更される可能性があるため、記事に書かれた古いコマンドをそのまま実行せず、必ず同梱READMEとhelpを確認してください。


最初は計画だけ確認する

Antares CLIには、モデルを呼び出さず、対象リポジトリから調査対象CWEを計画するモードが用意されています。

最初は本実行ではなく、次を確認します。

  • 対象リポジトリ
  • 選択されたCWE
  • 対象ファイル数
  • 除外ファイル
  • スナップショットの範囲

CLIの実際のオプション名は、配布物の--helpで確認します。


安全なサンプルリポジトリを作る

自分で所有するローカルサンプルを使います。

mkdir -p ~/antares-lab/sample-app
cd ~/antares-lab/sample-app

git init

次の学習用コードを作ります。

cat > runner.py <<'PY'
import subprocess


def run_report(filename: str) -> str:
    command = "cat " + filename

    result = subprocess.run(
        command,
        shell=True,
        capture_output=True,
        text=True,
    )

    return result.stdout
PY

このコードは、外部から受け取った文字列をシェルコマンドへ連結しています。

CWE-78の候補になり得ます。

比較用に安全寄りのコードも作ります。

cat > safe_runner.py <<'PY'
from pathlib import Path


def read_report(filename: str) -> str:
    allowed = Path("/tmp/reports").resolve()
    target = (allowed / filename).resolve()

    if allowed not in target.parents:
        raise ValueError("invalid path")

    return target.read_text(encoding="utf-8")
PY

コミットします。

git add .
git commit -m "Add local vulnerability localization sample"

CWE-78を指定して調査する

Antaresへ与える一般的な説明は次です。

CWE-78:
Improper Neutralization of Special Elements
used in an OS Command.

The software constructs all or part of an OS command
using externally influenced input and does not
correctly neutralize special elements.

Antaresが正しく探索すれば、runner.pyを上位候補として挙げる可能性があります。

ただし、一度の結果だけで性能を断定してはいけません。

複数回実行し、次を確認します。

  • 候補順位
  • 探索コマンド
  • 読んだファイル
  • 誤って安全なファイルを選んでいないか
  • 同じ条件で結果が安定するか

Antaresが使う代表的な探索

モデルは、読み取り専用の標準Unixコマンドを利用します。

find . -type f
grep -R "subprocess" .
grep -R "shell=True" .
grep -R "system(" .
sed -n '1,200p' runner.py
cat requirements.txt

これらを固定順に実行するのではなく、途中結果から検索方針を変える点がAntaresの特徴です。


出力を人間が確認する

Antaresが次を返したとします。

1. runner.py
2. safe_runner.py

一位のrunner.pyは妥当ですが、safe_runner.pyまで候補に入った理由を確認する必要があります。

モデルの候補を次のように分類します。

分類 意味
確認済み 人間または別ツールで脆弱性を確認
候補 コードレビューが必要
誤検知 該当CWEではない

SARIFをGitHubへ取り込む

CLIからSARIFを出力した場合、GitHub Code Scanningへアップロードできます。

name: Antares Localization

on:
  workflow_dispatch:

permissions:
  contents: read
  security-events: write

jobs:
  antares:
    runs-on: self-hosted

    steps:
      - uses: actions/checkout@v4

      - name: Run Antares
        run: |
          ./antares \
            [現在のCLIで確認したオプション] \
            --output findings.sarif

      - name: Upload SARIF
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: findings.sarif

GPUとモデルを必要とするため、通常はself-hosted runnerを使用します。

CLIのオプションは公開時点の同梱READMEへ合わせてください。


CIを即失敗させるべきか

Antaresの結果は、確定した脆弱性ではなくファイル候補です。

最初から一件見つかるたびに本番リリースを停止すると、誤検知によって開発が止まる可能性があります。

導入初期は次の運用が適しています。

  1. 結果をSARIFへ登録する
  2. セキュリティ担当者へ通知する
  3. 人間が候補を確認する
  4. 精度を記録する
  5. 信頼できるCWEだけCIゲートへ使う

Antaresと従来型SASTの違い

項目 Antares CodeQL・Semgrep等
方法 AIが探索方針を変更 ルール・データフロー
出力 候補ファイル 行・ルール・経路
再現性 モデル出力に揺らぎ 比較的高い
未知構造への対応 推論できる可能性 ルール範囲に依存
最終判定 人間が必要 人間が必要

AntaresはSASTを置き換えるのではなく、候補探索を補助します。


Antaresの限界

大きなリポジトリが苦手

コマンド回数が限られるため、大規模リポジトリ全体を十分に探索できません。

複数ファイルにまたがる問題が苦手

五つ以上のファイル関係を理解する必要がある脆弱性では、性能が低下します。

パターンが見えやすいCWEに強い

grepで特徴を探しやすい脆弱性では比較的有利です。

一方、権限設計、並行処理、メモリリークなど、意味や状態を深く理解する必要がある問題は難しくなります。

学習データの期限

Antares-1Bのモデルカードでは、学習データの期限は2025年4月10日とされています。

それ以降に登場したフレームワーク、攻撃手法、CVEを知っているとは限りません。

脆弱性を説明しない

現在の主目的はファイル位置の特定です。

なぜ脆弱なのか、どう直すかを十分説明するモデルではありません。


安全に運用するための条件

  • 自社または許可されたコードだけを対象にする
  • 読み取り専用コンテナで実行する
  • コンテナのネットワークを無効化する
  • CPU・メモリ・時間を制限する
  • リポジトリ外をマウントしない
  • SSH鍵や.envを入れない
  • 結果を人間が確認する
  • CLIとモデルを外部公開しない
  • 実行履歴を保存する

Dockerの例:

docker run \
  --rm \
  --network none \
  --read-only \
  --cpus 2 \
  --memory 4g \
  --pids-limit 128 \
  --security-opt no-new-privileges \
  -v "$PWD/repository:/workspace/repo:ro" \
  antares-runner

Antaresは中小企業でも使えるのか

最大の利点は、モデルが小さいことです。

巨大な汎用LLMへソースコードを送らず、社内GPU上で動かせる可能性があります。

次の組織に向いています。

  • ソースコードを社外へ送れない企業
  • 大学・研究機関
  • 自治体・公共機関
  • 小規模なセキュリティチーム
  • 古い業務システムを大量に抱える企業

PHP、Composerもベンチマーク対象のエコシステムに含まれるため、古いPHP業務システムの候補ファイル探索にも応用できる可能性があります。


実務での利用例

CVE対応

  1. 利用しているライブラリにCVEが公開される
  2. CVEからCWEを確認する
  3. 自社改変コードへAntaresを実行する
  4. 候補ファイルを絞る
  5. 人間がコードレビューする

AI生成コードの確認

  1. Claude CodeやCodexがコードを変更する
  2. 変更後リポジトリへAntaresを実行する
  3. 危険なCWE候補を調査する
  4. 候補があればPull Requestへコメントする

古い業務システムの棚卸し

  • コマンドインジェクション
  • パストラバーサル
  • 危険なデシリアライズ
  • SQLインジェクション
  • 認証・権限確認不足

対象CWEごとに候補ファイルを絞り、人間が順番に確認します。


まとめ

Antaresは、Ciscoが公開した脆弱性位置特定専用の小型AIモデルです。

Antares-350MとAntares-1Bが公開され、Antares-3Bも予定されています。

Antaresは次の処理を行います。

  • CWEの説明を理解する
  • 読み取り専用ターミナルでリポジトリを探索する
  • 検索結果を基に方針を変える
  • 脆弱性候補ファイルを順位付けする
  • JSON・SARIFで結果を出す

一方、次は行いません。

  • 脆弱性の最終確定
  • 攻撃コード生成
  • 自動修正
  • 人間の判断の代替

ベンチマーク結果は、小さな専用モデルが巨大な汎用モデルへ匹敵できる可能性を示しています。

しかし、最高性能モデルでも解決できないタスクが多く、大規模リポジトリや複数ファイルの問題は依然として困難です。

Antaresは脆弱性を見つける魔法のスキャナーではありません。人間が確認すべき場所を早く絞る、セキュリティ調査の案内役です。


参考リンク

Antaresは公開直後のため、CLI、モデル配布条件、推奨ハードウェア、オプションは更新される可能性があります。実行前にHugging Faceのモデルカードと同梱READMEを確認してください。

ABOUT ME
Yuusuke
業務システムの要件定義・設計・実装を担当。Python、PHP、JavaScript、VBA、Oracle、MySQLなど、実務と個人開発で検証した内容を発信しています。