(57)【要約】【課題】要求オリジネータを識別するためのリモートプロシージャリンケージにわたるシステム動作のトレーシングを提供する。【解決手段】本明細書では、監視されるコンピューティングデバイス上に実施されたセキュリティエージェントが述べられる。セキュリティエージェントは、カーネルモードイベントにそれぞれ関連付けられたイベント通知を受け取るように構成される。イベント通知に基づいてセキュリティエージェントは、カーネルモードイベントが、監視されるコンピューティングデバイスのＲＰＣ利用プロセスによる要求メッセージのユーザモード処理に関連付けられると決定する。次いでセキュリティエージェントは、ＲＰＣデータ構造に含まれた情報に基づいて、およびイベント通知に基づいて要求メッセージを取り出し、要求メッセージのメタデータに基づいて要求メッセージのオリジネータを識別する。【選択図】図１
2018028907.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイスであって、
１つまたは複数のプロセッサと、
動作を行うように前記１つまたは複数のプロセッサによって操作されるように構成されたセキュリティエージェントと
を備え、前記動作は、
１つまたは複数のカーネルモードイベントにそれぞれ関連付けられた１つまたは複数のイベント通知を受け取るステップと、
前記１つまたは複数のイベント通知に基づいて、前記１つまたは複数のカーネルモードイベントがリモートプロシージャコール利用（ＲＰＣ利用）プロセスによる要求メッセージのユーザモード処理に関連付けられると決定するステップと、
１つまたは複数のリモートプロシージャコール（ＲＰＣ）データ構造に含まれた情報に基づいて、および前記１つまたは複数のイベント通知に基づいて前記要求メッセージを取り出すステップであって、
前記ＲＰＣ利用プロセスによる前記要求メッセージの前記ユーザモード処理に関連付けられたワーカースレッドのスレッド環境ブロック（ＴＥＢ）を決定するステップ、および
オペレーティングシステム（ＯＳ）データ構造のＲＰＣ固有フィールドを通じて前記ＴＥＢから前記要求メッセージまでをトレースするステップ、
を含む、取り出すステップと、
前記要求メッセージのメタデータに基づいて、前記要求メッセージのオリジネータを識別するステップと
を含むこと特徴とするコンピューティングデバイス。
【請求項２】
前記セキュリティエージェントは、前記取り出すステップおよび前記識別するステップを行うように構成されたエンジンと、要求メッセージの各タイプ用のエンジンプラグインとを含むことを特徴とする請求項１に記載のコンピューティングデバイス。
【請求項３】
前記セキュリティエージェントは、前記１つまたは複数のイベント通知のイベント通知を蓄積し、前記１つまたは複数のイベント通知がすべて受け取られたときに前記エンジンに警告するための相関機構を含むことを特徴とする請求項２に記載のコンピューティングデバイス。
【請求項４】
コンピューティングデバイス上のセキュリティエージェントによって実施される方法であって、
１つまたは複数のカーネルモードイベントにそれぞれ関連付けられた１つまたは複数のイベント通知を受け取るステップと、
前記１つまたは複数のイベント通知に基づいて、前記１つまたは複数のカーネルモードイベントがリモートプロシージャコール利用（ＲＰＣ利用）プロセスによる要求メッセージのユーザモード処理に関連付けられると決定するステップと、
１つまたは複数のリモートプロシージャコール（ＲＰＣ）データ構造に含まれた情報に基づいて、および前記１つまたは複数のイベント通知に基づいて前記要求メッセージを取り出すステップと、
前記要求メッセージのメタデータに基づいて、前記要求メッセージのオリジネータを識別するステップと
を含むことを特徴とする方法。
【請求項５】
前記１つまたは複数のカーネルモードイベントは、プロセス作成、スレッド作成、レジストリに書き込むこと、レジストリから読み出すこと、ファイルを作成すること、ファイルを開くこと、ファイルを読み出すこと、ファイルに書き込むこと、またはファイルをマッピングすること、ネットワークパケットを送るかまたは受け取ること、オブジェクトに対するハンドルを作成するかまたは開くこと、またはレジストリ操作を行うことの少なくとも１つを含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記決定するステップは、少なくとも部分的にセキュリティエージェントの構成に基づくことを特徴とする請求項４に記載の方法。
【請求項７】
前記要求メッセージは、ドメイン名サービスクエリ、ドキュメントを印刷する要求、ファイアウォール設定を変更する要求、または新しいアカウントを作成する要求であることを特徴とする請求項４に記載の方法。
【請求項８】
前記決定するステップは、フォールスポジティブを防止するために、Ａ）前記１つまたは複数のカーネルモードイベントのうちの１つに関連付けられたカーネルモード要求メッセージに含まれた情報、またはＢ）前記セキュリティエージェントおよび／またはＯＳによって保持された状態情報を、予期される情報と比較するステップをさらに含むことを特徴とする請求項４に記載の方法。
【請求項９】
前記取り出すステップは、
前記ＲＰＣ利用プロセスによる前記要求メッセージの前記ユーザモード処理に関連付けられたワーカースレッドのスレッド環境ブロック（ＴＥＢ）を決定するステップと、
オペレーティングシステム（ＯＳ）データ構造のＲＰＣ固有フィールドを通じて、前記ＴＥＢから前記要求メッセージまでトレースするステップと
を含み、前記ＲＰＣデータ構造は、前記ＴＥＢおよび前記ＲＰＣ固有フィールドを含むことを特徴とする請求項４に記載の方法。
【請求項１０】
前記トレースするステップは、
前記ＲＰＣ固有フィールドから前記要求メッセージを取り出すステップ
を含むことを特徴とする請求項９に記載の方法。
【請求項１１】
前記要求メッセージは、コマンドシェルから前記ＲＰＣ利用プロセスによって受け取られ、前記方法は、前記オリジネータが識別されるまで、前記取り出すステップおよび前記識別するステップを繰り返すステップをさらに含むことを特徴とする請求項４に記載の方法。
【請求項１２】
前記取り出すステップは、
前記ＲＰＣデータ構造に含まれた情報に基づいて、および前記１つまたは複数のイベント通知に基づいて、中間要求メッセージを取り出すステップと、
前記中間要求メッセージのオリジネータは、同じプロセスの他のスレッドによって呼び出された中間スレッドであると決定するステップと、
前記他のスレッドに関連付けられた追加の１つまたは複数のＲＰＣデータ構造に含まれた情報に基づいて、前記要求メッセージを取り出すステップと
を含むことを特徴とする請求項４に記載の方法。
【請求項１３】
前記識別するステップは、前記要求メッセージに関連付けられた名前付きパイプ、ソケットアドレス、またはアドバンストローカルプロシージャコール（ＡＬＰＣ）ポートもしくは接続を決定するステップと、前記名前付きパイプ、前記ソケットアドレス、または前記ＡＬＰＣポートもしくは接続を利用して、前記オリジネータのプロセス識別子、前記オリジネータのスレッド識別子、前記オリジネータのリモートクライアントコンピュータ名もしくはＩＰアドレス、またはプロセス識別子、前記スレッド識別子、および／または前記リモートクライアントコンピュータ名もしくはＩＰアドレスの任意の組み合わせを取り出すステップとを含むことを特徴とする請求項４に記載の方法。
【請求項１４】
前記識別するステップは、前記要求メッセージに関連付けられた名前付きパイプ、またはＡＬＰＣポートもしくは接続を決定するステップと、前記名前付きパイプ、または前記ＡＬＰＣポートもしくは接続を利用して、前記要求メッセージのメタデータのカーネルモードコピーから前記オリジネータの識別子を取り出すステップとを含むことを特徴とする請求項４に記載の方法。
【請求項１５】
前記要求メッセージの前記メタデータに基づいて、オリジネータがローカルであるかリモートであるかを決定するステップをさらに含むことを特徴とする請求項４に記載の方法。
【請求項１６】
前記要求メッセージのペイロードをデマーシャリングして、１つまたは複数のパラメータを取り出すステップをさらに含むことを特徴とする請求項４に記載の方法。
【請求項１７】
前記ＲＰＣ利用プロセスによる前記要求メッセージの処理を中止するステップ、または前記オリジネータまたは前記オリジネータに関連付けられたプロセスの実行を停止するステップをさらに含むことを特徴とする請求項４に記載の方法。
【請求項１８】
前記オリジネータをミスリードするための処置をとるステップをさらに含むことを特徴とする請求項４に記載の方法。
【請求項１９】
非一時的コンピュータ可読媒体であって、それに記憶されたセキュリティエージェントを実施する実行可能命令を有し、該実行可能命令は、コンピューティングデバイスによって実行されたときに、
１つまたは複数のカーネルモードイベントにそれぞれ関連付けられた１つまたは複数のイベント通知を受け取るステップと、
前記１つまたは複数のイベント通知に基づいて、前記１つまたは複数のカーネルモードイベントがリモートプロシージャコール利用（ＲＰＣ利用）プロセスによる要求メッセージのユーザモード処理に関連付けられると決定するステップと、
１つまたは複数のリモートプロシージャコール（ＲＰＣ）データ構造に含まれた情報に基づいて、および前記１つまたは複数のイベント通知に基づいて前記要求メッセージを取り出すステップと、
前記要求メッセージのオリジネータを識別するステップであって、前記要求メッセージに関連付けられた名前付きパイプ、またはアドバンストローカルプロシージャコール（ＡＬＰＣ）ポートもしくは接続を利用して、前記要求メッセージのメタデータのカーネルモードコピーから前記オリジネータの識別子を取り出すステップを含む、識別するステップと
を含む動作を行うことを特徴とする非一時的コンピュータ可読媒体。
【請求項２０】
前記要求メッセージの前記カーネルモードコピーから、前記要求メッセージのペイロードを取り出すステップをさらに含むことを特徴とする請求項１９に記載の非一時的コンピュータ可読媒体。
【請求項２１】
前記取り出すステップは、
前記ＲＰＣ利用プロセスによる前記要求メッセージの前記ユーザモード処理に関連付けられたワーカースレッドのスレッド環境ブロック（ＴＥＢ）を決定するステップと、
オペレーティングシステム（ＯＳ）データ構造のＲＰＣ固有フィールドを通じて、前記ＴＥＢから前記要求メッセージまでトレースするステップと
を含み、前記ＲＰＣデータ構造は、前記ＴＥＢおよび前記ＲＰＣ固有フィールドを含むことを特徴とする請求項１９に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、要求オリジネータを識別するためのリモートプロシージャリンケージにわたるシステム動作のトレーシングに関する。
【背景技術】
【０００２】
コンピュータシステム管理者は、他の理由の中でも特に、無許可のアクセスを防止すること、悪意のあるソフトウェアを識別すること、またはシステムリソースの割り当てを改善することを目的として、システムリソースの使用を特徴付ける助けとするためにシステムリソースの使用に関係する様々なデータを収集することができる。
【０００３】
このデータの収集は従来、オブザーバをオペレーティングシステム（ＯＳ）のカーネルおよび／またはシステムコールインターフェイスにアタッチさせることによって達成されることができる。それに従って、観察されるカーネルシステムコールを用いてユーザモードプロセスがシステムリソースを要求したときは、オブザーバは適宜、データを収集し、データを分析することができる。
【０００４】
さらにオペレーティングシステムは、カーネルシステムコール以外に、システムリソースへのインターフェイスをサポートするための機能を有する。例えば、ＯＳは、リモートプロシージャコール（ＲＰＣ）インターフェイスを通じて、機能をもたらすことができる。いくつかの例においてＲＰＣインターフェイスは、ＲＰＣ型トランスポート、シリアル化、および実行時バインディングを用いて、実際にリモートシステムにコールを送らずにＬＰＣシステムコールを行うように構成された、ローカルプロシージャコール（ＬＰＣ）インターフェイスとして実施され得る。
【０００５】
いくつかのＬＰＣインターフェイスは専らユーザモードにおいて存在し、カーネルシステムコールをインターセプトすることによる意味のある従来の形の観察を妨げる。他のＬＰＣインターフェイスはまたユーザモードに常駐し、クライアントの代わりに１つまたは複数の連鎖したカーネルシステムコールを行うことができ、それによって、システムコールがＬＰＣインターフェイスから生じたように見え得るので、クライアントプロセスのアイデンティティをマスクする。
【０００６】
一般に、要求者の代わりにＬＰＣインターフェイスによって行われる動作のソース／オリジネータは、上述のようにカーネルシステムコールによる直接の観察に適用可能となることができない。従って様々なカーネルオブザーバの使用にもかかわらず、ＬＰＣインターフェイスに対して行われるいずれのコールも、収集されないままおよび分析されないままとなり得る。それに従って、コンピュータシステム管理者は、システムリソースの使用の不完全な状況を捕捉する場合がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許出願第１３／４９２、６７２号明細書
【図面の簡単な説明】
【０００８】
添付の図面を参照して、詳細な説明が述べられる。図において、参照番号の最も左側の数字は、参照番号が最初に現れる図を識別する。異なる図での同じ参照番号の使用は、同様なまたは同一の項目または機能を示す。
【図１】ＲＰＣ利用プロセスによる要求メッセージのユーザモード処理を、カーネルモードから検出し、その要求メッセージのオリジネータを識別するように構成されたセキュリティエージェントの例示の概観を示す図である。
【図２】ユーザモードにおいて要求メッセージを取り扱うようにＲＰＣ利用プロセスを用いて構成された監視されるコンピューティングデバイス、およびそれらの要求メッセージのユーザモード処理をカーネルモードから検出するためのセキュリティエージェントを示すコンポーネントレベルの図である。
【図３】カーネルモードイベントがＲＰＣ利用プロセスによる要求メッセージのユーザモード処理に関連付けられると決定するステップ、ＲＰＣデータ構造およびイベント通知に基づいてその要求メッセージを取り出すステップ、および要求メッセージのオリジネータを識別するステップを含む、セキュリティエージェントによって行われる例示の動作を示す図である。
【発明を実施するための形態】
【０００９】
概要
本開示は一部において、監視されるコンピューティングデバイス上に実施されたセキュリティエージェントについて述べる。セキュリティエージェントは、１つまたは複数のカーネルモードイベントにそれぞれ関連付けられた１つまたは複数のイベント通知を受け取るように構成される。１つまたは複数のイベント通知に基づいてセキュリティエージェントは、１つまたは複数のカーネルモードイベントが、監視されるコンピューティングデバイスのＲＰＣ利用プロセスによる要求メッセージのユーザモード処理に関連付けられると決定する。本明細書で用いられる「ＲＰＣ利用プロセス」とは、通信インターフェイスとしてＲＰＣライブラリを利用する任意のプログラムを指し得る。次いでセキュリティエージェントは、ＲＰＣ利用プロセスに関連付けられた１つまたは複数のデータ構造に含まれた情報に基づいて、および１つまたは複数のイベント通知に基づいて要求メッセージを取り出し、要求メッセージのメタデータに基づいて要求メッセージのオリジネータを識別する。要求メッセージが、悪意のある活動に関連付けられると決定された場合、セキュリティエージェントは、ＲＰＣ利用プロセスによる要求メッセージのユーザモード処理を中止する、オリジネータの実行を停止する、またはオリジネータをミスリードするなどの予防的処置をとることができる。
【００１０】
様々な実装において、要求メッセージを取り出すステップは、イベント通知を受け取るステップ、および現在のスレッドに関連付けられたスレッド環境ブロック（ＴＥＢ）を決定するステップを含むことができる。その現在のスレッドは、カーネルモードイベントに関連付けられることができ、ＲＰＣ利用プロセスのワーカースレッドとすることができる。現在のスレッドはさらに、ＲＰＣ利用プロセスによる要求メッセージのユーザモード処理に関連付けられたユーザモードスレッドとすることができる。ＴＥＢを決定した後にセキュリティエージェントは、ＯＳデータ構造のＲＰＣ固有フィールドへのＴＥＢにおけるポインタを決定することができ、そのＲＰＣ固有フィールドから要求メッセージを取り出すことができる。
【００１１】
例示の概観
図１は、カーネルモードから、ＲＰＣ利用プロセスによる要求メッセージのユーザモード処理を検出し、その要求メッセージのオリジネータを識別するように構成された、セキュリティエージェントの例示の概観を示す。図１に示されるように、オリジネータ／クライアントアプリケーション１０２（本明細書の以下ではオリジネータ１０２と呼ばれる）、およびＲＰＣ利用プロセス１０４は、コンピューティングデバイスのユーザモード１０６に常駐することができ、セキュリティエージェント１０８は、例えばそのコンピューティングデバイスのカーネルモード１１０に常駐することができる。１１２においてオリジネータ１０２は、要求メッセージ１１４をＲＰＣ利用プロセス１０４に送ることができる。次いでＲＰＣ利用プロセス１０４は、ユーザモードにおいて要求メッセージ１１４を処理し、その処理の一部として、プロセスまたはスレッドを作成するための、またはレジストリキーを読み出すまたは書き込むための要求など、１つまたは複数のカーネルモード要求を行う。１１６でセキュリティエージェント１０８は、カーネルモード要求に関連付けられたカーネルモードイベントに対するイベント通知を受け取る。これらのイベント通知の１つまたは複数に基づいて、１１８でセキュリティエージェントは、ＲＰＣ利用プロセス１０４が要求メッセージ１１４を処理していると決定する。次いで１２０でセキュリティエージェント１０８は、１つまたは複数のカーネルモード要求を行ったＲＰＣ利用プロセスのワークスレッドとすることができる現在のスレッドの、スレッド環境ブロック（ＴＥＢ）１２２などのデータ構造を決定する。次いで１２４でセキュリティエージェント１０８は、ＴＥＢ１２２から、ＯＳデータ構造１２８のＲＰＣ固有フィールド１２６などのＯＳＳデータ構造のフィールドまでをトレースする。次いで１３２でセキュリティエージェント１０８は、ＲＰＣ固有フィールド１２６から要求メッセージ１１４を取り出す。
【００１２】
様々な実装において、オリジネータ１０２、ＲＰＣ利用プロセス１０４、およびセキュリティエージェント１０８を実施するコンピューティングデバイスは、サーバまたはサーバファーム、複数の分散型サーバファーム、メインフレーム、ワークステーション、パーソナルコンピュータ（ＰＣ）、ラップトップコンピュータ、タブレットコンピュータ、携帯情報端末（ＰＤＡ）、携帯電話、メディアセンタ、組み込みシステム、または任意の他の種類のデバイスとすることができ、またはそれらを含むことができる。いくつかの実装においてコンピューティングデバイスは、コンピューティングデバイス上に実施された仮想マシンを表すことができる。オリジネータ１０２、ＲＰＣ利用プロセス１０４、およびセキュリティエージェント１０８を実施するコンピューティングデバイスとして働く能力を有する例示のコンピューティングデバイスは、図２に示され、その図を参照して以下で述べられる。
【００１３】
いくつかの実装においてオリジネータ１０２は、ＲＰＣ利用プロセス１０４を通じて要求を行うクライアントアプリケーションである。要求メッセージ１１４によって具体化されるこのような要求は、例えばドメイン名サービスクエリ、ドキュメントを印刷する要求、ファイアウォール設定を変更する要求、または新しいアカウントを作成する要求とすることができる。オリジネータ１０２は、ＲＰＣ利用プロセス１０４と同じコンピューティングデバイス上でもよく、異なるコンピューティングデバイス上でもよい。またオリジネータ１０２は、ＲＰＣ利用プロセス１０４と直接通信することができ、または別のプロセスまたはスレッドに、要求メッセージ１１４をＲＰＣ利用プロセス１０４に通信させることができる。例えばオリジネータ１０２は、結果として１１２で要求メッセージ１１４をＲＰＣ利用プロセス１０４に送ることを生じる、コマンドシェルを通じたコマンドをもたらすことができる。別の例ではオリジネータ１０２は、別のＲＰＣ利用プロセスを通じて中間スレッドを作成することができ、次いでこれはＲＰＣ利用プロセスの要求を行うことができる。他の例においてオリジネータ１０２は、他のＲＰＣ利用プロセスの要求を行うことができ、次いでその他方のＲＰＣ利用プロセスは、ＲＰＣ利用プロセス１０４の要求を行うことができる。例示の実装においてオリジネータ１０２は、セキュリティエクスプロイトである場合があり、またはセキュリティエクスプロイトによって危険にさらされたコンポーネントの場合がある。
【００１４】
上記で述べられたようにＲＰＣ利用プロセス１０４は、通信インターフェイスとしてＲＰＣライブラリを利用する任意の種類のプログラムとすることができる。ＲＰＣ利用プロセス１０４と通信するプロセスまたはスレッドは、ＲＰＣ利用プロセス１０４と同じコンピューティングデバイス上でもよく、異なるコンピューティングデバイス上でもよい。このようなプロセス／スレッドはそれぞれ、名前付きパイプ、ソケット、またはアドバンストローカルプロシージャコール（ＡＬＰＣ）ポートもしくはＡＬＰＣ接続の１つを通じて、ＲＰＣ利用プロセス１０４と通信することができる。図１に示されるようにＲＰＣ利用プロセス１０４は、ユーザモード１０６で動作する。
【００１５】
さらなる実装において、受け取られた各要求に対してＲＰＣ利用プロセス１０４は、その要求を処理するためにユーザモードワーカースレッドを作成することができる。各ワーカースレッドはＴＥＢ１２２に関連付けられることができ、これはワーカースレッドについての情報を維持することができる。ワーカースレッドに対するＴＥＢ１２２はまた、要求メッセージ１１４のコピーを記憶するＲＰＣ固有フィールド１２６を指し示すことができる。ＲＰＣ利用プロセス１０４のワーカースレッドのＴＥＢ１２６、およびＲＰＣ固有フィールド１２６は、本明細書では「ＲＰＣデータ構造」と呼ばれる。各ワーカースレッドはまた、要求メッセージ１１４の処理に関連付けられたカーネルモード要求を行うことができる。
【００１６】
いくつかの実装においてセキュリティエージェント１０８は、任意の種類のセキュリティエージェントである。セキュリティエージェント１０８は、カーネルモード１１０で実施されるカーネルモードセキュリティエージェント、ユーザモード１０６で実施されるセキュリティエージェント、部分的にユーザモード１０６および部分的にカーネルモード１１０で実施されるセキュリティエージェント、またはハイパーバイザによって実施されるセキュリティエージェントとすることができる。セキュリティエージェント１０８は、活性である間にセキュリティエージェント１０８のコンポーネントの再構成を受け取りそれらを適用する、リモートセキュリティサービスによってインストールされることができ構成可能とすることができる。このような再構成は、セキュリティエージェント１０８のいずれのコンポーネントに対しても、更新を引き起こすことができる。セキュリティエージェント１０８は、そのセキュリティエージェント１０８を実施するコンピューティングデバイス上のイベントを監視すること、そのコンピューティングデバイス上のイベントのいくつかまたはすべてについての状態を維持すること、コンピューティングデバイス上の１つまたは複数のイベントをリモートセキュリティサービスに通知すること、またはコンピューティングデバイス上の１つまたは複数のイベントに関連付けられたセキュリティエクスプロイトに対応して処置をとることの、少なくとも１つを行うことができる。セキュリティエージェント１０８の例は、２０１２年６月８日に出願した「Ｋｅｒｎｅｌ―Ｌｅｖｅｌ  Ｓｅｃｕｒｉｔｙ  Ａｇｅｎｔ」という名称の特許文献１に詳細に述べられている。
【００１７】
図１に示されるように、オリジネータ１０２を識別するためにとられる動作は、１１２でのオリジネータ１０２による初めの要求から結果として生じ得る。本明細書でさらに述べられるように、要求は１１２でオリジネータ１０２からＲＰＣ利用プロセス１０４に直接送られることができ、または１１２で例えば中間スレッドを通して、別のＲＰＣ利用プロセスを通して、またはコマンドシェルを通して間接的に送られ得る。要求に関連付けられた要求メッセージ１１４を受け取るとすぐに、ＲＰＣ利用プロセス１０４はユーザモード１０６で要求メッセージ１０４を処理することができる。このようなユーザモード処理は、ＲＰＣ利用プロセス１０４によるワーカースレッドの作成が関わり得る。ワーカースレッドはＴＥＢ１２２によって表されることができ、これは要求メッセージ１１４の処理に関連付けられた１つまたは複数のカーネルモード要求を行うことができる。このようなカーネルモード要求は、プロセス作成、スレッド作成、レジストリに書き込むこと、レジストリから読み出すこと、ファイルを作成すること、ファイルを開くこと、ファイルを読み出すこと、ファイルに書き込むこと、ファイルをマッピングすること、ネットワークパケットを送るかまたは受け取ること、オブジェクトに対するハンドルを作成するかまたは開くこと、またはレジストリ操作を行うことの少なくとも１つを含むことができる。
【００１８】
様々な実装において、１１６でセキュリティエージェント１１８は、ＲＰＣ利用プロセス１０４のカーネルモード要求に基づくイベント通知を受け取る。これらのカーネルモード要求は、それぞれ１つまたは複数のカーネルモードイベントに対応することができ、セキュリティエージェント１０８は、それらのカーネルモードイベントに対するイベント通知を受け取るように登録することができる。例えばセキュリティエージェント１０８は、カーネルモードイベントの通知を受け取るようにフックまたはフィルタにより登録することができ、またはメモリもしくはログファイル内の位置を監視する、またはそうするために、ログファイルまたはメモリ位置に関連付けられたカーネルモードイベントを観察するスレッドを生じることができる。一例においてセキュリティエージェント１０８は、レジストリ書き込みについて通知されるように登録することができる。要求メッセージ１１４の処理に関わるＲＰＣ利用プロセス１０４のワーカースレッドが、レジストリに書き込むようにカーネルモード要求を行ったとき、セキュリティエージェント１０８は、そのカーネルモード要求の受け取りに対するイベント通知を受け取ることになる。
【００１９】
さらなる実装において、次いで１１８でセキュリティエージェント１０８は、ＲＰＣ利用プロセス１０４が要求メッセージ１１４のユーザモード処理に関与しているかどうかを、１つまたは複数のイベント通知に基づいて決定する。いくつかの実装において、１１８で決定するステップは、セキュリティエージェント１０８の構成に基づく。例えば構成は、イベント通知の特定の組み合わせがある期間内に受け取られた場合、セキュリティエージェント１０８は、その処理がそれらのイベント通知に関連付けられた要求メッセージ１１４を取り出し、そのオリジネータ１０２を識別するべきであることを規定することができる。いくつかの実装においてセキュリティエージェント１０８は、イベント通知を蓄積し、イベント通知の特定の組み合わせが受け取られたときに検出イベントを発生する相関機構を含むことができる。このような検出イベントは、さらなる処理のためにセキュリティエージェント１０８の別のコンポーネント（例えばエンジンコンポーネント）にもたらされ得る。さらにセキュリティエージェント１０８は、誤検出（フォールスポジティブ）に対して保護するように構成され得る。いくつかの例ではイベント通知の特定の組み合わせは、さらなる処理は必要にならない追加的な無害な説明を有する場合がある。イベント通知の組み合わせがフォールスポジティブであるかどうかを決定するために、セキュリティエージェント１０８は、Ａ）１つまたは複数のカーネルモードイベントのうちの１つに関連付けられたカーネルモード要求メッセージに含まれた情報、またはＢ）セキュリティエージェントおよび／またはＯＳによって保持された状態情報、を取り出し、それをセキュリティエージェント１０８の構成によって固有の予期される情報と比較することができる。一致がある場合、セキュリティエージェント１０８は、イベント通知の組み合わせはフォールスポジティブを表さないと決定し、オリジネータ１０２を識別するようにさらなる処理を進める。
【００２０】
ＲＰＣ利用プロセス１０４が要求メッセージ１１４を処理しているとの決定の後すぐに、セキュリティエージェント１０８は要求メッセージ１１４を取り出すことができる。いくつかの実装においてセキュリティエージェント１０８は、要求メッセージ１１４を取り出し、オリジネータ１０２を識別するように構成されたエンジンコンポーネントを含む。本明細書でさらに述べられるようにエンジンコンポーネントは、要求メッセージ１１４の処理に関連付けられたイベント通知の組み合わせがセキュリティエージェント１０８の相関機構によって受け取られたとき、相関機構から検出イベントを受け取ることができる。さらにエンジンコンポーネントは、要求メッセージの各タイプ用のエンジンプラグインを含むことができる。
【００２１】
要求メッセージ１１４を取り出すために、１２０でセキュリティエージェント１０８は、現在のスレッドのＴＥＢ１２２などのデータ構造を始めに決定する。イベント通知を受け取り、それらが要求メッセージ１１４のユーザモード処理を示すと決定するとすぐに、セキュリティエージェント１０８は、ＯＳから現在のスレッドのＴＥＢ１２２を要求する。現在のスレッドは、要求メッセージ１１４のユーザモード処理に関わるワーカースレッドになる。ＴＥＢ１２２は、ワーカースレッドについての情報、およびＯＳデータ構造１２８のＲＰＣ固有フィールド１２６のポインタまたは識別子を含むことができる。ＲＰＣ固有フィールド１２６のポインタ／識別子は、難読化されてもよく、されなくてもよい。次に１２４でセキュリティエージェント１０８は、ＴＥＢ１２２におけるポインタまたは識別子から、要求メッセージ１１４のコピーを記憶するＲＰＣ固有フィールド１２６までをトレースする。ポインタ／識別子が難読化される場合は、セキュリティエージェント１０８は、１２４でトレースするステップの前にポインタ／識別子を難読化解除する。
【００２２】
要求メッセージ１１４をトレースするとすぐに、セキュリティエージェント１０８は要求メッセージ１１４を取り出すことができる。これは１３０で、要求メッセージ１１４に関連付けられたメタデータ（例えばヘッダ情報）に基づいて、要求メッセージ１１４のオリジネータを識別するステップを含むことができる。セキュリティエージェント１０８はまた、オリジネータ１０２が、ＲＰＣ利用プロセス１０４およびセキュリティエージェント１０８を含んだコンピューティングデバイスに対してローカルであるかリモートであるかを示すものとなり得る、用いられる通信プロトコルなどの要求メッセージ１１４のメタデータから、他の情報を取り出すことができる。いくつかの実装において、セキュリティエージェント１０８は、要求メッセージ１１４に関連付けられた追加のパラメータを取り出すように構成されることができ、そうするために要求メッセージ１１４のペイロードを取り出し、デマーシャリングすることができる。
【００２３】
さらなる実装において、１３０でオリジネータ１０２を識別するステップは、要求メッセージ１１４に関連付けられた名前付きパイプ、ソケットアドレス、またはＡＬＰＣポートもしくはＡＬＰＣ接続を取り出すステップ、および名前付きパイプ、ソケットアドレス、またはＡＬＰＣポートもしくはＡＬＰＣ接続を利用して、プロセス識別子、スレッド識別子、リモートクライアントコンピュータ名もしくはＩＰアドレス、またはこのような識別子、名前、およびアドレスの任意の組み合わせを取り出すステップを含むことができる。さらに、または代わりにセキュリティエージェント１０８は、カーネルから要求メッセージ１１４のコピーを取り出すことができる。このようなカーネルコピーは、要求メッセージ１１４メタデータおよびペイロードを含むことができる。そのメタデータおよび／またはペイロードは、ＲＰＣ利用プロセス１０４によってユーザモード１０６で記憶されたメタデータおよび／またはペイロードと比較されることができ、競合がある場合、セキュリティエージェント１０８は警告を発生することができる。さらに、いくつかの実装においてセキュリティエージェント１０８は、要求メッセージ１１４のカーネルコピーのメタデータに基づいてオリジネータ１０２を識別することのみを行うように、および／または要求メッセージ１１４のカーネルコピーのペイロードの取り出しおよび使用のみを行うように構成され得る。
【００２４】
いくつかの実装において、１１６で受け取るステップ、１１８で決定するステップ、１２０で決定するステップ、１２４でトレースするステップ、および１３０で取り出すステップは、すべてカーネルモード１１０でセキュリティエージェント１０８によって行われ得る。
【００２５】
様々な実装において要求メッセージ１１４のメタデータは、センダとしてコマンドシェルを識別することができる（例えばＡＴまたはｓｃｈｔａｓｋなどのコマンドプロンプトを通じて）。このようなセンダが識別されたとき、セキュリティエージェントは、オリジネータ１０２としてコマンドシェルの親プロセスを識別することができる。
【００２６】
いくつかの実装において、要求メッセージ１１４のメタデータは、センダとして特定のスレッドを識別することができる。それの構成に基づいてセキュリティエージェント１０８は、特定のスレッドがオリジネータ１０２ではなく、同じプロセス（例えばスクリプトエンジン）の他のスレッド（例えばＲＰＣ利用スレッド）によって呼び出された中間スレッドであると決定することができる。それの構成に基づいてセキュリティエージェント１０８は、その他方の呼び出しているスレッドを識別し、その他方の呼び出しているスレッドから実際のオリジネータ１０２までをトレースすることができる。このようなさらにトレースするステップには、本明細書でさらに述べられる動作のいくつかまたはすべてが関わり得る。
【００２７】
さらなる実装において、要求メッセージ１１４のメタデータは、センダとして他のＲＰＣ利用プロセス１０４を識別することができる。他のＲＰＣ利用プロセス１０４がセンダとして識別されたとき、セキュリティエージェント１０８は、本明細書でさらに述べられる動作を繰り返して、その他方のＲＰＣ利用プロセス１０４によって処理される要求メッセージのセンダを識別することができる。このような反復は、オリジネータ１０２が識別されるまで続くことができる。
【００２８】
様々な実装において、オリジネータ１０２のアイデンティティに基づいて、他の要因（例えば要求メッセージ１１４のペイロードからのパラメータ）に基づいて、または両方に基づいて、セキュリティエージェント１０８は、防止するかまたはミスリードするための処置をとることができる。例えばセキュリティエージェント１０８は、ＲＰＣ利用プロセス１０４による要求メッセージ１１４の処理を中止することによって、要求メッセージ１１４に関連付けられたさらなる活動を防止することができる。さらに、または代わりにセキュリティエージェント１０８は、オリジネータ１０２の、またはオリジネータ１０２に関連付けられたプロセスの、実行を停止することができる。他の例において、ミスリードするためにセキュリティエージェント１０８は、要求メッセージ１１４の処理の一部としてＲＰＣ利用プロセス１０４によって作られたカーネルモード要求メッセージのペイロードを変更する、または他の方法で同様な効果を得るように、変更されていない要求メッセー１１４の処理を改変することができる（例えば要求メッセージ１１４を処理しているＲＰＣ利用プロセスのカーネルモード動作を実行するように「装う」）。このような処置は、オリジネータ１０２または関連付けられたプロセスに、要求メッセージ１１４の処理からミスリードさせる結果をもたらす。
【００２９】
例示のシステム
図２は、ユーザモードにおいて要求メッセージを取り扱うようにＲＰＣ利用プロセスを用いて構成された監視されるコンピューティングデバイス、およびカーネルモードから、それらの要求メッセージのユーザモード処理を検出するためのセキュリティエージェントの、コンポーネントレベルの図を示す。示されるようにコンピューティングデバイス２００は、クライアント２０４と、レジストリ２０６と、スレッド２１０およびデータ構造２１２を含むＲＰＣ利用プロセス２０８と、プラグイン２１８を有するエンジン２１６およびまた相関機構２２０の両方を含むセキュリティエージェント２１４とを記憶する、システムメモリ２０２を備える。またコンピューティングデバイス２００は、プロセッサ２２２、リムーバブル記憶装置２２４および非リムーバブル記憶装置２２６、入力デバイス２２８、出力デバイス２３０、および他のコンピューティングデバイス２３４と通信するための通信接続２３２を含む。
【００３０】
様々な実施形態においてシステムメモリ２０２は、揮発性（ＲＡＭなど）、不揮発性（ＲＯＭ、フラッシュメモリなど）、または両方の組み合わせである。クライアント２０４、レジストリ２０６、ＲＰＣ利用プロセス２０８、スレッド２１０、データ構造２１２、セキュリティエージェント２１４、エンジン２１６、プラグイン２１８、および相関機構２２０は、本明細書でさらに述べられる同様に名付けられたコンポーネントの例である。
【００３１】
いくつかの実施形態においてプロセッサ２２２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、またはＣＰＵおよびＧＰＵの両方、または当技術分野で知られている他の処理装置またはコンポーネントを含む。
【００３２】
コンピューティングデバイス２００はまた、例えば磁気ディスク、光ディスク、またはテープなどの、追加のデータ記憶装置（リムーバブルおよび／または非リムーバブル）を含む。このような追加の記憶装置は図２において、リムーバブル記憶装置２２４および非リムーバブル記憶装置２２６によって示される。非一時的コンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの、情報の記憶のための任意の方法または技術において実施された、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体を含むことができる。システムメモリ２０２、リムーバブル記憶装置２２４、および非リムーバブル記憶装置２２６は、すべて非一時的コンピュータ可読記憶媒体の例である。非一時的コンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ―ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または所望の情報を記憶するために用いられることができ、コンピューティングデバイス２００によってアクセスされ得る任意の他の非一時的媒体を含むが、それらに限定されない。任意のこのような非一時的コンピュータ可読媒体は、コンピューティングデバイス２００の一部とすることができる。
【００３３】
コンピューティングデバイス２００はまた、キーボード、マウス、タッチセンシティブディスプレイ、音声入力デバイスなどの入力デバイス２２８、およびディスプレイ、スピーカ、プリンタなどの出力デバイス２３０を有する。これらのデバイスは、当技術分野でよく知られており、ここで詳しく論じられる必要はない。
【００３４】
コンピューティングデバイス２００はまた、コンピューティングデバイス２００が他のコンピューティングデバイス２３４と通信することを可能にする通信接続２３２を含む。
【００３５】
例示のプロセス
図３は、例示のプロセスを示す。このプロセスは、論理フローグラフとして示され、その各動作は、ハードウェア、ソフトウェア、またはそれらの組み合わせにおいて実施され得る動作のシーケンスを表す。ソフトウェアとの関連において動作は、１つまたは複数のプロセッサによって実行されたときに列挙された動作を行う、１つまたは複数のコンピュータ可読記憶媒体に記憶されたコンピュータ実行可能命令を表す。一般にコンピュータ実行可能命令は、特定の機能を行うまたは特定の抽象データタイプを実施する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。動作が述べられる順序は、限定として解釈されることを意図するものではなく、プロセスを実施するために、任意の数の述べられた動作が、任意の順序でおよび／または並列に組み合わされ得る。
【００３６】
図３は、セキュリティエージェントによって行われる例示の動作を示し、動作は、カーネルモードイベントがＲＰＣ利用プロセスによる要求メッセージのユーザモード処理に関連付けられると決定するステップ、ＲＰＣデータ構造およびイベント通知に基づいてその要求メッセージを取り出すステップ、および要求メッセージのオリジネータを識別するステップを含む。
【００３７】
動作は、３０２でクライアントアプリケーション（オリジネータとも呼ばれる）が、要求メッセージを、そのクライアントアプリケーションのコンピューティングデバイスのＲＰＣ利用プロセスに送るステップを含む。要求メッセージは、例えばドメイン名サービスクエリ、ドキュメントを印刷する要求、ファイアウォール設定を変更する要求、または新しいアカウントを作成する要求とすることができる。
【００３８】
３０４でＲＰＣ利用プロセスは、要求メッセージをユーザモードで処理することができる。このような処理は、プロセス作成、スレッド作成、レジストリに書き込むこと、レジストリから読み出すこと、ファイルを作成すること、ファイルを開くこと、ファイルを読み出すこと、ファイルに書き込むこと、ファイルをマッピングすること、ネットワークパケットを送るかまたは受け取ること、オブジェクトに対するハンドルを作成するかまたは開くこと、レジストリ操作を行うこと、に関連付けられた要求メッセージなどの１つまたは複数のカーネルモード要求メッセージを送ることを含むことができる。
【００３９】
３０６でコンピューティングデバイスのセキュリティエージェントは、１つまたは複数のカーネルモードイベントにそれぞれ関連付けられた１つまたは複数のイベント通知を受け取る。カーネルモードイベントは、ＲＰＣ利用プロセスのカーネルモード要求メッセージによって求められる処置に対応することができる（例えばプロセス作成、スレッド作成、レジストリに書き込むこと、レジストリから読み出すこと、ユーザグループ作成、タスクキャッシュに書き込むこと、タスクキャッシュから読み出すこと、ファイルを作成すること、ファイルを開くこと、ファイルを読み出すこと、ファイルに書き込むこと、ファイルをマッピングすること、ネットワークパケットを送るかまたは受け取ること、オブジェクトに対するハンドルを作成するかまたは開くこと、レジストリ操作を行うこと）。
【００４０】
３０８でセキュリティエージェントは、１つまたは複数のイベント通知に基づいて、１つまたは複数のカーネルモードイベントがＲＰＣ利用プロセスによる要求メッセージのユーザモード処理に関連付けられると決定する。決定するステップは３１０で、少なくとも部分的にセキュリティエージェントの構成に基づくことができる。決定するステップは３１２で、フォールスポジティブを防止するために、Ａ）１つまたは複数のカーネルモードイベントのうちの１つに関連付けられたカーネルモード要求メッセージの１つに含まれた情報、またはＢ）セキュリティエージェントおよび／またはＯＳによって保持された状態情報を、予期される情報と比較するステップをさらに含むことができる。
【００４１】
３１４でセキュリティエージェントは、１つまたは複数のＲＰＣデータ構造（例えばワーカースレッドＴＥＢ、および／またはＯＳデータ構造のＲＰＣ固有フィールド）に含まれた情報に基づいて、および１または複数のイベント通知に基づいて、要求メッセージを取り出す。取り出すステップは３１６で、ＯＳによって処理されている現在のスレッドのＴＥＢを決定するステップを含むことができる。現在のスレッドは、要求メッセージのユーザモード処理に関わるＲＰＣ利用プロセスのワーカースレッドとすることができる。取り出すステップは３１８で、ＯＳデータ構造のＲＰＣ固有フィールドを通じて、ＴＥＢから要求メッセージまでをトレースするステップをさらに含むことができる。ＴＥＢはＲＰＣ固有フィールドを指し示すことができ、ＲＰＣ固有フィールドは要求メッセージのコピーを記憶することができる。次いでセキュリティエージェントは、ＲＰＣ固有フィールドから要求メッセージを取り出すことができる。３２０で要求メッセージが、コマンドシェルからＲＰＣ利用プロセスによって、または別のＲＰＣ利用プロセスから受け取られたとき、セキュリティエージェントは、３１４での取り出すステップを繰り返すことができる。
【００４２】
３２２でセキュリティエージェントは、要求メッセージのメタデータに基づいて、要求メッセージのオリジネータを識別する。識別するステップは３２４で、要求メッセージに関連付けられた名前付きパイプ、ソケットアドレス、またはＡＬＰＣポートもしくはＡＬＰＣ接続を決定するステップと、名前付きパイプ、ソケットアドレス、またはＡＬＰＣポートもしくはＡＬＰＣ接続を利用して、オリジネータのプロセス識別子、オリジネータのスレッド識別子、オリジネータのリモートクライアントコンピュータ名もしくはＩＰアドレス、またはこのような識別子、名前、およびアドレスの任意の組み合わせを取り出すステップとを含む。識別するステップは３２６で、要求メッセージに関連付けられた名前付きパイプ、またはＡＬＰＣポートもしくはＡＬＰＣ接続を決定するステップと、名前付きパイプ、またはＡＬＰＣポートもしくはＡＬＰＣ接続を利用して、要求メッセージのメタデータからオリジネータの識別子を取り出すステップとを含む。
【００４３】
３２８でセキュリティエージェントは、要求メッセージのメタデータに基づいて、オリジネータがローカルであるかリモートであるかを決定することができる。
【００４４】
３３０でセキュリティエージェントは、要求メッセージのペイロードをデマーシャリングして、１つまたは複数のパラメータを取り出すことができる。いくつかの実装においてデマーシャリングするステップは、要求メッセージのカーネルモードコピーから、要求メッセージのペイロードを取り出すステップを含むことができる。
【００４５】
３３２でセキュリティエージェントは、ＲＰＣ利用プロセスによる要求メッセージの処理を中止する、またはオリジネータまたはオリジネータに関連付けられたプロセスの実行を停止することができる。
【００４６】
３３４でセキュリティエージェントは、オリジネータをミスリードするための処置をとることができる。
【００４７】
結論
主題について構造的特徴および／または方法論的動作に固有の用語で述べてきたが、添付の「特許請求の範囲」において定義される主題は、必ずしも述べられた特定の特徴または動作に限定されないことを理解されたい。むしろ、特定の特徴および動作は、「特許請求の範囲」を実施する例示の形として開示されるものである。
【符号の説明】
【００４８】
１０２  オリジネータ
１０４  ＲＰＣ利用プロセス
１０６  ユーザモード
１０８  セキュリティエージェント
１１０  カーネルモード
１１４  要求メッセージ
１２６  ＲＰＣ固有フィールド
１２８  ＯＳデータ構造
【図１】
2018028907.tif 000003
【図２】
2018028907.tif 000004
【図３】
2018028907.tif 000005
【外国語明細書】
2018028907000001.pdf