ベンダーから届く脆弱性情報を自社のIT資産台帳と突き合わせて、対応が要るものを選ぶ
公開された脆弱性情報を毎日集め、自社のIT資産台帳と突き合わせて、対応が要るものだけを一覧にします。担当者の作業は、届いた情報を1件ずつ読んで自社に関係あるかを調べることから、絞り込まれた一覧を見て対応を決めることに変わります。
- 利用ツール
- ChatGPT/Claude/Gemini/Make/n8n/Power Automate/Zapier
- 対象業界
- IT・SaaS/医療/自治体/製造/金融
- 対象部門
- 情報システム
- 対象業務
- 分類・仕分け/情報検索
- 主な課題
- 人手が足りない/情報が見つからない/期限・対応漏れが起きる
- AIで行う処理
- エージェント
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- ノーコード連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 担当者が毎朝、脆弱性情報のサイトとメールを確認する
- 新着の情報を1件ずつ開き、対象製品とバージョンを読む
- IT資産管理ツールで、その製品名を検索する
- 出てきた資産のバージョンが、影響範囲に入るかを確認する
- 入っていれば、その資産が外部公開かどうかを構成図で確認する
- 深刻度と公開状況から、対応の要否と緊急度を決める
- 対応が必要なものを、台帳と対応記録に登録する
- 週次で未対応の一覧を上長へ報告する
- 自動毎朝、公開データベースから前日以降の新着を取得する
- 自動ベンダーからの通知メールを受信箱から取り込む
- 自動情報ごとに、対象製品名・影響するバージョン範囲・深刻度・回避策の有無を抽出する
- 自動製品名を自社の台帳の表記に対応づける(別名の辞書を使う)
- 自動台帳の資産のバージョンが、影響範囲に入るかを判定する
- 自動該当した資産について、外部公開の有無と重要度を台帳から引く
- 自動対応が要るものを緊急度順に並べた一覧を作る
- 人担当者が一覧を確認し、対応の期限と担当を決める
- 自動対応状況を記録し、期限前にリマインドする
- 自動「該当なし」と判定した情報も一覧に残し、週次で振り返れるようにする
各工程の詳しい説明を読む
- 担当者が毎朝、脆弱性情報のサイトとメールを確認する
- 新着の情報を1件ずつ開き、対象製品とバージョンを読む
- IT資産管理ツールで、その製品名を検索する
- 出てきた資産のバージョンが、影響範囲に入るかを確認する
- 入っていれば、その資産が外部公開かどうかを構成図で確認する
- 深刻度と公開状況から、対応の要否と緊急度を決める
- 対応が必要なものを、台帳と対応記録に登録する
- 週次で未対応の一覧を上長へ報告する
問題は4つあります。
(a)9割以上が「関係なし」で終わる。 240件のうち、実際に対応が必要なのは月に10〜15件です。残りの225件は、関係ないことを確かめるために時間を使っています。
(b)製品名の表記が一致しない。 脆弱性情報では正式な製品名で書かれますが、台帳には現場の通称で入っていることがあります。検索で出てこないと「使っていない」と判断してしまいます。
(c)バージョンの比較が面倒。 「9.2.0 未満」「8.1.3 から 8.4.2 まで」のような範囲と、台帳の「8.4.1-r2」を突き合わせます。目で比較すると間違えます。
(d)担当者が休むと止まる。 毎日の確認が前提なので、2日空くと数百件たまります。たまると「まとめて後で」になり、実質的に確認されなくなります。
- 【自動】 毎朝、公開データベースから前日以降の新着を取得する
- 【自動】 ベンダーからの通知メールを受信箱から取り込む
- 【自動】 情報ごとに、対象製品名・影響するバージョン範囲・深刻度・回避策の有無を抽出する
- 【自動】 製品名を自社の台帳の表記に対応づける(別名の辞書を使う)
- 【自動】 台帳の資産のバージョンが、影響範囲に入るかを判定する
- 【自動】 該当した資産について、外部公開の有無と重要度を台帳から引く
- 【自動】 対応が要るものを緊急度順に並べた一覧を作る
- 【人】 担当者が一覧を確認し、対応の期限と担当を決める
- 【自動】 対応状況を記録し、期限前にリマインドする
- 【自動】 「該当なし」と判定した情報も一覧に残し、週次で振り返れるようにする
自動化されるのは「集める」「読む」「突き合わせる」「並べる」の4つです。残るのは「いつまでに誰が対応するか」の判断です。
10番目が重要です。 「該当なし」を捨てないでください。台帳の不備で見落とした場合、それを後から見つける唯一の手がかりになります。
02今回想定するシステム構成
【毎朝】n8n の Schedule Trigger │ ├──▶ JVN iPedia API ── 前日以降の新着を取得 │ ├──▶ ベンダー通知メール ── 受信箱から取り込み │ ▼ Claude API ── 対象製品名/影響バージョン範囲/深刻度/回避策の抽出 │ ▼ 製品名の名寄せ(別名辞書) │ ▼ IT資産台帳 ── 該当する資産の検索 │ ▼ バージョン比較(範囲に入るかの判定。ここは自前の処理) │ ├──▶ 該当あり → 外部公開・重要度を引いて緊急度を計算 │ └──▶ 該当なし → 記録だけ残す │ ▼ 対応要否の一覧(緊急度順)──【人が期限と担当を決める】 │ ▼ 対応台帳へ記録 + 期限前リマインド
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | n8n | Make、Power Automate、Zapier |
| 処理 | Claude API | OpenAI API、Gemini API |
| 台帳 | IT資産管理ツール | スプレッドシート、CMDB |
| 通知 | Microsoft Teams | Slack、電子メール |
n8nを選ぶ理由は2つあります。 1つは、自社のサーバー上で動かせるため、IT資産台帳を外部サービスに出さずに済むことです。もう1つは、毎日決まった時刻に動かす処理と、HTTPで外部のAPIを叩く処理の両方を素直に書けることです。
情報源は公開されているものを使います。JVN iPedia の MyJVN API では、https://jvndb.jvn.jp/myjvn?method=getVulnOverviewList&feed=hnd&... の形で脆弱性対策情報の概要リストが取得でき、keyword cpeName vendorId productId severity rangeDatePublic などで絞り込めます。1回の取得は50件が上限なので、件数が多い日は繰り返し取得します。
03どうやって実装するのか
処理の起点を決める
毎朝決まった時刻に動かします。 n8n の Schedule Trigger では、Seconds / Minutes / Hours / Days / Weeks / Months / Custom (Cron) の7種類から間隔を選べます。Custom (Cron) では「(秒) 分 時 日 月 曜日」の6フィールドで指定でき、先頭の秒は省略できます。
タイムゾーンの設定を最初に確認してください。 n8n のタイムゾーンは、ワークフローに設定があればそれが使われ、なければインスタンスの設定が使われます。セルフホストの既定は America/New York、n8n Cloud では GMT です。既定のままだと、日本時間の朝に動きません。
ベンダーからのメール通知は、専用の受信箱に集めて、同じ実行の中で取り込みます。メールの到着ごとに動かす作りにしません。1日1回にまとめたほうが、重複の処理も一覧の作成も単純になります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 脆弱性情報 | 概要、対象製品、影響バージョン、深刻度、公開日 | JVN iPedia の API |
| ベンダー通知 | 製品ベンダーからのセキュリティ情報 | 専用の受信箱 |
| IT資産台帳 | 資産名、製品名、バージョン、設置場所、外部公開の有無、重要度 | IT資産管理ツール |
| 製品名の別名辞書 | 正式名と社内の通称の対応 | この構成で作る |
| 対応履歴 | 過去に対応した脆弱性と、その判断 | 対応台帳 |
別名辞書がこの構成の中核です。 「Apache HTTP Server」を台帳では「Web サーバ(本番)」と書いている、というずれを吸収します。辞書は最初から完璧である必要はありません。 該当なしと判定された情報を週次で見返し、実は使っていた製品が見つかるたびに足していきます。
データの取得方法を決める
JVN iPedia: MyJVN API の getVulnOverviewList を使い、公開日の範囲で前日以降を取得します。feed=hnd が必須です。1回50件が上限なので、返ってきた件数が上限に達していれば、日付をずらして繰り返します。
ベンダー通知: 主要なベンダーのセキュリティ通知を専用アドレスで購読します。HTMLメールが多いので、本文をテキストに変換してから処理します。
IT資産台帳: 資産管理ツールのAPIまたはCSVエクスポートで、日次に取り込みます。リアルタイムである必要はありませんが、更新頻度は重要です。 月次更新の台帳では、先月導入したサーバーが載っていません。
AIへ渡す前に整形する
- 重複の除去 … 同じ脆弱性が、公開データベースとベンダー通知の両方から届きます。脆弱性の識別子で重複を検出します
- 既知のものの除外 … 過去に判定済みの脆弱性が再度届くことがあります。識別子で過去の判定を引き、変更がなければ処理を飛ばします
- 製品名の正規化 … 大文字小文字、スペース、バージョン番号の付き方をそろえます
- バージョン表記の構造化 … 「8.4.1-r2」を、主バージョン・副バージョン・パッチ・リビジョンに分解します。この分解ができないと比較ができません
- 台帳の突合用インデックス … 台帳を製品名ごとにまとめた表を朝一番に作っておきます。240件それぞれで全件検索すると遅くなります
AIに処理させる
AIと自前の処理で役割を分けます。
自前の処理にさせること: バージョンの範囲比較、緊急度の計算、重複の除去、台帳の検索。バージョン比較をAIにさせないでください。 「8.4.1-r2 は 8.1.3 以上 8.4.2 未満に入るか」は比較演算であって判断ではありません。AIにさせると、まれに誤り、誤ったときに気づけません。
AIにさせること:
| 処理 | 内容 |
|---|---|
| 対象製品とバージョン範囲の抽出 | 文章で書かれた影響範囲を、比較できる形に直す |
| 製品名の候補出し | 自社台帳のどの製品に当たりうるかを候補として挙げる |
| 回避策の有無と内容 | 修正版の適用以外に、設定変更などの回避策があるか |
| 攻撃の前提条件 | 認証が必要か、ローカルからのみか、外部から到達可能か |
| 平易な要約 | 技術者以外の関係者にも分かる1〜2文 |
4つ目が実務上いちばん役に立ちます。 深刻度の数値が高くても、「管理者権限を持つローカルユーザーによる操作が前提」なら緊急度は下がります。この前提条件は本文を読まないと分かりません。
指示内容を固定する
あなたは情報システム部門の運用担当を支援する立場です。
公開された脆弱性情報を読み、自社での対応判断に必要な項目を抽出してください。
【厳守事項】
- 情報に書かれていないことを補わないでください。
影響バージョンの記載がなければ affected_versions を空にしてください。
「おそらく全バージョン」のような推測を入れないでください。
- 自社が影響を受けるかどうかの判断はしないでください。
台帳との突き合わせは後段の処理が行います。
- バージョンの大小を比較しないでください。
範囲の表現をそのまま構造化して返すことだけが役割です。
- 製品名は、情報に書かれた正式名を product_name_official に入れ、
自社台帳の候補は candidates に列挙してください。1つに決めないでください。
- 攻撃の前提条件(認証の要否、到達経路、ユーザー操作の要否)は、
本文に記載がある場合のみ書いてください。記載がなければ null にしてください。
- 回避策は、本文に書かれた内容をそのまま workaround に入れてください。
一般的な対策(ファイアウォールで遮断するなど)を補わないでください。
【脆弱性情報の本文】
{advisory_text}
【自社台帳にある製品名の一覧(同じベンダーのもの)】
{asset_products}
「バージョンの大小を比較しないでください」を明示するのは重要です。 指示しないと、AIは親切に「該当します」と答えます。その答えが正しいかどうかを、人は確かめようがありません。 比較は数値の処理として自前で行い、結果を追跡できる形にします。
出力形式を固定する
{
"advisory_id": "",
"product_name_official": "",
"vendor": "",
"candidates": [
{ "asset_product_name": "", "match_reason": "" }
],
"affected_versions": [
{ "operator": "lt | le | gt | ge | eq | range", "from": "", "to": "" }
],
"severity_score": null,
"attack_prerequisites": {
"authentication_required": null,
"network_reachable": null,
"user_interaction_required": null
},
"workaround": "",
"plain_summary": "",
"extraction_confidence": "high | medium | low"
}
突き合わせの結果は、自前の処理が作ります。
{
"advisory_id": "",
"matched_assets": [
{
"asset_id": "",
"installed_version": "",
"in_range": true,
"externally_exposed": true,
"importance": "high | medium | low"
}
],
"urgency": "immediate | this_week | this_month | monitor",
"match_status": "matched | no_match | not_determinable"
}
match_status に not_determinable を必ず用意します。「台帳に製品名がなかった」と「台帳にあったが該当しなかった」を区別しないと、見落としが起きます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| JVN iPedia | HTTPリクエスト | 脆弱性情報の取得 |
| 専用受信箱 | n8n のメールノード | ベンダー通知の取り込み |
| IT資産管理ツール | API または日次CSV | 台帳の参照 |
| 対応台帳 | データベースまたはスプレッドシート | 判定結果と対応状況 |
| Teams | n8n のコネクタ | 一覧の通知 |
IT資産台帳への書き込みはしません。 脆弱性の対応状況は別の台帳に持ちます。資産台帳を汚すと、資産管理そのものが破綻します。
修正版の適用(パッチ適用)を自動化しません。 これは別の話です。適用のタイミングは、業務への影響と検証の結果で決まります。この構成が扱うのは、適用すべきものを選ぶところまでです。
人が確認する
確認は2種類あります。
1つ目は、該当ありと判定されたものです。 月に10〜15件なので、1件ずつ丁寧に見られます。対応の期限と担当を決めるのは人です。
2つ目は、該当なしと判定されたものの振り返りです。 週に1回、no_match と not_determinable の一覧を見ます。とくに not_determinable(台帳に製品名がなかったもの)は必ず見てください。 別名辞書の不足か、台帳の不備のどちらかです。
確認を速くするための設計が重要です。
- 緊急度順に並べ、
immediateを最上位に出す - 該当した資産名と設置場所を一覧の中に展開する
- 攻撃の前提条件を、深刻度の数値より目立たせる
- 回避策がある場合、その旨を一覧に出す
not_determinableをno_matchと分けて表示する
深刻度の数値だけで並べないでください。 数値が高くても外部から到達できない資産と、数値が中程度でも公開サーバーにある資産では、後者を先に対応します。
例外に対処する
| 起きること | 対応 |
|---|---|
| 台帳に製品名が見つからない | not_determinable として人へ回す。no_match にしない |
| 製品名の候補が複数ある | 候補を並べて人に選ばせる。自動で1つに決めない |
| バージョンの表記が分解できない | in_range を判定せず、人へ回す。推測しない |
| 影響バージョンの記載がない | affected_versions を空にして人へ回す。「全バージョン」と扱わない |
| APIの1回の取得が50件の上限に達した | 日付をずらして繰り返し取得する。取りこぼしを防ぐ |
| 同じ脆弱性が複数の情報源から届く | 識別子で重複を検出し、1件にまとめる |
| 過去に「対応不要」と判断した脆弱性が更新された | 更新日を見て、変わっていれば再度一覧に出す |
| 台帳が古く、先月導入したサーバーが載っていない | 台帳の最終更新日を一覧に表示する。古ければ警告を出す |
| n8n のタイムゾーンが既定のまま | ワークフローのタイムゾーンを日本時間に設定する。セルフホストの既定は America/New York |
| 担当者が休んで数日たまる | 毎日実行しているので、一覧は日付ごとに残る。まとめて見られる形にする |
| 情報源のサイトが応答しない | エラーを記録して翌日に再取得する。取得できなかった日を一覧に明示する |
記録を残す
- 取得した脆弱性情報の原文と、取得日時
- AIが抽出した項目と
extraction_confidence - 突き合わせの結果(
matched/no_match/not_determinable)と、使った台帳のスナップショット日付 - 人が判定を覆したかどうか
- 対応の期限、担当、完了日
- 別名辞書に追加した内容と、そのきっかけ
3つ目の「使った台帳の日付」が重要です。「なぜこの脆弱性を対応不要と判断したのか」を後から問われたときに、当時の台帳を再現できる必要があります。 ISMSの審査ではここが見られます。
保存期間は、自社の情報セキュリティ規程に合わせます。脆弱性対応の記録は、監査の証跡として最低でも3年は残すのが一般的です。
04実装レベルの3段階
最小構成だけでも、10分が6分程度になります。 情報を集めて開く作業と、台帳を検索する作業が消えるためです。 半自動化で6分から4分程度になります。 バージョン比較の手間が消えます。本格構成で3分程度になりますが、別名辞書の整備と対応台帳の作り込みが要ります。 別名辞書は、運用しながら育てるものです。 最初から作り込もうとせず、週次の振り返りで足りないものを足していくほうが早く完成します。
05工数削減シミュレーション
導入後 240件 × 3分 ÷ 60 = 12 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- サーバー・ネットワーク機器・業務ソフトを合わせて200台以上運用しており、IT資産台帳に製品名とバージョンが記録されている企業。情報システム部門が2〜3名で、脆弱性情報の確認が特定の担当者に依存している場合。ISMSやPマークの取得企業で、脆弱性対応の記録を求められている場合。
- 業務システムがすべてSaaSで、自社で管理するサーバーやミドルウェアがない場合。IT資産台帳がなく、何がどのバージョンで動いているか分からない場合。MDR・SOCの外部サービスを利用しており、脆弱性の通知と判断まで委託できている場合。
07最小構成で試す方法
- 直近1週間に公開された脆弱性情報を30件集める
- IT資産台帳から、製品名とバージョンの一覧をCSVで出す
- AIの画面に脆弱性情報と製品名の一覧を貼り、「この情報の対象製品が、一覧のどれに当たる可能性があるかを候補として挙げてください。バージョンの比較はしないでください」と指示する
- 30件のうち、候補が正しく挙がったのが何件かを数える
この検証で見たいのは、製品名の名寄せができるかどうかです。 ここができなければ、後の処理はすべて無意味になります。
判断の目安は次のとおりです。
| 製品名の候補が正しく挙がる率 | 判断 |
|---|---|
| 9割以上 | 自動化する価値がある |
| 7〜9割 | 別名辞書を作ってから始める。辞書を入れれば9割を超える |
| 7割未満 | 台帳の製品名の記載そのものを見直す。この構成より先にやること |
あわせて、台帳の最終更新日を確認してください。 3か月以上前なら、この構成を作る前に台帳の更新の仕組みを整えるべきです。古い台帳と突き合わせても、見落としが減りません。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 製品名が一致せず「使っていない」と判定される | 別名辞書を作る。not_determinable を必ず人が見る |
| AIにバージョン比較をさせて誤る | 比較は自前の処理で行う。 プロンプトで明示的に禁止する |
| 「台帳にない」と「該当しない」が区別できない | match_status を3値にする。この設計が最重要 |
| APIの取得が50件で切れて取りこぼす | 上限に達したら日付をずらして繰り返す |
| n8n が日本時間の朝に動かない | ワークフローのタイムゾーンを設定する。セルフホストの既定は America/New York |
| Cron 式の書式を間違える | 6フィールド(秒 分 時 日 月 曜日)で、秒は省略可。秒を書き忘れると1時間ずれる |
| バージョン「8.4.1-r2」が分解できない | 分解できないものは判定せず人へ回す。推測で比較しない |
| 深刻度だけで並べ、実際の危険度と合わない | 外部公開の有無と攻撃の前提条件を並べ替えに使う |
| 台帳が古く、新しい資産が漏れる | 台帳の最終更新日を一覧に表示し、古ければ警告する |
| 同じ脆弱性が毎日一覧に出続ける | 判定済みを記録し、更新がなければ出さない。更新日を見る |
| 情報源が応答しなかった日に気づかない | 取得できなかった日を一覧に明示する。無言で飛ばさない |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: IT資産台帳(製品名、バージョン、設置場所、外部公開の有無)。これは自社の攻撃可能な面をそのまま表したデータです。
- 台帳を外部に出さない … AIに渡すのは脆弱性情報の本文までとし、資産台帳の全体を外部サービスに送らない設計にしてください。 製品名の候補出しで渡すのは、同じベンダーの製品名の一覧に限定します。バージョンや設置場所は渡しません
- セルフホストを検討する … n8n を自社サーバーで動かせば、台帳の照会と突き合わせは社内で完結します。この構成でセルフホストを選ぶ理由は、機能ではなくここにあります
- 未対応の脆弱性の一覧の扱い … 「まだ直っていない穴の一覧」は、社内でも取り扱いに注意が要ります。閲覧できる範囲を情報システム部門と責任者に限定します
- 学習利用 … 入力を学習に使わないことが契約で保証されるサービスを選びます
- 自動実行してよい範囲 … 修正版の適用を自動化しません。対応すべきものを選ぶところまでが、この構成の範囲です。 適用の判断は業務への影響を見て人が決めます
- 監査証跡 … 判定の根拠と、当時の台帳の状態を残します。ISMSやPマークの審査で求められます
誤りが起きた場合のリスクは、影響のある脆弱性を見落とすことです。これは仕組みの不備というより、台帳の不備から起きます。 not_determinable の件数を毎週見て、減っているかどうかを追ってください。減らないなら、台帳の側に手を入れる必要があります。
10まず何から始めるか
1週目:台帳の状態を確認する
IT資産台帳の最終更新日と、製品名の記載の仕方を確認します。3か月以上更新されていないなら、この構成より先に台帳の更新の仕組みを整えてください。 古い台帳と突き合わせても見落としは減りません。
2週目:30件で名寄せを試す
直近1週間の脆弱性情報30件と、台帳の製品名一覧をAIに渡し、候補が正しく挙がるかを測ります。挙がらなかったものを集めると、それが別名辞書の最初の中身になります。
3〜4週目:毎朝の収集と突き合わせを作る
JVN iPedia からの取得、製品名での検索、バージョン範囲の判定までを作り、毎朝一覧が出る状態にします。担当者1名が1か月使い、10分が何分になるかを実測します。not_determinable の件数を毎日記録してください。
2か月目以降: 攻撃の前提条件の抽出、対応台帳、期限リマインドを足します。並行して、週次の振り返りで別名辞書を育てます。辞書が育つほど not_determinable が減り、それがこの構成の成熟度の指標になります。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
MyJVN API の脆弱性対策情報概要リスト取得が https://jvndb.jvn.jp/myjvn?method=getVulnOverviewList&feed=hnd&... の形で、method と feed が必須パラメータであること。keyword cpeName vendorId productId severity rangeDatePublic などで絞り込めること。1回に返る最大件数が50件であること | JVN iPedia: getVulnOverviewList | 2026-09-22 |
n8n の Schedule Trigger が Seconds / Minutes / Hours / Days / Weeks / Months / Custom (Cron) の7種類の間隔を持つこと。Cron 式が「(秒) 分 時 日 月 曜日」の6フィールドで、秒は省略可能であること。タイムゾーンはワークフローの設定が優先され、なければインスタンスの設定が使われること。セルフホストの既定が America/New York、n8n Cloud が GMT であること | n8n Docs: Schedule Trigger | 2026-09-22 |
脆弱性対応の記録要件は、適用される規格(ISMS、Pマークなど)と自社の情報セキュリティ規程によって異なります。この部分は自社のセキュリティ責任者と審査機関への確認が必要です。 本記事は一次判定を機械化する構成を示したものであり、対応の要否についての最終判断を代替するものではありません。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0151)についてのご相談はこちらから。
