(57)【要約】【課題】悪意のある攻撃、および（意図的な、あるいは意図的でない）バッファオーバーランからコンピュータを保護するシステムおよび方法を提供すること。【解決手段】詳細には、本発明の実施形態は、データブロックのブロックヘッダの内容を保護し、ブロックヘッダの一部分が変更されているかどうかをメモリマネジャが判定する能力を可能にする。本発明の一態様によれば、複数のフィールドを有するデータを保護する方法が提供される。この方法は、複数のフィールドを少なくとも第１のグループと第２のグループにグループ化し、第１のグループの第１の識別子と第２のグループの第２の識別子を生成することを含む。また、第１のグループと第２のグループは符号化されて、それらグループのフィールドに含まれる情報を保護する。さらに、第１の識別子と第２の識別もグループの中に符号化することができる。【選択図】図１
2006244496.tif 000002
【特許請求の範囲】
【請求項１】
複数のフィールドを有するデータを保護する方法であって、
前記複数のフィールドを少なくとも第１のグループと第２のグループにグループ化するステップと、
前記第１のグループ用の第１の識別子と、前記第２のグループ用の第２の識別子を生成するステップと、
前記第１のグループを符号化するステップと、
前記第２のグループを符合化するステップと
を備えることを特徴とする方法。
【請求項２】
前記第１のグループは、前記複数のフィールドの内の少なくとも２つを含み、前記方法は、
前記複数のフィールドをグループ化するのに応答して、前記第１のグループの内の前記少なくとも２つのフィールドを配置するステップ
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項３】
前記第１の識別子は、前記第１のグループとともに符号化されることを特徴とする請求項１に記載の方法。
【請求項４】
前記データはヘッダデータであることを特徴とする請求項１に記載の方法。
【請求項５】
前記複数のフィールドは、データブロックヘッダのフィールドであることを特徴とする請求項１に記載の方法。
【請求項６】
前記複数のフィールドをグループ化するステップは、
前記複数のフィールド間の関係を判定するステップと、
前記判定された前記複数のフィールド間の関係に従って前記フィールドをグループ化するステップと
を含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記フィールドをグループ化するステップは、
前記フィールドを無作為の順序でグループ化するステップ
を含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記第１の識別子は、前記グループ用に生成されたチェックサムであることを特徴とする請求項１に記載の方法。
【請求項９】
データの少なくとも一部分へのアクセスを提供する方法を実行するコンピュータ実行可能プログラムを備えるコンピュータ可読媒体を有するコンピュータシステムにおいて、前記データは、複数のグループに分割され、前記方法は、
前記データの一部分へのアクセス要求を受け取るステップと、
前記アクセス要求に対応する複数のデータグループの内の少なくとも１つのグループを確定するステップであって、前記確定された少なくとも１つのグループは識別子を含んでいるステップと、
前記確定された少なくとも１つのグループを復号するステップと、
前記復号された少なくとも１つのグループの識別子を検証するステップと、
前記復号された少なくとも１つのグループへのアクセスを許可するステップと
を備えることを特徴とするコンピュータシステム。
【請求項１０】
前記複数のグループの内の少なくとも１つは、複数のフィールドを含み、少なくとも１つのグループを確定するステップは、
前記アクセス要求に対応する前記複数のフィールドの内の１つのフィールドを識別するステップと、
前記識別されたフィールドに基づいて少なくとも１つのグループを確定するステップと
を含むことを特徴とする請求項９に記載のコンピュータシステム。
【請求項１１】
前記確定された少なくとも１つのグループを復号するために複数の復号アルゴリズムから１つの復号アルゴリズムを選択するステップ
をさらに備えることを特徴とする請求項９に記載のコンピュータシステム。
【請求項１２】
前記確定された少なくとも１つのグループを復号する際に使用するために複数の復号鍵から１つの復号鍵を選択するステップ
をさらに備えることを特徴とする請求項９に記載のコンピュータシステム。
【請求項１３】
前記復号された少なくとも１つのグループを検証するステップは、
前記復号されたグループを表す識別子を生成し、前記生成された識別子を前記復号されたグループの識別子と比較するステップ
を含むことを特徴とする請求項９に記載のコンピュータシステム。
【請求項１４】
前記既知の識別子は、前記復号されたグループに含まれていることを特徴とする請求項１３に記載のコンピュータシステム。
【請求項１５】
前記生成される識別子はチェックサムであることを特徴とする請求項１３に記載のコンピュータシステム。
【請求項１６】
前記既知の識別子は、前記グループ用に事前に生成されたチェックサムであることを特徴とする請求項１３に記載のコンピュータシステム。
【請求項１７】
ブロックヘッダの複数のフィールドを少なくとも２つのグループにグループ化し、
前記少なくとも２つのグループの第１のグループ用に第１の識別子を生成し、
前記第１のグループと前記第１の識別子を符号化し、
前記第２のグループを符号化する
ようにコンピューティングシステムに命令する命令が記憶されたことを特徴とするコンピュータアクセス可能媒体。
【請求項１８】
前記第１のグループは少なくとも２つのフィールドを含み、前記フィールドは、無作為の順序で配置されることを特徴とする請求項１７に記載のコンピュータアクセス可能媒体。
【請求項１９】
前記第１のグループと前記第１の識別子は、第１の暗号化アルゴリズムを使用して符号化され、前記第２のグループは、第２のアルゴリズムを使用して符号化されることを特徴とする請求項１７に記載のコンピュータアクセス可能媒体。
【請求項２０】
前記第１のグループと前記第１の識別子は、第１の暗号化鍵を使用して符号化され、前記第２のグループは、第２の暗号化鍵を使用して符号化されることを特徴とする請求項１７に記載のコンピュータアクセス可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にはコンピュータおよびコンピュータデータに関し、詳細には、ブロックメタデータを符号化するシステムおよび方法に関する。
【背景技術】
【０００２】
現在、コンピュータのメモリは、本明細書では「メモリマネジャ」と一般に称する、コンピュータのオペレーティングシステムの一部分によって管理される。コンピュータプログラムあるいは他のコンピューティングアプリケーション（本明細書ではまとめて「アプリケーション」と呼ぶ）が、諸動作の実行、データの記憶、あるいは他の機能の実行を行うためにメモリを必要とする場合には、必要とするメモリの量の識別をメモリマネジャに提供することにより、メモリマネジャに必要なメモリを要求する。それに対して、メモリマネジャは、要求される量のメモリ（本明細書では「ブロック」と称する）を割り当て、そのブロックを識別および記述するブロックヘッダを生成し、要求元のアプリケーションが割り当てられたメモリにアクセスすることを許可する。ブロックヘッダは一般に、メモリマネジャによって作成され、メモリを管理するためにメモリマネジャによって使用されるいくつかのフィールドを含む。ブロックヘッダのフィールドは、例えば、ブロックのサイズの表現、前のブロックへのリンクの表現、ブロックフラグ、未使用バイト、およびその他の内部のブロック状態を含めることが可能である。
【０００３】
ブロックサイズは、メモリ要求に応じて割り当てられたブロックのサイズの識別を含めることができる。フラグフィールドは、ブロックが使用中であるか、空いているか、内部で割り当てられているか等を識別するためにメモリマネジャによって使用されることができる。未使用バイトは、要求元のアプリケーションによって使用されていない割り当てブロックのバイトをメモリマネジャに明らかにすることができる。一般に、ブロックヘッダのフィールドは、メモリマネジャによって使用され、プライベートで、メモリマネジャのみによって変更されることが意図されている。また、ブロックヘッダのフィールドは、内容、数、サイズが異なってよい。
【０００４】
図１は、２つの割り当てられたブロック１０１および１０２を含むメモリ領域の一部分のブロック図である。各ブロック１０１、１０２は、そのブロックを識別する、複数のフィールドに区分されたメタデータを含むブロックヘッダを含む。例えば、ブロック１０２は、ブロックヘッダ１０３を含む。ブロックヘッダ１０３は、６つのフィールド１０５、１０７、１０９、１１１、１１３、１１５に区分された、ブロック１０２についてのメタデータを含む。フィールド１０５、１０７、１０９、１１１、１１３、１１５はそれぞれ、ブロック１０２を管理するためにメモリマネジャに使用される情報を含む。
【０００５】
ブロックヘッダを使用すると、データの管理がより効率的になるが、コンピューティングシステムを攻撃と意図的でないエラーにさらす可能性がある。例えば、アプリケーションは、特定の量のメモリを要求し、その量のメモリを割り当てられることができるが、割り当てられたメモリで保持できるよりも多い量のデータを書き込む場合がある。そのため、メモリ領域内の次のブロックヘッダ、そして可能性としては次のブロックの後続データの一部が上書きされ、それにより、結果として予想できない結果を招く恐れのある不整合を生じさせる場合がある。割り当てられたメモリより多くのデータを書き込むことは、一般に「バッファオーバーラン」と呼ばれる。バッファオーバーランは、アプリケーションを故意でなく不適切に符号化した結果生じる場合がある。しかし、バッファオーバーランは、メモリの一部の制御権を得、悪意のあるコードを実行することを目的として、意図的にプログラムされる場合がある。
【０００６】
図２は、結果的にバッファオーバーランを生じさせる悪意のあるコードが書き込まれた２つのデータブロックを含むメモリ領域のブロック図である。図１に関して述べたメモリ領域について続けると、アプリケーションは、データを書き込むために必要な特定量のメモリを要求することができる。それに応じて、メモリマネジャは、データ領域２００からデータのブロック２０１を割り当て、そのデータブロック２０１のブロックヘッダ２１６を生成し、要求元のアプリケーションがそのブロックに書き込むことを許可することができる。図１および２から分かるように、割り当てられたデータブロック２０１は、メモリ領域２００内で別の割り当てられたデータブロック２０２と隣接する場合があり、このデータブロック２０２も、ブロックヘッダ２０３とデータブロック２１７を含む。
【０００７】
ブロック２０１へのアクセス権を与えられると、アプリケーションは、割り当てられたメモリより多くのデータを非故意に書き込む場合があり、その結果、バッファオーバーランが発生し、そのオーバーランにより、ブロックヘッダ２０３と、可能性としては隣接するメモリブロック２０２のデータブロック２１７の一部にデータが書き込まれる。上書きされたブロックヘッダフィールド２０５、２０７、２０９、２１１、２１３、２１５の一部がメモリマネジャによって使用される時、メモリマネジャは、不整合に気づき、例外を発生させる、アプリケーションを終了する、エラーをログに記録する等の動作を行うことによって、予期できない結果を回避することができる。
【０００８】
悪意のあるコードの作成者は、アプリケーションの支配権を得る目的で、オーバーランが検出されないように、あるいは、不整合のためにアプリケーションがクラッシュしないようにするために、メモリマネジャから意図的なバッファオーバーランを隠すことを試みることが可能である。バッファオーバーランを隠す技術の１つは、ブロックヘッダの特定のフィールドを復元することを試みるものである。詳細には、悪意のあるコードの作成者は、ブロックヘッダのどのフィールドが、結果としてメモリマネジャにバッファオーバーランを検出させ、悪意のあるコードが支配権を得られるようになる前にアプリケーションを終了させることができるかを予測することができる。その知識を使用して、それらのフィールドに有効な値を予測することができ、それらのフィールドを復元することを試みるデータをそのフィールドの位置のバッファオーバーランに含めることができる。例えば、悪意のあるコードを書く者は、フィールド３  ２０９とフィールド４  ２１１が変更された場合にメモリマネジャがバッファオーバーランを検出すると予測することができる場合には、その知識に基づいて、それらのフィールドの位置に書き込まれるデータが、それらのフィールドに本来含まれているデータと同じになるように、バッファオーバーランを作成することができる。
【０００９】
悪意のあるコードが、特定のフィールド２０９および２１１に有効な値を予測することによりバッファオーバーランを隠すことに成功した場合、そのコードは、ブロックヘッダ２０５、２０７、２１３、２１９の他のフィールドに変更を加えることができ、それらのフィールドがメモリマネジャによってアクセスされると、悪意のあるコードがアプリケーションの支配権を得、可能性としては、ターゲットアプリケーションで悪意のあるコードの断片を実行するなど、コンピュータに意図される有害な結果を生じさせる。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
したがって、悪意のあるコードが悪用することができる前に、バッファオーバーランを未遂のうちに検出するために使用することができるシステムおよび方法が必要とされる。そのようなシステムおよび方法は、悪意のある攻撃からコンピュータを保護する際に有用であり、また、パフォーマンスやメモリの使用等に影響する他のデバッグ方法の間接コストを払う必要なく、アプリケーション開発の早い段階で、故意でないプログラミングの欠陥を検出する能力を提供するものと考えられる。
【課題を解決するための手段】
【００１１】
概説すると、本発明の実施形態は、コンピュータが悪意のある攻撃を受けているかどうかを検出し、バッファオーバーランを検出するシステムおよび方法を提供する。また、本発明の実施形態は、悪意のあるコードが、バッファオーバーラン、およびメモリマネジャ機能の使用に関連する他の不備を悪用する危険性を軽減する。詳細には、本発明の実施形態は、データブロックのブロックヘッダの内容を保護し、ブロックヘッダの一部が変更されているかどうかをメモリマネジャが判定する能力を可能にする。
【００１２】
本発明の一態様によれば、複数のフィールドを有するデータを保護する方法が提供される。この方法は、複数のフィールドを少なくとも第１のグループと第２のグループにグループ化し、第１のグループ用の第１の識別子と第２のグループ用の第２の識別子を生成することを含む。また、第１および第２のグループは符号化されて、それらグループのフィールドに含まれる情報を保護する。さらに、第１および第２の識別子もグループの中に符号化することができる。
【００１３】
本発明の別の態様によれば、データ、このデータは複数のグループに分割される、の少なくとも一部へのアクセス権を提供する方法を行うコンピュータ実行可能プログラムを備えるコンピュータ可読媒体を有するコンピュータシステムが提供される。実行される方法は、データの一部分に対するアクセス要求を受け取り、そのアクセス要求に対応する複数のデータグループのうち少なくとも１つのグループを確定することを含む。確定されたグループが次いで復号され、復号されたグループ用に事前に識別子が作成されている場合には任意で検証が行なわれる。復号されたグループが検証されると、データの一部へのアクセスが許可される。
【００１４】
本発明のさらに別の実施形態によれば、ブロックヘッダの複数のフィールドを少なくとも２つのグループにグループ化し、少なくとも２つのグループの第１のグループに第１の識別子を生成し、第１のグループおよび第１の識別子を符号化し、第２のグループを符号化するようにコンピューティングシステムに命令する命令が記憶されたコンピュータアクセス可能媒体が提供される。
【００１５】
前述の本発明の態様とそれに付随する利点の多くは、添付図面と併せれば、以下の詳細な説明を参照することにより、よりよく理解するよりも、さらに容易に理解されよう。
【発明を実施するための最良の形態】
【００１６】
図３は、本発明の一実施形態による、バッファオーバーランおよび他の不正アクセスの試みの結果生じるヘッダメタデータの破損を検出し、また、意図的でない、あるいは悪意のある、メモリマネジャ機能の結果生じる他の弱点を悪意のあるコードが悪用する可能性を軽減するように符号化された符号化ブロックヘッダのブロック図である。また、図３に関して説明する実施形態を使用して、バッファオーバーフローを発見するための複雑なデバッグの間接コストの必要なしに、プログラミングエラーを発見することができる。
【００１７】
そのような実施形態では、ブロックヘッダ３０３のフィールドはすべて、暗号化など任意の種類の符号化技術を使用して符号化され、それにより、ヘッダの個々のフィールドの値と位置を予測および／または発見することを難しくする。過去のフィールドの観察に基づいて有効な値を予測するには、フィールドを復号して、それらのフィールドに含まれる値を判定しなければならない。下記で述べるように、すべての符号化と復号はメモリマネジャによって行われるので、符号化／復号アルゴリズムおよび／または符号化鍵／復号鍵を共有する必要がないため、符号化技術の整合性と秘密性を高い度合いで保つことができる。
【００１８】
本明細書で説明する実施形態は、６つのフィールドを持つブロックヘッダのフィールドをグループ化することを含むが、任意数のフィールドが１つのヘッダに含まれ、グループ化されてもよいことは理解されよう。また、フィールドはどのようなサイズであってもよく、フィールドは、同じサイズであっても異なるサイズであってもよく、各フィールドは、メモリマネジャの必要性に応じて動的に生成されることができる。
【００１９】
フィールドを符号化すると、有効な値が予測される場合でも特定のフィールドに有効な値を書き込むことが難しくなる。詳細には、有効な値が判定されるとしても、元の値を符号化するために用いられた正しい符号化アルゴリズムと鍵を使用してバッファオーバーランデータが符号化されなければならない。符号化が正しくない場合は、値が正確であっても、メモリマネジャによって復号される際に意図される値が生成されず、メモリマネジャが変更を検出し、それにより、悪意のあるコードが支配権を得る機会を持つ前にアプリケーションを終了させることになる。
【００２０】
符号化技術の例には、これに限定しないが、対称（秘密鍵）暗号化が含まれる。しかし、メモリマネジャが、ブロックヘッダを符号化および／または復号できるように意図される唯一のプログラムであるので、情報を符号化するために使用される秘密鍵および／またはアルゴリズムを共有する必要がない。また、使用される鍵および／または使用されるアルゴリズムをメモリマネジャによって変更して、ブロックヘッダデータにアクセスし、書き込みをすることをさらに難しくすることができる。例えば、符号化鍵および／またはアルゴリズムは、異なるメモリマネジャ、異なるメモリ領域、異なるメモリブロック等ごとに異なってよい。また、符号化鍵および／または符号化アルゴリズムは、周期的に変更することもできる。例えば、符号化鍵および／またはアルゴリズムは、例えば毎日、あるいは開始時等、ヘッダが符号化されるたびに変更することができる。ある形態の秘密鍵暗号化を使用してブロックヘッダを符号化することに関して本発明の実施形態を説明するが、ブロックヘッダを符号化するにはどのような種類の符号化技術を使用してもよく、本明細書で提供する説明は、説明のみを目的とするものであり、本発明の範囲を限定するものと読まれるべきではないことは理解されよう。
【００２１】
ブロックヘッダの符号化に加えて、符号化の前に、ヘッダのフィールドを並べ替え、それにより、予測された値を書き込むべき場所を予測することをさらに難しくすることができる。例えば、例えばフィールド１〜６などのフィールドをすべてのブロックヘッダについて同じ順序で編成する代わりに、フィールド３、フィールド６、フィールド１、フィールド２、フィールド５、フィールド４、あるいは他の順序で出現するように符号化の前にフィールドを再編成することができる。使用される符号化技術と同様に、フィールドは、周期的に再編成してよく、ブロックヘッダごとに異なってよい。例えば、ヘッダが符号化されるたびに、符号化の前にフィールドを再編成することができる。あるいは、フィールドは、他の時に再編成し、どのような順序にしてもよい。ブロックヘッダのフィールドを再編成することにより、フィールドの位置を判定し、フィールドの値を予測することがさらに難しくなる。
【００２２】
さらに、ブロックヘッダを符号化する前に、復号の際にブロックヘッダを検証するためにメモリマネジャによって使用されるブロックヘッダの識別子を生成することができる。この識別子は、例えば、チェックサム、ハッシュ値、無作為に割り当てられた数等である。チェックサムあるいはハッシュ値の場合は、メモリマネジャがブロックヘッダに関してある式を実行し、戻り値がそのブロックヘッダの識別子として記憶される。この識別子は、ヘッダとともに記憶され符号化されても、メモリマネジャによって別個に（例えばテーブルに）記憶されても、または、ヘッダとともに記憶して、符号化し、同時にメモリマネジャによって別個に記憶されてもよい。検証する際に、同じ式がブロックヘッダに関して実行されて新しい値を計算し、記憶された値と新しい値が比較される。
【００２３】
無作為な数の場合は、暗号化される際に無作為な数が生成され、ヘッダとともに記憶され、メモリマネジャは、無作為に生成された数を含むテーブルも維持する。ブロックヘッダが復号される際に、ヘッダとともに記憶された無作為の数をメモリマネジャによって記憶された数と比較することにより、ヘッダとともに記憶された無作為の数が検証される。本明細書ではブロックヘッダを検証するために用いられる識別子としてチェックサム、ハッシュ値、および無作為数を説明したが、ブロックヘッダを検証するためにどのようなタイプの識別子を用いてもよいことは理解されよう。
【００２４】
ブロックヘッダフィールドの順序の並べ替え、ヘッダの符号化、およびヘッダの識別子の生成により、検出されずにブロックヘッダのメタデータに変更を加えることが難しくなるが、ブロックヘッダのフィールドに複数のアクセスを行うことを試みるときに、同期（ロッキング）に伴う複雑化が生じる。したがって、本発明の別の実施形態によれば、ブロックヘッダのフィールドがグループ化され、別個に符号化されることができる。
【００２５】
図４は、本発明の別の実施形態による、グループ化され別個に符号化されたブロックヘッダのフィールドを有する符号化されたブロックヘッダのブロック図である。データブロック４０２のブロックヘッダ４０３は、グループ化され、別個に符号化された、ブロックヘッダのフィールドを有する。例えば、フィールド３  ４０９、フィールド６  ４１５、フィールド１  ４０５がグループ化され、ともに符号化され、その他のフィールドは１つまたは複数の他のグループとしてグループ化され、符号化されることができる。図５との関係で下記でより詳細に述べるように、フィールドは、アクセスの必要条件、またはロッキングの必要条件に基づいてグループ化しても、無作為にグループ化しても、フィールド間の他の関係に基づいてグループ化してもよい。
【００２６】
図３に関して説明した実施形態と同様に、この実施形態は、バッファオーバーフローおよびメモリマネジャ機能に関連する他の欠陥を明らかにするので、開発段階の早期にプログラミングエラーを見つけるために使用することができる。また、任意の数および／またはサイズのフィールドをともにグループ化することができる。
【００２７】
ヘッダの識別子を生成するのと同様に、各グループに識別子を生成し、その識別子をグループとともに記憶することができ、および／またはメモリマネジャによって記憶することができる。例えば、グループ１  ４０７のハッシュ値を計算し、得られたハッシュ値を識別子として使用することができる。そのハッシュ値は、グループ１  ４０７と別個にメモリマネジャによって記憶することができる。グループ２  ４１０のチェックサムを計算し、それをグループ２  ４１０のフィールドとともに記憶することができる。ブロックヘッダ４０３の残りのフィールドは、第３のグループであるグループ３  ４１１に含めることができる。グループ３  ４１１については、このグループには識別子が割り当てられない。先に述べたように、任意の技術（チェックサムの生成、ハッシュ値の計算、無作為数の生成）を使用してグループの識別子を生成することができ、あるいは、１つまたは複数のグループには識別子が計算されなくてもよい。
【００２８】
任意選択でブロックヘッダ４０３の各グループに識別子を割り当てるのに加えて、グループは、任意の符号化技術を使用して個別に符号化することができる。各グループは、異なる技術を使用して符号化しても、各グループに同じ技術の異なる値／異なるアルゴリズムを使用してもよい。図４の例を続けると、グループは、異なるアルゴリズムおよび／または鍵を使用して各グループを符号化する秘密鍵暗号化を使用して符号化することができる。例えば、メモリマネジャは、特定のロッキング要件に対応するフィールドを符号化する際に使用される第１のアルゴリズムおよび鍵と、別のロッキング要件に対応するフィールドを符号化するための別のアルゴリズムおよび鍵を維持することができる。また、グループのすべてが符号化される必要はない。したがって、頻繁にアクセスされる、変更が加えられた場合に容易に検出されるグループは、復号されたままにし、一方、その他のグループは符号化することができる。
【００２９】
メモリ管理の技術分野でよく知られるように、複数のロックを使用してメモリへの同時アクセスをコントロールすることができる。例えば、排他ロックを使用して、そのロックが解除されるまでは１つのアプリケーションによるアクセスを許可することのみを行うことができる。あるいは、非排他ロックすなわち共有ロックを使用して、そのロックが排他的に所有されない限りは、複数の実行スレッドによるメモリへの同時のアクセスを許可することもできる。通常、排他ロックは、データ構造への書き込みアクセス権を付与するために使用されるのに対し、共有ロックは、一般には、データへの読み取りアクセス権を与えるために使用され、その間はどの書き込み元もデータを変更することはできない。メモリへのアクセスをコントロールするために使用することができる数種のロッキング手法があり、本発明の実施形態は、どのようなタイプのロッキング方式とも使用することができるので、ロックおよびロックの必要条件を本明細書では一般にＬｏｃｋと称する。また、ロックおよび／またはロッキングの必要条件の違いは、Ｌｏｃｋ１、Ｌｏｃｋ２、Ｌｏｃｋ３等を参照することによって示し、番号がつけられた各Ｌｏｃｋは、異なるロックまたはロッキングの必要条件を表す。
【００３０】
本明細書の例に戻ると、メモリマネジャは、Ｌｏｃｋ１に対応する第１の鍵とアルゴリズムを維持し、その第１の鍵とアルゴリズムを使用してグループ１  ４０７を符号化することができ、グループ１  ４０７は、Ｌｏｃｋ１に関連するフィールドを含む。同様に、メモリマネジャは、Ｌｏｃｋ２に対応する第２の鍵とアルゴリズムを維持し、その第２の鍵とアルゴリズムを使用してグループ２  ４１０を符号化することができる。Ｌｏｃｋ３に対応する第３の鍵とアルゴリズムを使用してグループ３  ４１１を符号化することができる。これは、フィールドがロッキングの必要条件に応じてグループ化される、異なるグループに１つの鍵とアルゴリズムを関連付ける単純な例の具体例であるが、本発明の実施形態により、多くの変形例を使用することができる。
【００３１】
例えば、メモリマネジャが、様々なロッキングの必要条件に対応する鍵とアルゴリズムのライブラリを維持し、ブロックヘッダの特定のグループを符号化するために使用される実際の鍵および／またはアルゴリズムは、グループが符号化されるたびにライブラリから無作為に選択されることができる。
【００３２】
また、符号化の前に、グループ４０７、４１０、４１１内のフィールド群を、異なる順序で出現するように配置することもできる。例えば、すべてグループ２  ４１０に含まれるフィールド１  ４０５、フィールド３  ４０９、フィールド６  ４１５を、フィールド３  ４０９が最初に出現し、フィールド６  ４１５が２番目になり、フィールド１  ４０５が最後になるように配置することができる。フィールドの配置は、システムの基準によっても、メモリマネジャの基準によっても、ブロックの基準によっても、使用の基準によってもよい。例えば、グループがメモリマネジャからアクセスされるたびに、再度符号化される前にそのグループのフィールドを再編成することができる。
【００３３】
図５は、本発明の一実施形態による、フィールドのグループを符号化する符号化ルーチンを説明する流れ図である。図５〜６は、特定の機能を実行するブロックを説明する。代替の実施形態では、これより多くのブロックを使用しても、少ないブロックを使用してもよい。本発明の一実施形態では、ブロックは、ソフトウェアプログラム、ソフトウェアオブジェクト、ソフトウェア関数、ソフトウェアサブルーチン、ソフトウェアメソッド、ソフトウェアインスタンス、コード断片、ハードウェアの動作、またはユーザの操作を、単独で、または組み合わせて表すことができる。符号化ルーチン５００はブロック５０１で開始し、ブロック５０３で、メモリマネジャが符号化するブロックヘッダのフィールドを識別する。このフィールドは、メモリマネジャがメモリ要求に応答してメモリを割り当てる際にこのメモリマネジャによって作成されたブロックヘッダのすべてのフィールドとすることができる。あるいは、このフィールドは、再度符号化すべき、以前に復号された既存のブロックヘッダのフィールドであってもよい。
【００３４】
一般には、何らかの関係に基づいてフィールドをグループ化すると有益である。例えば、フィールドは、共通のロッキング要件、同時にアクセスされるフィールド、サイズ等に基づいてグループ化することができる。例えば、ブロックヘッダのフィールドの一部には、排他ロックなどの特定のロッキング要件であるＬｏｃｋ１を使用してのみアクセスすることができ、別のグループには、一般に、Ｌｏｃｋ２の要件に基づいてアクセスすることができ、別のグループには、Ｌｏｃｋ３の要件に基づいてアクセスすることができる。したがって、ブロックヘッダのフィールドは、Ｌｏｃｋ１によってアクセスされるフィールドのグループと、Ｌｏｃｋ２によってアクセスされるフィールドのグループと、Ｌｏｃｋ３によってアクセスされる第３のグループとの３つのグループに分割すべきことを判断することができる。
【００３５】
ブロック５０７で、フィールド間の関係に従ってフィールドがグループ化される。フィールドは、要求されるセキュリティ、フィールドの数、フィールド間の関係、およびアーキテクチャに固有の制限に応じて１つまたは複数のグループにグループ化することができる。すべてのフィールドを１つのグループに含めてもよく、これは、図３に関して上述した例に相当する。あるいは、フィールドは、複数のグループにグループ化しても、１つまたは複数のフィールドを単独で１つのグループに含めてもよい。
【００３６】
再度図４を参照すると、フィールド３  ４０９、フィールド６  ４１５、フィールド１  ４０５は、すべて関連があるのでともにグループ化される。ブロック５０９で、グループのフィールドの配置を変えてフィールドの配置と値をさらに分かりにくくし、値とフィールドの位置の予測をより難しくする。上述のように、グループのフィールドは、任意の順序で、任意の配置方式に従って配置してよい。例えば、１つのグループのフィールドの配置は、無作為であっても、フィールドのサイズ、フィールドのアクセス頻度、フィールドに含まれる値等に基づいてもよい。例えば、グループ２（図４）のフィールド１  ４０５、フィールド３  ４０９、およびフィールド６  ４１５は、フィールド３  ４０９が初めに出現し、フィールド６  ４１５が２番目に出現し、フィールド１  ４０５が最後に出現するように配置されている。グループ内でフィールドを配置するにはどの配置方式を使用してもよいことは理解されよう。また、上記で述べたように、グループ内のフィールドの配置は、周期的に変更することができる。例えば、グループのフィールドは、フィールドが符号化されるたびに配置し直すことができる。もしフィールドのグループ化または配置に影響するアーキテクチャ固有の制限がある場合は、フィールドは、その制限に従ってグループ化し、配置することができる。例えば、一列に並べられたフィールドへのアクセス、あるいはフィールドのグループへのアクセスに関して制約が課される場合は、フィールドは、その制約への準拠を可能にする形でグループ化し、配置することができる。
【００３７】
判定ブロック５１１で、識別子を生成し、グループに関連付けるかどうかが判定される。識別子を生成し、グループに関連付けるべきと判定された場合は、ブロック５１３で識別子が生成される。識別子は、各種の方式で生成されることができる。例えば、識別子は、これらに限定しないが、グループに関連付けられる無作為に生成された数、そのグループに対して計算されるハッシュ値、そのグループに対して計算されるチェックサム値等である。また、グループに識別子を関連付ける際に、識別子は、グループのフィールドとともに記憶しても、グループに１つのフィールドとして含めても、メモリマネジャによってグループとは別個に保持されても、または、グループとともに記憶し、同時にメモリマネジャによってグループとは別個に保持してもよい。
【００３８】
ブロック５１３で識別子が生成されると、または判定ブロック５１１で識別子が計算されるべきでないと判定された場合、ブロック５１５で、グループと、場合によっては識別子が符号化される。符号化は、どのようなタイプの符号化技術を使用して達成することができる。例えば、メモリマネジャは、データのグループを符号化するために使用される秘密鍵とアルゴリズムのリストを保持することができる。また、ヘッダブロックのグループごとに、異なる符号化方式、アルゴリズム、および／または鍵が使用されてよい。
【００３９】
判定ブロック５１７で、符号化するグループがさらにあるかどうかが判定される。符号化するブロックがさらにあると判定される場合は、ルーチン５００はブロック５０９に戻り、継続する。一方、符号化するグループがそれ以上ないと判定される場合は、ブロック５１９で示すようにルーチン５００は完了する。
【００４０】
図６は、本発明の一実施形態による、ブロックヘッダの少なくとも一部分を復号する復号ルーチンを説明する流れ図である。復号ルーチンはブロック６０１で開始し、ブロック６０３で、メモリマネジャが、符号化されたヘッダを含むメモリブロックへのアクセス要求を受け取る。ブロック６０５で、メモリマネジャが、アクセス要求に基づいてそのブロックヘッダのどの暗号化グループを復号する必要があるかを確定する。例えば、アクセス要求が排他ロックを必要とする場合は、そのロックを識別するフィールドを含んでいる符号化グループを復号する必要がある。
【００４１】
ブロック６０５で復号するグループを確定すると、ブロック６０７で、確定されたグループの１つが適切な復号技術を使用して復号される。適切な復号技術は、このグループを符号化するために使用された技術に対応する。メモリマネジャがそのグループを符号化したプログラムであるため、そのような情報は、メモリマネジャによって保持される。例えば、グループが秘密鍵と特定のアルゴリズムを使用して符号化された場合には、その秘密鍵とそれに対応する復号アルゴリズムが使用されてこのグループを復号する。グループを復号すると、判定ブロック６０９で、グループに割り当てられた識別子に基づいてそのグループを検証すべきかどうかが判定される。復号されたグループが識別子を含む場合、またはグループに識別子が割り当てられ、メモリマネジャによって保持されている場合は、ブロック６１１で示すように識別子が検証される。例えば、そのグループ用にハッシュ値が計算され、符号化されたグループに含められている場合は、復号の後にそのグループのハッシュ値を再度計算し、そのグループに含まれていたハッシュ値と比較することができる。２つのハッシュ値が同じである場合、グループは、バッファオーバーランで変更が加えられていないことになる。しかし、ハッシュ値が同じでない場合は、グループが変更されていることになり、メモリマネジャは、要求を拒絶し、アプリケーションを終了し、それにより、悪意のあるコードが隠されたままになり、場合によっては支配権を得る可能性を低減することができる。
【００４２】
復号されたグループの内容がブロック６１１で検証されると、または判定ブロック６０９でその内容を検証しないと判定された場合は、判定ブロック６１３でそのアクセス要求に応答して復号すべきグループが他にあるかどうかが判定される。復号すべきグループがさらにあると判定された場合、ルーチン６００はブロック６０７に戻り、継続する。一方、復号するグループがそれ以上ないと判定される場合は、ブロック６１５でルーチンが継続し、メモリマネジャは、復号されたグループのフィールドへのアクセスを許される。また、許可されたアクセスに応答して、メモリマネジャは、復号されたフィールドの一部またはすべてに変更を加えることができる。しかるべきグループが復号され、メモリマネジャにアクセス権が与えられると、ルーチンはブロック６１７で示すように完了する。
【００４３】
本発明の実施形態を図示し、説明したが、本発明の主旨および範囲から逸脱することなく各種の変更を加えてよいことは理解されよう。
【図面の簡単な説明】
【００４４】
【図１】２つの割り当てられたブロックを含むメモリ領域の一部分のブロック図である。
【図２】結果としてバッファオーバーランを生じさせる悪意のあるコードが書き込まれた２つのデータブロックを含むメモリ領域のブロック図である。
【図３】本発明の一実施形態による、非意図的な、あるいは悪意のある、バッファオーバーランおよび他の不正アクセスの試みの結果生じるヘッダメタデータの損失を検出し、また、メモリマネジャ機能から生じる他の弱点を悪意のあるコードが悪用する可能性を低減するように符号化された符号化ブロックヘッダのブロック図である。
【図４】本発明の一実施形態による、ブロックヘッダのフィールドがグループ化され、別個に符号化された符号化ブロックヘッダのブロック図である。
【図５】本発明の一実施形態による、フィールドのグループを符号化する符号化ルーチンを説明する流れ図である。
【図６】本発明の一実施形態による、グループを復号する復号ルーチンを説明する流れ図である。
【符号の説明】
【００４５】
１０１，１０２，２０１，２０２  ブロック
２００  データ領域
【図１】
2006244496.tif 000003
【図２】
2006244496.tif 000004
【図３】
2006244496.tif 000005
【図４】
2006244496.tif 000006
【図５】
2006244496.tif 000007
【図６】
2006244496.tif 000008