(57)【特許請求の範囲】
【請求項１】
コード署名要件を強制する装置においてコンピュータコードを受信する処理と、
前記コンピュータコードの無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分を識別する処理と、
前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分の少なくとも一部に、前記装置上の無作為に選択したメモリ領域を割り当てる処理と、
前記無作為に選択したメモリ領域内の前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分を実行する処理と、
が実行されることを特徴とする方法。
【請求項２】
受信した前記コンピュータコードの無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分を識別する処理は、前記コンピュータコード内のｊｕｓｔ−ｉｎ−ｔｉｍｅフラグに基づくことを特徴とする請求項１に記載の方法。
【請求項３】
前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコンピュータコード部分は、特定の資格を有するアプリケーションにより処理されることを特徴とする請求項１に記載の方法。
【請求項４】
前記アプリケーションの前記特定の資格は、証明書及びプロビジョニングプロファイルに基づいて与えられることを特徴とする請求項３に記載の方法。
【請求項５】
前記アプリケーションの前記特定の資格は、公開鍵インフラストラクチャ及び少なくとも１つのオペレーティングシステムレベルのメカニズムを通じて行使されることを特徴とする請求項３に記載の方法。
【請求項６】
前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分のための無作為に選択したメモリ領域を、１回の処理につき１つしか割り当てることができないことを特徴とする請求項１に記載の方法。
【請求項７】
前記アプリケーションの処理期間中に、前記無作為に選択したメモリ領域を前記アプリケーションが再使用することを禁止する処理をさらに含む、請求項３に記載の方法。
【請求項８】
前記無作為に選択したメモリ領域を含むメモリページの共有を禁止する処理をさらに含む、請求項１に記載の方法。
【請求項９】
プロセッサと、
命令を記憶する不揮発性のコンピュータ読み取り可能な記録媒体とを備えたシステムであって、
前記プロセッサの実行時に、前記命令は該プロセッサに対して、
コンピュータコードを受け取る処理と、
前記コンピュータコードの無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分を識別する処理と、
前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分の少なくとも一部に、前記システム上の無作為に選択したメモリ領域を割り当てる処理と、
前記無作為に選択したメモリ領域をコード署名要件の対象外とする処理と、
前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分を実行する処理と、
を含む方法を実行させることを特徴とするシステム。
【請求項１０】
前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコンピュータコード部分は、特定の資格を有するアプリケーションにより処理されることを特徴とする請求項９に記載のシステム。
【請求項１１】
前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分のための無作為に選択したメモリ領域を、１回の処理につき１つしか割り当てることができないことを特徴とする請求項９に記載のシステム。
【請求項１２】
前記システム上で実行されるオペレーティングシステムカーネルが、前記無作為に選択したメモリ領域を選択することを特徴とする請求項９に記載のシステム。
【請求項１３】
ｊｕｓｔ−ｉｎ−ｔｉｍｅコードを処理するための命令を記憶する不揮発性のコンピュータ読み取り可能な記録媒体であって、コード署名要件を強制するコンピュータ装置の実行時、該コンピュータ装置に、
前記コンピュータ装置において受け取ったコンピュータコードの無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分を識別する手順と、
前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコンピュータコード部分を記憶する無作為に選択したメモリ領域にアクセスする手順と、
前記無作為に選択したメモリ領域内の前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分を実行する手順と、
を実行させるための前記命令を記憶した不揮発性のコンピュータ読み取り可能な記録媒体。
【請求項１４】
前記受け取ったコンピュータコードの前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分を識別する手順は、前記コンピュータコード内のｊｕｓｔ−ｉｎ−ｔｉｍｅフラグに基づくことを特徴とする、請求項１３に記載のコンピュータ読み取り可能な記録媒体。
【請求項１５】
前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコンピュータコード部分は、特定の資格を有するアプリケーションにより処理される、請求項１３に記載のコンピュータ読み取り可能な記録媒体。
【請求項１６】
前記アプリケーションの前記特定の資格は、公開鍵インフラストラクチャ及び少なくとも１つのオペレーティングシステムレベルのメカニズムを通じて行使される、請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項１７】
前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコンピュータコード部分は、ＪａｖａＳｃｒｉｐｔ（Ｒ）コードである、請求項１３に記載のコンピュータ読み取り可能な記録媒体。
【請求項１８】
前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分は、ウェブブラウザにより実行される、請求項１３に記載のコンピュータ読み取り可能な記録媒体。
【請求項１９】
前記無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコンピュータコード部分は、特定の資格を有するアプリケーションにより処理される、請求項１７に記載のコンピュータ読み取り可能な記録媒体。
【請求項２０】
前記コンピュータ装置上で実行されるオペレーティングシステムカーネルが、前記無作為に選択したメモリ領域を選択する、請求項１９に記載のコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
〔関連出願との相互参照〕
本出願は、２０１１年１月１８日に出願された「メモリ範囲を無作為に割り当てたセキュアシステムにおいてＪＩＴをサポートするためのシステム及び方法（ＳＹＳＴＥＭ  ＡＮＤ  ＭＥＴＨＯＤ  ＦＯＲ  ＳＵＰＰＯＲＴＩＮＧ  ＪＩＴ  ＩＮ  Ａ  ＳＥＣＵＲＥ  ＳＹＳＴＥＭ  ＷＩＴＨ  ＲＡＮＤＯＭＬＹ  ＡＬＬＯＣＡＴＥＤ  ＭＥＭＲＯＹ  ＲＡＮＧＥＳ）」という名称の米国特許出願第１３／００８，８８０号に対する優先権を主張するものであり、この特許出願は、その全体が引用により本明細書に組み入れられる。
【０００２】
本開示は、一般にｊｕｓｔ−ｉｎ−ｔｉｍｅコードに関し、具体的には、コード署名要件を強制する装置において無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅコードを処理することに関する。
【背景技術】
【０００３】
技術において最も望まれる特徴のいくつかに、セキュリティ及びパフォーマンスがある。多くの様々な環境において、コンピュータ装置におけるセキュリティ及びパフォーマンスを高める必要性が定期的に見られる。ソフトウェアの複雑性が増せばより高いパフォーマンスが求められ、セキュリティ上の脅威が広まればセキュリティの向上が求められるが、開発者は、セキュリティとパフォーマンスを向上させたシステムを設計するというますます困難な問題に直面する。いずれか一方のみを向上させるのではなく、両方を総合的に向上させることが困難なのである。通常、セキュリティを強化するとパフォーマンスの妨げになり、その逆も同様であるため、多くの場合、開発者は、パフォーマンス又はセキュリティは向上させるが、両方をともに向上させることはめったにない。
【０００４】
セキュリティを向上させるための１つの手法にコード署名がある。コード署名は、システムが（作成者又は発行者などの）コードの出所を特定し、及び／又はコードが変化又は破損していないことを保証できるように、コンピュータコードにデジタルに署名を行う処理である。通常、（作成者又は発行者などの）署名者は、コードのメッセージダイジェストを生成し、秘密鍵を使用してこのダイジェストを暗号化する。次に、署名者は、コードに署名するために、この暗号化したダイジェスト及びデジタル証明書を、秘密鍵に対応する公開鍵を含めてコードに挿入する。ユーザのコンピュータは、コードのダイジェストを作成し、暗号化された署名者のダイジェストをデジタル証明書からの公開鍵を使用して解読し、これらの結果を比較することにより、署名を検証する。この２つのダイジェストが一致した場合、その署名は正当なものである。コード署名を使用すれば、詐称者及び悪質な攻撃者が装置のリソースを奪って無許可のコードを実行する能力は著しく制限される。一般的に、コード署名は、正規のアプリケーションの識別を容易にし、より優れた信頼性の高いユーザ体験を生み出す。しかしながら、残念なことに、ｊｕｓｔ−ｉｎ−ｔｉｍｅコンパイルされたコードには、コード署名を利用することができない。
【０００５】
ｊｕｓｔ−ｉｎ−ｔｉｍｅ（ＪＩＴ）コンパイルとは、コンピュータコードを機械語命令にオンデマンド変換、すなわち「ｊｕｓｔ−ｉｎ−ｔｉｍｅ」変換することである。ＪＩＴでは、連続的に変換を行い、変換済みのコードをキャッシュして、パフォーマンスを高めるとともに高速なコード実行を行うことができる。驚くほどのことではなく、ＪＩＴは、プログラムの実行時パフォーマンスを高めるための一般的な手法である。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
そうは言うものの、ＪＩＴにはいくつかの制限がある。第１に、開発者は、オンザフライでコンパイルされたコードにデジタル署名することができない。この結果、ＪＩＴは、システムがＪＩＴコードに対してコード署名を行う能力を奪うことになる。実際に、コード署名要件を強制するセキュアシステムでは、ＪＩＴコードを実行することができない。第２に、ＪＩＴコンパイラは、攻撃者がＪＩＴを使用して予測可能なアドレスにメモリ領域を作成し、このメモリ領域内に攻撃者のペイロードをコピーして攻撃者のコードを実行するというメモリ操作攻撃を受けることが多い。従って、ＪＩＴにはいくつかの利点があるものの、セキュリティ上の制約によって重大なリスクが生じる可能性があり、これらは全て、コード署名技術が存在しないことによって悪化する。
【課題を解決するための手段】
【０００７】
以下の説明では、本開示のさらなる特徴及び利点を示すが、この説明からこれらの特徴及び利点が部分的に明らかになり、又は本明細書に開示する原理を実施することにより習得できるようになるであろう。本開示の特徴及び利点は、添付の特許請求の範囲に具体的に指摘する手段及び組み合わせを通じて実現及び取得することができる。本開示のこれらの及びその他の特徴は、以下の説明及び添付の特許請求の範囲からより完全に明らかになり、又は本明細書に示す原理を実施することにより習得できるようになるであろう。
【０００８】
コード署名要件を強制する装置においてｊｕｓｔ−ｉｎ−ｔｉｍｅコードを処理するためのシステム、方法及び非一時的コンピュータ可読記憶媒体を開示する。本開示は、コード署名技術を実行するセキュアシステム内にＪＩＴを実装しながら、ＪＩＴに見られるメモリ操作に対する脆弱性を、アドレス空間レイアウトの無作為化（ＡＳＬＲ）によって有意に最小化する方法を提供するものである。コード署名及びＡＳＬＲは、相補的なセキュリティ手法である。これらの手法を、ＪＩＴ能力をサポートするように合わせて実装した場合、セキュリティ保護が強化されてセキュリティ及びパフォーマンスが向上する。
【０００９】
本開示のシステムは、装置のコード署名要件に従ってｊｕｓｔ−ｉｎ−ｔｉｍｅコードを処理する。システム上のアプリケーションが、ＨＴＭＬドキュメントなどのコンピュータコードを受け取り、このコンピュータコード内の、例えばＪａｖａＳｃｒｉｐｔ（Ｒ）スクリプトなどの無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分を識別する。次に、このアプリケーションは、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分の少なくとも一部に、装置上の無作為に選択したメモリ領域を割り当てる。１つの態様では、１回の処理につき、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分に、無作為に選択したメモリ領域を１つしか割り当てることができない。別の態様では、１回の処理につき、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分に、複数の無作為に選択したメモリ領域を割り当てることができる。さらに別の態様では、１回の処理につき、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分に、１又はそれ以上の無作為に選択したメモリ領域、及び１又はそれ以上の作為的に選択したメモリ領域を割り当てることができる。
【００１０】
１つの実施形態では、その後システムが、この無作為に選択したメモリ領域をコード署名要件の対象外とし、アプリケーションが、この対象外のメモリ領域に記憶された無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分を実行する。従って、アプリケーションは、無作為に選択したメモリ領域をコード署名要件の対象外とする余分なステップを伴わずに、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分を実行することができる。
【００１１】
この方法は本開示の一例であり、この方法に関連する原理は、システム及びコンピュータ可読媒体に適用可能である。この方法について、方法を実施するように構成されたシステムの観点から説明する。このシステムは、コード署名要件を強制するあらゆる物理的及び／又は仮想的な装置（例えば、コード署名技術を実行するセキュアシステム）とすることができる。まず、システムは、一部に無署名の実行可能ｊｕｓｔ−ｉｎ−ｔｉｍｅコードを含むコンピュータコードを受け取る。次に、システムは、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分を識別し、この無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分の少なくとも一部に、装置上の無作為に選択したメモリ領域を割り当てる。識別は、コード内のｊｕｓｔ−ｉｎ−ｔｉｍｅフラグ、ｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分を抽出する構文解析プログラム又はその他の識別要素、ｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分の場所についてのテーブル、コードの特定の特徴、特性、属性、パターン又は構造、或いはコード解析を通じた識別などの他のいずれかの識別に基づくことができる。
【００１２】
次に、システムは、無作為に選択したメモリ領域内の無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分を、署名済みのコンピュータコードであるかのように実行する。１つの態様では、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコンピュータコード部分が、例えばウェブブラウザなどの、特定の資格を有するアプリケーションによって処理される。この特定の資格は、アプリケーションが無署名のコードを処理する許可を有することを保証するものである。特定の資格は、許可フラグ、属性、参照記号、記述子、又はオペレーティングシステムにより強制される他のいずれかの特徴とすることができる。アプリケーションの特定の資格は、証明書及びプロビジョニングプロファイルに基づいて与えることができ、また公開鍵インフラストラクチャ（例えば、信頼できる機関を通じて取得され共有される公開暗号鍵と秘密暗号鍵の対）、及び１又はそれ以上のオペレーティングシステムレベルのメカニズム（例えば、認証、セキュリティポリシー、アクセス制御、セキュリティプロトコル、暗号ソフトウェア及びプロトコルなど）を通じて行使することができる。
【００１３】
本開示の方法の他のバージョンは、コード署名要件を強制する装置内でｊｕｓｔ−ｉｎ−ｔｉｍｅコードを実行するステップを含み、このステップは、まず、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分を記憶する装置上の無作為に選択したメモリ領域にアクセスし、その後、この無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分を署名済みのコンピュータコードであるかのように実行することによって開始する。無作為に選択したメモリ領域に対するメモリアクセス許可は、読み取り可能、書き込み可能、かつ実行可能とすることができる。従って、アプリケーションは、この領域に記憶されたデータを読み取ること、このデータを修正すること、及びデータ内の命令を実行することを含むことができる動作を、このメモリ領域内で行うことができる。
【００１４】
従って、本開示は、コード署名技術を実行するセキュアシステム内にＪＩＴを実装しながら、ＪＩＴにおけるメモリ操作に対する脆弱性をＡＳＬＲによって有意に最小化する方法を効果的に提供する。これにより、セキュリティ及び／又はパフォーマンスを向上させることができる。この結果、本開示によるｊｕｓｔ−ｉｎ−ｔｉｍｅコードを処理するためのシステム、方法及び非一時的コンピュータ可読記憶媒体によって強化されるセキュリティ及び改善されるパフォーマンスから、あらゆる装置が恩恵を受けることができる。
【００１５】
本開示の上述の及びその他の利点及び特徴をいかにして得ることができるかを説明するために、上記で概説した原理について、添付図面に示すその特定の実施形態を参照しながらより詳細に説明する。これらの図面は本開示の例示的な実施形態を示すものにすぎず、従って本開示の範囲を限定すると見なすべきではないという理解の下、添付図面を使用して本明細書における原理をさらなる特異性及び詳細とともに記述し説明する。
【図面の簡単な説明】
【００１６】
【図１】システムの実施形態例を示す図である。
【図２】ｊｕｓｔ−ｉｎ−ｔｉｍｅコードを処理するための例示的なシステムを示す図である。
【図３】コンピュータコードの例を示す図である。
【図４】アプリケーションの無作為化したメモリレイアウトの例を示す図である。
【図５】例示的な方法の実施形態を示す図である。
【図６】例示的な方法の実施形態を示す図である。
【発明を実施するための形態】
【００１７】
以下、本開示の様々な実施形態について詳細に説明する。特定の実装について説明するが、この説明は例示目的で行うものにすぎないと理解されたい。当業者であれば、本開示の思想及び範囲から逸脱することなく、他の要素及び構成を使用できると認識するであろう。
【００１８】
本開示は、コード署名技術を実行するセキュアシステム内にＪＩＴを実装するという、当業における少なくとも１つのニーズに対処するものである。本明細書で説明する方法を使用して、コード署名要件を強制するシステムにおいて無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅコンピュータコード部分を実行することができる。システムは、アドレス空間レイアウトの無作為化を使用して、ＪＩＴにおけるメモリ操作に対する脆弱性を低下させることができる。システムは、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅコード部分に装置上の無作為に選択したメモリ領域を割り当てることにより、メモリレイアウトの予測可能性を低下させて、セキュリティ攻撃が成功する確率を低減する。システムは、装置に対してコード署名要件を強制するものの、ＪＩＴに割り当てられた無作為に選択したメモリ領域をこれらのコード署名要件の対象外とすることができる。従って、装置において強制されるコード署名要件にもかかわらず、この対象外の領域から無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分を実行することができる。この結果、システムは、ＡＳＬＲ技術及びコード署名技術によるさらなるセキュリティ保護が加わったＪＩＴのパフォーマンス利点をもたらす。
【００１９】
本開示では、まず、本明細書に開示する概念を実施するために使用できる図１の基本的な汎用システム又はコンピュータ装置の簡単な前置き説明を示す。次に、図２のｊｕｓｔ−ｉｎ−ｔｉｍｅコードを処理するための例示的なシステム、図３のコンピュータコードの例示的な説明図、及び図４のアプリケーションの無作為化したメモリレイアウトの例について詳細に説明する。最後に、図５及び図６の２つの例示的な方法の実施形態に進む。本明細書では、様々な実施形態を示しながらこれらの変化例についても説明する。まず、図１を参照する。
【００２０】
図１を参照すると、例示的なシステム１００が、処理装置（ＣＰＵ又はプロセッサ）１２０と、リードオンリメモリ（ＲＯＭ）１４０及びランダムアクセスメモリ（ＲＡＭ）１５０などのシステムメモリ１３０を含む様々なシステム要素をプロセッサ１２０に結合するシステムバス１１０とを含む汎用コンピュータ装置１００を含む。システム１００は、プロセッサ１２０に直接接続された、プロセッサ１２０の直近に存在する、又はプロセッサ１２０の一部として統合された高速メモリであるキャッシュ１２２を含むことができる。システム１００は、プロセッサ１２０が素早くアクセスできるように、メモリ１３０及び／又は記憶装置１６０からキャッシュにデータをコピーする。このようにして、キャッシュは、プロセッサ１２０がデータを待っている間に遅延することを避けるパフォーマンスブーストを提供する。これらの及びその他のモジュールは、様々な動作を行うようにプロセッサ１２０を制御し、又は制御するように構成することができる。同様に、他のシステムメモリ１３０を使用することもできる。メモリ１３０は、ＲＡＭ、ＲＯＭ、ハードディスクドライブ、光学記憶装置、フラッシュメモリ及びその他のいずれか記憶装置を含む、パフォーマンス特性の異なる複数の異なるタイプのメモリを含むことができる。システム１００は、システムメモリ１３０を、１又はそれ以上のメモリブロックを含むメモリ領域に分割し、処理で使用するメモリアドレスを実際の物理アドレスから分離することができる。処理装置１２０は、これらのメモリ領域を使用して、システム１００全体にわたってメモリ空間を割り当てることができる。例えば、処理装置１２０は、メモリ要求を受け取ると、メモリ領域を識別して（メモリアドレスなどの）記憶域を割り当てる。さらに、システム１００は、ハードディスクなどの他の記憶装置を使用することにより追加のランダムアクセスメモリをシミュレートして、仮想メモリ、すなわち仮想アドレスを実アドレスにマッピングすることにより作成されるアドレス指定可能な記憶空間を作成することができる。
【００２１】
本開示は、複数のプロセッサ１２０を有するコンピュータ装置１００上、或いはより高い処理能力を提供するように共にネットワーク化された一群のコンピュータ装置上で動作できると理解されたい。プロセッサ１２０は、いずれかの汎用プロセッサ、及びプロセッサ１２０を制御するように構成されたハードウェアモジュール又はソフトウェアモジュール（記憶装置１６０に記憶されたモジュール１  １６２、モジュール２  １６４及びモジュール３  １６６など）、並びに実際のプロセッサ設計にソフトウェア命令を組み込んだ専用プロセッサを含むことができる。プロセッサ１２０は、基本的に、複数のコア又はプロセッサ、バス、メモリコントローラ、キャッシュなどを含む、完全に内蔵型のコンピュータシステムとすることができる。マルチコアプロセッサは、対称型であっても又は非対称型であってもよい。
【００２２】
システムバス１１０は、様々なバスアーキテクチャのいずれかを使用する、メモリバス又はメモリコントローラ、周辺バス及びローカルバスを含むいくつかのタイプのバス構造のいずれであってもよい。ＲＯＭ１４０などに記憶される基本入出力（ＢＩＯＳ）は、起動中などにコンピュータ装置１００内の要素間で情報を転送し合うのに役立つ基本ルーチンを提供することができる。コンピュータ装置１００は、ハードディスクドライブ、磁気ディスクドライブ、又は光ディスクドライブなどの記憶装置１６０をさらに含む。記憶装置１６０は、プロセッサ１２０を制御するためのソフトウェアモジュール１６２、１６４、１６６を含むことができる。他のハードウェアモジュール又はソフトウェアモジュールも企図される。記憶装置１６０は、ドライブインターフェイスによってシステムバス１１０に接続される。ドライブ及び関連するコンピュータ可読記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、及びコンピュータ装置１００のためのその他のデータの不揮発性記憶を行う。１つの態様では、特定の機能を実行するハードウェアモジュールが、この機能を実施するために、プロセッサ１２０、バス１１０及びディスプレイ１７０などの必要なハードウェア要素に接続された非一時的コンピュータ可読媒体に記憶されたソフトウェア要素を含む。基本的な構成要素は当業者に公知であり、装置１００が小型であるか、ハンドヘルド型コンピュータ装置であるか、デスクトップ型コンピュータであるか、又はコンピュータサーバであるかなどの装置のタイプに依存して適当な変形も企図される。
【００２３】
本明細書で説明する例示的な実施形態では、ハードディスク１６０を使用するが、当業者であれば、例示的な動作環境では、磁気カセット、フラッシュメモリカード、デジタル多用途ディスク、カートリッジ、ランダムアクセスメモリ（ＲＡＭ）１５０、リードオンリメモリ（ＲＯＭ）１４０、及びビットストリームを含む有線又は無線信号などの、コンピュータがアクセス可能なデータを記憶できる他のタイプのコンピュータ可読媒体を使用できると理解するはずである。正確に言えば、非一時的コンピュータ可読記憶媒体には、エネルギー、搬送波信号、電磁波及び信号などの媒体は明確に含まれない。
【００２４】
コンピュータ装置１００とのユーザインタラクションを可能にするために、入力装置１９０は、発話のためのマイク、ジェスチャ入力又はグラフィック入力のためのタッチ感知式スクリーン、キーボード、マウス、動作入力及び音声などの多くの入力メカニズムを表す。出力装置１７０も、当業者に公知の多くの出力メカニズムの１つ又はそれ以上とすることができる。場合によっては、多モードシステムにより、ユーザが複数種の入力を行ってコンピュータ装置１００と通信できるようにする。一般に、通信インターフェイス１８０は、ユーザ入力及びシステム出力の制御及び管理を行う。いずれかの特定のハードウェア構成上で動作することに制限はなく、従って改善されたハードウェア又はファームウェア構成が開発されるにつれ、これらをここに示す基本的な特徴部に代えて容易に使用することができる。
【００２５】
説明を明確にするために、例示的なシステムの実施形態を、「プロセッサ」又はプロセッサ１２０として示す機能ブロックを含む個々の機能ブロックを含むものとして示している。これらのブロックが表す機能は、以下に限定されるわけではないが、ソフトウェアを実行できるハードウェア、及び汎用プロセッサ上で実行されるソフトウェアの同等物として動作することを専用とするプロセッサ１２０などのハードウェアを含む、共有ハードウェア又は専用ハードウェアのいずれかを使用することにより実現することができる。例えば、図１に示す１又はそれ以上のプロセッサの機能を、単一の共有プロセッサ又は複数のプロセッサにより実現することができる。（「プロセッサ」という用語を使用していても、これがソフトウェアを実行できるハードウェアのみを意味すると解釈すべきではない。）例示的な実施形態は、マイクロプロセッサ及び／又はデジタルシグナルプロセッサ（ＤＳＰ）ハードウェア、後述する動作を実行するソフトウェアを記憶するためのリードオンリメモリ（ＲＯＭ）１４０、及び結果を記憶するためのランダムアクセスメモリ（ＲＡＭ）１５０を含むことができる。超大規模集積回路（ＶＬＳＩ）ハードウェアの実施形態、並びに特別仕様のＶＬＳＩ回路を汎用ＤＳＰ回路と組み合わせたものを提供することもできる。
【００２６】
様々な実施形態の論理的動作は、（１）汎用コンピュータ内のプログラマブル回路上で実行される、コンピュータ実装ステップ、動作又は手順のシーケンス、（２）専用プログラマブル回路上で実行される、コンピュータ実装ステップ、動作又は手順のシーケンス、及び／又は（３）プログラマブル回路内の相互接続された機械モジュール又はプログラムエンジンとして実装される。図１に示すシステム１００は、記載する方法の全部又は一部を実施することができ、記載するシステムの一部とすることができ、及び／又は記載する非一時的コンピュータ可読記憶媒体内の命令に従って動作することができる。このような論理的動作は、モジュールのプログラムに従って特定の機能を実施するようにプロセッサ１２０を制御するよう構成されたモジュールとして実装することができる。例えば、図１には、プロセッサ１２０を制御するように構成された３つのモジュールＭｏｄ１  １６２、Ｍｏｄ２  １６４、及びＭｏｄ３  １６６を示している。一例として、Ｍｏｄ１  １６２を、システム１００にコード署名要件を強制するようにプロセッサ１２０を制御するよう構成することができる。Ｍｏｄ２  １６４は、システム１００上のメモリ領域を無作為に選択し、この選択したメモリ領域を使用してシステム１００全体にわたってメモリ空間を割り当てるようにプロセッサ１２０を制御するよう構成することができる。Ｍｏｄ３  １６６は、署名済み又は無署名の静的コード、インタープリタ型コード及びｊｕｓｔ−ｉｎ−ｔｉｍｅコードを含むコンピュータコードを実行するようにプロセッサを制御するよう構成することができる。これらのモジュールは、記憶装置１６０上に記憶して実行時にＲＡＭ１５０又はメモリ１３０内にロードしてもよく、又は当業で公知のように他のコンピュータ可読メモリの場所に記憶してもよい。
【００２７】
コンピュータシステムのいくつかの構成要素を開示したところで、次にｊｕｓｔ−ｉｎ−ｔｉｍｅコードを処理するための例示的なシステムを示す図２を参照する。明確にするために、図２の説明は、コード署名要件を強制するように構成された、図１に示すような例示的なシステムの観点から行う。
【００２８】
この例では、システム２０２内で、特定の資格を有するアプリケーションによってｊｕｓｔ−ｉｎ−ｔｉｍｅコードが処理される。この特定の資格は、アプリケーションが無署名のコードを処理する許可を有することを保証するものである。特定の資格は、許可フラグ、属性、参照記号、記述子、又はオペレーティングシステムにより行使される他のいずれかの特徴とすることができる。１つの態様では、このアプリケーションをウェブブラウザとすることができる。ウェブブラウザは、Ｏｐｅｒａ、Ｓａｆａｒｉ、又はＫ−Ｍｅｌｅｏｎなどの「フル」ウェブブラウザであっても、或いはｉＯＳ用のＳａｆａｒｉ又はＯｐｅｒａ  Ｍｉｎｉなどの、「フル」ブラウザ能力の一部を含む「モバイル」ブラウザであってもよい。
【００２９】
システム２０２内の資格を有するアプリケーション２０４は、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコードであるコード部分を含むコンピュータコードを受け取る２１０。次に、資格を有するアプリケーション２０４は、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分を識別する２１２。識別は、コード内のｊｕｓｔ−ｉｎ−ｔｉｍｅフラグ、ｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分を抽出する構文解析プログラム又はその他の識別要素、ｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分の場所についてのテーブル、コードの特定の特徴、特性、属性、パターン又は構造、或いはコード解析を通じた識別などの他のいずれかの識別に基づくことができる。資格を有するアプリケーション２０４は、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分２２２を識別した後、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分に装置上の無作為に選択したメモリ領域を割り当てる２２４。システムは、署名済みのコード部分２１４を任意に処理し２１６、この処理した署名済みのコード部分２１８を実行モジュール２２０に渡して実行させる。
【００３０】
資格を有するアプリケーション２０４は、無作為に選択したメモリ領域を割り当てるために、例えば、ＮｔＡｌｌｏｃａｔｅＶｉｒｔｕａｌＭｅｍｏｒｙ、ＶｉｒｔｕａｌＡｌｌｏｃ、ｖｍ＿ａｓｌｒ＿ｍｍａｐ、及びｖｍ＿ａｌｌｏｃａｔｅなどの命令セットを含むことができる。これらの関数は、連続する又は不連続なアドレスブロックを確保し、これらの確保したアドレスブロック内のページ領域を割り当てることができる。これらのアドレスブロックは、任意のアドレスにおける任意のサイズのメモリ領域から確保することができ、これらは固定することも又は動的に選択することもできる。資格を有するアプリケーション２０４は、無作為に選択したメモリ領域を選択することができ、或いはオペレーティングシステム又はメモリマネージャなどの別のシステム要素によって無作為に選択されたメモリ領域を単純に使用することもできる。メモリ領域は、ＪＩＴにおけるメモリ操作に対する脆弱性を低下させるために無作為に選択される。実行コードのメモリレイアウトを無作為化することにより、メモリレイアウトの予測可能性が低下し、攻撃が成功する確率が低減されるので、システム２０２は、コード注入又はシェルコードを含む攻撃に対して一定レベルのセキュリティをもたらす。１つの態様では、１回の処理につき、無署名の実行可能なコード部分に、無作為に選択したメモリ領域を１つしか割り当てることができない。別の態様では、１回の処理につき、無署名の実行可能なコード部分に、複数の無作為に選択したメモリ領域を割り当てることができる。さらに別の態様では、１回の処理につき、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分に、１又はそれ以上の無作為に選択したメモリ領域、及び１又はそれ以上の作為的に選択したメモリ領域を割り当てることができる。この方法を、他の互換性のあるセキュリティ及び／又はパフォーマンス強化手法と組み合わせることもできる。
【００３１】
１つの実施形態では、無作為に選択したメモリ領域に対するメモリアクセス許可を、読み取り可能、書き込み可能、かつ実行可能とすることができる。この結果、資格を有するアプリケーション２０４は、この領域に記憶されたデータを読み取ること、このデータを修正すること、及びデータ内の命令を実行することを含むことができる動作を、このメモリ領域内で行うことができる。従って、この実施形態では、資格を有するアプリケーション２０４が、無作為に選択したメモリ領域をコード署名要件の対象外とする余分なステップを伴わずに、無作為に選択したメモリ領域２２４内の無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分２２２を実行することができる。
【００３２】
別の実施形態では、システム２０２又は資格を有するアプリケーション２０４が、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分２２８の少なくとも一部に割り当てられた無作為に選択したメモリ領域２２６を、コード署名要件の対象外とする。システム２０２又は資格を有するアプリケーション２０４は、資格を有するアプリケーション２０４が、無作為に選択したメモリ領域を無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分に割り当てた後に、この領域を対象外とすることができる。システム２０２又は資格を有するアプリケーション２０４は、資格を有するアプリケーション２０４が、無作為に選択したメモリ領域を無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分２２８に割り当てた時点又はその前に、この領域を対象外とすることもできる。最後に、資格を有するアプリケーション２０４は、無作為に選択したメモリ領域２２０内の無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分を実行すること又は実行させることができる。
【００３３】
図３に、第１の無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分３０６及び第２の部分３０８を含むコンピュータコード３０２の例を示す。この無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分３０６は、いずれかのプログラミング言語で書かれた、ｊｕｓｔ−ｉｎ−ｔｉｍｅコンパイルに依拠するいずれかのコード部分を含むことができる。対照的に、第２の部分３０８は、いずれかのプログラミング言語で書かれたいずれかのコード部分を含むことができ、任意にデジタル署名することができる。図３から分かるように、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分３０６は、ＪａｖａＳｃｒｉｐｔ（Ｒ）コードとすることができ、第２の部分３０８は、マークアップ言語によるものとすることができる。他のｊｕｓｔ−ｉｎ−ｔｉｍｅ言語の例としては、ＬＩＳＰ、Ｊａｖａ（Ｒ）及び．ＮＥＴフレームワークが挙げられる。さらに、コンピュータコード３０２は、システム２０２が無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分３０６を識別するために使用できるｊｕｓｔ−ｉｎ−ｔｉｍｅフラグ３０４を含むことができる。ある例では、ｊｕｓｔ−ｉｎ−ｔｉｍｅフラグがスクリプトタグ３０４である。
【００３４】
図４に、アプリケーション４１０の無作為化したメモリレイアウトの例を示す。この例では、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分を記憶するための、無作為に選択したメモリ領域４１２、すなわちロードアドレスが割り当てられる。無作為に選択したロードアドレスは、重要データ領域、すなわちプロセスヒープ４１４、スレッドスタック４１６及びもう１つのスレッドスタック４１８にも割り当てられる。アプリケーションのメモリレイアウトは、メモリ操作に対する脆弱性から保護するために無作為化される。実行コードのメモリレイアウトを無作為化することにより、メモリレイアウトの予測可能性が低下し、攻撃が成功する確率が低減されるので、アプリケーションは、コード注入又はシェルコードを含むセキュリティ攻撃を防ぐことができる。
【００３５】
いくつかの基本的なシステム要素及び概念を開示したところで、次に図５及び図６に示す例示的な方法の実施形態を参照する。明確にするために、これらの方法の説明は、この方法を実施するように構成された、図１に示すような例示的なシステムの観点から行う。本明細書で概説するステップは例示的なものであり、いくつかのステップを除外し、追加し又は修正する組み合わせを含むこれらのステップのあらゆる組み合わせで実装することができる。
【００３６】
図５には、コード署名要件を強制するように構成された装置においてｊｕｓｔ−ｉｎ−ｔｉｍｅコードを処理するための例示的な方法の実施形態を示す。この装置は、スマート電話、タブレット、コンピュータ、ＧＰＳ及びポータブルメディアなどの、モバイルコンピュータ装置又はその他のコンピュータ装置とすることができる。図５から分かるように、まずシステムは、一部に無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード３０６を含むコンピュータコード３０２を受け取る５１０。特定の実施形態では、このｊｕｓｔ−ｉｎ−ｔｉｍｅコードが、特定の資格を有するアプリケーションによって処理される。アプリケーションの特定の資格は、証明書及びプロビジョニングプロファイルに基づいて与えることができ、また公開鍵インフラストラクチャ（例えば、信頼できる機関を通じて取得され共有される公開暗号鍵と秘密暗号鍵の対）、及び１又はそれ以上のオペレーティングシステムレベルのメカニズム（例えば、認証、セキュリティポリシー、アクセス制御、セキュリティプロトコル、暗号ソフトウェア及びプロトコルなど）を通じて行使することができる。
【００３７】
次に、アプリケーションは、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分３０６を識別する５１２。識別は、上述した通りに行うことができる。次に、アプリケーションは、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分３０６の少なくとも一部に、装置上の無作為に選択したメモリ領域４１２を割り当てる５１４。１つの態様では、アプリケーションが、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分３０６の一部に、装置上の無作為に選択したメモリ領域４１２を割り当て、無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード３０６の残り部分に、別のメモリ領域を割り当てることができる。このメモリ領域は、装置上で実行されるオペレーティングシステムカーネル及び／又は別のアプリケーションによって無作為に選択することができる。１つの態様では、無作為に選択したメモリ領域をアプリケーションが再使用することを、アプリケーションの残りの処理期間にわたって禁止することができる。別の態様では、無作為に選択したメモリ領域を含むメモリページをアプリケーションが共有することを禁止することができる。
【００３８】
１つの実施形態では、その後システムが、無作為に選択したメモリ領域４１２をコード署名要件の対象外とし５１６、アプリケーションが、無作為に選択したメモリ領域４１２内の無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分３０６を実行する５１８。
【００３９】
別の実施形態では、アプリケーションが、無作為に選択したメモリ領域４１２をコード署名要件の対象外とする余分なステップを伴わずに、無作為に選択したメモリ領域４１２４内の無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分３０６を実行する５１８。ここでは、無作為に選択したメモリ領域に対するメモリアクセス許可が、読み取り可能、書き込み可能、かつ実行可能である。従って、アプリケーションは、この領域に記憶されたデータを読み取ること、このデータを修正すること、及びデータ内の命令を実行することを含むことができる動作を、このメモリ領域内で行うことができる。さらに、この無作為に選択したメモリ領域４１２をＪＩＴコンパイラが使用して、ＪＩＴコンパイルコードを作成することができる。
【００４０】
１つの態様では、システムが、従来のＪＩＴ法と本明細書に示す強化した方法を切り替えることができる。プログラマーは、例えばＪＩＴコードの一部が特に影響を受け易いこと、又は高めた速度及び／又はセキュリティを別様に命令していることを示すことができる。同様に、ウェブブラウザが、信頼できるサイトからのＪａｖａＳｃｒｉｐｔ（Ｒ）コードに遭遇した場合、システムは、このＪａｖａＳｃｒｉｐｔ（Ｒ）コードを従来の方法で処理することができ、またウェブブラウザが、悪質な可能性のある又は信頼できないドメインからのＪａｖａＳｃｒｉｐｔ（Ｒ）コードに遭遇した場合、システムは、強化されたセキュリティモードに切り替えてこのＪａｖａＳｃｒｉｐｔ（Ｒ）コードを処理することができる。システムは、ユーザ入力、信頼できるサイトのデータベース、一定のコードパターン、ユーザ／装置の設定などの１又はそれ以上の内部及び／又は外部イベントに基づいて、「標準的な」ＪＩＴコード処理と「強化された」ＪＩＴコード処理を切り替えることができる。ネットワークを基盤にしたサーバは、一群の装置のためのＪＩＴコード処理モードを指示することができる。
【００４１】
図６には、コード署名要件を強制するように構成された装置においてｊｕｓｔ−ｉｎ−ｔｉｍｅコードを実行するための方法の実施形態６００を示す。装置は、この装置が実行するコードの一部又は全部に対してコード署名要件を強制することができる。さらに、無作為に選択したメモリ領域４１２に対するメモリアクセス許可を、読み取り可能、書き込み可能、かつ実行可能とすることができる。
【００４２】
図６で分かるように、まず、システム内のアプリケーションは、コンピュータコード３０２の無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能な部分３０６を記憶している無作為に選択したメモリ領域４１２にアクセスする。この例では、無作為に選択したメモリ領域４１２に対するアクセス許可が、読み取り可能、書き込み可能、かつ実行可能である。無作為に選択したメモリ領域４１２内の無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分は、例えば、ｈｅｌｌｏＷｏｒｌｄ関数を含むＪａｖａＳｃｒｉｐｔ（Ｒ）スクリプトとすることができる。
0005647360.tif 000002
【００４３】
破線のボックスで示すように、システムは、無作為に選択したメモリ領域４１２を任意にコード署名要件の対象外とし６０４、その後アプリケーションが、無作為に選択したメモリ領域４１２内の無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分３０６を実行する。例えば、アプリケーションは、ＪａｖａＳｃｒｉｐｔ（Ｒ）スクリプトを記憶している無作為に選択したメモリ領域をシステム又はアプリケーションがコード署名要件の対象外とした後に、ｈｅｌｌｏＷｏｒｌｄ関数を実行することができる。
【００４４】
或いは、アプリケーションは、無作為に選択したメモリ領域４１２をコード署名要件の対象外とする余分なステップを伴わずに、無作為に選択したメモリ領域４１２４内の無署名のｊｕｓｔ−ｉｎ−ｔｉｍｅ実行可能なコード部分３０６を実行することができる６０６。ここでは、アプリケーションが、無署名のコードを処理できるようになる特定の資格を有する。例えば、アプリケーションは、特定の資格を有することができ、従って無作為に選択したメモリ領域４１２をコード署名要件の対象外とする余分なステップを伴わずにｈｅｌｌｏＷｏｒｌｄ関数を実行することができる。
【００４５】
これらの方法を使用して、アドレス空間レイアウトの無作為化を用いてＪＩＴにおけるメモリ操作に対する脆弱性を低下させることにより、コード署名要件を強制するシステム内で無署名のＪＩＴコンパイルコードを実行することができる。この結果、これらの方法により、コード署名要件を強制するセキュアシステムが、無作為に割り当てられたメモリ範囲を使用してＪＩＴを実装できるようになり、これによりセキュリティ及び／又はパフォーマンスが高められる。
【００４６】
本開示の範囲に含まれる実施形態は、コンピュータ実行可能命令又はデータ構造を保持又は記憶するための有形の及び／又は非一時的なコンピュータ可読記憶媒体を含むこともできる。このような非一時的コンピュータ可読記憶媒体は、上述したいずれかの専用プロセッサの機能設計を含む汎用又は専用コンピュータがアクセスできるいずれの利用可能な媒体であってもよい。限定ではなく一例として、このような非一時的コンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ又はその他の光ディスクストレージ、磁気ディスクストレージ又はその他の磁気記憶装置、或いは所望のプログラムコード手段を、コンピュータ実行可能命令、データ構造又はプロセッサチップ設計の形で保持又は記憶するために使用できる他のいずれかの媒体を含むことができる。
【００４７】
コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ又は専用処理装置に特定の機能又は機能群を実行させる命令及びデータを含む。コンピュータ実行可能命令は、スタンドアローン環境又はネットワーク環境内のコンピュータにより実行されるプログラムモジュールも含む。一般に、プログラムモジュールは、特定のタスクを実行し又は特定の抽象データタイプを実装する専用プロセッサなどの設計に内在するルーチン、プログラム、コンポーネント、データ構造、オブジェクト及び関数を含む。コンピュータ実行可能命令、関連するデータ構造及びプログラムモジュールは、本明細書で開示した方法のステップを実行するためのプログラムコード手段の例を表す。このような実行可能命令又は関連データ構造の特定のシーケンスは、このようなステップで説明した機能を実施するための対応する動作の例を表す。
【００４８】
当業者であれば、パーソナルコンピュータ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースの又はプログラム可能な消費者向け電子機器、ネットワークＰＣ、ミニコンピュータ及びメインフレームコンピュータなどを含む多くの種類のコンピュータシステム構成を有するネットワークコンピュータ環境において本開示の他の実施形態を実施できると理解するであろう。通信ネットワークを通じて（有線リンク、無線リンク、又はこれらの組み合わせのいずれかによって）リンクされたローカル処理装置及び遠隔処理装置によりタスクが行われる分散コンピュータ環境において実施形態を実施することもできる。分散コンピュータ環境では、ローカルメモリ記憶装置と遠隔メモリ記憶装置の両方にプログラムモジュールを配置することができる。
【００４９】
上述した様々な実施形態は、例示として示したものにすぎず、本開示の範囲を限定すると解釈すべきではない。例えば、本明細書における原理は、携帯電話機又はタブレットなどのモバイル装置においても、或いは署名済みのコードを実行するデスクトップ型コンピュータ装置においても適用することができる。当業者であれば、本明細書で図示し説明した実施形態例及び用途例に従うことなく、及び本開示の思想及び範囲から逸脱することなく、本明細書で説明した原理に様々な修正及び変更を行えることを容易に認識するであろう。
【符号の説明】
【００５０】
２０２  システム
２０４  資格を有するアプリケーション
２１０  コンピュータコードを受け取る
２１２  無署名の部分を識別
２１４  署名済みの部分
２１６  署名済みの部分を処理
２１８  署名済みの部分
２２２  無署名のＪＩＴ部分
２２４  無作為に選択したメモリ領域を割り当て
２２６  メモリ領域を対象外にする
２２８  無署名のＪＩＴ部分
２２０  実行
【図１】
0005647360.tif 000003
【図２】
0005647360.tif 000004
【図３】
0005647360.tif 000005
【図４】
0005647360.tif 000006
【図５】
0005647360.tif 000007
【図６】
0005647360.tif 000008