(57)【要約】  潜在的に悪意のあるコードを検出するためのトラップ・アドレス範囲を生成するために、プログラムを実行するプロセスの実行パスにトラップ・コードを投入するコンピュータ・プログラム製品、システム、および方法を提供する。指定タイプのコマンドが、アプリケーション・コードにおいて処理され、応答して、トラップ・コードが、トラップ・アドレス範囲を割り当てるために実行される。指定タイプのコマンドが、アプリケーション・コードにおいて実行される。アクセス側アプリケーションがトラップ・アドレス範囲にアクセスするかどうかに関して、判断が行われる。アクセス側アプリケーションが潜在的に悪意のあるコードを含むという通知を送信すること、アクセス側アプリケーションの実行をモニタリングすること、およびアクセス側アプリケーションの実行を制限すること、のうちの少なくとも１つが、アクセス側アプリケーションがトラップ・アドレス範囲にアクセスしたという判断に応答して実行される。
2021521513.tif 000002
【特許請求の範囲】
【請求項１】
データにアクセスする潜在的に悪意のあるコードをストレージから検出するためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品は、実行時に動作を実行する具現化されたコンピュータ可読プログラム・コードを有するコンピュータ可読記憶媒体を含み、前記動作は、
アプリケーション・コード内の指定タイプのコマンドを処理することと、
トラップ・アドレス範囲を割り当てるために、前記指定タイプのコマンドを処理することに応答してトラップ・コードを実行することと、
前記アプリケーション・コード内の前記指定タイプのコマンドを実行することと、
アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスするかどうかを判断することと、
前記アクセス側アプリケーションが潜在的に悪意のあるコードを含むという通知を送信すること、前記アクセス側アプリケーションの実行をモニタリングすること、および前記アクセス側アプリケーションの前記実行を制限すること、のうちの少なくとも１つを、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたという判断に応答して実行することと、
を含む、コンピュータ・プログラム製品。
【請求項２】
前記トラップ・アドレス範囲が、実行されている前記アプリケーション・コードによってアクセスされない、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
前記指定タイプのコマンドは、カーネル・アドレスにアクセスするためにユーザ・モードからカーネル・モードへ切り替えるためのコマンドを含み、前記トラップ・アドレス範囲は、カーネル・アドレス空間において定義される、請求項１に記載のコンピュータ・プログラム製品。
【請求項４】
前記動作は、
アドレス・テーブルにおいてキャッシュ内の有効データにマッピングされていない前記カーネル・アドレス空間内のアドレスに前記アクセス側アプリケーションがアクセスすることに応答して、セグメンテーション違反を受信することをさらに含み、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、前記セグメンテーション違反を受信することに応答して行われる、請求項３に記載のコンピュータ・プログラム製品。
【請求項５】
前記指定タイプのコマンドは、システム・コールを含み、前記システム・コールは、前記トラップ・コードの実行後に実行される、請求項４に記載のコンピュータ・プログラム製品。
【請求項６】
前記トラップ・アドレス範囲は、アドレス・テーブルにおいて無効物理アドレスにマッピングされ、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、無効な位置にマッピングされた前記トラップ・アドレス範囲に前記アクセス側アプリケーションがアクセスするときに発生する違反を検出することを含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項７】
前記トラップ・コードを前記実行することは、前記トラップ・アドレス範囲をアドレス・テーブルにおいてマッピングし、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、計算リソースにアクセスするために前記トラップ・アドレス範囲からトラップ・データを使用しようとすることを前記アクセス側アプリケーションが検出することを含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項８】
複数のトラップ・アドレス範囲が、前記トラップ・コードの実行の複数のインスタンスに応答して割り当てられる、請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
前記アプリケーション・コードを実行する前記プロセッサは、前記アプリケーション・コードの条件分岐の両方の分岐を投機的に実行し、前記条件分岐のうちの一方のみの結果が、前記条件分岐のどれを通過するかを判断するために使用される条件に応じて維持される、請求項１に記載のコンピュータ・プログラム製品。
【請求項１０】
前記トラップ・コードは、前記条件分岐を処理するときに、前記条件分岐のうちの条件分岐においてプロセッサにより投機的に実行される、請求項９に記載のコンピュータ・プログラム製品。
【請求項１１】
データにアクセスする潜在的に悪意のあるコードをストレージから検出するシステムであって、
プロセッサと、
前記プロセッサによる実行時に動作を実行するコンピュータ可読プログラムを有するコンピュータ可読記憶媒体と、を備え、前記動作は、
アプリケーション・コード内の指定タイプのコマンドを処理することと、
トラップ・アドレス範囲を割り当てるために、前記指定タイプのコマンドを処理することに応答してトラップ・コードを実行することと、
前記アプリケーション・コード内の前記指定タイプのコマンドを実行することと、
アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスするかどうかを判断することと、
前記アクセス側アプリケーションが潜在的に悪意のあるコードを含むという通知を送信すること、前記アクセス側アプリケーションの実行をモニタリングすること、および前記アクセス側アプリケーションの前記実行を制限すること、のうちの少なくとも１つを、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたという判断に応答して実行することと、
を含む、システム。
【請求項１２】
前記指定タイプのコマンドは、カーネル・アドレスにアクセスするためにユーザ・モードからカーネル・モードへ切り替えるためのコマンドを含み、前記トラップ・アドレス範囲は、カーネル・アドレス空間において定義される、請求項１１に記載のシステム。
【請求項１３】
前記動作は、
アドレス・テーブルにおいてキャッシュ内の有効データにマッピングされていない前記カーネル・アドレス空間内のアドレスに前記アクセス側アプリケーションがアクセスすることに応答して、セグメンテーション違反を受信することをさらに含み、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、前記セグメンテーション違反を受信することに応答して行われる、請求項１２に記載のシステム。
【請求項１４】
前記指定タイプのコマンドは、システム・コールを含み、前記システム・コールは、前記トラップ・コードの実行後に実行される、請求項１３に記載のシステム。
【請求項１５】
前記トラップ・アドレス範囲は、アドレス・テーブルにおいて無効物理アドレスにマッピングされ、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、無効な位置にマッピングされた前記トラップ・アドレス範囲に前記アクセス側アプリケーションがアクセスするときに発生する違反を検出することを含む、請求項１１に記載のシステム。
【請求項１６】
前記トラップ・コードを前記実行することは、前記トラップ・アドレス範囲をアドレス・テーブルにおいてマッピングし、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、計算リソースにアクセスするために前記トラップ・アドレス範囲からトラップ・データを使用しようとすることを前記アクセス側アプリケーションが検出することを含む、請求項１１に記載のシステム。
【請求項１７】
前記アプリケーション・コードを実行する前記プロセッサは、前記アプリケーション・コードの条件分岐の両方の分岐を投機的に実行し、前記条件分岐のうちの一方のみの結果が、前記条件分岐のどれを通過するかを判断するために使用される条件に応じて維持される、請求項１１に記載のシステム。
【請求項１８】
前記トラップ・コードは、前記条件分岐を処理するときに、前記条件分岐のうちの条件分岐においてプロセッサにより投機的に実行される、請求項１７に記載のシステム。
【請求項１９】
データにアクセスする潜在的に悪意のあるコードをストレージから検出する方法であって、
アプリケーション・コード内の指定タイプのコマンドを処理することと、
トラップ・アドレス範囲を割り当てるために、前記指定タイプのコマンドを処理することに応答してトラップ・コードを実行することと、
前記アプリケーション・コード内の前記指定タイプのコマンドを実行することと、
アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスするかどうかを判断することと、
前記アクセス側アプリケーションが潜在的に悪意のあるコードを含むという通知を送信すること、前記アクセス側アプリケーションの実行をモニタリングすること、および前記アクセス側アプリケーションの前記実行を制限すること、のうちの少なくとも１つを、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたという判断に応答して実行することと、
を含む、方法。
【請求項２０】
前記指定タイプのコマンドは、カーネル・アドレスにアクセスするためにユーザ・モードからカーネル・モードへ切り替えるためのコマンドを含み、前記トラップ・アドレス範囲は、カーネル・アドレス空間において定義される、請求項１９に記載の方法。
【請求項２１】
アドレス・テーブルにおいてキャッシュ内の有効データにマッピングされていない前記カーネル・アドレス空間内のアドレスに前記アクセス側アプリケーションがアクセスすることに応答して、セグメンテーション違反を受信することをさらに含み、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、前記セグメンテーション違反を受信することに応答して行われる、請求項２０に記載の方法。
【請求項２２】
前記指定タイプのコマンドは、システム・コールを含み、前記システム・コールは、前記トラップ・コードの実行後に実行される、請求項２１に記載の方法。
【請求項２３】
前記トラップ・アドレス範囲は、アドレス・テーブルにおいて無効物理アドレスにマッピングされ、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、無効な位置にマッピングされた前記トラップ・アドレス範囲に前記アクセス側アプリケーションがアクセスするときに発生する違反を検出することを含む、請求項１９に記載の方法。
【請求項２４】
前記トラップ・コードを前記実行することは、前記トラップ・アドレス範囲をアドレス・テーブルにおいてマッピングし、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、計算リソースにアクセスするために前記トラップ・アドレス範囲からトラップ・データを使用しようとすることを前記アクセス側アプリケーションが検出することを含む、請求項１９に記載の方法。
【請求項２５】
前記アプリケーション・コードを実行する前記プロセッサは、前記アプリケーション・コードの条件分岐の両方の分岐を投機的に実行し、前記条件分岐のうちの一方のみの結果が、前記条件分岐のどれを通過するかを判断するために使用される条件に応じて維持される、請求項１９に記載の方法。
【請求項２６】
前記トラップ・コードは、前記条件分岐を処理するときに、前記条件分岐のうちの条件分岐においてプロセッサにより投機的に実行される、請求項２５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、潜在的に悪意のあるコードを検出するためのトラップ・アドレス範囲を生成するために、プログラムを実行するプロセスの実行パスにトラップ・コードを投入するコンピュータ・プログラム製品、システム、および方法に関する。
【背景技術】
【０００２】
ウイルス対策ソフトウェアとも呼ばれる、マルウェア対策ソフトウェアは、悪意のあるブラウザ・ヘルパー・オブジェクト（ＢＨＯ）、ブラウザ・ハイジャッカ、ランサムウェア、キー・ロガー、バックドア、ルートキット、トロイの木馬、ワーム、悪意のあるＬＳＰ、ダイヤラ、不正ツール、アドウェア、およびスパイウェアなどの悪意のあるソフトウェアを検出、防止、および除去するために使用される。典型的には、悪意のあるソフトウェアからのデータ漏洩の可能性があるときに、不審なソフトウェアによるデータのいかなる改変も回避するように、セキュリティ脅威が解決されるまで、漏洩されやすいデータへのアクセスがブロックされる。ランサムウェアという悪意のあるソフトウェアの一種は、ユーザ・データを暗号化し、その後ランサムウェアの操作者が、それらのデータを復号するために使用する暗号キーに対する支払いを要求して、攻撃の被害者を恐喝する。
【０００３】
悪意のあるコードは、キャッシュ動作の一部としてシステム・キャッシュ内に記憶された保護メモリからメモリ・データを読み出すことによって、保護メモリ内のデータにアクセスしようとすることがある。保護メモリは、プロセスがアクセス権を有しない限りプロセスがアクセスできるべきでないシステム・メモリの領域を含む。正当なプロセスは、個人情報、パスワードなどの、他のアプリケーションを対象としないある保護データを保護メモリ内に記憶し得る。悪意のあるコードが、キャッシュ内のあるキャッシュされたデータがカーネル・アドレスからのものであり、機密および秘密の保護データを含み得ることを知っていることを利用するサイドチャネル攻撃において、キャッシュ内に記憶された保護メモリからの保護データが、悪意のあるコードによってアクセスされることがある。
【発明の概要】
【０００４】
本技術分野において、悪意のある活動およびデータ危殆化を防止するために、キャッシュ内に記憶された保護データにアクセスしようとする悪意のあるコードを検出するための改善された技術に対する必要性が存在する。
【０００５】
第１の実施形態は、潜在的に悪意のあるコードを検出するためのトラップ・アドレス範囲を生成するために、プログラムを実行するプロセスの実行パスにトラップ・コードを投入するコンピュータ・プログラム製品、システム、および方法を提供する。指定タイプのコマンドが、アプリケーション・コードにおいて処理され、応答して、トラップ・コードが、トラップ・アドレス範囲を割り当てるために実行される。指定タイプのコマンドが、アプリケーション・コードにおいて実行される。アクセス側アプリケーションがトラップ・アドレス範囲にアクセスするかどうかに関して、判断が行われる。アクセス側アプリケーションが潜在的に悪意のあるコードを含むという通知を送信すること、アクセス側アプリケーションの実行をモニタリングすること、およびアクセス側アプリケーションの実行を制限すること、のうちの少なくとも１つが、アクセス側アプリケーションがトラップ・アドレス範囲にアクセスしたという判断に応答して実行される。
【０００６】
第１の実施形態では、保護アドレス空間または機密データへのアクセスを提供し得るコマンドなどの指定タイプのコマンドの実行が、トラップ・アドレス範囲を割り当てるトラップ・コードの実行をトリガする。アプリケーションが、実行されているアプリケーション・コードによってアクセスされるアドレス範囲ではない、そのトラップ・アドレス範囲にアクセスしようとする場合、アクセス側アプリケーションが、悪意のあるものであるか、またはアプリケーションに対して割り当てられていないトラップ・アドレス範囲にアプリケーションをアクセスさせるバグを有するという仮定が行われ得る。トラップ・アドレス範囲へのそのようなアクセスが検出されると、ブロック、モニタリングなどの保護動作が、アプリケーション・コードに対して行われ得る。このように、脅威モニタ・プログラムは、モニタリングを全てではないアプリケーションに限定するが、機密情報へのアクセスを提供し得るアプリケーション・コード内の指定タイプのコマンドを、悪意のあるプログラムが利用しようとする状況を、より集中してモニタリングすることを提供する。説明される実施形態は、機密データへのアクセスを提供し得るそのような指定タイプのコマンドが実行されるときに、トラップ・アドレス範囲を割り当てることをトリガし、悪意のあるコードは、正当なアプリケーションによってアクセスされないトラップ・アドレス範囲にアクセスしようとすることによって、検出され得る。
【０００７】
第２の実施形態において、指定タイプのコマンドが、カーネル・アドレスにアクセスするためにユーザ・モードからカーネル・モードへ切り替えるためのコマンドを含み、トラップ・アドレス範囲は、カーネル・アドレス空間において定義される。
【０００８】
第２の実施形態では、カーネル・アドレスは、悪意のあるプログラムがアクセスおよび利用しようとする機密および保護データへのアクセスを提供し得るため、アプリケーションがカーネル・アドレスにアクセスするためにカーネル・モードに切り替えるとき、トラップ・アドレス範囲が割り当てられる。よって、カーネル・アドレスがアプリケーションによってアクセスされるときにトラップ・アドレス範囲を割り当てることによって、説明される実施形態は、機密情報へのアクセスが提供され得るアプリケーション・プログラム内のポイントにおいて、悪意のあるコードのためのトラップを生成する。悪意のあるコードは、カーネル・アドレス空間へのアクセスを提供するコードを用いて割り当てられるトラップ・アドレス範囲などのアドレスを利用しようとし得るため、これによって、悪意のあるコードを捉える可能性がさらに高まる。
【０００９】
第３の実施形態において、アクセス側アプリケーションが、アドレス・テーブルにおいてキャッシュ内の有効データにマッピングされないカーネル・アドレス空間内のアドレスにアクセスすることに応答して、セグメンテーション違反が受信される。このような場合、アクセス側アプリケーションがトラップ・アドレス範囲にアクセスしたかどうかの判断が、セグメンテーション違反を受信することに応答して行われる。
【００１０】
第３の実施形態では、プログラムが悪意のあるものかどうかをチェックすることが、アクセスされているカーネル・アドレスがトラップ・アドレス範囲内にあるかどうかをチェックするために、セグメンテーション違反が発生するときに実行される。これは、セグメンテーション違反を投げるカーネル・アドレスにアクセスするときに悪意のあるプログラムがデータにアクセスする可能性が高いポイントに、悪意のあるプログラムをチェックするプロセッサを制限することによって、モニタリング動作の効率をさらに改善する。
【００１１】
第４の実施形態において、指定タイプのコマンドは、システム・コールを含み、システム・コールは、トラップ・コードの実行後に実行される。
【００１２】
第４の実施形態では、トラップ・アドレス範囲を割り当てることをトリガする指定タイプのコマンドは、システム・コールを含む。これは、システム・コールがカーネル・アドレス空間にアクセスするためにユーザ・モードからカーネル・モードに切り替えるため、トラップ・アドレスをシステム・コールに結び付けることによって、動作効率をさらに改善する。よって、悪意のあるプログラムは、システム・コールを用いて割り当てられるアドレス範囲を求め得る。このように、説明される実施形態は、トラップ・アドレス範囲の割り当てを、あるタイプのコール、悪意のあるプログラムによって標的とされる可能性が他のタイプのコールよりも高いシステム・コールに結び付けることによって、悪意のあるコードに対するモニタリングの効率を改善する。
【００１３】
第５の実施形態において、トラップ・アドレス範囲は、アドレス・テーブルにおいて無効物理アドレスにマッピングされ、アクセス側アプリケーションがトラップ・アドレス範囲にアクセスしたかどうかを判断することが、無効な位置にマッピングされたトラップ・アドレス範囲にアクセス側アプリケーションがアクセスするときに発生する違反を検出することを含む。
【００１４】
第５の実施形態では、トラップ・アドレス範囲を無効物理アドレスにマッピングすることによって、悪意のあるプログラムである可能性が高いプログラムがトラップ・アドレス範囲にアクセスしようとするときにセグメンテーション違反が発生する。これは、連続したモニタリングを必要としないことによってモニタリング動作をさらに最適化し、悪意のあるコードによるアクセスの可能性がより高いときにのみ、モニタリングがトリガされる。それは、プログラムが有効物理アドレスにマッピングされていないトラップ・アドレス範囲にアクセスしようとするときに発生し、通常のオペレーティング・システム・プロセスの一部であるセグメンテーション違反によってフラグされ得る。
【００１５】
第６の実施形態において、トラップ・コードを実行することにより、トラップ・アドレス範囲がアドレス・テーブルにマッピングされ、その場合、アクセス側アプリケーションがトラップ・アドレス範囲にアクセスしたかどうかを判断することは、アクセス側アプリケーションが、計算リソースにアクセスするためにトラップ・アドレス範囲からトラップ・データを使用しようとすることを検出することを含む。
【００１６】
第６の実施形態では、偽造識別子およびパスワードなどのトラップ・データは、有効なアプリケーション・プログラムによって使用されないトラップ・アドレス範囲に置かれる。よって、プログラムが、計算リソースにアクセスするためにトラップ・データから識別子およびパスワードを提示している場合、そのようなアクセスは、悪意のあるものである可能性が最も高い。この実施形態では、モニタリング動作は、悪意のあるものではないモニタリング・プログラム上でリソースを浪費せず、悪意のあるプログラムまたはバグのある悪意のないプログラムからのものである可能性が高いアクセスに集中する。
【００１７】
第７の実施形態において、アプリケーション・コードを実行するプロセッサは、アプリケーション・コードの条件分岐の両方の分岐を投機的に実行し、その場合、条件分岐のうちの一方のみの結果が、条件分岐のどれを通過するかを判断するために使用される条件に応じて維持される。
【００１８】
第８の実施形態において、トラップ・コードは、条件分岐を処理するときに、条件分岐のうちの条件分岐においてプロセッサにより投機的に実行される。
【００１９】
第７および第８の実施形態では、プロセッサがコードを投機的に実行しているときに、トラップ・コードが実行され得る。これにより、悪意のあるプログラムのモニタリング効率がさらに向上するが、なぜなら、悪意のあるプログラムは、投機的実行の結果としてメモリ内に残された機密データを利用しようとすることがあるためである。このように、投機的実行中にトラップ・アドレス範囲を割り当てることによって、説明される実施形態では、投機的実行中にメモリ内に記憶された機密データにアクセスしようとする悪意のあるコードを観察する可能性がより高い。
【図面の簡単な説明】
【００２０】
【図１】コンピューティング環境の実施形態を示す図である。
【図２】トラップ・アドレス範囲を割り当てるために、アプリケーション・コードを実行するプロセスの実行パス内にトラップ・コードを投入するための動作の実施形態を説明する図である。
【図３】トラップ・アドレス範囲へのアクセスから潜在的に悪意のある活動を検出するための動作の実施形態を説明する図である。
【図４】潜在的に悪意のあるプログラムがカーネル・アドレスにアクセスしようとしているときに、トラップ・アドレス範囲へのアクセスを検出するための動作の実施形態を説明する図である。
【図５】潜在的に悪意のあるプログラムが計算リソースにアクセスするためにトラップ・アドレス範囲からトラップ・コードを提出していることを検出するための動作の実施形態を説明する図である。
【図６】悪意のあるコードを検出するためのトラップ・アドレス範囲を割り当てるために、アプリケーション・コードの投機的実行を行いつつトラップ・コードを投入するための、投機的実行プロセスによる動作の実施形態を説明する図である。
【図７】図１の構成要素が実施され得るコンピューティング環境を説明する図である。
【発明を実施するための形態】
【００２１】
投機的実行では、アプリケーション・プロセスが、アプリケーション・コードの投機的実行が発生したプログラム内のポイントに最終的に到達するときに、パラメータおよびデータをアプリケーション・プロセスに利用可能にするために、プロセッサは、実行パスにおけるアプリケーション・プロセスに先立ってアプリケーション・コードを投機的に実行する。投機的実行が、前もって判断されたパラメータの値などの条件に応じて実行の各種パスの条件分岐に到達する場合、プロセッサ投機的実行は、条件分岐のどのパスをアプリケーション・プロセスが通過するかにかかわらず利用可能となるパラメータおよび値を事前計算するために、全ての条件分岐のアプリケーション・コードを処理する。これにより、アプリケーション・コードを実行することなく投機的に生成されたパラメータおよび情報を使用できることによって、アプリケーション・プロセスの速度が大幅に上昇する。
【００２２】
当技術分野において、コードを投機的に実行するプロセスが、カーネル・アドレス内のデータにアクセスするために、条件分岐内のシステム・コールを処理するとき、機密情報および個人情報を含み得るアクセス済みのデータは、キャッシュ内に記憶され得る。さらに、アプリケーション・プロセスが、カーネル内の保護データにアクセスするシステム・コールを含まない他の分岐に進む場合、アクセス済みのデータは、キャッシュ内に残ることがある。悪意のあるコードは、投機的実行によってキャッシュ内に記憶された、キャッシュされた保護データを読み出そうとする場合がある。
【００２３】
投機的実行のリスクに対処するために、当技術分野では、キャッシュ内に保護データを残すことを回避するために、いかなる条件分岐上でも投機的実行が休止され得る。別の現行の解決策は、任意の保護データを除去するためにキャッシュをフラッシュすること、または保護データへのアドレスをアンマップすることである。しかしながら、これらの解決策は、アプリケーション・プロセスに先立って投機的に生成されたパラメータおよび他の情報を取り除くことによって、アプリケーション・プロセスによりそれらが必要となる前にデータおよびパラメータを利用可能にする投機的実行の恩恵を取り除くこととなる。
【００２４】
説明される実施形態は、指定タイプのコマンドを処理することに応答してトラップ・コードを実行することにより、プロセッサ投機的実行が続行することを可能にするとともに、悪意のあるコードを検出するためのコンピュータ技術に改善をもたらす。トラップ・コードは、トラップ・アドレス範囲を割り当てる。指定タイプのコマンドは、トラップ・コードの実行後、次いで実行され得る。トラップ・アドレス範囲は、アプリケーション・コードの一部ではないトラップ・コードによって割り当てられたため、トラップ・アドレス範囲は、アプリケーションによって使用されるアドレス範囲ではない。アプリケーションが、トラップ・アドレス範囲にアクセスしようとするとき、アプリケーションは、潜在的の悪意のあるコードと考えられてもよく、アクセス側アプリケーションが潜在的に悪意のあるコードを含むという通知を送信すること、アクセス側アプリケーションの実行をモニタリングすること、およびトラップ・アドレス範囲にアクセスするアプリケーションの実行を制限すること、のうちの少なくとも１つを実行するなど、保護動作が行われ得る。
【００２５】
図１は、バス１０７を経て通信するプロセッサ１０２、メモリ１０４、および記憶デバイス１０６を有するコンピュータ・システム１００を含む、コンピューティング環境の実施形態を図説する。プロセッサ１０２は、別々の中央処理装置（ＣＰＵ）、単一ＣＰＵ上の複数のコアの１つもしくはグループ、または１つもしくは複数のＣＰＵ上の処理リソースのグループを含み得る。
【００２６】
メモリ１０４は、記憶デバイス１０６内に記憶されたデータへのアプリケーション・アクセスを管理するため、およびボリューム、論理デバイスなどのより大きなトラックのグループの一部であり得る、トラック、論理ブロック・アドレス（ＬＢＡ）、記憶セル、セルのグループ（例えば、セルの列、行、またはアレイ）、セクタ、セグメントなどとしてデータのアドレス指定を管理するための、オペレーティング・システム１０８を含む。オペレーティング・システム１０８は、複数のアプリケーション１１４が存在しうるアプリケーション・プログラム１１４内のアプリケーション・コード１１２を実行するために、アプリケーション・プロセス１１０の１つまたは複数のインスタンスを生成してもよい。プロセッサ１０２は、アプリケーション・プロセス１１０がアプリケーション・コード１１２を実行している実行パス内の位置に先立ってアプリケーション・コード１１２を投機的に実行するための投機的実行ロジック１１６を含み、それにより、投機的に実行されたアプリケーション・コード１１２内のそのポイントにアプリケーション・プロセス１１０が到達するときに、投機的に実行されたアプリケーション・コード１１２からのパラメータおよび他の情報が、アプリケーション・プロセス１１０に利用可能である。プロセッサ１０２は、任意の実行中プロセス１１０上で投機的実行を行い得る。
【００２７】
オペレーティング・システム１０８は、ハードウェア・ページ・テーブル（ＨＰＴ）とも呼ばれるアドレス・テーブル１１８を維持し、アプリケーション１１４に割り当てられた論理アドレスの、メモリ１０４内のローカル・キャッシュ１２０または記憶デバイス１０６においてデータが記憶されている物理位置へのマッピングを提供する。ある実施形態において、論理アドレスは、仮想アドレスを含んでもよく、そこで、仮想アドレスまたは論理アドレスのためのデータは、メモリ１０４内のキャッシュ１２０または記憶デバイス１０６に記憶されてもよく、記憶デバイス１０６内の仮想アドレスのためのデータは、アプリケーション・プロセス１１０によるアクセスおよびプロセッサ１０２による投機的実行のためにキャッシュ１２０内にページングされる必要がある。
【００２８】
オペレーティング・システム１０８は、コンピュータ・システム１００においてまたはネットワークを経てリモート接続されたコンピュータ・システムにおいて実行され、入力／出力（Ｉ／Ｏ）要求を発行するアプリケーション１２６が、マルウェア、ランサムウェア、ウイルス、および他の悪意のあるコードなどの潜在的に悪意のあるプログラム１２６を含むかどうかを判断するための、脅威モニタ・プログラム１２２をさらに含み得る。
【００２９】
メモリ１０４は、アプリケーション・コード１１２の投機的実行のパス内に投入されるトラップ・コード１２４を含む。トラップ・コード１２４は、アプリケーション・プログラム１１４によってアクセスされない、かつサイドチャネル攻撃などにおいて盗むためにデータにアクセスしようとする悪意のあるプログラムによってアクセスされる可能性が高い、または正当なプログラム内のバグの結果としてアクセスされる可能性が高い、トラップ・アドレスまたはトラップ・データ１２８を割り当てることを目的とする。一実施形態では、トラップ・アドレス範囲へのアクセスが、セグメンテーション違反をもたらし、潜在的に悪意のある活動に対してオペレーティング・システム１０８に警告するように、トラップ・コード１２４は、無効な位置にマッピングするアドレスのトラップ・アドレス範囲を割り当て得る。代替な的実施形態において、トラップ・アドレス範囲は、正当なアプリケーション・プログラム１１４または有効なユーザによって提示されない、偽造パスワードおよびユーザ識別子などのトラップ・コード１２４によってキャッシュ１２０に追加されるトラップ・データ１２８にマッピングし得る。よって、システム１００内の計算リソースにアクセスするためにトラップ・データ１２８を提示する、潜在的に悪意のあるアプリケーション１２６またはユーザは、保護動作が取られる必要がある潜在的に悪意のあるプログラム１２６として、不審な活動に携わる。ランサムウェアまたは他の悪意のあるプログラムが、ストレージ１０６内のデータを盗むか、または暗号化するための動作の一部として、トラップ・データ１２８にアクセスすると仮定され得る。トラップ・アドレス範囲は、アドレス・テーブル１１８の情報およびフラグにおいて識別され、指示され得る。
【００３０】
メモリ１０４は、トラップ・アドレス範囲またはトラップ・コード１２４によって生成されるトラップ・データ１２８、あるいはその両方へのアクセスに基づいて、ウイルス、ランサムウェアなどの悪意のあるコードを潜在的に有する不審なプロセスを検出するための、脅威モニタ・プログラム１２２をさらに含む。
【００３１】
オペレーティング・システム１０８、アプリケーション・プログラム１１４、トラップ・コード１２４、脅威モニタ・プログラム１２２は、メモリ１０４内にロードされてプロセッサ１０２の１つまたは複数によって実行されるプログラム・コードとして、図１に示される。代替的には、機能のうちのいくつかまたは全てが、特定用途向け集積回路（ＡＳＩＣ）などのシステム１００内のハードウェア・デバイス内のマイクロコードまたはファームウェアとして実施され得る。
【００３２】
ストレージ１０６は、ソリッド・ステート電子回路で構成されるソリッド・ステート記憶デバイス（ＳＳＤ）、ＮＡＮＤ記憶セル、ＥＥＰＲＯＭ（電気的消去可能プログラマブル読み出し専用メモリ）、フラッシュ・メモリ、フラッシュ・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）・ドライブ、ストレージ・クラス・メモリ（ＳＣＭ）、相変化メモリ（ＰＣＭ）、抵抗変化型メモリ（ＲＲＡＭ）、スピン注入メモリ（ＳＴＭ−ＲＡＭ）、導電性ブリッジＲＡＭ（ＣＢＲＡＭ）、磁気ハード・ディスク・ドライブ、光ディスク、テープなどの、当技術分野において既知の１つまたは複数の記憶デバイスを含み得る。記憶デバイスは、単純ディスク束（ＪＢＯＤ）、直接アクセス記憶デバイス（ＤＡＳＤ）、独立ディスクの冗長アレイ（ＲＡＩＤ）アレイ、仮想化デバイスなどの、デバイスのアレイ内にさらに構成され得る。さらに、記憶デバイスは、異なるベンダまたは同一ベンダからの異種記憶デバイスを含み得る。
【００３３】
メモリ１０４は、上述したものを含む、適当な揮発性または不揮発性メモリ・デバイスを含み得る。
【００３４】
図２は、実行コードを実行するプロセッサ１０２についての動作の実施形態を示し、それは、アプリケーション・コード１１２の通常アプリケーション・コード処理または投機的実行の一部であり得る。（ブロック２００において）アプリケーション・コード１１２を実行するための動作を開始すると、投機的に、またはそうでないやり方で、プロセッサ１０２は、（ブロック２０２において）アプリケーション・コード１１２内のコマンドを処理する。（ブロック２０４において）処理されたコマンド・タイプが、システム・コールまたはカーネル・アドレス空間にアクセスするためのコールなどの、トラップ・コード１２４の実行をトリガするために指定されたコマンド・タイプである場合、プロセッサ１０２は、（ブロック２０６において）無効な物理アドレスにマッピングするトラップ・アドレス範囲、またはキャッシュ内にデータが記憶されていない範囲など、カーネル・アドレス空間においてトラップ・アドレス範囲を割り当てるためにトラップ・コード１２４を実行する。代替的に、プロセッサ１０２は、偽造ユーザ名およびパスワードを含むなど、トラップ・アドレス範囲内にトラップ・データ１２８を含み得る。（ブロック２０４において）プロセス・コマンドが指定タイプのものでない場合、または（ブロック２０６において）トラップ・コード１２４の実行後、プロセッサ１０２は、（ブロック２０８において）処理されたコマンドを実行し、全ての条件分岐における投機的処理コードなどの、アプリケーション・コード１１２を処理し続ける。実行中にトラップ・コード１２４の実行の複数のインスタンスに応答して生成されるトラップ・アドレス範囲の複数のインスタンスが存在し得る。
【００３５】
図３は、脅威モニタ・プログラム１２２によって実行される動作の実施形態を示し、脅威モニタ・プログラム１２２は、アプリケーション・プログラム１２６が潜在的に悪意のあるプログラムであるかどうかを判断するための、オペレーティング・システム１０８の一部であってもよい。（ブロック３００において）潜在的に悪意のあるプログラム１２６が、トラップ・アドレス範囲に対する読み出しまたは書き込みを発行するなど、トラップ・アドレス範囲にアクセスしたことを検出すると、脅威モニタ・プログラム１２２は、（ブロック３０２において）アクセス側アプリケーション１２６が潜在的に悪意のあるコードを含むという通知をユーザまたはウイルス対策プログラムに送信すること、潜在的に悪意のあるプログラム１２６の実行をモニタリングすること、および潜在的に悪意のあるプログラム１２６の実行を制限すること、のうちの少なくとも１つを実行する。例えば、脅威モニタ・プログラム１２２は、潜在的に悪意のあるプログラム１２６を隔離してもよく、潜在的に悪意のあるプログラム１２６が認可されたプログラムである場合にはその実行を可能にする、削除する、またはその他潜在的に悪意のあるプログラム１２６の実行をブロックするなど、さらなるアクションを取るようにユーザに警告してもよい。ある実施形態において、潜在的に悪意のあるプログラム１２６のモニタリングは、潜在的に悪意のあるプログラム１２６がコンピュータ・システム１００においてどのように対話するか、およびそれがどのアドレスとインターネットを経て通信するかをモニタリングするために、情報がプログラム１２６に提供される「ハニー・ポット」環境においてプログラム１２６が実行されることを可能にすることを含み得る。
【００３６】
図４は、オペレーティング・システム１０８、脅威モニタ・プログラム１２２、またはアプリケーションがオペレーティング・システム１０８のカーネル・アドレス空間内のカーネル・アドレスにアクセスしようとするときにアプリケーション・プログラム１２６が潜在的に悪意のあるプログラムであるかどうかを判断するための他のプログラム、あるいはそれらの組み合わせによって実行される動作の追加実施形態を示す。（ブロック４００において）ユーザ空間において実行している場合があるアプリケーション１２６が、要求されたカーネル・アドレスにアクセスしようとしていることを検出すると、オペレーティング・システム１０８／脅威モニタ・プログラム１２２は、（ブロック４０２において）要求されたカーネル・アドレスがアドレス・テーブル１１８内にあるかどうかを判断する。（ブロック４０２において）カーネル・アドレスがアドレス・テーブル１１８内にある場合、および（ブロック４０４において）要求されたカーネル・アドレスのためのデータがキャッシュ１２０内にある場合、（ブロック４０６において）カーネル・アドレスのための要求されたデータが、キャッシュ１２０から要求側のアプリケーションに返される。（ブロック４０２において）要求されたカーネル・アドレスがアドレス・テーブル１１８内にない場合、または（ブロック４０４において）要求されたカーネル・アドレスのためのデータがキャッシュ１２０内にない場合、（ブロック４０８において）セグメンテーション違反が投げられる。
【００３７】
（ブロック４０８における）セグメンテーション違反に応答して、オペレーティング・システム１０８／脅威モニタ・プログラム１２２は、（ブロック４１０において）要求されたカーネル・アドレスがトラップ・アドレス範囲内にあるかどうかを判断する。範囲内にない場合、（ブロック４１２において）エラーがアクセス側アプリケーションに返される。アクセス側アプリケーションは、トラップ・アドレスにアクセスしようとしていなかったため、悪意のあるプログラム１２６でない場合があるが、セグメンテーション違反を受信する正当なプログラムを含み得る。（ブロック４１０において）要求されたカーネル・アドレスが、トラップ・アドレス範囲内にある場合、プログラム１２６は、悪意があると考えられてもよく、脅威モニタ・プログラム１２２は、図３のブロック３０２に関して説明されるように、潜在的に悪意のあるプログラム１２６に関して説明される脅威ハンドリング動作（ブロック４１４における）のうちの１つを実行する。
【００３８】
図５は、トラップ・パスワードおよびユーザＩＤを有するなど、トラップ・アドレス範囲においてトラップ・データ１２８が提供される実施形態において、アプリケーション・プログラム１２６が潜在的に悪意のあるプログラムであるかどうかを判断するために、脅威モニタ・プログラム１２２、オペレーティング・システム１０８、または他のプログラム、あるいはそれらの組み合わせによって実行される動作の追加実施形態を示す。（ブロック５００において）アクセス側アプリケーション１２６が、コンピュータ・システム１００内のまたはコンピュータ・システム１００に連結された、ハードウェア、ソフトウェア、またはデータ・リソースなどの計算リソースにアクセスするために、ユーザＩＤまたはパスワードなどのアクセス・コードを提出していることを検出すると、脅威モニタ・プログラム１２２／オペレーティング・システム１０８は、（ブロック５０２において）トラップ・アドレス範囲内のアドレスのうちの１つによってアドレス指定されたキャッシュ１２０またはストレージ１０６内の位置に、提出されたコードがあるかどうかを判断する。（ブロック５０２において）提出されたアクセス・コードが、トラップ・アドレス範囲からのものではない場合、脅威モニタ・プログラム１２２は、（ブロック５０４において）要求された計算リソースへのアクセスが認可されるかどうかを判断するために、コードの処理を許可する。そうでない場合、（ブロック５０２において）提出されたアクセス・コードがトラップ・アドレス範囲のうちの１つにある場合に、脅威モニタ・プログラム１２２は、図３のブロック３０２に関して説明されたように、潜在的に悪意のあるプログラム１２６に関して説明された脅威ハンドリング動作のうちの１つを（ブロック５０６において）実行する。
【００３９】
図４および図５の実施形態では、アプリケーションが、トラップ・アドレス範囲のうちの１つにアクセスしようとすること、またはトラップ・アドレス範囲に記憶されたコードを提出することを検出された場合、正当なアプリケーション・プログラム１１４が、アプリケーション・プログラム１１４に割り当てられないアドレスにアクセスしている場合にエラーまたはバグを有していない限り、トラップ・アドレス範囲は、正当なアプリケーション・プログラム１１４からアプリケーション・コード１１２によって割り当てられていないため、アクセス側アプリケーションが悪意のあるコードを含む可能性が高い。
【００４０】
図６は、実行パスにおいてアプリケーション・プロセス１１０がアプリケーション・コード１１２を実行しているところに先立って投機的実行を実施するプロセッサ１０２によって実施される、動作の実施形態を示す。アプリケーション・コード１１２を投機的に処理しつつ、プロセッサ１０２は、（ブロック６０２において）アプリケーション・コード１１２内の条件分岐を処理し、前もって実行されたアプリケーション・コード１１２の間の条件またはパラメータ値のセットが、コード内のどの分岐を取るべきかを判断する。プロセッサ１０２は、その条件分岐に到達するときにアプリケーション・プロセス１１０が処理する分岐にかかわらず、任意のパラメータおよびデータを利用可能にするために、全ての分岐におけるアプリケーション・コード１１２を処理する。（ブロック６０４において）条件分岐内のうちの１つにおけるコマンドを処理すると、プロセッサ１０２は、（ブロック６０６において）処理されたコマンドのタイプが、システム・コール、またはカーネル・モードおよびカーネル・アドレス空間への他のアクセスを含むかどうかを判断する。含む場合、プロセッサ１０２は、（ブロック６０８において）カーネル・アドレス範囲を含むトラップ・アドレス範囲を割り当てるために、トラップ・コード１２４を実行する。トラップ・アドレス範囲は、アドレス・テーブル１１８内の無効な位置にマッピングされるか、またはトラップ・データ１２８を有する位置にマッピングされる。（ブロック６０８において）トラップ・コード１２４を処理した後、または（ブロック６０６のいいえの分岐から）処理したコマンドがシステム・コールを含まない場合、プロセッサ１０２は、（ブロック６１０において）処理したコマンドを投機的に実行し、（ブロック６１２において）ブロック６００に戻って進むことによりアプリケーション・コード１１２の投機的実行を続ける。
【００４１】
図６の実施形態では、システム・コールが、アプリケーション・コード１１２の投機的実行中にトラップ・アドレス範囲の割り当てをトリガする。アプリケーション・プロセス１１０が、システム・コールを有しない他の分岐を取る場合、それははるかに頻繁に通過される分岐である可能性が高く、その分岐内のコードが投機的に実行され、それによって、より頻繁に通過される分岐について投機的実行の恩恵をもたらす。このように、説明される実施形態は、カーネル・アドレスにアクセスしようとしている悪意のあるプログラム１２６をトラップすることができるように、システム・コールを有する分岐においてトラップ・アドレス範囲を割り当てつつ、投機的実行の恩恵が、最も頻度の高い処理パスについて実現されることを可能にする。悪意のあるコード１２６は、トラップ・アドレスが条件分岐に割り当てられたと知り、それらがシステム・コールの一部として割り当てられ、個人データ、パスワードなどの機密情報を含み得ると信じるそれらのトラップ・アドレスにアクセスしようとする。
【００４２】
代替的な実施形態において、トラップ・コード１２４は、システム・コールが実行された後で実行されてもよい。
【００４３】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組み合わせであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体（または複数の媒体）を含み得る。
【００４４】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持し、記憶し得る有形デバイスであり得る。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または前述したものの任意の適当な組み合わせであってもよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、静的ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー・ディスク、パンチカードまたはその上に記録された命令を有する溝内の隆起構造などの機械的に符号化されたデバイス、および前述したものの任意の適当な組み合わせを含む。本明細書で用いられるコンピュータ可読記憶媒体は、本来、電波もしくは他の自由伝播する電磁波、導波管もしくは他の送信媒体を通って伝播する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、または電線を通って送信される電気信号などの、一過性信号であると解釈されるべきではない。
【００４５】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、あるいはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはそれらの組み合わせを介して外部コンピュータまたは外部記憶デバイスに、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組み合わせを含み得る。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体の記憶用にコンピュータ可読プログラム命令を転送する。
【００４６】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはＪａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つもしくは複数のプログラミング言語の任意の組み合わせで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に、ユーザのコンピュータ上で部分的に、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータ上で部分的にかつリモート・コンピュータ上で部分的に、またはリモート・コンピュータもしくはサーバ上で完全に、実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを通して、ユーザのコンピュータに接続されてもよい。あるいは、接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを通して）外部コンピュータに対して行われてもよい。いくつかの実施形態では、例えば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個別化することによって、コンピュータ可読プログラム命令を実行し得る。
【００４７】
本発明の態様は、発明の実施形態による、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して、本明細書において説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組み合わせが、コンピュータ可読プログラム命令によって実施され得ると理解されたい。
【００４８】
コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行する命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作を実施する手段を生成するように、これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を製造するための他のプログラマブル・データ処理装置のプロセッサに提供されてもよい。コンピュータ可読記憶媒体に記憶される命令を有するコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作の態様を実施する命令を含む製品を含むように、これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはそれらの組み合わせに特定のやり方で機能するように指示し得る、コンピュータ可読記憶媒体に記憶されてもよい。
【００４９】
コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作を実施するように、コンピュータ可読プログラム命令はまた、コンピュータ実施されるプロセスを作り出すために、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるコンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされてもよい。
【００５０】
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実施のアーキテクチャ、機能性、および動作を示している。この点に関して、フローチャートまたはブロック図の各ブロックは、指定された論理機能を実施するための１つまたは複数の実行可能命令を含む、モジュール、セグメント、または命令の一部を表し得る。いくつかの代替的な実施において、ブロック内に記載された機能は、図面中に記載された順序以外で発生してもよい。例えば、連続して示される２つのブロックが、実際には、実質的に同時に実行されてもよいし、または、ブロックが、関係する機能性次第で逆の順序で実行されることがあってもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせが、指定された機能もしくは動作を実行し、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する専用ハードウェア・ベース・システムによって実施され得ることにも留意されたい。
【００５１】
コンピュータ・システム１００を含む図１の計算コンポーネントは、図７に示されるコンピュータ・システム７０２などの１つまたは複数のコンピュータ・システムにおいて実施され得る。コンピュータ・システム／サーバ７０２は、コンピュータ・システムによって実行されている、プログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的状況において説明され得る。概して、プログラム・モジュールは、特定のタスクを実行するかまたは特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含み得る。コンピュータ・システム／サーバ７０２は、通信ネットワークを通してリンクされたリモート処理デバイスによってタスクが実行される、分散型クラウド・コンピューティング環境において実施され得る。分散型クラウド・コンピューティング環境では、プログラム・モジュールが、メモリ記憶デバイスを含むローカルおよびリモート両方のコンピュータ・システム記憶媒体に位置し得る。
【００５２】
図７に示されるように、コンピュータ・システム／サーバ７０２は、汎用コンピューティング・デバイスの形態で示される。コンピュータ・システム／サーバ７０２のコンポーネントは、１つまたは複数のプロセッサまたは処理ユニット７０４、システム・メモリ７０６、およびシステム・メモリ７０６を含む様々なシステム・コンポーネントをプロセッサ７０４に連結するバス７０８を含み得るが、これらに限定されない。バス７０８は、メモリ・バスまたはメモリ・コントローラ、周辺バス、高速グラフィック・ポート、および多様なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを含む、複数種類のバス構造のいずれかの１つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャは、インダストリ・スタンダード・アーキテクチャ（ＩＳＡ）・バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ）・バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（ＶＥＳＡ）・ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）・バスを含む。
【００５３】
コンピュータ・システム／サーバ７０２は、典型的には多様なコンピュータ・システム可読媒体を含む。このような媒体は、コンピュータ・システム／サーバ７０２によってアクセス可能な任意の利用可能な媒体であってもよく、それは、揮発性媒体および不揮発性媒体の両方、リムーバブル媒体および非リムーバブル媒体の両方を含む。
【００５４】
システム・メモリ７０６は、コンピュータ・システム可読媒体を、ランダム・アクセス・メモリ（ＲＡＭ）７１０またはキャッシュ・メモリ７１２あるいはその両方などの揮発性メモリの形態で含み得る。コンピュータ・システム／サーバ７０２は、他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータ・システム記憶媒体をさらに含み得る。単なる例として、記憶システム７１３は、非リムーバブル不揮発性磁気媒体（図示せず、かつ典型的には「ハード・ドライブ」と呼ばれる）から読み出し、かつ書き込むために提供され得る。図示されないが、リムーバブル不揮発性磁気ディスク（例えば、「フロッピー・ディスク」）からの読み出しおよび書き込みのための磁気ディスク・ドライブ、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光学媒体などのリムーバブル不揮発性光ディスクからの読み出しまたは書き込みのための光学ディスク・ドライブが、提供され得る。このような場合、それぞれが、１つまたは複数のデータ媒体インターフェースによってバス７０８に接続され得る。以下でさらに示され、説明されるように、メモリ７０６は、発明の実施形態の機能を実行するように構成されるプログラム・モジュールのセット（例えば、少なくとも１つ）を有する少なくとも１つのプログラム製品を含み得る。
【００５５】
プログラム・モジュール７１６のセット（少なくとも１つ）を有するプログラム／ユーティリティ７１４は、限定ではなく例として、オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様に、メモリ７０６に記憶され得る。オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データのそれぞれ、またはそれらの何らかの組み合わせは、ネットワーキング環境の実施を含み得る。コンピュータ７０２のコンポーネントは、本明細書に説明されるように一般に発明の実施形態の機能または方法論あるいはその両方を実行する、プログラム・モジュール７１６として実施され得る。図１のシステムは、１つまたは複数のコンピュータ・システム７０２において実施されてもよく、そこでは、それらが複数のコンピュータ・システム７０２において実施される場合、コンピュータ・システムがネットワークを経て通信し得る。
【００５６】
コンピュータ・システム／サーバ７０２は、また、キーボード、ポインティング・デバイス、ディスプレイ７２０などの１つもしくは複数の外部デバイス７１８、ユーザがコンピュータ・システム／サーバ７０２と対話することを可能にする１つもしくは複数のデバイス、またはコンピュータ・システム／サーバ７０２が１つもしくは複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス（例えば、ネットワーク・カード、モデムなど）、あるいはそれらの組み合わせと通信し得る。このような通信は、入力／出力（Ｉ／Ｏ）インターフェース７２２を介して発生し得る。さらに、コンピュータ・システム／サーバ７０２は、ネットワーク・アダプタ７２４を介して、ローカル・エリア・ネットワーク（ＬＡＮ）、汎用ワイド・エリア・ネットワーク（ＷＡＮ）、または公衆ネットワーク（例えば、インターネット）、あるいはそれらの組み合わせなどの１つまたは複数のネットワークと通信し得る。図示されるように、ネットワーク・アダプタ７２４は、バス７０８を介してコンピュータ・システム／サーバ７０２の他のコンポーネントと通信する。図示されないが、他のハードウェア・コンポーネントまたはソフトウェア・コンポーネント、あるいはその両方が、コンピュータ・システム／サーバ７０２と併せて使用され得ると理解されるべきである。例は、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ記憶システムなどを含むが、これらに限定されない。
【００５７】
「一実施形態（an embodiment）」、「実施形態（embodiment）」、「実施形態（embodiments）」、「実施形態（the embodiment）」、「実施形態（the embodiments）」、「１つまたは複数の実施形態（one or more embodiments）」、「いくつかの実施形態（some embodiments）」、および「一実施形態（one embodiment）」は、明示的に特段の指定がない限り、「本発明の（全てではないが）１つまたは複数の実施形態」を意味する。
【００５８】
「含む」、「備える」、「有する」という用語、およびそれらの変化形は、明示的に特段の指定がない限り、「限定されないが含む」を意味する。
【００５９】
項目の列挙リストは、明示的に特段の指定がない限り、項目のうちのいずれかまたは全てが相互に排他的であることを示唆しない。
【００６０】
「ａ」、「ａｎ」、および「ｔｈｅ」という用語は、明示的に特段の指定がない限り、「１つまたは複数の」を意味する。
【００６１】
互いに通信するデバイスは、明示的に特段の指定がない限り、互いに連続的な通信関係にある必要はない。さらに、互いに通信するデバイスは、直接的に、または１つもしくは複数の媒介を通して間接的に、通信し得る。
【００６２】
互いに通信する複数のコンポーネントを有する実施形態の説明は、そのようなコンポーネント全てが必要とされることを示唆しない。逆に、多様な任意のコンポーネントが、本発明の多岐にわたる可能な実施形態を示すために説明される。
【００６３】
単一デバイスまたは製品が本明細書で説明されるとき、１つより多くのデバイス／製品が、（それらが協調するかどうかにかかわらず）単一デバイス／製品の代わりに使用され得ることが容易に明らかである。同様に、１つより多くのデバイスまたは製品が、本明細書で説明される場合に、（それらが協調するかどうかにかかわらず）単一のデバイス／製品が１つより多くのデバイスもしくは製品の代わりに使用され得ること、または異なる数のデバイス／製品が示された数のデバイスもしくはプログラムの代わりに使用され得ることが容易に明らかである。デバイスの機能性または特徴あるいはその両方が、そのような機能性／特徴を有すると明示的に説明されていない、１つまたは複数の他のデバイスによって代替的に具現化されてもよい。よって、本発明の他の実施形態は、デバイスそれ自体を含む必要はない。
【００６４】
発明の多様な実施形態の前述の説明は、例示および説明のために提示されている。それは、網羅的であること、または開示された正確な形態に発明を限定することを意図するものではない。多くの修正および変形が、上記教示に照らして可能である。発明の範囲は、この詳細な説明によって限定されないが、本明細書に添付された特許請求の範囲によって限定されることが意図される。上記明細書、例、およびデータは、製品の完全な説明および発明の構成の使用を提供する。発明の多くの実施形態が、発明の範囲から逸脱することなく作られ得るため、発明は、添付後の本明細書の特許請求の範囲内に存在する。
【図１】
2021521513.tif 000003
【図２】
2021521513.tif 000004
【図３】
2021521513.tif 000005
【図４】
2021521513.tif 000006
【図５】
2021521513.tif 000007
【図６】
2021521513.tif 000008
【図７】
2021521513.tif 000009
【手続補正書】
【提出日】令和2年10月22日(2020.10.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データにアクセスする潜在的に悪意のあるコードをストレージから検出するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムが、コンピュータに対し、
アプリケーション・コード内の指定タイプのコマンドを処理することと、
トラップ・アドレス範囲を割り当てるために、前記指定タイプのコマンドを処理することに応答してトラップ・コードを実行することと、
前記アプリケーション・コード内の前記指定タイプのコマンドを実行することと、
アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスするかどうかを判断することと、
前記アクセス側アプリケーションが潜在的に悪意のあるコードを含むという通知を送信すること、前記アクセス側アプリケーションの実行をモニタリングすること、および前記アクセス側アプリケーションの前記実行を制限すること、のうちの少なくとも１つを、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたという判断に応答して実行することと、
を実行させる、コンピュータ・プログラム。
【請求項２】
前記トラップ・アドレス範囲が、実行されている前記アプリケーション・コードによってアクセスされない、請求項１に記載のコンピュータ・プログラム。
【請求項３】
前記指定タイプのコマンドは、カーネル・アドレスにアクセスするためにユーザ・モードからカーネル・モードへ切り替えるためのコマンドを含み、前記トラップ・アドレス範囲は、カーネル・アドレス空間において定義される、請求項１に記載のコンピュータ・プログラム。
【請求項４】
前記コンピュータ・プログラムは、
アドレス・テーブルにおいてキャッシュ内の有効データにマッピングされていない前記カーネル・アドレス空間内のアドレスに前記アクセス側アプリケーションがアクセスすることに応答して、セグメンテーション違反を受信することをさらに含み、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、前記セグメンテーション違反を受信することに応答して行われる、請求項３に記載のコンピュータ・プログラム。
【請求項５】
前記指定タイプのコマンドは、システム・コールを含み、前記システム・コールは、前記トラップ・コードの実行後に実行される、請求項４に記載のコンピュータ・プログラム。
【請求項６】
前記トラップ・アドレス範囲は、アドレス・テーブルにおいて無効物理アドレスにマッピングされ、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、無効な位置にマッピングされた前記トラップ・アドレス範囲に前記アクセス側アプリケーションがアクセスするときに発生する違反を検出することを含む、請求項１に記載のコンピュータ・プログラム。
【請求項７】
前記トラップ・コードを前記実行することは、前記トラップ・アドレス範囲をアドレス・テーブルにおいてマッピングし、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、計算リソースにアクセスするために前記トラップ・アドレス範囲からトラップ・データを使用しようとすることを前記アクセス側アプリケーションが検出することを含む、請求項１に記載のコンピュータ・プログラム。
【請求項８】
複数のトラップ・アドレス範囲が、前記トラップ・コードの実行の複数のインスタンスに応答して割り当てられる、請求項１に記載のコンピュータ・プログラム。
【請求項９】
前記アプリケーション・コードを実行する前記プロセッサは、前記アプリケーション・コードの条件分岐の両方の分岐を投機的に実行し、前記条件分岐のうちの一方のみの結果が、前記条件分岐のどれを通過するかを判断するために使用される条件に応じて維持される、請求項１に記載のコンピュータ・プログラム。
【請求項１０】
前記トラップ・コードは、前記条件分岐を処理するときに、前記条件分岐のうちの条件分岐においてプロセッサにより投機的に実行される、請求項９に記載のコンピュータ・プログラム。
【請求項１１】
データにアクセスする潜在的に悪意のあるコードをストレージから検出するシステムであって、
アプリケーション・コード内の指定タイプのコマンドを処理する手段と、
トラップ・アドレス範囲を割り当てるために、前記指定タイプのコマンドを処理することに応答してトラップ・コードを実行する手段と、
前記アプリケーション・コード内の前記指定タイプのコマンドを実行することと、
アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスするかどうかを判断する手段と、
前記アクセス側アプリケーションが潜在的に悪意のあるコードを含むという通知を送信すること、前記アクセス側アプリケーションの実行をモニタリングすること、および前記アクセス側アプリケーションの前記実行を制限すること、のうちの少なくとも１つを、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたという判断に応答して実行する手段と、
を含む、システム。
【請求項１２】
前記指定タイプのコマンドが、カーネル・アドレスにアクセスするためにユーザ・モードからカーネル・モードへ切り替えるためのコマンドを含み、前記トラップ・アドレス範囲が、カーネル・アドレス空間において定義される、請求項１１に記載のシステム。
【請求項１３】
前記システムは、
アドレス・テーブルにおいてキャッシュ内の有効データにマッピングされていない前記カーネル・アドレス空間内のアドレスに前記アクセス側アプリケーションがアクセスすることに応答して、セグメンテーション違反を受信する手段をさらに含み、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断することは、前記セグメンテーション違反を受信することに応答して行われる、請求項１２に記載のシステム。
【請求項１４】
前記トラップ・アドレス範囲は、アドレス・テーブルにおいて無効物理アドレスにマッピングされ、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断する手段は、無効な位置にマッピングされた前記トラップ・アドレス範囲に前記アクセス側アプリケーションがアクセスするときに発生する違反を検出することを含む、請求項１１に記載のシステム。
【請求項１５】
前記トラップ・コードを前記実行する手段は、前記トラップ・アドレス範囲をアドレス・テーブルにおいてマッピングし、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたかどうかを前記判断する手段は、計算リソースにアクセスするために前記トラップ・アドレス範囲からトラップ・データを使用しようとすることを前記アクセス側アプリケーションが検出することを含む、請求項１１に記載のシステム。
【請求項１６】
データにアクセスする潜在的に悪意のあるコードをストレージから検出するコンピュータが実行する方法であって、前記コンピュータが、
アプリケーション・コード内の指定タイプのコマンドを処理することと、
トラップ・アドレス範囲を割り当てるために、前記指定タイプのコマンドを処理することに応答してトラップ・コードを実行することと、
前記アプリケーション・コード内の前記指定タイプのコマンドを実行することと、
アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスするかどうかを判断することと、
前記アクセス側アプリケーションが潜在的に悪意のあるコードを含むという通知を送信すること、前記アクセス側アプリケーションの実行をモニタリングすること、および前記アクセス側アプリケーションの前記実行を制限すること、のうちの少なくとも１つを、前記アクセス側アプリケーションが前記トラップ・アドレス範囲にアクセスしたという判断に応答して実行することと、
を実行する、方法。
【請求項１７】
請求項１〜１０のいずれか１項に記載のコンピュータ・プログラムを記録する、コンピュータ可読な記録媒体。
【国際調査報告】
2021521513.tif 000010
2021521513.tif 000011