CWEとは?ソフトウェアの脆弱性の種類を分けるためのIDを解説

記事サムネイル

 この記事ではCWE(Common Weakness Enumeration)について解説します。脆弱性情報が「CVE-2024-XXXX」みたいな形で出てきた時に、重大性を表すCVSSと共に「脆弱性の種類(CWE-XX)」として出てくる、アレの説明です。

実践的セキュリティスクール「セキュ塾」で、この記事の執筆者でもあり「OSINT実践ガイド」の著者でもある「面和毅」が主講師を務める「脅威インテリジェンス育成コース」の2024年11月2日より開講中!こちらの講座はいつからでも受講を開始できる講座になっておりますので、ぜひチェックしてみてください!

CWEとは

クエスチョンマーク

 CWEはソフトウェアの脆弱性の種類をWeakness(セキュリティ上の弱点)というカテゴリに分けるためのIDになります。MITREが中心になって1999年ごろから使用策定が行われ、AppleやRational(IBM)、OWASP、日本のIPAが協力して2008年9月9日にバージョン1.0が公開されました。それ以降もメンテナンスが継続しており、2023年現在のバージョンは4.10になっています。

 CWEとは平たく言うと脆弱性の種類それぞれに番号をつけている」と思ってください。

CWEはどこで使われているか

 実際にCWEがどの様に使われているのかを見てみましょう。CVE.orgで脆弱性(CVE-2024-6387)を見てみます。オレンジの線で囲ったところにCWEとして「CWE-364(Signal Handler Race Condition)」が記載されています。

https://www.cve.org/CVERecord?id=CVE-2024-6387 から転載。オレンジで囲まれた箇所にCWEがある。

 また、FortiGuard LabsのPSIRT情報(FG-IR-23-460)を見てみましょう。黄色の線で囲ったところにCWEとして「CWE-121(Stack-Based Buffer Overflow)」が記載されています

FortiGuard Labs: FG-IR-23-460 から転載。黄色い枠線で囲まれた箇所にCWEがある。

 この様に、それぞれの脆弱性がCVEやセキュリティアドバイザリとして公開される際に、脆弱性の説明と共に「その脆弱性はどんな種類か」もCWE-IDとして公開されています。これを用いると機械的な処理がスムーズに行きます。

CWEのサイトと調べ方

 CWEはhttps://cwe.mitre.org/上でそれぞれの定義とナンバリングが公開されています。現在のバージョンは4.15になっており、「CWE-1426: Improper Validation of Generative AI Output(生成AI出力の不適切なチェック)」などの様な比較的新しい脆弱性の種類にも番号が付けられているのがわかります。

CWE-1426: Improper Validation of Generative AI Output。CWEのサイトより転載

 この様にCWEリストは適宜メンテナンスされ新しい種類の脆弱性が登録されています。リストを確認すると、下記の3種類のViewから見ていく事ができるのがわかります。

  • View by Software Development
  • View by Hardware Design
  • View by Research Concepts
https://cwe.mitre.org/data/index.html より転載。緑の線で囲ったところでそれぞれの観点から見ていく事ができる。

 それぞれのビューはそれぞれの観点からCWEを整理したものですので、入っているもの(見えるもの)も微妙に異なります。例えばハードウェアに関する脆弱性のCWEはView by Hardware Designに入っているがView by Software Developmentには入っていない、などと言うことも当然ながらあります。全てのCWE-IDは「View by Research Concepts」に入っています。

 以下では便宜上、「Research Concepts」,「Hardware Design」,「Software Development」の順に 説明します。

View by Research Concepts

 このビューは、相互依存性を含む弱点の調査を目的としたビューで、設計上このビューに全てのCWE-IDが含まれることが想定されています。

 例えば、先述のCWE-364(Signal Handler Race Condition)ですが、下記の様に「Insufficient Control Flow Management – (691)」->「Concurrent Execution using Shared Resource with Improper Synchronization (‘Race Condition’) – (362)」のカテゴリの下に入っています。

Signal Handler Race Condition – (364)

 また、先述のCWE-121(Stack-Based Buffer Overflow)ですが、下記の様に「Improper Control of a Resource Through its Lifetime – (664)」-> 「Incorrect Access of Indexable Resource (‘Range Error’) – (118)」->「Improper Restriction of Operations within the Bounds of a Memory Buffer – (119)」の下の

以下に入っています。このように、カテゴリ分けにより二つ以上の親に所属しているCWE-IDも存在します。

CWE-121(Stack-Based Buffer Overflow)

View by Software Development

 このビューは、ソフトウェア開発で頻繁に使用まする概念を中心に弱点を整理したものになります。このビューで確認できるグラフでは、ソフトウェア開発の観点からカテゴリを分けて親子関係にし、脆弱性の種類をグループ化しています。

 例えば、先述のCWE-364(Signal Handler Race Condition)ですが、下記のようにソフトウェアの開発観点で「Signal Errors」のカテゴリの下に入っています。

Signal Handler Race Condition – (364)

 ちなみにこちらは「ソフトウェア開発の観点で」のCWEなので、「View by Researcher」に入っている「CWE-121(Stack-Based Buffer Overflow)」は存在しません(このビューからは確認できません)。

View by Hardware Design

 このビューは、ハードウェア設計で頻繁に使用する概念を中心に弱点を整理しています。

 例えば有名なサイドチャネル攻撃の脆弱性「Spectre(CVE-2017-5753)」のCWEはCWE-203(Observable Discrepancy)になりますが、これは「Security Primitives and Cryptography Issues – (1205)」のカテゴリの下に入っています。

CWE-203(Observable Discrepancy)

CWEのサンプル(CWE-121)

 CWEを確認すると、様々な情報が得られます。例えば下記はCWE-121になりますが、まず「Description」や「Alternate Terms」で「Stack-based Buffer Overflow」とは何かの説明が書かれています。

 関係するCWEの情報や、どのような言語で発生し得るか(対象プラットフォーム)も示されています。

 この種類の脆弱性が悪用される可能性(Likelihood Of Exploit)や、サンプルコードなども載っています。

 また、このCWE-IDが振られた脆弱性のサンプル(Observed Examples)や、この脆弱性を検知する方法(Detection Methods。ここではFuzzingなど)も紹介されていますので、参考にしてください。

まとめ

 今回はCWE-IDについて解説しました。脆弱性情報を読む際の参考にしていただければと思います。

実践的セキュリティスクール「セキュ塾」で、この記事の執筆者でもあり「OSINT実践ガイド」の著者でもある「面和毅」が主講師を務める「脅威インテリジェンス育成コース」の2024年11月2日より開講中!こちらの講座はいつからでも受講を開始できる講座になっておりますので、ぜひチェックしてみてください!

参考リンク

コメント