(57)【特許請求の範囲】
【請求項１】
共有メモリへの外部割り込みの許可または禁止制御を、ＣＰＵの内蔵する割り込み制御レジスタの値に応じてコンピュータに実行させるリアルタイムＯＳ上における、前記共有メモリへの不正アクセスを検出する不正アクセス検出装置であって、
前記共有メモリへのアクセスを検知する検知手段と、
前記割り込み制御レジスタの値に基づいて外部割り込み許可状態か禁止状態かを判別する状態判別手段と、
判別の結果、外部割り込み許可状態の場合、前記検知手段で検知した前記共有メモリへのアクセスを不正アクセスとして検出する不正アクセス検出手段と、
を備えることを特徴とする不正アクセス検出装置。
【請求項２】
共有メモリへの外部割り込みの許可または禁止制御を、ＣＰＵの内蔵する割り込み制御レジスタの値に応じてコンピュータに実行させるリアルタイムＯＳ上における、前記共有メモリへの不正アクセスを検出する不正アクセス検出方法であって、前記コンピュータが実行する工程として、
前記共有メモリへのアクセスを検知する検知工程と、
前記割り込み制御レジスタの値に基づいて外部割り込み許可状態か禁止状態かを判別する状態判別工程と、
判別の結果、外部割り込み許可状態の場合、前記検知工程で検知した前記共有メモリへのアクセスを不正アクセスとして検出する不正アクセス検出工程と、
を含むことを特徴とする不正アクセス検出方法。
【請求項３】
コンピュータを用いて、共有メモリへの外部割り込みの許可または禁止制御を、ＣＰＵの内蔵する割り込み制御レジスタの値に応じて前記コンピュータに実行させるリアルタイムＯＳ上における、前記共有メモリへの不正アクセスを検出するためのプログラムであって、
前記共有メモリへのアクセスを検知する検知ステップと、
前記割り込み制御レジスタの値に基づいて外部割り込み許可状態か禁止状態かを判別する状態判別ステップと、
判別の結果、外部割り込み許可状態の場合、前記検知ステップで検知した前記共有メモリへのアクセスを不正アクセスとして検出する不正アクセス検出ステップと、
を前記コンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のタスクや複数の割り込み処理が実行されるリアルタイムＯＳ上における共有メモリへの不正アクセスを検出する不正アクセス検出装置に関する。
【背景技術】
【０００２】
マルチタスクＯＳ上で複数のタスクや複数の割り込み処理が実行されるユーザアプリケーションにおいては、従来より割り込み処理とタスクとの間、タスクと他のタスクとの間で利用する共有メモリの排他制御が必要となる。なぜなら、仮に共有メモリへのアクセス権がないにもかかわらず不正に共有メモリへのアクセスを許可した場合、アプリケーションの誤動作が発生することがあるからである。そのため、そのような不正アクセスが実際にアプリケーションを利用する際に発生することを防止するために、ソフトウェア開発段階のデバック作業等において不正アクセスの有無を検査する必要がある。そこで、例えば特許文献１には、セマフォを用いた場合における共有メモリへの排他制御に関する不正アクセスの検出するソフトウェア支援装置が提案されている。
【０００３】
特許文献１において、ソフトウェア支援装置はユーザアプリケーション実行中にメモリアクセス命令の実行を監視し、マルチタスクＯＳの各共有メモリの指定情報などを格納した共有資源情報を参照して共有メモリへのアクセスを検出する。そして、ソフトウェア支援装置はＯＳ状態テーブルのアクセスタスクＩＤとセマフォ獲得タスクＩＤとを比較することで不正アクセスを検出する。
【０００４】
ところで、リアルタイムＯＳ上で実行されるユーザアプリケーションでも、割り込み処理とタスクとの間で利用する共有メモリへのアクセスには、ＣＰＵの外部割り込み許可・禁止による排他制御が必要であるが、リアルタイムＯＳ上で稼働する割り込み処理ではセマフォを利用することはできない。
【０００５】
ただ、上述したように、特許文献１におけるソフトウェア支援装置は、セマフォにより制御される共有メモリへのアクセス権を持たないタスクによる不正アクセスに関しての検出方法である。したがって、特許文献１におけるソフトウェア支援装置を利用しても、リアルタイムＯＳ上で稼働する割り込み処理とタスクとの間やタスクと他のタスクとの間で共有して使用する共有メモリへの不正アクセスは検出することができない。
【０００６】
【特許文献１】特開２００１−１５４８７２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、リアルタイムＯＳ上で稼働する割り込み処理とタスクとの間やタスクと他のタスクとの間で共有して使用する共有メモリへの不正アクセスを検出することを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係る不正アクセス検出装置は、共有メモリへの外部割り込みの許可または禁止制御を、ＣＰＵの内蔵する割り込み制御レジスタの値に応じてコンピュータに実行させるリアルタイムＯＳ上における、前記共有メモリへの不正アクセスを検出する不正アクセス検出装置であって、前記共有メモリへのアクセスを検知する検知手段と、前記割り込み制御レジスタの値に基づいて外部割り込み許可状態か禁止状態かを判別する状態判別手段と、判別の結果、外部割り込み許可状態の場合、前記検知手段で検知した前記共有メモリへのアクセスを不正アクセスとして検出する不正アクセス検出手段と、を備えることを特徴とする。
【０００９】
本発明によれば、状態判別手段が割り込み制御レジスタに示される特定領域の値に基づいて外部割り込み許可状態か禁止状態かを判別し、その判別の結果、外部割り込み許可状態の場合、不正アクセス検出手段が検知手段で検知した前記共有メモリへのアクセスを不正アクセスとして検出する。よって、割り込み制御レジスタの外部割り込みの許可・禁止の状態を示す特定領域の値を参照し、その値に基づいて外部割り込み許可状態であるか否かを判定することで、共有メモリへのアクセスが不正アクセスか否かを判定することができ、リアルタイムＯＳ上で稼働する割り込み処理とタスクとの間やタスクと他のタスクとの間で共有して使用する共有メモリへの不正アクセスを容易に検出することができる。
【発明を実施するための最良の形態】
【００１０】
本発明の実施の形態（以下、実施形態）について、以下図面を用いて説明する。
【００１１】
図１は、本実施形態におけるソフトウェア開発支援システムの全体構成図である。図１において、ターゲット機器１０は、リアルタイムＯＳ２０を搭載するハードウェア機器である。ソフトウェア開発支援装置３０は、共有メモリの不正アクセスの検出指示をリアルタイムＯＳ２０に出力する装置である。そして、ターゲット機器１０とソフトウェア開発支援装置３０とはＲＳ−２３２ＣケーブルやＵＳＢケーブルなどターゲット機器１０に実装された通信手段を用いて接続される。
【００１２】
本実施形態では、このように構成されたソフトウェア開発支援システムにおいて、リアルタイムＯＳ上で複数のタスクや複数の割り込み処理が実行されるユーザアプリケーションを実行した際に、共有メモリへの不正アクセスが行われるか否かを検出する。
【００１３】
続いて、ターゲット機器１０に搭載されるリアルタイムＯＳ２０について図２に示す機能ブロック図を用いてさらに詳細に説明する。
【００１４】
図２において、割り込み制御部２１は、外部機器などからの外部割り込み信号を受け付けて、その割り込み信号に対応したユーザ割り込みルーチン２２を起動するモジュールである。タスクスケジュール部２４は、ユーザ割り込みルーチン２２やユーザタスク２３からのサービスルーチンコールを受けて、タスクの実行優先順位を考慮してタスクの実行スケジューリングを行い、実行可能な優先順位の一番高いタスクを実行するモジュールである。サービスルーチン群２５は、タスクの生成・削除、セマフォの生成・削除・獲得・開放、イベントフラグの生成・削除・セット・ウェイトなどの各種ルーチンで構成されるプログラムコードである。サービスルーチン群２５は、それぞれユーザタスク２３からコールされて実行される。なお、動作を待ち状態にしないサービスルーチン、例えばタスクの生成やイベントフラグのセットなどは、ユーザ割り込みルーチン２２からもコールできる。しかし、持ち状態になる可能性のあるサービスルーチン、例えばセマフォ獲得などはユーザ割り込みルーチン２２からはコールすることができない。
【００１５】
監視対象アドレス情報受付部２６は、ソフトウェア開発支援装置３０から送信された監視対象アドレス情報を監視対象アドレス情報記憶部２７に記録するとともに、アクセス監視部２８にその監視対象アドレス情報を通知するモジュールである。ここで、監視対象アドレス情報とは、外部割り込み許可・禁止による排他制御が必要な共有メモリの各メモリアドレスやメモリアドレスパターンを示す情報のことをいう。メモリアドレスパターンとは、複数のメモリアドレスを含むアドレスグループであり、例えば、メモリアドレスが１６進数で表現される場合に上位２桁が同一のメモリアドレス（１０＊＊（＊：任意））を一つのグループとすると、上位２桁が同一のメモリアドレス（１０００〜１０ｆｆ）がそれぞれ監視対象のメモリアドレスとなる。
【００１６】
アクセス監視部２８は、一般的にはＣＰＵに搭載されたアクセス監視コントローラ（例えば、ユーザブレークコントローラ）などで実現されるものである。そして、アクセス監視部２８は、通知された監視対象アドレス情報に示されたメモリアドレスへのアクセスを監視して、そのメモリアドレスへのアクセスが発生したならばその事象をＣＰＵ内部割り込みを利用して不正アクセス検出部２９に通知する。
【００１７】
不正アクセス検出部２９は、アクセス監視部２８からのアクセス通知を受けて、そのアクセスが発生する直前のＣＰＵの割り込み制御レジスタに示される外部割り込みの許可・禁止の状態を示す領域の値に基づいて、監視対象のメモリアドレスへのアクセス発生時に外部割り込みが許可状態か禁止状態かを判別するモジュールである。そして、判別の結果、外部割り込みが許可状態の場合、外部割り込みを許可状態のまま共有メモリへのアクセスを行ったものと判断して、そのアクセスを不正アクセスと判定する。不正アクセス検出部２９は、不正アクセスと判定した場合、そのアクセスが発生する直前のＣＰＵプログラムカウンタ、つまり、その監視対象のメモリアドレスにアクセスしたプログラムの実行アドレスなど不正アクセスを行ったタスクを特定するのに必要な情報を収集して、ソフトウェア開発支援装置３０に送信する。
【００１８】
続いて、ソフトウェア開発支援装置３０について図３に示す機能ブロック図を用いて説明する。
【００１９】
図３において監視対象アドレス情報入力部３１は、コマンド入力による対話形式により、不正なメモリアクセスを監視する対象となる共有メモリのメモリアドレスやメモリアドレスパターンを示す管理対象アドレス情報の入力を受け付け、それらのメモリアドレスへのアクセス監視を監視対象アドレス情報受付部２６に通知するユーザインタフェースである。図４に、監視対象アドレス情報入力部３１において入力される管理アドレス情報の入力例を示す。
【００２０】
不正アクセス検出表示部３２は、不正アクセス検出部２９から送信された不正アクセスを発生させたプログラムのアドレス、タスクＩＤおよび、アクセスしたメモリアドレスなど不正アクセスを行ったタスクを特定するのに必要な情報をモニタ等の画面に表示するモジュールである。なお、この監視対象アドレス情報入力部３１および不正アクセス検出表示部３２は、特別なソフトウェアではなく一般的なターミナルソフトを利用することができる。
【００２１】
本実施形態によれば、監視対象アドレス情報受付部２６が受信した監視対象の共有メモリのメモリアドレスに対するアクセスをアクセス監視部２８が監視する。そして、その監視対象メモリアドレスへのアクセスが発生した場合、不正アクセス検出部２９が割り込み制御レジスタの特定の領域に示される値に基づいて、監視対象のメモリアドレスへの外部割り込みが許可状態か禁止状態かを判別する。その結果、外部割り込みが許可状態の場合、不正アクセス検出部２９は、外部割り込みを許可状態のまま共有メモリへのアクセスを行ったものと判断して、そのアクセスを不正アクセスと判定する。
【００２２】
図５Ａ、５Ｂ、５Ｃは、それぞれ本実施形態における共有メモリアクセスのプログラムの例を示す図である。
【００２３】
図５Ａは、ユーザ割り込みルーチンを示すプログラムである（以下、user_intとする）。
【００２４】
また、図５Ｂは、正常に排他制御を行って共有メモリへのアクセスを実行するプログラムである（以下、user_1taskとする）。図５Ｂにおいて、loc_cpu関数は、リアルタイムＯＳのサービスルーチンの一つであり、ＣＰＵに内蔵された割り込み制御レジスタを操作して外部割り込みを禁止状態にするサービスルーチンである。また、unl_cpu関数は、同じくリアルタイムＯＳのサービスルーチンの一つであり、外部割り込みを許可状態にするサービスルーチンである。したがって、user_1taskを実行すると、loc_cpu関数により共有メモリへの外部割り込みが禁止状態にされた後に、共有メモリへアクセスしてその共有メモリからデータが取り出され、データ取り出しが終了した時点でunl_cpu関数により共有メモリへの外部割り込みが許可状態に変更される。よって、user_1taskを実行しても、共有メモリの排他制御が正常に行われるため、共有メモリへの同時アクセスによってアプリケーションの誤動作が発生することはない。
【００２５】
一方、図５Ｃは、排他制御を行わずに共有メモリへのアクセスを実行するプログラムであり、本実施形態ではいわゆる不正アクセスに該当するプログラムである（以下、user_2taskとする）。つまり、user_2taskを実行した場合、共有メモリへのアクセスを行う前に、共有メモリへの外部割り込みが禁止状態にされないため、user_2taskにより共有メモリへのアクセスが行われている間に、例えばuser_1taskが実行されることがある。すると、一つの共有メモリに対して２以上のタスクからアクセスが同時に実行され、共有メモリに正常にアクセスできず、データを正常に取り出せない場合がある。そこで、本実施形態では、図５Ｃに示すようなプログラムが実行された場合を不正アクセスとして検出して通知する。
【００２６】
ここで、図６に示すフローチャートをもとに不正アクセス検出部２９での不正アクセスの判定フローについてさらに説明する。
【００２７】
まず、不正アクセス検出部２９は、アクセス監視部２８からのアクセス通知を受けて、処理中断点の情報として、アクセス発生直前の割り込み制御レジスタやＣＰＵ内蔵汎用レジスタの値、アクセス発生直前のプログラムカウンタの値などアクセス発生直前まで稼働していたタスクもしくは割り込み処理ルーチンの実行状況を示す情報をそれらのスタック領域に保存する（Ｓ１０１）。続いて、監視対象アドレス情報記憶部２７に示した監視対象アドレス情報を参照して、アクセスした共有メモリのメモリアドレスが監視対象アドレス情報に示されているか否か（メモリアドレスパターンが監視対象アドレス情報に示されている場合は、そのアドレスがそのメモリアドレスパターンの示す条件と一致するか否か）を判定することで、外部割り込み許可・禁止による排他制御を必要とするアドレスであるか否かを判定する（Ｓ１０２）。そして、Ｓ１０２での判定の結果、外部割り込み許可・禁止による排他制御を必要とするメモリアドレスであった場合、スタック領域に保存したアクセス発生直前の割り込み制御レジスタの外部割り込みの許可・禁止の状態を示す領域の値を参照して、その値が外部割り込み許可状態であるか否かを判定する（Ｓ１０３）。
【００２８】
Ｓ１０３での判定の結果、外部割り込み許可状態である場合は、不正なアクセスであると判定して、スタック領域に保存したプログラムカウンタの値、アクセスメモリ番地、タスクＩＤなどの不正アクセスを行ったタスクを特定するための情報を不正アクセス検出表示部３２に送信し（Ｓ１０４）、加えて不正アクセスを起こしたユーザタスクを停止状態にする（Ｓ１０５）。
【００２９】
そして、タスクを特定するための情報を受信した不正アクセス検出表示部３２は、図７に示すように、不正アクセスを行ったタスクを特定する情報として、プログラムカウンタの値やアクセスメモリ番地、タスクＩＤなどを文字列としてモニタに表示する。ユーザはモニタに表示された文字列を見ることで、ユーザアプリケーションの不正アクセス動作の要因特定を即座にすることができる。
【００３０】
一方、Ｓ１０３での判定の結果、外部割り込み禁止状態である場合は、共有メモリに対する正常なアクセスであると判定して、割り込み制御レジスタが示す値やＣＰＵ内蔵汎用レジスタが示す値、プログラムカウンタが示す値などを、Ｓ１０１においてスタック領域に保存しておいた値に戻し、メモリアクセスにより中断していた処理を処理中断点から再開させる（Ｓ１０６）。
【００３１】
以上、本実施形態では、不正アクセス検出部２９が、割り込み制御レジスタの外部割り込みの許可・禁止の状態を示す領域の値を参照し、その値が外部割り込み許可状態であるか否かを判定することで、共有メモリへのアクセスが不正アクセスか否かを判定することができ、リアルタイムＯＳ上で稼働する割り込み処理とタスクとの間やタスクと他のタスクとの間で共有して使用する共有メモリへの不正アクセスを容易に検出することができる。
【００３２】
また、特許文献１に開示されたような不正アクセス検出方法では、リアルタイムＯＳは、ＯＳの内部イベントを逐次発生させるととともに、ソフトウェア開発支援装置は逐次そのイベントを読み取る必要があり、リアルタイムＯＳの処理性能が低下する恐れがあった。一方、本実施形態によれば、割り込み制御レジスタに示される値を参照するだけで、不正アクセスを検出することができるため、リアルタイムＯＳの処理性能の低下を低減することができる。
【００３３】
さらに、本実施形態のソフトウェア開発支援装置は、特別なソフトウェアではなく一般的なターミナルソフトを利用することができるため、一般的なパソコンで実現可能であり、ソフトウェア開発支援装置の構築費用を抑えることができる。
【図面の簡単な説明】
【００３４】
【図１】本実施形態におけるソフトウェア開発支援システムの全体構成を示す図である。
【図２】ターゲット機器１０に搭載されるリアルタイムＯＳ２０の機能ブロックを示す図である。
【図３】ソフトウェア開発支援装置の機能ブロックを示す図である。
【図４】本実施形態の監視対象アドレス情報入力部３１において入力される監視対象アドレス情報の入力例を示す図である。
【図５Ａ】本実施形態のリアルタイムＯＳ上で共有メモリへのアクセス処理を行うプログラムの一例である。
【図５Ｂ】本実施形態のリアルタイムＯＳ上で共有メモリへのアクセス処理を行うプログラムの一例である。
【図５Ｃ】本実施形態のリアルタイムＯＳ上で共有メモリへのアクセス処理を行うプログラムの一例である。
【図６】本実施形態における不正アクセス検出部２９での不正アクセスの判定フローを示すフローチャート図である。
【図７】本実施形態において不正アクセスを検出した際にモニタに表示される不正アクセスを行ったタスクを特定するための情報の一例である。
【符号の説明】
【００３５】
１０  ターゲット機器、２０  リアルタイムＯＳ、２１  割り込み制御部、２２  ユーザ割り込みルーチン、２３  ユーザタスク、２４  タスクスケジュール部、２５  サービスルーチン群、２６  監視対象アドレス情報受付部、２７  監視対象アドレス情報記憶部、２８  アクセス監視部、２９  不正アクセス検出部、３０  ソフトウェア開発支援装置、３１  監視対象アドレス情報入力部、３２  不正アクセス検出表示部。
【図１】
0004611659.tif 000002
【図２】
0004611659.tif 000003
【図３】
0004611659.tif 000004
【図４】
0004611659.tif 000005
【図５Ａ】
0004611659.tif 000006
【図５Ｂ】
0004611659.tif 000007
【図５Ｃ】
0004611659.tif 000008
【図６】
0004611659.tif 000009
【図７】
0004611659.tif 000010