どんなシステムにも起こり得る脆弱性
脆弱性とは、プログラムの不具合や設計ミスが原因で生じる情報セキュリティ上の「欠陥」であり「弱点」である。
ソフトウェアやITシステムは、その設計図となるソースコードから構成される。ソフトウェアエンジニアやプログラマーが膨大なソースコードを書く過程において、人が作成するものである以上は、ミスが発生する。
プログラムが期待通りに動くか動かないかのレベルの設計ミスであれば、テストによって検出できることが多い。
もっとも、脆弱性は、プログラムが動くことは動くため、通常のテストは通過する。動くことを前提としつつ、想定外の動かし方をされるとセキュリティ上の脅威として顕在化する設計ミスなのである。
そして、ソフトウェアがリリースされた後に、設計ミスが発見されてそれを修正するのがアップデートである。
皆さんのiPhoneにも、毎月のようにアップデート通知が届いている。詳細を確認せずに同意ボタンを押してアップデートしている人がほとんどであろう。
この通知をよく見ると、「iOS11.2.2にはセキュリティアップデートが含まれ」と記載されている。ということは、一つ前のバージョンである「iOS11.2.1」には脆弱性が含まれていることがリリース後に発覚して、Appleが慌てて対応したのがこのアップデートである。
世界トップクラスの時価総額を誇るAppleのiPhoneですら毎月のように脆弱性が内在するソフトウェアをリリースしていることを考えると、この世にリリースされているソフトウェアやITシステムには脆弱性が当然のように内在しているのが容易に想像できるであろう。
なぜ、見落とされるか
もちろん脆弱性についてのテストも存在する。
もっとも、脆弱性については、技術的にテストで検出が難しいものもあるのに加えて、そもそもテストが十分に実施されていないという背景もある。なぜか。
まずは法規制の有無である。例えば自動車は安全性のテストが法律上義務付けられており、徹底したテストを経て世に出される。他方で、ソフトウェアについてはテストについて明確な法規制は今のところない。
また、ベンダー側にとってテストは、手間も費用も掛かる。つまり脆弱性に関するテストを実施するインセンティブが乏しい。
そのため、ソフトウエアは早期公開が優先され、問題があれば公開後にアップデートすればよいという業界慣習となり、脆弱性については十分なテストがなされていないというのが実情と思われる。

