増え続けるCVE、うちのサーバーは大丈夫?AIで自動評価を試みた3パターン比較

こんにちは、ネットアシスト運用チームのhaokiです。

この記事では、増え続けるCVEに対して、うちのサーバーが影響を受けるかをAIで判断する「CVE 自動評価」を3つのパターンで検証します。

NVDやJVNでは毎日のように新しいCVEが公開されています。「自分のサーバーに影響があるか」を確認・評価する作業は件数が増えるほど工数がかさみます。

今回は さくらのAI EngineClaude Code CLI を使って、CVEの自動評価を試みました。結論から言うと、それぞれに得意・不得意があり、組み合わせ方によって使い道が変わります。実際に試してわかったことをそのまま書きます。

目次

試した構成

さくらのクラウド上に AlmaLinux 8.9 のサーバーを立て、3つのパターンを検証しました。

  1. さくらのAI Engine(RAG)でCVE評価
  2. Claude Code CLI + Anthropic API でCVE評価
  3. Claude Code CLI + LiteLLM + さくらのAI Engine(国内完結を目指す)

環境のセットアップ

さくらのクラウドでサーバーを作成

  • OS:AlmaLinux 8.9
  • メモリ:2GB
  • ホスト名:cve-check-demo
[user@local ~]$ ssh root@xxx.xxx.xxx.xxx
[root@localhost ~]# hostnamectl set-hostname cve-check-demo
[root@cve-check-demo ~]#

Python 3.9とライブラリを入れます。AlmaLinux 8.9のデフォルトはPython 3.6で古いため、Python 3.9を明示的にインストールする必要があります。

[root@cve-check-demo ~]# dnf install -y python39
[root@cve-check-demo ~]# python3.9 -m pip install requests openai

さくらのAI Engineのセットアップ

コントロールパネルの左メニューから「さくらのAI Engine」を選択し、初期登録を完了します。「アカウントトークン」からトークンを発行して控えておきます。

注意:RAGのドキュメント登録は基盤モデル無償プランでも課金対象です。登録したドキュメントを削除するまで月額課金が継続するので、検証後は必ず削除してください。

[root@cve-check-demo ~]# export SAKURA_TOKEN="your_token_here"

パターン1:さくらのAI Engine(RAG)でCVE評価

サーバー構成情報をRAGに登録

サーバーのパッケージ情報を収集してRAGに登録します。

[root@cve-check-demo ~]# cat << 'EOF' > /root/register_to_rag.sh
#!/bin/bash
SAKURA_TOKEN="${SAKURA_TOKEN}"
OUTPUT="/tmp/server_info.txt"

echo "=== OS情報 ===" > $OUTPUT
cat /etc/redhat-release >> $OUTPUT
uname -r >> $OUTPUT

echo "=== OpenSSHバージョン ===" >> $OUTPUT
rpm -q openssh-server >> $OUTPUT

echo "=== インストール済みパッケージ ===" >> $OUTPUT
rpm -qa >> $OUTPUT

curl --request POST \
  --url https://api.ai.sakura.ad.jp/v1/documents/upload/ \
  --header "Authorization: Bearer ${SAKURA_TOKEN}" \
  --header 'Content-Type: multipart/form-data' \
  --form "file=@${OUTPUT}" \
  --form "name=cve-check-demo-$(date +%Y%m%d)" \
  --form "model=multilingual-e5-large" \
  --form "chunk_size=512"
EOF
chmod +x /root/register_to_rag.sh
/root/register_to_rag.sh

正常に登録されるとこのようなレスポンスが返ります。

{"id":"73e24ef2-...","status":"pending","name":"cve-check-demo-20260520",...}

コントロールパネルのドキュメント一覧で available になるまで1〜2分待ちます。

ここで1つハマりポイントがありました。chunk_size は256〜512の間でなければならず、1行だけのファイルはチャンク分割できずエラーになります。登録するドキュメントはある程度の量が必要です。

CVE評価スクリプトを実行

[root@cve-check-demo ~]# python3.9 -c "
import requests, json, os

SAKURA_TOKEN = os.environ['SAKURA_TOKEN']

def get_cve_description(cve_id):
    url = 'https://services.nvd.nist.gov/rest/json/cves/2.0'
    res = requests.get(url, params={'cveId': cve_id}, timeout=10)
    vuln = res.json()['vulnerabilities'][0]['cve']
    return vuln['descriptions'][0]['value']

def evaluate_cve(cve_id, description):
    url = 'https://api.ai.sakura.ad.jp/v1/documents/chat/'
    headers = {'Authorization': f'Bearer {SAKURA_TOKEN}', 'Content-Type': 'application/json'}
    payload = {
        'model': 'multilingual-e5-large',
        'chat_model': 'gpt-oss-120b',
        'query': f'登録されたサーバーの構成情報をもとに、{cve_id}の影響を評価してください。\n\n{description}\n\n1.影響の有無 2.判断理由 3.推奨対策',
        'top_k': 5, 'threshold': 0.3, 'distance_type': 'cosine'
    }
    return requests.post(url, headers=headers, json=payload).json()

cve_id = 'CVE-2024-6387'
desc = get_cve_description(cve_id)
result = evaluate_cve(cve_id, desc)
print(result['answer'])
"

結果と評価

RAGはOpenSSH 8.0p1のインストールを検出しましたが、「CVE-2024-6387が8.0p1に影響するかどうか判断できない」という回答になりました。

RAGに登録されているのはサーバーの構成情報だけで、「CVE-2024-6387の影響バージョンは8.5p1〜9.7p1」という知識はRAGに含まれていないためです。CVE情報もあわせてRAGに登録すれば改善できますが、運用として現実的かは疑問が残ります。

観点評価
データの国内完結
CVE影響判断の精度△ バージョン範囲の知識がない
セットアップの手間RAG登録が必要

パターン2:Claude Code CLI + Anthropic API

インストールと起動

[root@cve-check-demo ~]# curl -fsSL https://rpm.nodesource.com/setup_18.x | bash -
[root@cve-check-demo ~]# dnf install -y nodejs
[root@cve-check-demo ~]# npm install -g @anthropic-ai/claude-code
[root@cve-check-demo ~]# export ANTHROPIC_API_KEY="your_anthropic_api_key"
[root@cve-check-demo ~]# claude

CVE-2024-6387の評価

❯ このサーバーにインストールされているOpenSSHのバージョンを確認して、
  CVE-2024-6387(regreSSHion)の影響を受けるか評価してください。

Claude Codeは自分でコマンドを実行してバージョンを確認し、次のように回答しました。

$ rpm -q openssh openssh-server
openssh-8.0p1-19.el8_8.x86_64
openssh-server-8.0p1-19.el8_8.x86_64

結論: 影響を受けません(Not Affected)

CVE-2024-6387 は OpenSSH 8.5p1〜9.7p1 に存在する脆弱性です。
本サーバーの 8.0p1 には該当コードが存在しません。
Red Hat / AlmaLinux 8 系は公式に「Not Affected」とアナウンスされています。

最新CVE(Copy Fail / CVE-2026-31431)を試す

知識カットオフ以降の新しいCVEについてはどうか。CVE番号だけで聞くとこう返ってきます。

❯ 最近話題のCopy Fail(CVE-2026-31431)について評価してください。

この CVE 番号について私の知識で裏付けが取れません。
ハルシネーションになるため、URLなしでの評価は実施しません。
一次情報のURLをご提供ください。

NVDのURLを渡すと、自分でAPIを叩いて情報を取得し、カーネルモジュールの有無まで確認した上で評価しました。「algif_aead モジュールが存在しないため実質影響なし」という判断で、ブラックリスト設定のコマンドまで提案してくれました。

観点評価
データの国内完結× Anthropic APIに飛ぶ
CVE影響判断の精度◎ モジュール有無まで確認
ハルシネーション耐性◎ 知らないことは正直に言う
セットアップの手間APIキー1つで動く

パターン3:Claude Code CLI + LiteLLM + さくらのAI Engine

Claude Codeの操作感を保ちながら、バックエンドをさくらのAI Engineに向けることで国内完結を目指しました。LiteLLMをプロキシとして挟み、Anthropic APIフォーマットをOpenAI互換フォーマットに変換する構成です。

[root@cve-check-demo ~]# pip3.9 install 'litellm[proxy]'
[root@cve-check-demo ~]# OPENAI_API_KEY="${SAKURA_TOKEN}" \
  litellm --model openai/Qwen3-Coder-30B-A3B-Instruct \
    --api_base https://api.ai.sakura.ad.jp/v1 \
    --port 4000 &

[root@cve-check-demo ~]# export ANTHROPIC_BASE_URL=http://localhost:4000
[root@cve-check-demo ~]# export ANTHROPIC_API_KEY=dummy
[root@cve-check-demo ~]# export ANTHROPIC_DEFAULT_SONNET_MODEL=Qwen3-Coder-30B-A3B-Instruct
[root@cve-check-demo ~]# claude

LiteLLMの起動自体は成功し、Claude Codeの画面にもモデル名が表示されました。ところが実際にプロンプトを投げると次のエラーが出ました。

Tool use is not supported in Responses API without Harmony None

Claude CodeはAnthropicの独自ツールコールフォーマットを使っており、さくらのAI EngineのOSSモデルはこれに対応していませんでした。Claude Codeの「自分でコマンドを実行する」機能がそもそも動かないため、この構成は現時点では実用的ではありません。

観点評価
データの国内完結△ LiteLLMはVM上で動くが…
CVE影響判断の精度× ツールコール非対応で動作不可
セットアップの手間LiteLLM + 環境変数の設定が必要

まとめ

3パターンを試した結果を整理します。

さくらのAI Engine RAGClaude Code + AnthropicClaude Code + さくら
国内完結×× (現時点)
CVE評価精度動作不可
最新CVE対応URL渡せば可URL渡せば可動作不可
セットアップRAG登録が必要シンプル複雑

CVE評価の精度と使い勝手だけで見ると Claude Code + Anthropic API が圧倒的に優れています。自分でコマンドを実行してバージョンを確認し、ハルシネーションを避けながら根拠のある評価を返す動作は、セキュリティ用途として実用的です。

ただし Anthropic API はデータが国外に出ます。顧客のサーバー構成情報を扱う場合はこれが制約になります。さくらのAI Engine は国内完結という点で優位性がありますが、Claude Code のエージェント機能と組み合わせることは現時点では難しく、シンプルなRAGとしての用途が現実的です。

「国内完結でClaude Code相当のエージェント体験を得る」という理想には、OSSモデル側のツールコール対応が進むまで待つ必要がありそうです。さくらのAI EngineのモデルラインナップやAPI仕様の進化に引き続き注目していきます。

さくらのクラウドを使ったサーバーの監視・運用体制の整備についてご相談がある方は、ぜひネットアシストにご連絡ください。

それではまた!

参考リンク

お問い合わせ

この記事をシェアする
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ネットアシスト運用チームのhaokiです。

【取得資格】
AWS Certified Solutions Architect - Associate
LPIC level2
Cisco Certified Network Associate Routing and Switching
さくらのクラウド検定

目次