(57)【特許請求の範囲】
【請求項１】
コンピュータ上のマルウェアの検出方法であって、
前記コンピュータ上の信頼できないプログラムのプロセスをハードウェアプロセッサによって検出する工程と、
前記信頼できないプログラムのプロセスによる、デスティネーションプロセスへのプロセス間関数呼出しを含む、関数呼出しを前記ハードウェアプロセッサによって識別する工程と、
前記信頼できないプログラムのプロセスによる前記プロセス間関数呼出しの対象となる前記デスティネーションプロセスのアドレス空間のコードのマルウェア分析を実行すべきかを前記ハードウェアプロセッサによって判定する工程と、
前記マルウェア分析を実行すべきであると判定された場合に、前記信頼できないプログラムのプロセスによる前記プロセス間関数呼出しの対象となる前記デスティネーションプロセスの前記アドレス空間のコードを前記ハードウェアプロセッサによって実行可能なアンチウイルスソフトウェアを用いて分析する工程と、
を含む方法。
【請求項２】
検出されたプロセスによる関数呼出しを識別する工程は、
前記関数呼出しの前記デスティネーションプロセスの識別子を判定する工程、
前記デスティネーションプロセスの前記アドレス空間に書き込まれたメモリブロックのサイズを判定する工程、
前記メモリブロック内の実行可能ファイルのヘッダの存在を判定する工程、
前記デスティネーションプロセスが信頼できるプロセスであるかを判定する工程、及び
プロセス間関数呼出しがダイナミックリンクライブラリに特化したメモリ領域の前記デスティネーションプロセスの実行可能コード上にコントロールが移管されたかを判定する工程、
の１つ以上を含む、請求項１に記載の方法。
【請求項３】
前記デスティネーションプロセスのアドレス空間の前記コードのマルウェア分析を実行すべきかを判定する工程は、
前記信頼できないプログラムに関する情報を前記ハードウェアプロセッサによって収集する工程と、
ヒューリスティックルールを関数呼出しを識別する工程で収集された情報および前記デスティネーションプロセスのアドレス空間の前記コードのマルウェア分析を実行すべきかを判定するために収集された前記信頼できないプログラムに関する情報に適用する工程と、
を含む、請求項２に記載の方法。
【請求項４】
前記収集された信頼できないプログラムに関する情報は、
（i）前記信頼できないプログラムのユニークユーザに関する情報、
（ii）前記信頼できないプログラムのユーザによる判明している初回実行からの時間、
（iii）前記信頼できないプログラムの名前、
（iv）前記ストレージデバイス内の前記信頼できないプログラムの場所、
の少なくとも１つを含む、請求項３に記載の方法。
【請求項５】
前記分析されたデスティネーションプロセスのアドレス空間に悪意あるコードが検出された場合に、前記デスティネーションプロセスの前記アドレス空間の前記コードにより呼びだされた関数のアドレスおよび前記デスティネーションプロセスのアドレス空間にロードされた関数のアドレスの前記アンチウイルスソフトウェアによる比較に基づき、前記悪意あるコードにより実行され得るシステム関数を判定する工程をさらに含む、請求項１に記載の方法。
【請求項６】
前記信頼できないプログラムが前記検出された悪意あるコードにより実行され得るシステム関数の呼出しを行うことを禁止する、前記信頼できないプログラムに対するコントロールルールを前記アンチウイルスソフトウェアによって生成する工程をさらに含む、請求項５に記載の方法。
【請求項７】
前記分析されたデスティネーションプロセスのアドレス空間に悪意あるコードが検出された場合に、前記アドレス空間の悪意あるコードを有する前記デスティネーションプロセスに対応する信頼できないプログラムとして前記アンチウイルスソフトウェアによって指定する工程をさらに含む、請求項１に記載の方法。
【請求項８】
前記分析されたデスティネーションプロセスのアドレス空間に悪意あるコードが検出された場合に、前記悪意あるコードよって使用されるURIを前記アンチウイルスソフトウェアによって判定する工程と、
前記悪意あるコードにより使用される前記判定されたURIの少なくとも一部を含むアンチウイルスレコードを前記アンチウイルスソフトウェアによって生成する工程と、
をさらに含む、請求項１に記載の方法。
【請求項９】
コンピュータ上のマルウェアの検出システムであって、
ハードウェアプロセッサを備え、
前記ハードウェアプロセッサは、
前記コンピュータ上の信頼できないプログラムのプロセスを検出し、
前記信頼できないプログラムのプロセスによる、デスティネーションプロセスへのプロセス間関数呼出しを含む、関数呼出しを識別し、
前記信頼できないプログラムのプロセスによるプロセス間関数呼出しの対象となる前記デスティネーションプロセスのアドレス空間のコードのマルウェア分析を実行すべきかを判定し、
マルウェア分析を実行すべきであると判定された場合に、前記信頼できないプログラムのプロセスによるプロセス間関数呼出しの対象となる前記デスティネーションプロセスのアドレス空間の前記コードを前記ハードウェアプロセッサによって実行可能なアンチウイルスソフトウェアを用いて分析するように構成されている、システム。
【請求項１０】
検出されたプロセスによる関数呼出しの識別は、
前記関数呼出しの前記デスティネーションプロセスの識別子の判定、
前記デスティネーションプロセスの前記アドレス空間に書き込まれたメモリブロックのサイズの判定、
前記メモリブロック内の実行可能ファイルのヘッダの存在の判定、
前記デスティネーションプロセスが信頼できるプロセスであるかの判定、
プロセス間関数呼出しがダイナミックリンクライブラリに特化したメモリ領域の前記デスティネーションプロセスの実行可能コード上にコントロールが移管されたかの判定、
の１つ以上を行う、請求項９に記載のシステム。
【請求項１１】
前記デスティネーションプロセスのアドレス空間の前記コードのマルウェア分析を実行すべきかを判定するために、
前記信頼できないプログラムに関する情報を収集し、
ヒューリスティックルールを関数呼出しを識別する工程で収集された情報および前記デスティネーションプロセスのアドレス空間の前記コードのマルウェア分析を実行すべきかを判定するために収集された前記信頼できないプログラムに関する情報に適用するようにさらに構成されている、請求項９に記載のシステム。
【請求項１２】
前記収集された信頼できないプログラムに関する情報は、
（i）前記信頼できないプログラムのユニークユーザに関する情報、
（ii）前記信頼できないプログラムのユーザによる判明している初回実行からの時間、
（iii）前記信頼できないプログラムの名前、
（iv）前記ストレージデバイス内の前記信頼できないプログラムの場所、
の少なくとも１つを含む、請求項１１に記載のシステム。
【請求項１３】
前記プロセッサは、前記分析されたデスティネーションプロセスのアドレス空間に悪意あるコードが検出された場合に、前記デスティネーションプロセスの前記アドレス空間の前記コードにより呼びだされた関数のアドレスおよび前記デスティネーションプロセスのアドレス空間にロードされた関数のアドレスの前記アンチウイルスソフトウェアによる比較に基づき、前記悪意あるコードにより実行され得るシステム関数を判定するようにさらに構成されている、請求項９に記載のシステム。
【請求項１４】
前記プロセッサは、前記信頼できないプログラムが前記検出された悪意あるコードにより実行され得るシステム関数の呼出しを行うことを禁止する、前記信頼できないプログラムに対するコントロールルールを前記アンチウイルスソフトウェアによって生成するようにさらに構成されている、請求項１３に記載のシステム。
【請求項１５】
前記プロセッサは、前記分析されたデスティネーションプロセスのアドレス空間に悪意あるコードが検出された場合に、前記アドレス空間の悪意あるコードを有する前記デスティネーションプロセスに対応する信頼できないプログラムとして前記アンチウイルスソフトウェアによって指定するようにさらに構成されている、請求項９に記載のシステム。
【請求項１６】
前記プロセッサは、
前記分析されたデスティネーションプロセスのアドレス空間に悪意あるコードが検出された場合に、前記悪意あるコードよって使用されるURIを前記アンチウイルスソフトウェアによって判定し、
前記悪意あるコードにより使用される前記判定されたURIの少なくとも一部を含むアンチウイルスレコードを前記アンチウイルスソフトウェアによって生成するようにさらに構成されている、請求項９に記載のシステム。
【請求項１７】
コンピュータ上のマルウェアの検出するコンピュータ実行可能命令を格納する非一過性の記録媒体であって、
前記コンピュータ上の信頼できないプログラムのプロセスを検出する命令と、
前記信頼できないプログラムのプロセスによる、デスティネーションプロセスへのプロセス間関数呼出しを含む、関数呼出しを識別する命令と、
前記信頼できないプログラムのプロセスによるプロセス間関数呼出しの対象となる前記デスティネーションプロセスのアドレス空間のコードのマルウェア分析を実行すべきかを判定する命令と、
マルウェア分析を実行すべきであると判定された場合に、前記信頼できないプログラムのプロセスによるプロセス間関数呼出しの対象となる前記デスティネーションプロセスのアドレス空間の前記コードをアンチウイルスソフトウェアを用いて分析する命令と、
を含む記録媒体。
【請求項１８】
検出されたプロセスによる関数呼出しを識別する命令は、
前記関数呼出しの前記デスティネーションプロセスの識別子を判定する命令、
前記デスティネーションプロセスの前記アドレス空間に書き込まれたメモリブロックのサイズを判定する命令、
前記メモリブロック内の実行可能ファイルのヘッダの存在を判定する命令、
前記デスティネーションプロセスが信頼できるプロセスであるかを判定する命令、
プロセス間関数呼出しがダイナミックリンクライブラリに特化したメモリ領域の前記デスティネーションプロセスの実行可能コード上にコントロールが移管されたかを判定する命令、
の１つ以上を含む、請求項１７に記載の記録媒体。
【請求項１９】
前記デスティネーションプロセスのアドレス空間の前記コードのマルウェア分析を実行すべきかを判定するために、
前記信頼できないプログラムに関する情報を収集する命令と、
ヒューリスティックルールを関数呼出しを識別する工程で収集された情報および前記デスティネーションプロセスのアドレス空間の前記コードのマルウェア分析を実行すべきかを判定するために収集された前記信頼できないプログラムに関する情報に適用する命令と、
をさらに含む、請求項１８に記載の記録媒体。
【請求項２０】
前記収集された信頼できないプログラムに関する情報は、
（i）前記信頼できないプログラムのユニークユーザに関する情報、
（ii）前記信頼できないプログラムのユーザによる判明している初回実行からの時間、
（iii）前記信頼できないプログラムの名前、
（iv）前記ストレージデバイス内の前記信頼できないプログラムの場所、
の少なくとも１つを含む、請求項１９に記載の記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般的にコンピュータセキュリティの分野に関し、特にランダムアクセスメモリ内の悪質なコードを検出するためのシステムおよび方法に関する。
【０００２】
関連出願の相互参照
本開示は、2015年6月30日に出願されたロシア特許出願第2015125972の関連出願であり、米国特許法第119条でこの出願に基づく優先権を主張し、本明細書中に参考として援用する。
【背景技術】
【０００３】
ソフトウェアアプリケーションの数が膨大なペースで増加している。様々なアプリケーションの中には、インターネットワーム、キーロガー、コンピュータウイルスなどのコンピュータまたはコンピュータのユーザに害を及ぼす多くの悪意あるプログラム（マルウェア）が存在する。また、悪意あるプログラムを検出するように設計されたアンチウイルスソフトウェアなどのコンピュータのセキュリティを確保するための技術も存在し、悪意あるプログラムの実効性を制限する（例えば、隔離状態とするか、または完全にコンピュータから削除する）。
【０００４】
しかしながら、アンチウイルスアプリケーションからマルウェアの活動を隠すために、悪意あるプログラムの開発者たちによって様々な手法が用いられている。悪意のあるソフトウェアの検出のためにアンチウイルスアプリケーションによって用いられる、署名分析（分析中のプログラムコードの与えられたセグメントおよび既知のコードの間の対応関係を調べる技術、または悪意あるプログラムの署名ライブラリに基いて署名を調べる技術）、ヒューリスティック分析（分析中のプログラム実行をエミュレートし、API関数の呼出しログを作成し、作成されたAPI関数の呼出しログおよび悪意あるプログラムのエミュレーションライブラリの間のデータ対応を検索する工程を含む技術）、あるいはプロアクティブ分析（分析中でありシステム上で開始されているプログラムのAPI関数の呼出しを遮る工程と、API関数の呼出しログを作成する工程と、作成されたログおよび悪意あるプログラムのAPI関数の呼出しライブラリの間のデータ対応を調べる工程とを含む技術）などの手段に応じて、悪意のあるアプリケーションの開発者たちは、アンチエミュレーション（コード実行エミュレーションを検出するために、エミュレータで十中八九実行されない関数のエミュレーションによる返り値を確認する方法など）、ルートキット（例えば、ドライバの助けを借りて、コンピューティングデバイス上で自分の存在を隠す悪意あるプログラム）、多相型の悪意あるプログラム（実行中に実行可能なコードが変化する悪意あるプログラム）、アプリケーションコードの難読化（悪意あるプログラムのコードを動作可能な、しかし分析することが困難な形式に変化させる）などの手段を用いることが可能である。上記のアンチウイルスアプリケーションを妨害することを目的とした（例えば、アンチウイルスアプリケーションによる検出の妨害）手段に加えて、悪意のあるソフトウェアは、信頼されたアプリケーション（悪意がないことが知られているアプリケーションであり、アンチウイルスアプリケーションによってそのアプリケーションのいかなる活動も許可されている）のアドレス空間からの悪意あるコード（命令）の実行によるアプローチも採用し得る。
【０００５】
信頼できるアプリケーションのアドレス空間からの悪意あるコードの実行を監視するために様々なアプローチが採用されており、悪意あるコードの呼出しまたは信頼するプロセスのアドレス空間への書き込みを追跡するために、コントロールの移管またはプロセスのアドレス空間へのアクセスに用いられる種々のAPI関数の呼出しを追跡する工程を伴うアプローチも含まれる。
【０００６】
上記のアプローチは、信頼するプロセスのアドレス空間の悪意あるコード検出という領域での問題を解決することを目的としているが、問題を十分に効果的には解決していない。上記のアプローチは、いずれも、サードパーティプロセスへのアクセスの可能性のある複数の動作（信頼されたプロセスによって行われる動作を含む）を確認する工程を必要とし、また悪意あるコードを明らかにするためにプロセスのアドレス空間を確認する必要がある状況の限られた群のみを調べている。本発明は、ランダムアクセスメモリ内の悪質なコード検出という課題のより効果的な解決を可能にするものである。
【発明の概要】
【０００７】
ランダムアクセスメモリ内の悪質なコードを検出するシステムおよび方法が開示される。例示的一態様による方法は、コンピュータ上の信頼できないプログラムのプロセスをハードウェアプロセッサによって検出する工程と、信頼できないプログラムのプロセスによる、デスティネーションプロセスへのプロセス間関数呼出しを含む、関数呼出しをハードウェアプロセッサによって識別する工程と、信頼できないプログラムのプロセスによるプロセス間関数呼出しの対象となるデスティネーションプロセスのアドレス空間のコードのマルウェア分析を実行すべきかをハードウェアプロセッサによって判定する工程と、マルウェア分析を実行すべきであると判定された場合に、信頼できないプログラムのプロセスによるプロセス間関数呼出しの対象となるデスティネーションプロセスのアドレス空間のコードをハードウェアプロセッサによって実行可能なアンチウイルスソフトウェアを用いて分析する工程とを含む。
【０００８】
例示的な一態様においては、検出されたプロセスによる関数呼出しを識別する工程は、関数呼出しのデスティネーションプロセスの識別子を判定する工程、デスティネーションプロセスのアドレス空間に書き込まれたメモリブロックのサイズを判定する工程、メモリブロック内の実行可能ファイルのヘッダの存在を判定する工程、デスティネーションプロセスが信頼できるプロセスであるかを判定する工程、およびプロセス間関数呼出しがダイナミックリンクライブラリに特化したメモリ領域のデスティネーションプロセスの実行可能コード上にコントロールが移管されたかを判定する工程、の１つ以上を含む。
【０００９】
例示的な一態様においては、デスティネーションプロセスのアドレス空間のコードのマルウェア分析を実行すべきかを判定する工程は、信頼できないプログラムに関する情報をハードウェアプロセッサによって収集する工程と、ヒューリスティックルールを、関数呼出しを識別する工程で収集された情報、およびデスティネーションプロセスのアドレス空間のコードのマルウェア分析を実行すべきかを判定するために収集された信頼できないプログラムに関する情報に適用する工程と、を含む。
【００１０】
例示的な一態様においては、収集された信頼できないプログラムに関する情報は、（i）信頼できないプログラムのユニークユーザに関する情報、（ii）信頼できないプログラムのユーザによる判明している初回実行からの時間、（iii）信頼できないプログラムの名前、（iv）ストレージデバイス内の信頼できないプログラムの場所、の少なくとも１つを含む。
【００１１】
例示的な一態様においては、上記方法は、分析されたデスティネーションプロセスのアドレス空間に悪意あるコードが検出された場合に、実行可能コードにより呼びだされた関数のアドレス、およびデスティネーションプロセスのアドレス空間にロードされた関数のアドレス、のアンチウイルスソフトウェアによる比較に基づき、悪意あるコードにより実行され得るシステム関数を判定する工程をさらに含む。
【００１２】
例示的な一態様においては、上記方法は、信頼できないプログラムが検出された悪意あるコードにより実行され得るシステム関数の呼出しを行うことを禁止する、信頼できないプログラムに対するコントロールルールをアンチウイルスソフトウェアによって生成する工程をさらに含む。
【００１３】
例示的な一態様においては、上記方法は、分析されたデスティネーションプロセスのアドレス空間に悪意あるコードが検出された場合に、該アドレス空間の悪意あるコードを有するデスティネーションプロセスに対応する信頼できないプログラムとして、アンチウイルスソフトウェアによって指定する工程をさらに含む。
【００１４】
例示的な一態様においては、上記方法は、分析されたデスティネーションプロセスのアドレス空間に悪意あるコードが検出された場合に、悪意あるコードよって使用されるURIをアンチウイルスソフトウェアによって判定する工程と、悪意あるコードにより使用される判定されたURIの少なくとも一部を含むアンチウイルスレコードを、アンチウイルスソフトウェアによって生成する工程と、をさらに含む.
【００１５】
例示的一態様によるランダムアクセスメモリ内の悪質なコードを検出するシステムは、ハードウェアプロセッサを備え、該ハードウェアプロセッサは、コンピュータ上の信頼できないプログラムのプロセスを検出し、信頼できないプログラムのプロセスによる、デスティネーションプロセスへのプロセス間関数呼出しを含む、関数呼出しを識別し、信頼できないプログラムのプロセスによるプロセス間関数呼出しの対象となるデスティネーションプロセスのアドレス空間のコードのマルウェア分析を実行すべきかを判定し、マルウェア分析を実行すべきであると判定された場合に、信頼できないプログラムのプロセスによるプロセス間関数呼出しの対象となるデスティネーションプロセスのアドレス空間のコードをハードウェアプロセッサによって実行可能なアンチウイルスソフトウェアを用いて分析するように構成されている。
【００１６】
例示的一態様によるランダムアクセスメモリ内の悪質なコードを検出するためのコンピュータ実行可能命令を格納する非一過性の記録媒体は、コンピュータ上の信頼できないプログラムのプロセスを検出する命令と、信頼できないプログラムのプロセスによる、デスティネーションプロセスへのプロセス間関数呼出しを含む、関数呼出しを識別する命令と、信頼できないプログラムのプロセスによるプロセス間関数呼出しの対象となるデスティネーションプロセスのアドレス空間のコードのマルウェア分析を実行すべきかを判定する命令と、マルウェア分析を実行すべきであると判定された場合に、信頼できないプログラムのプロセスによるプロセス間関数呼出しの対象となるデスティネーションプロセスのアドレス空間のコードをハードウェアプロセッサによって実行可能なアンチウイルスソフトウェアを用いて分析する命令と、を含む。
【００１７】
例示的態様における上記の本発明の簡単な概要は、本発明の基本的な理解を提供するのに役立つ。本概要は、すべての企図される態様の広範な概観ではなく、すべての態様の主要または重大な要素を特定することも意図しておらず、本発明における、任意又は全ての態様の範囲を線引きもしないということが意図される。その唯一の目的は、以下の発明のより詳細な説明の前置きとして簡略化された形式で1または複数の態様を提示することである。前述の達成のために、本発明の1つまたは複数の態様について、説明され、部分的に特許請求の範囲に示してある特徴を含む。
【図面の簡単な説明】
【００１８】
添付図面は、詳細な説明と共に、本明細書に組み込まれ、その一部を構成し、本発明における1つまたは複数の実施態様を示しており、それらの原理及び実装を説明するのに役立つ。
【００１９】
【図１】図1は、ランダムアクセスメモリ内の悪質なコード検出のためのシステムの一例のブロック図を示す。
【図２】図2A及び2Bは、ランダムアクセスメモリ内の悪質なコード検出方法の典型例のフロー図を示す。
【図３】図3は、本開示のシステム及び方法のいくつかの態様を実施することが可能な手段による汎用コンピュータシステムを示す。
【詳細な説明】
【００２０】
本発明の例示的な態様は、ランダムアクセスメモリ内の悪質なコードを検出するために、システム、方法、及びコンピュータプログラム製品に関連して本明細書に開示される。当業者は、以下の説明は単なる例示であり、決して限定であることを意図するものではないことを理解するであろう。他の態様は、本開示の利益を有する当業者にとって、容易に示唆となりえる。参照は、添付の図面に示されるように、現在の例示の態様の実装について詳細に説明するものである。同じ参照指標は、同一または同様の項目を参照するため、図面及び以下の説明の全体を通じて、可能な限り使用される。
【００２１】
悪意あるコード（あるいは、プログラムまたはアプリケーション）は、コンピュータまたはコンピュータユーザに害を及ぼす、インターネットワーム、キーロガー、コンピュータウイルスなどのコンピュータ命令である可能性がある。該害は、コンピュータに格納されているデータを含むコンピューターリソースへの盗むことを目的とした不正アクセス、及びデータ格納、計算などの用途に用いられるリソースの不正利用であり得る。
【００２２】
署名分析は、分析中のプログラムコードの与えられたセグメントおよび既知のコードの間の一致を調べる技術、または悪意あるプログラムの署名ライブラリに基いて署名を調べる技術であり得る。なお、該技術は、コンピューティングデバイスのランダムアクセスメモリ内の悪意あるプログラムおよび悪意あるコードの両方を検出するために用いられ得る。
【００２３】
関数呼出しのコンテキストは、次の呼出し属性を少なくとも含む関数呼出しに関する情報であり、該呼出し属性は、関数名、関数のオペランド値（オペランドがメモリ内のアドレスである場合、コンテキストは、メモリ内の関数の対応するオペランドが参照するデータブロック（例えば、100バイトのデータブロック）を含んでいてもよい）、関数の呼出しアドレス（関数のリターンアドレスから算出可能）、関数呼出しを行うスレッド識別子（スレッドID）、関数呼出しを行うスレッド記述子（スレッドハンドル）、関数呼出しが発生するであろうプロセスの記述子（プロセスハンドル）であってよい。
【００２４】
信頼できるアプリケーションは、コンピューティングデバイスまたはユーザに害を引き起こさないアプリケーションであってよい。信頼できるアプリケーションとは、信頼できるソフトウェア製造元によって開発され、信頼できるソースからダウンロードされたアプリケーション、または識別子（アプリケーションファイルのMD5など）が信頼できるアプリケーションのライブラリ（信頼できるアプリケーションのライブラリに格納されている証明書などの製造元識別子）に格納されているアプリケーションであると考えることができる。
【００２５】
信頼性できないアプリケーションは、例えば、セキュリティアプリケーションによって使用されるような信頼性はないが悪意があるとは認識されないアプリケーションであってよい。
【００２６】
信頼できないプロセスは、信頼性できないアプリケーションから開始されたプロセスであってよい。
【００２７】
ヒューリスティック分析は、分析中のプログラム実行をエミュレートし、API関数の呼出しログを作成し、作成されたAPI関数の呼出しログおよび悪意あるプログラムのエミュレーションライブラリの間のデータが一致するかを調べ、分析されたプログラムに悪意があるかを判定する技術であってよい。
【００２８】
挿入データは、別プロセスのアドレス空間に、あるプロセスの複数のスレッドの１つによって書き込まれたデータ（プロセッサ用の命令からなる実行可能コードを含む）であってよい。
【００２９】
アプリケーションに関するデータは、アプリケーションおよび他のコンポーネントの実行可能ファイル（例えば、マルチメディアリソース、構成ファイルなど）を含む、アプリケーションを記述した情報（および、そのアプリケーションから起動されるプロセス）であってよい。アプリケーションに関するデータは、少なくとも、アプリケーション名（および、アプリケーションから作成され、実行されるプロセス名）、プロセスの起動ディレクトリ、アプリケーションを実行しているユニークユーザ数、アプリケーションの判明している初回実行からの経過時間を含んでいてもよい。
【００３０】
プロセス間通信関数は、別プロセス（関数の呼出しにより開始したものではない）のアドレス空間において（時折「アドレス空間から」とも）コードを実行するために使用されるシステム関数（WindowsAPI関数など）であって、例えば、CreateRemoteThread、SetThreadコンテキスト、NTQueueApcThread、またはResumeRemoteThreadなどであってよく、別プロセス（WriteプロセスMemoryなど）によって実行されるであろうコードの挿入に用いられる関数であってもよい。プロセス間通信関数呼出しのターゲットは、プロセス（ターゲットプロセス）であってよく、プロセス間通信関数呼出しのコンテキストは、ターゲットプロセスのアドレス空間において生じるデータ書き込み（例えば、関数WriteプロセスMemoryによって行われる）の引数の値、またはプロセス間通信関数呼出しのターゲットであるプロセスのアドレス空間に存在する実行可能コードに生じるコントロールの移管の引数の値などを含むだろう。
【００３１】
コードの機能は、コードの実行中に行われる複数のシステム呼出しであってよい。
【００３２】
図1は、ランダムアクセスメモリ内の悪質なコード検出のためのシステムの一例のブロック図を示す。図1に概略的に示され、詳細図が図3に示されているコンピューティングデバイス100は、パーソナルコンピュータ（簡単のために、「コンピュータ」）、モバイルコンピューティングデバイス（スマートフォンやノートPCなど）であってよく、あるいは前述のデバイスからなる分散型コンピュータネットワークであってもよい。コンピューティングデバイス100は、少なくとも１つのアプリケーション110（プログラムまたはソフトウェア）がインストールされ稼働していてよい。（１つ又は複数の）アプリケーション110は、例えば、ウェブページを閲覧し、オーディオファイルを聴き、インターネットを用いた対話をするために、コンピューティングデバイス100のユーザにより使用され得る。上記のアプリケーション（１つ又は複数）110に加えて、コンピューティングデバイス100は、コンピューティングデバイス100およびそのユーザを悪意あるプログラムから守るために、セキュリティアプリケーション120（アンチウイルスアプリケーションなど）がインストールされていてもよい。コンピューティングデバイス100を保護するタスクを実行するために、セキュリティアプリケーション120は、署名分析モジュール、ヒューリスティック分析モジュール、ロギングモジュールなどの多数のモジュール（図示せず）を含んでいてよい。
【００３３】
例示的な一態様においては、ロギングモジュールは、システム呼出しを阻害、またはコンピューティングデバイス100上の種々のプロセスにより行われるシステム関数の呼出し（WinAPI関数など）を阻害するように設計されており、またそれらの関数呼出しのコンテキストを保存するように設計されている。例えば、Windowsファミリのオペレーティングシステムを使用する場合、ロギングモジュールは、フィルタドライバのインストール（デバイスとの相互作用のためにドライバスタックに加えられたドライバ）による関数呼出しを阻害する。このアプローチを実現するために、ロギングモジュールの機能ロジックを実行するドライバがロードされているフィルタマネージャを使用することが可能である。
【００３４】
例示的な一態様においては、コンピューティングデバイス100は、アプリケーション制御モジュール130を備えていてもよい。アプリケーション制御モジュール130は、アプリケーション110の起動と実行を制御するように設計されている。例示的な一態様においては、アプリケーション制御モジュール130は、様々な状況でその挙動を支配するルール（「アプリケーションコントロールルール」または「コントロールルール」）によって動作する（上記のソフトウェアの挙動コントロールなど）。例えば、このようなコントロールルールは、異なる群からのアプリケーションと同様に、異なるアプリケーション110の起動と実行に基づくモジュール130の動作を指定し得る。アプリケーション群は、これらに限定されないが、信頼できるソフトウェア、悪意のあるソフトウェア、信頼できないソフトウェアを含んでいてよい。例示的な一態様においては、コントロールルールは、これらにこれらに限定されないが、悪意のあるソフトウェアの起動を防ぎ、信頼できるソフトウェア（デフォルト拒否ルール）のみの起動を許容し、悪意のあるソフトウェア群にないソフトウェアの起動を許容するルールを含んでいてよい。
【００３５】
例示的な一態様においては、セキュリティアプリケーション120は、アプリケーション110がセキュリティアプリケーション120によって悪意あるプログラム（例えば、署名またはヒューリスティック）を検出する方法の1つに従って悪意のあるものとして認識されていない場合、およびアプリケーション110が信頼できると認識されていない場合、特定のアプリケーション110が信頼性できないアプリケーション群に属するか判定する。次に、セキュリティアプリケーション120の一部として、またはリモートセキュリティサーバ（図1中に図示せず）上に存在する可能性がある信頼できるアプリケーションのライブラリが、アプリケーション110の識別子（チェックサムMD5など）を含む場合、アプリケーション110は信頼できるものとして認識される。
【００３６】
一例では、プロセス1（140）は、信頼できないアプリケーションから生成されるプロセスであってよい。ロギングモジュールの助けによりセキュリティアプリケーション120は、プロセス1（140）の実行過程において呼び出されるプロセス間通信関数を含む関数を阻害する。なお、セキュリティアプリケーション120は、すべてのアプリケーション110（信頼できないものだけでなく）の関数呼出しを阻害するように構成されていてもよい。セキュリティアプリケーション120は、阻害された関数呼出しのための関数呼出しのコンテキスト（プロセス間通信関数のための物を含む）を判定するように構成されていてもよい。
【００３７】
呼出しのコンテキストに加えて、セキュリティアプリケーション120は、阻害された関数を呼び出すプロセスが開始されていたアプリケーションからのアプリケーション110に関するデータを収集するように構成されていてもよい。例示的な一態様においては、アプリケーション110に関するデータを得るために、セキュリティアプリケーション120は、リモートセキュリティサーバ（図示せず）に接続されていてもよく、リモートセキュリティサーバは、セキュリティアプリケーション120（チェックサムMD5など）によって送信されたアプリケーション110の識別子に応じて、セキュリティアプリケーション120にアプリケーションに関する次のデータを送ることが可能である。すなわち、アプリケーションに関するデータとは、アプリケーションを開始しているユニークユーザ数、およびアプリケーションの判明している初回実行からの経過時間の情報である。次に、セキュリティサーバ上でこのような情報を利用できるようにするために、セキュリティアプリケーション120は、アプリケーション110の起動に応じて、対応するメッセージ（アプリケーションの識別子と一緒に）をセキュリティサーバに送信する。例示的な一態様においては、アプリケーションに関するデータ110は、限定されないが、コンピューティングデバイス内のアプリケーション110の場所（例えば、アプリケーションの対応するファイルへのパス）に関する情報を含んでいてよい。
【００３８】
一態様においては、アプリケーション110上のデータは、信頼できないプロセスの検出の瞬間までセキュリティアプリケーション120によって収集され得る。このような場合には、セキュリティアプリケーション120は、例えば、コンピューティングデバイス上にインストールされた各アプリケーション110の上述のデータをバックグラウンドで収集する。別の態様においては、セキュリティアプリケーション120は、信頼性がないと認識された後もアプリケーションに関するデータ110を収集してもよい。
【００３９】
呼出しのコンテキストに含まれる呼出しの上記属性に加えて、セキュリティアプリケーション120は、各阻害された関数呼出し（プロセス間通信関数の呼出しを含む）用の次の追加の呼出し属性を定義することが可能である。すなわち、追加の呼出し属性は、ターゲットプロセス名（関数呼出しの引数としてのターゲットプロセスの識別子を用いて判定される）という属性、ターゲットプロセスのアドレス空間に書き込まれるメモリブロックのサイズという属性、ターゲットプロセスのアドレス空間に書き込まれたメモリブロック（挿入データブロック）内の実行可能ファイルのヘッダ（WindowsファミリOS用のPEヘッダ、UnixファミリOS用のELFヘッダ、またはAndroidOS用DEXヘッダなど）の存在（例えば、WindowsファミリのOSの場合、PEヘッダ（MZ署名）、DOSヘッダなどの構造用のメモリブロック内を探すことによって見つけることができる）という属性、ターゲットプロセスが信頼できるプロセスであるかという属性、プロセス間関数呼出しがダイナミックリンクライブラリに特化したメモリ領域のデスティネーションプロセスの実行可能コード上にコントロールが移管されたかという属性である。
【００４０】
例示的な一態様においては、プロセス2（150）は、プロセス1（140）のアドレス空間から呼び出されるプロセス間通信関数呼出し用のターゲットプロセスである。図1は、プロセス2（150）のアドレス空間の代表的一例を示している。図1から分かるように、該アドレス空間は、実行可能コード、ヒープメモリ領域、使用中のライブラリの実行可能コードなどのプロセス2（150）に属するデータを含む。このデータは、「プロセス2のデータ」として示されている。同時に、プロセス2（150）のアドレス空間は、プロセス間通信関数の助けによりプロセス2（150）のアドレス空間にプロセス1（140）によって書き込まれるデータである「挿入データ」を含むことが可能である。
【００４１】
図2A及び2Bは、ランダムアクセスメモリ内の悪質なコード検出方法の典型例のフロー図を示す。工程201において、セキュリティアプリケーション120は、アプリケーション110の１つから開始されていた信頼できないプロセス（プロセス1（140））を検出する。工程202において、セキュリティアプリケーション120は、プロセス1（140）の開始元であるアプリケーションに関するデータ110（信頼できない）を収集する。次に、工程203において、セキュリティアプリケーション120は、ロギングモジュールの助けにより、プロセス1（140）のアドレス空間からの少なくとも１つのプロセス間通信関数の呼出しを阻害する（阻害された関数呼出しのターゲットはプロセス2（150）である）。工程204において、セキュリティアプリケーション120は、前工程において阻害された少なくとも１つのプロセス間通信関数呼出しの属性を判定する。プロセス間通信関数呼出しは、プロセス2（150）のアドレス空間からの特定コードを実行しようとしているか、または実行可能コードをプロセス2（150）のアドレス空間に挿入（書き込み）しているのかを示す。工程205において、セキュリティアプリケーション120は、プロセス間通信関数呼出しのターゲットプロセスのアドレス空間のコードを分析する必要があるか判定する。例示的な一態様においては、前述のメモリ領域内のコードは、実行可能コードである。さらに別の例示的な態様においては、前述のメモリ領域内のコードは、メモリに格納された任意のバイナリデータである。
【００４２】
ターゲットプロセスに属するメモリ領域内のコード（プロセス間通信関数呼出しのターゲットであるプロセスのアドレス空間のコード）を分析する必要性は、ヒューリスティックルールの助けにより判定され得る。プロセス1（140）の開始元である信頼性できないアプリケーションに関し収集されたデータ110、および少なくとも１つのプロセス間通信関数呼出しの属性へのヒューリスティックルールの適用によって、ターゲットプロセスのアドレス空間内のコードを分析する必要があるか否かを判定する。例示的な一態様においては、前述のヒューリスティックルールは、次のようであってよい。
1.データブロックがターゲットプロセスに書き込まれているPEヘッダを含む場合、コードを分析する必要がある。
2.「ApplicationData」ディレクトリ（WindowsのOSで、このディレクトリの完全なパスは「APPDATA」環境変数に含まれている）から開始されたプロセスが信頼できるターゲットプロセスにデータを挿入している場合、コードを分析する必要がある。
3.「Temp」ディレクトリ（WindowsのOSで、このディレクトリの完全なパスは「TEMP」環境変数に含まれている）から開始されたプロセスが信頼できるターゲットプロセスにデータを挿入している場合、コードを分析する必要がある。
4.デスクトップに対応するディレクトリから開始されたプロセスが信頼できるターゲットプロセスにデータを挿入している場合、コードを分析する必要がある。
5.プロセスが信頼できるシステムプロセス（「svchost」、「csrss」、「winlogon」、「rundll」または「iexplorer」の名前を有するものなど）にデータを挿入している場合、コードを分析する必要がある。
6.関数の引数が信頼できるターゲットプロセスを参照しながら関数「NTQueueApcThread」が呼び出された場合、コードを分析する必要がある。
7.該プロセスとターゲットプロセスの名前が一致し、プロセスの開始元であるアプリケーションを開始したユニークユーザ数が閾値（例えば50）を超えず、プロセスの開始元であるアプリケーションの判明している初回実行からの経過時間が閾値（例えば1日）を超えず、プロセスがターゲットプロセスにデータを挿入しているしている場合、コードを分析する必要がある。
【００４３】
なお、ルール2、3、および4は、組み合わせて「前に決定されたディレクトリから開始されたプロセスが信頼できるターゲットプロセスにデータを挿入している場合、コードを分析する必要がある」という１つのルールにすることができる。データが挿入されたプロセスが信頼できるプロセスであるかは、プロセスの開始元であるアプリケーション110が信頼できるアプリケーションであるということに従う。
【００４４】
工程205において上記のヒューリスティックルールの１つに従いコードを分析する必要があると判定した場合、工程206においてセキュリティアプリケーション120はプロセス間通信関数呼出し（ターゲットプロセスのアドレス空間）のターゲットプロセスに属するメモリ領域内のコードの分析を、悪意あるコードを検出するために実行することが可能である。例示的な一態様においては、例えば、署名および/またはヒューリスティック分析などの、コード分析の公知の方法は、本工程において使用すること可能である。コードに悪意あると判定されなかった場合、分析は工程208において終了する。
【００４５】
しかし、工程206において悪意あるコードが検出された場合、セキュリティアプリケーション120は、工程206において悪意があるとものとして認識されたコードの機能判定を工程207において行う。例示的な一態様においては、コードの機能は、セキュリティアプリケーション120の助けにより、実行可能コードから呼び出された関数のアドレスとプロセスのアドレス空間にロードされた関数のアドレス（プロセスのアドレス空間に挿入されたコードの機能のコンテキストにおいては、同じターゲットプロセスのアドレス空間にロードされたライブラリを意味する）を比較し判定され得る。上記比較結果に基づいて、セキュリティアプリケーション120は、コードの機能を判定する（悪意があると認識されたコードから呼び出された可能性のあるシステム関数の収集）。工程209においては、セキュリティアプリケーション120は、アプリケーション制御モジュール130用の少なくとも１つのアプリケーションコントロールルールを生成する。例示的な一態様においては、セキュリティアプリケーション120は、ターゲットプロセスの開始元であるアプリケーションによる悪意あるコードの機能を構成するシステム関数の呼出しを禁止するようなアプリケーションコントロールルールを生成する。さらに別の例示的な態様においては、セキュリティアプリケーション120は、ターゲットプロセスの開始元であるアプリケーションによる悪意あるコードの機能を構成するシステム関数の呼出しについてのユーザ確認を要求するアプリケーション制御モジュール130によって、アプリケーションコントロールルールを生成する。工程209におけるアプリケーションコントロールルール生成後、セキュリティアプリケーション120は、該アプリケーションコントロールルールをアプリケーション制御モジュール130に送信し、工程210においては生成されたアプリケーションコントロールルールに従い、アプリケーション制御モジュールが用いられる。
【００４６】
例示的な一態様においては、工程206において悪意あるコードが検出された場合、セキュリティアプリケーション120は、そのアドレス空間に悪意あるコードが挿入されていたターゲットプロセスの実行を停止し得る。さらに別の例示的な態様においては、工程206において悪意あるコードが検出された場合、セキュリティアプリケーション120は、ターゲットプロセスのアドレス空間から悪意あるコードを削除してもよい。別の例示的な態様においては、セキュリティアプリケーション120は、プロセス間通信関数の呼出しを実行するプロセスの開始元であるアプリケーション110を削除または隔離してもよい。
【００４７】
例示的な一態様においては、工程206における悪意あるコードの検出後、セキュリティアプリケーション120は、信頼性できないアプリケーションリスト上にアプリケーション制御モジュール130によって配置される（例えば、信頼できるアプリケーションのライブラリ中のアプリケーション110の識別子に対応する記録の変更による）アプリケーション制御モジュール130用のアプリケーションコントロールルールを、ターゲットプロセスの開始元であるアプリケーション110によって生成し得る。上記のように、アプリケーション制御モジュール130は、信頼できないものも含むアプリケーション110の起動と実行をコントロールするように構成されている。例示的な一態様においては、アプリケーション制御モジュール130は、信頼性できないアプリケーションの起動をブロックし得る。さらに別の例示的な態様において、アプリケーション制御モジュール130は、コンピューティングデバイス100のユーザがそのような接続の確立するまで、リモートリソース（サイトなどとの接続を確立するすべての試み）をブロックし得る。
【００４８】
さらに別の例示的な態様においては、工程206における悪意あるコードの検出後、セキュリティアプリケーション120は、悪意あるコードによって使用される少なくとも１つのユニフォームリソース識別子（URI）を判定してもよい。URIの検出（判定）は、悪意あるコードを含むプロセスのアドレス空間を分析することにより行われてよい。例示的な一態様においては、セキュリティアプリケーション120は、リモートリソースのアドレス「http://******.com/****」またはファイルシステム内のリソース「ファイル://****」などのURIの可能性のある代表的文字列を調べることによってURIを判定する。さらに別の例示的な態様においては、セキュリティアプリケーション120は、オペレーティングシステム（WindowsOSなど）のレジスタ内のアドレスをURIとして判定し得る。例示的な一態様においては、セキュリティアプリケーション120は、ターゲットプロセスのアドレス空間内の対応するURIを調べてもよい。さらに別の例示的な態様においては、調査は１つの特定のバイト値以下（例えば、1000バイト以下）であるアドレス空間の一部において悪意あるコードのはじめから行われ得る。さらに別の例示的な態様において、調査は悪意あるコードを構成する命令の引数としてアドレスの近接値（例えば１００バイト）内で行われ得る。ファイル、サイト、レジスタパラメータなどのリソースは、URIを使用して参照することができるオブジェクトを含む。
【００４９】
URIが見つかった場合、セキュリティアプリケーション120は、判定されたURI（または、URIの文字列の代表例から算出されるハッシュ）を記録する対応するアンチウイルスレコードを生成してもよい。次に、アンチウイルスレコードは、コンピューティングデバイス100からアンチウイルスレコードに含まれるURI（またはそのハッシュ）を有するリソースへのアクセスをブロック（制限）し得るセキュリティアプリケーション120によって用いられる。例示的な一態様においては、セキュリティアプリケーション120は、生成されたアンチウイルスレコードをリモートセキュリティサーバに送ってもよく、リモートセキュリティサーバはアンチウイルスレコードをセキュリティアプリケーション120が稼働している多くの他のコンピューティングデバイスへ（後の利用のために）配布することが可能である。
【００５０】
例示的な一態様においては、セキュリティアプリケーション120は、判定されたすべてのURIのためではなく、セキュリティアプリケーション120の一部であり、信頼できるURIのリストを含む信頼できるURIのライブラリに存在しないURIのみのために、アンチウイルスレコードを生成する。信頼できるURIは、アクセスにより害をコンピューティングデバイス100またはそのユーザに発生させないであろうURI（害の一例としては、悪意あるプログラムの読込および/または起動などである）を含む。例示的な一態様においては、信頼できるURIのライブラリに格納されているURIのリストは、例えば、コンピュータセキュリティの専門家の助けによりリモートセキュリティサーバ上で生成され、後の保管及び利用のためにセキュリティアプリケーション120に送信され得る。
【００５１】
図3は、本開示のシステム及び方法を実施することが可能な汎用コンピュータシステム（パーソナルコンピュータまたはサーバであってよい）を表す。示されているように、コンピュータシステムは、中央処理装置21と、システムメモリ22と、中央処理装置21と関連するメモリを含む様々なシステムコンポーネントに接続しているシステムバス23とを備える。システムバス23は、先行技術から知られている任意のバス構造に類似であってよく、他のバスアーキテクチャと相互作用することが可能なバスメモリまたはバスメモリコントローラ、周辺バス、ローカルバスを含んでよい。システムメモリは、固定メモリ（ROM）24及びランダムアクセスメモリ（RAM）25を含む.基本入力/出力システム（BIOS）26は、ROM24を使用したオペレーティングシステムの読み込み時などのパーソナルコンピュータ20の要素間の情報伝達を保証する基本的手順を含む。
【００５２】
パーソナルコンピュータ２０は、同様に、データを読み込み及び書き込むためにハードディスク２７、リムーバル磁気ディスク２９に読み取り及び書き込みするために磁気ディスクドライブ２８及びリムーバル光学ディスクドライブ３１（ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ及び別の光学情報メディア）を読み取り及び書き込みするために光学ドライブ３０を含む。ハードディスク２７、磁気ディスクドライブ２８及び光学ドライブ３０は、ハードディスクインターフェース３２、磁気ディスクインターフェース３３及び光学ドライブインターフェース３４それぞれを介して、システムバス２３に接続されている。ドライブ及び対応するコンピュータ情報メディアは、パーソナルコンピュータ２０における、コンピュータ命令、データ構造、プログラムモジュール及び別のデータを記憶するために、電力的に独立しているモジュールである。
【００５３】
本開示は、ハードディスク２７、リムーバブル磁気ディスク２９及びリムーバブル光学ディスク３１を使用するシステムの実装を提供するが、別のタイプのコンピュータ情報媒体５６の採用が可能であることが理解されるべきであり、それは、コンピュータによって読み取り可能な形式でデータを格納することができるもの（半導体ドライブ、フラッシュメモリカード、デジタルディスク、ランダムアクセスメモリ（ＲＡＭ）など）であり、それは、コントローラ５５を介してシステムバス２３に接続されている。
【００５４】
コンピュータ20は、ファイルシステム36（記録されるシステム35はここに保持される）、さらに、追加プログラム・アプリケーション37、他のプログラムモジュール38及びプログラムデータ39を備える。ユーザは、入力デバイス（キーボード40、マウス42）を用いて、パーソナルコンピュータ20にコマンドと情報を入力することが可能である。他の入力デバイス（図示せず）は、マイクロフォン、ジョイスティック、ゲームコントローラ、スキャナ、等を用いることができる。そのような入力デバイスは、通常コンピュータシステム20に、シリアルポート46を介して、接続され、それは、順に、システムバスに接続されるが、それらは、他の方法で、例えば、パラレルポート、ゲームポート及びユニバーサルシリアルバス（USB）の助けを借りて、接続される。モニター47又は他の種類のディスプレイデバイスも、ビデオアダプター48等のインターフェースを介してシステムバス23に接続される。モニター47に加えて、パーソナルコンピュータは、ラウドスピーカー、プリンタ等他の周辺外部デバイス（図示せず）に備えてもよい。
【００５５】
パーソナルコンピュータ20は、1つ又は複数のリモートコンピュータ49とのネットワーク接続を用いて、ネットワーク環境で操作できる。リモートコンピュータ（またはコンピュータ）49も、図３に示すように、前述の要素（パーソナルコンピュータ20の特質を説明したもの）の大部分又は全てを有するパーソナルコンピュータ又はサーバである。他のデバイスも、ルータ、ネットワーク局、ピアデバイス又は他のネットワークノード等、コンピュータネットワークに存在してもよい。
【００５６】
ネットワーク接続は、ローカル・エリア・コンピュータ・ネットワーク（LAN）50、及びワイドエリア・コンピュータ・ネットワーク（WAN）を形成することができる。そのようなネットワークは、企業コンピュータネットワーク又は社内ネットワークで使用され、それらは、概してインターネットアクセスを有している。LAN又はWANネットワークで、パーソナルコンピュータ20は、ネットワークアダプター又はネットワークインターフェース51を介して、ローカル・エリア・ネットワーク50に接続される。ネットワークが用いられる場合、パーソナルコンピュータ20は、インターネット等のワイド・エリア・ネットワークでのコミュニケーションを提供するために、モデム54又は他のモジュールを採用する。モデム54は、内部的又は外部的デバイスであり、シリアルポート46によって、システムバス23と接続される。ネットワーク接続は、一例であり、ネットワークの正確な構成を示す必要はないことを留意されたい。すなわち、実際には、技術的な通信モジュールによる、あるコンピュータと他のコンピュータとの接続を確立する他の方法がある。
【００５７】
様々な態様において、本明細書で説明するシステム及び方法は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの任意の組み合わせで実現されてもよい。ソフトウェアで実装される場合、本方法は、非一時的なコンピュータ可読媒体の1つ又は複数の命令又はコードとして格納されてもよい。コンピュータ可読媒体は、データ記憶装置を含む。例として、限定するものではないが、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROM、フラッシュメモリ、又は、電気的、磁気的、又は他の種類の光学記憶媒体を備えてもよい。それは、命令又はデータ構造の形式で、所望のプログラムコードを搬送又は格納されてもよく、且つ、汎用コンピュータのプロセッサにアクセスできる。
【００５８】
様々な側面で、本開示に記載されたシステム及び方法はモジュールの観点から理解することが可能である。本明細書で使用される用語"モジュール"は、特定用途向け集積回路（ASIC）又はフィールド・プログラマブル・ゲート・アレイ（FPGA）（例えば、ハードウェアとソフトウェアの組み合わせ）などによって、ハードウェアを用いて実装される、実世界のデバイス、構成要素、又は構成要素の配置を意味している。例えば、マイクロプロセッサシステム及びジュールの機能を実装するための命令セットによって、それは、（実行時）マイクロプロセッサシステムを専用機に変換する。モジュールも、これらの組み合わせとして実装されてもよく、ハードウェア単体で容易である特定の機能で、及び、ハードウェアとソフトウェアの組み合わせによって容易である他の機能で実装されてもよい。ある実施態様で、モジュールの少なくとも一部、及び、場合によっては、全てが、汎用コンピュータ（上記、図３により詳細に説明したもの等）のプロセッサで実行することができる。したがって、各モジュールは、様々な適切である構成で実現することができ、本明細書において例示される任意の特定の実装に限定されるものではない。
【００５９】
明瞭にするために、本態様における繰り返される機能の全てが、本明細書に開示されるわけではない。本開示の任意で実際の実装における開発で、多数の実装固有の決定が、開発者の特定の目標を達成するために、成されなければならないことが理解されるであろう。これらの具体的な目標は、実装及び開発者ごとに変化するであろう。そのような開発努力は複雑で時間がかかるかもしれないことが、それにもかかわらず、本開示の利益を有する当業者にとっては、エンジニアにとっては日常の仕事であることが、理解されるであろう。
【００６０】
さらに、本明細書で使用される表現又は用語は、説明の目的のためであり、制限を目的としていないことを理解すべきである。本明細書の用語又は表現は、関連技術での熟練の知識と組み合わせて、本明細書に提示される教示及び指針に照らして当業者によって解釈されるべきである。さらに、明示的記載がない限り、本明細書又は特許請求の範囲における任意の用語に対して、一般的でない又は特別な意味を帰することは意図されていない。
【００６１】
本明細書に開示される様々な態様は、例示により本明細書に言及される既知のモジュールに、現在及び将来の既知の均等物を包含する。さらに、態様及び用途を図示し、且つ、説明してきたが、本明細書に開示された発明の概念から逸脱することなく、上述したよりも多くの改変が可能であることは、この開示の利益を有する当業者には明らかであろう。
【図１】
0006259862.tif 000002
【図２】
0006259862.tif 000003
【図３】
0006259862.tif 000004