情報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)”を行ってしまい、制御不可能な状態に陥ってしまいます。 一度、このような未定義の動作が起こり始めると、プログラムの異常停止や、データを破損したりするなどの〝故障〟を引き起こします。 このような故障を引き起こすプログラム上の誤りを〝バグ〟と言います。
脆弱性とエクスプロイト
バグの中には、外部から“異常なデータ”を入力することで、“故障”を起こさせることができるものがあります。 例えば、“数字”を入力するべきところに、“文字”が入力されたら何が起こるでしょうか。“文字”と“文字”を計算すると、まともな結果は返ってきません。
このように、バグの中には、想定外の入力を行うことで、故意に“故障”を引き起こすことのできるものがあります。 もし、外部からの“異常なデータ”で引き起こされる“故障”が、攻撃者にとって都合の良い動作であった場合、何が起こるでしょうか。この“故障”が悪用される可能性があります。このような、外部からの入力で、“悪用できる動作”を、強制的に起こさせることのできるバグのことを、“脆弱性”といいます。
この脆弱性を攻撃し、“故障”を悪用することを、“エクスプロイト”と呼びます。
例えば、ゲームの“バグ”を利用して、“裏技”と言われるテクニックを使うことで、ゲームを有利に進めることができることがあります。セキュリティの世界では、この利用できる“バグ”を脆弱性とよび、“裏技”をエクスプロイトと呼ぶのです。
◆ 次回は「権限と脆弱性」についてお届けします。
セミナー講演のご依頼・お問い合わせはこちらから。
過去の記事一覧
- 2011年11月1日 第1回 サイバースペースのセキュリティ
- 2011年12月20日 第2回 なぜサイバーセキュリティが必要か?
- 2012年1月25日 第3回 サイバーセキュリティの意義
- 2012年2月29日 第4回 エラーとバグと脆弱性
- 2012年3月23日 第5回 権限と脆弱性
- 2012年4月12日 第6回 人間の持つ脆弱性
- 2012年5月24日 第7回 サイバー攻撃を受けたら何をするべきか【1】
- 2012年6月27日 第8回 サイバー攻撃を受けたら何をするべきか【2】
- 2012年7月26日 第9回 サイバー攻撃を受けたら何をするべきか【3】
- 2012年8月22日 第10回 サイバー攻撃を受けたら何をするべきか【4】
- 2012年9月19日 第11回 汎用ソフトウェアの脆弱性対策
- 2012年10月17日 第12回 ゼロデイ攻撃・標的型攻撃と新型ウイルス対策
- 2012年11月21日 第13回 Webアプリケーションの脆弱性対策
- 2012年12月19日 第14回 Webアプリケーションのセキュリティ設計
- 2013年1月23日 第15回 サイバーセキュリティを実現する
- 2013年2月20日 第16回 デジタルフォレンジックスの導入
- 2013年3月26日 第17回 情報漏洩対策
- 2013年4月24日 第18回 メールの添付ファイル禁止とファイル送信サービス
- 2013年5月22日 第19回 私物モバイル対策(BYOD対策)
- 2013年6月19日 第20回 新型サイバー攻撃には多層防御で対抗する
- 2013年7月23日 第21回 マスコミ社会から口コミ社会へ
- 2013年8月22日 第22回 批判にさらされる企業
- 2013年9月26日 第23回 サイバースペース上での企業の責任を知る
- 2013年10月23日 第24回 顧客の情報を預かる責任
- 2013年11月20日 第25回 個人情報取得のポリシー
- 2013年12月18日 第26回 即応性の危機管理広報
- 2014年1月6日 第27回 情報という経営資源を守れ
- 2014年2月19日 第28回 利用者中心のサイバーセキュリティへ向けて
- 2014年3月13日 第29回 安全・安心なサイバー社会の実現(最終回)