脆弱性はセキュリティーの問題を引き起こす欠陥や設定の不備を指す。「セキュリティーホール」とも呼ばれる。
ソフトウエアの脆弱性は、プログラムの記述ミスや設計自体の誤りなどが原因で生じる。脆弱性を突かれるとソフトウエアは開発者の想定通りに動作せず、不正アクセスなどのセキュリティー問題が発生する(PICT1)。
ただし、脆弱性がすべて開発者の過失によるわけではない。開発時点では正しい設計で作業ミスがなかったとしても、後に脆弱性が見つかる場合がある。開発後に登場した技術や攻撃手法により、新たな抜け穴が見つかることがあるからだ。今までになかった観点や発想により、設計時には想定していなかった箇所を攻撃されることで被害が出ることもある。
継続的な対応が必要
脆弱性は日々発見されている。このため、継続的に脆弱性に対応する仕組み作りが求められる。
セキュリティーに関する公的機関やセキュリティー専門家などは、ソフトウエアの脆弱性を発見すると開発元に報告するのが一般的だ。開発元は脆弱性を解消するためのセキュリティー修正プログラム(パッチ)を作成し、利用者に配布する。開発元が自身で脆弱性を発見することもある。
脆弱性の情報は「CVE(Common Vulnerabilities and Exposures)」などの公開データベースに集められる。国内ではJVN(Japan Vulnerability Notes)というポータルサイトに集約され、公開されている。
企業のセキュリティー担当者は、公開データベースやセキュリティーベンダーなどの脆弱性情報を収集し、バッチの適用といった適切な対応をする必要がある。適切な対応を取らずに脆弱性を残したままにすると、攻撃者に悪用されて不正アクセスなどを許す恐れがある。
ただしパッチの適用では防げない攻撃もある。開発元からパッチが配布される前に脆弱性を突く「ゼロデイ攻撃」である。ゼロデイ攻撃による被害を最小限に抑えるには、EDR(Endpoint Detection and Response)など、攻撃を早期に検知して拡大を防ぐ仕組みを取り入れる必要がある。