ブログ

ソフトウェアの脆弱性とは

2014年4月17日 15:18 | パソコン関連 | | 244 views
タグ: , ,

このエントリーをはてなブックマークに追加
はてなブックマーク - ソフトウェアの脆弱性とは
reddit にシェア
Pocket
LINEで送る

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社でしか修正できない、という二点が重要なポイントです。