(57)【要約】【課題】プロセッサデバイスに内蔵されるバスモニタを使用してプログラム間の不正アクセスを検出する。【解決手段】タスクごと、割り込み処理プログラムごとにアセクス禁止領域のアドレス範囲などの不正アクセス検出情報を記憶し（２２）、タスクの切り換えの際または割り込み発生ごとに、新たに起動されるプログラムの不正アクセス検出情報をバスモニタ１２の制御レジスタに設定する。【選択図】図１
2007334541.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリの間のバスに接続されて該プロセッサから該メモリへのアクセスを監視するバスモニタを使用する不正アクセス検出装置であって、
アクセスが禁止されるメモリアドレスの情報を含む不正アクセス検出情報を複数のプログラムごとに格納する不正アクセス検出情報格納部と、
プログラムが切り換わるごとに新たに起動されるプログラムの不正アクセス検出情報を該不正アクセス検出情報格納部から取り出して前記バスモニタに与える不正アクセス検出情報切り換え部とを具備する不正アクセス検出装置。
【請求項２】
前記不正アクセス検出情報格納部および不正アクセス検出情報切り換え部はオペレーティングシステム内に具備される請求項１記載の不正アクセス検出装置。
【請求項３】
前記検出情報格納部および不正アクセス検出情報切り換え部は、それぞれのプログラム内に具備される請求項１記載の不正アクセス検出装置。
【請求項４】
前記プログラムは、サブルーチンまたは関数を含む請求項３記載の不正アクセス検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサデバイスに内蔵されるバスモニタを利用してメモリへの不正アクセスを検出する不正アクセス検出装置に関する。
【背景技術】
【０００２】
近年、装置の複雑化に伴いＦＰＧＡ（Field Programable Gate Array）やＬＳＩで処理していたものが、柔軟に仕様変更に対応できるＤＳＰ（Digital Signal Processor）へと置き換わっており、ファームウェアが担当する範囲が拡がっている。それに伴い、ファームウェアの障害調査の時間短縮が求められている。ファームウェアにおいて発生し得る障害として、不正メモリアクセスによるデータ破壊、プログラム破壊がある。最近のプロセッサデバイスにはバスモニタのような不正アクセスを検出するための手段が設けられている。これによりファームウェアからのバスアクセスを監視し、不正なアドレスに対して割込み等の手段によりエラーを検出することが可能となっている。
【０００３】
このバスモニタを使用すれば、ファームウェアにおいてプログラム領域として定義されているアドレス範囲への不正な書き込みや未定義領域への不正な読み出し／書き込みといった不正アクセスを検出することができる。しかしながら、リアルタイムＯＳ（オペレーティングシステム）などのＯＳが搭載され、複数のタスクおよび割り込み処理プログラムのそれぞれに異なる使用アドレス範囲が定義される場合に、いずれかのプログラムが他のプログラムに対して定義されている領域へ不正にアクセスするといった、プログラム間の不正なアクセスをこのバスモニタでは検出することができない。
【０００４】
なお、下記特許文献１，２はいずれもタスク間で共有する共用メモリまたは共有資源への不正アクセスを検出する技術に関するものである。
【０００５】
【特許文献１】特開２００１−１５４８７２号公報
【特許文献２】特開２００５−３０９６１３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
したがって本発明の目的は、プロセッサデバイスに内蔵されるバスモニタを利用して、タスク、割り込み処理プログラム、関数（サブルーチン）といったプログラムの間での不正アクセスを検出することのできる不正アクセス検出装置を提供することにある。
【課題を解決するための手段】
【０００７】
本発明によれば、プロセッサとメモリの間のバスに接続されて該プロセッサから該メモリへのアクセスを監視するバスモニタを使用する不正アクセス検出装置であって、アクセスが禁止されるメモリアドレスの情報を含む不正アクセス検出情報を複数のプログラムごとに格納する不正アクセス検出情報格納部と、プログラムが切り換わるごとに新たに起動されるプログラムの不正アクセス検出情報を該不正アクセス検出情報格納部から取り出して前記バスモニタに与える不正アクセス検出情報切り換え部とを具備する不正アクセス検出装置が提供される。
【発明の効果】
【０００８】
プログラムが切り換わるごとに新たに起動されるプログラムの不正アクセス検出情報をバスモニタに与えることにより、プログラム間の不正アクセスを検出することが可能になる。
【発明を実施するための最良の形態】
【０００９】
図１は本発明の不正アクセス検出装置を有するプロセッサデバイスの構成の一例を示す。
【００１０】
プロセッサデバイス１０にはバスモニタ１２が内蔵される。バスモニタ１２は、図２に示すようにＣＰＵ２４とメモリ２６の間のバス２８に接続され、ＣＰＵ２４からメモリ２６へのアクセスを監視する。なお、煩雑化を避けるため、図１にはこれらについては図示が省略されている。図１において、バスモニタ１２が不正アクセスを検出すると、割り込みをかけてファームウェア１４へその処理を依頼する。不正アクセスの発生が割り込みにより通知されると、割り込み処理部１３では例えば、エラー解析のためにその時点でのスタックやレジスタの情報をロギングする。
【００１１】
メモリ２６（図２）上に展開されるファームウェア１４（図１）は、ユーザアプリケーション１６とリアルタイムＯＳ（オペレーティングシステム）１８とから成っている。リアルタイムＯＳ１８は割り込みやタスクのスケジューリングを行うスケジューリング部２０の他に、ユーザアプリケーション１６から与えられる不正アクセス検出情報２２を記憶する不正アクセス検出情報記憶部２２を具備している。
【００１２】
不正アクセス検出情報記憶部２２には、後に詳述するように、バスモニタ１２が不正アクセスを検出するために必要な情報がタスクごと割り込み処理プログラムごとに記憶される。スケジューリング部２０では割り込み処理プログラムやタスクを起動する前にそれに対応する不正アクセス検出情報を記憶部２２から取り出してバスモニタ１２に設定する。
【００１３】
ユーザアプリケーション１６は初期化時にタスクごと、割り込み処理ルーチンごとの不正アクセス検出情報を不正アクセス検出情報記憶部２２に設定する。なお、不正アクセス検出情報記憶部２２をＯＳ内に設けず、ユーザアプリケーション自身がタスクの先頭や割り込み処理ルーチンの先頭においてバスモニタ１２へ直接不正アクセス検出情報を設定するようにしても良い。同様な手法により、後述するように関数またはサブルーチンごとに異なる不正アクセス検出情報を設定することも可能である。
【００１４】
図３は不正アクセス検出情報記憶部２２に記憶される不正アクセス検出情報の一例を示し、図４はこのファームウェアにおける各割り込み処理プログラムと各タスクのメモリマップを示す。
【００１５】
図３の不正アクセス検出情報の第１欄３０は割り込み処理プログラムであるか（＝１）、タスクであるか（＝２）の区別を示し、第２欄３２は割り込みに付された番号またはタスク番号を示す。第３欄はアクセスが禁止されるアドレス範囲を示し、第４欄は禁止されるアクセスのタイプ（Ｒｅａｄアクセスは許容しＷｒｉｔｅアクセスのみ禁止する場合：Ｗ；双方禁止する場合：Ｒ／Ｗ）を示す。例えば割り込み＃１の処理プログラムに対しては、図４に示すように０ｘ００００００００〜０ｘ００００１０００のアドレス範囲が割り当てられているので、それ以降の０ｘ００００１０００〜０ｘ００１０００００が読み出しおよび書込についてアクセス禁止領域に設定される。図示した例では、第３欄と第４欄の情報は各項目ごとに４組まで設定可能としている。
【００１６】
図５はユーザアプリケーション１６における初期化処理フローである。ユーザアプリケーションでは、不正アクセス検出情報２２のうち使用する割り込みの数だけの割り込みに関する不正アクセス検出情報を設定する（ステップ１０００）。次に、全タスクに関する情報を設定するために、リアルタイムＯＳ１８が管理しているタスクＩＤをシステムコールを使って取得した後（ステップ１００２）、取得したタスクＩＤとそのタスクに関する不正アクセス検出情報を設定する（ステップ１００４）。
【００１７】
図６は、ユーザアプリケーション１６においてタスク状態遷移が発生するシステムコール（ｅｘ．セマフォ開放／取得、メッセージ送信／受信など）が実行される時のリアルタイムＯＳ１８のスケジューリング部２０における処理フローである。システムコールにより該当するタスクの状態を遷移させ（ステップ１１００）、レディ状態のタスクのキューを格納するタスクレディキューの先頭から次に起動するタスクを判断する（ステップ１１０２）。そのタスクのＩＤを使って不正アクセス検出情報を検索し、該当タスクに関するアクセス禁止領域と禁止アクセスタイプを取得する（ステップ１１０４）。取得されたアクセス禁止領域と禁止アクセスタイプがバスモニタ１２の制御レジスタに設定される（ステップ１１０６）。
【００１８】
図７はリアルタイムＯＳ１８の割り込み処理部１３における割り込み処理のフローである。割り込み発生時、割り込み番号を判断し（ステップ１２００）、その割り込み番号を使って不正アクセス検出情報を検索し、該当割り込み処理プログラムに関するアクセス禁止領域と禁止アクセスタイプを取得する（ステップ１２０２）。取得されたアクセス禁止領域と禁止アクセスタイプをバスモニタ１２の制御レジスタに設定した後（ステップ１２０４）、割り込み処理を実施する（ステップ１２０６）。割り込み処理終了後、タスクレディキューの先頭から次に起動するタスクを判断する（ステップ１２０８）。そのタスクのＩＤを使って不正アクセス検出情報を検索し、該当タスクに関するアクセス禁止領域と禁止アクセスタイプを取得する（ステップ１２１０）。取得されたアクセス禁止領域と禁止アクセスタイプをバスモニタ１２の制御レジスタに設定し（ステップ１２１２）、タスク動作へと移行する。
【００１９】
図８は関数（サブルーチン）ごとに異なる不正アクセス検出情報を設定する場合の処理フローである。まず、バスモニタ１２に現在設定されている不正アクセス検出情報をバスモニタ１２の制御レジスタから読み出してメモリへ保存し（ステップ１３００）、当該関数の不正アクセス検出情報をバスモニタ１２へ設定する（ステップ１３０２）。関数の処理が終ったら、保存しておいた不正アクセス検出情報を戻す（ステップ１３０４）。
【図面の簡単な説明】
【００２０】
【図１】本発明の不正アクセス検出装置を有するプロセッサデバイスの構成の一例を示すブロック図である。
【図２】バスモニタ１２の接続を説明するブロック図である。
【図３】不正アクセス検出情報の一例を示す図である。
【図４】メモリマップの一例を示す図である。
【図５】ユーザアプリケーションにおける初期化処理を示すフローチャートである。
【図６】タスク状態遷移が発生するシステムコールが実行される時の処理のフローチャートである。
【図７】割り込み処理のフローチャートである。
【図８】関数ごとに不正アクセス検出情報を設定する場合のフローチャートである。
【図１】
2007334541.tif 000003
【図２】
2007334541.tif 000004
【図３】
2007334541.tif 000005
【図４】
2007334541.tif 000006
【図５】
2007334541.tif 000007
【図６】
2007334541.tif 000008
【図７】
2007334541.tif 000009
【図８】
2007334541.tif 000010