(57)【要約】      （修正有）【課題】実行可能なコード・フリー・コンピュータ・ファイル（executable code-free computer files：実行可能なコードが無いコンピュータ・ファイル）を検出する。【解決手段】１つの実施例によれば、入力ファイルが構文解析されてファイル・フォーマットが認識される１０２。実行可能コードが入力ファイル内に存在するかどうかを決定するために、認識されたファイル・フォーマットが使用可能であれば、認識されたファイル・フォーマットに従って入力ファイルのコンテンツ（contents）が検査される１０４。次に、検査に応じてステータスが送信される１０６。【選択図】図１
2005216286.tif 000002
【特許請求の範囲】
【請求項１】
入力ファイルを構文解析して前記入力ファイルのファイル・フォーマットを認識するためのプロセッサ実行可能命令と、
認識されたファイル・フォーマットが使用可能であれば、認識されたファイル・フォーマットに従って前記入力ファイルのコンテンツを検査し、実行可能コードが前記入力ファイル内に存在するかどうかを決定するためのプロセッサ実行可能命令と、
前記検査して決定する結果に応じてステータスを送信するためのプロセッサ実行可能命令と
を備えることを特徴とするプロセッサ可読媒体。
【請求項２】
ステータスを送信するための前記プロセッサ実行可能命令は、
前記入力ファイルの前記ファイル・フォーマットが認識されて、実行可能コードが見つからなかった場合に、ｆｉｌｅ−ｈａｓ−ｎｏ−ｃｏｄｅステータスを送信するための命令と、
前記入力ファイルの前記ファイル・フォーマットが認識されて、実行可能コードが見つかった場合に、ｆｉｌｅ−ｈａｓ−ｃｏｄｅステータスを送信するための命令と
をさらに備えることを特徴とする請求項１に記載のプロセッサ可読媒体。
【請求項３】
前記入力ファイルの前記ファイル・フォーマットが認識されなかった場合、ｄｏｎ’ｔ−ｋｎｏｗステータスを送信するための命令をさらに備えることを特徴とする請求項１に記載のプロセッサ可読媒体。
【請求項４】
前記入力ファイルを構文解析して前記入力ファイルのファイル・フォーマットを認識するための前記命令は、拡張可能パーサ内に含まれる複数のコンポーネント・パーサで繰り返し、前記入力ファイルを構文解析するための命令をさらに備えることを特徴とする請求項１に記載のプロセッサ可読媒体。
【請求項５】
前記拡張可能パーサ内に含まれる前記複数の各コンポーネント・パーサが前記入力ファイルのコード・セクションを認識できない場合にｄｏｎ’ｔ−ｋｎｏｗステータスを送信するための命令をさらに備えることを特徴とする請求項４に記載のプロセッサ可読媒体。
【請求項６】
前記ステータスを送信するための前記命令は、前記ステータスを電子メール・プログラムに送信するための命令をさらに備えることを特徴とする請求項１に記載のプロセッサ可読媒体。
【請求項７】
前記ステータスを送信するための前記命令は、前記ステータスをインスタント・メッセージ・プログラムに送信するための命令をさらに備えることを特徴とする請求項１に記載のプロセッサ可読媒体。
【請求項８】
前記ステータスを送信するための前記命令は、前記ステータスをインターネット閲覧プログラムに送信するための命令をさらに備えることを特徴とする請求項１に記載のプロセッサ可読媒体。
【請求項９】
前記入力ファイルのコンテンツを検査し、実行可能コードが前記入力ファイル内に存在するかどうかを決定するための前記命令は、特定のデータ・ファイル・フォーマットを認識するように拡張可能パーサのコンポーネント・パーサ部分を操作するための命令をさらに備えることを特徴とする請求項１に記載のプロセッサ可読媒体。
【請求項１０】
前記入力ファイルを構文解析して前記入力ファイルのファイル・フォーマットを認識するための前記命令は、複数のファイル・フォーマットを認識するように構成されたパーサを操作するための命令をさらに備えることを特徴とする請求項１に記載のプロセッサ可読媒体。
【請求項１１】
前記入力ファイルのコンテンツを検査して実行可能コードが前記入力ファイル内に存在するかどうかを決定するための前記命令は、それぞれが特定のファイル・フォーマットを認識するように構成される複数のコンポーネント・パーサを含む複合パーサを操作するための命令をさらに備えることを特徴とする請求項１に記載のプロセッサ可読媒体。
【請求項１２】
少なくとも１つのコンポーネント・パーサが前記入力ファイルの前記ファイル・フォーマットを認識した後、残りのすべてのコンポーネント・パーサで引き続き前記入力ファイルを構文解析するための命令をさらに備えることを特徴とする請求項１１に記載のプロセッサ可読媒体。
【請求項１３】
コンポーネント・パーサが前記入力ファイルの前記ファイル・フォーマットを認識するまで前記入力ファイルを構文解析するための命令をさらに備えることを特徴とする請求項１１に記載のプロセッサ可読媒体。
【請求項１４】
コード・フリー・ファイルを検出する方法であって、
それぞれが特定のデータ・ファイル・フォーマットを認識するように構成される複数のコンポーネント・パーサを含むように構成された複合パーサで入力ファイルを構文解析すること、
前記認識された特定のファイル・フォーマットが使用可能であれば、認識されたファイル・フォーマットに従って前記入力ファイルのコンテンツを分析し、前記入力ファイルが実行可能コードを含むかどうかを決定すること、および
前記分析し決定する結果に応じてステータスを送信すること
を備えることを特徴とする方法。
【請求項１５】
前記入力ファイルの前記ファイル・フォーマットが認識されて、実行可能コードが検出されなかった場合に、ｆｉｌｅ−ｈａｓ−ｎｏ−ｃｏｄｅステータスを送信すること、および
前記入力ファイルの前記ファイル・フォーマットが認識されて、実行可能コードが検出された場合に、ｆｉｌｅ−ｈａｓ−ｃｏｄｅステータスを送信すること
をさらに備えることを特徴とする請求項１４に記載の方法。
【請求項１６】
前記入力ファイルのファイル・フォーマットが認識されなかった場合、ｄｏｎ’ｔ−ｋｎｏｗステータスを送信することをさらに備えることを特徴とする請求項１４に記載の方法。
【請求項１７】
前記ステータスを電子メール・プログラムに送信することをさらに備えることを特徴とする請求項１４に記載の方法。
【請求項１８】
前記ステータスをインスタント・メッセージ・プログラムに送信することをさらに備えることを特徴とする請求項１４に記載の方法。
【請求項１９】
前記ステータスをインターネット閲覧プログラムに送信することをさらに備えることを特徴とする請求項１４に記載の方法。
【請求項２０】
前記入力ファイルを構文解析することは、複合パーサ内の複数の各コンポーネント・パーサで前記入力ファイルを構文解析することをさらに備えることを特徴とする請求項１４に記載の方法。
【請求項２１】
コード・フリー・ファイルを検出するための装置であって、
入力ファイルを繰り返し構文解析するように構成された複合パーサであって、複合パーサ内の各コンポーネント・パーサが、データ・ファイル・フォーマットのグループから選択された特定のファイル・フォーマット内の実行可能コードを認識するように構成されている複合パーサと、
特定のファイル・フォーマットを認識するように構成された各コンポーネント・パーサが、特定のファイル・フォーマットを認識すること、および前記入力ファイル内の実行可能コードを検出すること、に成功したことを決定するコントローラであって、前記決定の結果に応じてステータスを送信するように構成されるコントローラと
を備えることを特徴とする装置。
【請求項２２】
どのコンポーネント・パーサも入力ファイルの前記ファイル・フォーマットを認識しなかった場合にｄｏｎ’ｔ−ｋｎｏｗステータスが送信されるようにさらに構成されることを特徴とする請求項２１に記載の装置。
【請求項２３】
コード・フリー・ファイルを検出するための前記装置は、ステータスを電子メール・プログラムに送信するようにさらに構成されることを特徴とする請求項２１に記載の装置。
【請求項２４】
コード・フリー・ファイルを検出するための前記装置は、前記ステータスをインスタント・メッセージ・プログラムに送信するようにさらに構成されることを特徴とする請求項２１に記載の装置。
【請求項２５】
コード・フリー・ファイルを検出するための前記装置は、前記ステータスをインターネット閲覧プログラムに送信するようにさらに構成されることを特徴とする請求項２１に記載の装置。
【請求項２６】
ファイアウォール、
ホスト侵入検出器、または、
ホスト脆弱性評価機構にステータスを、送信するようにさらに構成されることを特徴とする請求項２１に記載の装置。
【請求項２７】
バックアップ・プログラムと、
ＣＤ／ＤＶＤ作成プログラムと、
Ｐ２Ｐファイル共有プログラムと
を備えるプログラムのグループから選択されたプログラムに前記ステータスを送信するようにさらに構成されることを特徴とする請求項２１に記載の装置。
【請求項２８】
各コンポーネント・パーサが複数のデータ・ファイル・フォーマットの１つを認識するように構成されることを特徴とする請求項２１に記載の装置。
【請求項２９】
前記複合パーサは、新しいコンポーネント・パーサを前記複合パーサに追加することによって拡張できるように構成され、前記新しいコンポーネント・パーサはさらなるファイル・フォーマットを認識してさらなるファイル・フォーマット内の実行可能コードを認識することを特徴とする請求項２１に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、実行可能なコード・フリー・コンピュータ・ファイル（executable code-free computer files：実行可能なコードが無いコンピュータ・ファイル）の検出に関する。
【背景技術】
【０００２】
複雑なコンピュータ・ファイル・フォーマット（file formats）は、拡張性および高機能を実現できるので、複雑なコンピュータ・ファイル・フォーマットはますます普及しつつある。残念なことに、こうしたファイル・フォーマットは、悪意のあるウィルス・ソフトウェアの作成者が悪意のある実行可能コードを潜ませることができる乗り物（vehicle）をももたらす。こうした状況に取り組むために、ウィルス対策（ＡＶ）ソフトウェア・メーカが、新たな各ウィルスのコピーを分離して、新しいウィルスの「シグニチャ（signature）」を取得し、それ以降そのシグニチャを認識できるようになる、という「軍備拡張競争（arms race）」が存在している。
【０００３】
したがって、アンチウィルス（ＡＶ）ソフトウェアは、既知の各ウィルスのシグニチャを探して、入力ファイルをスキャンするように構成されている。既知のシグニチャが検出されない場合、入力ファイルはウィルスに感染していないと見なされる。
【０００４】
【非特許文献１】”Control plans for the new computer viruses”, Baker et al., Management Accounting, September 1994, Vol. 76, No. 3, pages 47-51.
【非特許文献２】”Take steps to resolve an infectious issue”, Fielder, E., Business Forms, Labels, & Systems, July 1, 1999, Vol.37, No.13, pages l2, 17.
【非特許文献３】”An analysis of some authentication methods used in anti-viral software”. Radai, Y., Virus Bulletin, May 1991, pages 11-13.
【非特許文献４】”VET anti-viral soft war”, Jackson, K., Virus Bulletin, May 1991. pages 18-19．
【発明の開示】
【発明が解決しようとする課題】
【０００５】
残念ながら、ＡＶソフトウェアが新しいウィルスを含めるようにまだ更新されていないために、新しいウィルスがＡＶソフトウェアを通り抜けてしまう事例も頻繁にある。ＡＶソフトウェア・メーカは迅速に対応する傾向にあるが、多くの場合、アップグレードで対応することができる前に、また消費者がアップグレードをインストールする前に被害が発生する。したがって、新しいソフトウェア・ウィルスがコンピュータ・システムに感染することを防止することがよりよくできる技術が依然として必要とされている。
【課題を解決するための手段】
【０００６】
コード・フリー・ファイル（コンピュータ実行コードを含まないファイル）の検出について説明される。１つの実装例によれば、入力ファイルが構文解析されてファイル・フォーマットが認識される。認識されたファイル・フォーマットが使用可能であれば、実行可能コードが入力ファイル内に存在するかどうかを決定するために、認識されたファイル・フォーマットに従って入力ファイルのコンテンツ（contents）が検査される。次に、この検査結果に応じてステータスが送信される。
【０００７】
同様のコンポーネントおよび機能を参照するために、図面全体を通じて同一の参照番号が使用される。
【発明を実施するための最良の形態】
【０００８】
概観
以下の説明は、コード・フリー・ファイルを検出するための技術に関する。コード・フリー・ファイルの検出は、そのようなファイルが電子メール、インスタント・メッセージ、インターネット閲覧および他のアプリケーションのユーザに対してセキュリティ上の危険を大幅に低減するという点で有利である。ファイルがコード・フリーであることが判明している場合、ユーザは、悪意のある「ウィルス」ソフトウェアが存在しないという可能性が高い状況に恵まれる。
【０００９】
一般的な処理
図１は、コード・フリー・ファイルを検出する一般的なプロセスを示している。ブロック１０２において、入力ファイルが構成されているファイル・フォーマットを認識できるように、入力ファイルが構文解析される。ファイル・フォーマットは、データを使用および保管できるように編成する規約である。そのようなファイル・フォーマットのいくつかは良く知られており、ファイル名拡張子に関連付けられている。ファイル名拡張子を限定的かつ非包括的にあげると、ｊｐｅｇ、ｐｄｆ、ｄｏｃ（Ｗｏｒｄ（登録商標））、ｖｓｄ（Ｖｉｓｉｏ（登録商標））などが含まれる。ブロック１０４において、認識されたファイル・フォーマットが使用可能であれば、認識されたファイル・フォーマットしたがって、入力ファイル内に実行可能コードを見つけるために入力ファイルのコンテンツ（contents）が検査される。ブロック１０６において、実行可能コードの検査の結果に従ってステータスが送信される。本明細書において、「コード（code）」または「実行可能コード（executable code）」という用語は、広義に解釈され、しかも引用される実施例に限定されないことに留意されたい。コードには、ウィルス、ウァーム、あるいは悪意ある無許可の、望ましくない、または意図されていないマルウェア（malware）を構築するように、設計され、改ざんされ、または他のあらゆる方法で実装されているプロセッサ実行可能命令、スクリプトおよび他の上位言語、拡張性メカニズム（extensibility mechanisms）および他のロジック、デバイスまたはメカニズムが含まれる。一部の実装例において、（たとえば、ｆｉｌｅ−ｈａｓ−ｃｏｄｅ（ファイルにコードあり）ステータス、ｆｉｌｅ−ｈａｓ−ｎｏ−ｃｏｄｅ（ファイルにコードなし）ステータス、またはｄｏｎ’ｔ−ｋｎｏｗ−ｉｆ−ｆｉｌｅ−ｈａｓ−ｃｏｄｅ（ファイルにコードがあるか不明））ステータスを反映する）ステータスが、ウィルスに感染したソフトウェアに対する安全確保に都合の良い電子メール、インスタント・メッセージ、インターネット閲覧、およびその他アプリケーションに送信される。
【００１０】
例示的な環境
図２〜図４は、コード・フリー・ファイルを検出するシステムが動作する例示的な環境２００〜４００を示している。特に、図２〜図４では、電子メール・クライアント・アプリケーション２０２、インスタント・メッセージ・アプリケーション３０２またはインターネット閲覧プログラム４０２がそれぞれ、１つまたは複数の添付ファイル２０４を含む情報を受け取るように構成される環境２００〜４００を示している。アプリケーション２０２、３０２、４０２が、コード検出モジュール２０６から情報を受け取るように構成できる多種多様なハードウェアまたはソフトウェア・デバイスを代表していることに留意されたい。代表的なデバイスにはさらに、ファイアウォール（ハードウェアおよび／またはソフトウェア）、（サーバ、クライアント、ワークステーション用などの）ホスト侵入検出器（host intrusion detector）、（サーバ、クライアント、ワークステーション用などの）ホスト脆弱性評価機能（host vulnerability assessor）、ソフトウェア・バックアップ管理プログラム、ＣＤおよび／またはＤＶＤ作成プログラム、Ｐ２Ｐ（ピア・ツー・ピア）ファイル共有プログラム、またはその他各種のアプリケーションが含まれる。コード検出モジュール２０６は、添付ファイル２０４を分析して実行可能コードが存在するかどうか決定するように構成される。この分析結果に応じて、コード検出モジュール２０６の出力は、ｆｉｌｅ−ｈａｓ−ｃｏｄｅ（ファイルにコードあり）ステータス２０８、ｆｉｌｅ−ｈａｓ−ｎｏ−ｃｏｄｅ（ファイルにコードなし）ステータス２１０、またはｄｏｎ’ｔ−ｋｎｏｗ（ファイルにコードがあるかどうか不明）ステータス２１２という３つの可能な入力の１つをアプリケーション２０２、３０２、４０２に提供する。第１のケースにおいて、ｆｉｌｅ−ｈａｓ−ｃｏｄｅ（ファイルにコードあり）ステータス２０８は、かなりの高い確率で、入力ファイルのファイル・フォーマットを認識して入力ファイル内に実行可能コードを発見したことを反映している。ファイル内に実行可能コードを持つことに伴う特有の危険性があるため、アプリケーション２０２、３０２、４０２などは、このステータスの知識を使用して、これらの対処する方法で、実行することができる。第２のケースにおいて、ｆｉｌｅ−ｈａｓ−ｎｏ−ｃｏｄｅ（ファイルにコードなし）ステータス２１０は、入力ファイルのファイル・フォーマットを認識したこと、および入力ファイル内に実行可能コードを発見しなかったことについての一定の確実さを反映している。ファイル２０４がコード・フリーであることがアプリケーション２０２、３０２、４０２に保証されている場合、ユーザは、ファイルが信頼できるかどうか判断するようユーザに求めるユーザインターフェースのダイアログボックスまたはその他のアスペクトによって煩わされる必要はない。第３のケースにおいて、ｄｏｎ’ｔ−ｋｎｏｗ（ファイルに実行可能コードがあるかどうか不明）ステータス２１２は、入力ファイルのファイル・フォーマットを認識できなかったこと、その結果入力ファイル内に実行可能コードがあるかどうか不確実であることを反映している。
【００１１】
例示的なシステム
図５は、図２〜図４に示されたコード検出モジュール２０６の例示的な詳細を示している。例示的なコード検出モジュール２０６は、ソフトウェア、ファームウェア、またはＡＳＩＣ（特定用途向け集積回路）などのハードウェアで構成することができる。拡張可能パーサ・モジュール５０２は、複数のコンポーネント・パーサ・モジュール５０６（１）〜５０６（Ｎ）を含むように構成されたテーブルとして形成することができる。拡張可能パーサ・モジュールは、たとえば図６に示す例示的方法６００によって、拡張することができる。新しいファイル・フォーマットが知られるようになることや、既知のファイル・フォーマットへの関心が高まることも多いため、拡張性があることが望ましい。したがって、拡張可能パーサ・モジュール５０２は、追加のファイル・フォーマットを認識するように構成され、さらに新しいファイル・フォーマット内で実行可能コードを調べるように構成された追加のコンポーネント・パーサ５０６（Ｎ＋１）を含めるように拡張することができる。図６は、コード検出モジュール２０６の拡張可能パーサ・モジュール５０２が拡張される例示的なプロセス６００を示している。ブロック６０２において、拡張可能パーサ・モジュール５０２に追加するために、あるファイル・フォーマットが識別される。たとえば、ｊｐｅｇファイルを含めて使用するために、拡張可能パーサ・モジュール５０２が拡張されることが望ましい。ブロック６０４において、新しいコンポーネント・パーサは新しいファイル・フォーマット（たとえばｊｐｅｇ）に従って構成され、そこで新しいコンポーネント・パーサは新しいフォーマットのファイルを認識して、そのようなファイル内の実行可能コードを認識するように構成される。ブロック６０６において、拡張可能パーサ・モジュール５０２の機能は、新しいコンポーネント・パーサ５０６（Ｎ＋１）を拡張可能パーサ５０２内の拡張可能テーブルに追加することによって拡張される。
【００１２】
再び図５を参照すると、拡張可能パーサ・モジュール５０２は、複数のコンポーネント・パーサ・モジュール５０６（１）〜５０６（Ｎ）を含むように構成されるが、ここでは簡略を期すために２つのコンポーネント・パーサだけが図示されている。コンポーネント・パーサ・モジュール５０６（１）〜５０６（Ｎ）はそれぞれ、特定のファイル・フォーマットのファイルを認識するように構成され、特定のファイル・フォーマットが認識された場合、ファイル内に含まれている実行可能コードを認識するようにさらに構成される。たとえば、パーサ・モジュール５０６（１）は、Ｗｏｒｄ（登録商標）文書のファイル・フォーマット（たとえば、格納用にデータが編成されるフォーマット）を認識するように構成することができる。パーサ・モジュール５０６（１）はさらに、ファイル・フォーマットを認識すると、Ｗｏｒｄ（登録商標）のファイル・フォーマットを持つ入力ファイル内の実行可能コードを認識するように構成することもできる。この場合、ファイル・フォーマットを認識することで、実行可能コードの認識が補助される。
【００１３】
コンポーネント・パーサ・モジュール５０６はそれぞれ、入力ファイル２０４を構文解析して、パーサが識別するように構成されたファイル・フォーマットと入力ファイルが一致するかどうかを決定するように構成されているフォーマット調査（format investigation）モジュール５０８を含んでいる。コンポーネント・パーサ・モジュールはさらに、コード・セクション検出器（code section detector）５１０も含んでいる。これは、特に、入力ファイルがコンポーネント・パーサ・モジュールに関連付けられているファイル・フォーマットであることが判明した場合に、その入力ファイル内の実行可能コードを検出するように構成されている。
【００１４】
各コンポーネント・パーサ・モジュール５０６はさらに、入力ファイル２０４にコードがあること（５１２）、入力ファイルにコードがないこと（５１４）、および入力ファイルにコードがあるかどうか不明であること（５１６）、を示す３つの出力を含むように構成することもできる。図５の実装例において、フォーマット調査モジュール５０８が入力ファイル２０４に関連付けられているフォーマットを検出できなかった場合、コンポーネント・パーサは、ｄｏｎ’ｔ−ｋｎｏｗ（不明）ステータス５１６を返す。ファイル・フォーマットが認識された場合、コード検出器の出力５１０を使用して、入力ファイルにコードがあることを示す出力５１２（つまりコード検出器５１０がコードを検出した）が適切であるか、または入力ファイルにコードがないことを示す出力５１４が適切である（つまり、コード検出器５１０がコードを検出しなかった）か、を決定する。
【００１５】
拡張可能パーサ・モジュール５０２はさらに、コントローラまたはディスパッチ・プロセス５０４も含み、これらは、通常、入力ファイルをすべての使用可能なコンポーネント・パーサ５０６（１）〜５０６（Ｎ）に供給すること、すべてのコンポーネント・パーサの出力を処理すること、全体の応答（つまりコードあり／コードなし／不明）を適切なアプリケーションに送信すること、を実行するように構成されている。コントローラ５０４は、複合コード・セクション検出器（compound code section detector）５１８を含むように構成され、これは、各コンポーネント・パーサ５０６（１）〜５０６（Ｎ）からの入力を受け取って、コンポーネント・パーサのいずれかがコードを検出したかどうかを決定するように構成されている。コンポーネント・パーサ５０６（１）〜５０６（Ｎ）の１つによってコードが検出された場合、コード検出モジュール２０６の出力は、ｆｉｌｅ−ｈａｓ−ｃｏｄｅ（ファイルにコードあり）ステータス２０８になる。複合フォーマット調査モジュール５２０は、コンポーネント・パーサ５０６（１）〜５０６（Ｎ）のいずれかが入力ファイル２０４のフォーマットを認識したかどうかを決定するように構成される。そのような調査は通常、コンポーネント・パーサ５０６（１）〜５０６（Ｎ）のいずれも実行可能コードを検出しなかった場合に適切である。コンポーネント・パーサ５０６（１）〜５０６（Ｎ）の１つによってファイル・フォーマットが検出された場合、コード検出モジュール２０６の出力は、ｆｉｌｅ−ｈａｓ−ｎｏ−ｃｏｄｅ（ファイルにコードなし）ステータス２１０になる。ファイル・フォーマットが識別されなかった場合、コード検出モジュール２０６の不明（ファイルにコードがあるかどうか不明）出力は、ｄｏｎ’ｔ−ｋｎｏｗ（不明）ステータス２１２になる。
【００１６】
例示的な方法
コード・フリー・ファイルの検出の態様を実装するための例示的な方法７００について、これ以降、主として図７の流れ図を参照しながら説明してゆく。この方法は一般に、図２〜図４、および特に図５に関して上記で説明してきた例示的なコンポーネントの動作に適用される。前述の方法の構成要素は、たとえばＡＳＩＣ上のハードウェア論理ブロックを含む適切な手段によって、またはプロセッサ可読媒体上で定義されているプロセッサ可読命令の実行により達成することができる。
【００１７】
本明細書で使用する「プロセッサ可読媒体」は、プロセッサによって使用される、またはプロセッサによって実行される命令を収容し、格納し、通信し、伝搬し、または転送することのできるいかなる手段であってもよい。プロセッサ可読媒体は、電子的、磁気的、光学的、電磁気学的、赤外線、または半導体のシステム、装置、素子、または伝搬媒体であってもよいが、これらに限定されることはない。プロセッサ可読媒体のさらに具体的な例としては、特に、１つまたは複数の配線を有する電気接続、ポータブル・コンピュータのディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能なプログラマブル読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、書き換え可能コンパクト・ディスク（ＣＤ−ＲＷ）、およびポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤＲＯＭ）などがある。
【００１８】
図７は、ファイル内の実行可能コードを検出するための例示的な方法７００を示している。ブロック７０２において、入力ファイルが構成されているファイル・フォーマットを認識できるように、入力ファイルが構文解析される。構文解析するこのパーサは、図５の複合または拡張可能パーサ５０２のように、複合の方法で構成され、この複合パーサは、それぞれ固有のファイル・フォーマットを認識するように構成されている複数のコンポーネント・パーサ５０６（１）〜５０６（Ｎ）を含んでいる。
【００１９】
ブロック７０４において、ファイル・フォーマットが認識されているかどうか決定が行われる。ファイル・フォーマットが認識されている場合（ブロック７０４のＹｅｓ分岐に従ってブロック７０６へ）、次にブロック７０６において、実行可能コードを入力ファイル内で見つけるために、認識されたファイル・フォーマットに従って入力ファイルのコンテンツ（contents）が検査される。パーサ５０２が拡張可能および／または複合である場合、ファイル・フォーマットは、コンポーネント・パーサ５０６（１）〜５０６（Ｎ）のいずれかが認識するように構成されているファイル・フォーマットと一致する可能性があることに留意されたい。したがって、コントローラ５０４（図５）は、ファイル・フォーマットが認識されるかどうかを決定する際に、各コンポーネント・パーサ５０６（１）〜５０６（Ｎ）からの情報を査定する。
【００２０】
ブロック７０８において、実行可能コードが検出されたかどうか決定が行われる。実行可能コードが検出された場合（ブロック７０８のＹｅｓ分岐に従ってブロック７１２へ）、次にブロック７１２において、ｆｉｌｅ−ｈａｓ−ｃｏｄｅ（ファイルにコードあり）ステータスが送信される。つまり入力ファイルのファイル・フォーマットが認識されて実行可能コードが検出された際のｆｉｌｅ−ｈａｓ−ｃｏｄｅ（ファイルにコードあり）ステータスが送信される。認識は、コンポーネント・パーサ５０６（１）〜５０６（Ｎ）のいずれかによって行われる。図５に示される例示的なコード検出モジュール２０６の構造を再び参照すると明らかなように、ファイル・フォーマットが認識される場合、コンポーネント・パーサは実行可能コードが存在すればそれを検出することができる。そのようなコードはファイル・フォーマットと整合性がないか、またはファイル・フォーマットの規約に従って位置しているため、容易に見分けられる。したがって、コンポーネント・パーサの１つが実行可能コードを認識する場合、コントローラは、ｆｉｌｅ−ｈａｓ−ｃｏｄｅ（ファイルにコードあり）信号またはメッセージを適宜提供することによって、応答する。
【００２１】
ブロック７０８において、実行可能コードが検出されなかったことを示す決定が行われた場合（ブロック７０８のＮｏ分岐に従ってブロック７１０へ）、次にブロック７１０において、入力ファイルのファイル・フォーマットが認識されて実行可能コードが検出されない場合のｆｉｌｅ−ｈａｓ−ｎｏ−ｃｏｄｅ（ファイルにコードなし）ステータスが送信される。特に図５を参照すると、どのコンポーネント・パーサも入力ファイル内に実行可能コードを認識せず、ファイル・フォーマットが少なくとも１つのコンポーネント・パーサによって認識された場合、ｆｉｌｅ−ｈａｓ−ｎｏ−ｃｏｄｅ（ファイルにコードなし）ステータスが登録されることが分かる。実行可能コードが存在しないことはウィルスのような悪意のある実行可能コードが存在しないことを保証するため、入力ファイルに実行可能コードがまったく存在しないと確認することは通常、有利であることに留意されたい。
【００２２】
ブロック７０４に戻り、ファイル・フォーマットが認識されなかった場合（ブロック７０４のＮｏ分岐に従ってブロック７１４へ）、次にブロック７１４において、ファイル・フォーマットが（入力ファイルが実行可能コードを持つかどうか）不明の際のｄｏｎ’ｔ−ｋｎｏｗ（不明）ステータス２１２が送信される。図５のブロック２１２を参照すると明らかなように、各コンポーネント・パーサがファイルのフォーマットを決定できなかった場合、コントローラ５０４は、電子メール・アプリケーション２０２（図２）、インスタント・メッセージ・アプリケーション３０２（図３）、インターネット閲覧プログラム４０２（図４）などの適切な受信側にｄｏｎ’ｔ−ｋｎｏｗ（不明）ステータスを送出するように構成される。
【００２３】
ブロック７１６において、一部のアプリケーションでは、コンポーネント・パーサの１つが入力ファイル２０４のフォーマットを認識した後でもコンポーネント・パーサ５０６（１）〜５０６（Ｎ）は引き続き入力ファイルの構文解析を行うこともできる。これは、ごくまれな状況で複数のコンポーネント・パーサがファイル・フォーマットの有効な認識を行うという点においてさらにセキュリティを高めることになる（つまり、ごくまれな事例において、１つのファイルが２つの異なるファイル・フォーマットに整合するという可能性がある）。したがって、第２のコンポーネント・パーサが入力ファイルのフォーマットを認識するようなごくまれな状況において、いずれかのコンポーネント・パーサが実行可能コードを認識した場合、コントローラ５０４はｆｉｌｅ−ｈａｓ−ｃｏｄｅ（入力ファイルにコードあり）を報告するように構成することができる。あるいは、複合パーサは、コンポーネント・パーサの１つが入力ファイルのフォーマットを認識すると、構文解析を中止するように構成することができる。このようにすることで、構文解析操作に要する時間が短縮されることになる。
【００２４】
上記のように、ｆｉｌｅ−ｈａｓ−ｎｏ−ｃｏｄｅ（ファイルにコードなし）、ｆｉｌｅ−ｈａｓ−ｃｏｄｅ（ファイルにコードあり）またはｄｏｎ’ｔ−ｋｎｏｗ（不明）のステータスが、ウィルスに感染したソフトウェアからの安全確保に都合の良い電子メール、インスタント・メッセージ、インターネット閲覧およびその他のアプリケーションに送信される。図２〜４は、コード検出モジュール２０６の例示的な使用を示している。ただし、実行可能コード・フリー・ファイルのみを格納することが望ましいファイル格納アプリケーション内などのような、コード検出モジュールの他の使用方法も可能である。
【００２５】
以上、１つまたは複数の方法が、流れ図および流れ図のブロックに関連する本文により開示されてきたが、ブロックは必ずしも提示された順序で実行する必要はなく、代替の順序でも同様の利点をもたらすことができる、ことを理解されたい。さらに、これらの方法は排他的ではなく、単独でも、相互を組み合わせることによっても、実行することができる。
【００２６】
例示的なコンピュータ
図８は、図１〜図７の例示的なコード検出モジュールおよび動作の方法が実装される例示的なコンピュータ・システムを示している。１つの具体的な構成が示されているが、コード検出モジュールは他のコンピューティング構成において実装することもできる。コンピューティング環境８００は、コンピュータ８０２の形態で汎用コンピューティング・システムを含んでいる。コンピュータ８０２は、１つまたは複数のプロセッサまたは処理装置８０４、システム・メモリ８０６、およびプロセッサ８０４を含む様々なシステム・コンポーネントをシステム・メモリ８０６に接続するシステム・バス８０８を含むことができるが、これらに限定されることはない。
【００２７】
システム・バス８０８は、メモリ・バスまたはメモリ・コントローラ、周辺機器バス、ＡＧＰ（accelerated graphics port）、および様々なバスアーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを始めとする、１つまたは複数の各種バス構造を表している。システム・バス８０８の例としては、メザニン・バスとも呼ばれているＰＣＩ（Peripheral Component Interconnect）バスがあげられる。
【００２８】
コンピュータ８０２は通常、各種のコンピュータ可読媒体を含んでいる。そのような媒体は、コンピュータ８０２がアクセスでき、揮発性および不揮発性媒体、取り外し可能および非取り外し可能の媒体を含む任意の使用可能な媒体であってもよい。システム・メモリ８０６は、ランダム・アクセス・メモリ（ＲＡＭ）８１０のような揮発性メモリ、および／または読み取り専用メモリ（ＲＯＭ）８１２のような不揮発性メモリの形態をとるコンピュータ可読媒体を含んでいる。起動時などにコンピュータ８０２内の構成要素間の情報の転送を助ける基本ルーチンを含むＢＩＯＳ（basic input/output system）８１４は、ＲＯＭ８１２に格納される。ＲＡＭ８１０は通常、処理装置８０４によって即時アクセス可能および／または現在操作中のデータおよび／またはプログラム・モジュールを含んでいる。
【００２９】
コンピュータ８０２は、他の取り外し可能／非取り外し可能、揮発性／不揮発性のコンピュータ記憶媒体も含めることができる。たとえば、図８は、非取り外し可能の不揮発性磁気媒体（図示せず）との間の書き込みおよび読み取りを行うハードディスク・ドライブ８１６、取り外し可能の不揮発性磁気ディスク８２０（「フロッピー（登録商標）ディスク」など）との間の書き込みおよび読み取りを行う磁気ディスク・ドライブ８１８、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭその他の光媒体など、取り外し可能の不揮発性光ディスク８２４との間の書き込みおよび／または読み取りを行う光ディスク・ドライブ８２２を示している。ハードディスク・ドライブ８１６、磁気ディスク・ドライブ８１８、および光ディスク・ドライブ８２２は、それぞれ１つまたは複数のデータ媒体インターフェース８２５によってシステム・バス８０８に接続されている。あるいは、ハードディスク・ドライブ８１６、磁気ディスク・ドライブ８１８、および光ディスク・ドライブ８２２は、ＳＣＳＩインターフェース（図示せず）によってシステム・バス８０８に接続することもできる。
【００３０】
ディスク・ドライブおよびその関連するコンピュータ可読媒体は、コンピュータ８０２のコンピュータ可読命令、データ構造、プログラム・モジュール、およびその他のデータの不揮発性記憶装置を提供する。例にはハードディスク８１６、取り外し可能磁気ディスク８２０、および取り外し可能光ディスク８２４が示されているが、磁気カセットまたは他の磁気記憶装置、フラッシュメモリカード、ＣＤ−ＲＯＭ、ＤＶＤ（digital versatile disk）または他の光記憶装置、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、電気的消去可能書き込み可能読み取り専用メモリ（ＥＥＰＲＯＭ）などの、コンピュータによりアクセス可能なデータを格納できる他の種類のコンピュータ可読媒体も、例示的なコンピューティング・システムおよび環境を実装するために使用できることを理解されたい。
【００３１】
ハードディスク８１６、磁気ディスク８２０、光ディスク８２４、ＲＯＭ８１２、および／またはＲＡＭ８１０には、たとえばオペレーティング・システム８２６、１つまたは複数のアプリケーション・プログラム８２８、その他のプログラム・モジュール８３０、およびプログラム・データ８３２を含む、任意の数のプログラム・モジュールを格納することができる。コード検出モジュール２０６は、アプリケーション・プログラム８２８、プログラム・モジュール８３０、または他の好都合な場所に位置するモジュールとして構成できることに留意されたい。さらに、入力ファイル２０４は、データ８３２の間に含まれているか、または他の好都合な場所に含まれていてよい。そのようなオペレーティング・システム８２６、１つまたは複数のアプリケーション・プログラム８２８、他のプログラム・モジュール８３０、およびプログラム・データ８３２（または一部その組み合わせ）はそれぞれ、ユーザ・ネットワーク・アクセス情報のためのキャッシング方式の実施例を含むこともできる。
【００３２】
コンピュータ８０２は、通信媒体として識別された各種のコンピュータ／プロセッサ可読媒体を含むことができる。通信媒体は通常、コンピュータ可読命令、データ構造、プログラム・モジュール、またはその他のデータを、搬送波または他の搬送機構など変調データ信号に組み込み、任意の情報伝達媒体を含んでいる。「変調データ信号」という用語は、信号に情報を符号化するような方法でその特性の１つまたは複数が設定された、または変更された信号を意味する。たとえば、通信媒体は、有線ネットワークまたは直接配線接続のような有線媒体、および音響、ＲＦ、赤外線など無線媒体を含むが、これらに限定されることはない。上記の任意の組合せも、コンピュータ可読媒体の範囲に含まれる。
【００３３】
ユーザは、キーボード８３４およびポインティング・デバイス８３６（「マウス」など）のような入力装置を介してコンピュータ・システム８０２にコマンドおよび情報を入力することができる。他の入力装置８３８（具体的に図示せず）としては、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラ・アンテナ、シリアル・ポート、スキャナなどが含まれる。上記およびその他の入力装置は、システム・バス８０８に接続されている入出力インターフェース８４０を介して処理装置８０４に接続されているが、パラレル・ポート、ゲーム・ポート、またはユニバーサル・シリアル・バス（ＵＳＢ）など他のインターフェースおよびバス構造によって接続することもできる。
【００３４】
モニタ８４２またはその他の種類の表示装置も、ビデオ・アダプタ８４４などのインターフェースを介してシステム・バス８０８に接続することができる。モニタ８４２に加えて、他の出力周辺装置には、入出力インターフェース８４０を介してコンピュータ８０２に接続することのできるスピーカ（図示せず）およびプリンタ８４６などのコンポーネントを含めることができる。
【００３５】
コンピュータ８０２は、リモート・コンピューティング装置８４８など、１つまたは複数のリモート・コンピュータへの論理接続を使用するネットワーク化された環境において動作することができる。たとえば、リモート・コンピューティング装置８４８は、パーソナル・コンピュータ、ポータブル・コンピュータ、サーバ、ルータ、ネットワーク・コンピュータ、ピア・デバイスまたはその他の共通ネットワーク・ノードなどであってもよい。リモート・コンピューティング装置８４８は、コンピュータ・システム８０２に関連して本明細書で説明されている構成要素および機能の多くまたはすべてを含めることのできるポータブル・コンピュータとして示されている。
【００３６】
コンピュータ８０２とリモート・コンピュータ８４８の間の論理接続は、ローカル・エリア・ネットワーク（ＬＡＮ）８５０および一般的なワイド・エリア・ネットワーク（ＷＡＮ）８５２として表されている。そのようなネットワーク環境は、オフィス、企業規模のコンピュータ・ネットワーク、イントラネット、およびインターネットで一般化している。ＬＡＮネットワーク環境に実装される場合、コンピュータ８０２はネットワーク・インターフェースまたはアダプタ８５４を介してローカル・ネットワーク８５０に接続される。ＷＡＮネットワーク環境に実装される場合、コンピュータ８０２は通常、モデム８５６またはワイド・ネットワーク８５２にわたる通信を確立するための他の手段を含んでいる。モデム８５６は、コンピュータ８０２に内蔵または外付けであってもよく、入出力インターフェース８４０または他の適切な機構を介してシステム・バス８０８に接続することができる。示されているネットワーク接続が例示的なものであり、コンピュータ８０２および８４０の間の通信リンクを確立する他の手段も採用できることを理解されたい。
【００３７】
コンピューティング環境８００に示されているようなネットワーク化された環境において、コンピュータ８０２に関連して示されるプログラム・モジュール、またはその部分は、リモート記憶装置に格納することもできる。たとえば、リモート・アプリケーション・プログラム８５８は、リモート・コンピュータ８４８のメモリ素子に常駐する。説明のために、オペレーティング・システムなど、アプリケーション・プログラムおよび他の実行可能プログラム・コンポーネントは、本明細書において別個のブロックとして表されているが、そのようなプログラムおよびコンポーネントがコンピュータ・システム８０２の各種記憶装置コンポーネントに様々なタイミングで常駐し、コンピュータのデータ・プロセッサによって実行されることを理解されたい。
【００３８】
結論
本発明について構造的な機能および／または方法上の動作に特有の表現で説明してきたが、添付の請求の範囲に定義されている本発明は、説明されている特定の機能または動作に必ずしも限定されないことを理解されたい。むしろ、特定の機能および動作は、特許請求されている本発明を実装する例示的な形態として開示されている。
【図面の簡単な説明】
【００３９】
【図１】ファイル・フォーマットを認識して実行可能コードを検出するために採用される方法を含む、コード・フリー・ファイルが検出される例示的な実装例について説明する流れ図である。
【図２】コード検出モジュールが、ファイル内に含まれる実行可能コードについての情報を電子メール・プログラムに提供するように構成されている例示的な環境を示す図である。
【図３】コード検出モジュールが、ファイル内に含まれる実行可能コードについての情報をインスタント・メッセージ・プログラムに提供するように構成されている第２の例示的な環境を示す図である。
【図４】コード検出モジュールが、ファイル内に含まれる実行可能コードについての情報をインターネット閲覧プラグラムに提供するように構成されている第３の例示的な環境を示す図である。
【図５】拡張可能パーサ・モジュールを含む、図２〜図４のコード検出モジュール内に含まれている構造の例示的な詳細を示す図である。
【図６】図５に示された拡張可能パーサ・モジュールが拡張される例示的な方法について説明する流れ図である。
【図７】コード・フリー・ファイルを検出する例示的な方法について説明する流れ図である。
【図８】コード検出モジュールが実装される例示的なコンピュータ・システムを示す図である。
【符号の説明】
【００４０】
２０４  入力ファイル
２０２  電子メール・クライアント
２０６  コード検出モジュール
３０２  インスタント・メッセージ・クライアント
４０２  インターネット・ブラウザ
５０８  フォーマット調査モジュール
５１０  コード・セクション検出器
５１２  file-has-code（ファイルにコードあり）
５１４  file-has-no-code（ファイルにコードなし）
５１６  don't-know（ファイルにコードがあるかどうか不明）
６１０  file-has-no-code（ファイルにコードなし）
５１８  複合コード・セクション検出器
５２０  複合フォーマット調査モジュール
２０８  file-has-code（ファイルにコードあり）
２１０  file-has-no-code（ファイルにコードなし）
２１２  don't-know（ファイルにコードがあるかどうか不明）
８４２  モニタ
８４８  リモート・コンピューティング装置
８５２  インターネット
８５６  モデム
８５８  リモート・アプリケーション・プログラム
８０６  システム・メモリ
８０８  システム・バス
８２６  オペレーティング・システム
８２８  アプリケーション・プログラム
８３０  その他のプログラム・モジュール
８３２  プログラム・データ
８４４  ビデオ・アダプタ
８５４  ネットワーク・アダプタ
８２５  データ媒体インターフェース
８０４  処理装置
８４０  入出力インターフェース
８４６  プリンタ
８３６  マウス
８３４  キーボード
８３８  その他の装置
【図１】
2005216286.tif 000003
【図２】
2005216286.tif 000004
【図３】
2005216286.tif 000005
【図４】
2005216286.tif 000006
【図５】
2005216286.tif 000007
【図６】
2005216286.tif 000008
【図７】
2005216286.tif 000009
【図８】
2005216286.tif 000010