この記事では脆弱性の説明と脆弱性が全てのシステムにどのように存在しているのかについて説明します。

脆弱性は機密性・完全性・可用性に悪影響を与えるシステムの弱点です。脆弱性を分類する方法は多くあります。この記事ではソフトウェアの欠陥・セキュリティ構成の問題・ソフトウェア機能の悪用の3つの高レベルの脆弱性分類に分けて説明します。

脆弱性分類

ソフトウェアの欠陥による脆弱性はソフトウェアの設計・実装とは意図しないエラーを引き起こします。例えばユーザから入力された悪意のある文字列が正しく評価できない場合や既知の攻撃に関連する値が長すぎるなどの入力検証のエラーがそれに当たります。もう1つの例は攻撃者に昇格された権限で特定の動作をさせてしまう競合状態のエラーがあります。

セキュリティ構成の設定はソフトウェア自身のセキュリティを変更するための要素です。例えばユーザがファイルに対して持つ権限を設定するコントロールリストへのアクセスを提供するOSやアプリケーションによって保存された機密データの暗号化を有効・無効にする設定を提供するアプリケーションがそれに当たります。セキュリティ構成の問題による脆弱性はソフトウェアのセキュリティに悪影響を及ぼすセキュリティ構成の設定を伴います。

ソフトウェアの機能はソフトウェアによって提供される機能的能力です。ソフトウェア機能の悪用による脆弱性はシステムのセキュリティを脅かします。これらの脆弱性はソフトウェア設計者がソフトウェアへの信頼を仮定して便利な機能を設計する一方で、誰かがその信頼が仮定された機能を悪用してセキュリティを侵害することによって引き起こされます。例えば、メールクライアントソフトウェアは電子メール内のHTMLコンテンツをレンダリングする機能を持っていることがあります。攻撃者はハイパーリンクを持つ不正な電子メールメッセージを作成し、HTMLをレンダリングしたときには受取人には良性に見えるもののハイパーリンクをクリックしたときに悪性のウェブサイトへと遷移させる方法があります。HTMLコンテンツレンダリングの設計における信頼の仮定の1つは、ユーザが悪意のあるハイパーリンクを受取ってもクリックしないことでした。

ソフトウェア機能の悪用による脆弱性(悪用の脆弱性)はソフトウェアまたはソフトウェアのコンポーネント(例えばソフトウェア実装で使用するプロトコル)の設計中に入り込みます。信頼の仮定は明示的であるかもしれません。設計者がセキュリティ上の弱点に気づいていて、他のセキュリティ制御がこれを補償しているかもしれません。しかし信頼の仮定はしばしば黙示的で、最初に導入リスク評価をせずに機能を作り導入していたりします。脅威はソフトウェアの寿命やソフトウェア内で使われているプロトコルによっても変化する可能性があります。例えばARP(Address Resolution Protocol)はARP応答には正しいMACアドレスとIPアドレスの対応が含まれていることが信頼の仮定です。ARPキャッシュはその情報を使ってローカルネットワーク内のデバイス間でデータを送信できるようにし、便利なサービスを提供します。しかし攻撃者が偽のARPメッセージを生成し、システムのARPテーブルを汚染してDoS攻撃や中間者攻撃を行う可能性もあります。ARPプロトコルは25年以上前に標準化され、それ以来脅威は大きく変化しました。そのため、設計時の信頼の仮定は今日でも合理的ではないでしょう。

ソフトウェア機能の悪用による脆弱性を他の2つの分類と差別化するのは難しいでしょう。例えば、ソフトウェアの欠陥と悪用の脆弱性はソフトウェア設計過程での不備によって生じる可能性があります。しかし、ソフトウェアの欠陥は純粋に悪影響のみを与えます。セキュリティや機能性に良い影響は何もありません。対してソフトウェア機能の悪用は追加の機能を提供した結果として生じます。

設定やセキュリティ構成の問題に対して、有効・無効を設定できる機能の脆弱性悪用に関して、混乱する点があるかもしれません。主な違いは機能の脆弱性の悪用は機能全体の有効・無効を設定するということで、セキュリティ構成の問題のようにソフトウェアのセキュリティに関わる部分だけを変更するというわけではありません。例えば電子メールの全てのHTML使用を無効化することはセキュリティにも機能にも多大な影響を及ぼします。そのため、この設定に関連する脆弱性は悪用の脆弱性といえます。電子メールクライアントのフィッシング防止機能を無効にすることはセキュリティにのみ多大な影響を及ぼします。そのためこの設定はセキュリティ構成の問題による脆弱性に関連しているといえます。

脆弱性の存在

100%安全なシステムは存在しません。全てのシステムに脆弱性は潜在しています。常にシステムに既知のソフトウェアの欠陥はないかもしれませんが、セキュリティ構成の問題と悪用の脆弱性は常に存在しています。悪用の脆弱性はソフトウェア機能にはつきもので、各々の機能は信頼の仮定に基づいている必要があり、場合によっては大幅なコストと労力を伴うものの、この仮定は壊される可能性があるためです。セキュリティ構成の問題もまた避けられないものです。理由は2つあります。理由の1つは多くの設定機能は機能性を犠牲にセキュリティの向上を行うということです。そのため、ほとんどの安全な設定はソフトウェアを不便にしたり、使い物にならなくしてしまいます。もう1つの理由は多くのセキュリティ設定はセキュリティに対して良い面と悪い面の両方を持つということです。例えば、認証試行の連続した失敗回数によってアカウントがロックアウトされることがそれにたります。ロックアウトするまでの失敗回数を1回にしてしまうことがパスワード推測攻撃に対する最高のセキュリティ設定でしょうが、これでは正しいユーザでもたった1回の打ち間違いでロックアウトされる上、攻撃者がわざと1回認証に失敗するだけでロックアウトさせ、ユーザに対するDoS攻撃に利用されてしまうことも起こり得ます。

セキュリティ構成の問題や機能の悪用・ソフトウェアの欠陥の可能性は常に付きまといます。そのため1つのシステムには数十~数百の脆弱性が存在する可能性があります。これらの脆弱性は幅広い種類の特徴を持っています。悪用が容易なものもあれば、到底起こり得ないような特定の条件下で悪用できる脆弱性もあります。管理者権限でのアクセスを許してしまう凶悪なものもあれば、大して重要でないファイルを読める程度の脆弱性もあります。結局のところ、組織は脆弱性の悪用容易性・脆弱性が及ぼす可能性のある影響を理解しておく必要があります。

Original Document Information

  • Author(s): Elizabeth LeMay, Karen Scarfone, and Peter Mell
  • Title: National Institute of Standards and Technology (NIST) Interagency Report 7864, The Common Misuse Scoring System (CMSS): Metrics for Software Feature Misuse Vulnerabilities
  • Last Updated Date: July 2012
  • Copyright Information: This document is not subject to copyright.

ドキュメントのタグと貢献者

このページの貢献者: takubokudori
最終更新者: takubokudori,