(57)【特許請求の範囲】
【請求項１】
プロセッサおよびメモリ装置を含むコンピュータシステムにおいてマクロの中のウイルスを検出する方法であって、
ウイルス検出のための情報を含む比較データ、すなわちマクロウイルスに用いられそうな命令（容疑命令）を識別する容疑命令識別子を含む比較データを受ける過程と、
マクロを読み込む過程と、
復号化ずみマクロを生ずるように前記マクロを復号化する過程と、
前記復号化ずみマクロを前記容疑命令識別子と比較することによって前記復号化ずみのマクロが未知のウイルスを含むか否かの判定を行うように前記復号化ずみマクロを走査する過程と
を含む方法。
【請求項２】
前記復号化ずみマクロを走査する過程がそのマクロの前記ウイルスによる汚染を示す場合に処置ずみマクロを生ずるように前記マクロから前記ウイルスを除去する過程
をさらに含む請求項１記載の方法。
【請求項３】
前記マクロを読み込む過程が、
対象ファイルにアクセスする過程と、
前記対象ファイルがテンプレートファイルであるか否かを判定する過程と、
前記対象ファイルがテンプレートファイルでない場合にその対象ファイルが埋込みマクロを含むか否かを判定する過程と、
前記対象ファイルが埋込みマクロを含む場合に前記埋込みマクロを位置特定する過程と
を含む請求項１記載の方法。
【請求項４】
前記比較データが第１の容疑命令識別子および第２の容疑命令識別子を含む請求項１記載の方法。
【請求項５】
前記ウイルスについて前記復号化ずみデータを走査する過程が、
前記復号化ずみマクロが前記第１の容疑命令識別子に対応する第１の部分を含むか否かを判定する過程と、
前記復号化ずみマクロが前記第２の容疑命令識別子に対応する第２の部分を含むか否かを判定する過程と、
前記復号化ずみマクロが前記第１および第２の部分を含む場合に前記復号化ずみマクロが前記ウイルスを含むと判定する過程と
を含む請求項４記載の方法。
【請求項６】
前記第１の容疑命令識別子がファイルのフォーマット化をセットすることを可能にするマクロイネーブル化命令を検出する請求項５記載の方法。
【請求項７】
前記第２の容疑命令識別子がマクロウイルスの複製を可能にするマクロ複製命令を検出する請求項６記載の方法。
【請求項８】
前記ウイルスを除去する過程が、
前記第１の容疑命令識別子に対応する第１のマクロ命令を前記復号化ずみマクロの中で位置特定する過程と、
前記第１の容疑マクロ命令を除去する過程と
を含む請求項２記載の方法。
【請求項９】
前記処置されたマクロの整合性を検証する過程と、
前記処置されたマクロの整合性検証に応じて、対象ファイルの中の前記汚染マクロを修復ずみマクロに置換する過程と
をさらに含む請求項８記載の方法。
【請求項１０】
前記第１の容疑マクロ命令を除去する過程が前記第１の容疑マクロ命令を非汚染命令に置換する過程を含む請求項８記載の方法。
【請求項１１】
前記ウイルスを除去する過程が、
前記第２の容疑命令識別子に対応する第２の容疑マクロ命令を前記復号化ずみマクロの中で位置特定する過程と、
処置ずみマクロを生ずるように前記第２の容疑マクロ命令を前記復号化ずみマクロから除去する過程と
を含む請求項８記載の方法。
【請求項１２】
前記比較データが複数の容疑命令識別子組を含む請求項１記載の方法。
【請求項１３】
第１の容疑命令識別子組がストリング73 CB 00 0C 6C 01 00および67 C2 80を含む請求項１２記載の方法。
【請求項１４】
第２の容疑命令識別子組がストリング73 CB 00 0C 6C 01 00および64 6F 02 67 DE 00 73 87 01 12 73 7Fを含み、第３の容疑命令識別子組がストリング73 CB 00 0C 6C 01 00および6D 61 63 72 6F 73 76 08を含み、第４の容疑命令識別子組がストリング12 6C 01 00および64 67 C2 80 6A OF 47を含み、第５の容疑命令識別子組がストリング79 7C 66 6F 72 6D 61 74 20 63 6Aおよび80 05 6A 07 43 4F 4Dを含む請求項１３記載の方法。
【請求項１５】
プロセッサおよびメモリ装置を含むコンピュータシステムにおいてマクロ中のウイルスを検出する方法であって、
マクロ読み込む過程と、
第１の容疑命令識別子および第２の容疑命令識別子、すなわちマクロウイルスに用いられそうな命令（容疑命令）をそれぞれ識別する第１の容疑命令識別子および第２の容疑命令識別子を含む比較データであってウイルスを検出するための比較データを受ける過程と、
未知のウイルスについて前記マクロを走査する走査過程であって、
前記第１の容疑命令識別子に対応する第１の部分を前記マクロが含むか否かを判定するように前記マクロを走査する過程と、
前記第２の容疑命令識別子に対応する第２の部分を前記マクロが含むか否かを判定するように前記マクロを走査する過程と
を含む走査過程と、
前記マクロが前記第１および第２の部分を含んでいた場合に前記マクロが前記ウイルスで汚染されていたと判定する過程と
を含む方法。
【請求項１６】
前記マクロが前記第１および第２の部分を含むと判定された場合に処置ずみマクロを生ずるように前記マクロを処置する過程
をさらに含む請求項１５記載の方法。
【請求項１７】
前記マクロを処置する過程が、
前記第１の容疑命令識別子に対応する第１のマクロ命令を前記汚染マクロの中で位置特定する過程と、
前記汚染マクロを修復するように前記第１のマクロ命令を前記汚染マクロから除去する過程と
を含む請求項１６記載の方法。
【請求項１８】
前記マクロを処置する過程が、
前記第２の容疑命令識別子に対応する第２のマクロ命令を前記汚染マクロの中で位置特定する過程と、
前記汚染マクロを修復するように前記第２のマクロ命令を前記汚染マクロから除去する過程と
を含む請求項１７記載の方法。
【請求項１９】
前記マクロを読み込む過程が、
対象ファイルにアクセスする過程と、
前記対象ファイルがテンプレートファイルであるかどうかを判定する過程と、
そのファイルがテンプレートファイルであった場合にそのファイルが埋込みマクロを含むか否かを判定する過程と、
そのファイルが埋込みマクロを含む場合にその埋込みマクロを位置特定する過程と
を含む請求項１５記載の方法。
【請求項２０】
前記第１の容疑命令識別子がストリング73 CB 00 0C 6C 01 00を含み、前記第２の容疑命令識別子がストリング67 C2 80を含む請求項１５記載の方法。
【請求項２１】
前記比較データが複数の容疑命令識別子を含む請求項１５記載の方法。
【請求項２２】
第１の容疑命令識別子組がストリング73 CB 00 0C 6C 01および67 C2 82を含み、第２の容疑命令識別子組がストリング73 CB 00 0C 6C 01 00および64 6F 02 67 DE 00 73 87 01 12 73 7Fを含み、第３の容疑命令識別子組がストリング73 CB 00 0C 6C 01 00および6D 61 63 72 6F 73 76 08を含み、第４の容疑命令識別子組がストリング12 6C 01 00および64 67 C2 80 6A OF 47を含み、第５の容疑命令識別子組がストリング79 7C 66 6F 72 6D 61 74 20 63 6Aおよび80 05 6A 07 43 4F 4Dを含む請求項２１記載の方法。
【請求項２３】
対象ファイルにアクセスする過程と、
前記対象ファイルの中で前記マクロを位置特定する過程と、
前記マクロを前記対象ファイルから除去する過程と、
修復ずみファイルを生ずるように前記処置ずみのマクロを前記対象ファイルに加える過程と
をさらに含む請求項１５記載の方法。
【請求項２４】
マクロの中のウイルスを検出する装置であって、
第１の容疑命令識別子および第２の容疑命令識別子、すなわちマクロウイルスに用いられそうな命令（容疑命令）をそれぞれ識別する第１の容疑命令識別子および第２の容疑命令識別子を含む比較データであってウイルスを検出するための比較データを蓄積するウイルス情報モジュールと、
前記ウイルス情報モジュールと信号授受して、前記比較データを受けるとともに、前記マクロが前記第１の容疑命令識別子対応の第１の部分および前記第２の容疑命令識別子対応の第２の部分を含むか否かを判定するように前記マクロを未知のウイルスについて走査するマクロウイルス走査モジュールと
を含む装置。
【請求項２５】
前記マクロウイルス走査モジュールと信号授受して、対象ファイルにアクセスし、その対象ファイルがテンプレートファイルであるか否かを判定し、その対象ファイルが埋込みマクロを含むか否かを判定し、復号化ずみマクロを生ずるようにそのマクロを復号化するマクロ位置特定および復号化モジュール
をさらに含む請求項２４記載の装置。
【請求項２６】
前記ウイルス情報モジュールと信号授受して、前記復号化ずみマクロにアクセスし前記第１の容疑命令識別子対応の第１のマクロ命令および前記第２の容疑命令識別子対応の第２のマクロ命令を除去し処置ずみマクロを生ずるマクロ処置モジュール
をさらに含む請求項２５記載の装置。
【請求項２７】
前記マクロ処置モジュールと信号授受して、前記対象ファイルにアクセスし前記対象ファイルの中でマクロを位置特定しその対象ファイルからそのマクロを除去し前記処置ずみマクロを前記対象ファイルに加えて訂正ずみファイルを生ずるファイル訂正モジュール
をさらに含む請求項２６記載の装置。
【請求項２８】
前記第１の容疑命令識別子がストリング73 CB 00 0C 6C 01 00を含み、前記第２の容疑命令識別子がストリング67 C2 80を含む請求項２７記載の装置。
【請求項２９】
前記比較データが複数の容疑命令識別子組を含む請求項２７記載の装置。
【請求項３０】
第１の容疑命令識別子組がストリング73 CB 00 0C 6C 01 00および67 C2 82を含み、第２の容疑命令識別子組がストリング73 CB 00 0C 6C 01 00および64 6F 02 67 DE 00 73 87 01 12 73 7Fを含み、第３の容疑命令識別子組がストリング73 CB 00 0C 6C 01 00および6D 61 63 72 6F 73 76 08を含み、第４の容疑命令識別子組がストリング12 6C 01 00および64 67 C2 80 6A OF 47を含み、第５の容疑命令識別子組がストリング79 7C 66 6F 72 6D 61 74 20 63 6Aおよび80 05 6A 07 43 4F 4Dを含む請求項２９記載の装置。
【請求項３１】
マクロの中のウイルスを検出する装置であって、
第１の容疑命令識別子および第２の容疑命令識別子、すなわちマクロウイルスに用いられそうな命令（容疑命令）をそれぞれ識別する第１および第２の容疑命令識別子を含む比較データであってウイルス検出のための比較データを受ける手段と、
未知のウイルスについて前記マクロを走査するマクロ走査手段であって、
前記第１の容疑命令識別子対応の第１の部分をマクロが含むか否かを判定するように前記マクロを走査する手段と、
前記第２の容疑命令識別子対応の第２の部分をマクロが含むか否かを判定するように前記マクロを走査する手段と
を含むマクロ走査手段と、
前記第１および第２の部分を含んでいた場合に前記マクロがウイルスに汚染されていると判定する手段と
を含む装置。
【請求項３２】
前記第１の容疑命令識別子および前記第２の容疑命令識別子にそれぞれ対応する第１のマクロ命令および第２のマクロ命令を前記マクロの中で位置特定する手段と、
処置ずみマクロを生ずるように前記第１のマクロ命令および前記第２のマクロ命令を前記マクロから除去する手段と
をさらに含む請求項３１記載の装置。
【請求項３３】
対象ファイルにアクセスしその対象ファイルがマクロを含むか否かを判定する手段をさらに含む請求項３２記載の装置。
【請求項３４】
前記対象ファイルにアクセスする手段と、前記マクロを前記対象ファイルから除去する手段と、訂正ずみファイルを生ずるように前記処置ずみマクロを前記対象ファイルに加える手段とを含むファイル訂正手段
をさらに含む請求項３３記載の装置。
【請求項３５】
マクロの中のウイルスを検出するシステムであって、
第１の容疑命令識別子および第２の容疑命令識別子、すなわちウイルスに用いられそうな命令（容疑命令）をそれぞれ識別する第１の容疑命令識別子および第２の容疑命令識別子を含む比較データであってウイルスを検出するための比較データおよびルーチンを蓄積するメモリ装置と、
前記メモリ装置と信号授受し、前記マクロが前記第１の容疑命令識別子対応の第１の部分および前記第２の容疑命令識別子対応の第２の部分を含むか否かを判定するように前記比較データを受けるとともにマクロを未知のウイルスについて走査するようにマクロウイルス走査ルーチンを実行するプロセッサと
を含むシステム。
【発明の詳細な説明】
発明の背景
発明の技術分野
この発明は概括的にはコンピュータファイルの中のウイルスの検出および除去に関する。
関連技術の説明
コンピュータ利用の普及および莫大な数のコンピュータ相互間の通信の拡大はコンピュータウイルスの広がりを著しく容易にし助長してきた。コンピュータウイルスはコンピュータプログラムの中に埋め込まれたコードの種々の部分に見出される。ウイルスに感染したプログラムが実行されると、それらコード部分が活性化されて、コンピュータシステムに意図しない、場合によっては有害な動作を生じさせる。
ウイルスの検出は通常シグネチャ走査手法を用いて行う。既知のウイルスのために、ウイルス検出に使用可能な指紋同等のストリングまたはシグネチャが長くなった。シグネチャ走査では実行可能なファイルシーケンスを走査して、ウイルスとして既知のストリングに合致する延長ストリングを含むか否かを調べる。その実行可能なファイルの中に上記シグネチャまたはストリングが見出されると、積極的ウイルス判定を行う。既知のパターンとのマッチングを伴うので、パターンの特定されていないウイルスに対してはシグネチャ走査手法はほとんど役に立たない。とくに、新しい未知のウイルスの種類の検出はシグネチャ走査手法には全く不可能であり、複製の際に多様な形状および形式を意図的にとる突然変異性ウイルスに対しては十分な保護を提供できない。また、実行可能なファイル（例えば拡張子.exeまたは.comつきのファイル）も通常走査されるので、それらファイルの中にないウイルスは検査されず、したがってシグネチャ走査では検出されない。
多数のアプリケーションプログラムが、動作の長いシーケンスまたは反復シーケンスの自動的遂行のためのマクロの使用をサポートしている。マクロは、メニュー選択やキー押下や蓄積され名称またはキーの割当てを受けるコマンドなどの一連の命令である。マクロは、アプリケーションプログラムによってキーの押下げまたはマクロ名称の呼出しに応答して起動できる。アプリケーションデータファイルに埋め込まれていて、ユーザから隠れた状態に留まるマクロもある。また、マクロはユーザからの入力なしに自動的に実行するようにすることもできる。すなわち、ユーザに知られる必要がなくユーザによる始動を必要としないマクロがアプリケーションデータファイルなどのファイルに常駐することがあり得る。ある種のウイルスはマクロに常駐し、マクロ命令を用いて想定外の有害な動作を行う。それらのウイルスをマクロウイルスと呼ぶ。マクロウイルスの一つの問題は、実行可能なファイルには通常は常駐しないので実行可能なファイルスキャナーを避けることである。また、マクロウイルスはアプリケーションデータファイルなどのファイルの中に隠されたり埋め込まれたりされ得るので、検出を免れる。さらに、マクロプログラム用言語の使い方を知っているコンピュータユーザは多数にのぼるので、マクロウイルスの数と多様性は極めて大きい。したがって、マクロの中のウイルスの検出にシグネチャ走査手法を用いても、多数の未知のマクロウイルスがあるので効果がない。また、網羅的シグネチャスキャナーを使えたとしても、新たな未知のマクロウイルスの発生が継続するのでそのスキャナーはすぐ陳腐化する。
慣用のウイルス除去手法もウイルス感染マクロの処置には不十分である。それら慣用の手法は特定の既知のウイルスを探索し、その探索により検出された特定のウイルスに応じて特定の訂正手法を適用する。その訂正手法は、未知のマクロウイルスの莫大な系列のために、ウイルス感染マクロの処置にはあまり効果がない。未知のマクロを検出しても、ウイルス感染マクロ含有のファイルを消去するだけでは有効な解決方法にはならない。ウイルス感染マクロの中にユーザが保持したい正常動作が含まれていることが多いからである。したがって、マクロからウイルス、とくに未知のウイルスを選択的に除去して、その後で使用可能な感染なしの訂正ずみファイルを生ずる必要がある。
もう一つの問題はウイルスもそれらウイルスの検出に必要な情報も常に変動していることである。したがって、ウイルス検出情報の更新の容易なウイルス検出方法およびウイルス検出装置が必要である。容易に改変可能な未知マクロウイルス検出情報がとくに必要である。
上述のとおり、マクロに常駐するウイルスの検出が必要である。さらに、未知のマクロウイルスを検出し、マクロウイルスを選択的に清浄化し、マクロウイルス検出情報を簡便に更新する必要がある。
発明の概要
この発明はマクロからウイルスを検出し除去するシステム、装置および方法によって従来技術の制約と欠点を解消する。
この発明によると、マクロウイルス検出モジュールはマクロ位置特定および復号化モジュールと、マクロウイルス走査モジュールと、マクロ処置モジュールと、ウイルス情報モジュールと、ファイル訂正モジュールと、データバッファとを含む。マクロウイルス検出モジュールのコンフィギュレーション設定にしたがって一つのファイルをウイルス検出の対象にし、データバッファにコピーして分析に備える。マクロ位置特定および復号化モジュールでそのファイルを試験して、それがテンプレートファイルか否かを判定する。テンプレートファイルと判定した場合は、そのテンプレートファイルの中のマクロはすべて位置特定して復号化する。対象ファイルがテンプレートファイルでない場合は、マクロ位置特定および復号化モジュールでその対象ファイルを調べ、埋込みマクロを含むか否かを判定し、その位置特定を行い復号化する。復号化されたマクロはデータバッファに蓄積する。
マクロ走査モジュールはこのマクロ位置特定および復号化モジュールおよびデータバッファと信号授受し、したがって復号化ずみのマクロにアクセスしてウイルス走査に備える。マクロウイルス走査モジュールはマクロウイルス情報モジュールとも信号授受する。マクロウイルス情報モジュールは、マクロ中の既知および未知のウイルスの検出のためにマクロウイルス走査モジュールが用いる情報を含む。上記復号化ずみのマクロをまず既知のウイルスの探索のために走査する。既知のウイルスが検出された場合はその復号化ずみマクロは感染のフラグで表示する。その復号化ずみマクロ、そのフラグ、およびその復号化ずみマクロをそのマクロ中で検出された既知のマクロに関連づける情報をデータバッファに蓄積する。上述のとおり感染マクロおよびその感染マクロの常駐するファイルはマクロ処置モジュールおよびファイル訂正モジュールによって適切に処置され訂正される。
既知のウイルスが検出されなかった場合は、復号化ずみマクロが未知のウイルスが含んでいるか否かをマクロウイルス走査モジュールが判定する。マクロウイルス走査モジュールはウイルス情報モジュール中に蓄積されている比較データを用いて未知のマクロウイルスを検出する。この比較データは、マクロ中の容疑命令の組合せの検出に用いる情報を含む。比較データの組の好例は第１および第２の容疑命令特定コードを含む。マクロウイルス走査モジュールは、それら第１および第２の容疑命令が両方ともマクロに含まれていた場合にそのマクロがウイルスを含んでいると判定する。未知のウイルスが検出された場合は、その未知のウイルスの検出に導く容疑命令特定コードの組にしたがって、そのマクロを汚染マクロとフラグ表示する。既知のウイルスの検出の場合と同様に、明確な検出に導いた情報を汚染マクロとともにデータバッファに蓄積し、マクロ処置モジュールおよびファイル訂正モジュールが汚染マクロを適切に処置し訂正するようにする。特定のシーケンス状のシグネチャでなく容疑命令の組合せを探索するので、マクロウイルス走査モジュールで未知のウイルスが検出される。既知のウイルスおよび未知のウイルスの検出のための情報は別のモジュールに常駐しているので容易に更新される。
マクロ処置モジュールはマクロウイルス走査モジュールおよびデータバッファと信号授受し、それによって検出ウイルス関連の情報を得る。マクロ処置モジュールはマクロからウイルスを除去して清浄化ずみマクロまたはウイルス除去ずみマクロを発生し、汚染マクロ含有のファイルをファイル処置モジュールで補修または訂正できるようにする。マクロ処置モジュールはデータバッファ内の復号化ずみマクロにアクセスし、既知のウイルスによる汚染のフラグ表示があるか否かを判定する。そのマクロに既知のウイルスによる汚染のフラグ表示がある場合は、その既知のウイルスをそのマクロから除去する。そのマクロが既知のウイルスに汚染されていない場合は、マクロ処置モジュールがマクロ中の未知のウイルスの検出のための命令特定コードの組を用いてマクロを処置する。このマクロ処置モジュールは、マクロウイルス走査モジュールおよびデータバッファから、復号化ずみマクロおよびウイルスの存在に関する情報を受ける。復号化ずみマクロの中の容疑命令は命令特定コードを用いて特定し位置特定する。次に、好ましくは非感染命令で置換することによって汚染マクロから容疑命令を除去し、清浄化ずみまたはウイルス除去ずみの処置ずみマクロを生ずる。この処置ずみマクロはデータバッファに蓄積してファイル訂正モジュールによるアクセスに備える。この処置ずみマクロの整合性を検査し、検査結果に応じてその有効性をフラグ表示する。マクロの整合性がマクロ処置の完了の時点で維持されている場合は有効のフラグ表示をする。整合性が維持されていない場合はフラグ表示しない。
ファイル訂正モジュールは、マクロ位置特定および復号化モジュール、マクロウイルス走査モジュール、マクロ処置モジュール、データバッファおよびウイルス情報モジュールと信号授受する。処置ずみのマクロおよび汚染マクロ含有の対象ファイルに関する情報はデータバッファ内でアクセスを受ける。ファイル訂正モジュールはもとの形の対象ファイルにアクセスし、対象ファイルのコピーをデータバッファに蓄積する。対象ファイルのコピーは汚染マクロを含む。マクロ有効性フラグ表示がない場合は、処置ずみマクロを汚染マクロ置換に用いることはせず、対象ファイル消去など代替の訂正動作を行わせ、汚染マクロ含有ファイルの存在のユーザへの通知、または対象ファイルからの汚染ファイルの除去およびマクロなしバージョンへの対象ファイルの置換を行う。マクロ有効性のフラグ表示がある場合は、ファイル訂正モジュールが汚染マクロを処置ずみマクロに置換することによって対象ファイルを訂正する。汚染マクロを置換するために、ファイル訂正モジュールは汚染マクロを位置特定して対象ファイルから除去し、そのマクロ抜きの対象ファイルのバージョンがデータバッファに蓄積されるようにする。次に処置ずみマクロを前記マクロ抜きの対象ファイルのバージョンに加えて訂正ずみファイルを生ずる。この訂正ずみファイルを対象ファイル（もとの位置の）の置換に用いる。したがって、未知のウイルスはマクロから除去され、そのようなマクロを含むファイルは正しい機能を保持するよう修正される。
【図面の簡単な説明】
この発明の上記および上記以外の詳細な特定の特徴は添付図面を参照した次の説明により詳細に開示する。
図１はこの発明によるマクロウイルス検出装置を含むコンピュータシステムを図解するブロック図である。
図２はこの発明によるメモリ装置の好ましい実施例を図解するブロック図である。
図３はこの発明によるマクロウイルス検出モジュールの好ましい実施例を図解するブロック図である。
図４はこの発明によるマクロウイルス検出および訂正方法を図解する流れ図である。
図５はこの発明によるマクロの位置特定および復号化方法を図解する流れ図である。
図６はこの発明によるウイルス探索用マクロ走査方法を図解する流れ図である。
図７はこの発明によるマクロ処置方法を図解する流れ図である。
図８はこの発明によるファイル訂正方法を図解する流れ図である。
図９はマクロウイルスの検出に用いる比較データの組の好例を含む表である。
発明の詳細な説明
図１を参照すると、この発明によって構成したコンピュータシステム１００は中央処理装置（ＣＰＵ）１０４、表示装置１０２、メモリ装置１０６、入力装置１０８、データ蓄積装置１１０および通信ユニット１１２を含む。ＣＰＵ１０４は、パーソナルコンピュータの場合のようにフォン ノイマン アーキテクチャなど慣用のアーキテクチャでバス１１４によって表示装置１０２、メモリ装置１０６、入力装置１０８、データ蓄積装置１１０および通信ユニット１１２に接続する。ＣＰＵ１０４はカリフォルニア州サンタクララのインテル社から市販されているPentiumなどのマイクロプロセッサ、表示装置１０２はビデオモニタ、メモリ装置１０６はランダムアクセスメモリ（RAM）、入力装置１０８はキーボードおよびマウス、データ蓄積装置１１０はハードディスク装置、および通信ユニット１１２は他システムとの信号授受を容易にするモデムなどの装置でそれぞれ構成するのが好ましい。
上記以外の多様なコンピュータシステム構成が利用可能であり、この発明はそれら構成のいずれを用いるかに制約されない。例えば、ＣＰＵ１０４にはモトローラ社から市販されている代替のプロセッサを用いることができ、メモリ装置１０６は読出専用メモリ（ROM）またはRAMおよびROMの組合せでも構成できる。また、システム１００をネットワークインタフェース（図示してない）を通ずるなどして他のコンピュータシステムに接続することもできる。また、コンピュータシステム１００はミニコンピュータまたはメインフレームコンピュータでも差し支えないものと理解されたい。
ＣＰＵ１０４は、メモリ１０６からのこの発明によって構成された命令に従って、コンピュータファイルへのアクセス、それらファイルがマクロを含むか否かの判定、未知ウイルス含有ウイルスの有無の判断のためのマクロ位置特定およびマクロ走査、およびウイルス検出の場合の訂正動作のための信号の供給を行う。
図２を参照すると、この発明にしたがって構成したメモリ装置１０６の好ましい実施例をより詳細に示してある。メモリ装置１０６はオペレーティングシステム１０２、アプリケーションプログラム２０４およびマクロウイルス検出モジュール２０６を蓄積している。
オペレーティングシステム２０２はワシントン州レッドモンドのマイクロソフト社から市販されているWINDOWS 3.1などのパーソナルコンピュータ用の慣用のもので構成するのが好ましい。ワードプロセッシング、表計算、作図など多様なアプリケーションプログラムの任意のものをメモリ装置１０６に蓄積できる。例えば、メモリ装置１０６にはワードプロセッシング用アプリケーションとしてマイクロソフトWORDを、表計算アプリケーションとしてマイクロソフトEXCELをそれぞれ蓄積できる。アプリケーションプログラム２０４は通常アプリケーションデータファイルを作成する。例えば、WORDは通常ファイル拡張子.DOCを有するデータファイルを発生する。通常のアプリケーションプログラム２０４はユーザからの反復入力なしに逐次動作を可能にするマクロを含む。慣用のマクロには、キー押下げなど相対的に単純な動作のためのもの、ファイルを開きコピーし消去するなどの動作のためのものなど多様な命令が含まれる。マクロ命令がFORMATなど下位の命令を実行するようにオペレーティングシステム（またはDOSシェル）を呼び出すこともある。マクロの用いる命令はマクロプログラム用言語をサポートするアプリケーションプログラム２０４で通常定まってくる。例えば、WORDファイル用のマクロはWordBasicプログラミング言語を用いて書かれる。
IBM社から市販されているOS/2など多様なオペレーティングシステム２０２をこの発明に代替的に用いることもできる。また、多様なアプリケーションプログラム２０４を用いることもできる。この発明の実施例の一部ではWORDアプリケーションデータファイルにWordBasicコマンドを用いるマクロウイルスの検出を記載しているが、この発明が上記のような代替のオペレーティングシステム２０２および代替のアプリケーションプログラム２０４にも適用できることは当業者には理解されよう。
マクロウイルス検出モジュール２０６は、ファイルへのアクセス、それらファイルがマクロを含むか否かの判定、ウイルス含有の有無の判定のためのマクロの走査、およびウイルス含有と判定されたマクロの処置および汚染マクロ含有ファイルの訂正のためのルーチンを含む。マクロウイルス検出モジュール２０６はオペレーティングシステム２０２およびアプリケーションプログラム２０４と連携して動作する。マクロウイルス検出モジュール２０６は通常ソフトウェアで実動化するがハードウェアまたはファームウェアでも実動化できる。マクロウイルス検出モジュール２０６は図示のとおりオペレーティングシステム２０２およびアプリケーションプログラム２０４と別になっているのが好ましいが、マクロウイルス検出モジュールをオペレーティングシステム２０２またはアプリケーションプログラム２０４と一体化して同様のウイルス検出訂正動作をさせることもできる。
図３を参照すると、マクロウイルス検出モジュール２０６の好ましい実施例はマクロ位置特定および復号化モジュール３０２、マクロウイルス走査モジュール３０４、マクロ処置モジュール３０６、およびファイル訂正モジュール３１０を含む。これらに加えて、ウイルス情報モジュール３０８がマクロ中のウイルス検出およびウイルス汚染マクロの処置のための比較データを供給し、データバッファ３１２がマクロウイルス検出訂正用情報を蓄積する。データバッファ３１２をいくつかの蓄積位置を含む単一のモジュールとして図示してあるが、このデータバッファ３１２の多様な機能のために複数の個別データバッファを用いることもできる。
マクロウイルス検出モジュール２０６は対象ファイルにアクセスしてマクロ含有の有無を判定する。ファイルへのアクセスはユーザが予め設定または決定したモジュール３０２のコンフィギュレーション設定に左右される。例えば、ユーザは分析のために単一のファイルだけを対象にする場合もある。また、選ばれたアプリケーションプログラム２０４に対応するファイルなどファイル群を対象にしたり、選択したディレクトリまたは蓄積領域内のファイル全部を対象にしたりすることもできる。多様な事象でファイル分析を起動できる。例えば、ユーザはウイルス走査を起動し、分析はあるアプリケーションファイルを開いた任意の時点で起動でき、またシステム１００のブートアップｎ回ごとまたは特定時間間隔ごとに完全分析を図ることもできる。マクロ位置特定および復号化モジュール３０２は、マクロウイルスを含み得る任意のファイルにアクセスし、それらファイルへのアクセスをアプリケーションプログラムの起動前、すなわちアプリケーションデータファイルを開く前に行うように構成するのが好ましい。マクロウイルスの中には、関連アプリケーションプログラムの起動とともに動作し、したがってユーザによる走査始動前の検出を要するものがあるからである。
対象ファイルの各々はマクロウイルス検出モジュール２０６によってアクセスされ、分析用にデータバッファ３１２に蓄積される。理解を容易にするために諸モジュール３０２、３０４、３０６、３０８、３１０、３１２の特定の機能に関連して単一のファイルの分析を説明するが、この発明によりいくつかのファイルを同時並行的にまたは逐次的に分析することもできる。
マクロ位置特定および復号化モジュール３０２は、対象ファイルをそれらファイルがマクロ含有型のものか否かの判定および埋め込みマクロ含有の有無の判定のために調べ、対象ファイル内でマクロを位置特定し復号化する。
このマクロ位置特定および復号化モジュール３０２はデータバッファ３１２と信号授受し、対象ファイルに分析のためのアクセスする。マクロはテンプレートファイルにも見出され、アプリケーションデータファイルに埋め込まれる。マクロ位置特定および復号化モジュール３０２は対象ファイルがテンプレートファイルであるか否かをまず判定する。この判定は拡張子をチェックすることによって行う。例えば、そのファイルがWORDアプリケーションプログラム２０４関連であればファイルを拡張子.DOTについてチェックする。この.DOT拡張子はファイルがテンプレートファイルであることを示す。
対象ファイルがテンプレートファイルであると判定されない場合は、埋込みマクロを含んでいる場合がある。例えば、.DOC拡張子つきのWORDファイルなどのアプリケーションデータファイルは埋込みマクロを含んでいることがあり得る。マクロ位置特定および復号化モジュール３０２はデータバッファ３１２に蓄積されている対象ファイルにアクセスし、そのフォーマティングが埋込みマクロを示すか否かを判定する。フォーマティングフィールドは各アプリケーションプログラム２０４の慣用の規則に従って変動し、アプリケーションプログラム２０４の製造業者から供給される。
対象ファイルがマクロを含むか否か、そのマクロが埋め込まれているか否か、テンプレートファイルの形になっているかまたはマクロをサポート可能な他の形式のファイルになっているかが判定されるとマクロは対象ファイル中で位置特定される。マクロ位置特定および復号化モジュール３０２はオペレーティングシステム２０２と信号授受する。オペレーティングシステムはWINDOWS 3.1で提供されるようなオブジェクト連結埋込み（OLEまたはOLE2）などの情報共用資源を含む。この情報共用資源はアプリケーションファイルなどファイル構造の詳細を提供し、埋め込まれているオブジェクトをファイル内で位置特定できるようにする。情報共用資源コマンドはオペレーティングシステム２０２に応じて変わるが、一般に、オブジェクトを開く、特定の流れをシークする、ファイルに対して読出し書込みを行うなどの単純なコマンドである。マクロの位置特定および復号化における情報共用資源の実働化に慣用のプログラム手法を用いることができる。マクロの位置特定ののちマクロ位置特定および復号化モジュール３０２はマクロを復号化してウイルス探索のための走査ができるようにする。オペレーティングシステム２０２の情報共用資源をコヒーレントな情報へのマクロの復号化に用い、ASCII変換を走査に適した形式への復号化ずみマクロの変換に用いる。復号化ずみマクロはデータバッファ３１２に蓄積する。また、復号化ずみマクロをそのマクロの抽出元の対象ファイルに関連づける情報をデータバッファ３１２に蓄積する。
マクロウイルス走査モジュール３０４はマクロ位置特定および復号化モジュール３０２およびデータバッファ３１２と信号授受しており、したがって、モジュール３０２は復号化ずみマクロをマクロ走査モジュール３０４に供給する。このモジュール３０２に用いられるマクロ位置特定および復号化の好ましい方法は図５を参照してさらに詳細に説明する。
マクロウイルス走査モジュール３０４は、復号化ずみマクロとウイルス情報モジュール３０８からのデータとの比較に基づき既知のウイルスおよび未知のウイルスの検出のために復号化ずみマクロを走査するルーチンを含む。マクロウイルス走査モジュール３０４はマクロウイルス検出の諸態様を提供するように構成できる。例えば、走査周期を短くできるようにウイルスの特定の群だけ、すなわちウイルスのうち既知の形式のものだけ、未知の形式のものだけまたは両形式のものとも検出するように構成でき、ウイルスの最初の検出に応答して警報を発するとか、ウイルス検出の表示の前にいくつかの対象ファイルの走査を完了させておくなどの構成も可能である。
マクロウイルス走査モジュール３０４はデータバッファ３１２中の復号化ずみマクロにアクセスし、既知のウイルスについてその復号化ずみマクロを走査し、そのマクロが見出されない場合は未知のウイルスについてその復号化ずみマクロを走査する。既知のウイルスについて走査する際には、マクロウイルス走査モジュール３０４はシグネチャ走査手法を用いる。すなわちウイルス走査モジュール３０４はウイルス情報モジュール３０８と信号授受している。ウイルス情報モジュール３０８は既知のウイルスを検出する情報を含む。例えば、ウイルス情報モジュールは既知のウイルスを特定するデータまたはシグネチャのストリングを含む。ウイルス情報モジュール３０４はデータバッファ３１２の中の復号化ずみマクロにアクセスしその復号化ずみマクロを走査してウイルスシグネチャ含有の有無を判定する。この走査を行うのに状態マシーンまたは同様の手法を用いることができる。既知のウイルスシグネチャがその復号化ずみマクロ中に見出された場合は、マクロウイルス走査モジュール３０４が既知ウイルスに従ってその復号化ずみマクロを汚染マクロと特定し、その復号化ずみマクロをデータバッファ中の既知のウイルスに関連づける情報を蓄積し、マクロ処置モジュール３０６など他のモジュールがその汚染マクロを処置できるようにする。
既知のウイルスが検出されなかった場合は、マクロ走査モジュールが復号化ずみマクロの中の未知のウイルスについて走査を行う。上述のとおり、アプリケーションプログラム２０４は種々の動作にマクロが用いる命令を含むWordBasicなどのプログラム言語を含むことが多い。マクロウイルスは不要で有害な動作を行う種々の動作および命令を用いる。
通常のアプリケーションプログラム２０４はマクロをテンプレートファイルに提供することによってマクロをサポートする。テンプレートファイルはワードプロセシング設定など飾りほかの設定を含む。また、テンプレートファイルはマクロを含み得る。通常は、グローバルテンプレートファイルはデータファイルのために設定およびマクロを提供する。例えば、マイクロソフトWORDについては、グローバル設定およびマクロのプールはテンプレートファイルNORMAL.DOTに常駐する。アプリケーションプログラム２０４がデータファイルを開くと、それによってグローバルテンプレートファイルがまず開き、グローバル設定およびマクロをロードし、そのあとでデータファイルを開く。通常のデータファイルは埋込みマクロを含まないアプリケーションプログラム２０４を表すようにフォーマットされている。しかし、データファイルはテンプレートファイルを含まない旨をアプリケーションプログラム２０４に表示するようにフォーマットすることもできる。
ある種のマクロウイルスは汚染された文書ファイルをテンプレートフォーマットで保存し文書ファイルまたはデータファイル拡張子（.DOC）は消去しないまま保存するようにする。したがって、汚染マクロは外見上アプリケーションデータファイルの文書の中に埋め込まれ得る。その種のマクロには「AutoOpen」、「AutoExec」、「AutoClose」など、すなわちデータファイルを開いた際にマクロを実行させるようマクロが含まれる。したがって、ユーザは通常のデータファイルに見えるものを開こうとすることはできるが、そうすると、埋込みマクロを自動的に実行させることになる。マクロウイルスも他のファイルで複製を生じる。例えば、マクロウイルスはデータファイル中に自分自身をコピーしてそのデータファイルへの通常のファイル拡張子を維持しながらテンプレートフォーマットを表示するようにデータファイルをフォーマットすることがよくある。
マクロウイルスに汚染されたファイルはそのフォーマットを変えられてしまったり、汚染されたデータファイルが更新ずみのフォーマット情報とともにマクロウイルスによって保存されたりする。また、汚染されたマクロがグローバルテンプレートにコピーされ、その結果、他のファイルが開かれる際にそれら他のファイルに広がり得る。
マクロウイルス走査モジュール３０４はマクロウイルスに使われる可能性の高いマクロ命令組合せ、換言すれば容疑命令組合せを検出するルーチンを含む。マクロウイルス走査モジュール３０４の検出する容疑命令の一つの組合せはマクロイネーブル化命令およびマクロ複製命令である。マクロイネーブル化命令はファイルのフォーマッティングが実行用マクロ含有ファイルを表示するように設定可能な命令である。例えば、ファイルフォーマッティングの設定を、ファイルを開いた際にテンプレートファイルがアプリケーションプログラム２０４で実行されるようにテンプレートファイルを表示するように行うことができる。マクロ複製命令はマクロウイルスの複製を可能にする命令である。マクロイネーブル化命令とマクロ複製命令との組合せはマクロウイルスを表示する。すなわち、そのような命令は先行ファイルにおけるマクロの複製および実行を可能にするからであり、これらはマクロウイルスの二つの通常の特徴を構成する。
容疑命令の組合せを特定するためにマクロウイルス走査モジュール３０４はウイルス情報モジュール３０８からの比較データにアクセスする。この比較データは、復号化ずみマクロの中の容疑命令の組合せの特定のための命令識別子組を含む。それら命令識別子組の好例は第１および第２の容疑命令識別子を含む。命令識別子は二進のストリングであり、復号化ずみマクロの走査はこれら二進のストリング、すなわち容疑命令をそれらマクロが含んでいるか否かを判定するように行う。命令識別子の組で定義した容疑命令の組合せをマクロが含むと判定された場合は、そのマクロがそのデータ組に対応する未知のウイルスで汚染されていると判定する。マクロウイルス走査モジュール３０４は復号化ずみマクロを未知ウイルスによる汚染マクロとフラグ表示し、その復号化ずみマクロをデータバッファ３１２中における未知ウイルス検出に導いた命令識別子に関連づける情報を蓄積し、マクロ処置モジュール３０６など他のモジュールが汚染マクロを然るべく処置できるようにする。マクロウイルス走査モジュール３０４の検出した容疑命令の組合せ、すなわちマクロウイルスイネーブル化およびマクロウイルス複製の命令などの命令の組合せは図６を参照してさらに詳述する。
ウイルス情報モジュール３０８はマクロウイルス検出モジュール２０６中の他のモジュール３０２、３０４、３０６、３１０、３１２から分離するのが好ましい。それによって、マクロウイルス検出用の情報の更新が容易になる。例えば、ウイルス情報３０８はフロッピーディスクなどの媒体から得た新しい情報をコピーすることによって更新できる。また、コンピュータシステム１００の通信ユニット１１２経由、またはネットワークリンク（図示してない）経由でアクセスしたインターネット資源から新たな情報をダウンロードすることもできる。分離したウイルス情報モジュール３０８によって情報転送がより容易になり、更新も容易になり、したがって未知ウイルスを含むウイルスに対するシステム１００の保護が強化される。
マクロ処置モジュール３０６はデータバッファ３１２およびマクロウイルス走査モジュール３０４と信号授受し、したがって対象ファイルからの復号化ずみマクロの中のウイルスの検出に関する情報を受ける。マクロ処理モジュール３０６は、マクロウイルス走査モジュール３０４が復号化ずみマクロの中に既知または未知のウイルスを検出したか否かを判定するための復号化ずみマクロの状態のチェックのルーチン、復号化ずみマクロからマクロウイルスを除去するルーチン、および処置ずみマクロの整合性を検証するルーチンを含む。
マクロ処置モジュール３０６はデータバッファ３１２の中の復号化ずみマクロにアクセスして復号化ずみマクロの状態をチェックし、マクロウイルス走査モジュール３０４が既知のウイルスを検出したか否かを判定する。そのマクロの状態はデータバッファ３１２内では状態フラグなどの情報で表される。また、データバッファ３１２は復号化ずみマクロをそのマクロに含まれる既知のウイルスと関連づける情報を蓄積している。上述のとおり、この情報はマクロウイルス走査モジュール３０４から供給される。マクロウイルス走査モジュール３０４に適切な情報を蓄積しマクロ処置モジュール３０６と直接に信号授受することもできる。既知ウイルス判定フラグが表示されている場合は、マクロ処置モジュールは復号化ずみマクロからその既知マクロを除去するための既知ウイルス関連情報を用いる。既知のマクロウイルスを復号化ずみマクロから選択的に除去し非汚染命令と置換して、そのマクロの残余の部分がそれ以降の動作のために保持するのが好ましい。処置ずみマクロはマクロ処置モジュール３０６によってデータバッファ３１２内に区別して蓄積される。次に、処置ずみマクロの整合性をマクロ処置モジュールで確認し、整合性が維持されている場合はその処置ずみマクロに有効とフラグ表示する。処置ずみマクロの整合性が維持されていなかった場合は、処置ずみマクロを無効と表示する。マクロの整合性のチェックは、残余の命令がもとのままであるか否かの確認および命令の逐次連結がもとのままの状態に留まっているか否かの確認によって行う。マクロの整合性の検証は、ファイル訂正モジュール３１０など他のモジュールが、汚染マクロを処置ずみマクロで置換するまたは対象ファイルから汚染マクロ消去するに留めるなどの代替処置を決定することを可能にする。
マクロウイルス走査モジュール３０４が未知のウイルスを検出した場合は、その未知のウイルスの影響を除去するようにマクロ処置モジュール３０６がそのマクロを処置する。既知ウイルス処置プロトコルと同様に、マクロ処置モジュール３０６はデータバッファ３１２と信号授受して未知のウイルスの検出の有無を判定し、有りと判定した場合はウイルス有りの判定に導いた命令識別子を特定する。マクロの中の未知ウイルスの検出に導いた容疑命令識別子の組をそのマクロの訂正に用いる。各命令識別子は、各命令の識別およびマクロからの除去を可能にするように一つ以上の容疑命令と関連づけてある。ウイルス訂正用のマクロ処置モジュール３０６はマクロを復号化して訂正に備え、またはマクロウイルス走査モジュール３０４で復号化ずみのマクロにアクセスする。ここでも容疑命令を復号化マクロから除去し非汚染命令と置換するのが好ましい。処置ずみマクロはデータバッファ３１２に蓄積し、ファイル訂正モジュール３１０など他のモジュールによるアクセスに備える。上記の対既知ウイルス処置プロトコルと同様に、処置ずみマクロの整合性を検証し、そのマクロに然るべきフラグ表示を立てる。好適なマクロ処置ルーチンは図７を参照してより詳細に述べる。
ファイル訂正モジュール３１０はデータバッファ３１２およびマクロ処置モジュール３０６ほかのモジュールと信号授受し、対象ファイルからのマクロで検出されたウイルスに関する情報をその信号授受を通じて受ける。ファイル訂正モジュール３１０は汚染ファイルの表示があった場合の処置動作のためのルーチンを含む。マクロ処置モジュール３０６の中のルーチンは自動的にまたはユーザ許可時のみに種々の処置動作を行うように構成できる。例えば、ファイル訂正モジュール３１０は汚染マクロ含有の対象ファイルをコピーし、その汚染マクロ処置ずみマクロと置換し、ユーザへの通知なしに対象ファイルを訂正ずみと置換することができる。ファイル訂正モジュール３１０も、訂正動作の諸段階でユーザに進行の可否を問い合わせるプロンプトを生ずるように構成できる。この動作がコンピュータシステム１００の入力装置１０８および表示装置１０２を用いて対話式に行われることはもちろんである。例えば、ファイル訂正モジュール３１０が対象ファイルからのマクロの中にある種のウイルスまたは未知のウイルスが検出されたことをユーザに表示する。次に、ユーザは対象ファイルを訂正ずみファイルに置換することを望むか否かの問合せを受ける。ファイル訂正モジュール３１０の構成の仕方、および諸段階におけるプロント表示の仕方が多様であることは当業者に理解されよう。
ファイル訂正モジュール３１０はデータバッファ３１２と信号授受し、それによって汚染マクロ含有の対象ファイルを表示する。ファイル訂正モジュール３１０は汚染マクロ含有の対象ファイルにアクセスし、その対象ファイルのコピーをそのファイルの訂正のためにデータバッファ３１２に蓄積する。マクロ位置特定および復号化モジュール３０２、マクロウイルス走査モジュール３０４およびマクロ処置モジュール３０６について上述したとおり、データバッファ３１２は対象ファイルと処置ずみマクロとの関係やその処置ずみマクロの有効無効などに関する情報および検出ウイルスの種類に関する情報を蓄積している。ファイル訂正モジュール３１０はデータバッファ３１２の中のマクロ有効性フラグをチェックして、マクロ処置モジュール３０６による検出ウイルスの除去および処置ずみマクロの整合性の維持が可能であったか否かを判定する。処置ずみマクロの整合性が維持されていなかった場合は、ファイル訂正モジュール３１０がデータバッファ３１２の中の対象ファイルをその中の汚染マクロを処置ずみマクロと置換することによって訂正する。ウイルス汚染マクロを汚染ファイルの中でまず位置特定する。この動作はマクロ位置特定および復号化モジュール３０２との信号授受によって行うことができ、またモジュール３０２と同様にオペレーティングシステム２０２の情報共用資源にマクロ位置特定のためにアクセスできるファイル訂正モジュール３１０によって独立に行うこともできる。汚染を受けた対象ファイルのコピーをデータバッファ３１２に蓄積する。次に処置ずみマクロをそのマクロ抜きの対象ファイルのバージョンに加えて訂正ずみファイルを生ずる。この訂正ずみファイルを元の位置の対象ファイルへの置換に用いる。これは対象ファイルを訂正ずみファイルで直接に置換する手法である。代替的に、対象ファイルを消去または上書きし、訂正ずみファイルを別の位置に蓄積することもできる。
無効とフラグ表示された対象ファイルに対応する処置ずみマクロは汚染マクロとの置換には用いないのが好ましい。その場合は、ファイル訂正モジュール３１０によって種々の代替的訂正動作を行うことができる。例えば、対象ファイルがウイルスを含んでいることをユーザに知らせ、汚染マクロを置換なしに汚染ファイルから除去し、または対象ファイルを除去することができる。
図４を参照すると、マクロの中の未知のウイルスを検出する方法４００流れ図が示してある。ウイルス検出のための対象ファイルにまずアクセスする。対象ファイルは通常メモリ１０６内にあり、それら対象ファイルをデータバッファ３１２にコピーしてマクロウイルス検出モジュール２０６がそれら対象ファイルからマクロウイルスを検出し除去できるようにする。対象のファイル一つだけについて処理を詳述するが、この発明では多数のファイルにアクセスして検査することが可能である。ファイルへのアクセスのタイミングと範囲は、マクロウイルス検出モジュール２０６の説明において上述したとおり、このモジュール２０６がどのように構成されているかに左右される。すなわち、多様なファイルを対象にでき、ユーザに選択可能な条件に基づいてウイルス検出を起動できる。しかし、マクロウイルス検出モジュール２０６はアプリケーションプログラム２０４の起動の必要なしにアプリケーションプログラム２０４起動で動作するマクロウイルスの検出および除去が可能になるようにするのが望ましい。
マクロ位置特定および復号化モジュール３０２は対象ファイルにアクセスしデータバッファに供給したのち、その対象ファイル中のマクロの有無を判定し、それらマクロの位置特定および復号化に進む。ファイルの位置特定および復号化の好ましい方法５００は図５を参照してより詳細に述べる。次に、マクロが位置特定および復号化モジュール３０２によって見出されたか否かを判定する（４４０）。マクロが対象ファイルの中にあると判定された場合（４４０）は、マクロをマクロウイルス走査モジュール３０４で走査し（６００）、そのマクロがマクロウイルスで汚染されているかどうかを判定する。対象ファイルの中にマクロがないと判定された場合（４４０）は、このマクロウイルス検出方法は終了する。好ましい走査の方法（６００）は図６を参照してより詳細に述べる。走査においてウイルスが検出された場合（４６０）は、汚染マクロをマクロ処置モジュール３０６で処置する（７００）。走査においてウイルスが検出されなかった場合（４６０）は、このウイルス検出方法は終了する。マクロ処置の好ましい方法は図７を参照してより詳細に述べる。マクロ処置ののち（７００）、汚染した対象ファイルに対して訂正動作（８００）を行い、そのあとでマクロウイルス検出の好ましい方法を終了する。好ましい訂正方法は図８を参照して詳述する。
図５を参照すると、この発明によるマクロ位置特定および復号化の好ましい方法５００が示してある。アプリケーションデータファイルやテンプレートファイルなど種々のファイルを対象にすることができる。マクロ位置特定および複合化モジュール３０２は、対象ファイルのマクロ含有の有無の判定をそのファイルの所属種類の判定（ステップ５０５）によってまず行うルーチンを含む。この判定は対象ファイルのファイル拡張子をチェックすることによって行う。所属ファイル種類のチェックによって、対象ファイルがテンプレートファイルであるか否かを判定できる。そのファイルがテンプレートファイルである場合は、マクロ位置特定および復号化モジュール３０２は対象ファイルにおける埋込みマクロの有無を判定する必要はない。したがって、そのファイルがテンプレートファイルであるとステップ５１０で判定された場合は、そのファイルの中のどのマクロも位置特定され（５２５）復号化され（５３０）、マクロウイルス走査モジュール３０４によるウイルスについての走査に備える。復号化ずみのマクロはいずれもデータバッファ３１２に蓄積され（５３５）、マクロウイルス走査モジュール３０４によるアクセスに備える。
そのファイルがテンプレートファイルまたはそれ以外のマクロを含有し得る種類のファイルでないとステップ５１０で判定された場合は、ステップ５１５で対象ファイルを調べて埋込みマクロの有無を判定する。埋込みマクロがない場合は、対象ファイルがマクロを含まないとステップ５４０で判定して、この好ましい方法は終了する。ファイルが埋込みマクロを含むか否かの判定はファイルフォーマッティングをチェックすることによって行う。例えば、一つのフォーマットは、アプリケーションデータファイルが拡張子の表示如何に関わらずテンプレートファイルを含む旨をアプリケーションプログラム２０４に示すことを可能にする。そのファイルフォーマットがテンプレートファイル含有を表す場合は、その対象ファイルは埋込みマクロを含むかもしれない。ステップ５２０においてファイルが埋込みマクロを含まないと判定された場合は、ステップ５４０においてマクロは対象ファイル中にないと判定し、この好ましい方法５００は終了する。
対象ファイルは埋込みマクロを含まないとステップ５２０で判定された場合、または対象ファイルはマクロ含有テンプレートファイルであるとステップ５１０で判定された場合は、そのマクロをステップ５２５で位置特定しステップ５３０で復号化する。位置特定および復号化モジュール３０２は、WINDOWS 3.1オペレーティングシステムで提供されているようなオブジェクト連結埋込み（OLEまたはOLE2）などのオペレーティングシステム２０２情報共用資源を用いるルーチンを含む。位置特定および復号化モジュール３０２について上述したとおり、情報共用資源は、ファイルに一体化されたオブジェクトの位置特定および復号化を可能にするように、ファイル構造に関する詳細、すなわちアプリケーションファイルやテンプレートファイルの詳細を提供する命令を含む。慣用のプログラム作成手法をマクロ位置特定および復号化のための情報共用資源の実働化に使うことができる。マクロを位置特定し復号化したのち二進符号に変換し（例えばASCII変換により）、ステップ５３５においてデータバッファ３１２に蓄積してウイルスについての走査ができるようにする。マクロ位置特定および復号化モジュール３０２は、復号化マクロの蓄積のほかに、復号化ずみマクロと対象ファイルとの間の関連を維持し蓄積し、マクロウイルス走査モジュール３０４、マクロ処置モジュール３０６およびファイル訂正モジュール３１０が対象ファイルの正しい走査および処置、および訂正をできるようにする。ステップ５３５でマクロの復号化および蓄積が終了したのち、この好ましい位置特定および復号化の方法５００は終了する。
図６の流れ図を参照すると、この発明によるマクロ中ウイルス検出の好ましい方法６００が示してある。マクロウイルス走査モジュール３０４は、位置特定および復号化モジュール３０２の提供する復号化ずみマクロ情報にアクセスし、復号化ずみマクロの情報とウイルス情報３０８との比較によりウイルスの存在を検出するルーチンを含む。
第１のステップ６０５において、復号化マクロを既知のウイルスについて走査する。既知のウイルスについて走査するために、マクロウイルス走査モジュール３０４はシグネチャ走査手法を用いる。マクロウイルス走査モジュール３０４はデータバッファ３１２中の復号化ずみマクロにアクセスし、ウイルス情報モジュールの提供するウイルスシグネチャをそれらマクロが含むか否かを判定する。ステップ６１０において、既知ウイルス走査ステップ６０５に基づく既知ウイルスを復号化ずみマクロが含むか否かを判定し、既知ウイルス有りの場合は、ステップ６１５においてマクロウイルス走査モジュールがそのマクロを既知ウイルスによる汚染有りとフラグ表示しその復号化ずみマクロとその既知マクロとを関連づける情報をデータバッファ３１２に蓄積する。
走査ステップ６０５で既知ウイルスが検出されなかったとステップ６１０で判定した場合は、マクロウイルス走査モジュール３０４が復号化ずみマクロの中の未知のウイルスについて走査を行う。ステップ６１５において、マクロウイルス走査モジュール３０４は未知のウイルスの検出のための一連の命令識別子を取り入れる。マクロ走査モジュール３０４はマクロウイルスに使われそうな命令を検出する。これら命令は容疑命令とも呼ぶ。容疑命令の特定の組合せはマクロウイルスに使われる可能性が高い。容疑命令の組合せの探索によって、誤ったウイルス検出を回避できる。二つ（またはそれ以上）の互いに異なる容疑命令を含むマクロは汚染されている可能性がごく高いからである。
マクロウイルス走査モジュール３０４の説明で述べたとり、通常のアプリケーションプログラム２０４はテンプレートファイルにマクロを提供する。通常はアプリケーションデータファイルはグローバルテンプレートファイルを使うが、埋込みマクロを含むことを示すようにフォーマットすることもできる。例えば、WORDファイルをテンプレートファイル含有の表示のために.DOTフォーマットで保存することができる。多くのマクロウイルスが、汚染ドキュメントファイルをテンプレートフォーマット（.DOT）で保存させ、ドキュメントまたはデータファイル拡張子（.DOC）を不変のまま保持させる。したがって、汚染マクロは外見上単なるアプリケーションデータファイルに見えるドキュメントに埋め込まれるかもしれない。マクロウイルスは他のファイルに自分自身の複製を作る。例えば、マクロウイルスはデータファイルに自分自身をコピーして、データファイル用の通常のファイル拡張子を維持しながらデータファイルをテンプレートフォーマット表示状態にフォーマットすることが多い。
マクロ走査モジュール３０４の検出した容疑命令の一つの組合せはマクロイネーブル化命令およびマクロ複製命令である。マクロネーブル化命令は、そのファイルが実行用のマクロを含むことを表すようにファイルをフォーマットするものである。例えば、ファイルフォーマッティングをテンプレートファイルを表すように設定して、アプリケーションプログラム２０４がテンプレートファイルをファイルが開いたとき実行するようにすることができる。マクロ複製命令はマクロウイルスの複製を可能にする命令である。マクロイネーブル化命令とマクロ複製命令との組合せはマクロウイルスを表す。それら命令によって先行ファイルにおけるマクロウイルスの二つの通常の特徴、すなわちマクロの複製および実行が可能になるからである。
マイクロソフトWORDファイルなど特定のアプリケーションファイルでは、ファイルフォーマットフィールド.formatを１に設定すると、アプリケーションプログラム２０４（WORD）がファイルに埋込みマクロが含まれているものと判断し、適当な始動により、ファイルに埋込みずみの任意のマクロにアクセスしてそれを実行する。すなわち、ファイル中で.formatを１に設定することによって、そのファイルの中のマクロの実行をイネーブルし、先行ファイルでそのような設定の提供を求める命令はすべてマクロイネーブル化命令とみなす。例えば、命令「if dlg.format=0,then dlg.format=1」は先行ファイルで.formatを０から１に変えることを可能にするのでマクロイネーブル化命令である。命令「FileSaveAsa$,1」など他の命令は元のファイルを保持し、ファイルが埋込みマクロを含み得る旨を表示するフォーマットなど別のフォーマットでそのファイルの追加のコピーを保存する。したがって、この種の命令もマクロイネーブル化命令である。ファイル中でマクロウイルス実行をイネーブルする種々の代替的命令が認識されよう。
マクロウイルス複製命令はマクロウイルスの反復を可能にする種類のものである。例えば、命令「MacroCopy」はマクロをコピーし、そのマクロが汚染している場合は有害な命令全部、すなわち送信元から宛先まで全部をコピーする。命令「Organizer.copy」など上記以外の命令もマクロウイルス複製を容易にする。種々の代替的命令がマクロウイルス複製を容易にできることを理解されたい。
マクロ位置特定および復号化の好ましい方法５００について述べたとおり、対象ファイルからのマクロ命令は位置特定されたのち分析のために２進符号に変換される。特有の２進符号は容疑命令にも対応する。例えば、マクロウイルスイネーブル化命令「ifdlg.format=0thendlg.format=1」はマクロウイルス複製命令「MacroCopy」と同様に特定の対応２進符号を有する。したがって、ウイルス情報モジュール３０８から得られる比較データ（６１５）は第１および第２の命令用の２進符号または２進符号の特有部分をそれぞれ含み、それによって対象ファイルからのマクロの中の第１および第２の命令を特定する。
また、この発明によって特有の２進符号部分がいくつかの容疑命令に対応すると判定された。例えば、２進ストリング「73 CB 00 0C 6C 01 00」（１６進表記）はいくつかのマクロウイルスイネーブル化命令中に見出される命令部分「.format=1」に対応する。また、例えば、上記命令「ifdlg.format=0thendlg.format=1」、「ifbewaardlg.format=0thenbewoordlg.format=1;およびFileSaveAs.Format=1」、および「FlieSaveAs.Name=Filename$(),.Format=1」は２進ストリング「73 CB 00 0C 6C 01 00」は２進ストリングを含む。したがって、この発明はこの73 CB 00 0C 6C 01 00など特定のストリングを複数の互いに異なる容疑マクロ命令の検出のための識別子として用いる。
ウイルス情報モジュール３０８の中の比較データにはいくつかの組の命令識別子を含めるのが好ましい。容疑命令の種々の組合せをそれら命令識別子組の利用により検出できる。種々のマクロウイルスイネーブル化命令やマクロウイルス複製命令をこれら命令識別子の各組を用いて識別できる。命令識別子はマクロウイルスイネーブル化命令およびマクロウイルス複製命令に限られない。例えば、コンピュータハードディスク装置に認証および命令なしに再初期化を行わせる命令、すなわちユーザへの通知なしの再初期化を可能にするようにシステム設定を変更する命令は容疑命令組合せとして使用可能である。
図９を参照すると、ウイルス情報モジュール３０８に蓄積した命令識別子の好例を含むデータ表が示してある。この好例データ表９００はいくつかの互いに異なる命令識別子に対応する行９０２を含む。また、命令識別子９０３の組を識別する列、命令識別子ＩＤ番号９０４および命令識別子２進符号のテキストおよび対応１６進表記９０５もこの表に含めてある。命令識別子の各組に二つの命令識別子を含めるのが好ましいが、付加的な命令識別子は一つの組に含め得る。また、マクロウイルス判定は三つの命令識別子のうちの二つまたはそれ以外の識別子小群の検出に基づいて行うことができる。データ表９００は例示にすぎない。ウイルス情報モジュール３０８への比較データの蓄積は種々の手法で行うことができる。
図６の流れ図を参照すると、ステップ６１５においてマクロウイルス走査モジュール３０４で一組の命令識別子を得たのち復号化ずみマクロを走査して、命令識別子の識別したような容疑命令の組合せを含むか否かを判定する。ステップ６２０において復号化ずみマクロを第１の命令識別子を用いて走査する。例えば、復号化ずみマクロを走査して（６２０）、命令識別子９００の第１の組の中の第１の命令識別子に対応するストリング73 CB 00 0C 6C 01 00が存在するか否かを判定する。ステップ６２０における走査は状態マシーン、すなわち復号化ずみマクロを走査して上記ストリングの有無を判定する状態マシーンで行う。ステップ６２５において、第１の容疑命令識別子が復号化ずみマクロに存在するか否かを判定する。この第１の命令識別子に対応する命令はないと判定した場合は（６２５）、ステップ６４５でこの命令識別子組にしたがってそのマクロを非汚染と判定し、このマクロウイルス走査方法６００を終了する。
ステップ６２５において上記第１の命令識別子があると判定した場合は、ステップ６３０で復号化ずみマクロを走査し、第２の命令識別子の有無を判定する。ステップ６３５でこのマクロが第２の容疑命令識別子を含むと判定した場合は、ステップ６４０で復号化ずみマクロをその命令識別子組対応の未知のウイルスによる汚染マクロとフラグ表示する。未知ウイルス検出に導いた命令識別子組に復号化ずみマクロ関連づける情報をデータバッファ３１２に蓄積して、マクロ処置モジュール３０６など他のモジュールが汚染マクロを然るべく処置できるようにする。
ステップ６３５で第２の容疑命令識別子なしと判定した場合は、ステップ６４５でマクロウイルス走査モジュール３０４が命令識別子組にしたがって復号化マクロ中には未知ウイルスなしと判定し、マクロウイルス走査方法６００を終了する。ステップ６３５におけるこの判定は命令識別子の単一の組について行われる。命令識別子の上記以外の組は復号化マクロを反復的に比較して、未知ウイルスの判定を可能にする。また、共通の第１の命令識別子の有無は、種々の代替的な第２の命令識別子の探索の前に判定できる。
図７の流れ図を参照すると、好適な汚染マクロ処置方法７００が示してある。ステップ７０５において、未知ウイルス判定フラグをチェックしてマクロウイルス走査モジュール３０４が復号化ずみマクロの中に既知のウイルスを検出したか否かを判定する。既知ウイルス判定フラグはデータバッファ３１２の中のマクロ処置モジュール３０６、すなわち既知ウイルスの検出に用いたウイルス情報に復号化ずみマクロを関連づけるモジュール３０６に供給する。ステップ７１５でこのウイルス情報を用いて既知ウイルスを復号化ずみマクロから除去する。マクロからのウイルスの除去は、ウイルスを非汚染命令（no-opなど）に置換することによって行う。ウイルスは既知であるから、マクロの正常部分がそのまま残るように選択的に除去できる。ウイルス除去ののち、ステップ７３５において処置ずみマクロをチェックしてその整合性を検証する。処置ずみマクロの整合性が維持されていると判定した場合は、ステップ７４５で処置ずみマクロにマクロ処置モジュール３０６で有効とフラグ表示する。処置ずみマクロは、そのマクロの有効性関連データとともにデータバッファ３１２に蓄積しその状態に保つ。ステップ７４０において上記整合性が維持されていないと判定された場合は、ステップ７５０においてその処置ずみマクロを無効とフラグ表示し、関連情報をデータバッファ３１２に同様に蓄積する。
図７に戻って、既知のウイルスは復号化ずみマクロにないとマクロ処置モジュール３０６が判定した場合は、未知のウイルスを選択的に除去するようにマクロを処置する。復号化ずみマクロの中の未知のウイルスの検出に用いた命令識別子の組をデータバッファ３１２の中のマクロ処置モジュール３０６に利用できる。この命令識別子の組は例えば第１および第２の容疑命令識別子を含む。ステップ７２０では第１の容疑命令識別子をその識別子対応の容疑命令の各々の位置特定に用いる。マクロウイルス走査モジュール３０４の用いる命令の検出に関連づけて説明した手法を用いて上記命令を位置特定するのに復号化ずみマクロを走査できる。命令識別子が命令全体でなく命令の断片と対応する場合は、マクロ処置モジュール３０６が検出された断片の各々を命令全体に関連づける。この関連づけはマクロの用いるプログラム用言語に左右される。この関連づけには慣用の手法を使用できる。ステップ７２５では追加の容疑命令識別子を対応の容疑命令の検出に用いる。次に、ステップ７３０で、位置特定した容疑命令を置換する。既知のウイルスストリングの置換と同様に、容疑命令を非汚染命令と置換するのが好ましい。マクロの整合性を検証し、整合性維持の有無に応じて処置ずみマクロにフラグ表示し、マクロ処置方法７００を終了する。
図８を参照すると、この発明による好ましい訂正方法８００が示してある。ファイル訂正モジュール３１０はデータバッファ３１２および種々のモジュール３０２、３０４、３０６、３０８、３１０と信号授受し、検出されたマクロウイルスや汚染マクロ含有の検出された対象ファイルなどの情報にアクセスする。ステップ８０５でマクロウイルス含有の対象ファイルをデータバッファ３１２に蓄積する。対象ファイルを元の位置でアクセスしその汚染マクロとともにデータバッファ３１２にコピーするのが好ましい。次に、ファイル訂正モジュール３１０は対象ファイルの中のマクロを処置ずみマクロに置換するか代替的訂正手法を用いるかによって訂正動作を行う。ステップ８１０でマクロ有効性フラグをチェックし、対象ファイル対応の処置ずみマクロの整合性を判定する。処置ずみマクロが有効と表示されている場合は、ファイル訂正モジュール３１０が対象ファイルの中の汚染マクロを処置ずみマクロで置換する。ステップ８１０では、汚染マクロは対象ファイル中で位置特定される。この動作はオペレーティングシステム２０２の情報共用資源（OLE）を用いて行う。ステップ８２０では、位置特定したマクロを情報共用資源の利用により対象ファイルから除去し、そのマクロ抜きの対象ファイルのバージョンをデータバッファ３１２に蓄積する。ステップ８２５では、マクロ処置モジュール３０６の発生した処置ずみマクロをそのマクロ抜きの対象ファイルのバージョンに加えて訂正ずみファイルを発生する。ステップ８３０では、この訂正ずみファイルを元の位置で対象ファイルの代わりに入れるのに用いる。訂正ずみファイルで初めからの対象ファイルを直接に置換することもできる。また、対応の対象ファイルは消去または上書きでき、訂正ずみのファイルは任意の位置に蓄積できる。
ステップ８１０に戻ると、対象ファイル対応の処置ずみマクロを無効とフラグ表示し、この処置ずみマクロは汚染マクロの置換には用いないのが好ましい。すなわち、ステップ８３５では、ユーザのコンフィギュレーション設定に応じて、ファイル訂正モジュールで代替の訂正動作を行う。多様な代替の訂正過程、すなわち対象ファイルがウイルスを含む旨をユーザに知らせる、対象ファイルからの汚染ファイルの除去を置換なしに行う、または目標ファイルを消去するなど代替の訂正過程が認識されよう。
特定の実施例を参照してこの発明を上に説明してきたが、種々の変形が可能であることは当業者に認識されよう。例えば、種々のモジュールについてアクセス、位置特定、復号化、検出および訂正の系列を説明してきたが、マクロ中で未知のウイルスを検出する際に等価の機能を発揮する通常のモジュールに種々のプロセスを取り込めることは理解されよう。上記実施例のこれらのおよびこれら以外の変形および改変をこの発明は提供するものであり、この発明の範囲は添付請求の範囲のみによって限定されるものである。
【図１】
0004372228.tif 000002
【図２】
0004372228.tif 000003
【図３】
0004372228.tif 000004
【図４】
0004372228.tif 000005
【図５】
0004372228.tif 000006
【図６】
0004372228.tif 000007
【図７】
0004372228.tif 000008
【図８】
0004372228.tif 000009
【図９】
0004372228.tif 000010
0004372228.tif 000011
0004372228.tif 000012
0004372228.tif 000013