脆弱性管理

CWE(Common Weakness Enumeration) しーだぶりゅーいー

脆弱性セキュリティCVEOWASPセキュアコーディング脆弱性分類
CWEについて教えて

簡単に言うとこんな感じ!

ソフトウェアの「バグの種類図鑑」だよ!「SQLインジェクション」「バッファオーバーフロー」みたいな、セキュリティ上の弱点パターンに番号をつけて整理したリストなんだ。世界共通の”弱点カタログ”ってこと!


CWEとは

CWE(Common Weakness Enumeration) とは、ソフトウェアやハードウェアに存在するセキュリティ上の「弱点の種類」を体系的に分類・番号付けした共通リストのことです。米国の非営利団体 MITRE が管理しており、NISTやDHS(米国国土安全保障省)の支援のもと、世界中のセキュリティ専門家が活用しています。

たとえば「パスワードをハードコーディングしてしまう」という弱点は CWE-259、「SQLクエリに外部入力をそのまま組み込んでしまう」は CWE-89 というように、弱点の”パターン”ごとに一意の番号が割り当てられています。これにより、開発チームや発注者が「この製品はCWE-79(クロスサイトスクリプティング)のリスクに対処できているか?」という共通言語で話せるようになります。

CVE(具体的な脆弱性の事例)が「実際に起きたインシデントの記録」だとすると、CWEは「どんなミスがその原因になりやすいか」という根本原因の分類です。開発段階でCWEを意識することで、脆弱性が生まれる前に予防できます。


CWEの構造と分類

CWEは単なるリストではなく、階層ツリー構造で整理されています。大きな概念から具体的なコードレベルの弱点まで、4つのレベルで分類されています。

レベル名称説明
1Pillar(柱)最も抽象的な大分類CWE-664: リソース管理の不備
2Class(クラス)技術に依存しない中分類CWE-404: リソースの不適切な解放
3Base(ベース)修正・検出ができる粒度CWE-401: メモリリーク
4Variant(バリアント)言語・技術に依存した詳細CWE-775: ファイルディスクリプタのリーク

覚え方:CWEとCVEの違い

CWE = 弱点の種類(Why)、CVE = 実際の脆弱性(What)」と覚えよう!

  • CWE(Common Weakness Enumeration)→ “なぜ脆弱性が生まれるか”のパターン集
  • CVE(Common Vulnerabilities and Exposures)→ “実際に発見された脆弱性”の事例集

料理に例えると、CWEは「食中毒を起こしやすい調理ミスの種類リスト」、CVEは「○月○日に△△レストランで発生した食中毒事件」といったイメージです。

よく知られているCWEトップ例(CWE Top 25)

MITREは毎年「最も危険なソフトウェアの弱点トップ25」を公表しています。

順位CWE番号弱点名身近な例
1位CWE-79クロスサイトスクリプティング(XSS)Webフォームに悪意あるスクリプト埋め込み
2位CWE-787境界外書き込みバッファオーバーフローの一種
3位CWE-89SQLインジェクションDBへの不正コマンド挿入
4位CWE-416解放後使用(Use After Free)解放済みメモリへのアクセス
5位CWE-78OSコマンドインジェクション外部入力によるOSコマンド実行

歴史と背景

  • 2005年 — MITREがCWEプロジェクトを開始。当時はセキュリティ専門家の間でも「脆弱性の根本原因」について共通の言語がなかった
  • 2008年 — CWE 1.0として正式公開。初期リリース時点で約700件の弱点を収録
  • 2011年 — 「CWE/SANS Top 25 Most Dangerous Software Errors」を初公開。開発者向けの教育用途に広がる
  • 2014年 — ハードウェアの弱点も扱う範囲に拡張開始。組み込みシステムやIoT機器への対応が始まる
  • 2019年 — 現在の形式「CWE Top 25」として年次更新が定例化。CVEデータベースとの連携が強化される
  • 2023年 — CWE 4.x系が継続更新中。収録件数は900件以上に達し、ハードウェア・ファームウェア領域も充実

背景として、2000年代初頭にWebアプリケーションの爆発的普及と同時にSQLインジェクションやXSSといった攻撃が急増したことが、共通分類の必要性を高めました。


CWE・CVE・CVSSの関係

セキュリティ管理でよく登場する「C系3兄弟」を整理します。

セキュリティ管理の3つの共通規格 CWE Common Weakness Enumeration 弱点の「種類」を分類 根本原因のカタログ 例: CWE-89 SQLインジェクション CVE Common Vulnerabilities and Exposures 実際の脆弱性の事例 発見された脆弱性ID 例: CVE-2021-44228 Log4Shell CVSS Common Vulnerability Scoring System 脆弱性の「深刻度」評価 0.0〜10.0のスコア 例: CVSS 10.0 (最高深刻度) 原因 評価 実務での使い分けイメージ 「CWEを意識した開発」→「CVEで発見された脆弱性を確認」→「CVSSスコアで優先度を決めて対応」

実務での活用場面

発注者・情シス担当として知っておきたい活用シーンを整理します。

場面CWEの使い方
ベンダー選定・RFP作成「CWE Top 25への対策実施状況を提出してください」と要件に盛り込む
脆弱性診断レポートの読み方診断結果にCWE番号があれば、どの種類の弱点かすぐ確認できる
開発ガイドライン策定セキュアコーディング規約にCWE番号を紐づけて基準を明確化
インシデント発生時の原因分析CVEの原因となったCWEを特定し、同種の弱点を一括で洗い出す

関連する規格・RFC

規格・番号内容
CWE List (MITRE)CWEの公式リスト。900件以上の弱点を検索・参照可能
NIST SP 800-53米国政府のセキュリティ管理策。CWEと対応関係がある
ISO/IEC 15408 (Common Criteria)ITセキュリティ評価の国際規格。CWEを補完する形で使われる

関連用語

  • CVE — 実際に発見・公開されたソフトウェア脆弱性の識別番号リスト
  • CVSS — 脆弱性の深刻度を0.0〜10.0でスコア化する共通評価システム
  • NVD — NISTが管理するCVE・CVSSを集約した脆弱性データベース
  • OWASP — Webアプリのセキュリティ標準を策定する非営利団体。Top 10はCWEと連携
  • SQLインジェクション — データベースへの不正命令を埋め込む攻撃(CWE-89の代表例)
  • XSS — Webページに悪意あるスクリプトを挿入するクロスサイトスクリプティング攻撃
  • セキュアコーディング — 脆弱性を作り込まないためのコーディング規約・設計原則
  • 脆弱性診断 — システムのセキュリティ上の弱点を発見・評価するプロセス