説明

不正メモリアクセス検出方法、および、不正メモリアクセス検出プログラム

【課題】プログラム実行環境において、メモリ保護機構だけでは検出できない不正メモリアクセスを検出し情報を提示する。
【解決手段】プログラムの実行に伴ってメモリアクセスが発生した際、アクセスがおこなわれたメモリアドレスをメモリ領域の配置情報と照らし合わせることでアクセス対象のメモリ領域を特定し、アクセスの種類(読み込みまたは書き込み)と、メモリアクセスに関係するスレッドおよびモジュールは何か、といった条件の組み合わせにより、当該メモリアクセスが正当なものであるかを判定し、その結果を表示装置などに提示する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、不正メモリアクセス検出方法に係り、特に、プログラム実行環境のデバッグを支援し、信頼性の低いモジュールの高信頼化に寄与する不正メモリアクセス検出方法に関する。
【背景技術】
【0002】
一般に、中央処理装置は、プログラムを実行する際に、指定したメモリアドレス範囲へのプログラムのアクセスを検出し、プログラムの実行を中断して例外処理をおこなうことができるメモリ保護手段を備えている。OSやデバッガはこの手段を利用することで、メモリ領域中の任意の範囲に対しアクセス制限(読み込みおよび書き込みの各操作に対する許可・不許可)をおこなうことが可能である。これにより、一般的なプログラム実行環境において、データ領域およびスタック領域以外への書き込みといった不正なメモリアクセスを検出することができる。
【0003】
また、以下の特許文献1には、プログラムを構成する各コンポーネントが、プログラム実行中のある期間において、あるメモリ領域を排他的に利用する設定をおこなう手段を設け、この設定に違反するメモリアクセスを不正なものとして検出することを可能とする技術が開示されている。さらに、当該メモリアクセスをおこなったプロセスの識別情報を記録することで、不正なメモリアクセスをおこなったプロセスを特定することを可能とし、障害解析が容易になるとしている。
【0004】
【特許文献1】特開2001−331376号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
上記従来技術は、単一のメモリ領域を複数の処理コンポーネントが共有しているシステムにおいて、不正なメモリアクセスを発見するために有用な技術である。
【0006】
しかしながら、上記従来技術には、次のような問題がある。すなわち、検出できる不正メモリアクセスは、以下の条件に適合するものに限られ、これらの条件に当てはまらない不正メモリアクセスは検出できなかった。
(1)読み込み禁止領域からの読み込みまたは書き込み禁止領域への書き込みとった、基本的なメモリ保護機構によって簡単に検出できるメモリアクセス
(2)あるモジュールがある期間において排他的に利用することを明示的に指定しているメモリ領域への他のモジュールによるメモリアクセス
本発明は、上記問題点を解決するためになされたもので、その目的は、プログラムのデバックの際に、不正メモリアクセスを検出することのできるパターンを豊富にし、しかも、詳細なメモリアクセスに関する情報をユーザに提示し、デバッグ作業や障害対策にかかる時間を短縮することにある。
【課題を解決するための手段】
【0007】
本発明では、プログラムの実行に伴ってメモリアクセスが発生した際、アクセスがおこなわれたメモリアドレスをメモリ領域の配置情報と照らし合わせることでアクセス対象のメモリ領域を特定し、アクセスの種類(読み込みまたは書き込み)と、メモリアクセスに関連するスレッドおよびモジュールは何か、といった条件の組み合わせにより、当該メモリアクセスが正当なものであるかを判定する。そして、その結果を表示装置などに提示する。
【0008】
また、メモリアクセスが不正であると確定しない場合でも、表示の規則を指定して、その規則にしたがって、そのメモリアクセスが不正である可能性があることを提示するようにしてもよい。
【発明の効果】
【0009】
本発明によれば、プログラムのデバックの際に、不正メモリアクセスを検出することのできるパターンを豊富にし、しかも、詳細なメモリアクセスに関する情報をユーザに提示し、デバッグ作業や障害対策にかかる時間を短縮することができる。
【発明を実施するための最良の形態】
【0010】
以下、本発明に係る各実施形態を、図1ないし図7を用いて説明する。
【0011】
〔実施形態1〕
以下、本発明に係る第一の実施形態を、図1ないし図5を用いて説明する。
【0012】
先ず、図1を用いて本発明の第一の実施形態に係るプログラム実行環境の構成について説明する。
図1は、本発明の第一の実施形態に係るプログラム実行環境の構成を示すブロック図である。
【0013】
中央処理装置10は、図1に示されるようにプログラム実行部20、メモリアクセス監視部30、不正メモリアクセス検出部40から構成される。そして、メモリ50には、内部にプロセス使用領域51およびプロセス使用領域管理情報52が格納される。
【0014】
プログラム実行部20は、プログラム実行の際に、プロセスに割り当てる記憶領域として、プロセス使用領域51を使い、プログラムを実行する。
【0015】
メモリアクセス監視部30は、プログラム実行部20によるプロセス使用領域51へのメモリアクセスを監視し、アクセス発生時に不正メモリアクセス検出部40へ通知する。これは、プロセスからメモリアクセスがあった段階で、例外処理をおこして、例外処理モジュールでこの処理を実行することにより実現できる。
【0016】
不正メモリアクセス検出部40は、プロセス使用領域管理情報52に格納された情報を基に、通知されたメモリアクセスの正当性を判定する。情報出力部60は、不正メモリアクセス検出部40から送られたデータをログ格納部70に記録し、また画面表示部80へ表示する。
【0017】
次に、図2および図3を用いて本発明の第一の実施形態に係るプログラム実行環境のメモリアクセスに関する情報について説明する。
図2は、メモリ50内に格納される情報の詳細を示す図である。
図3は、メモリアクセス判定表150の一例を示す図である。
【0018】
プロセス使用領域51には、テキスト領域511、データ領域512、スタック領域513が格納される。テキスト領域511にはプログラムを構成する各モジュールのコード(命令列)が格納される。
【0019】
プログラムを実行する際には、プロセスを構成する実行単位である各スレッドとして、このモジュールを実行することにより処理がおこなわれる。
【0020】
データ領域512には、プログラムの実行に伴って生成・解放される各オブジェクトが格納される。
【0021】
スタック領域513には、プロセスを構成する実行単位である各スレッドがそれぞれ占有して利用する作業用メモリ領域が割り当てられる。
【0022】
プロセス使用領域管理情報52には、監視対象モジュールリスト521、メモリ領域配置表522、アクセス制御表523が格納される。
【0023】
メモリ領域配置表522は、メモリ領域5221および配置アドレス5222を記録する表である。また、アクセス制御表523は、オブジェクト型5231およびアクセス可能モジュール5232を記録する表である。
【0024】
メモリアクセス判定表150は、メモリアクセスの正当性を判定するための基準となる情報を保持する表である。この表は、図1には示さなかったが、不正メモリアクセス検出部40が参照できる記憶領域に置かれる。また、メモリアクセスの正当性を判定するための基準は、スタティックに保持してもよいし、メモリアクセス判定表150をユーザが自由に設定できるようにしてもよい。
【0025】
次に、図4および図5を用いて本発明の不正メモリアクセス検出方法の手順について説明する。
図4は、本発明の不正メモリアクセス検出方法の手順を示すフローチャートである。
図5は、本発明の不正メモリアクセス検出方法において、不正メモリアクセスを検出した場合に表示する画面例を示す図である。
【0026】
先ず、当該プログラム実行環境においてプログラムの実行が開始されると、プログラム実行部20は、プロセス使用領域51にプログラムをロードする(ステップ100)。
【0027】
次に、プログラム実行部20は、プロセス使用領域51内の各メモリ領域の配置情報(アドレス範囲)をメモリ領域配置表522へ記録する(ステップ101)。また、あらかじめ指定された不正メモリアクセス検出の対象とするモジュールを、監視対象モジュールリスト521に登録する。アクセス制御リスト523には、プログラムで定義されているオブジェクト型ごとに、アクセス可能なモジュール、すなわちメモリアクセスを行うコードがどのモジュールに含まれている場合にアクセスを許可するか、という設定をおこなう。この規則はプログラム内に各オブジェクト型の属性として記述しておく。なお、このオブジェクト型は、オブジェクト指向型言語、例えば、Java(登録商標)などでクラスと呼ばれている概念と同義である。
【0028】
以上によりプログラムの実行が開始される。
【0029】
プログラムの実行に伴い、監視対象モジュールリスト521に登録されているモジュールの実行が開始されると、メモリアクセス監視部30は、プログラム実行部20によるプロセス使用領域51へのアクセスの監視を始める(ステップ102)。
【0030】
メモリアクセス監視部30はメモリアクセスを捕捉すると(ステップ103)、アクセスの種類(読み込みまたは書き込み)およびアクセス対象アドレスを不正メモリアクセス検出部40に通知する。また、不正メモリアクセス検出部40は、プログラム実行部20から当該メモリアクセスをおこなったスレッドと、当該スレッドにより実行されメモリアクセスを発生させたコードを含むモジュールを特定する情報を取得する。
【0031】
不正メモリアクセス検出部40は、以上の情報を基に、当該メモリアクセスの正当性を判定する(ステップ104)。
【0032】
先ず、アクセス対象アドレスをメモリ領域配置表522に照らし合わせ、アクセス対象メモリ領域を特定する。次に、図3に示すメモリアクセス正当性判定表150に従って、当該メモリアクセスの正当性を判定する。
【0033】
(1)このメモリアクセス正当性判定表150に従い、アクセス対象メモリ領域がテキスト領域511である場合は、アクセスの種類が読み込みならば正当なメモリアクセス、書き込みならば不当なメモリアクセスであると判定することになる。この基準は、メモリ上にロードされたプログラムのコードを書き換えることが禁止されていることを想定している。
【0034】
(2)アクセス対象メモリ領域がデータ領域512である場合には、アクセス制御表523を参照し、アクセス対象のオブジェクト型に対して実行中のモジュールがアクセス権を持つか否かを判定する。アクセス権があれば正当、アクセス権がなければ不当であると判定する。
【0035】
例えば、図2で示される状況において、モジュール1からオブジェクト2にアクセスしようとした場合、オブジェクト2の型はBであり、これはモジュール1からのアクセスを許可していないため、このメモリアクセスは不正であると判定される。
【0036】
(3)アクセス対象メモリ領域がスタック領域513である場合は、アクセス対象のスタック領域が実行中のスレッドのものであれば正当なメモリアクセス、そうでなければ不当なメモリアクセスであると判定する。この基準では、各スタック領域は対応する各スレッドが排他的に利用するもので、あるスレッドが他のスレッドのスタック領域へアクセスすることは禁止されていることを想定している。以上により、捕捉されたメモリアクセスの正当性が判定される。不当なメモリアクセスだと判定された場合、不正メモリアクセス検出部40は、当該メモリアクセスに関する情報を情報出力部60へ渡す。
【0037】
情報出力部60は、不正メモリアクセスがおこなわれたことをユーザへ伝えるデータをログ出力部70に記録し、また、画面表示部80へ送って画面表示をおこなう(ステップ105)。表示される画面は、例えば、図5に示されるような画面表示例160と画面表示例170の如くである。
【0038】
ここでは、これらの画面の表示中はプログラムの実行を中断させ、「停止」ボタンが押された場合はプログラムの実行を中止し、「続行」ボタンが押された場合はプログラムの実行を再開させることを想定している。
【0039】
そして、監視対象モジュールの実行が続く場合には、ステップ103へ戻り、不正メモリアクセスの検出を継続し、監視対象モジュールの実行がここで終了する場合には、メモリアクセス監視部30によるメモリアクセス捕捉を無効化し、ステップ102へ戻って通常のプログラム実行をおこなう(ステップ106)。
【0040】
以上の処理内容により、本発明による不正メモリアクセス検出が実現される。
【0041】
なお、ステップ101においては、監視対象とするモジュールをあらかじめ定めていたが、プログラムを構成するモジュールのうち、危険なモジュール(不正なメモリアクセスをおこなう可能性があるもの)を指定し、危険なモジュールだけを監視対象とすることも考えられる。例えば、あるモジュールを実行しても不正なメモリアクセスは発生しないことがプログラム実行環境によって保証された場合、当該モジュールは監視対象とせず、その他のモジュールだけを監視対象とするということが考えられる。このような例としては、JavaのVM環境において、 Javaプログラムを安全なモジュールに分類し、Javaプログラムから呼び出されるネイティブメソッドを、危険なモジュールに分類することが考えられる。
【0042】
以上に述べたプログラム実行環境では、中央処理装置10に備わるメモリアクセス監視部30をメモリアクセス捕捉の手段として用いていたが、これを他の手段によって実現することも考えられる。例えば、監視対象モジュールの実行開始時および実行終了時にメモリイメージを保存し、両メモリイメージを比較して差分を求めることで、当該モジュールの実行期間中に内容が書き換えられたメモリ領域を特定する、という方法が考えられる。この方法ではすべてのメモリアクセスを補足することはできないが、メモリアクセス監視部30を必要とせずに本発明の不正メモリアクセス検出方法を実現できるという良さがある。
【0043】
〔実施形態2〕
以下、本発明に係る第二の実施形態を、図6を用いて説明する。
図6は、本発明の第二の実施形態に係るプログラム実行環境の構成を示すブロック図である。
【0044】
第一の実施形態は、中央処理装置10が、プログラム実行部20、メモリアクセス監視部30、不正メモリアクセス検出部40を実行する例であった。本実施形態は、同じ機能をソフトウェアで実行する例である。
【0045】
オペレーティングシステム100(OS)は、ハードウェア00を制御し、プログラムを実行する際に、スレッド1を生成し制御する。スレッド1は、プロセス使用領域51を使用し、処理をおこなうことは、第一の実施形態と同様である。
【0046】
本実施形態では、不正メモリアクセスを検出するために、不正メモリアクセス検出プログラム200が実行される。不正メモリアクセス検出プログラム200は、プログラム実行モジュール20a、メモリアクセス監視モジュール30a、不正メモリアクセス検出モジュール40aを備えている。各モジュールの機能と処理は、第一の実施形態の対応する部位と同様である。
【0047】
〔実施形態3〕
以下、本発明に係る第三の実施形態を、図7を用いて説明する。
図7は、メモリアクセス結果出力表300を示す図である。
【0048】
第一の実施形態では、すべての不正メモリアクセスを検出し出力していたが、予め情報を取捨選択する規則を与えることで、出力される情報を絞ることも考えられる。さらに、メモリアクセスが正当であると判定した場合でも情報を出力し、プログラムの実行状況を記録するためのログデータとして利用することも考えられる。
【0049】
そのために、図7に示されるメモリアクセス結果出力表300を用意し、不正メモリアクセス検出部40が参照できるようにして置くとよい。
【0050】
メモリアクセス結果出力表300の上半分のアクセス種類310は、領域の種別ごとにメモリアクセスの結果を出力するか否かを指定できる。下半分の出力対象320は、図5に示したような画面などに表示する対象を指定できる。
【図面の簡単な説明】
【0051】
【図1】本発明の第一の実施形態に係るプログラム実行環境の構成を示すブロック図である。
【図2】メモリ50内に格納される情報の詳細を示す図である。
【図3】メモリアクセス判定表150の一例を示す図である。
【図4】本発明の不正メモリアクセス検出方法の手順を示すフローチャートである。
【図5】本発明の不正メモリアクセス検出方法において、不正メモリアクセスを検出した場合に表示する画面例を示す図である。
【図6】本発明の第二の実施形態に係るプログラム実行環境の構成を示すブロック図である。
【図7】メモリアクセス結果出力表300を示す図である。
【符号の説明】
【0052】
10…中央処理装置
20…プログラム実行部
30…メモリアクセス監視部
40…不正メモリアクセス検出部
50…メモリ
60…情報出力部
70…ログ格納部
80…画面表示部

【特許請求の範囲】
【請求項1】
モジュールを実行することにより、メモリアクセスをおこなってプログラム実行をおこなう情報処理装置において、
前記モジュールを実行することにより発生するメモリアクセスを監視し捕捉するステップと、
メモリ領域におけるデータとモジュールの配置情報を参照し、捕捉したアドレスにより、前記メモリ領域の使用種別とメモリアクセスに関係するスレッドおよびモジュールの情報を得るステップと、
前記メモリアクセスの読み書きの種別と、前記メモリ領域の使用種別と、前記メモリアクセスに関係するスレッドおよびモジュールの情報とによりメモリアクセスの正当性を判定するステップと、
前記メモリアクセスの正当性を判定するステップにより得られた判定結果とメモリアクセス情報とを提示するステップとを有することを特徴とする不正メモリアクセス判定方法。
【請求項2】
さらに、所定のモジュールを指定するステップを有し、指定されたモジュールの実行期間に対してメモリアクセスの監視をおこなうことを特徴とする請求項1記載の不正メモリアクセス検出方法。
【請求項3】
前記所定のモジュールを指定するステップにおいて、実行対象となるモジュールを安全なモジュールと危険なモジュールに分類して、
安全なモジュールに分類されたモジュールに対しては、メモリアクセスの監視をおこなわず、危険なモジュールに分類されたモジュールに対しては、メモリアクセスの監視をおこなうことを特徴とする請求項2記載の不正メモリアクセス検出方法。
【請求項4】
さらに、前記提示する判定結果とメモリアクセス情報の種別を指定するステップを有し、指定された種別に従って判定結果とメモリアクセス情報とを提示することを特徴とする請求項1記載の不正メモリアクセス検出方法。
【請求項5】
モジュールを実行することにより、メモリアクセスをおこなってプログラム実行をおこなう情報処理装置において、
所定のタイミングで複数回メモリイメージを取得し、取得したメモリイメージを比較することで所定の期間内に書き換えがおこなわれたメモリアドレスを特定するステップと、
メモリ領域におけるデータとモジュールの配置情報を参照し、前記特定されたアドレスにより、前記メモリ領域の使用種別とメモリアクセスに関係するスレッドおよびモジュールの情報を得るステップと、
前記メモリアクセスの読み書きの種別と、前記メモリ領域の使用種別と、前記メモリアクセスに関係するスレッドおよびモジュールの情報とによりメモリアクセスの正当性を判定するステップと、
前記メモリアクセスの正当性を判定するステップにより得られた判定結果とメモリアクセス情報を提示するステップとを有することを特徴とする不正メモリアクセス判定方法。
【請求項6】
中央処理装置とメモリと表示装置とを有する情報処理システムにおいて、モジュールを実行することにより、前記中央処理装置によって実行される命令の前記メモリへのメモリアクセスに関する不正メモリアクセス検出プログラムにおいて、
前記モジュールを実行することにより発生するメモリアクセスを監視し捕捉する処理と、
メモリ領域におけるデータとモジュールの配置表を参照し、捕捉したアドレスにより、前記メモリ領域の使用種別とメモリアクセスに関係するスレッドおよびモジュールの情報を得る処理と、
前記メモリアクセスの読み書きの種別と、前記メモリ領域の使用種別と、前記メモリアクセスに関係するスレッドおよびモジュールの情報とによりメモリアクセスの正当性を判定する処理と、
前記メモリアクセスの正当性を判定するステップにより得られた判定結果とメモリアクセス情報とを、前記表示装置に提示する処理とを計算機上で実行する不正メモリアクセス検出プログラム。
【請求項7】
中央処理装置とメモリと表示装置とを有する情報処理システムにおいて、モジュールを実行することにより、前記中央処理装置によって実行される命令のメモリアクセスに関する不正メモリアクセス検出プログラムにおいて、
所定のタイミングで複数回メモリイメージを取得し、取得したメモリイメージを比較することで所定の期間内に書き換えがおこなわれたメモリアドレスを特定する処理と、
メモリ領域のデータとモジュールの配置表を参照し、捕捉したアドレスにより、前記メモリ領域の使用種別とメモリアクセスに関係するスレッドおよびモジュールの情報を得る処理と、
メモリアクセスの読み書きの種別と、前記メモリ領域の使用種別と、前記メモリアクセスに関係するスレッドおよびモジュールの情報とによりメモリアクセスの正当性を判定する処理と、
前記メモリアクセスの正当性を判定するステップにより得られた判定結果とメモリアクセス情報とを、前記表示装置に提示する処理とを計算機上で実行する不正メモリアクセス検出プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2006−11692(P2006−11692A)
【公開日】平成18年1月12日(2006.1.12)
【国際特許分類】
【出願番号】特願2004−186137(P2004−186137)
【出願日】平成16年6月24日(2004.6.24)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】