(57)【特許請求の範囲】
【請求項１】
不正メモリアクセスを検出するためのコンピューティングデバイスであって、
トランザクショナルメモリサポートを含むプロセッサと、
セキュリティ支援スレッドモジュールと、
（ｉ）セキュリティイベントがトランザクションアボートの検出に応答して生じたかどうかを判定し、（ｉｉ）セキュリティイベントが生じたという判定に応答してセキュリティオペレーションを実行するセキュリティレスポンスモジュールと
を備え、
前記セキュリティ支援スレッドモジュールは、
前記コンピューティングデバイスのセキュリティ支援スレッドによって、前記プロセッサの前記トランザクショナルメモリサポートを用いてトランザクションを開始し、
前記セキュリティ支援スレッドによって、前記トランザクションの前記開始に応答して、監視メモリ位置に書き込み、
前記監視メモリ位置への前記書き込みに応答して、前記トランザクションのトランザクションアボートを検出し、
前記トランザクションアボートは、前記監視メモリ位置の読み取りによって引き起こされ、前記読み取りは、前記トランザクションの外部で発生する、
コンピューティングデバイス。
【請求項２】
前記セキュリティ支援スレッドを開始するセキュリティモジュールをさらに備え、
前記トランザクションを開始することは、前記セキュリティ支援スレッドの前記開始に応答して前記トランザクションを開始することを含む、
請求項１に記載のコンピューティングデバイス。
【請求項３】
前記監視メモリ位置は、メモリマップトオペレーティングシステムライブラリの一部を含む、
請求項１に記載のコンピューティングデバイス。
【請求項４】
前記監視メモリ位置は、実行可能イメージの一部を含む、
請求項１に記載のコンピューティングデバイス。
【請求項５】
前記監視メモリ位置は、オペレーティングシステムのカーネルデータ構造の一部を含む、
請求項１に記載のコンピューティングデバイス。
【請求項６】
前記トランザクションアボートを検出することは、前記監視メモリ位置への前記書き込みに応答して、前記トランザクションのコミットなしで、前記セキュリティ支援スレッドが待機することを含む、
請求項１に記載のコンピューティングデバイス。
【請求項７】
前記セキュリティ支援スレッドモジュールはさらに、前記トランザクションアボートの前記検出に応答して、トランザクションアボートハンドラを実行し、
前記トランザクションアボートハンドラを実行することは、セキュリティイベントが生じたかどうかを判定することを含む、
請求項１に記載のコンピューティングデバイス。
【請求項８】
前記セキュリティイベントが生じたかどうかを判定することは、前記コンピューティングデバイスのパフォーマンス監視ユニットから検索された競合データ位置の第１メモリアドレスと、前記監視メモリ位置の第２メモリアドレスとを比較することを含む、
請求項１から７のいずれか一項に記載のコンピューティングデバイス。
【請求項９】
前記セキュリティイベントが生じたかどうかを判定することは、前記コンピューティングデバイスのアボート状態レジスタに基づいて前記トランザクションアボートの原因を判定することを含む、
請求項１から７のいずれか一項に記載のコンピューティングデバイス。
【請求項１０】
前記セキュリティオペレーションを実行することは、前記セキュリティイベントを報告することを含む、
請求項１から７のいずれか一項に記載のコンピューティングデバイス。
【請求項１１】
前記セキュリティオペレーションを実行することは、前記コンピューティングデバイスを停止することを含む、
請求項１から７のいずれか一項に記載のコンピューティングデバイス。
【請求項１２】
前記セキュリティ支援スレッドモジュールはさらに、前記セキュリティ支援スレッドによって、セキュリティイベントが生じていないという判定に応答して、前記トランザクションを再開する、
請求項１から７のいずれか一項に記載のコンピューティングデバイス。
【請求項１３】
前記セキュリティモジュールはさらに、前記トランザクションアボートの検出に応答して第２セキュリティ支援スレッドを開始し、
前記セキュリティ支援スレッドモジュールはさらに、
前記コンピューティングデバイスの前記第２セキュリティ支援スレッドによって、前記コンピューティングデバイスの前記プロセッサのトランザクショナルメモリサポートを用いて第２トランザクションを開始し、
前記第２セキュリティ支援スレッドによって、前記第２トランザクションの前記開始に応答して前記監視メモリ位置に書き込む、
請求項２に記載のコンピューティングデバイス。
【請求項１４】
不正メモリアクセスを検出するための方法であって、
コンピューティングデバイスのセキュリティ支援スレッドが、前記コンピューティングデバイスのプロセッサのトランザクショナルメモリサポートを用いてトランザクションを開始する段階と、
前記セキュリティ支援スレッドが、前記トランザクションの開始に応答して、監視メモリ位置に書き込む段階と、
前記コンピューティングデバイスが、前記監視メモリ位置への書き込みに応答して、前記トランザクションのトランザクションアボートを検出する段階であって、前記トランザクションアボートは、前記監視メモリ位置の読み取りによって引き起こされ、前記読み取りは、前記トランザクションの外部で発生する、段階と、
前記コンピューティングデバイスが、前記トランザクションアボートの検出に応答してセキュリティイベントが生じたかどうかを判定する段階と、
前記コンピューティングデバイスが、セキュリティイベントが生じたとの判定に応答してセキュリティオペレーションを実行する段階と
を備える方法。
【請求項１５】
前記コンピューティングデバイスが、前記セキュリティ支援スレッドを開始する段階をさらに備え、前記トランザクションを開始する段階は、前記セキュリティ支援スレッドの開始に応答して前記トランザクションを開始する段階を含む、
請求項１４に記載の方法。
【請求項１６】
前記監視メモリ位置は、メモリマップトオペレーティングシステムライブラリの一部を含む、
請求項１４に記載の方法。
【請求項１７】
前記監視メモリ位置は、実行可能イメージの一部を含む、
請求項１４に記載の方法。
【請求項１８】
前記監視メモリ位置は、オペレーティングシステムカーネルデータ構造の一部を含む、
請求項１４に記載の方法。
【請求項１９】
前記トランザクションアボートを検出する段階は、前記監視メモリ位置への書き込みに応答して前記トランザクションをコミットしないで、前記セキュリティ支援スレッドが待機する段階を含む、
請求項１４に記載の方法。
【請求項２０】
前記コンピューティングデバイスが、前記トランザクションアボートの検出に応答して、トランザクションアボートハンドラを実行する段階をさらに備え、
前記トランザクションアボートハンドラを実行する段階は、前記セキュリティイベントが生じたかどうかを判定する段階を含む、
請求項１４に記載の方法。
【請求項２１】
前記セキュリティイベントが生じたかどうかを判定する段階は、前記コンピューティングデバイスのパフォーマンス監視ユニットから検索された競合データ位置の第１メモリアドレスと、前記監視メモリ位置の第２メモリアドレスとを比較する段階を含む、
請求項１４に記載の方法。
【請求項２２】
前記トランザクションアボートの検出に応答して、コンピューティングデバイスが、第２セキュリティ支援スレッドを開始する段階と、
前記コンピューティングデバイスの前記第２セキュリティ支援スレッドが、前記コンピューティングデバイスの前記プロセッサのトランザクショナルメモリサポートを用いて第２トランザクションを開始する段階と、
前記第２トランザクションの開始に応答して、前記第２セキュリティ支援スレッドが、前記監視メモリ位置に書き込む段階と
をさらに備える請求項１４に記載の方法。
【請求項２３】
プロセッサと、
前記プロセッサにより実行された場合、コンピューティングデバイスに請求項１４から２２のいずれか一項に記載の方法を実行させる複数の命令を格納したメモリと
を備える、コンピューティングデバイス。
【請求項２４】
コンピューティングデバイスに、請求項１４から２２のいずれか一項に記載の方法を実行させるためのプログラム。
【請求項２５】
請求項１４から２２のいずれか一項に記載の方法を実行するための手段を備えるコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願に対する相互参照］  本出願は、「プロセッサトランザクショナルメモリサポートを用いるメモリアクセス保護」と題する米国実用特許出願第１４／６７０，９８２号に対し優先権を主張するもので、この米国実用特許出願は、２０１５年３月２７日に出願され、２０１４年１２月３１日に出願された「プロセッサトランザクショナルメモリサポートを用いるメモリアクセス保護」と題する米国仮特許出願第６２／０９８，６４１号に対し米国特許法第１１９条（３５  Ｕ．Ｓ．Ｃ．  §１１９（ｅ））の下で優先権を主張する。
【背景技術】
【０００２】
コンピュータセキュリティの１つの態様は、「マルウェア」として既知でもある悪意のあるソフトウェアからコンピュータシステムを保護することを含む。マルウェアは多くの形態でやってくる。しかしながら、多くの一般的な様々なマルウェアは、コンピュータメモリの不正位置への読み取りまたは他のアクセスを実行する。例えば、特定のマルウェアはコンピュータメモリをスキャンし、システムＡＰＩにアクセスするために役立つライブラリまたは他のコードを突き止める。したがって、一連の異常なメモリの読み取りが、悪意のあるアクティビティに対しての役立つインジケータであり得る。不正読み取りは、ページベースの例外（すなわち、ページフォールト）を用いて検出され得る。ページベースの例外を用いた不正読み取りの検出は通常、オペレーティングシステムおよび／またはハイパーバイザサポートを必要とし、比較的粗い精度（例えば、４ｋメモリページ毎）で読み取りを検出し得るに過ぎない。
【０００３】
いくつかのコンピュータプロセッサは、ハードウェアトランザクショナルメモリ用のサポートを提供する。トランザクショナルメモリは、プログラマが「トランザクション」と呼ばれるコードセグメントを指定するのを可能にし、独立してアトミックに実行する。すなわち、トランザクション内で発生しているメモリ操作は、トランザクションがうまくコミットされるまでコンピューティングシステムにて実行中の他のトランザクションまたはスレッドには見えない。うまくコミットされた後、トランザクション中になされた全てのメモリ変更が、システム上の他のスレッドに対して即座に利用可能である。トランザクショナルメモリは、トランザクションを推測で実行し、トランザクションの実行中に生じる任意のメモリ競合を検出し、次にメモリ競合に応答してトランザクションをアボートおよびロールバックことにより実装され得る。メモリ競合は、例えば、別のトランザクションによって既に読み取られている、または書き込まれているメモリ位置に書き込もうとするトランザクションを含む。トランザクショナルメモリは、並列計算用にプログラミングモデルを簡略化し得る。ハードウェアトランザクショナルメモリサポートの１つの市販の例は、インテル（登録商標）社によって製造される特定のプロセッサで利用可能な「Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  Ｅｘｔｅｎｓｉｏｎｓ」（インテル（登録商標）ＴＳＸ）である。２０１３年１２月１７日に出願された審査係属中の出願ＰＣＴ／ＵＳ２０１３／０７５８０５、および２０１４年３月２８日に出願された米国出願第１４／２２８，８４２号は、ハードウェアトランザクショナルメモリサポートを用いて不正メモリ書き込み（メモリ修正）を検出するための２つの技術を説明する。
【図面の簡単な説明】
【０００４】
本明細書において説明される概念は、添付の図面において限定としてではなく、例として図示されている。説明を簡潔かつ明確にするために、図に示した要素は必ずしも縮尺通りに描かれていない。適切と見なされる場合、参照ラベルは相当または類似の要素を示すべく複数の図面の間で繰り返されている。
【０００５】
【図１】不正メモリアクセスの検出用のコンピューティングデバイスの少なくとも１つの実施形態の簡略ブロック図である。
【０００６】
【図２】図１のコンピューティングデバイスの環境の少なくとも１つの実施形態の簡略ブロック図である。
【０００７】
【図３】図１および図２のコンピューティングデバイスによって実行され得る不正メモリアクセスを検出するための方法の少なくとも１つの実施形態の簡略フロー図である。
【発明を実施するための形態】
【０００８】
本開示の概念では、様々な変更形態および代替形態が可能であるが、それらの具体的な実施形態は、図面において例として示されており、本明細書において詳細に説明されない。しかしながら、本開示の概念を開示される特定の形態に限定する意図は無く、それどころか、本開示および添付の特許請求の範囲と相反しない全ての変更、均等物および代替案を包含する意図であることを理解されるべきである。
【０００９】
本明細書において「一実施形態」、「実施形態」、「例示的な実施形態」等を参照する場合、説明される実施形態が特定の特徴、構造、または特性を含み得ることを示すが、あらゆる実施形態は、当該特定の特徴、構造、または特性を含み得、または必ずしも含むわけではない場合がある。さらに、そのような文言が必ずしも同じ実施形態を指しているわけではない。さらに、特定の特徴、構造、または特性が実施形態に関連して説明される場合、明示的に説明されているか否かにかかわらず、他の実施形態に関連してそのような特徴、構造、または特性をもたらすことは当業者の知識の範囲内であると考えられる。加えて、「少なくとも１つのＡ、ＢおよびＣ」という形の一覧に含まれているアイテムは、（Ａ）、（Ｂ）、（Ｃ）、（ＡおよびＢ）、（ＡおよびＣ）、（ＢおよびＣ）、または、（Ａ、ＢおよびＣ）を意味し得ることが理解されるべきである。同様に、「Ａ、ＢまたはＣの少なくとも１つ」という形で列挙されているアイテムは、（Ａ）、（Ｂ）、（Ｃ）、（ＡおよびＢ）、（ＡおよびＣ）、（ＢおよびＣ）、または、（Ａ、ＢおよびＣ）を意味し得る。
【００１０】
開示される実施形態は、場合によっては、ハードウェア、ファームウェア、ソフトウェア、または、それらの任意の組み合わせにおいて実装されてもよい。開示される実施形態はまた、１または複数のプロセッサによって読み取られて実行され得る、１または複数の一時的または非一時的機械可読（例えばコンピュータ可読）記憶媒体によって保持または格納される命令として実装されてもよい。機械可読記憶媒体は、情報を機械で読み取り可能な形で格納または送信する、任意のストレージデバイス、メカニズム、または、他の物理的構造として具現化されてもよい（例えば、揮発性若しくは不揮発性メモリ、メディアディスク、または、他のメディアデバイス）。
【００１１】
図面において、いくつかの構造的または方法的な特徴は、特定の配置および／または順序で示され得る。しかしながら、そのような特定の配置および／または順序が必要とされなくてもよいことが理解されるべきである。むしろ、いくつかの実施形態において、そのような特徴は、例示的な図面で示されるものと異なる方法および／または順序で配置されてもよい。加えて、特定の図面において構造的または方法的な特徴を含ませることは、そのような特徴が全ての実施形態において必要とされることを示唆するつもりではなく、いくつかの実施形態においては含まれなくてもよく、または、他の特徴と組み合わされてもよい。
【００１２】
ここで、図１を参照すると、例示的なコンピューティングデバイス１００は、１または複数の監視メモリ領域への不正読み取りアクセスの検出のために使用され得る。コンピューティングデバイス１００は、コンピューティングデバイス１００のプロセッサのハードウェアトランザクショナルメモリサポートを用いてトランザクションを開始するセキュリティースレッドを実行する。トランザクション中に、コンピューティングデバイス１００は、トランザクションをコミットしないで、１または複数の監視メモリ領域に書き込む。すなわち、コンピューティングデバイス１００は、監視メモリ領域への１または複数の「コミットされていない上書き」を実行する。監視メモリ領域に対する変更は、コンピューティングデバイス１００によって実行される他のスレッドには見えない。別のスレッドから発生する監視メモリ領域と関連付けられたキャッシュラインへのあらゆる読み取りアクセスは、直ちにセキュリティースレッドのアボートを引き起こす。アボートに応答して、コンピューティングデバイス１００は、セキュリティ解析を実行し、適切なセキュリティレスポンスを発生し得る。したがって、コンピューティングデバイス１００はハードウェアサポートを用いて不正なメモリ読み取りを監視することができる。加えて、コンピューティングデバイス１００は、かなり粗いメモリページレベルではなくて、キャッシュラインレベル（例えば、６４バイト）でメモリを監視する。不正読み取りに対する瞬時の反応により、不正利用に対する時間ウィンドウを減少させることができる。さらに、コンピューティングデバイス１００は、ソフトウェアにて柔軟なハードウェアレベルのメモリモニターの作成を可能にすることによって使いやすさを改善し得る。
【００１３】
コンピューティングデバイス１００は、本明細書に説明される機能を実行するための任意の種類のデバイスとして具現化され得る。例えば、コンピューティングデバイス１００は、本明細書に説明される機能を実行するように構成されたデスクトップコンピュータ、サーバコンピュータ、ワークステーション、ラップトップコンピュータ、ノートブックコンピュータ、モバイルコンピューティングデバイス、スマートフォン、タブレットコンピュータ、携帯電話、ハンドセット、メッセージングデバイス、ウェアラブルコンピューティングデバイス、車両テレマティクスデバイス、分散コンピューティングシステム、マルチプロセッサシステム、消費者向け電子デバイス、および／またはその他のコンピューティングデバイスとして具現化され得るが、これらに限定されない。図１に示されるように、例示的なコンピューティングデバイス１００は、プロセッサ１２０、入力／出力サブシステム１２６、メモリ１２８、およびデータストレージデバイス１３４を含む。もちろん、他の実施形態において、コンピューティングデバイス１００は、デスクトップコンピュータにおいて一般に見られるもの（例えば、様々な入力／出力デバイス）等の他のまたは追加のコンポーネントを含んでもよい。加えて、いくつかの実施形態において、例示的なコンポーネントの１または複数のものは、別のコンポーネントに組み込まれ、またはそうでなければこの一部を形成し得る。例えば、メモリ１２８、またはその一部は、いくつかの実施形態において、プロセッサ１２０に組み込まれ得る。
【００１４】
プロセッサ１２０は、本明細書において説明される機能を実行することが可能である任意の種類のプロセッサとして具現化され得る。例示的なプロセッサ１２０は、マルチコアプロセッサである。しかしながら、他の実施形態において、プロセッサ１２０は、単一またはマルチコアプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラまたは他のプロセッサまたは処理／制御回路として具現化され得る。例示的なプロセッサ１２０は４つのプロセッサコア１２２を含み、各々はプログラムされた命令を実行可能な独立した処理ユニットである。例示的なプロセッサ１２０は、４つのプロセッサコア１２２を含むが、プロセッサ１２０は、他の実施形態においてより少ないまたはより多い数のプロセッサコア１２２を含み得る。加えて、例示的なコンピューティングデバイス１００は、単一のプロセッサ１２０を含むが、いくつかの実施形態において、コンピューティングデバイス１００は、１つよりも多くのプロセッサ１２０を含み得る。例えば、コンピューティングデバイス１００は、共有メモリ相互接続を備えた対称型マルチプロセッシングシステムとして具現化され得る。
【００１５】
例示的なプロセッサ１２０はさらに、ハードウェアトランザクショナルメモリサポート１２４を含み、これはプロセッサ１２０がトランザクションとして知られるコードセグメントを投機的に実行するのを可能にする。トランザクションは、アトミックであり、これはトランザクションが未決定の間にトランザクションによって実行されるメモリ操作が、他のトランザクション、コア１２２、論理プロセッサおよび／またはプロセッサ１２０のスレッドに対して見えないことを意味する。コミット済みとしても知られる、トランザクションが完了した場合、このトランザクションのメモリ操作の全てが直ちにコンピューティングデバイス１００のその他のものに対して利用可能となる。トランザクション内のメモリアクセスが、別のトランザクションまたはスレッドと競合する場合、例えば、スレッドがコミットされていないトランザクションによって書き込まれたメモリ位置から読み取られる場合（または、２つのトランザクションおよび／またはスレッドが同じメモリ位置に書き込まれる場合）、プロセッサ１２０は競合しているトランザクションをアボートし得、関連付けられた進行中のあらゆるトランザクショナルメモリの変更を破棄する。特に、プロセッサ１２０は、トランザクションがコミットしようとするのを待つことなく、メモリ競合を検出した時点で直ちに競合するトランザクションを「積極的に」アボートし得る。プロセッサ１２０は、熱心な競合検出を実装すべくキャッシュコヒーレンシ機構を使用し得る。プロセッサ１２０は、例えば、キャッシュライン毎、ワード毎、またはメモリセル毎に、任意の粒度レベルで、メモリ位置の競合を検出し得る。アボート時に、プロセッサ１２０は、アボートハンドラを呼び出しても、トランザクション（一回または複数回）を再開しても、またはアボートされたトランザクションに応答して非トランザクションフォールバックコードを発動してもよい。いくつかの実施形態において、トランザクショナルメモリサポート１２４は、インテル（登録商標）社製の特定のプロセッサ１２０で利用可能な「Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  Ｅｘｔｅｎｓｉｏｎｓ」（インテル（登録商標）ＴＳＸ）として具現化され得る。
【００１６】
メモリ１２８は、本明細書で説明される機能を実行可能な、任意の種類の揮発性若しくは不揮発性メモリまたはデータストレージとして具現化されてもよい。動作時に、メモリ１２８は、オペレーティングシステム、アプリケーション、プログラム、ライブラリ、およびドライバ等のコンピューティングデバイス１００の動作中に使用される様々なデータおよびソフトウェアを格納し得る。例示的なメモリ１２８は、１または複数の監視メモリ領域１３０およびアボートハンドラ１３２を含む。さらに以下に述べられるように、監視メモリ領域１３０は、不正試行されたメモリアクセスに対し監視される特定のメモリ領域である。そのような監視メモリ領域１３０は、ロードされたまたはメモリマップされたライブラリ、実行可能イメージ、カーネルデータ構造または他の重要なメモリ領域を含み得る。アボートハンドラ１３２は、さらに以下に述べられるように、潜在的なセキュリティ侵害を処理すべく、トランザクションアボートのイベント時に呼び出される１つのルーチンまたは複数のルーチンを含み得る。
【００１７】
メモリ１２８はＩ／Ｏサブシステム１２６を介してプロセッサ１２０に通信可能に結合され、Ｉ／Ｏサブシステム１２６は、コンピューティングデバイス１００のプロセッサ１２０、メモリ１２８、および他のコンポーネントとの入力／出力動作を容易にする回路および／またはコンポーネントとして具現化され得る。例えば、Ｉ／Ｏサブシステム１２６は、メモリコントローラハブ、入出力制御ハブ、ファームウェアデバイス、通信リンク（すなわち、ポイントツーポイントリンク、バスリンク、ワイヤ、ケーブル、光ガイド、プリント回路基板の配線等）および／または入力／出力動作を容易にする他のコンポーネント、ならびにサブシステムとして具現化され、またはそうでなければこれらを含み得る。いくつかの実施形態において、Ｉ／Ｏサブシステム１２６は、システムオンチップ（ＳｏＣ）の部分を形成し得、コンピューティングデバイス１００のプロセッサ１２０、メモリ１２８および他のコンポーネントと共に、単一の集積回路チップ上に組み込まれ得る。
【００１８】
データストレージデバイス１３４は、例えば、メモリデバイスおよび回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、または他のデータストレージデバイス等のデータの短期的もしくは長期的な保存のために構成された任意の種類の１または複数のデバイスとして具現化され得る。データストレージデバイス１３４は、オペレーティングシステムソフトウェアおよびアプリケーションソフトウェアを含む実行用のソフトウェアまたは他のデータを格納するために使用され得る。そのようなソフトウェアは、例えば、第三者のベンダからダウンロードされた、最初は信頼されない、潜在的に悪意のあるソフトウェアであり得る。
【００１９】
コンピューティングデバイス１００はさらに、通信サブシステム１３６を含み、これは、任意の通信回路、デバイスまたはそれらの集合として具現化され、コンピューティングデバイス１００とリモートコンピューティングデバイスとの間の通信を可能とすることができる。通信サブシステム１３６は、そのような通信を達成すべく、任意の１または複数の通信技術（例えば、無線または有線通信）および関連したプロトコル（例えば、イーサネット（登録商標）、ブルートゥース（登録商標）、Ｗｉ−Ｆｉ（登録商標）、ＷｉＭＡＸ（登録商標）、ＨＳＰＡ＋、ＬＴＥなど）を使用するように構成され得る。通信サブシステム１３６は、無線ネットワークアダプタを含むネットワークアダプタとして具現化され得る。
【００２０】
例示的な実施形態において、コンピューティングデバイス１００はさらに、ディスプレイ１３８を含む。コンピューティングデバイス１００のディスプレイ１３８は、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ），プラズマディスプレイ、ブラウン管（ＣＲＴ）、または他の種類のディスプレイデバイス等のデジタル情報を表示することが可能な任意の種類のディスプレイとして具現化され得る。ディスプレイ１３８は、例えば、セキュリティ解析の結果をユーザに伝えるために使用され得る。
【００２１】
ここで図２を参照すると、例示的な実施形態において、コンピューティングデバイス１００は、動作中に環境２００を確立する。例示的な環境２００は、セキュリティモジュール２０２、セキュリティ支援スレッドモジュール２０４およびセキュリティレスポンスモジュール２０８を含む。環境２００の様々なモジュールは、ハードウェア、ファームウェア、ソフトウェア、または、それらの組み合わせとして具現化されてもよい。例えば、環境２００の様々なモジュール、ロジックおよび他のコンポーネントは、コンピューティングデバイス１００のプロセッサ１２０または他のハードウェアコンポーネントの部分を形成し得、あるいは別の方法でコンピューティングデバイス１００のプロセッサ１２０または他のハードウェアコンポーネントによって確立され得る。このため、いくつかの実施形態において、環境２００のモジュールのうち任意の１または複数のものは、電気デバイスの回路または集合（例えば、セキュリティ回路、セキュリティ支援スレッド回路など）として具現化され得る。
【００２２】
セキュリティモジュール２０２は、監視メモリ領域１３０を監視すべく１または複数のセキュリティ支援スレッド２０６を開始するように構成される。セキュリティモジュール２０２は、監視メモリ領域１３０にアクセスできる任意のセキュリティソフトウェアとして具現化され得、１または複数のオペレーティングシステム、ハイパーバイザ、オペレーティングシステムモジュール、ドライバ、信頼済みコードまたは他のセキュリティソフトウェアとして具現化され得る。各セキュリティ支援スレッド２０６は、オペレーティングシステムスレッド、軽量プロセス、オペレーティングシステムプロセス、オペレーティングシステムカーネルスレッド、またはユーザソフトウェアスレッド等の、コンピューティングデバイス１００のコア１２２または論理プロセッサ上で実行可能な任意の独立した実行スレッドとして具現化され得る。作成時、各セキュリティ支援スレッド２０６は、監視メモリ領域１３０、または監視メモリ領域１３０の一部のアドレスを供給され得る。いくつかの実施形態において、セキュリティ支援スレッド２０６は新たに作成されるのではなく、スレッドプールから選択される、または別の方法で事前に生成され得る。
【００２３】
セキュリティ支援スレッドモジュール２０４は、セキュリティ支援スレッド２０６によって、プロセッサ１２０のトランザクショナルメモリサポート１２４を用いてトランザクションを開始するように構成される。セキュリティ支援スレッドモジュール２０４はさらに、セキュリティ支援スレッド２０６によって、トランザクション内から関連した監視メモリ領域１３０に任意のデータを書き込むように構成される。セキュリティ支援スレッドモジュール２０４は、監視メモリ領域１３０の外部からの読み取り、すなわち、トランザクションの外で実行されるコードから生じる監視メモリ領域１３０の読み取りによって引き起こされるトランザクションのトランザクションアボートを検出するように構成される。セキュリティ支援スレッドモジュール２０４は、トランザクションアボートの検出に応答して、トランザクションアボートハンドラ１３２を実行するように構成され得る。
【００２４】
セキュリティレスポンスモジュール２０８は、トランザクションアボートの検出に応答してセキュリティイベントが生じたかどうかを判定し、セキュリティイベントが生じた場合、１または複数のセキュリティオペレーションを実行するように構成される。それらの機能は、アボートハンドラ１３２によって、またはそれの一部として実行され得る。セキュリティレスポンスモジュール２０８は、セキュリティイベントが生じたという判定に応答して、セキュリティイベントを報告する、またはコンピューティングデバイス１００を停止するように構成され得る。
【００２５】
ここで図３を参照すると、コンピューティングデバイス１００は使用時に、不正メモリアクセスを検出するための方法３００を実行し得る。方法３００は、ブロック３０２で開始し、そこで、コンピューティングデバイス１００は、監視すべきメモリ１２８の１または複数の領域１３０を特定する。それらの監視メモリ領域１３０は、マルウェアによって一般にスキャンされる任意のインメモリイメージ、実行可能ファイル、または他のデータ構造として具現化され得る。いくつかの実施形態において、監視メモリ領域１３０は、ロードされた（メモリマップされた）システムライブラリの一部または全てを含み得る。例えば、悪意のあるコードが、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのＫＥＲＮＥＬ３２．ＤＬＬライブラリなどのロード済みのオペレーティングシステムライブラリ用のメモリ１２８をスキャンするのは、一般的な手法である。悪意のあるコードは、ＰＥ（Ｐｏｒｔａｂｌｅ  Ｅｘｅｃｕａｂｌｅ）ヘッダ、セクションテーブルおよび／またはＰＥディレクトリなどのロード済みのイメージのデータ構造の読み取りおよび解釈によって、ロードされたＰＥがＫＥＲＮＥＬ３２．ＤＬＬであることを検証する場合がある。悪意のあるコードは、例えば、ロードされたイメージ（例えば、ＰＥまたはＤＬＬ）のファイル種類を判定し、エクスポートテーブルの位置を特定し、エクスポートテーブル中をループし得、さらなるシステム侵入のために関数に対するポインタを見出す。悪意のあるコードは一般に、ＬｏａｄＭｏｄｕｌｅおよびＧｅｔＰｒｏｃＡｄｄｒｅｓｓといった関数のエクスポートを使用する。なぜならば、それらの関数は、標準のＤＬＬから所望のＡＰＩの名前による呼び出しを可能にするからである。通常の悪意のないソフトウェアは、ごくまれにしか監視メモリ領域１３０にアクセスする可能性がない。
【００２６】
ブロック３０４において、コンピューティングデバイス１００は、１または複数のセキュリティ支援スレッド２０６を作成する。上記に説明されたように、各セキュリティ支援スレッド２０６は、オペレーティングシステムスレッド、軽量プロセス、オペレーティングシステムプロセス、オペレーティングシステムカーネルスレッド、またはユーザソフトウェアスレッド等の、コンピューティングデバイス１００のコア１２２または論理プロセッサ上で実行可能な任意の独立した実行スレッドとして具現化され得る。各セキュリティ支援スレッド２０６は、監視メモリ領域１３０の一部または全てに割り当てられ得る。いくつかの実施形態において、コンピューティングデバイス１００は、さらなるバックアップのセキュリティ支援スレッド２０６を作成し得、連続監視および適用範囲に途切れが生じないことを可能にする。
【００２７】
ブロック３０６において、コンピューティングデバイス１００は、監視メモリ領域１３０と関連した各セキュリティ支援スレッド２０６を実行する。ブロック３０６のプロセス（例えば、ブロック３０８、３１０、３１２）は、セキュリティ支援スレッド２０６によって同時に、並列に、または別の方法で同時発生的に実行され得る。ブロック３０８において、セキュリティ支援スレッド２０６はトランザクションを開始し、関連付けられるアボートハンドラ１３２を特定する。いくつかの実施形態において、トランザクションは、特定の命令、例えばＸＢＥＧＩＮ命令を実行することにより開始され得る。アボートハンドラ１３２のアドレスは、トランザクション開始命令へ引数として渡され得る。加えてまたは代わりに、別個の命令は、アボートハンドラ１３２のアドレスを特定するために存在し得る。上記に説明されたように、トランザクションアボートが、トランザクションの実行中に生じた場合、コンピューティングデバイス１００のプロセッサ１２０は、アボートハンドラ１３２に実行を自動的に移す。
【００２８】
ブロック３１０において、セキュリティ支援スレッド２０６は、トランザクション内でまだ実行中であり、監視メモリ領域１３０を上書きする。セキュリティ支援スレッド２０６は、任意の値で監視メモリ領域１３０を上書きし得る。書き込み動作は、監視メモリ領域１３０と関連付けられたメモリキャッシュラインをトランザクションの書き込みセットへと加えることができる。トランザクションは分離されアトミックであるので、監視メモリ領域１３０に対する変更は、コンピューティングデバイス１００によって実行される他のスレッドおよび／またはプロセスには見えない。
【００２９】
ブロック３１２において、セキュリティ支援スレッド２０６は、トランザクションをコミットすることなく無限の待機ループに入る。セキュリティ支援スレッド２０６は、トランザクションをコミットすることなく待機するために任意の技術を使用し得るが、トランザクションは、セキュリティ支援スレッド２０６のループの実行、休止、または別の方法で実行の中止（ｙｉｅｌｄｉｎｇ）等である。待機している間、監視メモリ領域１３０の外部からのいかなる読み取り（例えば、別のスレッドおよび／またはトランザクションからの読み取り）も、読み取り／書き込みの競合を引き起こす。プロセッサ１２０は、読み取り／書き込みの競合を検出し、トランザクションをアボートする。メモリ競合の検出およびその後のトランザクションアボートの生成は、プロセッサ１２０のハードウェア、プロセッサ１２０のマイクロコード、ファームウェア、ソフトウェアまたはそれらの技術の任意の組み合わせによって実行され得る。メモリ競合および他のトランザクションアボートの検出は、プロセッサ１２０上で実行されるソフトウェアにはトランスペアレントであり、ソフトウェアは、アボートハンドラ１３２がプロセッサ１２０によって呼び出された後にだけトランザクションアボートを認識し得る。読み取り／書き込みの競合が生じない場合、方法３００はブロック３１２の実行を継続する。読み取り／書き込みの競合が生じる場合、トランザクションはアボートされ、方法３００はアボートハンドラ１３２に移行し、ブロック３１４を開始する。
【００３０】
いくつかの実施形態において、アボートハンドラ１３２から実行されるブロック３１４において、コンピューティングデバイス１００は、１または複数のバックアップのセキュリティ支援スレッド２０６を開始する。上記に説明されたように、コンピューティングデバイス１００は、監視メモリ領域１３０の連続監視を提供するために使用されるバックアップのセキュリティ支援スレッド２０６を作成し得、または別の方法でそれを初期化し得る。バックアップのセキュリティ支援スレッド２０６は、ブロック３０６と関連して上記に述べられたように、新たなトランザクションを開始し得、監視メモリ領域１３０に書き込み得る。したがって、バックアップのセキュリティ支援スレッド２０６は、アボートハンドラ１３２が実行されている間にコンピューティングデバイス１００が監視メモリ領域１３０を監視し続けるのを可能にし得る。
【００３１】
ブロック３１６において、アボートハンドラ１３２で実行されるコンピューティングデバイス１００は、セキュリティイベントが生じたかどうかを判定すべくトランザクションアボートに応答してセキュリティ解析を実行する。セキュリティイベントは、監視メモリ領域１３０からの不正読み取りなどの、監視メモリ領域１３０のうちの１または複数への任意の不正アクセスを含む。そのような不正のメモリ読み取りは、任意のＡＰＩを呼び出すか、選択ＡＰＩをフックするか、または別の方法でコンピューティングデバイス１００の制御を破壊するかしようとする前に、オペレーティングシステムライブラリを特定しマップしようとするルートキットなどの悪意のあるソフトウェアによって実行され得る。コンピューティングデバイス１００は、例えば、アボート状態レジスタまたはプロセッサ１２０のパフォーマンス監視ユニットを読み取ることにより、セキュリティイベントが生じたかどうかを判定すべくトランザクションアボートの原因を記述するデータを解析し得、アボートの原因、アボート命令のアドレス、競合データのアドレス、または他の情報を決定し得る。
【００３２】
ブロック３１８において、コンピューティングデバイス１００は、セキュリティイベントが生じたかどうかを判定する。上記に説明されたように、セキュリティ支援スレッド２０６の外部からの悪意のあるコードが監視メモリ領域１３０から読み取られる場合、セキュリティイベントが生じ得る。セキュリティイベントが生じなかった場合、方法３００は、ブロック３０６にループ・バックし、セキュリティ支援スレッド２０６を実行し、トランザクションを再開し、監視メモリ領域１３０の監視を継続する。セキュリティイベントが生じた場合、方法３００は、にブロック３２０に進む。
【００３３】
ブロック３２０において、コンピューティングデバイス１００は、セキュリティレスポンスを実行する。コンピューティングデバイス１００は、セキュリティイベントの報告、トランザクションアボートを引き起こしたソフトウェアの終了、またはコンピューティングデバイス１００の停止等の任意の適切なセキュリティレスポンスを実行し得、構成されるコードの潜在的な実行を防止し得る。セキュリティイベントは、インタラクティブアラートを表示すること、人が読み取り可能な報告を生成すること、または別のセキュリティオペレーションを実行することを含む任意の利用可能な技術を用いて報告され得る。セキュリティレスポンスを実行した後、方法３００は、ブロック３０６にループ・バックし、セキュリティ支援スレッド２０６を実行し、トランザクションを再開し、監視メモリ領域１３０の監視を継続する。  ［例］
【００３４】
本明細書にて開示される技術の説明的な例が、以下に提供される。技術の実施形態は、以下に説明される任意の１または複数の例、および、それらの任意の組み合わせを含んでもよい。
【００３５】
例１は、不正メモリアクセスを検出するためのコンピューティングデバイスを含み、コンピューティングデバイスは、トランザクショナルメモリサポートを含むプロセッサと、コンピューティングデバイスのセキュリティ支援スレッドによって、プロセッサのトランザクショナルメモリサポートを用いてトランザクションを開始し、セキュリティ支援スレッドによってトランザクションの開始に応答して、監視メモリ位置に書き込み、監視メモリ位置への書き込みに応答して、トランザクションのトランザクションアボートを検出するセキュリティ支援スレッドモジュールであって、トランザクションアボートは、監視メモリ位置の読み取りによって引き起こされ、読み取りは、トランザクションの外部で発生する、セキュリティ支援スレッドモジュールと、（ｉ）セキュリティイベントがトランザクションアボートの検出に応答して生じたかどうかを判定し、（ｉｉ）セキュリティイベントが生じたという判定に応答してセキュリティオペレーションを実行するセキュリティレスポンスモジュールとを含む。
【００３６】
例２は、例１の主題を含み、セキュリティ支援スレッドを開始するセキュリティモジュールをさらに含み、トランザクションを開始することは、セキュリティ支援スレッドの開始に応答してトランザクションを開始することを含む。
【００３７】
例３は、例１および２のいずれかの主題を含み、監視メモリ位置は、メモリマップトオペレーティングシステムライブラリの一部を含む。
【００３８】
例４は、例１から３のいずれかの主題を含み、監視メモリ位置は、実行可能イメージの一部を含む。
【００３９】
例５は、例１から４のいずれかの主題を含み、監視メモリ位置は、オペレーティングシステムのカーネルデータ構造の一部を含む。
【００４０】
例６は、例１から５のいずれかの主題を含み、トランザクションアボートを検出することは、監視メモリ位置への書き込みに応答して、トランザクションのコミットなしで、セキュリティ支援スレッドが待機することを含む。
【００４１】
例７は、例１から６のいずれかの主題を含み、セキュリティ支援スレッドモジュールはさらに、トランザクションアボートの検出に応答して、トランザクションアボートハンドラを実行し、トランザクションアボートハンドラを実行することは、セキュリティイベントが生じたかどうかを判定することを含む。
【００４２】
例８は、例１から７のいずれかの主題を含み、セキュリティイベントが生じたかどうかを判定することは、コンピューティングデバイスのパフォーマンス監視ユニットから検索された競合データ位置の第１メモリアドレスと、監視メモリ位置の第２メモリアドレスとを比較することを含む。
【００４３】
例９は、例１から８のいずれかの主題を含み、セキュリティイベントが生じたかどうかを判定することは、コンピューティングデバイスのアボート状態レジスタに基づいてトランザクションアボートの原因を判定することを含む。
【００４４】
例１０は、例１から９のいずれかの主題を含み、セキュリティオペレーションを実行することは、セキュリティイベントを報告することを含む。
【００４５】
例１１は、例１から１０のいずれかの主題を含み、セキュリティオペレーションを実行することは、コンピューティングデバイスを停止することを含む。
【００４６】
例１２は、例１から１１のいずれかの主題を含み、セキュリティ支援スレッドモジュールはさらに、セキュリティ支援スレッドによって、セキュリティイベントが生じていないという判定に応答して、トランザクションを再開する。
【００４７】
例１３は、例２の主題を含み、セキュリティモジュールはさらに、トランザクションアボートの検出に応答して第２セキュリティ支援スレッドを開始し、セキュリティ支援スレッドモジュールはさらに、コンピューティングデバイスの第２セキュリティ支援スレッドによって、コンピューティングデバイスのプロセッサのトランザクショナルメモリサポートを用いて第２トランザクションを開始し、第２セキュリティ支援スレッドによって、第２トランザクションの開始に応答して監視メモリ位置に書き込む。
【００４８】
例１４は、不正メモリアクセスを検出するための方法を含み、方法は、コンピューティングデバイスのセキュリティ支援スレッドが、コンピューティングデバイスのプロセッサのトランザクショナルメモリサポートを用いてトランザクションを開始する工程と、セキュリティ支援スレッドが、トランザクションの開始に応答して、監視メモリ位置に書き込む工程と、コンピューティングデバイスが、監視メモリ位置への書き込みに応答して、トランザクションのトランザクションアボートを検出する工程であって、トランザクションアボートは、監視メモリ位置の読み取りによって引き起こされ、読み取りは、トランザクションの外部で発生する、工程と、コンピューティングデバイスが、トランザクションアボートの検出に応答してセキュリティイベントが生じたかどうかを判定する工程と、コンピューティングデバイスが、セキュリティイベントが生じたとの判定に応答してセキュリティオペレーションを実行する工程とを備える。
【００４９】
例１５は、例１４の主題を含み、コンピューティングデバイスが、セキュリティ支援スレッドを開始する工程をさらに含み、トランザクションを開始する工程は、セキュリティ支援スレッドの開始に応答してトランザクションを開始する工程を含む。
【００５０】
例１６は、例１４および１５の主題のいずれかを含み、監視メモリ位置は、メモリマップトオペレーティングシステムライブラリの一部を含む。
【００５１】
例１７は、例１４から１６のいずれかの主題を含み、監視メモリ位置は、実行可能イメージの一部を含む。
【００５２】
例１８は、例１４から１７のいずれかの主題を含み、監視メモリ位置は、オペレーティングシステムカーネルデータ構造の一部を含む。
【００５３】
例１９は、例１４から１８のいずれかの主題を含み、トランザクションアボートを検出する工程は、監視メモリ位置への書き込みに応答してトランザクションをコミットしないで、セキュリティ支援スレッドが待機する工程を含む。
【００５４】
例２０は、例１４から１９のいずれかの主題を含み、コンピューティングデバイスが、トランザクションアボートの検出に応答して、トランザクションアボートハンドラを実行する工程をさらに含み、トランザクションアボートハンドラを実行する工程は、セキュリティイベントが生じたかどうかを判定する工程を含む。
【００５５】
例２１は、例１４から２０のいずれかの主題を含み、セキュリティイベントが生じたかどうかを判定する工程は、コンピューティングデバイスのパフォーマンス監視ユニットから検索された競合データ位置の第１メモリアドレスと、監視メモリ位置の第２メモリアドレスとを比較する工程を含む。
【００５６】
例２２は、例１４から２１のいずれかの主題を含み、セキュリティイベントが生じたかどうかを判定する工程は、コンピューティングデバイスのアボート状態レジスタに基づいてトランザクションアボートの原因を判定する工程を含む。
【００５７】
例２３は、例１４から２２のいずれかの主題を含み、セキュリティオペレーションを実行する工程は、セキュリティイベントを報告する工程を含む。
【００５８】
例２４は、例１４から２３のいずれかの主題を含み、セキュリティオペレーションを実行する工程は、コンピューティングデバイスを停止する工程を含む。
【００５９】
例２５は、例１４から２４のいずれかの主題を含み、セキュリティイベントが生じていないとの判定に応答して、セキュリティ支援スレッドが、トランザクションを再開する工程をさらに含む。
【００６０】
例２６は、例１４から２５のいずれかの主題を含み、トランザクションアボートの検出に応答して、コンピューティングデバイスが、第２セキュリティ支援スレッドを開始する工程と、コンピューティングデバイスの第２セキュリティ支援スレッドが、コンピューティングデバイスのプロセッサのトランザクショナルメモリサポートを用いて第２トランザクションを開始する工程と、第２トランザクションの開始に応答して、第２セキュリティ支援スレッドが、監視メモリ位置に書き込む工程とをさらに含む。
【００６１】
例２７は、プロセッサと、プロセッサにより実行された場合、コンピューティングデバイスに例１４から２６のいずれかに記載の方法を実行させる複数の命令をそれに格納したメモリとを含む、コンピューティングデバイスを含む。
【００６２】
例２８は、実行されたことに応答してコンピューティングデバイスが例１４から２６のいずれかに記載の方法を実行することになる複数の命令を格納されて備える、１または複数の機械可読記憶媒体を含む。
【００６３】
例２９は、例１４から２６のいずれかに記載の方法を実行するための手段を備えるコンピューティングデバイスを含む。
【００６４】
例３０は、不正メモリアクセスを検出するためのコンピューティングデバイスを含み、コンピューティングデバイスは、コンピューティングデバイスのセキュリティ支援スレッドが、コンピューティングデバイスのプロセッサのトランザクショナルメモリサポートを用いてトランザクションを開始するための手段と、セキュリティ支援スレッドが、トランザクションの開始に応答して、監視メモリ位置に書き込むための手段と、監視メモリ位置への書き込みに応答して、トランザクションのトランザクションアボートを検出するための手段であって、トランザクションアボートは、監視メモリ位置の読み取りによって引き起こされ、読み取りは、トランザクションから外部で発生される、手段と、セキュリティイベントがトランザクションアボートの検出に応答して生じたかどうかを判定するための手段と、セキュリティイベントが生じたという判定に応答してセキュリティオペレーションを実行するための手段とを含む。
【００６５】
例３１は、例３０の主題を含み、セキュリティ支援スレッドを開始するための手段をさらに含み、トランザクションを開始するための手段は、セキュリティ支援スレッドの開始に応答してトランザクションを開始するための手段を含む。
【００６６】
例３２は、例３０および３１のいずれかの主題を含み、監視メモリ位置は、メモリマップトオペレーティングシステムライブラリの一部を含む。
【００６７】
例３３は、例３０から３２のいずれかの主題を含み、監視メモリ位置は、実行可能イメージの一部を含む。
【００６８】
例３４は、例３０から３３のいずれかの主題を含み、監視メモリ位置は、オペレーティングシステムカーネルデータ構造の一部を含む。
【００６９】
例３５は、例３０から３４のいずれかの主題を含み、トランザクションアボートを検出するための手段は、監視メモリ位置への書き込みに応答してトランザクションをコミットしないで、セキュリティ支援スレッドが、待機するための手段を含む。
【００７０】
例３６は、例３０から３５のいずれかの主題を含み、トランザクションアボートの検出に応答して、トランザクションアボートハンドラを実行するための手段をさらに含み、トランザクションアボートハンドラを実行するための手段は、セキュリティイベントが生じたかどうかを判定するための手段を含む。
【００７１】
例３７は、例３０から３６のいずれかの主題を含み、セキュリティイベントが生じたかどうかを判定するための手段は、コンピューティングデバイスのパフォーマンス監視ユニットから検索された競合データ位置の第１メモリアドレスと、監視メモリ位置の第２メモリアドレスとを比較するための手段を含む。
【００７２】
例３８は、例３０から３７のいずれかの主題を含み、セキュリティイベントが生じたかどうかを判定するための手段は、コンピューティングデバイスのアボート状態レジスタに基づいてトランザクションアボートの原因を判定するための手段を含む。
【００７３】
例３９は、例３０から３８のいずれかの主題を含み、セキュリティオペレーションを実行するための手段は、セキュリティイベントを報告するための手段を含む。
【００７４】
例４０は、例３０から３９のいずれかの主題を含み、セキュリティオペレーションを実行するための手段は、コンピューティングデバイスを停止するための手段を含む。
【００７５】
例４１は、例３０から４０のいずれかの主題を含み、セキュリティイベントが生じていないとの判定に応答して、セキュリティ支援スレッドが、トランザクションを再開するための手段をさらに含む。
【００７６】
例４２は、例３０から４１のいずれかの主題を含み、トランザクションアボートの検出に応答して第２セキュリティ支援スレッドを開始するための手段と、コンピューティングデバイスの第２セキュリティ支援スレッドが、コンピューティングデバイスのプロセッサのトランザクショナルメモリサポートを用いて第２トランザクションを開始するための手段と、第２セキュリティ支援スレッドが、第２トランザクションの開始に応答して監視メモリ位置に書き込むための手段とをさらに含む。
【図１】
0006367490.tif 000002
【図２】
0006367490.tif 000003
【図３】
0006367490.tif 000004