TOPに戻る
▼Virus
Code REDウィルスとは?
┣ マイクロソフトの説明
┃ とIIS機能
┣ アプリケーションソフ
┃ トは機能の寄集め
┣ 呼出・復帰時に行わ
┃ れる事
┣ 復帰の場所を変え
┃ てみると・・
┣ 感染したCode R
┃ EDは何を行うか
┣ 異常データをサーバ
┃ ーのバッファに格納
┣ プロセッサの保護機
┃ 能
┣ ウィルスの場所を特
┃ 定する
┣ウィルスコードを実
┃ 行する
┣ CodeREDの正体1
┗ CodeREDの正体2
Copyright(C) 2001-2002.ugpop. All rights reserved.
■ プロセッサの保護機能 ■
前回はWEBページの表示を要求する文字列「GET / HTTP/1.0」
を受けたサーバーがどのような動きをするのか解説を行いまし
た。
文字列は文字コードと呼ばれる数字としてバッファに格納され
ますが、そのバッファには限度がある為に、Code REDウィルス
より多量の文字列を受けたサーバーは、その文字列を格納しき
れずにバッファが溢れて(オーバーフロー)しまう事の解説を行
いました。
また、バッファオーバーフローの為に、本来WINDOWS2000への
復帰情報が格納されているはずの場所に「004E 004E」という
値が格納されてしまう事の説明を行いました。
さて、以下にCode REDウィルスにより攻撃を受けた直後のサー
バーのバッファを示します。
クライアントから サーバーの
送られてきた文字列 バッファ
┌───┐
G───→│ 0047 │
U ├───┤
N E───→│ 0045 │
I ├───┤
C T───→│ 0054 │
O ├───┤
D ───→│ 0020 │
E ├───┤
で /───→│ 002F │
格 ├───┤
納 d───→│ 0064 │
│ ├───┤
│ e───→│ 0065 │
│ ├───┤
↓ f───→│ 0066 │
│ ├───┤
│ a───→│ 0061 │
│ ├───┤
│ u───→│ 0075 │
│ ├───┤
↓ l───→│ 006C │
│ ├───┤
│ t───→│ 0074 │
│ ├───┤
│ .───→│ 002E │
│ ├───┤
↓ i───→│ 0069 │
│ : ├───┤
│ : │ : │
│ : │ : │
│ : 〜 : 〜
│ : │ : │
│ : │ : │
│ 限界点├───┤
│ N───→│ 004E │←本来WINDOWS2000に復帰する
↓ N───→│ 004E │ 場所が格納されているはず。
└───┘
一番下の限界点の次に「N」の文字が格納されています。
本来は、ここにWINDOWS2000に復帰する場所が格納されている
はずなのですが、バッファオーバーフローにより壊れてしまっ
ています。
一般的には、この「004E 004E」の部分、ここにウィルスの場
所情報を入れるとウィルスが活動開始します。
以下に、そのイメージを示します。
┌──────────────┐
│WINDOWS2000の動作│
└──────────────┘
・
・
OSの処理
・
・ バッファ
│ ┌───────┐
1.IIS機能呼出し ┌─→│復帰する場所 │
├───────────────┘ └───────┘
│ バッファを1つ確保し、復帰する場所情報格納
├─────────┐
│ ↓呼出
│ ┌──────────────┐
・ │ IIS機能の動作 │
・ └─────┬────────┘
・ │ バッファ
続きの処理 2.バッファを確保 ┌───────┐
・ ├───────→│ │
・ │ ├───────┤
・ │ │復帰する場所 │
│ └───────┘
3.リクエストをUNICODE
で格納 │ ┌───────┐
├───────→│GET ・・・ │
×バッファオーバーフローのバグ├───────┤
├───────→│ウィルスの場所│
│ └───────┘
│
4.呼出し元へ復帰
│ ┌───────┐
│←───────┤ウィルスの場所│
│どこへ戻るか参照└───────┘
│
└─────┐
↓
┌────────────┐
│ ウィルス活動開始 │
└────────────┘
1項の「IIS機能呼出し」時に行われる「バッファを一つ確
保し、復帰する場所情報格納」する処理と、4項の「呼出し元
へ復帰」時に行われる「どこへ戻るか参照」する処理は、イン
テルプロセッサの仕様によりハード的に行われるのでした。
ところで、「ウィルスの場所」ってどこなのでしょうか?
ウィルスの場所が分かっている場合、上の図の様にバッファオ
ーバーフローを故意に発生させ、ウィルスの場所を入れる事が
出来ます。
Windows2000上で動作する全てのWEBサーバーにおいて、「ウィ
ルスの場所」が固定的に決まっていれば、上のような方法が可
能なのです。
しかし、残念ながら(?)ウィルスの場所はそれぞれのサーバ
ー毎に異なります。
ウィルスの場所が分からない場合、どのようにしてウィルスが
活動開始する事が出来るのでしょうか?
実は、「復帰する場所」が格納されているはずの部分に故意に
意味の無い異常な値を入れてしまいます。
これがまず第一段階です。
ここで、以前に使用した図を再び使用します。
┌──────────────┐
│アプリケーションソフトの動作│
└──────────────┘ バッファ
1.バッファを確保 ┌───────┐
├─────────────────→│ │
│ └───────┘
2.バッファに細かい指示を格納 バッファ
│ ┌───────┐
├─────────────────→│丸い絵を表示 │
│ ├───────┤
3.絵を表示する機能呼出し ┌─→│復帰する場所 │
├───────────────┘ └───────┘
│ バッファをもう1つ確保し、復帰する場所情報格納
├─────────┐
│ ↓呼出
│ ┌──────────────┐
・ │ 絵を表示する機能の動作 │
・ └──────────────┘ バッファ
・ 4.バッファを読出し ┌───────┐
続きの処理 │←───────┤丸い絵を表示 │
・ ×バッファオーバーフローのバグ├───────┤
・ ├───────→│ 変な値 │
・ │ └───────┘
5.丸い絵を画面に表示 画面
│ ┌───────┐
│ │ │
│ │ │
├────────┼─→○ │
│ │ │
│ └───────┘
6.呼出し元へ復帰 バッファ
│ ┌───────┐
│←───────┤ 変な値 │
│どこへ戻るか参照└───────┘
│どこへ戻ればいいのか分からない。
└───┐
└─→×
4項にてバッファオーバーフローのバグが発生した為に、本来
「復帰する場所」が格納されているはずのバッファが壊れてし
まいます。
6項にて「変な値」を参照してしまい、本来、行ってはいけな
い場所に復帰しようとします。
こうなってしまった場合、プロセッサの保護機能が働き、多く
の場合、「一般保護例外が発生しました。」とか、「ページ違
反が発生しました。」とか表示され、アプリケーションソフト
が強制終了されます。
さて、上の説明は以前に行ったものです。
今回の一番最初に示した図で、復帰する場所に「004E 004E」
が格納されている事を説明しました。実はこれは全く意味を持
たない値です。
つまり、上の図で言うところの「変な値」に相当します。
「復帰する場所」が格納されているはずの場所に「変な値」が
格納されている為、プロセッサの保護機能が働くようになりま
す。
このプロセッサの保護機能を利用してウィルスが活動する訳で
すが、今回は、この「プロセッサの保護機能」について、もう
少し詳しく解説します。
インテルプロセッサの保護機能が働くと、OS起動時に登録し
てあるプログラムが動作するようになっています。
これはインテルプロセッサの仕様であり、この時に動作開始す
るプログラムの事をハンドラと呼びます。
以下に、上の図6項においてハンドラが動作開始する時の図を
示します。
6.呼出し元へ復帰 バッファ
│ ┌───────┐
│←───────┤ 変な値 │
│どこへ戻るか参照└───────┘
│どこへ戻ればいいのか分からない。
└───┐
└─→×
プロセッサの保護機能動作
│
┌──────────────┘
↓
7. ハンドラ動作開始
(OS起動時にあらかじめ登録されている)
このハンドラは何をするのかというと、UNIXの場合コンピュ
ータ情報(COREダンプと呼ばれる)を収集する為のプログラ
ムを起動します。
また、WINDOWSの場合「ページ違反がありました。」等のメッ
セージを表示するプログラムを起動します。
WINDOWSユーザーであれば、何度も(^^;見た事があるはずです。
以下にWINDOWSの場合において、メッセージを表示するプログ
ラムが起動する図を示します。
6.呼出し元へ復帰 バッファ
│ ┌───────┐
│←───────┤ 変な値 │
│どこへ戻るか参照└───────┘
│どこへ戻ればいいのか分からない。
└───┐
└─→×
プロセッサの保護機能動作
│
┌──────────────┘
│
↓
7.ハンドラ動作開始
(OS起動時にあらかじめ登録されている)
│
│
↓
8.メッセージを表示するプログラム起動
│
↓
9.「一般保護例外が発生しました。」
「ページ違反が発生しました。」
等のメッセージを表示し、アプリケ
ーションソフトが強制終了された事
をユーザーに伝える
このメッセージを表示するプログラムですが、実はアプリケー
ションソフト毎に指定する事が出来ます。
つまり各アプリケーションソフト毎に、強制終了してしまう時
に起動するプログラムを指定出来ます。
実は、アプリケーションソフトが強制終了してしまった時に
起動するプログラムの場所情報は、「変な値」が入っている
バッファのすぐ近くに格納されています。
これはWINDOWSの仕様です。
以下に、ハンドラがメッセージを表示するプログラムを起動す
る図を示します。上の図とは、7項の部分が異なりますので注
意して見て下さい。
6.呼出し元へ復帰 バッファ
│ ┌───────┐
│←───────┤ 変な値 │
│どこへ戻るか参照└───────┘
│どこへ戻ればいいのか分からない。
└───┐
└─→×
プロセッサの保護機能動作
│
┌──────────────┘ バッファ
│ ┌───────┐
↓ │ 変な値 │
7.ハンドラ動作開始 └───────┘
(OS起動時にあらかじめ登録されている) ・
│ ・
│ 何を起動するか参照 ┌───────┐
↓←───────────────┤メッセージを表│
8.メッセージを表示するプログラム起動 │示するプログラ│
│ │ムの場所 │
↓ └───────┘
9.「一般保護例外が発生しました。」
「ページ違反が発生しました。」
等のメッセージを表示し、アプリケ
ーションソフトが強制終了された事
をユーザーに伝える
7項で「メッセージを表示するプログラムの場所」を参照して
いますね。
しかし、ここでもまた、バッファオーバーフロー発生時にウィ
ルスの場所がどこなのか分からない為、単純に入れてしまう事
は出来ません。
問題は、ウィルスの場所がどこなのか分からない、という点に
つきます。
どうやってウィルスの場所を特定するのでしょうか?
その説明は次回に行う事にします。
←前へ戻る ▲このページの上へ 続きを読む→