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

TOPに戻る
▼Virus
Code REDウィルスとは?
┣ マイクロソフトの説明
┃ とIIS機能

┣ アプリケーションソフ
┃ トは機能の寄集め

┣ 呼出・復帰時に行わ
┃ れる事

┣ 復帰の場所を変え
┃ てみると・・

┣ 感染したCode R
┃ EDは何を行うか

┣ 異常データをサーバ
┃ ーのバッファに格納

┣ プロセッサの保護機
┃ 能

┣ ウィルスの場所を特
┃ 定する

┣ウィルスコードを実
┃ 行する

┣ CodeREDの正体1
┗ CodeREDの正体2

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




■デジタル用語辞典:

▲このページの上へ

■ ウィルスの場所を特定する ■

前回はバッファオーバーフローにより壊れてしまったバッファ
を使用しようとする為にインテルプロセッサの保護機能が動作
する事の解説を行いました。

この保護機能が動作することによりハンドラが動作し、ハンド
ラは更に別のプログラムを起動する事の解説を行いました。
ハンドラにより起動されるプログラムは、WINDOWSの仕様によ
り各アプリケーションソフト毎に「何を起動するか」指定出来
る事の解説も行いました。

今回は、ウィルスの場所を特定し、活動開始させるまでの流れ
を説明しようと思います。

まずは、アプリケーションソフトが動作する事が出来なくなり
インテルプロセッサの保護機能が動作開始するイメージをもう
一度見てみましょう。

            6.呼出し元へ復帰       バッファ   
                 │        ┌───────┐
                 │←───────┤  変な値  │
                 │どこへ戻るか参照└───────┘
                 │どこへ戻ればいいのか分からない。 
                 └───┐             
                     └─→×          
                 プロセッサの保護機能動作      
                        │          
         ┌──────────────┘   バッファ   
         │                ┌───────┐
         ↓                │  変な値  │
   7.ハンドラ動作開始             └───────┘
     (OS起動時にあらかじめ登録されている)     ・    
         │                    ・    
         │ 何を起動するか参照      ┌───────┐
         ↓←───────────────┤メッセージを表│
   8.メッセージを表示するプログラム起動    │示するプログラ│
         │                │ムの場所   │
         ↓                └───────┘
   9.「一般保護例外が発生しました。」              
     「ページ違反が発生しました。」               
     等のメッセージを表示し、アプリケ              
     ーションソフトが強制終了された事              
     をユーザーに伝える                     

バッファに「変な値」が入っている為に、インテルプロセッサ
の保護機能が動作し、ハンドラが動作開始します。このハンド
ラは「メッセージを表示するプログラムの場所」を参照してメ
ッセージを表示するプログラムを起動します。

このバッファに格納されている「変な値」と「メッセージを表
示するプログラムの場所」は、いずれもバッファオーバーフロ
ーにより意図した値に書き換える事が出来ます。

しかしどちらのバッファも、バッファオーバーフロー発生時点
では、「ウィルスの場所」が分からないために「ウィルスの場
所」を格納する事は出来ません。

ウィルスが活動開始する為にはウィルス自体の場所を特定しな
ければなりません。
どうやってウィルスの場所を特定するのでしょうか?

ここでは、WINDOWSの動作の特徴を巧みに利用してしまいます。

上の図で、ハンドラが起動していますが、このハンドラが別の
プログラムの起動をかける時、(上の図で言うと8項の直前)
必ずプロセッサの内部で持っているある情報がバッファオーバ
ーフローにより壊れてしまったバッファの場所を示しています。

「プロセッサの内部で持っているある情報」とはインテルプロ
セッサ内部の、EBXというレジスタです。

初心者の方にはかなり分かりにくいと思いますが、「EBX」と
いうものは、プロセッサの内部で持っている、アクセスが物凄
く早く、極少量しか存在しない、特別なバッファのような物だ
と思って下さい。
レジスタについては、その説明だけで一講座が出来上がってし
まう為、また別の機会にとりあげようと思います。

ハンドラが動作して、メッセージを表示するプログラムを起動
するまでの間に、プロセッサ内部で持っているレジスタEBXに
「バッファオーバーフローにより壊れてしまったバッファの場
所情報」が入ります。

これはWINDOWSの仕様というわけではなく、WINDOWSやプロセッ
サの動作を研究しているハッカーの方がさまざまな実験をして、
「経験的に」そうなっている事を発見するのです。
(よく気が付くものです。凄いです。)

そして実は、この「バッファオーバーフローにより壊れてしま
ったバッファの場所」にウィルスの本体が隠されています。
以下にそのイメージを示します。

上の図とは7項の部分が異なります。

            6.呼出し元へ復帰       バッファ   
                 │        ┌───────┐
                 │←───────┤  変な値  │
                 │どこへ戻るか参照└───────┘
                 │どこへ戻ればいいのか分からない。 
                 └───┐             
                     └─→×          
                 プロセッサの保護機能動作      
                        │          
         ┌──────────────┘   バッファ   
         │                ┌───────┐
         ↓                │  変な値  │
   7.ハンドラ動作開始             └───────┘
     (OS起動時にあらかじめ登録されている)     ・    
         │                    ・    
         │ ここにウィルスの場所情報を      ・    
         │ 入れる事は出来ない。         ・    
         │ バッファオーバーフロー発生      ・    
         │ 時点ではまだウィルスの        ・    
         │ 場所が分からないから。        ・    
         │     │          ┌───────┐
         │     │          │メッセージを表│
         │     └─────────→│示するプログラ│
         │             ┌──┤ムの場所   │
         │             │  └───────┘
         │ 何を起動するか参照   │      ・    
         │←────────────┘      ・    
    プロセッサ内部レジスタEBX に            ・    
    バッファオーバーフローにより            ・    
    壊れてしまったバッファの場所            ・    
    情報が格納される                  ・    
         ↓                    ・    
   8.メッセージを表示するプログラム起動        ・    
         │                    ・    
         ↓                    ・    
   9.「一般保護例外が発生しました。」     ┌───────┐
     「ページ違反が発生しました。」      │       │
     等のメッセージを表示し、アプリケ     │ウィルス本体 │
     ーションソフトが強制終了された事     │       │
     をユーザーに伝える            └───────┘

7項の「ハンドラ動作開始」から、8項の「メッセージを表示
するプログラム起動」までの間に、プロセッサ内部レジスタEBX
に「バッファオーバーフローにより壊れてしまったバッファの
場所」が入ります。

「バッファオーバーフローにより壊れてしまったバッファの場
所」が分かり、そしてそのバッファの中にはウィルス本体が格
納されている。という事は・・・

そうです。「ウィルスの場所」が分かるという事です。

ウィルスの場所が分かれば、あとはそこへプロセッサの処理を
移行させ、実行させるだけです。

次回は、どのようにしてレジスタEBXに処理を移行させるのか
解説を行います。



←前へ戻る    ▲このページの上へ    続きを読む→