レガシーPHPのセキュリティ対策、大丈夫ですか?

第2回CVEの読み方

PHPプロジェクトではCVEに対応したセキュリティパッチリリースを行っていません。しかし、SRA OSS Inc.社のPHP4 セキュリティ保守サービスでは、できる限りCVEに対応したサービス提供を行うようにしています。CVE番号をご覧になった方は多いと思いますが、CVEデータベースの情報の読み方をよく知っている方は少ないと思います。連載をはじめる前にCVEエントリの読み方を簡単に解説します。

CVEとは

CVEとはCommon Vulnerabilities and Exposuresの頭文字です。日本語にすると「共通の脆弱性と危険性露出」といった感じになります。前回解説したとおりCVE番号は、個別製品中の脆弱性を対象として、米国政府の支援を受けた非営利団体のMITRE社が番号を割り当てている識別子です。

CVEに登録されたエントリはCVE識別子が与えられます。CVE識別子には以下の情報が含まれます。

  • CVE識別番号(例: CVE-1999-0067)
  • エントリ(entry)または候補(candidate)の状態
  • 簡単な脆弱性と危険性露出の解説
  • 協力者へのリファレンス(例:脆弱性報告、アドバイザリなど)

正確にはCVE識別番号と呼ぶべきですが、一般にCVE番号、CVE IDなどと呼ばれています。筆者も通常はCVE番号と呼んでいます。CVE番号により同じ脆弱性は同じCVE番号で識別できるようになっています。

CVEエントリの読み方

以下はCVEエントリの見本です。見本といっても本物のCVEエントリです。これは2011/5/17にリリースされたFlash Media ServerのCVE-2011-0612です。アタックベクタ(攻撃経路)は不明ですが、リモートからXMLデータを破壊できる脆弱性あるとするエントリです。

画像
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-0612

CVEエントリだけではどのような脆弱性か分かりません。CVEのエントリに対する分析は米国の機関であるNISTのNVD(National Vulerability Database)で確認できます。MITREのCVEエントリの「Lean more at National Vulnerability Database (NVD)」と書いてある部分をクリックするとNISTのNVDを参照できます。

画像
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-0612

NISTのNVDにはさまざまな情報が掲載されていますが、特に重要な部分は最初のOverviewとImpactの部分です。

OverviewとImpact

Overviewは名前の通り脆弱性情報の概要です。脆弱性の概要と影響する範囲が簡潔に記載されています。

Impactは脆弱性の影響です。さまざまな脆弱性の危険性や攻撃の難易度などを数値化および分類化しています。詳しい計算方法を覚える必要はありませんが、数値がどのような意味を持っているか、分類がどのような分類かは理解しておいたほうがよいです。

  • CVSS v2 Base Score ─ CVSS基本値。CVSS(Common Vulnerability Scoring System)の脆弱性が持つ危険性のスコア
  • Impact Subscore ─ 影響度。攻撃が成功した場合の深刻度のスコア
  • Exploitability Subscore ─ 攻撃容易性。攻撃の難易度のスコア

これらのスコアはそれぞれ、0から10.0までの値を持っています。10.0は最も深刻な脆弱性です。CVSSにはVersion1とVersion2があり、現在はVersion2が利用されています。CVSSは以下のように計算されます。

  • CVSS 基本値 = ((0.6×影響度)+(0.4×攻撃容易性)-1.5)×f(影響度)

CVSS Version2の計算方法は比較的複雑なので、詳しく知りたい方はIPAの共通脆弱性評価システムCVSS概説を参照してください。これらの計算式からCVSS基本値が計算され、脆弱性の危険性が計算されます。

CVSS 基本値の値と脆弱性の危険性
低(Low)0.0 ~ 3.9
中(Medium)4.0 ~ 6.9
高(High)7.0 ~ 10.0

CVSSは脆弱性の危険性の目安となりますが、実際に利用しているシステムの危険性とは直接は関係ありません。脆弱な機能を利用していなければ脆弱性の影響を受けませんし、スコアが低くても脆弱な機能を利用していれば影響を受けます。

CVSSでは脆弱性の特徴が一目で判別できるようにCVSS基本値の横に記号が記載されています。この脆弱性の場合は次のような記号です。

(AV:N/AC:L/Au:N/C:N/I:N/A:P) (legend)

この記号は「分類名:分類の値」⁠/⁠で区切った形式になっています。次のような意味を持っています。

AVアクセスベクタ(AccessVector)関連する攻撃の範囲値: L = ローカル, A = 近隣のネットワーク, N = ネットワーク
ACアクセス難易度(AccessComplexity)攻撃に必要とされる複雑性値: H = 高, M = 中, L = 低
Au認証(Authentication)必要とされる認証値: N= 不要, S= 単一の認証, M= 複数の認証
C機密性への影響(ConfImpact)値: N = 無し, P = 部分的, C = 完全
I完全性への影響(IntegImpact)値: N = 無し, P = 部分的, C = 完全
A可用性への影響(AvailImpact)値: N = 無し, P = 部分的, C = 完全

つまり

(AV:N/AC:L/Au:N/C:N/I:N/A:P) (legend)

  • アクセスベクタ ― ネットワーク
  • アクセス難易度 ― 低
  • 認証の必要性 ― 無し
  • 機密性への影響 ― 無し
  • 完全性への影響 ― 無し
  • 可用性への影響 ― 部分的

となっています。

PHPアプリケーションのCVE情報

先ほどの解説でCVEエントリとNVDデータベースの読み方は理解できたと思います。執筆時点で公開されているPHPアプリケーションのCVEのNVDデータベースを幾つか見てみましょう。

Overview
Mahara before 1.3.6 does not properly restrict the data in responses to AJAX calls, which allows remote authenticated users to obtain sensitive information via a request associated with (1) blocktype/myfriends/myfriends.json.php, (2) json/usersearch.php, (3) group/membersearchresults.json.php, or (4) json/friendsearch.php, as demonstrated by information about friends and e-mail addresses.
Impact
CVSS Severity (version 2.0):
CVSS v2 Base Score:4.0 (MEDIUM) (AV:N/AC:L/Au:S/C:P/I:N/A:N) (legend)
Impact Subscore: 2.9
Exploitability Subscore: 8.0
CVSS Version 2 Metrics:
Access Vector: Network exploitable
Access Complexity: Low
Authentication: Required to exploit
Impact Type:Allows unauthorized disclosure of information

http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-1404

MaharaというEポートフォリオを作成するアプリケーションの脆弱性です。AJAXによるデータ読み取りが正しく制限されてないため、認証済みのユーザがほかのユーザのデータにアクセスできてしまう脆弱性のようです。

CVSS v2 Base Score:4.0 (MEDIUM) (AV:N/AC:L/Au:S/C:P/I:N/A:N)

CVSSベーススコアが4.0、危険性は中で、アクセスベクタ(AC)はネットワーク(N⁠⁠、アクセス難易度(AC)は低(L⁠⁠、認証(Au)は単一(S⁠⁠、機密性のへの影響(C)は部分的(P⁠⁠、完全性への影響(I)は無し(N⁠⁠、可用性への影響(A)も無し(N)となっています。

Overview
Cross-site scripting (XSS) vulnerability in title.php in OPEN IT OverLook 5.0 allows remote attackers to inject arbitrary web script or HTML via the frame parameter.
Impact
CVSS Severity (version 2.0):
CVSS v2 Base Score:4.3 (MEDIUM) (AV:N/AC:M/Au:N/C:N/I:P/A:N) (legend)
Impact Subscore: 2.9
Exploitability Subscore: 8.6
CVSS Version 2 Metrics:
Access Vector: Network exploitable
Access Complexity: Medium
Authentication: Not required to exploit
Impact Type:Allows unauthorized modification

http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-4792

OPEN IT OverLookはイタリア製のWebメールアプリケーションのようです。title.phpのframeパラメータにXSS脆弱性があるようです。

CVSS v2 Base Score:4.3 (MEDIUM) (AV:N/AC:M/Au:N/C:N/I:P/A:N) (legend)

CVSSベーススコアが4.3、危険性は中で、アクセスベクタ(AC)はネットワーク(N⁠⁠、アクセス難易度(AC)は中(M⁠⁠、認証(Au)は不必要(N⁠⁠、機密性のへの影響(C)は無し(N⁠⁠、完全性への影響(I)は部分的(P⁠⁠、可用性への影響(A)も無し(N)となっています。

XSSなので、機密情報のセッションクッキーへのアクセスが可能となるので、機密性への影響が無い訳ではないと言えますが、NVDではXSSの機密性への影響は無しと評価するように統一しているようです。

CVE/NVDの信頼性

昨年2010年の間に登録されたCVEはおよそ5000程あります。この脆弱性情報は商用・オープンソースも含めたすべてのソフトウェア製品の脆弱性です。最近のPHPの脆弱性はPHPプロジェクトが登録しなくてもCVEとして登録されるようになりましたが、多くのPHPアプリケーションは脆弱性があってもCVEに登録されることなく脆弱性が修正されています。PHP本体の場合もCVEに登録されることなく修正される脆弱性(クラッシュバグなどは脆弱性とレポートされず修正されるケースが多くあります)も少なくありません。

CVE/NVDは既知の脆弱性を集めたデータベースといってよいでしょう。前回紹介したPHP 5.3.6リリースで修正された脆弱性はPHP 5.2の脆弱性でもありますが、CVE/NVDではPHP 5.3.5以前の脆弱性として登録されているだけで、PHP 5.2系の脆弱性として登録されていません。このようなケースはPHPのみでなく少なくないプロダクトが同じような状況になっています。

CVE/NVDの情報を参照していれば新しいセキュリティ上の問題を知ることはできますが、この情報は完全でないことに留意してください。また、ソフトウェア脆弱性のインパクトは実際の用途や構成によって変わってきます。CVSSベーススコアが低いからといって無視してよいわけではありません。自分の利用形態に併せて評価する必要があります。

既知の脆弱性を利用した攻撃は後を立ちません。これは新たな脆弱性を発見するより既知の脆弱性を修正しないで放置しているコンピュータを攻撃するほうが効果的に攻撃ができるからです。CVE/NVDが完全でないからといって役立たないわけではありません。CVE/NVDに登録された脆弱性情報の収集と対応はセキュリティ維持のためのベースラインと言えます。

まとめ

今回はCVEとNVDの読み方について簡単に解説しました。CVE/NVDの読み方、利用方法はPHPに限らずすべてのソフトウェア製品共通です。次回からいよいよレガシーPHPのセキュリティ状態と回避策を紹介していきます。

参考リンク

おすすめ記事

記事・ニュース一覧