分かりやす〜い
コンピュータ技術情報

TOPに戻る
▼Processor
バッファオーバーフロー
┣ 異常な動作
┣ 本当に怖い事
┣ プログラムを作る
┣ バッファオーバーフロ
┃ ーを発生させる

┣ スタック領域の構成
┣ 何故強制終了されるの
┃ か?

┣ 強制終了されないよう
┃ に作り変える

┣ 任意のコードを実行す
┃ る

┣ of1.cとof2.cとの違い
┣ 例外
┣ 例外ハンドラの行う事
┣ of3.cを作る
┣ of1.cとof3.cとの違い
┣ of3.exeの例外ハンド
┃ ラ

┣ of3.exeを強制終了す
┃ るのは?

┣ 例外ハンドラの特徴
┣ Blue Screen
┣ BufferOverFlow応用
┃ プログラム

┗ 機械語の説明

Copyright(C) 2001-2002.ugpop. All rights reserved.




■デジタル用語辞典:
■ 異常な動作 ■

今回から講座「バッファオーバーフロー」を始めます。

皆さんは各種セキュリティ情報サイトを定期的にチェックした
りする事はあるでしょうか?

そんなサイト知らない、という方の為にいくつか紹介しておき
ます。


マイクロソフトセキュリティ情報一覧
マイクロソフト製品全般に関するセキュリティ情報やパッチ情

>>> http://www.microsoft.com/japan/technet/security/current.asp?frame=true

情報処理振興事業協会セキュリティセンター
セキュリティ情報全般、各種ウィルス情報や新種ウィルス情報
届出など
>>> http://www.ipa.go.jp/security/

シマンテックセキュリティレスポンス
新種のウィルス情報やウィルス駆除ツールなど
>>> http://www.symantec.com/region/jp/sarcj/


これらのサイトに掲載されているセキュリティ情報を見ていく
と、時々「バッファオーバーフロー」という言葉を見かけると
思います。

「未チェックのバッファ」とか、「バッファオーバーラン」等
という表現がされる事もありますが、基本的に全て同じ意味で
す。

例えば、最近マイクロソフトのサイトにおいてパッチが公開、
更新された脆弱性レポートには以下の様なものがあります。


─↓ここから──────────────────────

 SQL Server Web タスクで権限が昇格する (Q316333) (MS02-
 061) 2002/10/17

 Windows XP 「ヘルプとサポート センター」 の問題により
 ファイルが削除される (Q328940) (MS02-060) 2002/10/17

 Word フィールドおよび Excel の外部データ更新の問題によ
 り、情報が漏えいされる (Q330008)」 (MS02-059) 2002/10/
 17

 証明書確認の問題により、ID が偽装される (Q328145) (MS02
 -050) 2002/10/17

●Services for Unix 3.0 に含まれる Interix SDK の問題に
 よりコードが実行される (Q329209) (MS02-057) 2002/10/16

●ファイル展開機能に含まれる未チェックのバッファにより、
 コードが実行される (Q329048) (MS02-054) 2002/10/16

●Outlook Express の S/MIME 解析の未チェックのバッファに
 よりシステムが侵害される(Q328676) (MS02-058) 2002/10/15

●Windows ヘルプ機能の未チェックのバッファにより、コード
 が実行される (Q323255) (MS02-055) 2002/10/15

●TSAC ActiveX コントロールのバッファ オーバーランにより、
 コードが実行される (Q327521) (MS02-046) 2002/10/11

●SQL Server 用の累積的な修正プログラム (Q316333) (MS02-
 056) 2002/10/10

●Windows Shell の未チェックのバッファにより、コードが実
 行される (MS02-014) 2002/10/09

─↑ここまで──────────────────────

全て見たい方はこちら。
マイクロソフトセキュリティ情報一覧
>>> http://www.microsoft.com/japan/technet/security/current.asp?frame=true


ここに示した情報は2002年10月1日から2002年10月18日までの
間で提供&更新された情報です。
この中で、「●」印が付いている物は全て「バッファオーバー
フロー」が原因になっているものです。

結構ありますよね?


バッファオーバーフローというのは、一体何なのでしょうか?

「そんな事、簡単に答えられる。」という方もいらっしゃるか
もしれません。

バッファオーバーフローというのは、「バッファが溢れて(オ
ーバーフローして)しまうバグ(プログラムの誤り)」の事で
す。

バッファが溢れると何かいけない事でもあるのでしょうか?

ちょっと図を見てみましょう。
例えば、aというバッファとbというバッファがあるとします。
分かりやすくなるように、「b」というバッファには「■」を
入れておきます。


  バッファa
┌───────┐
┌───────┐
│       │
└───────┘

┌───────────────┐
│■■■■■■■■■■■■■■■│
└───────────────┘
└───────────────┘
      バッファb


図を見てもらえると分かりますが、「b」というバッファの方
が大きいです。

そして、「a」というバッファのすぐ隣には、他の用途で使わ
れているバッファ「c」があるとします。
以下にその図を示します。


  バッファa   バッファc  
┌───────┬───────┐
┌───────┬───────┐
│       │       │
└───────┴───────┘

┌───────────────┐
│■■■■■■■■■■■■■■■│
└───────────────┘
└───────────────┘
      バッファb


この状態の時に、バッファ「b」をバッファ「a」にコピーす
るとどうなるでしょうか?


まず、正常な処理を見てみましょう。

バッファオーバーフローのバグが無いプログラムの場合、コピ
ー処理を行なう時には、必ず「バッファの長さがチェック」さ
れます。

長さチェックが行なわれるので、正常なプログラムの場合は以
下の様になります。


  バッファa   バッファc  
┌───────┬───────┐
┌───────┬───────┐
│■■■■■■■│       │
└───────┴───────┘
    ↑コピー
┌───────────────┐
│■■■■■■■■■■■■■■■│
└───────────────┘
└───────────────┘
      バッファb


きちんと長さチェックが行なわれるので、バッファ「a」の大
きさを超えないようにコピー処理が行なわれています。


次にバッファオーバーフローのバグがある場合の処理を見てみ
ましょう。

以下にバッファ「b」をバッファ「a」にコピーしたイメージ
を示します。


  バッファa   バッファc  
┌───────┬───────┐
┌───────┬───────┐
│■■■■■■■■■■■■■■■│
└───────┴───────┘
    ↑コピー
┌───────────────┐
│■■■■■■■■■■■■■■■│
└───────────────┘
└───────────────┘
      バッファb


バッファ「a」がバッファ「b」により上書きされています。
しかし問題はバッファ「c」の方です。

他の用途で使わなければいけないはずのバッファ「c」までも
上書きされてしまいました。

これは明らかなバグです。

何故なら、この後、バッファ「c」を使う処理を行なおうとし
ても、既にバッファ「c」は他の物で上書きされてしまってい
るからです。


もう少し具体的に書きます。

例えば、バッファ「c」が、「1+1の計算結果」を格納する
用途に使用されていたとしましょう。
「バッファオーバーフローが発生する前」までは普通に「1+
1の答え」である「2」が格納されます。

以下にそのイメージを示します。


●バッファオーバーフローが発生する前

  バッファa   バッファc  
┌───────┬───────┐
┌───────┬───────┐
│       │   2   │
└───────┴───────┘
            ↑
           1+1の答え
┌───────────────┐
│               │
└───────────────┘
└───────────────┘
      バッファb


バッファ「c」に「2」が格納されていますね。

ここで、バッファ「b」には「12345678」という数字
が格納されているとします。


  バッファa   バッファc  
┌───────┬───────┐
┌───────┬───────┐
│       │   2   │
└───────┴───────┘

┌───────────────┐
│1 2 3 4 5 6 7 8│
└───────────────┘
└───────────────┘
      バッファb


それでは、ここでバッファオーバーフローが発生したとしまし
ょう。


●バッファオーバーフローが発生した後

  バッファa   バッファc  
┌───────┬───────┐
┌───────┬───────┐
│1 2 3 4 5 6 7 8│
└───────┴───────┘
    ↑コピー    ↑コピー
┌───────────────┐
│1 2 3 4 5 6 7 8│
└───────────────┘
└───────────────┘
      バッファb


図を見ていただくとすぐに分かりますが、「1+1の答え」を
格納しなければならない部分に対して「5678」という、訳
の分からない値が書き込まれてしまっています。


これだけでもバッファオーバーフローの異常な動作がお分かり
頂けたかと思いますが、実はバッファオーバーフローの怖いと
ころはここからです。

続きは次回に説明します。



▲このページの上へ

▲このページの上へ

▲このページの上へ    続きを読む→

▲このページの上へ