(57)【要約】  リターン・オリエンテッド・プログラミングに関連するセキュリティエクスプロイトを検出する技術を記載する。例えば、コンピュータ装置は、読み出したカウントがＲＯＰ等の悪意のあるアクティビティを示すことを判定し得る。コンピュータ装置は、予測不一致に関するプロセッサパフォーマンスカウンタからカウントを読み出してよい。予測不一致は、コンピュータ装置のコールスタックと、コンピュータ装置のプロセッサが保持するシャドーコールスタックとの比較から生じる。カウントが悪意のあるアクティビティを示すと判定されたことに応答して、コンピュータ装置は、少なくとも１つのセキュリティ応答アクション行ってよい。
2015527680.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ装置のコールスタックと、前記コンピュータ装置のプロセッサに保持されたシャドーコールスタックとの比較から生じる予測不一致のカウントをプロセッサパフォーマンスカウンタから読み出すことと、
前記カウントが悪意のあるアクティビティを示すか否かを判定することと、
前記カウントが悪意のあるアクティビティを示すと判定されたことに応答して、少なくとも１つのセキュリティ応答アクションを実行することと、
を含む、コンピュータ実施方法。
【請求項２】
前記カウントが悪意のあるアクティビティを示すか否かを判定することは、前記カウントが、閾値を超えるか否か、または、パターンと異なるか否かを判定することを含む、請求項１に記載の方法。
【請求項３】
前記閾値または前記パターンは、プロセス、または、プロセスのクラスに固有であってよい、請求項２に記載の方法。
【請求項４】
前記カウントをある時間にわたって監視することに基づいて、前記閾値または前記パターンを判定することをさらに含む、請求項２に記載の方法。
【請求項５】
前記少なくとも１つのセキュリティ応答アクションは、グラフィック、聴覚、または、触覚による警告を前記コンピュータ装置のユーザに提供することである、請求項１に記載の方法。
【請求項６】
前記少なくとも１つのセキュリティ応答アクションは、前記悪意のあるアクティビティを遠隔セキュリティ監視サーバに知らせることである、請求項１に記載の方法。
【請求項７】
前記少なくとも１つのセキュリティ応答アクションは、１つまたは複数のプロセスの実行を中断することである、請求項１に記載の方法。
【請求項８】
中断の前に、前記１つまたは複数のプロセスを中断すべきか否かを前記コンピュータ装置のユーザに尋ねることと、ユーザの応答に基づくという条件で、前記中断を行うことと、をさらに含む、請求項１に記載の方法。
【請求項９】
前記少なくとも１つのセキュリティ応答アクションは、１つまたは複数のプロセスに関連付けられた情報を判定し、前記判定した情報を分析することである、請求項１に記載の方法。
【請求項１０】
前記カウントが悪意のあるアクティビティを示すか否かを判定した後、前記１つまたは複数のプロセスに関連付けられた実行アクティビティを監視することをさらに含む、請求項９に記載の方法。
【請求項１１】
前記読み出すこと、判定すること、および、実行することは、前記コンピュータ装置よって、遠隔セキュリティサービスによって、または、前記コンピュータ装置と前記遠隔セキュリティサービスの両方によって部分的に、行われる、請求項１に記載の方法。
【請求項１２】
１つまたは複数の有形コンピュータ可読媒体であって、
コンピュータ装置のコールスタックと、前記コンピュータ装置のプロセッサが保持するシャドーコールスタックとの比較から生じる予測不一致のカウントをプロセッサパフォーマンスカウンタから読み出すことと、
前記カウントが悪意のあるアクティビティを示すか否かを判定することと、
前記カウントが悪意のあるアクティビティを示すと判定されたことに応答して、少なくとも１つのセキュリティ応答アクションを行うことと、
を含む動作を行うように１つまたは複数のコンピュータ装置をプログラムするように構成されたコンピュータ実行命令を記憶する、１つまたは複数の有形コンピュータ可読媒体。
【請求項１３】
前記コンピュータ装置は、前記１つまたは複数のコンピュータ装置の１つである、請求項１２に記載の１つまたは複数の有形コンピュータ可読媒体。
【請求項１４】
前記少なくとも１つのセキュリティ応答アクションは、グラフィック、聴覚、または、触覚による警告を前記コンピュータ装置のユーザに提供することである、請求項１２に記載の１つまたは複数の有形コンピュータ可読媒体。
【請求項１５】
前記少なくとも１つのセキュリティ応答アクションは、悪意のあるアクティビティを遠隔セキュリティ監視サーバに知らせることである、請求項１２に記載の１つまたは複数の有形コンピュータ可読媒体。
【請求項１６】
前記少なくとも１つのセキュリティ応答アクションは、１つまたは複数のプロセスの実行を中断することである、請求項１２に記載の１つまたは複数の有形コンピュータ可読媒体。
【請求項１７】
前記少なくとも１つのセキュリティ応答アクションは、１つまたは複数のプロセスに関連付けられた情報を判定し、前記判定された情報を分析することである、請求項１２に記載の１つまたは複数の有形コンピュータ可読媒体。
【請求項１８】
コンピュータ装置であって、
プロセッサと、
前記プロセッサによって操作されて、
前記コンピュータ装置のコールスタックと、前記プロセッサが保持するシャドーコールスタックとの比較から生じる予測不一致のカウントをプロセッサパフォーマンスカウンタから読み出し、かつ、
前記カウントが悪意のあるアクティビティを示すか否かを判定するように構成された
検出モジュールと、
前記カウントが悪意のあるアクティビティを示すと判定されたことに応答して、前記プロセッサによって操作されて、
グラフィック、聴覚、または、触覚による警告を前記コンピュータ装置のユーザに提供すること、
前記悪意のあるアクティビティを遠隔セキュリティ監視サーバに知らせること、
１つまたは複数のプロセスの実行を中断すること、または、
前記１つまたは複数のプロセスに関連付けられた情報を判定し、前記判定された情報を分析することの、少なくとも１つを行うように構成された、
応答モジュールと、
を備える、コンピュータ装置。
【請求項１９】
前記検出モジュールは、前記カウントが閾値を超えるか否か、または、パターンと異なるか否かを判定することによって、前記カウントが悪意のあるアクティビティを示すか否かを判定するように構成され、前記閾値または前記パターンは、ある時間にわたって前記カウントを監視することに基づいた、請求項１８に記載のコンピュータ装置。
【請求項２０】
前記カウントが悪意のあるアクティビティを示すか否かを判定した後、前記１つまたは複数のプロセスに関連付けられた実行アクティビティを監視するように構成されたエージェントをさらに含む、請求項１８に記載のコンピュータ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２０１２年９月７日出願の「Ｔｈｒｅａｔ  Ｄｅｔｅｃｔｉｏｎ  ｆｏｒ  Ｒｅｔｕｒｎ  Ｏｒｉｅｎｔｅｄ  Ｐｒｏｇｒａｍｍｉｎｇ」という名称の米国特許出願第１３／６０７，１５５号の優先権を主張し、その全体を援用により本明細書に組み込む。
【背景技術】
【０００２】
インターネットの使用が、日々の生活に占める割合が大きくなるにつれて、システムリソース、データ、及び個人情報を盗んだり、破壊したりするセキュリティエクスプロイト（ｓｅｃｕｒｉｔｙ  ｅｘｐｌｏｉｔ）の問題も深刻化している。政府や企業は、これらのセキュリティエクスプロイトに関連した侵入や窃盗を防ぐことにかなりの資源を投入している。セキュリティエクスプロイトには、コンピュータウイルス、ワーム、トロイの木馬、スパイウェア、キーストロークロガー、アドウェア、ルートキット、および、シェルコードなど多くの形がある。これらのエクスプロイトは、スピアフィッシングメール、クリック可能なリンク、ドキュメント、実行ファイル、または、アーカイブなどの多くの機構の形で、または、それらを通して、配布される。セキュリティエクスプロイトによってもたらされる脅威には、非情に深刻なものもあり、サイバーテロリズムまたは産業スパイと呼ばれる。
【０００３】
リターン・オリエンテッド・プログラミング（Ｒｅｔｕｒｎ  Ｏｒｉｅｎｔｅｄ  Ｐｒｏｇｒａｍｍｉｎｇ、ＲＯＰ）として知られるシェルコードセキュリティエクスプロイトの変形は、検出が非常に難しいことが分かっている。ＲＯＰは、コンピュータ装置のセキュリティの脆弱性を利用して、そのコンピュータ装置のコールスタックに対してスプーフィング（なりすまし）や制御を行う。このセキュリティエクスプロイトは、コールスタックに対してスプーフィングまたは制御を行うことによって、正規のプロセスの命令の選択を利用して、シェルコードを有効に作成、実行することができる。正規の命令を利用することによって、シェルコードセキュリティエクスプロイトを停止させるために導入されているメモリ保護機能を回避する。一方で、ＲＯＰを検出し、それに対応するために開発されている技術は、多大な実施コストがかかる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願第１３／４９２，６７２号
【特許文献２】米国特許出願第１３／５３８，４３９号
【図面の簡単な説明】
【０００５】
添付図面を参照しながら詳細を説明する。図面中、参照番号の一番左の数字は、その参照番号が最初に現れる図面を示す。異なる図面で同じ参照番号を使用している場合は、類似または同じ項目または機能を指す。
【０００６】
【図１】コールスタックの予測不一致に関するプロセッサパフォーマンスカウンタに基づいて、ＲＯＰに関連付けられたセキュリティエクスプロイトを検出する技術の概略を示す図である。
【図２】ＲＯＰセキュリティエクスプロイトに感染したコンピュータ装置のコンポーネントレベルを示す図である。
【図３】脆弱性を攻撃する敵と、その攻撃を受けたコンピュータ装置と、その攻撃を検出、および／または、その攻撃に対応するように構成された遠隔セキュリティサービスと、を接続する例示のネットワークを示す図である。
【図４】コールスタックに関連する予測不一致のカウントを読み出し、そのカウントが悪意のあるアクティビティを示すと判定し、それに応答して、少なくとも１つのセキュリティ応答アクションを行う例示のプロセスを示す図である。
【発明を実施するための形態】
【０００７】
（概要）
本開示は、一つには、ＲＯＰに関連するセキュリティエクスプロイトを検出する技術について記載する。この技術は、読み出されたカウントがＲＯＰ等の悪意のあるアクティビティを示すと判定することを含む。コンピュータ装置のコールスタックとコンピュータ装置のプロセッサが保持するシャドーコールスタックとの比較によって生じる予測不一致のカウントを、プロセッサパフォーマンスカウンタから読み出してよい。この技術は、そのカウントが悪意のあるアクティビティを示すと判定されたことに応答して、少なくとも１つのセキュリティ応答アクションを行うことをさらに含む。
【０００８】
図１は、このような技術の概略を示す。図１に示すように、１００Ａにおいて、コンピュータ装置１０２は、メモリ破損脆弱性などの、敵に悪用（エクスプロイト）される脆弱性を有し得る。このような脆弱性によって、ＲＯＰ（ｒｅｔｕｒｎ  ｏｒｉｅｎｔｅｄ  ｐｒｏｇｒａｍ）１０６を用いる敵は、コールスタック１０４に対して制御またはスプーフィングを行うことが可能になる。コールスタック１０４に対して制御またはスプーフィングを行うことによって、敵は、コンピュータ装置１０２の１つまたは複数のプロセスの正規の命令１０８（以下、「エクスプロイトされた命令１０８」）を悪用（エクスプロイト）して、コンピュータ装置１０２上で悪意のプログラムを有効に作成、実行することができる。シェルコードと同様、このような悪意のプログラムは、比較的小さく、数個の命令という場合もある。このセキュリティエクスプロイトの一部として供給されたＲＯＰ１０６は、全て感染したコンピュータ装置１０２上で実行する場合もあり、例えば、コマンドシェルを通して、敵のシステムによって遠隔で操作される場合もある。
【０００９】
１００Ｂにおいて、コンピュータ装置１０２のプロセッサに関連付けられたパフォーマンス監視ユニットは、シャドーコールスタック１１０または他の予測機構を用いて、コールスタック１０４の値を予測してよい。例えば、コンピュータ装置１０２は、コールスタック１０４をシャドーコールスタック１１０と比較してよく、比較の結果、不一致がある場合、プロセッサのフォーマンスカウンタ１１２をインクリメントしてよい。コンピュータ装置１０２は、プロセッサのキャッシュメモリにシャドーコールスタック１１０を保持し、コンピュータ装置１０２の分岐予測器と共同して、シャドーコールスタックを利用する。分岐予測器は、どの実行経路でプロセスのｉｆ−ｔｈｅｎ構造または間接分岐が起こるかの推測を、その経路が分かる前に試みる。分岐予測器が用いる予測機構の１つは、リターンスタックバッファとも呼ばれるシャドーコールスタック１１０である。パフォーマンス監視ユニットは、シャドーコールスタック１１０と、コンピュータ装置１０２のシステムメモリに記憶されたコールスタック１０４を比較して、予測不一致を監視し、予測不一致に気付くと、コールスタックの予測不一致専用のパフォーマンスカウンタ１１２をインクリメントする。ＲＯＰ１０６は、コールスタック１０４に対してだけ制御、スプーフィングを行うことができ、シャドーコールスタック１１０に対しては制御、スプーフィングを行わないので、これらの予測不一致は、ＲＯＰ１０６のアクティビティなどの悪意のあるアクティビティを示し得る。この相違を示す結果は、予測不一致であることが多い。
【００１０】
１００Ｃにおいて、検出モジュール１１４は、パフォーマンスカウンタ１１２から読み出したカウント１１６が悪意のあるアクティビティを示すと、判定する。検出モジュール１１４は、カウント１１６を閾値またはパターン１１８と比較して、この判定を行ってよい。このような閾値またはパターン１１８は、パフォーマンスカウンタ１１２の監視カウント１１６を経時的に監視することに基づいて決定されてよい。閾値またはパターン１１８は、また、プロセスまたはプロセスのクラスに固有であってよいので、予測不一致を典型的に登録するプロセスが、異なる閾値またはパターン１１８を有することを可能にし、そうすることによって、誤検出を回避する。プロセスまたはプロセスクラスに固有の閾値またはパターン１１８に関しては、検出モジュール１１４は、カウント１１６が読み出された時に実行している１つまたは複数のプロセスを示すものを読み出し、そのアクティブなプロセスが示すものに基づいて、適切な閾値またはパターン１１８を決定してもよい。
【００１１】
さらに、１００Ｃに示すように、カウント１１６が閾値１１８を超える、または、パターン１１８と異なると、検出モジュール１１４が判定した場合、検出モジュール１１４は、応答モジュール１２０を呼び出す、または、応答モジュール１２０に通知してよい。応答モジュール１２０は、少なくとも１つのセキュリティ応答アクションを実行する。例えば、セキュリティ応答アクションは、コンピュータ装置１０２のユーザにグラフィック、聴覚、または、触覚による警告を提供してよい。さらに、または、その代わりに、セキュリティ応答アクションは、遠隔セキュリティ監視サーバに悪意のあるアクティビティを通知してもよい。さらに、セキュリティ応答アクションは、１つまたは複数のアクティブなプロセス（すなわち、カウント１１６に関連するプロセッサが実行中の１つまたは複数のプロセス）を中断するべきか否かをコンピュータ装置のユーザに尋ね、その１つまたは複数のプロセスを中断してよい。さらに、セキュリティ応答アクションは、１つまたは複数のアクティブなプロセスに関連付けられた情報を判定し、判定された情報を分析してよい。応答モジュール１２０は、その後、１つまたは複数のアクティブなプロセスに関連付けられた実行アクティビティを監視、または、別のコンポーネントに監視させてよい。
【００１２】
一部の実施形態においては、検出モジュール１１４および応答モジュール１２０は、コンピュータ装置１０２上で実施されてよい。他の実施形態においては、検出モジュール１１４および応答モジュール１２０は、遠隔セキュリティサービスによって実施されてよい。検出モジュール１１４を実施する時、遠隔セキュリティサービスは、パフォーマンスカウンタ１１２からカウント１１６を読み出すように構成されたコンピュータ装置１０２の論理と通信して、遠隔セキュリティサービスの検出モジュール１１４が、その論理からカウント１１６を読み出すことができるようにする。さらに別の実施形態においては、検出モジュール１１４および応答モジュール１２０は、一部をコンピュータ装置１０２によって実施し、一部を遠隔セキュリティサービスによって実施してよい。
【００１３】
（装置の例）
図２は、ＲＯＰセキュリティエクスプロイトに感染したコンピュータ装置のコンポーネントレベルを示す。図に示すように、コンピュータ装置１０２はプロセッサ２０２を備え、プロセッサ２０２は、パフォーマンス監視ユニット２０４とキャッシュメモリ２０６を備える。パフォーマンス監視ユニット２０４は、パフォーマンスカウンタ１１２等の、１つまたは複数のパフォーマンスカウンタを備えてよい。キャッシュメモリ２０６は、シャドーコールスタック１１０を記憶してよい。
【００１４】
コンピュータ装置１０２は、システムメモリ２０８も備えてよい。システムメモリ２０８は、コールスタック１０４、エクスプロイトされた命令１０８、セキュリティエージェント２１０、検出モジュール１１４、および、応答モジュール１２０を記憶してよい。応答モジュール１２０は、警告モジュール２１２、報告モジュール２１４、修正モジュール２１６、および、分析モジュール２１８を備えてよい。
【００１５】
さらに、コンピュータ装置１０２は、取り外し可能な記憶装置２２０、取り外しできない記憶装置２２２、１つまたは複数の入力装置２２４、１つまたは複数の出力装置２２６、および、他のコンピュータ装置２３０と通信するための通信接続２２８を備えてよい。
【００１６】
一部の実施形態においては、コンピュータ装置１０２は、サーバまたはサーバファーム、複数の分散サーバファーム、メインフレーム、ワークステーション、パーソナルコンピュータ（ＰＣ）、ラップトップコンピュータ、タブレットコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、携帯電話、メディアセンタ、埋め込みシステム、または、任意の他の種類の１つまたは複数の装置であってもよく、それらを含んでもよい。一実装においては、コンピュータ装置１０２は、クラウドコンピュータネットワークのノード等の、通信して動作する複数のコンピュータ装置を表す。一部の実装においては、コンピュータ装置１０２は、１つまたは複数の仮想マシンを備える。
【００１７】
様々な実施形態において、プロセッサ２０２は、８０８６アーキテクチャ（例えば、インテルｉ７（登録商標）プロセッサ）または６８０００アーキテクチャに関連付けられたプロセッサ等の中央処理装置（ＣＰＵ）である。コンピュータ装置は、図２に示すグラフィックプロセッシングユニット（ＧＰＵ）等の１つまたは複数の他のプロセッサも備えてよい。パフォーマンス監視ユニット２０４およびキャッシュメモリ２０６に加えて、プロセッサ２０２は、他のキャッシュメモリ、レジスタ、バッファ（例えば、トランスレーションルックアサイドバッファ）、テーブル、演算論理ユニット（ＡＬＵ）、インタフェースバスなどを備えてよい。
【００１８】
パフォーマンス監視ユニット２０４（ＰＭＵ２０４）は、プロセッサ２０２のパフォーマンスに関する情報と、プロセッサ２０２が実行中のアプリケーションまたはプロセスに関する情報を収集する。ＰＭＵ２０４は、多くのレジスタとパフォーマンスカウンタを備えてよく、レジスタおよびパフォーマンスカウンタの数や種類は、プロセッサ２０２の種類によって異なる。さらに、ＰＭＵ２０４は、パフォーマンス情報を集め、その情報に対してパフォーマンスカウンタ更新に必要な任意の処理を行い、パフォーマンスカウンタを更新する。例えば、ＰＭＵ２０４は、コールスタック１０４をシャドーコールスタック１１０と比較して、予測不一致があるか否かを判定してよい。一部の実施形態においては、このパフォーマンス情報は、少なくとも部分的に、プロセッサ２０２の分岐予測ユニットからから取得してよい。予測不一致がある場合、ＰＭＵ２０４は、パフォーマンスカウンタ１１２のカウントを更新する。図２は、パフォーマンスカウンタ１１２を備えるＰＭＵ２０４を示しているが、ＰＭＵ２０４は、システムまたはプロセスのパフォーマンスの他の態様を測る他のパフォーマンスカウンタも備えてよい。
【００１９】
キャッシュメモリ２０６は、Ｌ１キャッシュメモリまたはＬ２キャッシュメモリ等のプロセッサ２０２の任意の種類のキャッシュメモリであってよい。上記のように、キャッシュメモリ２０６は、「リターンスタックバッファ」と呼ばれることもあるシャドーコールスタック１１０を記憶してよい。一部の実施形態においては、シャドーコールスタック１１０は、Ｌ１キャッシュメモリよりもプロセッサ２０２のＣＰＵに近いキャッシュメモリ２０６に記憶されてよい。シャドーコールスタック１１０は、コールスタック１０４の状態の予測を試みる分岐予測に用いられる。動作中、シャドーコールスタック１１０は、コールスタック１０４をミラーリングすることが多い。  
【００２０】
様々な実施形態において、システムメモリ２０８は、揮発性（例えば、ＲＡＭ）、不揮発性（例えば、ＲＯＭ、フラッシュメモリ等）、または、両方の組み合わせであってよい。図に示すように、システムメモリ２０８は、コールスタック１０４を含む。コールスタック１０４は、コンピュータ装置１０２のプロセスのアクティブなサブルーチンに関する情報を記憶するデータ構造である。例えば、コールスタック１０４は、サブルーチンが次の動作に制御を戻すべきメモリアドレスを記憶する。上記のように、このコールスタック１０４は、コンピュータ装置１０２または、そのアプリケーションの１つの脆弱性を利用したＲＯＰ１０６によって制御またはスプーフィングされる場合がある。ＲＯＰ１０６は、コールスタック１０４に対してスプーフィングまたは制御を行うことによって、制御を間違ったメモリアドレスに戻す。この間違ったメモリアドレスは、悪意のあるアクティビティを起こすように実行される１つまたは複数の正規のエクスプロイトされた命令１０８に関連付けられる。
【００２１】
様々な実施形態において、システムメモリ２０８は、セキュリティエージェント２１０も備えてよい。セキュリティエージェント２１０は、コンピュータ装置１０２の実行アクティビティを観察し、実行アクティビティに従って行動するカーネルレベルのセキュリティエージェントであってよい。セキュリティエージェント２１０は、遠隔セキュリティサービスによって構成可能であってよく、動作中に（ｗｈｉｌｅ  ｌｉｖｅ）、セキュリティエージェント２１０のフィルタ、コンポーネント、モデル等の再構成を受信、適用する。観察された実行アクティビティに基づいて、セキュリティエージェント２１０はセキュリティ情報を生成してよい。このセキュリティ情報は、セキュリティエージェント２１０がその情報に従って行動してよく、および／または、遠隔セキュリティサービスに提供してよい情報である。検出モジュール１１４および応答モジュール１２０は、セキュリティエージェント２１０とは別個であるとして示されているが、他の実施形態においては、そのうちの１つまたは両方が、セキュリティエージェント２１０のコンポーネントであってよい。例示のセキュリティエージェント２１０は、２０１２年６月８日出願の「カーネルレベルセキュリティエージェント（Ｋｅｒｎｅｌ−Ｌｅｖｅｌ  Ｓｅｃｕｒｉｔｙ  Ａｇｅｎｔ）」という名称の特許文献１に詳細に記載されている。
【００２２】
上記のように、検出モジュール１１４は、悪意のあるアクティビティに関連付けられた閾値またはパターン１１８を判定してよく、パフォーマンスカウンタ１１２からカウント１１６を読み出してよく、かつ、カウント１１６を閾値またはパターン１１８と比較することによって、カウント１１６が悪意のあるアクティビティを示すか否かを判定してよい。一部の実施形態においては、検出モジュール１１４は、ある期間にわたってパフォーマンスカウンタ１１２を監視して、定期的にカウント１１６を読み出し、読みだされたカウント１１６を合成してよい。これらの合成されたカウント１１６は、パフォーマンスカウンタ１１２の典型的な値を記述し得る、また、検出モジュール１１４は、カウントおよび／または合成されたカウント１１６に少なくとも部分的に基づいて、閾値またはパターン１１８を設定してよい。さらなる実施形態においては、検出モジュール１１４は、パフォーマンスカウンタ１１２およびアクティブな１つまたは複数のプロセスを並行して監視することによって、各プロセス毎に、または、プロセスのクラスもしくは種類毎に、閾値またはパターン１１８を判定してよい。
【００２３】
検出モジュール１１４は、定期的に、または、１つまたは複数のトリガイベントの発生に応答して、パフォーマンスカウンタ１１２からカウント１１６をさらに読み出してよい。プロセッサ２０２は、アプリケーションプロセスまたはプラットフォームレベルプロセスがカウント１１６を取得するのを可能にするインタフェースを備えてよく、検出モジュール１１４は、そのインタフェースを利用してよい。カウント１１６を読み出すと、検出モジュール１１４は、カウント１１６を閾値またはパターン１１８と比較する。カウント１１６が閾値１１８を超える、または、パターン１１８と異なる場合、検出モジュール１１４は、カウント１１６は悪意のあるアクティビティを示すと判定し、それに応答して、応答モジュール１２０を呼び出す。閾値１１８が、プロセス、または、プロセスのクラスもしくは種類に固有の場合、検出モジュール１１４は、アクティブな１つまたは複数のプロセスを示すものを取得し、適切な閾値またはパターン１１８を選択してもよい。異なる閾値またはパターン１１８に関連付けられた複数のプロセスがアクティブな場合、検出モジュール１１４は、例えば、最高値の閾値またはパターン１１８を選択してよい。
【００２４】
様々な実施形態において、応答モジュール１２０は、検出モジュール１１４が検出した悪意のあるアクティビティに対する適切な応答を決定してよい。応答モジュール１２０は、警告モジュール２１２、報告モジュール２１４、修正モジュール２１６、および、分析モジュール２１８等、様々な応答に関連付けられた多くのモジュールを備えてよい。一部の実施形態においては、応答モジュール１２０はなくてもよく、モジュール２１２〜２１８が応答モジュール１２０の代わりをし、検出モジュール１１４に検出されて、呼び出される。応答モジュール１２０は、悪意のあるアクティビティに適切に対応するために、任意の１つまたは複数のモジュール２１２〜２１８を呼び出してよい。呼び出される１つまたは複数のモジュール２１２〜２１８は、応答モジュール１２０の設定または構成によって決まってよい。
【００２５】
警告モジュール２１２は、悪意のあるアクティビティに関して視覚、聴覚、または、触覚による警告をコンピュータ装置１０２のユーザに与えてよい。一部の実施形態においては、その警告は、単に、情報を提供するものである。他の実施形態においては、その警告は、報告モジュール２１４を呼び出す報告オプションや、修正モジュール２１６またはセキュリティエージェント２１０を呼び出す修正オプション等の、悪意のあるアクティビティに対応するための１つまたは複数オプションをユーザに提供してよい。
【００２６】
一部の実施形態においては、報告モジュール２１４は、悪意のあるアクティビティの報告を作成して、遠隔セキュリティサービスに送信してよい。報告モジュール２１４は、ユーザが報告オプションを選択したことに応答して、応答モジュール１２０または警告モジュール２１２によって呼び出されてよい。報告モジュール２１４が生成する報告は、カウント１１６、閾値もしくはパターン１１８、１つもしくは複数のアクティブなプロセスを示すもの、並びに／または、コールスタック１０４および／もしくはシャドーコールスタック１１０の状態に関する情報を含んでよい。  
【００２７】
様々な実施形態において、修正モジュール２１６は、１つまたは複数のアクティブなプロセスを中断してよい。修正モジュール２１６は、ユーザが修正オプションを選択したことに応答して、応答モジュール１２０または警告モジュール２１２によって呼び出されてよい。一部の実施形態においては、１つまたは複数のアクティブなプロセスの中断に先立って、修正モジュール２１６は、ユーザが１つまたは複数のアクティブなプロセスを中断したいか否かをユーザに尋ねてよい。ユーザが１つまたは複数のアクティブなプロセスの中断を選択する場合、修正モジュール２１６は、そのプロセスを中断してよい。
【００２８】
さらなる実施形態においては、分析モジュール２１８は、１つまたは複数のアクティブなプロセスに関連付けられた情報を判定してよく、かつ、判定された情報を分析してよい。例えば、セキュリティエージェント２１０、または、他のコンピュータ装置のコンポーネントが、１つまたは複数のアクティブなプロセスの実行アクティビティのモデルを保持している場合、分析モジュール２１８は、そのアクティブな１つまたは複数のプロセスに関連付けられた情報を読み出して、その情報をモデルと比較してよい。このような分析によって、悪意のあるアクティビティが生じているという判定を確認し得る実行フローにおける相違を検出してよい。次に、分析モジュール２１８は、１つまたは複数のアクティブなプロセスの実行アクティビティを監視してもよく、監視を行うセキュリティエージェント２１０または他のコンピュータ装置のコンポーネントを呼び出してもよい。このような監視によって、コンピュータ装置１０２は、悪意のあるアクティビティの検出後、その悪意のあるアクティビティに関するさらなる情報の取得が可能になる。
【００２９】
コンピュータ装置１０２は、例えば、磁気ディスク、光ディスク、もしくは、テープなどの追加のデータ記憶装置（取り外し可能、および／または、取り外しできない）も備える。このような追加の記憶装置は、取り外し可能な記憶装置２２０および取り外しできない記憶装置２２２として図２に示される。有形のコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または、他のデータなどの情報を記憶するための任意の方法または技術で実装される、揮発性および不揮発性、取り外し可能および取り外しできない媒体を含んでよい。システムメモリ２０８、取り外し可能な記憶装置２２０、および、取り外しできない記憶装置２２２は、全て、有形のコンピュータ可読媒体の例である。有形のコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、もしくは、他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）、もしくは、他の光記憶媒体、磁気カセット、磁気テープ、磁気ディスク記憶装置、もしくは、他の磁気記憶装置、または、所望の情報を記憶するのに用いることができ、かつ、コンピュータ装置１０２がアクセスできる任意の他の有形媒体を含むが、それらに限定されない。このような有形のコンピュータ可読媒体は、コンピュータ装置１０２の一部であってよい。
【００３０】
コンピュータ装置１０２は、キーボード、マウス、タッチディスプレイ、音声入力装置等の１つまたは複数の入力装置２２４と、ディスプレイ、スピーカ、プリンタ等の１つまたは複数の出力装置２２６も有する。これらの装置は、当分野では周知なので、ここで詳細に説明する必要はない。
【００３１】
コンピュータ装置１０２は、コンピュータ装置１０２が遠隔セキュリティサービスまたは敵のシステム等の他のコンピュータ装置２３０と通信するのを可能にする通信接続２２８も含む。
【００３２】
（ネットワークの例）
図３は、ＲＯＰ１０６を用いて脆弱性を悪用（エクスプロイト）する敵３０４と、セキュリティエクスプロイトに感染したコンピュータ装置１０２と、セキュリティエクスプロイトを検出、監視、および／もしくは、それに対応するように構成された遠隔セキュリティサービス３０６と、を接続する例示のネットワーク３０２を示す。
【００３３】
一部の実施形態においては、ネットワーク３０２は、有線ネットワーク、無線ネットワーク、および、有線ネットワークと無線ネットワークの組み合わせ等の、任意の１つまたは複数のネットワークを含んでよい。さらに、ネットワーク３０２は、複数の異なる種類のパブリックもしくプライベートネットワーク（例えば、ケーブルネットワーク、インターネット、無線ネットワーク等）の任意の１つ、または、任意の組み合わせを含んでよい。一部の例においては、コンピュータ装置は、保護プロトコル（例えば、ｈｔｔｐｓ）、並びに／または、任意の他のプロトコル、もしくは、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）等のプロトコルのセットを用いて、ネットワーク３０２を介して通信する。
【００３４】
様々な実施形態において、敵のシステム３０４および遠隔セキュリティサービス３０６はそれぞれ、サーバもしくはサーバファーム、複数の分散サーバファーム、メインフレーム、ワークステーション、パーソナルコンピュータ（ＰＣ）、ラップトップコンピュータ、タブレットコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、携帯電話、メディアセンタ、埋め込みシステム、または、任意の他の種類の１つもしくは複数の装置であってもよく、それらを含んでもよい。一実装においては、遠隔セキュリティサービス３０６のコンピュータ装置は、クラウドコンピュータネットワークのノード等、通信して動作する複数のコンピュータ装置を表す。複数のコンピュータ装置で実装されると、遠隔セキュリティサービス３０６は、その複数のコンピュータ装置間に検出モジュール１１４と応答モジュール１２０を分散してよい。一部の実装においては、１つまたは複数の敵のシステム３０４および遠隔セキュリティサービス３０６は、１つまたは複数のコンピュータ装置上で実装される１つまたは複数の仮想マシンを表す。
【００３５】
一部の実施形態においては、敵のシステム３０４は、メモリ破損脆弱性などの脆弱性を悪用（エクスプロイト）して敵のシステム３０４がコールスタック１０４に対して制御またはスプーフィングを行うのを可能にするＲＯＰ１０６を用いるように構成された任意のコンピュータ装置であってよい。上記のように、ＲＯＰ１０６は、全てコンピュータ装置１０２上で実行する場合もあり、敵のシステム３０４を通して遠隔で制御される場合もある。このような遠隔制御には、敵のシステム３０４が、そのユーザに提供したコマンドシェルまたは他のインタフェースを含み得る。
【００３６】
様々な実施形態において、遠隔セキュリティサービス３０６は、コンピュータ装置１０２に監視サービス、構成サービス、および、回復サービスを提供してよい。このようなサービスは、例えば、セキュリティエージェント２１０の構成もしくは再構成、セキュリティエージェント２１０のインストール、コンピュータ装置からの報告および警告の受信、並びに／または、回復、エージェントの再構成、もしくは、さらなる監視を行って、警告もしくは報告に対応することを含んでよい。一部の実施形態においては、図のように、遠隔セキュリティサービス３０６は、検出モジュール１１４および応答モジュール１２０の１つもしく両方の一部もしくは全てを含んでよく、上記の方法でその１つまたは複数のモジュールを実行してよい。検出モジュール１１４を実装する時、遠隔セキュリティサービス３０６は、パフォーマンスカウンタ１１２からカウント１１６を読み出すように構成されたコンピュータ装置１０２の論理と通信することによって、遠隔セキュリティサービス３０６の検出モジュール１１４は、その論理からカウント１１６を読み出すことができる。このような遠隔セキュリティサービス３０６の例は、特許文献１に詳細に記載されている。
【００３７】
さらなる実施形態においては、遠隔セキュリティサービス３０６は、同一のエンティティまたは種々のエンティティと関連付けられた複数のクライアントコンピュータ装置１０２を接続するコラボレーションサービスを提供してよい。このようなコラボレーションサービスは、受信した警告または報告を１つのコンピュータ装置１０２から他のコンピュータ装置１０２にリレーしてもよく、グループのメンバーの１人からの警告または報告に基づいて、新しい構成または監視プロセスを生成し、グループ全体に適用してよい。このようなコラボレーションサービスを提供する遠隔セキュリティサービス３０６の例は、２０１２年６月２９日出願の「グループにおけるセキュリティ情報のソーシャルシェアリング（Ｓｏｃｉａｌ  Ｓｈａｒｉｎｇ  ｏｆ  Ｓｅｃｕｒｉｔｙ  Ｉｎｆｏｒｍａｔｉｏｎ  ｉｎ  ａ  Ｇｒｏｕｐ）」という名称の特許文献２に詳細に記載されている。
【００３８】
（プロセスの例）
図４は、プロセス４００の例を示す。このプロセスは、論理フローグラフとして示され、グラフの各動作は、ハードウェア、ソフトウェア、または、それらの組み合わせで実装できる一連の動作を表す。ソフトウェアという文脈において、動作とは、１つまたは複数のプロセッサによって実行されて記載された動作を行う、１つまたは複数のコンピュータ可読記憶媒体に記憶されたコンピュータ実行可能命令を表す。一般に、コンピュータ実行可能命令は、特定の機能を行ったり、特定の抽象データ型を実装したりする、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。動作が記載されている順番は、限定のためと解釈してはならない。プロセスを実装するにあたって、任意の数の記載した動作を、任意の順番で、および／または、並行して、組み合わせることができる。
【００３９】
図４は、コールスタックに関連する予測不一致のカウントを読み出し、そのカウントが悪意のあるアクティビティを示すと判定し、それに応答して、少なくとも１つのセキュリティ応答アクションを行う例示のプロセスを示す。プロセス４００は、４０２において、予測不一致の閾値またはパターンを決定することを含む。予測不一致の閾値またはパターンは、コンピュータ装置のコールスタックと、コンピュータ装置のプロセッサのキャッシュメモリに実装されているシャドーコールスタックとの比較から生じると見込まれる予測不一致の数またはパターンを示すものであってよい。コンピュータ装置は、例えば、予測不一致に関するプロセッサパフォーマンスカウンタのカウントを経時的に監視することによって、閾値またはパターンを決定してよい。また、一部の実施形態においては、コンピュータ装置は、異なるプロセスまたはプロセスのクラス毎に、異なる閾値またはパターンを利用してよい。
【００４０】
４０４において、コンピュータ装置は、プロセッサパフォーマンスカウンタから予測不一致のカウントを読み出してよい。４０６において、コンピュータ装置は、次に、カウントと閾値またはパターンとの比較に少なくとも部分的に基づいて、そのカウントがＲＯＰ等の悪意のあるアクティビティを示すか否かを判定してよい。
【００４１】
４０８において、カウントは悪意のあるアクティビティを示すという判定に応答して、コンピュータ装置は、１つまたは複数のセキュリティ応答アクションを決定してよい。４１０において、そのセキュリティ応答アクションは、グラフィック、聴覚、または、触覚による警告をコンピュータ装置のユーザに提供することを含んでよい。４１２において、セキュリティ応答アクションは、遠隔セキュリティ監視サーバに悪意のあるアクティビティを知らせることを含んでよい。４１４〜４１６において、セキュリティ応答アクションは、１つまたは複数のプロセスを中断すべきか否かをコンピュータ装置のユーザに尋ねること（４１４）と、１つまたは複数のプロセスを中断すること（４１６）を含んでよい。４１８〜４２２において、セキュリティ応答は、１つまたは複数のプロセスに関連付けられた情報を判定すること（４１８）と、判定した情報を分析すること（４２０）とを含んでよい。４２２において、コンピュータ装置は、次に、１つまたは複数のプロセスに関連付けられた実行アクティビティを監視してよい。
【００４２】
様々な実施形態において、ブロック４０２〜４２２に示す動作は、悪意のあるアクティビティに侵されたコンピュータ装置によって、遠隔セキュリティサービスによって、または、そのコンピュータ装置および遠隔セキュリティサービスのそれぞれによって部分的に、行われ得る。
【００４３】
（結論）
発明の内容は、構造的特徴、および／または、方法的行為に固有の言葉で記載したが、請求項で特定する発明の内容は、ここに記載した具体的な特徴、行為に必ずしも限定されないことは理解されたい。記載した具体的な特徴および行為は、請求項を実施する例示の形態として開示したものである。
【図１】
2015527680.tif 000003
【図２】
2015527680.tif 000004
【図３】
2015527680.tif 000005
【図４】
2015527680.tif 000006
【国際調査報告】
2015527680.tif 000007
2015527680.tif 000008
2015527680.tif 000009