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

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ウィルスがどのような事を行う
のか説明する予定です。



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