(57)【特許請求の範囲】
【請求項１】
スクリプト言語で記述された動的メモリ確保用のアルゴリズムを含むコンテンツデータを仮想メモリに展開した状態で、展開領域内のヒープ領域に所定サイズの動的メモリを確保するプロセスを経て処理プログラムをロードし、前記コンテンツデータに対する処理を行う情報処理装置において、
前記動的メモリ確保用のアルゴリズムの実行の命令の発行をフックするフック手段と、
前記フックの度に、直前の前記動的メモリ確保用のアルゴリズムの実行で確保されたアドレスの領域内の内容を検査する検査処理手段と、
検査の結果、当該アドレスの領域内に所定の不作為コードがスプレイされたと判断可能なデータ量だけ存在している場合、前記コンテンツデータに対する処理を終了する終了処理手段とを備えた情報処理装置。
【請求項２】
前記終了処理手段は、前記仮想メモリに展開した前記コンテンツデータを消去することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記スクリプト言語で記述された動的メモリ確保用のアルゴリズムを周期的に実行させて、前記ヒープ領域内の順次異なる領域に、前記所定の不作為コードとしてのＮＯＰコードをスプレイするヒープスプレイ処理手段を含む請求項１又は２に記載の情報処理装置。
【請求項４】
仮想マシンの動作を監視する仮想マシンモニタを含み、
前記検査処理手段及び前記終了処理手段は、前記仮想マシンモニタに備えられ、
前記検査処理手段は、前記動的メモリ確保用のアルゴリズムの実行の命令が前記仮想マシンから発行される時点で制御を前記仮想マシンモニタに遷移させる請求項１〜３のいずれかに記載の情報処理装置。
【請求項５】
スクリプト言語で記述された動的メモリ確保用のアルゴリズムを含むコンテンツデータを仮想メモリに展開した状態で、展開領域内のヒープ領域に所定サイズの動的メモリを確保するプロセスを経て処理プログラムをロードし、前記コンテンツデータに対する処理を行う情報処理装置の前記処理を監視する不正プログラム実行防止方法において、
前記動的メモリ確保用のアルゴリズムの実行の命令の発行をフックするフックステップと、
前記フックの度に、直前の前記動的メモリ確保用のアルゴリズムの実行で確保されたアドレスの領域内の内容を検査する検査処理ステップと、
検査の結果、当該アドレスの領域内に所定の不作為コードがスプレイされたと判断可能なデータ量だけ存在している場合、前記コンテンツデータに対する処理を終了する終了処理ステップとを備えた不正プログラム実行防止方法。
【請求項６】
スクリプト言語で記述された動的メモリ確保用のアルゴリズムを含むコンテンツデータを仮想メモリに展開した状態で、展開領域内のヒープ領域に所定サイズの動的メモリを確保するプロセスを経て処理プログラムをロードし、前記コンテンツデータに対する処理を行う情報処理装置の前記処理を監視するプログラムにおいて、
前記動的メモリ確保用のアルゴリズムの実行の命令の発行をフックするフック手段、
前記フックの度に、直前の前記動的メモリ確保用のアルゴリズムの実行で確保されたアドレスの領域内の内容を検査する検査処理手段、及び、
検査の結果、当該アドレスの領域内に所定の不作為コードがスプレイされたと判断可能なデータ量だけ存在している場合、前記コンテンツデータに対する処理を終了する終了処理手段として前記情報処理装置を機能させるプログラム。
【請求項７】
スクリプト言語で記述された動的メモリ確保用のアルゴリズムを含むコンテンツデータを仮想メモリに展開した状態で、展開領域内のヒープ領域に所定サイズの動的メモリを確保するプロセスを経て処理プログラムをロードし、前記コンテンツデータに対する処理を行う情報処理装置の前記処理を監視するコンピュータ読み取り可能な記録媒体において、
前記動的メモリ確保用のアルゴリズムの実行の命令の発行をフックするフック手段、
前記フックの度に、直前の前記動的メモリ確保用のアルゴリズムの実行で確保されたアドレスの領域内の内容を検査する検査処理手段、及び、
検査の結果、当該アドレスの領域内に所定の不作為コードがスプレイされたと判断可能なデータ量だけ存在している場合、前記コンテンツデータに対する処理を終了する終了処理手段として、前記情報処理装置を機能させるプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサが実行する情報処理動作を監視し、不正プログラムの実行を防止する技術に関する。
【背景技術】
【０００２】
昨今、不正かつ有害な動作を行う意図で作成された悪意のあるプログラム（以下、不正プログラム）によるファイルの書き換えやシステムの設定変更等によってコンピュータのセキュリティーが大きく損われている。不正プログラムは、通信ネットワークを経由して外部からコンピュータ内のメモリに侵入する。不正プログラムは種々の種類のプログラムやファイルを含み、コンピュータユーザにとって様々な不利益な処理を引き起こす。今日、不正プログラムの実行を監視し、不正動作を規制する各種の対応ソフトウェアが提案されている。
【０００３】
特許文献１には、ウェブサイトから受信した、ジャバスクリプトコードを含むＰＤＦネットワークコンテンツが悪意を有するか否かを検査するシステムが記載されている。すなわち、特許文献１に記載された検査システムは、ネットワークからジャバスクリプトコードを含むＰＤＦネットワークコンテンツをインターセプトする構成のデータアクセスコンポーネントを備え、インターセプトした、ジャバスクリプトコードを含むＰＤＦネットワークコンテンツの少なくとも一部に悪意あるネットワークコンテンツを示す少なくとも１つの不審性が含まれているかを判断すべく、当該ＰＤＦネットワークコンテンツの少なくとも一部についてまず検査を行い、不審性が含まれていると判断された場合には、当該ＰＤＦネットワークコンテンツの少なくとも一部に悪意あるネットワークコンテンツが含まれているかを検証すべく、当該ＰＤＦネットワークコンテンツの少なくとも一部を検証用の仮想マシンに提供するようにしたものである。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２０１４−５０４７６５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載された検査システムは、ウェブサーバからクライアント装置へ送信されるＰＤＦネットワークコンテンツを通信ネットワーク途中でインターセプトして、その適否を検出するものであり、クライアント装置で対応するものではない。しかも、不審性のあると判断したものを、検査システム内に別途用意した仮想マシンで実際に試験動作させて検出するものであり、受信したＰＤＦネットワークコンテンツに対するクライアント装置側でのリアルタイム処理に不正防止対応できるものではない。また、不審性の判断もジャバスクリプトという文字を含むかどうかとか、経験則を用いて判断したりするものに過ぎない。さらに、ウェブサーバからブラウズしたコンテンツに対する情報処理を、動的メモリを逐次確保して行う特異な処理の中で、リアルタイムに不審性の有無の検査を行うものでもない。
【０００６】
本発明は、スクリプト言語で記述された動的メモリ確保用のアルゴリズムを含むコンテンツデータに不正プログラムが埋め込まれていても、その実行を未然に防止する情報処理装置、不正プログラム実行防止方法、プログラム、及び記録媒体を提供することにある。
【課題を解決するための手段】
【０００７】
本発明に係る情報処理装置は、スクリプト言語で記述された動的メモリ確保用のアルゴリズムを含むコンテンツデータを仮想メモリに展開した状態で、展開領域内のヒープ領域に所定サイズの動的メモリを確保するプロセスを経て処理プログラムをロードし、前記デジタルコンテンツデータに対する処理を行う情報処理装置において、前記動的メモリ確保用のアルゴリズムの実行の命令の発行をフックするフック手段と、前記フックの度に、直前の前記動的メモリ確保用のアルゴリズムの実行で確保されたアドレスの領域内の内容を検査する検査処理手段と、検査の結果、当該アドレスの領域内に所定の不作為コードがスプレイされたと判断可能なデータ量だけ存在している場合、前記コンテンツデータに対する処理を終了する終了処理手段とを備えたものである。
【０００８】
また、本発明に係る不正プログラム実行防止方法は、スクリプト言語で記述された動的メモリ確保用のアルゴリズムを含むコンテンツデータを仮想メモリに展開した状態で、展開領域内のヒープ領域に所定サイズの動的メモリを確保するプロセスを経て処理プログラムをロードし、前記デジタルコンテンツデータに対する処理を行う情報処理装置の前記処理を監視する不正プログラム実行防止方法において、前記動的メモリ確保用のアルゴリズムの実行の命令の発行をフックするフックステップと、前記フックの度に、直前の前記動的メモリ確保用のアルゴリズムの実行で確保されたアドレスの領域内の内容を検査する検査処理ステップと、検査の結果、当該アドレスの領域内に所定の不作為コードがスプレイされたと判断可能なデータ量だけ存在している場合、前記コンテンツデータに対する処理を終了する終了処理ステップとを備えたものである。
【０００９】
また、本発明にかかるプログラムは  スクリプト言語で記述された動的メモリ確保用のアルゴリズムを含むコンテンツデータを仮想メモリに展開した状態で、展開領域内のヒープ領域に所定サイズの動的メモリを確保するプロセスを経て処理プログラムをロードし、前記デジタルコンテンツデータに対する処理を行う情報処理装置の前記処理を監視するプログラムにおいて、前記動的メモリ確保用のアルゴリズムの実行の命令の発行をフックするフック手段、前記フックの度に、直前の前記動的メモリ確保用のアルゴリズムの実行で確保されたアドレスの領域内の内容を検査する検査処理手段、及び、検査の結果、当該アドレスの領域内に所定の不作為コードがスプレイされたと判断可能なデータ量だけ存在している場合、前記コンテンツデータに対する処理を終了する終了処理手段として前記情報処理装置を機能させるものである。
【００１０】
また、本発明に係るコンピュータ読み取り可能な記録媒体は、スクリプト言語で記述された動的メモリ確保用のアルゴリズムを含むコンテンツデータを仮想メモリに展開した状態で、展開領域内のヒープ領域に所定サイズの動的メモリを確保するプロセスを経て処理プログラムをロードし、前記デジタルコンテンツデータに対する処理を行う情報処理装置の前記処理を監視するコンピュータ読み取り可能な記録媒体において、前記動的メモリ確保用のアルゴリズムの実行の命令の発行をフックするフック手段、前記フックの度に、直前の前記動的メモリ確保用のアルゴリズムの実行で確保されたアドレスの領域内の内容を検査する検査処理手段、及び、検査の結果、当該アドレスの領域内に所定の不作為コードがスプレイされたと判断可能なデータ量だけ存在している場合、前記コンテンツデータに対する処理を終了する終了処理手段として前記情報処理装置を機能させるプログラムを記録したものである。
【００１１】
これらの発明によれば、スクリプト言語、例えばジャバスクリプト言語で記述された動的メモリ確保用のアルゴリズムを含むコンテンツデータが、例えばブラウズされて、仮想メモリに展開される。次いで、展開領域内のヒープ領域に所定サイズの動的メモリを確保するプロセスを経て処理プログラムのロードが行われ、前記コンテンツデータに対する処理が可能となる。そして、前記動的メモリ確保用のアルゴリズムの実行の命令が発行されると、この命令がフック手段によってフックされ、フックの度に、その直前の動的メモリ確保用のアルゴリズムの実行で確保されたアドレスの領域内の内容が検査処理手段によって検査、すなわち、検査対象データが取得されて、分析される。この検査の結果、当該アドレスの領域内にＮＯＰコードに代表される所定の不作為コードがスプレイされたと判断可能なデータ量、すなわち所定の閾値を超えて存在している場合、前記コンテンツデータに不正プログラムが仕込まれている可能性があるとして、終了処理手段によって当該コンテンツデータは好ましくは消去されて、その処理の実行が終了される。
【００１２】
このように、動的メモリを確保するためのプログラム（アルゴリズム）に不正プログラムが仕込まれている可能性があると判断した場合に、該当するデータを好ましくは消去し、そのデータに対する処理の実行を阻止することで、不正プログラムの実行が未然に防がれる。
【００１３】
また、前記終了処理手段は、前記仮想メモリに展開した前記コンテンツデータを消去することを特徴とするものである。この構成によれば、不正プログラムが仕込まれている可能性のあるデータ自体を消去することで、その実行が確実に防がれる。
【００１４】
また、本発明は、前記スクリプト言語で記述された動的メモリ確保用のアルゴリズムを周期的に実行させて、前記ヒープ領域内の順次異なる領域に、前記所定の不作為コードとしてのＮＯＰ（NO OPERATION）コードをスプレイするヒープスプレイ処理手段を含むものである。この構成によれば、不正動作を阻止するためのヒープスプレイ処理に対して不正プログラムが組み込まれても、不正動作の実行が未然に防がれる。
【００１５】
また、本発明は、仮想マシンの動作を監視する仮想マシンモニタを含み、前記検査処理手段及び前記終了処理手段は、前記仮想マシンモニタに備えられ、前記検査処理手段は、前記動的メモリ確保用のアルゴリズムの実行の命令が前記仮想マシンから発行される時点で制御を前記仮想マシンモニタに遷移させるものである。この構成によれば、仮想マシンモニタ機能を応用することで、不正プログラムの実行が未然に防がれる。
【発明の効果】
【００１６】
本発明によれば、スクリプト言語で記述された動的メモリ確保用のアルゴリズムを含むコンテンツデータに不正プログラムが埋め込まれていても、その実行を未然に防止することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明に係る情報処理装置の一実施形態を示す構成図である。
【図２】図１の情報処理装置が仮想マシンに適用された場合の機能構成図の一例である。
【図３】ブラウザが関連するメモリマップの図で、（ａ）はＨＤＤのメモリマップ、（ｂ）はＨＤＤからＲＡＭの仮想メモリ空間に展開された状態のメモリマップである。
【図４】未使用領域に対する動的メモリの確保処理と不正動作との関連を説明するための仮想メモリ空間の図である。
【図５】仮想マシンモニタが実行する監視ソフトウェアの一例を示す機能構成図である。
【図６】起動処理の一例を示すフローチャートである。
【図７】監視処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１８】
図１は、本発明に係る情報処理装置の一実施形態を示す構成図である。本発明が適用される情報処理装置１としては、コンピュータを内蔵するサーバ装置、汎用パーソナルコンピュータ、携行用の情報処理端末等、好ましくはネットワークを介して通信する機能を備えた各種の情報処理装置を含む。
【００１９】
情報処理装置１は、マイクロコンピュータで構成され、プロセッサとしてのＣＰＵ（Central Processing Unit）１１を含むチップセットとしてのハードウェア部（ＨＷ）１０を備える。ＣＰＵ１１は、バスＢＡを介してフラッシュＲＯＭ（Read Only Memory）２１とハードディスクドライブ（ＨＤＤ）２２とを含む補助記憶装置２０、ＲＡＭ（Random Access Memory）３０、入力部４０、表示部５０、及び通信部６０と接続されている。
【００２０】
フラッシュＲＯＭ２１は、ＢＩＯＳ（Ｂａｓｉｃ Input/Output System）を格納する。ＨＤＤ２２は、情報作成及び情報処理等を行うＯＳ（Operating System）や、ブラウザの１つであるインターネットエクスプローラ（ＩＥ）のプログラムの他、必要なＡＰ（Application Program）等の各種プログラム及び必要なデータ類を格納する。本実施形態では、情報処理装置１を仮想マシンに適用した例で説明する。ＨＤＤ２２に格納される各種プログラムは、図２に示すように、ハードウェア部（ＨＷ）１０と、ＲＡＭ３０に読み出（ロード）されたソフトウェア（ＳＷ）とを備える仮想マシン環境を構築するのに必要な各プログラム及びデータを含む。詳細は図２において説明する。
【００２１】
ＲＡＭ３０は、情報処理装置１が起動する際に補助記憶装置２０に格納されているプログラム等がロードされると共に、処理途中の情報が一時的に格納される。ＲＡＭ３０は、仮想メモリ空間及び物理メモリ空間として機能する。情報処理装置１は、補助記憶装置２０に格納されているプログラム等がＲＡＭ３０にロードされ、ＣＰＵ１１によって実行されることで各種の処理実行部として機能する。
【００２２】
入力部４０は、テンキー等を備えたキーボードやマウス、タッチパネル等を含み、所要の情報の入力や処理の指示を行うものである。表示部５０は、液晶表示パネル等から構成され、入力した内容、処理画像、さらには外部から受信した画像を適宜表示し得るものである。
【００２３】
通信部６０は、有線で、又は無線を介して、通信ネットワーク、典型的にはインターネット７０に接続され、複数の他の情報処理装置８０及び複数のウェブサーバ９０との間で必要な情報の授受を行う。通信部６０は、ブラウザ機能を利用してウェブサーバ９０のウェブページからデジタルコンテンツデータを取得する。なお、ウェブサーバ９０には、特定乃至は不特定の者が作成した各種のウェブページが、その所在地であるＵＲＬ（UniformResource Locator ）に対応して設定されている。デジタルコンテンツデータは、ウェブページを記述するためのマークアップ言語であるＨＴＭＬ（Hyper Text Markup Language）で作成されると共に、典型的には、動画その他の高度な演出表示を実行させるジャバスクリプト（Java Script：登録商標）のアルゴリズムが埋め込まれている。
【００２４】
図２は、情報処理装置１が仮想マシンに適用された場合の機能構成図の一例を示すもので、ＣＰＵ１１を含むハードウェア部（ＨＷ）１０と、ＲＡＭ３０にロードされたソフトウェア部（ＳＷ）とで構成されている。
【００２５】
ハードウェア部１０は、プロセッサとしてのＣＰＵ１１の他、仮想化支援技術（ＶＴ）１２と、ＲＡＭ（Random Access Memory）等から構成される仮想マシン毎の制御機構であるＶＭＣＳ（Virtual Machine Control Structure）１３と、ＲＡＭからなるＥＰＴ（Extended Page Table）１４とを備える。また、ハードウェア部１０は、各種の環境設定値が設定されるレジスタ群１１１を有する。ＣＰＵ１１は、レジスタ群１１１の環境設定値を参照しながら、発行された指令に基づいた動作を実行する。
【００２６】
ソフトウェア部（ＳＷ）は、１つ以上のゲストＯＳ（ゲストソフトウェア）である仮想マシンＶＭ３１と、ホストＯＳ（ホストソフトウェア）である仮想マシンモニタＶＭＭ３２とを備える。なお、図２では仮想マシンＶＭ、ＶＭ−２のように２つ示しているが、以降では仮想マシンＶＭ３１を代表にして説明する。ＶＭ３１は、ゲストソフトウェアとして、オペレーティングシステムＯＳ（主にカーネル（Kernel））、及びこのカーネルの環境下で動作する、前述したインターネットエクスプローラ等の各種のアプリケーションプログラムを含む。
【００２７】
ホストソフトウェアであるＶＭＭ３２は、補助記憶装置２０内のＨＤＤ２２に格納されており、情報処理装置１の起動を受けてＨＤＤ２２からＲＡＭ３０の所定領域にロードされる。ＶＭＭ３２には、本発明に係る監視ソフトウェア（図５参照）が含まれ、ＶＭＭ３２のロードに併せてロードされる。仮想マシンであるＶＭ３１のゲストソフトウェアは、ロードされたＶＭＭ３２が起動されて、それらの管理下でＲＡＭ３０の所定領域にロードされる。ＶＭ３１のロード時には、ＶＭ３１のゲストソフトウェアを動作させるためのＧＤＴ（Global Descriptor Table）、ＩＤＴ（InterruptDescriptor Table）、さらにＧＤＴからのリニアアドレスを物理アドレスに変換するＰＴＥ（Page Table Entry）等を含むシステムテーブル３１０が作成される。
【００２８】
ＶＭＭ３２は、ＲＡＭ３０にロードされたＭＢＲ（Master Boot Record）によってＲＡＭ３０にロードされる際に、環境設定され、次いで、カーネル等のロードの指示、及びそのロード処理の監視を行う。上記において、ＶＭＭ３２は、基本的には、ＲＡＭ３０の所定領域にロードされる際に自己のシステムテーブルを作成し、そのうちのＧＤＴやＰＴＥ（いずれも図示せず）に高い特権レベル０（リング０）の設定を行う。また、ＶＭＭ３２は、通常と同様に、すなわちカーネルを特権レベル０（リング０）でロードさせ、ＡＰ及びｄｌｌ（dynamic link library）を特権レベル３（リング３）でロードさせる。そして、ｄｌｌで作成された、リソースへのデータ書込等の処理要求の際の特権レベル０でのカーネルに対して発行される命令をSyscallという。なお、ｄｌｌとは、各ＡＰからカーネルへのアクセスを実行するための関数であるＡＰＩ（Application Programming Interface）の動的なリストであるダイナミックリンクライブラリをいう。ＡＰＩとは、複数のプログラムが共通に利用できる種々の機能（ソフトウェア）の呼び出し時の手順やデータ形式などを定めた仕様をいう。ｄｌｌとは、モジュール化して実装されたＡＰＩを、動的なリンクによって実行時にプログラムの結合を行うようにした共有ライブラリをいい、必用に応じてアドインによって追加可能である。
【００２９】
ＶＭＭ３２は、後述する各種の機能を実行するソフトウェア及びデータ類を備え、レジスタ群１１１及びＶＭＣＳ１３のデータ領域を利用してＶＭ３１の動作を制御する。一般的には、ＶＭＭ３２は、（１）ゲストソフトウェアをＶＭ３１として実行するモードへの遷移プログラム（及び復帰プログラム）の設定、（２）ＣＰＵ１１の制御をＶＭＭ３２に渡してＶＭＸｒｏｏｔモードとするＥｘｉｔ命令、逆にＣＰＵ１１の制御をＶＭ３１に渡してＶＭＸｎｏｎ−ｒｏｏｔモードとするＥｎｔｒｙ命令をＶＴ１２にセットする処理、（３）ＶＭ３１が実行する各種のゲストソフトウェア中のフォールトイベント、その他の例外や割込対象となる命令等をそれぞれフック対象とするためのデータのレジスタ群１１１への設定、（４）レジスタ群１１１に書き込まれるＶＭＭ３２、ＶＭ３１動作時のレジスタ内容（状態を表すフラグや値）及びＶＭ３１動作時の物理アドレス−物理アドレスの変換テーブル内容であってＥＰＴ１４に書き込まれる内容を、ＶＭＸｒｏｏｔモードとＶＭＸｎｏｎ−ｒｏｏｔモードとの切り替え毎に、ＶＭＣＳ１３内の対応する領域にセーブとロード（なお、ロードとはＣＰＵ１１のレジスタ群１１１等への書き込み）とを行わせるプログラムの処理、（５）ＶＭ３１の動作中にＶＭＣＳ１３による、前記（３）で設定した各命令の発行の有無の監視機能のＶＴ１２への設定を行う機能を備える。
【００３０】
ＶＭＣＳ１３は、Ｅｎｔｒｙ／Ｅｘｉｔ 時のレジスタ群１１１、ＥＰＴ１４等の内容を保持したり、振る舞いを制御したりするためのデータ構造体である。ＶＭＣＳ１３内のゲスト側のリスト１３１には、前記（３）で設定した内容、すなわちＥｘｉｔ原因に該当する照合用データが、好ましくは全て設定されている。Ｅｘｉｔ原因としては、各種の例外、割込、無効オペコード違反の発生等がある。本実施形態では、ＲＡＭ３０の仮想メモリへの動的メモリの確保要求を発行する特権リング０でのアクセスであるSyscall命令は、無効オペコード違反（Invalid Opcode Fault）として設定され、フック対象としている。この設定は、レジスタ群１１１のＭＳＲ（Model Specific Register）の内、Syscall命令に関するレジスタに対してdisableのフック条件設定を行うことで可能である。ＶＭＭ３２は、ＶＭ３１のカーネルをリング０として動作させているため、特権命令は例外とならないことから、ＶＭＭ３２のＥｘｉｔ機能を利用してフック対象としている。
【００３１】
ＶＭＭ３２は、Syscall命令が発行されると、これを無効オペコード違反としてフックし、この無効オペコード違反がＶＭＣＳ１３のリスト１３１に設定されている結果、ＶＴ１２の監視ロジックによる照合によって、ＣＰＵ１１にＥｘｉｔ命令を発行するようにし、ＣＰＵ１１の制御がＶＭＸｒｏｏｔモードに遷移するようにしている。ＶＴ１２は、ＶＭＭ３２が実行可能なハードウェアで構成された仮想化支援技術であり、Ｅｘｉｔ命令を受けた時点のＶＭ３１の状態、例えばＥｘｉｔの原因となった無効オペコード違反の内容をＶＭＣＳ１３にセーブする。
【００３２】
次に、図３は、ブラウザが関連するメモリマップの図で、（ａ）はＨＤＤ２２のメモリマップ、（ｂ）はＨＤＤ２２からＲＡＭ３０の一部に設定された仮想メモリ空間３１０に展開された状態のデジタルコンテンツデータのメモリマップである。図４は、図３（ｂ）に対応する図で、未使用領域に対する動的メモリの確保処理と不正動作との関連を説明するための図である。
【００３３】
以下、本発明が関係するブラウザについて説明する。なお、本実施形態において例示するブラウザは、例えばマイクロソフト社のインターネットエクスプローラ（登録商標）等のいわゆるウェブブラウザであり、ＨＴＴＰ（Hyper Text Transfer Protocol ）等のインターネットプロトコルを利用してウェブサイトにアクセスし、ＨＴＭＬ等の言語によって記述された文書データや画像データなどのデジタルコンテンツデータを取得し、表示部５０に表示させる処理を行うものである。
【００３４】
より具体的には、ＶＭ３１は、ブラウザによってウェブサーバ９０のウェブサイトにＵＲＬを指定してアクセス要求を行い、該当するデジタルコンテンツデータの抽出を行って、リクエスト元であるＶＭ３１への送信を行わせる。デジタルコンテンツデータは、ＨＤＤ２２のインターネット一時フォルダ２２２にキャッシュされ、保存される。
【００３５】
デジタルコンテンツデータには、動画演出等を可能にする、解析エンジンとしてのジャバスクリプトのアルゴリズム（プログラム）が埋め込まれている。デジタルコンテンツデータは、インターネット一時フォルダ２２２からＲＡＭ３０内の所定の領域となる（リニアアドレスで定義されている）仮想メモリ空間３１０に読み出される（展開される）ことで、表示部５０への表示が行われる。
【００３６】
図３（ｂ）に例示する仮想メモリ空間３１０は、例えばアドレス0x000000を基準とした所定サイズの、例えば４Ｇbyteを有する。仮想メモリ空間３１０は、アドレス0x000000から順番に、スタック領域３１１、実行コード領域３１２、ヒープ領域３１３、データ領域３１４、ヒープ領域３１５、及びカーネル領域３１６を含む。スタック領域３１１は、実行プログラムが内部的にデータを保存しておく必要がある場合に用いられるもので、プロセスに実行に伴って矢印に示すようにスタックデータが蓄積される。実行コード領域３１２は、データ領域３１４に格納された画像データを表示するための各プログラムを格納するものである。
【００３７】
なお、例えば、スタック領域３１１からヒープ領域３１５までで２Ｇbyteを有し、そのうち、実行コード領域３１２は１Ｍbyte程度、データ領域３１４は１Ｋbyte程度の各サイズに設定されている。このように、ヒープ領域３１３及びヒープ領域３１５は大サイズとして準備されている。ヒープ領域とは、動的に確保可能な未使用のメモリ領域のことであり、必要時に動的に確保（allocate）し、使い終わったら解放（delete）することで、限られたメモリを有効に活用するようにしたものである。
【００３８】
図４には、仮想メモリ空間３１０のヒープ領域３１３（３１５）に動的メモリ確保用のアルゴリズムによって作成された各種の領域（３１ａ、３１ｂ、３１ｃ）が示されている。まず、仮想メモリ空間３１０のヒープ領域３１３の適所にあるジャバスクリプト領域３１ａは、ＨＴＭＬに埋め込まれていた各種のジャバスクリプトのアルゴリズムが読み込まれたものである。なお、以降、ジャバスクリプト領域３１ａというときは、動的メモリを確保し、確保した領域内に所定のコードを記述する処理を行うアルゴリズムを備えたジャバスクリプトが格納された領域として説明する。
【００３９】
ヒープ領域３１５（またはヒープ領域３１３）の適所にあるプログラム領域３１ｂは、実行コード領域３１２に格納されている実行コードの内のある実行コードが選択され、対応するｄｌｌがＨＤＤ２２のｄｌｌ領域から読み出されたものである。プログラム領域３１ｂに読み込まれたｄｌｌは、前記の実行コードによって起動される。プログラム領域３１ｂの記憶領域は、実行コードによって確保され、次いで、読み込まれたｄｌｌの処理が終了すると、実行コードによって解放される。
【００４０】
また、ＮＯＰ領域３１ｃは、ジャバスクリプト領域３１ａ内のジャバスクリプトのアルゴリズムによって、ＮＯＰ（No Operation）コードがスプレイ、すなわち所定容量域（例えば１Ｋbyte）内に、埋め尽くすようにしてＮＯＰコードが連続して書き込まれたものである。ジャバスクリプトは、図４に示すように、ヒープ領域３１３（３１５）の範囲内に対して、プロセスあるいはスレッド（以下、まとめてプロセスという）の単位で、他の処理の合間に、ＮＯＰコードのスプレイ処理を連続（ループ）的に継続する。なお、ＮＯＰコードとは、「何もすることなく、次のアドレスへ移行する」オペコードで、かかるオペコードを連続して記述しておくことで、当該領域が指定されるとＣＰＵ１１は何もしない動作を次々のアドレスで繰り返す（処理保留状態とする）ようにしたものである。
【００４１】
ヒープ領域３１３（３１５）内に、ＮＯＰ領域３１ｃを順次形成する理由は、以下の通りである。通常、動的メモリは、あるロード先（例えばプログラム領域３１ｂ）を確保され、ｄｌｌが格納され、ｄｌｌが実行されて、その後に解放される。その時のアクセス先を示すパラメータとしての基準ポイント（アドレス）やサイズはスタックに格納されている（残っている）。一方、ｄｌｌは、膨大に存在し、さらにはアドインで追加可能であることから、複数のｄｌｌの複雑な使い方、例えば、あるｄｌｌから更に他のｄｌｌを用いる等の複数のｄｌｌを組み合わせる場合に、同じアクセスポイントに対してアクセス操作を行ってしまうというバグ（ｂｕｇ：プログラムの中の誤り）を発生させる場合がある。この場合、当該アクセスは、未使用領域をアクセスしたとして無効オペコード違反として無効とされ、処理を終了させられる。そこで、ＮＯＰコードをスプレイしておくことで、続けて同一のプログラム領域３１ｂをアクセスした場合に、前述したような処理保留状態、すなわち、例えばユーザからの何らかの対応操作を受け付けることで直前の状態に戻るような状態に移行させるようにしている。
【００４２】
ところが、外部から取り込んだ前記ジャバスクリプトに不正なプログラムが埋め込まれている場合、例えば、ジャバスクリプトによって作成されたＮＯＰ領域３１ｃの領域の一部に、所定のアドレスにジャンプ（JMP）するコード（不正コード）が仕込まれており、かつ、その所定のアドレス、例えば図４のスタック領域３１１内の適所に、不正なプログラムとしてのコードデータ領域３１ｄが、ウェブサーバ９０から受信したデジタルコンテンツデータのＲＡＭ３０への展開時に読み込まれていたとする場合である。このような場合、前記したように、同一領域がアクセスされて、ＣＰＵ１１の制御が、ＮＯＰコードの処理に受け渡されると、ＣＰＵ１１は、ＮＯＰ領域３１ｃ内のＮＯＰコードに従った処理を順番に実行し、いずれかの時点で、不正コードのアドレスに辿り着いて、ＣＰＵ１１の処理がコードデータ領域３１ｄの不正なプログラムに移ることになる。すなわち、外部のウェブサーバ９０から受信されたデジタルコンテンツデータによって行われるジャバスクリプト処理は、その展開領域である仮想メモリ空間３１０を超えて許可されない反面、不正なプログラムを介在させることで、その領域外のデータに対する不正な行為、例えばデータの改竄、破壊あるいは漏洩を招く可能性がある。
【００４３】
そこで、図５に示すＶＭＭ３２が実行する監視ソフトウェアによって、かかる不正な行為の実行を抑止する。ＶＭＭ３２は、ＲＡＭ３０にロードされたプログラム及びハードウェアによる処理を実行することによって、フック部３２１、検査部３２２及び処置部３２５として機能する。なお、取得部３２３及び分析部３２４は検査部３２２として機能する。
【００４４】
フック部３２１は、レジスタ群１１１（のＭＳＲ内のＳｙｓｃａｌｌ命令に関するレジスタ）に対してdisableのフック条件の設定を行う。ＶＭ３１動作中に、動的メモリ確保用のアルゴリズムの実行に起因するＳｙｓｃａｌｌ命令が発行されると、フック部３２１によって無効オペコード違反としてフックされ、この無効オペコード違反がＶＭＣＳ１３のリスト１３１に設定されている結果、ＶＴ１２の監視ロジックによる照合によって、ＣＰＵ１１にＥｘｉｔ命令を発行するようにし、ＣＰＵ１１の制御がＶＭＸｒｏｏｔモードに遷移する。なお、フック処理として、Ｓｙｓｃａｌｌ命令の発行をフック部３２１によって無効オペコード違反としてフックし、次いで、フック原因として動的メモリ確保用のアルゴリズムの実行に起因するものかを判断するような態様を含めてもよい。
【００４５】
ここで、動的メモリ確保用のアルゴリズムの処理の詳細について説明する。インターネットエクスプローラの操作中に、ＶＭ３１が、ある実行プログラム（実行コードのプログラム、ジャバスクリプトのアルゴリズム等）によって基準ポイント及びサイズのパラメータを指定して動的メモリの領域確保要求を発行すると、当該要求に対応するｄｌｌ（ＡＰＩ含む）のＳｙｓｃａｌｌ命令（Allocate Virtual Memory）がカーネルに対して発行される。カーネルは、要求された基準ポイント及びサイズのパラメータに対応するリニアアドレスとサイズとを設定して、Ｓｙｓｒｅｔとして実行プログラムに戻す。従って、実行プログラムは、このＳｙｓｒｅｔを受けて、設定された基準ポイントに所定のプログラムとしての前記ｄｌｌ（または連続するＮＯＰ情報）をロードする。
【００４６】
フック部３２１は、動的メモリ確保用のアルゴリズムの処理に係るＳｙｓｃａｌｌを無効オペコード違反としてフック対象とすることで、全ての動的メモリの確保要求のアクセスをフックするようにしている。また、ＶＭＭ３２は、Ｓｙｓｒｅｔによって返送される、設定されたリニアアドレス、サイズの情報、及び当該アドレスに書き込まれる内容を取得し、ＶＭＣＳ１３に格納する。なお、格納する内容は、一般的には１回分でよい。
【００４７】
取得部３２３は、フック部３２１によるフック処理が発生すると、前回に動的メモリ確保用のアルゴリズムの実行によって設定されたリニアアドレスに書き込まれている内容を読み出す。
【００４８】
分析部３２４は、読み出された内容を分析する。すなわち、分析部３２４は、読み出された内容から、ＮＯＰコードの個数を計数する。また、分析部３２４は、計数値が所定の閾値を超えたか否かを判断する。すなわち、前回に設定された領域がＮＯＰ領域３１ｃか、それ以外の領域かの検査を行う。所定の閾値とは、ＮＯＰコードはプログラム中で一般的に利用されるコードのひとつであることから、実行プログラム中にＮＯＰコードが存在するというだけでは、プログラム領域３１ｂも含まれ、ＮＯＰ領域３１ｃと断定することはできない。そこで、ＮＯＰ領域３１ｃであると識別可能な閾値を設定している。
【００４９】
処置部３２５は、分析部３２４によって前回の動的メモリとして確保された領域がＮＯＰ領域３１ｃであると判断された場合に、当該領域に、不正プログラムが埋め込まれている可能性があるとして、当該動的メモリ領域を消去する指令を発行する。また、処置部３２５は、分析部３２４による判断がＮＯＰ領域３１ｃでない場合、本来の処理を継続するＳｙｓｒｅｔを戻す。次いで、処置部３２５は、ＶＴ１２に対してＥｎｔｒｙ命令の発行を指示する。
【００５０】
図６は、情報処理装置１の起動処理の一例を示すフローチャートである。情報処理装置１の電源が投入されると、フラッシュＲＯＭ２１からＢＩＯＳがＲＡＭ３０の所定領域にロードされ、次いでＢＩＯＳが起動される（ステップＳ１）。ＢＩＯＳはＨＤＤ２２からＭＢＲをＲＡＭ３０にロードし、このＭＢＲによってＨＤＤ２２のアクティブな先頭パーティションが指定されて、ここに格納されているＶＭＭ３２のホストソフトウェアが、前述したようにして、ＲＡＭ３０の領域Ａにロードされ、次いで、その一部のＯＳローダが起動される（ステップＳ３）。ＯＳローダによって各ＶＭのＯＳ（カーネル）が、前述したようにロードされて、順次起動され（ステップＳ５）、次いでＶＭ毎にアプリケーションソフトウエアＡＰ（インターネットエクスプローラ等のブラウザを含む）が、前述したようにロードされる（ステップＳ７）ことで、起動処理が修了する。
【００５１】
図７は、ＶＭＭによって実行される監視処理の一例を示すフローチャートである。本フローチャートは、ＶＭ３１によって実行させるアプリケーションプログラムのうちのインターネットエクスプローラの動作中であって、ＶＭＸｎｏｎ−ｒｏｏｔモードに遷移して、種々の処理が実行されている。監視のためのフック処理は、予め設定された種々の処理（例えば、各種のＳｙｓｃａｌｌを含む）のうちのいずれかの処理が実行されることで発生するが、以下では、動的メモリ確保に関わるアクセスに対するフックの発生に関して説明する。
【００５２】
まず、動的メモリの確保に関わるアクセスによるフックが発生したか否かが判断される（ステップＳ１１）。前記フックの判断が否定された場合、ステップＳ２５に進む。一方、前記フックの判断が首肯された場合、ＶＭＸ−ｒｏｏｔモードへの遷移指示が発行され、ＶＴ１２にＥｘｉｔ命令がセットされて（ステップＳ１３）、ＣＰＵ１１の制御がＶＭＭ３２に渡る。
【００５３】
次いで、前回の動的メモリ確保の処理で確保された領域内のアドレスに書き込まれた内容を読み取り、その内容の分析が行われる（ステップＳ１５）。すなわち、内容の分析では、読み出した内容中に、所定の閾値を超える個数のＮＯＰコードが含まれているか否かが判断される（ステップＳ１７）。ＮＯＰコードの個数が閾値を超えていない場合、前回確保された動的メモリの領域はプログラム領域３１ｂであるとして（ステップＳ１７でＮｏ）、本来の処理を実行して（ステップＳ１９）、ステップＳ２３に進む。
【００５４】
一方、ＮＯＰコードの個数が閾値を超えている場合、前回確保された動的メモリの領域はＮＯＰ領域３１ｃであると判断され（ステップＳ１７でＹｅｓ）、インターネットエクスプローラの処理を終了するべく、仮想メモリ空間３１０の内容を消去する命令をカーネルに発行する（ステップＳ２１）。次いで、ＶＭＭ３２によってＶＭＸｎｏｎ−ｒｏｏｔモードへの遷移指示が発行され、ＶＴ１２にＥｎｔｒｙ命令がセットされて（ステップＳ２３）、ＣＰＵ１１の制御がＶＭ３１に戻される。なお、ＶＭ３１の動作状態が終了したか否かが判断され（ステップＳ２５）、終了していなければ、ステップＳ１１に戻り、終了したのであれば本フローを終了する。
【００５５】
なお、本発明は、以下の実施態様が採用可能である。
【００５６】
（１）本実施形態では、何もしないオペコードとしてＮＯＰコードを利用したが、ＮＯＰコードと同等の処理を有するものとして、例えばＮＯＯＰコード、ｐａｓｓコード（何の効果もないオペコード）が知られており、本実施形態では、これらを包括して不作為コードとして採用可能である。
【００５７】
（２）本実施形態では、Syscall命令を無効オペコード違反としてＥｘｉｔ対象とごしたが、無効オペコード違反に限定されず、Ｅｘｉｔ対象としてフックできれば他の条件でフックするようにしてもよい。
【００５８】
（３）本発明は、ジャバスクリプト言語に限らず、スクリプト言語で記述された動的メモリ確保用のアルゴリズムを含むデータに関して適用可能である。
【００５９】
（４）本実施形態では、ブラウザを利用した例で説明したが、これに限定されず、
（ｉ）あるプロセス（スレッド）が動的にメモリを確保する
（ｉｉ）確保したヒープ領域に不作為コードを書き込む
（ｉｉｉ）上記行為を繰り返す
という、繰り返し行われるメモリの動的確保という行為に対して、プロセス（スレッド）による前回書き込み内容から判断するという点で捉える。こうすることで、ヒープスプレイがＰＤＦ等から行われたとしても、同様のルールにより対策が適用される。すなわち、ブラウザを利用する態様の他、別の方法で外部から取得し、あるいは既に所得済みの態様を含む。また、コンテンツデータはデジタルデータに限定されず、イメージデータを含むアナログのデータでもよい。
【００６０】
（５）本実施形態では、Ｉｎｔｅｌ（登録商標）ＶＭＭに基づいて説明したが、これに限定されず、ＡＭＤ社のＶＭＭ、ゲストカーネルをリング１あるいは２（ゲストアプリケーションをリング３など）で制御する態様にも同様に適用可能である。
【００６１】
（６）本実施形態では、ＶＭ及びＶＭＭで動作する情報処理装置で説明したが、これに限定されず、情報処理装置起動時に、ＯＳよりも先に、リング０で起動する監視プログラムを立ち上げ、この監視プログラムの管理の下に、ＯＳをリング１（又は２）で、次いでＡＰをリング２（又は３）でロードする態様とし、監視プログラムに前記監視ソフトウェアの機能を実行させる態様としてもよい。
【符号の説明】
【００６２】
１  情報処理装置
１１  ＣＰＵ
３０  ＲＡＭ
３１  仮想メモリ空間
３１３，３１５  ヒープ領域
３１ｃ  ＮＯＰ領域
３２１  フック部（フック手段）
３２２  検査部（検査処理手段）
３２３  取得部（検査処理手段）
３２４  分析部（検査処理手段）
３２５  処置部（終了処理手段）
９０  ウェブサイト
【図１】
0006317646.tif 000002
【図２】
0006317646.tif 000003
【図３】
0006317646.tif 000004
【図４】
0006317646.tif 000005
【図５】
0006317646.tif 000006
【図６】
0006317646.tif 000007
【図７】
0006317646.tif 000008