脆弱性とは|システムやソフトウェアに存在するセキュリティ上の弱点

当ページは検証・整備中のドラフトです。
内容は実環境での検証や追加調査により変更される予定です。
参照:ページ公開・更新ポリシー

脆弱性とは

脆弱性(Vulnerability)とは、ソフトウェア、OS、機器、システムなどに存在するセキュリティ上の弱点である。

悪用されると、不正アクセス、情報漏洩、データの改竄、サービス停止などにつながる。

脆弱性はパソコンやサーバーだけに存在するものではない。ルーター、NAS、スマート機器、Webアプリケーション、クラウドサービスなど、ソフトウェアで制御される幅広いシステムが対象となる。

ただし、脆弱性が存在することと、実際に攻撃されていることは別である。

バグと脆弱性は何が違うのか

バグは、ソフトウェアなどが意図したとおりに動作しない原因となる欠陥を指す。

脆弱性は、その中でもセキュリティを損なうために利用できる弱点を指す。

例えば、ボタンを押しても画面が正しく表示されない不具合はバグだが、それだけで脆弱性とはならない。一方、入力処理の欠陥によって本来実行できない命令を実行できるなら、脆弱性となる。

バグが脆弱性の原因になることはあるが、すべてのバグが脆弱性になるわけではない。また、設計や構成そのものがセキュリティ上の弱点となることもある。

なぜ脆弱性が生まれるのか

脆弱性が生まれる原因は一つではない。

代表的なものには次がある。

  • プログラムの実装上の欠陥
  • セキュリティを十分考慮していない設計
  • 不適切な設定や構成
  • 古い技術や仕様の継続利用
  • 新しい攻撃手法による問題の発見

製品が正常に動作していても、後から脆弱性が発見されることはある。開発時には問題とされなかった設計でも、技術や攻撃手法の変化によって新たな弱点が明らかになるためである。

そのため、購入時点で安全だった製品でも、継続して更新できる状態を保つ必要がある。

脆弱性が存在するだけで攻撃が成立するわけではない

脆弱性が存在しても、それだけで被害が発生するわけではない。

攻撃には、その脆弱性へ到達できる経路や、悪用するための条件が必要となる。

脆弱性が存在する
      ↓
攻撃者が到達できる
      ↓
悪用に必要な条件がそろう
      ↓
脆弱性を悪用する
      ↓
被害が発生

例えば、インターネットへ直接公開された機器と、外部から到達できない内部ネットワーク上の機器では、同じ脆弱性でも攻撃を受ける条件が異なる。

利用者の操作や認証済みアカウントが必要な脆弱性もあるため、脆弱性の深刻度だけでは自分の環境におけるリスクは決まらない。

脆弱性はどのように発見され、修正されるのか

脆弱性は、開発元、セキュリティ研究者、利用者などによって発見される。

一般的には、発見後に開発元へ報告され、内容の確認と修正を経て、脆弱性情報や修正プログラムが公開される。ただし、修正前に情報が公開されたり、攻撃への悪用が先に確認されたりすることもある。

脆弱性を発見
   ↓
開発元などへ報告
   ↓
内容を確認
   ↓
修正プログラムを開発
   ↓
脆弱性情報・修正版を公開
   ↓
利用者が更新

修正版が公開されても、利用中の機器へ自動的に適用されるとは限らない。利用者側で更新が必要な製品では、修正版を適用して初めてその脆弱性を解消できる。

CVEとCVSSは脆弱性とどう関係するのか

公開された脆弱性を識別したり、深刻度を評価したりするための仕組みがある。

用語役割
脆弱性セキュリティ上の弱点
CVE個々の脆弱性を識別するための番号体系
CVSS脆弱性の深刻度を評価するための指標

CVEは「どの脆弱性か」を識別するために使われ、CVSSはその脆弱性の技術的な深刻度を評価するために使われる。

ただし、CVSSの数値がそのまま自分の環境におけるリスクを示すわけではない。利用している製品やバージョン、外部からの到達性、悪用条件なども含めて判断する。

既知の脆弱性と未知の脆弱性は何が違うのか

脆弱性は、防御側が存在を把握しているかによって状況が異なる。

既知の脆弱性は、開発元やセキュリティ関係者などによって存在が把握されている脆弱性である。

修正プログラムがすでに提供されているものもあれば、脆弱性は判明していても修正が完了していないものもある。そのため、既知であることと修正済みであることは同じではない。

未知の脆弱性は、防御側や開発元がまだ把握していない脆弱性である。存在を認識していなければ、その脆弱性に特化した修正もできない。

未知の脆弱性や、修正が提供されていない脆弱性が攻撃に利用される問題については、「ゼロデイ攻撃とは」で詳しく扱う。

脆弱性が見つかったら何を判断すればよいのか

脆弱性情報が公開されても、すべての利用者が同じ対応を必要とするわけではない。

まず、自分の環境がその脆弱性の影響を受けるかを確認する。

  • 対象製品を使用しているか
  • 使用中のバージョンが影響を受けるか
  • 攻撃者が対象へ到達できるか
  • 悪用に必要な条件は何か
  • 修正版が提供されているか
  • 実際の攻撃に利用されているか

例えば、使用していない製品の重大な脆弱性より、自分がインターネットへ公開している機器の脆弱性の方が直接的な対応対象となる。

脆弱性情報は深刻度だけを見るのではなく、自分の環境との関係から判断する

更新できない機器はどう考えるのか

製品のサポートが終了すると、新しい脆弱性が発見されても修正版が提供されなくなる。

サポート中
   ↓
脆弱性を発見
   ↓
修正版を提供
   ↓
更新

一方、サポートが終了していれば、この流れが成立しない。

サポート終了
   ↓
脆弱性を発見
   ↓
修正版が提供されない
   ↓
脆弱性が残る

OS、ルーター、NAS、ネットワークカメラ、スマート機器などは、動作していることと安全に使い続けられることを分けて考える必要がある。

小規模環境では、すべての脆弱性を個別に分析し続ける運用は負担が大きい。そのため、サポート中の製品を使用し、セキュリティ更新を継続して受け取れる状態を維持する。

更新できなくなった機器は、交換、利用停止、ネットワーク分離などを検討する。

まとめ

脆弱性は、ソフトウェアや機器、システムなどに存在するセキュリティ上の弱点である。

脆弱性が存在するだけで攻撃が成立するわけではなく、到達経路や悪用条件によって実際のリスクは変わる。

脆弱性が発見された後も修正できるよう、サポート中の製品を使用し、更新を継続できる状態を維持する。