なぜ今、CISA KEVカタログが重要なのか
現代のサイバー攻撃において、脆弱性が公開されてから悪用されるまでの時間は劇的に短縮されています。従来の脆弱性管理では、CVSS(共通脆弱性評価システム)のスコアが高いものから順に対応するのが一般的でした。しかし、CVSSはあくまで脆弱性の「深刻度」を示す指標であり、実際に攻撃者がその脆弱性を狙っているかどうかまでは考慮されていません。
ここで重要なのが、米国サイバーセキュリティ・インフラセキュリティ庁(CISA)が公開している「既知の悪用された脆弱性カタログ(Known Exploited Vulnerabilities Catalog:KEV)」です。これは、実際に悪用が観測された脆弱性のみをリスト化したもので、これを確認することで「自社が今、最も優先して対処すべき脆弱性」を明確に特定できるようになります。
基礎知識:CISA KEVカタログとは
CISA KEVカタログは、以下の基準を満たす脆弱性で構成されています。
1. CVE IDが割り当てられていること
2. 実際に悪用が観測されている証拠があること
3. 具体的な修正ガイダンスが存在すること
このカタログは、米国政府機関に対して対応を義務付けるほどの信頼性と緊急度を持っています。CVSSで「Medium」や「Low」と評価されていても、実際に悪用されているものは、放置すれば重大なセキュリティ事故に直結します。
実装・解決策:自動化による効率的なトリアージ
実務において数千件もの脆弱性を手動でKEVカタログと照らし合わせるのは現実的ではありません。Pythonなどのスクリプトを用いて、自社のスキャン結果(JSONやCSV)とCISAの公開するJSONファイルを突き合わせ、KEV掲載脆弱性を自動抽出する仕組みを作るのが効率的です。
サンプルプログラム:KEV掲載脆弱性の検知スクリプト
以下のサンプルコードは、CISAが提供する最新のKEV JSONデータを取得し、自社のCVEリストと比較して、警戒すべき脆弱性を抽出する基本的なロジックです。
import requests
CISA KEVカタログの公開URL
KEV_URL = “https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json”
def get_kev_list():
“””CISAから最新のKEVリストを取得する”””
response = requests.get(KEV_URL)
data = response.json()
# 脆弱性ID(cveID)を抽出
return [item[‘cveID’] for item in data[‘vulnerabilities’]]
def check_vulnerabilities(my_cve_list):
“””自社の脆弱性リストとKEVリストを比較する”””
kev_list = get_kev_list()
hits = [cve for cve in my_cve_list if cve in kev_list]
if hits:
print(f”警告: 以下の脆弱性は現在悪用が観測されています: {hits}”)
else:
print(“現在、KEVカタログ掲載の脆弱性は検出されませんでした。”)
実行例: 自社のスキャン結果のCVE IDリスト
my_vulnerabilities = [“CVE-2021-44228”, “CVE-2023-12345”]
check_vulnerabilities(my_vulnerabilities)
応用・注意点:現場での運用における勘所
1. PoC公開状況の監視
KEVカタログは「悪用が観測された」ものですが、これに加えて「攻撃コード(PoC)が公開された」脆弱性も優先度を上げる必要があります。KEVとGitHub等の情報を組み合わせることで、より精度の高い優先順位付けが可能です。
2. SSVC(ステークホルダー特化型脆弱性分類)の活用
KEVカタログを「入力情報」として使い、SSVCフレームワークを適用することを推奨します。これは「自社の環境でそのシステムがインターネットに公開されているか」「攻撃が成功した際の影響度はどの程度か」を判断基準にする手法です。
3. 運用上の罠
「KEVに載っていないから安全」と判断するのは禁物です。KEVはあくまで「既に悪用が観測されたもの」のリストであり、ゼロデイ攻撃や、まだ観測されていない悪用まではカバーできません。KEVを「優先度の高いタスク」として活用しつつ、多層防御の基本姿勢を崩さないことが重要です。

コメント