「脆弱性」とは、プログラムの不備(バグ)の一種で、「本来 できないはずのことができてしまう」のが特徴です。
一般的な「バグ」では、「特定の条件下で できるはずのことができないもの」です。多くの場合、突然プログラムが停止してしまいます。しかし、当然ながら反対のケースも起こりえます。つまり、「セキュリティ上、制限されているはずの動作ができてしまう」場合に、「脆弱性(Vulnerability)」というわけです。
ただ、「見過ごされやすいバグ」なので、遭遇するケースは稀です。
一般の個人利用なら「もう悪用されてしまったのかなぁ…」などと心配する必要はありません。
定期的にシステムの更新をしていれば、それで十分です。
企業が自分でメンテナンスしているシステムではちょっと状況は違います。
しかし、個人の使うスマートフォンのシステムは、AppleやGoogleといった大企業が開発・メンテナンスしているので、ちゃんとアップデートをしていれば脆弱性による被害は少ないと言えます。
1. 「脆弱性」はゲームでいえば「裏技」と同じ
「脆弱性」とは「プログラムのバグ」のことです。
ただし、「できるはずのことができない」のではなく、「できないはずのことができる」バグです。
ゲームの「バグ」でプレイヤーに有利なものを「裏技」というのに似ています。
FF6の有名なバグ技。
裏技・バグ/【ドリル装備】 – ファイナルファンタジー用語辞典 Wiki*
正確には強制装備とでも呼ぶべきものだが、ドリル装備や機械装備の名で知られる。
「セキュリティの制限上できないはずのことが、たまたまできてしまうこと」が見つかると、悪用を防ぐために修正が必要になります。
ただ、「見過ごされたバグ」なので、裏技と同じで 極めて珍しい操作をしないと起こりません。
「インターネットをつながっていれば何でもされてしまう」というほど危険な状態というわけでもないのでご安心を。
2. コードとデータ(ノイマン型)
このような「脆弱性」が生まれてしまうのは、「ノイマン型コンピュータ(von Neumann architecture:stored-program computer)」の宿命でもあります。
現在のコンピュータは、「プログラムを データとして 記憶領域に入れて、これを順番に読み込んで実行する」構造になっています。この構造を「ノイマン型」といい、このおかげで さまざまな処理が柔軟にできます。
しかし、入力されたデータの処理を誤ると、それがコードとして実行されてしまう危険性もあります。つまり、適切なプログラム設計でない場合、攻撃者が特殊な入力をすると、システムの制限されている操作ができてしまいます。これが「脆弱性」です。
正しく処理するためには、入力データがコード領域に入り込まないように配慮してプログラムする必要があります。このような配慮が欠けてしまった場合の代表的な脆弱性に、「バッファ・オーバーフロー」や「SQLインジェクション」があります。
こちらもどうぞ。