TOPに戻る
▼Virus
Code REDウィルスとは?
┣ マイクロソフトの説明
┃ とIIS機能
┣ アプリケーションソフ
┃ トは機能の寄集め
┣ 呼出・復帰時に行わ
┃ れる事
┣ 復帰の場所を変え
┃ てみると・・
┣ 感染したCode R
┃ EDは何を行うか
┣ 異常データをサーバ
┃ ーのバッファに格納
┣ プロセッサの保護機
┃ 能
┣ ウィルスの場所を特
┃ 定する
┣ウィルスコードを実
┃ 行する
┣ CodeREDの正体1
┗ CodeREDの正体2
Copyright(C) 2001-2002.ugpop. All rights reserved.
■ ウィルスコードを実行する ■
前回はどのようにしてウィルスの場所を特定するのか解説を行
いました。
プロセッサの保護機能により動作開始するハンドラが別のプロ
グラムを起動するまでの間にプロセッサ内部レジスタEBXにウ
ィルスの場所が格納されるという事の説明を行いました。
今回はどのようにしてレジスタEBXに処理を移行させるのか解
説を行います。
まずはプロセッサの保護機能が動作し、別プログラムが起動す
るまでの図を見てみましょう。
6.呼出し元へ復帰 バッファ
│ ┌───────┐
│←───────┤ 変な値 │
│どこへ戻るか参照└───────┘
│どこへ戻ればいいのか分からない。
└───┐
└─→×
プロセッサの保護機能動作
│
┌──────────────┘ バッファ
│ ┌───────┐
↓ │ 変な値 │
7.ハンドラ動作開始 └───────┘
(OS起動時にあらかじめ登録されている) ・
│ ・
│ ここにウィルスの場所情報を ・
│ 入れる事は出来ない。 ・
│ バッファオーバーフロー発生 ・
│ 時点ではまだウィルスの ・
│ 場所が分からないから。 ・
│ │ ┌───────┐
│ │ │メッセージを表│
│ └─────────→│示するプログラ│
│ ┌──┤ムの場所 │
│ │ └───────┘
│ 何を起動するか参照 │ ・
│←────────────┘ ・
プロセッサ内部レジスタEBX に ・
バッファオーバーフローにより ・
壊れてしまったバッファの場所 ・
情報が格納される ・
↓ ・
8.メッセージを表示するプログラム起動 ・
│ ・
↓ ・
9.「一般保護例外が発生しました。」 ┌───────┐
「ページ違反が発生しました。」 │ │
等のメッセージを表示し、アプリケ │ウィルス本体 │
ーションソフトが強制終了された事 │ │
をユーザーに伝える └───────┘
上の図7項にて、「メッセージを表示するプログラムの場所」
を参照して、そして8項でそのプログラムを起動しています。
例えば、ここに「ウィルスの場所」を格納しておけばウィルス
が活動開始する事になります。しかし、以前に解説したように、
バッファオーバーフロー発生時点では「ウィルスの場所」は分
からない為、それは出来ないのです。
それでは、バッファオーバーフロー発生時点で分かっている事
はないのでしょうか?
例えば、バッファオーバーフロー発生時点では、当然OSは動
いているわけです。また、IIS機能も動作しているはずです。
(IIS機能が動作していなければバッファオーバーフローも発生
しないわけですから。。)
バッファオーバーフロー発生時点で、上記の2つの事は分かっ
ています。
それでは、その動作している「OSの場所」はどうでしょうか?
世界中で動作する全てのWINDOWS2000において「OSの場所」は
固定なのでしょうか?
実はほとんどの場合において、固定です。
頭の良い人は、この固定部分を利用してやろう、と思うわけで
す。
このOSの内部に、「EBXの処理を呼出し」という命令が入っ
ている部分があります。
この命令が入っている場所は、世界中で動作するWINDOWS2000
のほとんどの場合において、固定の場所にあります。
そして、「ウィルスの場所」情報はプロセッサ内部レジスタ
「EBX」に入っています。
上記2つの事を組み合わせてあげます。
「EBXの処理を呼出し」と
「ウィルスの場所はEBXに入っている」を組み合わせると、
「ウィルスを呼出し」
とする事が出来ます。
つまり、「EBXの処理を呼出し」(=ウィルスを呼出し)にプ
ロセッサの制御を移行させてあげればよいわけです。
その為に、ハンドラが別プログラムを起動する時に参照する
「起動するプログラムの場所」情報に「EBXの処理を呼出し」
の命令が入っている場所を指定してあげるわけです。
以下にその図を示します。
6.呼出し元へ復帰 バッファ
│ ┌───────┐
│←───────┤ 変な値 │
│どこへ戻るか参照└───────┘
│どこへ戻ればいいのか分からない。
└───┐
└─→×
プロセッサの保護機能動作
│
┌──────────────┘ バッファ
│ ┌───────┐
↓ │ 変な値 │
7.ハンドラ動作開始 └───────┘
(OS起動時にあらかじめ登録されている) ・
│ ・
│ ここにウィルスの場所情報を ・
│ 入れる事は出来ない。 ・
│ バッファオーバーフロー発生 ・
│ 時点ではまだウィルスの ・
│ 場所が分からないから。 ・
│ │ ┌───────┐
│ │ │EBX を呼出す │
│ └─────────→│命令が入ってい│
│ ┌──┤る場所 │
│ │ └───────┘
│ 何を起動するか参照 │ ・
│←────────────┘ ・
プロセッサ内部レジスタEBX に ・
バッファオーバーフローにより ・
壊れてしまったバッファの場所 ・
情報(つまり、ウィルスの場所) ・
が格納される ・
↓ ・
8.「EBX を呼出し」実行 ・
└─────────────────┐ ・
↓ ・
┌───────┐
│ │
│ウィルス本体 │
│ │
└───────┘
7項で、ハンドラが「何を起動するか参照」するバッファの中
に「EBXを呼出す命令が入っている場所」が格納されています。
ハンドラが別プログラムを起動する時には、レジスタEBXには
バッファオーバーフローにより壊れてしまったバッファの場所
が格納されます。
その為、8項で「EBXを呼出し」の命令が実行された時に処理
はバッファオーバーフローにより壊れてしまった場所へ移行し
ます。
バッファオーバーフローにより壊れてしまったバッファの場所
にはウィルス本体が格納されており、これでウィルスが実行さ
れます。
どうでしょうか。今までの解説、分かったでしょうか。
Code REDウィルスが実行されるまでの処理の流れの説明はこれ
で一通り終わりです。
Code REDウィルスだけでなく、バッファオーバーフローを利用
したウィルスのほとんどは今までに紹介したような動きをしま
す。
さて、次回は具体的なCode REDウィルスのコードも一部見てみ
ようと思っています。楽しみにしていて下さい。
←前へ戻る ▲このページの上へ 続きを読む→