脆弱性とは?

脆弱(ぜいじゃく)性とは「意図しない動作が起こること」全般を指します。たとえばログイン画面をイメージしてみてください。大抵のログイン画面にはID/パスワード欄があり、そこにそれぞれ正しい記号を打ち込むことでログイン認証される仕組みになっています。通常、パスワード欄には特定の意味を持たない文字列しか記入できないようになっているのですが、なにかの手違いでそこに命令文を打てる仕様になってしまっていたとしましょう。すると何がおこるか。命令文の内容によっては、不正確なID/パスワードであってもログインできるようになります。これが脆弱性です。今は例としてログイン画面を挙げましたが、開発者の意図しない動作により、本来あるべきでない動作が起こるのであればソフトウェアやハードウェア、システムといった区別なく、「脆弱性が存在している」という評価がされます。

セキュリティホールとは?

一口に脆弱性といっても、直ちには攻撃に利用されない、あるいは攻撃に利用できないようなものもあれば、その欠陥を突く攻撃方法が具体的にイメージできる危険なものもあります。なかでも攻撃対象となる危険な脆弱性を「セキュリティホール」として区別して呼ぶことがあります。放置しておくと攻撃されてしまう可能性があるので、直ちに修正しなければなりません。

また、最初に「意図しない動作」と書きましたが、たとえそれが「意図した状態」だったとしても、その仕様を利用して攻撃される可能性がある場合、「その仕様そのものが脆弱性だ」という捉え方をする場合もあります。例として、ブログのコメント欄について考えてみましょう。読者が自由にリンクなどを貼れるようにコメントにHTMLを許可していた場合、誰でも悪意あるページへの誘導が可能です。これは「仕様そのものが脆弱性だ」と言えます。しかも【攻撃方法まで具体的にイメージできる】パターンなので【セキュリティホール】となり、早急に対応することが望まれます。

脆弱性への攻撃(エクスプロイト)を回避するには?

こうした脆弱性を利用した攻撃をエクスプロイトといいます。ゼロデイ攻撃と組み合わせられることもあるので厄介です。開発者側が脆弱性を残さないことはもちろんのことではありますが、ユーザができる対策としては、日ごろからアップデートや修正パッチなどのお知らせを見逃さない、そして怠らないことです。