ソフトウェアの脆弱性とは
ソフトウェアの脆弱性とは
OpenSSLの脆弱性が大きく取り上げられている中、WindowsXPも公式に脆弱性への技術サポートが終了する事になりました。 この脆弱性とは、いったいどうして発見されるのでしょうか。 なぜ脆弱性が発見されるとよくないのでしょうか。 ソフトウェアの脆弱性とは ソフトウェアの脆弱性とは、簡単に説明すると、ソフトウェアの欠陥です。 現在話題になっているOpenSSLを例にとります。 OpenSSLはサーバーとクライアントの間、Webサーバーと、Webブラウザの間の暗号化を行うものです。 この暗号化は、双方に保存された鍵ファイルがなければ、お互いのデータを暗号化以前に戻す事ができない事が基本の機能です。 インターネットの通信は、突然片方から切断する事、回線が遅くなってしまうこと、などを十分含めて設計を行わなければなりません。 OpenSSLはその機能を拡張していく中で、Heartbeat(心拍)というサーバーとクライアント間の接続を長く保持する機能を持ちました。 Heartbeatというデータを送信している限り、ネットワークは途切れていないので、接続を保持してくださいという指示を出します。 このHeartbeatという機能に欠陥があり、そのHeartbeatのデータを不正な形に加工する事で、OpenSSLが予期しない動作を起こす事が発見され、それが今回のHeartBleed(心臓出血)と名付けられた脆弱性になります。 このHeartbeatは定められた規格によれば、データの大きさというものを保持するようになっています。 そのデータそのものと、データの大きさを違ったものにすると、OpenSSLはサーバーのメモリに格納された余分なデータを返却してしまうという、欠陥です。 このような仕様以外のデータに対して、誤ったデータとして処理すべきものですが、その部分が大きく抜けてプログラムが作成されていた、ということが今回の問題を引き起こしています。 脆弱性が見つかるとどうなるか OpenSSLはオープンソースソフトウェアという、プログラムのコードがすべて公開されたソフトウェアで、組み込む事は無料です。 OpenSSLはWebサーバーをはじめとして、インターネットを介した暗号化通信のスタンダードとして利用されてきました。 しかし、本来あってはならない欠陥が発見され、修正は行われましたが、その適用をサーバーに対して行うのは、サーバーの管理者になります。 ですので、未だに脆弱性を放置されたサーバーは数多くあるという事です。 これらに対して、脆弱性が公開されると、同じ状態を再現する事は簡単な事になります。脆弱性を見つけるのは難しくとも、公開されてしまえば、再現は簡単なのがソフトウェアの世界です。 このOpenSSLのようなソフトウェアは、非常に膨大なコードから成り立っています。すべてのコードに欠陥があるかどうかを、一から洗い出しきる事はかなり難しい事です。 機能が増えれば増えるほど、あり得るケース、あり得ないケースのすべてを確かめる事が必要ですが、その部分に漏れがあったという事です。 OpenSSLほど広く使われているものは、すべてが最新版に置き換わるまでは非常に長い時間がかかり、その間ユーザーのデータは危険にさらされ続ける事になります。 脆弱性に対しどう向き合うのか コンピュータの世界は、このように複雑なプログラムの集合体で、それはスマートフォン、タブレットであっても全く同じです。 WindowsXPのように10年以上現役で使われていたシステムでも、すべての欠陥を洗い出す事ができないため、今後新たな欠陥が見つかる可能性はほぼ100%です。 それがユーザーにとって深刻なものか、あるいは公開されずに秘密裏に利用されるものかは、わかりません。 ただ放置されれば、悪用される危険性は一秒ごとに増していくものです。 システムがアップデートにアップデートを重ねているのは、現在のソフトウェアがより複雑になっていく中で、さけられない事です。 WindowsXPの更新が停止してしまったという事は、今後脆弱性は放置されるという事、そしてWindowsのプログラムのコードは公開されていないので、実質Microsoft社でしか修正できない、という二点が重要なポイントです。