TOPに戻る
▼Virus
Code REDウィルスとは?
┣ マイクロソフトの説明
┃ とIIS機能
┣ アプリケーションソフ
┃ トは機能の寄集め
┣ 呼出・復帰時に行わ
┃ れる事
┣ 復帰の場所を変え
┃ てみると・・
┣ 感染したCode R
┃ EDは何を行うか
┣ 異常データをサーバ
┃ ーのバッファに格納
┣ プロセッサの保護機
┃ 能
┣ ウィルスの場所を特
┃ 定する
┣ウィルスコードを実
┃ 行する
┣ CodeREDの正体1
┗ CodeREDの正体2
Copyright(C) 2001-2002.ugpop. All rights reserved.
■ 復帰の場所を変えてみると・・ ■
前回はアプリケーションソフトが各機能を呼出/復帰する時に
どのような処理が行なわれるか説明しました。
呼出時にはバッファが1つ確保され、そこに「復帰する場所」
情報が格納され、復帰時にはバッファから「復帰する場所」を
参照して元の場所へ戻る事を解説しました。
また、その処理はインテルプロセッサの仕様であり、プロセッ
サによりハード的に行なわれる事の説明も行いました。
今回は、このインテルプロセッサの仕様を利用して、Code RED
ウィルスがどのようにして発病してしまうのかを解説したいと
思います。
まずはアプリケーションソフトの動作について書かれた図を見
てみましょう。
┌──────────────┐
│アプリケーションソフトの動作│
└──────────────┘ バッファ
1.バッファを確保 ┌───────┐
├─────────────────→│ │
│ └───────┘
2.バッファに細かい指示を格納 バッファ
│ ┌───────┐
├─────────────────→│丸い絵を表示 │
│ ├───────┤
3.絵を表示する機能呼出し ┌─→│復帰する場所 │
├───────────────┘ └───────┘
│ バッファをもう1つ確保し、復帰する場所情報格納
├─────────┐
│復帰 ↓呼出
│←┐ ┌──────────────┐
・ │ │ 絵を表示する機能の動作 │
・ │ └──────────────┘ バッファ
・ │ 4.バッファを読出し ┌───────┐
続きの処理│ │←───────┤丸い絵を表示 │
・ │ │ └───────┘
・ │ 5.丸い絵を画面に表示 画面
・ │ │ ┌───────┐
│ │ │ │
│ │ │ │
│ ├────────┼─→○ │
│ │ │ │
│ │ └───────┘
│ 6.呼出し元へ復帰 バッファ
│ │ ┌───────┐
└───────┘←───────┤復帰する場所 │
どこへ戻るか参照└───────┘
3項の「絵を表示する機能呼出し」の時に行なわれる、「バッ
ファをもう1つ確保し、復帰する場所情報格納」処理と、6項
の「呼出し元へ復帰」の時に行なわれる、「どこへ戻るか参照」
処理はプロセッサによりハード的に行なわれるのでしたね。
では、上の図の「絵を表示する機能の動作」の中にバッファオ
ーバーフローのバグがあったとしましょう。
バッファオーバーフローのバグというのは、バッファが壊れて
しまうバグの事です。
下の図はバッファオーバーフローのバグがある場合の動作が書
かれてあります。
上の図とは4項の「バッファを読出し」と6項の「呼出し元へ
復帰」が異なりますので注意して見て下さい。
┌──────────────┐
│アプリケーションソフトの動作│
└──────────────┘ バッファ
1.バッファを確保 ┌───────┐
├─────────────────→│ │
│ └───────┘
2.バッファに細かい指示を格納 バッファ
│ ┌───────┐
├─────────────────→│丸い絵を表示 │
│ ├───────┤
3.絵を表示する機能呼出し ┌─→│復帰する場所 │
├───────────────┘ └───────┘
│ バッファをもう1つ確保し、復帰する場所情報格納
├─────────┐
│ ↓呼出
│ ┌──────────────┐
・ │ 絵を表示する機能の動作 │
・ └──────────────┘ バッファ
・ 4.バッファを読出し ┌───────┐
続きの処理 │←───────┤丸い絵を表示 │
・ ×バッファオーバーフローのバグ├───────┤
・ ├───────→│ 変な値 │
・ │ └───────┘
5.丸い絵を画面に表示 画面
│ ┌───────┐
│ │ │
│ │ │
├────────┼─→○ │
│ │ │
│ └───────┘
6.呼出し元へ復帰 バッファ
│ ┌───────┐
│←───────┤ 変な値 │
│どこへ戻るか参照└───────┘
│どこへ戻ればいいのか分からない。
└───┐
└─→×
4項にてバッファオーバーフローのバグが発生した為に、本来
「復帰する場所」が格納されているはずのバッファが壊れてし
まいます。
6項にて「変な値」を参照してしまい、本来、行ってはいけな
い場所に復帰しようとします。
こうなってしまった場合、プロセッサの保護機能が働き、多く
の場合、「一般保護例外が発生しました。」とか、「ページ違
反が発生しました。」とか表示され、アプリケーションソフト
が強制終了されます。
または、青い画面が表示される事になります。
以上は、バッファオーバーフローのバグが発生した場合の動作
です。
さて、ここで「変な値」に注目しましょう。
この「変な値」を意図した値に変更する事は可能でしょうか?
実は可能なのです。
下の図を見てください。4項と6項の「変な値」を意図的に変
えています。
┌──────────────┐
│アプリケーションソフトの動作│
└──────────────┘ バッファ
1.バッファを確保 ┌───────┐
├─────────────────→│ │
│ └───────┘
2.バッファに細かい指示を格納 バッファ
│ ┌───────┐
├─────────────────→│丸い絵を表示 │
│ ├───────┤
3.絵を表示する機能呼出し ┌─→│復帰する場所 │
├───────────────┘ └───────┘
│ バッファをもう1つ確保し、復帰する場所情報格納
├─────────┐
│ ↓呼出
│ ┌──────────────┐
・ │ 絵を表示する機能の動作 │
・ └──────────────┘ バッファ
・ 4.バッファを読出し ┌───────┐
続きの処理 │←───────┤丸い絵を表示 │
・ ×バッファオーバーフローのバグ├───────┤
・ ├───────→│ウィルスの場所│
・ │ └───────┘
5.丸い絵を画面に表示 画面
│ ┌───────┐
│ │ │
│ │ │
├────────┼─→○ │
│ │ │
│ └───────┘
6.呼出し元へ復帰 バッファ
│ ┌───────┐
│←───────┤ウィルスの場所│
│どこへ戻るか参照└───────┘
│
└─────┐
↓
┌────────────┐
│ ウィルス活動開始 │
└────────────┘
上の図6項を見て下さい。
そうです。これがウィルスが活動開始してしまう瞬間です。
しかも6項はプロセッサによりハード的に動作してしまう為、
ソフトウェアではどうやっても防ぎようがありません!
これを防ぐには4項にあるバッファオーバーフローのバグを無
くして、バッファの破壊が発生しないようにするしかないので
す。
次回は活動を開始したCode REDウィルスがどのような事を行う
のか説明する予定です。
←前へ戻る ▲このページの上へ 続きを読む→