トーテックアメニティ株式会社

http://www.totec.jp/

製品・サービス情報

情報BOX 【 知って得するサイバーセキュリティ講座 】

第4回エラーとバグと脆弱性

2012年2月29日

サイバーセキュリティを考えるとき、コンピュータの脆弱性を理解することは、避けて通れない壁となります。脆弱性とは、端的にいうと「悪意のある入力を行なうことで、悪用することのできるバグ」のことなのですが、この「悪用できるバグ」とは、いったいどういうことなのでしょうか。

皆さんは、ソフトウェアの画面が突然動かなくなったり、異常終了したりすると、何気に、「エラーが発生した」とか、「バグが発生した」などと言いませんか?よく似ていそうに見える、この「エラー」や「バグ」は、実は全く別の意味を持った言葉なのです。 エラーは「プログラムで起こりうる例外的な状態」のことで、プログラムの“故障を防止するための安全装置”です。つまりエラーは、格闘技で言えば受身のようなものです。 一方、バグは「プロラム上に存在する不具合」であり、プログラムの“故障を引き起こす原因”となります。つまりバグは、顔から倒れて怪我をするようなものです。

このように、エラーとバグでは、全く逆といっていいほどの意味の違いがあります。脆弱性を理解するにはこのエラーとバグを理解し、エラーとバグを理解するためには、コンピュータのプログラムとは何かについて、少し理解を深めなければなりません。

ソフトウェアとプログラム

コンピュータというものは、ソフトもしくはソフトウェアをインストールし、それを実行することで初めて役に立つものだということはお分かりだと思います。ワープロや表計算、Webブラウザなどもすべてソフトウェアです。

このソフトウェアというものは、“プログラム”によって作られています。“プログラム”とはコンピュータに対しての命令の手順が記録されたものを意味しています。例えば、音楽のコンサートの演目のことも“プログラム”と言ったりしますが、それは演奏する曲順を表しています。それと同じく、コンピュータのプログラムは、一つ一つの命令が順番に書かれたものなのです。

つまり、コンピュータがプログラムに記述された一つ一つの命令を順次実行していくことで、ソフトウェアが動作しているのです。

OSとアプリケーション

プログラムされたソフトウェアを実行するときに登場するのが、俗に言うOS(オペレーティング・システムまたは基本ソフト)というソフトウェアです。OSというのは、“アプリケーションソフトウェアを実行する”ためのソフトウェアです。マイクロソフト社のWindowsや、アップル社のMacOS X、リナックス(Linux)は、すべてOSとなります。OSは、コンピュータとは別に用意されており、必要に応じてコンピュータにインストールして使うことができます。

プログラムの動作

OSとプログラムは、いったいどのように動作するのでしょうか。OSは基本ソフトウェアというぐらいですから、プログラムに対して、基本的な機能を提供してくれます。

さまざまなプログラムが存在していますが、それらに共通して必要な処理として思い浮かぶのは、例えばファイルからデータを読んだり、書き込んだりという処理です。ワープロは、“文章”を“ファイルに保存する”必要があります。表計算は、“計算表”を“ファイルに保存する”必要があります。

ここで、これらプログラムに共通する部分の、“ファイルに保存する”という処理は、OSが行ってくれます。実は、プログラムは、例えば“文章”や、“計算表”といったアプリケーションに固有の、“体裁を整える処理”だけを行えばよく、あとは、OSに対して“ファイルに保存して”と要求を出すだけで、ファイルに実際に保存する部分はOSが実行してくれるのです。

エラーとエラー処理

プログラムがまともに動作しようとすると、OSに対して大量の要求を行うことになります。当然、すべての要求が必ず成功するわけではありません。 OSにメモリを要求したとしても、メモリが不足していれば、必要なメモリを確保することはできません。ファイルであれば、ディスクの容量が足らなければ書き込むことはできません。

このように、様々な理由でOSへの要求は失敗するのですが、失敗した場合、それをプログラムに伝える必要が出てきます。この失敗の通知が、“エラー”なのです。エラーはすべてOSによって管理されており、エラーが起こったときには正しく処理され、安全にプログラムに伝えられるように設計されているのです。エラーが発生したということは、プログラムとしてはそれ以上先に進むことができないということを意味しています。

例えば、OSでメモリの確保がエラーとなった場合、それ以上データを記憶することができないため、プログラムとしては何とかしなければなりません。それが“エラー処理”です。 エラー処理は、プログラム側で行わなければならない処理です。例えば、メモリの確保に失敗した場合は、計算途中のデータを保存するなり、プログラムを強制停止するなり、画面上にメッセージを表示してユーザにどうするべきか聞くなり、何らかの対処を行わなければならないのです。

未定義の動作とバグ

もし、エラーが発生したときに、適切にエラー処理を行わなければ、いったい何が起こるでしょう。答えは、“わからない”です。

プログラムによってそのエラー処理が行われないことによって、プログラムの実行状態が“未定義の状態”に陥ってしまいます。それでも、なおかつ何らかの処理を行おうとすると、“未定義な動作(Undefined Behavior)”を行ってしまい、制御不可能な状態に陥ってしまいます。 一度、このような未定義の動作が起こり始めると、プログラムの異常停止や、データを破損したりするなどの〝故障〟を引き起こします。 このような故障を引き起こすプログラム上の誤りを〝バグ〟と言います。

脆弱性とエクスプロイト

バグの中には、外部から“異常なデータ”を入力することで、“故障”を起こさせることができるものがあります。 例えば、“数字”を入力するべきところに、“文字”が入力されたら何が起こるでしょうか。“文字”と“文字”を計算すると、まともな結果は返ってきません。

このように、バグの中には、想定外の入力を行うことで、故意に“故障”を引き起こすことのできるものがあります。 もし、外部からの“異常なデータ”で引き起こされる“故障”が、攻撃者にとって都合の良い動作であった場合、何が起こるでしょうか。この“故障”が悪用される可能性があります。このような、外部からの入力で、“悪用できる動作”を、強制的に起こさせることのできるバグのことを、“脆弱性”といいます。

この脆弱性を攻撃し、“故障”を悪用することを、“エクスプロイト”と呼びます。
例えば、ゲームの“バグ”を利用して、“裏技”と言われるテクニックを使うことで、ゲームを有利に進めることができることがあります。セキュリティの世界では、この利用できる“バグ”を脆弱性とよび、“裏技”をエクスプロイトと呼ぶのです。

前号へ

◆ 次回は「権限と脆弱性」についてお届けします。

セミナー講演のご依頼・お問い合わせはこちらから。

お問い合わせフォーム

過去の記事一覧

このページのトップへ

事業内容
製品・サービス情報

TOTEC AMENITY LIMITED. All Rights Reserved. since2006.