【コラム】
スタックの役割は、第18回に書いたとおり「一時データ置き場」である。一方で、このデータの種類によって、スタックも分類することができる。以下にその分類を記述する。
スタックベースのバッファオーバーフローを理解するうえで、重要なポイントのひとつになるのはリターンアドレスについての概念になる。よって、ここでは後者について説明していきたい。
ここで、あるプログラムがあったとする。そのプログラムでは、図1のように特定の処理Aと処理Bが重複して実行されるとする。このままのプログラムでもよいのだが、重複した処理を単一の処理として整理したほうが、メモリ利用効率が向上することになる。また、重複した処理を何度もコーディングするというのは、プログラマにとって大変煩わしい。
そこで、重複する処理はプログラム本体(メインルーチン)とは別の場所に個別に作成しておき、必要に応じてそれを呼び出す、という方法が考案された。このようなプログラム本体とは別の場所に作成され、呼び出される特定の処理を「サブルーチン」と呼ぶ。図2にその概念を示す。
プログラマにとって、あるプログラムの一連の処理をサブルーチンに分割するメリットについて以下に述べる。
上記のメリットの出典: Wikipedia
ところで、本稿で扱うバッファオーバーフローは、CおよびC++言語でコーディングされたプログラムにおいて発生しやすいとされている。そして、これらのプログラミング言語も、関数という形でサブルーチンを実現している。具体的には、これらの言語のコンパイラによって生成されるコードは、[コール]と[リターン]というCPUへの命令を利用することで、サブルーチンを実現しているのだ。
サブルーチンに関して理解をすすめるために、さらに図3を用意してみた。細かい点は理解促進のために省いてあるのでご容赦いただきたい。
あるプログラム中で、サブルーチンの呼び出しがコール命令の実行によって(1の部分)行われたとする。すると、コール命令の次の命令が格納されているアドレスをスタックに保存する(2の部分)。このように、サブルーチンの呼び出しのあった次の命令のアドレスを保存するスタックは「コールスタック」と呼ばれる。加えて、コールスタックに保存されたアドレスの値は「リターンアドレス」と呼ばれる。
次に、サブルーチンの処理が開始された(3の部分)のちに終了したとする。ここでメインルーチンに処理を戻すためにリターン命令が実行される(4の部分)。すると、先ほどのコールスタックからリターンアドレスが取り出され、それを指標にCPUは処理を移す(5の部分)ことでメインルーチンへの復帰を図る。いささか単純化しているきらいもあるが、以上がCおよびC++言語でコーディングされたプログラムにおけるサブルーチンの取り扱いになる。
重要なことは、コールスタックに含まれるリターンアドレスは、プログラムが正確に処理を進めるための指標であるということになる。この値にズレや間違いがあれば、プログラムはコーディングした通りには動いてくれなくなるのだ。そこで、ひとつ想像力を働かせてみよう。プログラムをコーディングした当人以外が、この値を自在に操ることができたなら、いったい何が起こるというのだろうか?
プログラムの動作不全が起こる、と答えられればほぼ正解である。ソフトウエアにつきもののバグと同じように、動作不全が起こる個所を避けて使用するなどして、その利用者は使い勝手に支障を起こさないように心がけるだろう。問題は、リターンアドレスの値を自在に操れるようにバグを使いこなす者である。
バグを巧みに利用することで、ソフトウエアの本来の動作とはかけ離れた処理を引き起こさせる手口がある。スタックベースのバッファオーバーフローは、まさにその手口のひとつである。多量のデータをスタックに複製させることで、リターンアドレスを上書きし、メインルーチンでない別の場所から命令を読み出させることで、攻撃を成功させるのだ。
| Office製品の脆弱性が昨年比4倍に--ラック コンピュータセキュリティ研究所 [2007/2/13] |
| WindowsにおけるRootkitの現状と将来 - VistaのRootkit対策とは [2007/2/6] |
| ISPからボット感染報告を受けたユーザー、何%が対策をするか [2007/2/14] |
| 情報セキュリティは抽象論の時代から実効性の時代へ - 岡村弁護士 [2007/2/14] |
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
坂本教授、木の光合成に着目した不思議な音楽的挑戦!『ETV特集』 [10:08 2/11] キャリア |
|
バロックで異端!水墨画の巨匠、雪村周継の神業に迫る! [10:07 2/11] キャリア |
|
元・宝塚の真琴つばさ、ドラマ初主演で小学生の母親役に挑戦! [10:07 2/11] キャリア |
|
「四大陸フィギュア」今夜は連覇のかかった高橋、昨年末復活した浅田、村上に注目! [10:07 2/11] キャリア |
|
【EU発!Breaking News】精神疾患治療のため?マラリア患者の血液を注射された男性。(オーストリア) [10:05 2/11] キャリア |