(57)【要約】  一般的に述べると、本発明は、マルウェアを識別することを対象とする。一実施形態では、ブートプロセス中にマルウェアの検索を実施する方法が提供される。より具体的には、本方法は、マルウェアがあるか否かスキャンするように構成されたソフトウェアモジュールをコンピュータ起動時に初期化させる。次いで、スキャンイベントの発生を識別するのに応答して、本方法は、ソフトウェアモジュールに、マルウェアの特徴を示すデータをコンピュータメモリ中で検索させる。マルウェアの特徴を示すデータが識別された場合、本方法は、マルウェア感染を処理する。
2009543186.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ起動時にブートプロセスを利用するコンピュータ（２００）において、前記ブートプロセス中にアクティブになるマルウェアを識別するコンピュータ実施方法であって、
（ａ）マルウェアを探すスキャンを実施するように構成されたソフトウェアモジュールを前記ブートプロセス中に初期化させること（４０２）、
（ｂ）スキャンイベントの発生を識別する（４０４）のに応答して、
（ｉ）前記ソフトウェアモジュールに、マルウェアの特徴を示すデータがあるか否かコンピュータ（２００）のメモリをスキャンさせること（４０６）、および、
（ｉｉ）マルウェアの特徴を示すデータが識別された場合にマルウェア感染を処理すること（４１０）を含むことを特徴とする方法。
【請求項２】
マルウェアを探すスキャンを実施するように構成された前記ソフトウェアモジュールは、前記ブートプロセスにおける、ＢＩＯＳが実行される段階で初期化されることを特徴とする請求項１に記載の方法。
【請求項３】
マルウェアを探すスキャンを実施するように構成された前記ソフトウェアモジュールは、前記ブートプロセスにおける、オペレーティングシステムローダが実行される段階で初期化されることを特徴とする請求項１に記載の方法。
【請求項４】
マルウェアを探すスキャンを実施するように構成された前記ソフトウェアモジュールはブートドライバ中で実装されることを特徴とする請求項１に記載の方法。
【請求項５】
マルウェアを探すスキャンは、前提条件が満たされたとき、コンピュータ起動時に選択的に実施されることを特徴とする請求項１に記載の方法。
【請求項６】
ユーザ入力が、現在のブート中にスキャンが実施されるか否かを判断するのに使用される前記前提条件であることを特徴とする請求項５に記載の方法。
【請求項７】
マルウェアを探す前記スキャンは、前記コンピュータ（２００）の定期的にスケジュールされたブート時に選択的に実施されることを特徴とする請求項１に記載の方法。
【請求項８】
マルウェアを探す前記スキャンは、前記コンピュータ（２００）のランダムに選択されたブート時に実施されることを特徴とする請求項１に記載の方法。
【請求項９】
前記ソフトウェアモジュールに、マルウェアの特徴を示すデータがあるか否かコンピュータメモリをスキャンさせることは、メモリ中のデータをマルウェアに関連するシグネチャと比較することを含むことを特徴とする請求項１に記載の方法。
【請求項１０】
前記ソフトウェアモジュールに、マルウェアの特徴を示すデータがあるか否かコンピュータメモリをスキャンさせること（４０６）は、インテグリティチェックを実施して、オペレーティングシステムに割り振られたメモリ空間中のプログラムコードが信用されるエンティティから生じたものか否かを判断することを含むことを特徴とする請求項１に記載の方法。
【請求項１１】
前記スキャンは、ブート環境でアクティブになる可能性が高い全ての既知のマルウェアのサブセットを識別するように構成されたことを特徴とする請求項１に記載の方法。
【請求項１２】
前記マルウェア感染を処理すること（４１０）は、プロセスを強制終了すること、ファイルを削除すること、および前記マルウェアに関連する構成ファイル中のエントリを除去することを含むことを特徴とする請求項１に記載の方法。
【請求項１３】
前記マルウェア感染を処理すること（４１０）は、スタブモジュールをプレースホルダとして使用してマルウェア自己保存技法のトリガを防止することを含むことを特徴とする請求項１に記載の方法。
【請求項１４】
コンピュータ（２００）によって読取り可能な命令を含むコンピュータ可読媒体であって、起動時にブート環境を実装するコンピュータ（２００）中で実行されたとき、前記コンピュータ（２００）がマルウェアに感染しているか否かを判断する方法を実施し、前記方法は、
（ａ）マルウェアスキャンエンジン（２０８）を前記ブート環境のコンポーネントに統合すること、
（ｂ）マルウェアを探すスキャンが現在のブート中に実施されるか否かを判断すること（４０４）、および、
（ｃ）マルウェアを探すスキャンが現在のブート中に実施されると判断された場合に、前記スキャンエンジン（２０８）に前記ブート環境のコンポーネント中でマルウェアを検索させること（４０６）を含むことを特徴とするコンピュータ可読媒体。
【請求項１５】
前記マルウェアスキャンエンジン（２０８）はＢＩＯＳ、オペレーティングシステムローダ、またはブートドライバに統合されることを特徴とする請求項１４に記載のコンピュータ可読媒体。
【請求項１６】
マルウェアを探すスキャンが現在のブート中に実施されるか否かの前記判断（４０４）は、プロンプトに応答してユーザ入力を受け取ることによって行われることを特徴とする請求項１４に記載のコンピュータ可読媒体。
【請求項１７】
前記スキャンエンジン（２０８）に前記ブート環境のコンポーネント中でマルウェアを検索させること（４０６）は、ルートキットの特徴を示す疑わしいアクティビティを検索することを含むことを特徴とする請求項１４に記載のコンピュータ可読媒体。
【請求項１８】
ルートキットの特徴を示す疑わしいアクティビティの前記検索を実施することは、
（ａ）予期されない位置でのジャンプ命令を識別すること、
（ｂ）隠蔽されたプロセスを識別すること、および
（ｃ）オペレーティングシステム（１０４）に割り振られた範囲の外のメモリアドレスへの参照を識別することを含むことを特徴とする請求項１７に記載のコンピュータ可読媒体。
【請求項１９】
ブート環境でマルウェアを識別するためのコンピュータ実行可能コンポーネントを有するコンピュータ可読媒体であって、
（ａ）マルウェアの特徴を示すデータをコンピュータメモリ中で検索するように構成されたスキャンコンポーネント（２０８）と、
（ｂ）ブートプロセス中に前記スキャンコンポーネントを初期化するためのブート検出コンポーネント（２１０）と、
（ｃ）前記スキャンコンポーネントに既知のマルウェアのサブセットをメモリ中で検索させる最適化コンポーネントとを備えることを特徴とするコンピュータ可読媒体。
【請求項２０】
前記ブート検出コンポーネントはさらに、マルウェアプログラムコードをスタブモジュールで置き換えることによってマルウェア感染を処理するように構成されたことを特徴とする請求項１９に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブート環境におけるマルウェアの識別に関する。
【背景技術】
【０００２】
ますます多くのコンピュータおよび他のコンピューティングデバイスがインターネットなど様々なネットワークを介して相互接続されるのに伴い、コンピュータセキュリティ、特に、ネットワークを介してまたは情報ストリームを介して加えられる侵入または攻撃からのコンピュータセキュリティが、ますますより重要になってきている。当業者および他なら理解するであろうが、これらの攻撃は、コンピュータウイルス、コンピュータワーム、システムコンポーネント置換、トロイの木馬、ルートキット（ＲｏｏｔＫｉｔ）、スパイウェア、サービス拒否攻撃、さらには正当なコンピュータシステム機能の悪用／乱用を含めて（ただしもちろんこれらに限定されない）、多くの異なる形でやって来るが、これらは全て、１つまたは複数のコンピュータシステム脆弱性を非合法目的に利用するものである。様々なコンピュータ攻撃が厳密には相互と異なることを当業者なら理解するであろうが、本発明では、また記述を簡単にするために、以下、インターネットなどのコンピュータネットワーク上に散在する全ての悪意あるコンピュータプログラムを、一般にコンピュータマルウェア、またはより単純にマルウェアと呼ぶ。
【０００３】
コンピュータシステムがコンピュータマルウェアに攻撃された、または「感染した」とき、不都合な結果は、システムデバイスを使用不可能にすること、ファームウェア、アプリケーション、またはデータファイルを消去または破損すること、機密を扱う可能性のあるデータをネットワーク上の別の位置に送信すること、コンピュータシステムをシャットダウンすること、あるいは、コンピュータシステムをクラッシュさせることを含めて、様々である。さらに、全てではないものの多くのコンピュータマルウェアのもう１つの有害な面は、感染したコンピュータシステムを使用して、ネットワーク接続によって通信可能に接続された他のコンピュータシステムに感染することである。
【０００４】
コンピュータマルウェアに対する、また特にコンピュータウイルスおよびワームに対する従来の防御の１つは、アンチウイルスソフトウェアである。ほとんどのアンチウイルスソフトウェアは、データ内のパターンをマルウェアの「シグネチャ」と呼ばれるものと照合することによって、マルウェアを識別する。通常、アンチウイルスソフトウェアは、コンピュータ上でデータがストレージデバイスに対して書き込まれようとしているときや読み取られようとしているときなど、何らかのイベントが発生するようにスケジュールされているとき、マルウェアシグネチャがあるか否かスキャンする。当業者および他には知られているように、コンピュータユーザは、ハードドライブなどのストレージデバイスに対してデータを読み書きすることの継続的な必要性を有する。例えば、いくつかのソフトウェアアプリケーションによって提供される一般的な操作の１つは、ハードドライブに記憶されたファイルを開いて、ファイルの内容をコンピュータ表示装置上に表示することである。しかし、ファイルを開くとファイルに関連するマルウェアが実行される場合があるので、アンチウイルスソフトウェアは通常、開く操作が果たされる前に、ファイルのスキャンまたは他の分析を実施する。マルウェアが検出された場合、スキャンを実施したアンチウイルスソフトウェアは、例えば開く操作を失敗させることによって、マルウェアの実行を防止することができる。
【０００５】
コンピュータを保護するように設計されたソフトウェア（例えばアンチウイルスソフトウェア、アンチスパイウェアソフトウェアなど）からマルウェアを「隠蔽する」ように特に設計された１つまたは複数のプログラムを含むマルウェアが、ますます配信されるようになっている。コンピュータにインストールされる他のタイプのアプリケーションと同様、コンピュータをマルウェアから保護するように設計されたソフトウェアは、オペレーティングシステムによって提供されるサービスに依拠する。しかし、マルウェアがコンピュータオペレーティングシステムのコンポーネントまたは他の低レベルコンポーネントに感染する可能性がある場合、マルウェアは、コンピュータを保護するように設計されたソフトウェアに提供される情報を制御する恐れがある。以下、コンピュータ上でマルウェアの特徴を示すデータを隠匿するように特に設計されたマルウェアを、一般に「ルートキット」と呼ぶ。
【０００６】
説明のために、また単に例として、図１に、コンピュータ１００をマルウェアから保護するように設計されたソフトウェアに利用可能にされた情報を、ルートキットがどのように制御することができるかを示す。図１に示すように、コンピュータ１００は、アプリケーションプログラム１０２、オペレーティングシステム１０４、ストレージデバイス１０６、およびルートキット１０８を備える。また、オペレーティングシステム１０４は、コンピュータ１００にインストールされたアプリケーションプログラムにアプリケーションプログラミングインタフェース（ＡＰＩ）の形のサービスを提供するインタフェース１１０も備える。アプリケーションプログラム１０２は、コンピュータ１００をマルウェアから保護するように設計された動作を実施する。例えば、アプリケーションプログラム１０２は、ストレージデバイス１０６に記憶されたファイルにユーザがアクセスしようとしたとき、マルウェアがあるか否かファイルを「アクセス時に」スキャンすることができる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、図１に示すように、アプリケーションプログラム１０２はユーザモードで動作を実施し、また、少なくとも部分的にカーネルモードで動作するオペレーティングシステム１０４によって提供されるサービスに依拠する。さらに、コンピュータ１００は、オペレーティングシステム１０４に「フック」するルートキット１０８に感染しており、ルートキット１０８は、コンピュータ１００上で基本機能を実施するのに使用される呼出しをインターセプトする。言い換えれば、ルートキット１０８は、「中間者（ｍａｎ−ｉｎ−ｔｈｅ−ｍｉｄｄｌｅ）」として振る舞い、オペレーティングシステム１０４とコンピュータ１００にインストールされたアプリケーションプログラムとの間の通信を監視および改変する。アンチウイルスソフトウェアなどのアプリケーションプログラムが、ルートキット１０８によって使用される１つまたは複数のファイルを含むディレクトリの内容をリストしようとした場合、ルートキット１０８は、ファイル名を検閲してリストから削除することになる。同様に、ルートキット１０８は、システムレジストリやプロセスリストなどの中のエントリを隠蔽することもでき、それにより、ルートキット１０８が隠蔽しておきたい全ての情報を制御することができる。
【課題を解決するための手段】
【０００８】
この概要は、詳細な説明でさらに後述する概念の精選を、単純化した形で紹介するために提供する。この概要は、特許請求する主題の鍵となる特徴を識別するものとはせず、また、特許請求する主題の範囲を限定する際の助けとして使用されるものともしない。
【０００９】
一般的に述べると、本発明の態様は、ブート環境でアクティブ化されるプログラムコードを使用して検出を逃れるマルウェアを、識別することを対象とする。一実施形態によれば、ブートプロセス中にマルウェアの検索を実施する方法が提供される。より具体的には、本方法は、マルウェアがあるか否かスキャンするように構成されたソフトウェアモジュールをコンピュータ起動時に初期化させる。次いで、スキャンイベントの発生を識別するのに応答して、本方法は、ソフトウェアモジュールに、マルウェアの特徴を示すデータをコンピュータメモリ中で検索させる。マルウェアの特徴を示すデータが識別された場合、マルウェアがコンピュータ上で実行されないようにするための機能が実施される。コンピュータ起動時にスキャンを実施する結果として、アンチウイルスソフトウェアから隠れるために難読化技法を実施するマルウェアが識別される。
【００１０】
本発明の前述の態様および付随する利点の多くは、添付の図面と共に以下の詳細な説明を参照することによってよりよく理解されるようになるのに伴い、より容易に認識されるようになるであろう。
【発明を実施するための最良の形態】
【００１１】
本発明の態様は、プログラムモジュールなど、コンピュータによって実行されるコンピュータ実行可能命令の一般的なコンテキストで述べることができる。一般的に述べると、プログラムモジュールは、特定のタスクを実施するかまたは特定の抽象データ型を実装するルーチン、プログラム、アプリケーション、ウィジェット、オブジェクト、コンポーネント、データ構造などを含む。さらに、本発明は分散コンピューティング環境で実施することもでき、その場合、タスクは通信ネットワークを介してリンクされたリモート処理デバイスによって実施される。分散コンピューティング環境では、プログラムモジュールは、ローカルおよび／またはリモートのコンピューティング記憶媒体上に位置することができる。
【００１２】
次に図２を参照しながら、本発明の態様を実施するコンポーネントを備えるコンピュータ２００について述べる。コンピュータ２００は、パーソナルコンピューティングデバイス、サーバベースのコンピューティングデバイス、ミニコンピュータおよびメインフレームコンピュータ、ラップトップ、パーソナルディジタルアシスタント（ＰＤＡ）、セットトップボックス、娯楽およびゲーミングシステム、あるいは、何らかのタイプのメモリを有する他の電子デバイスを含めて（ただしこれらに限定されない）、様々なデバイスのいずれか１つとすることができることを、当業者および他なら理解するであろう。図２に示すコンピュータ２００は、図１に関して上述した同じ名称の同じコンポーネントの多くを備える。これに関して、コンピュータ２００は、アプリケーションプログラム２０２、関連インタフェース２０５を伴うオペレーティングシステム２０４、およびストレージデバイス２０６を備える。説明を容易にするために、また本発明の理解にとって重要ではないので、図２には、キーボード、マウス、プリンタ、表示装置、ＣＰＵ、メモリなど、多くのコンピュータの典型的なコンポーネントは示していない。しかしこの実施形態では、コンピュータ２００は、スキャンエンジン２０８およびブート検出モジュール２１０も備える。後でより詳細に述べるが、スキャンエンジン２０８およびブート検出モジュール２１０は集合的に、従来のアンチウイルスソフトウェアによって提供されるサービスが利用可能になる前に実行を開始するルートキットなどのマルウェアを識別する方法を提供する。これに関して、コンピュータがブートされている間に、コンピュータ２００に感染したルートキットまたは他のマルウェアが識別され、したがってルートキットは、マルウェアの特徴を示すデータを隠蔽し続けることができない。
【００１３】
図２に示すオペレーティングシステム２０４は、Ｍｉｃｒｏｓｏｆｔ（商標）オペレーティングシステム、ＵＮＩＸ（登録商標）オペレーティングシステム、またはＬｉｎｕｘ（商標）オペレーティングシステムなど、汎用オペレーティングシステムであってよい。また、オペレーティングシステム２０４は、特殊化されたコンピュータシステム用に設計された非一般的ハードウェアを使用するように構成されてよい。いずれの場合でも、当業者および他には知られているように、オペレーティングシステム２０４は、コンピュータ２００の全般的な動作を制御し、ハードウェアおよび基本的なシステム動作の管理、ならびにアプリケーションプログラムの実行を担う。より具体的には、オペレーティングシステム２０４は、アプリケーションプログラム２０２などのコンピュータプログラムがストレージデバイス２０６のようなリソースを使用できることを保証する。現代のコンピュータでは、オペレーティングシステム２０４用に確保されたメモリ空間でコードが実行されるための機構を提供することにより、アプリケーションプログラムがオペレーティングシステム２０４の機能を拡張することができる。これらのタイプのシステムに伴う問題は、オペレーティングシステム２０４からアンチウイルスソフトウェアなどのアプリケーションプログラムに提供されるデータのインテグリティ（integrity：完全性）を、ルートキットまたは他のマルウェアが損なうことができる場合があることである。その結果、ルートキットは、ルートキットおよび／またはいずれか他の関連マルウェアをアンチウイルスソフトウェアが識別できないようにする難読化技法を実施することができる。
【００１４】
ルートキットは通常、コンピュータ上でオートスタートエクステンシビリティポイント（Ａｕｔｏ  Ｓｔａｒｔ  Ｅｘｔｅｎｓｉｂｉｌｉｔｙ  Ｐｏｉｎｔ、以下「ＡＳＥＰ」）にそれ自体を追加することを、当業者および他なら理解するであろう。一般的に述べると、ＡＳＥＰは、プログラムが明示的なユーザ呼出しなしに実行を開始できるようにする拡張可能性ポイントのことを言う。ＡＳＥＰに追加された結果として、ルートキットは、ブートプロセス中に、またはユーザが「ログイン」を実施すると、またはその後のどこかの時点で、実行を開始することができる。通常、アンチウイルスソフトウェアは、オペレーティングシステムによって提供されるサービスを使用してマルウェアを検索するのであって、オペレーティングシステムによって提供されるサービスが利用可能になってからしかコンピュータを保護することができない場合がある。その結果、オペレーティングシステムのサービスが利用可能になる前にコンピュータのオペレーティングシステムまたは他の低レベルコンポーネントに感染したルートキットは、マルウェアの特徴を示すデータを隠匿できる恐れがある。本発明の一実施形態では、オペレーティングシステムによって提供されるサービスが利用可能になる前にマルウェアが識別されるようにするブート検出モジュール２１０が提供される。ブート検出モジュール２１０の様々な態様については後で図４に関してさらに詳細に述べるので、ここではブート検出モジュール２１０の詳細な記述は提供しない。しかし一般的に述べると、ブート検出モジュール２１０は、ブートプロセス中にスキャンエンジン２０８がメモリにロードされ実行されるようにする。マルウェアが識別された場合、マルウェアをコンピュータから除去することができ、あるいは、コンピュータがブートされてからアンチウイルスソフトウェアが感染を処理できるように、マルウェアを「隔離する」ことができる。
【００１５】
図２にさらに示すように、コンピュータ２００は、コンピュータメモリ中のデータがマルウェアの特徴を示すか否かを判断するためのスキャンエンジン２０８も備える。現在あるまたはこれから開発される任意の技法をスキャンエンジン２０８によって使用して、オペレーティングシステム２０４によって提供されるサービスが利用可能になる前に実行を開始するマルウェアを識別することができる。これに関して、スキャンエンジン２０８は、インテグリティチェックを利用して、オペレーティングシステムを実装するプログラムコードがオペレーティングシステムプロバイダなど信用されるエンティティによってディジタル署名されているか否かを検証することができる。さらに、スキャンエンジン２０８は、予期されない位置でのジャンプ命令、隠蔽されたプロセス、オペレーティングシステム２０４に割り振られた範囲の外のメモリアドレスへの参照など、疑わしいアクティビティを検索することもできる。例えば、いくつかのオペレーティングシステムは、現在実行されているプログラムのリストを含んだ、プロセステーブルと呼ばれることもあるデータ構造を維持する。プロセステーブルまたは同様のデータ構造からのエントリの除去は、ルートキットが存在するという強力なヒューリスティックインジケータである場合がある。また、スキャンエンジン２０８は、従来のシグネチャベースの技法をブート環境で利用して、マルウェアを検出することもできる。これに関して、データ内のパターンをマルウェアの「シグネチャ」と呼ばれるものと照合することによって、マルウェアを実装するファイルデータを識別することができる。この場合、マルウェアを実装するとわかっているデータ、またはこのデータの特徴的なサブセットが、マルウェアを一意に識別するシグネチャにデータを変換する機能によって処理される。マルウェアのシグネチャが利用可能になると、スキャンエンジン２０８は、メモリ中のデータの中で合致を検索することができる。
【００１６】
当業者および他にはわかるように、図２は、本発明の態様を実施することのできる１つのコンピュータ２００の単純化した一例である。コンピュータ２００の実際の実施形態は、図２に示されておらず付随する本文にも記載されていない追加のコンポーネントを有することになる。また、図２は、ブート環境でマルウェアの検索を実施することのできる１つのコンポーネントアーキテクチャを示す。したがって、図２に示すソフトウェアコンポーネントは、限定ではなく例示として解釈すべきである。
【００１７】
次に図３を参照しながら、コンピュータがブートされるときに実施されるイベントを示す例示的な時系列３００について述べる。時系列３００は、コンピュータ起動時に発生することのできるイベントの一般化された非排他的なセットを高度に単純化した一例であることを、当業者および他なら理解するであろう。他の実施形態では、追加のまたはより少ないイベントが発生する場合もあり、あるいは以下に提供する記述とは異なる順序でイベントが発生する場合もある。したがって、図３に示す時系列３００は単に説明的なものであり、例として解釈すべきである。
【００１８】
図３に示すように、イベント３０２で、コンピュータに電力が加えられるように電源が「オン」に切り替えられる。十分な電力が利用可能になったとき、イベント３０４で、ＣＰＵがベーシックインプット／アウトプットシステム（ＢＩＯＳ、Ｂａｓｉｃ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）コードの実行を開始する。ＢＩＯＳコードは、コンピュータのハードウェアを初期化するための機能をコンピュータが実施できるようにするコンピュータ命令を含む。通常、コンピュータに電源が投入されると、コンピュータのＢＩＯＳは、パワーオンセルフテスト（ＰＯＳＴ、Ｐｏｗｅｒ−Ｏｎ  Ｓｅｌｆ  Ｔｅｓｔ）と一般に呼ばれるハードウェアチェックを実施して、サポートハードウェアが存在し正しく動いているか否かを判断する。ＢＩＯＳが常に利用可能であって、揮発性メモリまたは大容量データ記憶装置に影響する障害により損傷しないことを確実にするために、ＢＩＯＳは通常は不揮発性メモリに位置することを、当業者および他なら理解するであろう。さらに、ＢＩＯＳは低レベル入出力制御を提供することを、当業者および他なら理解するであろう。例えば、パーソナルコンピュータ中では、ＢＩＯＳは、キーボードや表示画面やディスクドライブの制御、基本的な入出力（Ｉ／Ｏ）の実施、および他の雑多な機能に必要とされる、コンピュータ命令を含む。
【００１９】
イベント３０６で、ＢＩＯＳ中の命令が、制御をオペレーティングシステムローダに向けて送る。通常、オペレーティングシステムローダは、ハードウェア検出を実施し、オペレーティングシステムをコンピュータの揮発性メモリに、例えばランダムアクセスメモリ（ＲＡＭ）メモリデバイスのバンクにロードし、オペレーティングシステムの初期化を開始する。イベント３０７で、オペレーティングシステム「カーネル」がロードされ、他のコンポーネントにサービスを提供するために利用可能になる。これに関して、Ｉ／Ｏマネージャとして知られるオペレーティングシステムのコンポーネントが初期化されると、イベント３０８で、ブートドライバをロードおよび初期化するプロセスが開始する。これに関して、ブートドライバの優先順リストがＩ／Ｏマネージャによってまとめられ、リスト上の各ドライバがメモリにロードされる。ブートドライバは通常、ビデオカード、プリンタ、ディスクドライブなど、ハードウェアデバイスのリソースへの最適化されたアクセスを可能にするサービスを提供する。全てのブートドライバがロードされると、イベント３１０で、ユーザモードサブシステムが起動される。一般的に述べると、ユーザモードサブシステムは、ユーザモードアプリケーション空間にサポートサービスを提供する。これに関して、ユーザモードサブシステムを起動することは、ローカルセキュリティ権限を確立して、最終的に「ログイン」プロンプトをユーザに提示することを含むことができる。イベント３１２で、ログインが実施され、ユーザモードサービスが利用可能にされる。例えば、サーバメッセージブロック（ＳＭＢ、Ｓｅｒｖｅｒ  Ｍｅｓｓａｇｅ  Ｂｌｏｃｋ）は、ログインが実施されたときに利用可能になる、ファイル、プリンタ、シリアルポート、および通信抽象化をコンピュータ間で共有するためのプロトコルである。ユーザモードサービスが利用可能になると、イベント３１４で、ユーザモードアプリケーション空間にアクセスしてプログラムを実行することができる。イベント３１４に到達すると、汎用コンピュータ上で特定のタスクを実施するように設計されたプログラムを実行することができる。これに関して、プログラムがユーザモードアプリケーション空間で実行されるように選択されたとき、オペレーティングシステムは、選択されたプログラムに関連するプログラムコードがストレージデバイス（例えばハードドライブ）からメモリにロードされるようにすることができ、このメモリにおいてプログラムコードはＣＰＵからアクセス可能である。
【００２０】
後でさらに詳細に述べるように、本発明の態様は、ブートプロセス中にマルウェアの検索が実行されるようにする。より具体的には、時系列３００における任意の数の異なる位置で、ソフトウェアモジュール（例えばスキャンエンジン２０８）をメモリにロードすることができる。次いで、マルウェアの特徴を示すデータの検索を実施することができる。これに関して、ブートプロセスが完了した後に従来のアンチウイルスソフトウェアがコンピュータの保護のために利用可能になるまで、ブートプロセス中に実行されるコンポーネントを継続的にスキャンすることができる。
【００２１】
コンピュータの構成に応じて、本発明の態様は、ＢＩＯＳ、オペレーティングシステムローダ、またはブートドライバ中で実施することができる。これに関して、また図３に示すように、スキャンエンジン２０８は、イベント３０４、３０６、または３１０で、メモリにロードされて実行を開始することができる。一般的に述べると、ブートプロセスにおいてできるだけ早くマルウェアのスキャンを開始して、前のコンポーネントに感染したマルウェアが難読化技法を実施する機会を持てないようにすることが望ましい。しかし、マルウェアがブートプロセス中に難読化技法を実施できるとしても、マルウェアが利用可能なリソースは、検出を逃れるのに十分でない場合がある。これに関して、ブート環境が制限され、本発明を実施するコンピュータ上でマルウェアがそれ自体を隠匿する能力および／または悪意ある行為を実施する能力が制限される。
【００２２】
時系列３００またはブートプロセスにおける、マルウェアからの保護が提供される位置は、コンピュータの構成に依存する場合がある。例えば、コンピュータベンダはそれぞれ、コンピュータ上のハードウェアを初期化するための異なるＢＩＯＳを提供する場合があることを、当業者および他なら理解するであろう。したがって、ＢＩＯＳによって提供されるサービスは、本発明の単一の実装形態をコンピュータプラットフォームにかかわらず提供できるように標準化されていない場合がある。言い換えれば、ＢＩＯＳにおける本発明の態様の実施は、ＢＩＯＳによって提供されるサービスがコンピュータプラットフォームにまたがって標準化されていれば、より容易に実施することができる。より一般的には、ブートプロセスにおける、スキャンエンジン２０８がメモリにロードされて実行を開始する位置は、どのようにコンピュータを構成できるかに影響する任意の数の要因に依存する場合がある。
【００２３】
次に図４を参照しながら、図２に関して簡単に上述した例示的なブート検出モジュール２１０についてより詳細に述べる。一般的に述べると、ブート検出モジュール２１０は、ブートプロセス中にアクティブになるルートキットなどのマルウェアを識別する方法を提供する。ブートプロセス中にアクティブになることにより、マルウェアはより容易に難読化技法を実施して、従来のアンチウイルスソフトウェアに通信されるデータをフィルタリングすることができる。初期事項として、ブート検出モジュール２１０が実行される前に、コンピュータに電力が利用可能になるように電源が「オン」に切り替えられる。
【００２４】
図４に示すように、ブロック４００でブート検出モジュール２１０が開始し、マルウェアを探す１つまたは複数のスキャンが現在のブートにおいて実施されるか否かが判断される。前述のように、電力がコンピュータに加えられたとき、コンピュータをブートさせる一連のイベントが発生する。一実施形態では、ブート検出モジュール２１０は、コンピュータがブートする度にマルウェアがあるか否かスキャンするように構成されてよい。しかし、使用される技法に応じて、マルウェアのスキャンはリソース集約型のプロセスである場合がある。したがって、他の実施形態では、マルウェアのスキャンは、コンピュータリソースの使用を最小限に抑えるための前提条件が満たされたか否かに基づいて選択的に実施される。
【００２５】
マルウェアのスキャンが実施されることになる場合と、実施されないことになる場合とを区別するのに使用することのできる第１の前提条件は、「疑わしい」アクティビティの識別である。マルウェアの特徴を示す可能性があるアクティビティだが、マルウェア感染が存在するとはっきり断言するには不十分な情報を有する可能性があるアクティビティを、アンチウイルスソフトウェアが識別する場合がある。この場合、コンピュータまたはコンピュータネットワークは、マルウェアの拡張検索が実施される高度状態に移行することができる。高度状態に移行することで、マルウェアのスキャンをコンピュータの各ブート中に実施させることができる。これに関して、疑わしいアクティビティが識別されたとき、複数のブートにまたがって存続する変数を設定して、マルウェアのスキャンがコンピュータ起動時に実施されることを示すことができる。この場合、ブート検出モジュール２１０は、ブロック４００で変数の値をチェックして、マルウェアのスキャンが実施されることになるか否かを判断する。
【００２６】
マルウェアのスキャンが実施されることになる場合と、実施されないことになる場合とを区別するのに使用することのできる別の前提条件は、ユーザ入力に基づく。これに関して、マルウェアのスキャンがブートプロセス中に実施されるようにする入力をユーザが生成するのを可能にする制御を、アンチウイルスソフトウェアに統合することができる。また、スキャンを実施すべきか否かに関する入力を提供するよう、ブートプロセス中にユーザに促すこともできる。上に提供した記述と同様、適切なユーザ入力が受け取られたとき、存続する変数を設定して、スキャンが実施されることを示すことができる。
【００２７】
追加の例として、疑わしいアクティビティを識別することなく、またはユーザ入力を受け取ることなく、マルウェアのスキャンを自動的にスケジュールすることもできる。これに関して、本発明の態様は、コンピュータが５回ブートされるごと、または他の任意に確立された値ごとなど、定期的にマルウェアのスキャンを実施するように構成することができる。さらに、マルウェアのスキャンが実施されるか否かの判断は、ランダムに行ってもよい。例えば、アドバンストプログラマブル割込みコントローラ（ＡＰＩＣ、Ａｄｖａｎｃｅｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｉｎｔｅｒｒｕｐｔ  Ｃｏｎｔｒｏｌｌｅｒ）などのハードウェアデバイスを使用してランダムな値を生成することができることを、当業者および他なら理解するであろう。これに関して、現在のブート中にマルウェアのスキャンが実施されるか否かの判断は、この値に基づくことができる。ブロック４００で、適切な前提条件が満たされなかったためにマルウェアのスキャンが実施されないと判断された場合は、ブート検出モジュール２１０はブロック４１４に進んで終了する。反対に、スキャンが実施されると判断された場合は、ブート検出モジュール２１０はブロック４０２に進む。
【００２８】
ブロック４０２で、スキャンエンジン２０８（図２）が初期化され、ブートプロセスにおける所定位置で実行を開始する。前述のように本発明の態様は、コンピュータがブートされているときに、場合によっては様々な位置で、マルウェアの検索を開始することができる。これに関して、本発明を実施するプログラムコードは、ＢＩＯＳ、オペレーティングシステムローダ、またはブートドライバに統合することができる。その結果、ブロック４０２のスキャンエンジン２０８の初期化は、時系列３００（図３）中の様々な位置で行うことができる。さらに、スキャンエンジン２０８の初期化は、スキャンエンジン２０８が統合されたコンポーネント内で最も高い優先順位を割り当てられてよく、また通常はそのようになる。例えば、前述のように、優先順リストを使用して、ブートドライバが初期化される順序が識別される。スキャンエンジン２０８がブートドライバによって初期化される場合、このブートドライバは、他のブートドライバと比較したとき最も高い優先順位を割り当てられる。その結果、その後に初期化されるブートドライバは、メモリにロードされたときに、マルウェアがあるか否かスキャンされる。このようにして、マルウェアがブートプロセス中にそれ自体を隠匿できる可能性が最小限に抑えられる。
【００２９】
図４に示すように、判断ブロック４０４で、ブート検出モジュール２１０は、スキャンイベントが発生するまでアイドル状態に留まる。一実施形態では、マルウェアのスキャンは、スキャンエンジン２０８が初期化されるとすぐに実施される。しかし、マルウェアを探す追加のスキャンがブートプロセス中に実施されるようにするスキャンイベントを定義することもできる。既存のアンチウイルスソフトウェアによって実施される「アクセス時」スキャンと同様、ブートプロセス中にメモリにロードされた各ソフトウェアを、実行が許可される前にスキャンエンジン２０８によってスキャンすることができる。例えば、各ブートドライバがメモリにロードされたとき、イベント３１０（図３）で、マルウェアがあるか否かブートドライバがスキャンされるように、スキャンイベントが生成されてよい。さらに、他の場合にも、特許請求する主題の範囲を逸脱することなく、スキャンエンジン２０８が初期化された後にスキャンイベントが生成されてよいことを、当業者および他なら理解するであろう。
【００３０】
スキャンイベントが識別されると、ブロック４０６で、ブート検出モジュール２１０は、マルウェアのスキャンが実施されるようにする。図２に関して簡単に上述したように、現在あるまたはこれから開発される任意の技法を使用して、マルウェアを検索することができる。これに関して、スキャンエンジン２０８は、インテグリティチェックを実施して、オペレーティングシステムに割り振られたメモリアドレス空間中のプログラムコードが、信用されるエンティティから生じたものか否かを判断することができる。また、インテグリティチェックに加えて、シグネチャベースの技法、および／または「疑わしい修正」の検索を、スキャンの中で実施できることも企図される。
【００３１】
一実施形態では、ブロック４０６で実施されるスキャンは、既知のマルウェアのサブセットを検索する。前述のように、マルウェアのスキャンはリソース集約型のプロセスである場合がある。さらに、スキャンの実施時にスキャンエンジン２０８によって要求されるサービスは、非ブート環境と比較して、ブート環境では素早く満たされない場合がある。これに関して、ブート環境で全ての既知のマルウェアを探すスキャンを実施することは、ユーザ体験に悪影響を及ぼす恐れがある。したがって、ブロック４０６では、ブート環境で実行を開始する可能性が最も高いマルウェアのタイプ（例えばルートキット）を識別するためのスキャンを実施することができる。しかし、これは単に一最適化技法であって、特許請求する主題を限定するものと解釈すべきでないことを、当業者および他なら理解するであろう。次いで、判断ブロック４０８で、ブロック４０６で実施されたスキャンの結果としてマルウェアが識別されたか否かが判断される。マルウェアが識別されなかった場合は、ブート検出モジュール２１０は、後でさらに詳細に述べるブロック４１２に進む。反対に、マルウェア感染が識別された場合は、ブート検出モジュール２１０はブロック４１０に進む。
【００３２】
図４に示すように、ブロック４１０で、ブート検出モジュール２１０は、マルウェア感染が処理されるようにする。ブロック４１０に到達した場合、ブートプロセス中に、マルウェアの特徴を示すデータが識別されている。一実施形態では、ブロック４１０で感染を処理することは、プロセスを強制終了したり、ファイルを削除したり、マルウェアに関連する構成ファイル中のエントリを除去したりなどすることによって、マルウェアをコンピュータから除去するよう試みることを含む。しかし、ブート環境で利用可能なリソースは限られているので、ブロック４１０でマルウェアの全てのコンポーネントをうまく除去するのは困難または不可能な場合がある。例えば、いくつかのマルウェアは自己保存技法を実施するが、この技法では、マルウェアのリソース（例えばファイル、プロセス、構成ファイル中のエントリなど）が監視される。マルウェアを除去する試みが識別されたときは、マルウェアのリソースを保存して感染を維持するように設計された機能が実施される。したがって、マルウェア感染を処理することはまた、ブート環境でアクティブなマルウェアのコンポーネントを「隔離する」ことを含むこともできる。これに関して、マルウェアに対するプレースホルダとして「スタブ」モジュールを使用することができる。例えば、スタブモジュールは、マルウェアプロセスを持続させるか、呼び出されるのに応答して有効データを受容および／または返却するか、あるいはマルウェア自己保存技法のトリガを防止するためのいずれか他の動作を実施するように、構成されてよい。この実施形態では、マルウェアが隔離されたときは、通常、マルウェアの全てのコンポーネントを除去できるように、コンピュータがブートした後に実行されるアンチウイルスソフトウェアにデータが通信されることになる。
【００３３】
図４に示すように、ブロック４１２で、コンピュータがうまくブートされたか否かが判断される。前述のように、本発明の態様は、従来のアンチウイルスソフトウェアが保護を提供できるようになる前に、ブート環境でアクティブになるマルウェアを識別する。しかし、ブートプロセスが完了すると、従来のアンチウイルスソフトウェアが利用可能になる。本発明による機能は、ブートプロセスが再び開始されるまで休眠状態である。ブートプロセスが完了したときは、ブート検出モジュール２１０はブロック４１４に進んで終了する。しかし、ブロック４１２でブートプロセスが完了していないと判断された場合は、ブート検出モジュールはブロック４０４に戻り、ブートプロセスが完了するまでブロック４０４〜４１２が繰り返す。
【００３４】
例示的な実施形態について図示および記述したが、本発明の趣旨および範囲を逸脱することなく様々な変更をこれらに加えることができることは理解されるであろう。
【００３５】
独占的な所有権または特権が請求される本発明の実施形態は、特許請求の範囲に定義する。
【図面の簡単な説明】
【００３６】
【図１】現代のコンピュータの機能を実施するように構成されたソフトウェアコンポーネントと、マルウェアを隠匿するように設計されたルートキットとのブロック図である。
【図２】ブート環境でマルウェアを識別するように構成されたコンポーネントを備えるコンピュータの絵図である。
【図３】コンピュータ起動時に実施されるイベントを示す例示的な時系列の絵図である。
【図４】ブートプロセス中にマルウェアを識別するソフトウェアモジュールの例示的な流れ図である。
【図１】
2009543186.tif 000003
【図２】
2009543186.tif 000004
【図３】
2009543186.tif 000005
【図４】
2009543186.tif 000006
【国際調査報告】
2009543186.tif 000007
2009543186.tif 000008