説明

プログラム検査システムおよび方法

【課題】アクセス競合による処理効率の低下を最小限としつつ、効率的にプログラムの検査を行う。
【解決手段】プログラム検査システムは、プログラムを格納する記憶手段と、前記プログラムを実行するプログラム実行手段と、前記記憶手段内のプログラムを検査する検査手段と、を有し、前記プログラムの検査をマルチコアシステムにより前記プログラムの実行と並列に行うプログラム検査システムであって、前記プログラム実行手段は、前記記憶手段にアクセスする場合に、前記検査手段に割り込みを送信する割り込み送信手段を有し、前記検査手段は、前記プログラムの検査を複数の部分領域ごとに行うとともに、前記割り込み送信手段からの割り込みを受信した場合は検査を中断するものであり、検査再開時には検査が未完了の部分領域について検査を行う。各部分領域の検査順序はランダムとすることが好ましい。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、マルチコアシステムにおけるプログラム検査システムおよび方法に関する。
【背景技術】
【0002】
実行するプログラムの安全性を確保するために、装置の起動時だけではなく稼働中においてもプログラムの改ざん検出を行う技術が提案されている(特許文献1,2)。プログラムの検査は、正規のハッシュ値と実際に格納されているデータから求められたハッシュ値を比較することで行われる。
【0003】
このような技術をシングルコアシングルプロセッサのシステムに適用すると、検査処理の実行によって、他のプログラムの応答時間に悪影響を与えてしまう。そのため、厳しいリアルタイム性が要求されるシステムに対しては、上記の技術を適用することは難しい。
【0004】
ところで、近年では、複数のプロセッサコアを有するプロセッサを用いたシステムや複数のプロセッサを用いたシステム(これらを総称して、マルチコアシステムという)が、利用されるようになってきている。マルチコアシステムでは、それぞれのコアで並列にプログラムを実行可能であるため、プログラムの実行とそのプログラムの検査処理とを並行して行える。したがって、上記のようにランタイムにプログラムの検査を行う技術をマルチコアシステムに適用することが考えられる。
【特許文献1】特開2007−66021号公報
【特許文献2】特開2004−171564号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかしながら、マルチコアシステムでは各コアが並行して演算処理を行うことができるものの、記憶手段を共有している場合には、プログラムの実行処理とその検査処理とでアクセス競合が発生する。
【0006】
アクセス競合が発生した場合に検査処理が終了するまでプログラムの実行処理を待つようにしてしまうと、プログラムのスループットに悪影響を与えてしまう。また、アクセス競合が発生した場合に検査処理を中断(abort)するようにすると、プログラムからのアクセスが頻繁に生じる場合には検査処理の処理効率が低下し、検査完了までに時間がかかってしまう。
【0007】
本発明は上記実情に鑑みてなされたものであって、その目的とするところは、アクセス競合による処理効率の低下を最小限としつつ、効率的にプログラムの検査を行うことのできる技術を提供することにある。
【課題を解決するための手段】
【0008】
上記目的を達成するために本発明では、以下の手段または処理によって記憶手段に格納されたプログラムの検査を行う。
【0009】
本発明に係るプログラム検査システムは、プログラムを格納する記憶手段と、このプログラムを実行するプログラム実行手段と、記憶手段内のプログラムを検査する検査手段とを有する。本プログラム検査システムは、マルチコアシステム上で動作するものであり、プログラムの検査処理を、プログラムの実行と並列に行うことができるものである。
【0010】
なお、本明細書において、マルチコアシステムとは、複数のプロセッサコアを有するコンピュータシステムのことを意味する。したがって、1つのプロセッサパッケージの中に複数のプロセッサコアを含むシステムや、それぞれが1つのプロセッサコアを有する複数のプロセッサを含むシステムや、これらの組み合わせが、本明細書におけるマルチコアシステムに該当する。
【0011】
本発明におけるプログラム実行手段は、記憶手段にアクセスする場合に、検査手段に割り込みを送信する。なお、この割り込みの送信は、検査手段が記憶手段にアクセスしているかを調べて、検査手段が記憶手段にアクセスしている場合のみ行っても良いし、そのような調査を行わず常に行っても良い。
【0012】
本発明における検査手段は、記憶手段に格納されているプログラムの検査を、複数の部分領域ごとに行う。また、検査手段は、割り込み送信手段からの割り込みを受信した場合には、即座に検査を中断する。そして、検査を再開する場合には、検査済みの部分領域はスキップして、検査が完了していない部分領域について検査を行う。
【0013】
このようにすれば、プログラム実行手段が記憶手段にアクセスする場合には、割り込みによってプログラム実行手段が優先してアクセスできるようになるため、検査処理の実行に伴うプログラムのスループット低下を最小限とすることができる。また、検査手段は、割り込みによって検査を中断した場合であっても、すでに検査済みの部分領域については、再度検査処理を実行する必要がないため、割り込みによる中断までに行った検査処理の少なくとも一部を無駄にしないことができる。つまり、検査処理も効率的に行うことができる。
【0014】
本発明における検査手段は、プログラムの各部分領域について、検査対象プログラムが正常な場合の状態情報をあらかじめ記憶しておく。また、記憶手段内のプログラムから状態情報を算出する。そして、これらを比較することでプログラムの各部分領域が正常であるか検査することが好適である。検査手段は、いずれかの部分領域で状態情報が相違する場合に、このプログラムが異常である(改ざんされている)と判断する。
【0015】
上記の状態情報としては、例えば、SHA−1などのハッシュ値を用いることが好適である。また、状態情報として、MD5やCRCなどのチェックサムを用いても良い。つまり、状態情報としては、プログラムデータが異なるものであれば異なる値をとることが期待されるような値であれば、任意のものを採用可能である。
【0016】
本発明において、部分領域は、プログラム実行手段が記憶手段にアクセスする平均的な時間間隔の間に、検査手段が検査を行える領域より小さい領域であることが好適である。言い換えると、プログラム実行手段による割り込みが発生した場合に、少なくとも1つの部分領域について検査が完了していることを期待できるように、部分領域を設定することが好ましい。部分領域を細かく設定するほど中断による無駄が少なくなるが、部分領域を細かく設定しすぎると、記憶しておく正規のハッシュ値の容量が多くなってしまうので、記憶容量に制限がある場合にはこの記憶容量を考慮して部分領域の大きさを設定することが好ましい。
【0017】
また、本発明において、プログラムの複数の部分領域の検査順序を、ランダムに決定することが好ましい。また、検査するプログラムが複数存在する場合には、プログラムの検索順序をランダムに設定することも好ましい。また、複数のプログラムにまたがって、部分領域の検査順序をランダムに設定することも好ましい。
【0018】
これは、改ざんされたプログラムが検査時期を推測して、検査を行っているときだけ記
憶手段内のプログラムを正常なものに書き換える可能性があるからである。検査順序をランダムにすることで、そのような攻撃も回避することができ、より安全性を高めることができる。
【0019】
また、本発明において、プログラム実行手段を第1のドメインで実行し、検査手段を第1のドメインとは異なる第2のドメインで実行することが好ましい。
【0020】
本明細書において、ドメインとは、プログラムが実行される仮想的な領域・環境を表し、各ドメインは互いに独立しており原則として他のドメインにアクセスすることができない。したがって、各ドメイン内でプログラムに異常が発生した場合であっても、他のドメインに影響を与えることがない。
【0021】
そして、検査手段が実行される第2のドメインは、信頼されたプログラムのみが実行可能であり、第1のドメインからアクセスされないドメインであることが好ましい。逆に、検査手段がプログラムを検査できるように、第2のドメインからは第1のドメインに対してアクセス可能とする。
【0022】
このようにすることで、検査手段の信頼性は保証されるため、適切な検査を行え、システム全体の信頼性が向上する。
【0023】
なお、本発明は、上記手段の少なくとも一部を有するプログラム検査システムとして捉えることができる。また、本発明は、上記処理の少なくとも一部を含むプログラム検査方法、または、かかる方法を実現するためのプログラムとして捉えることもできる。上記手段および処理の各々は可能な限り互いに組み合わせて本発明を構成することができる。
【発明の効果】
【0024】
本発明によれば、アクセス競合による処理効率の低下を最小限としつつ、効率的にプログラムの検査を行うことが可能となる。
【発明を実施するための最良の形態】
【0025】
以下に図面を参照して、この発明の好適な実施の形態を例示的に詳しく説明する。
【0026】
本実施形態は、複数のマルチプロセッサコアのCPUを有し、複数のドメインを有する処理システムである。各ドメインは、基本的に互いに独立した実行環境であり、他のドメインにアクセスすることができない。ただし、ドメイン間のアクセスを制御する機構を設けることで、他のドメインに対するアクセスが許可されたドメインを設けることができる。例えば、ARM社のTrustZone(登録商標)技術は安全ドメインと非安全ドメインを提供できるため、マルチコアプロセッサ上でTrustZoneを用いることで、複数のドメインを有する本処理システムを好適に実現可能である。ここで、安全ドメインは信頼されたプログラムが実行可能であり、かつ、外部から改ざんされることのない安全なドメインである。一方、非安全ドメインは信頼性が保証されていないプログラムでも実行可能である。そして、非安全ドメインから安全ドメインに対するアクセスは禁止されるのに対して、安全ドメインから非安全ドメインへのアクセスは許可される。
【0027】
本処理システムで作動する種々のプログラムの概略図を図1に示す。このシステムでは、安全ドメイン120と非安全ドメイン130の2つのドメインが提供される。また、特権モードで動作し、安全ドメイン120と非安全ドメイン130との間の全ての変更を両方向に管理するモニタプログラム110が設けられる。
【0028】
安全ドメイン120内では、安全オペレーティングシステム(OS)122が実行され
、その上で複数の安全アプリケーションプログラム(AP)124,126が実行される。安全ドメイン120は、信頼されたプログラムのみが実行可能な環境であり、安全OS122や、安全AP124,126は、その信頼性が保証されたプログラムである。
【0029】
非安全ドメイン130内では、非安全OS132が実行され、その上で複数の非安全AP134,136が実行される。これらの非安全AP134,136は、非安全OS132と協働して実行される。
【0030】
これらの実行環境は互いに独立しているため、あるドメインで異常が発生しても他のドメインに対して悪影響を及ぼすことがない。非安全ドメイン130側から安全ドメイン120側へのアクセスは、モニタプログラム110によって禁止されるので、非安全AP134,136が改ざんされたりしても、安全ドメイン120を改ざんしたりすることはできない。一方、安全ドメイン120側から非安全ドメイン130側へのアクセスは許可されるため、安全AP124,126は非安全ドメイン130に割り当てられたメモリにアクセスし、正常に動作しているかを検査したり、リセットをかけたりすることができる。
【0031】
また、本処理システムはマルチコアプロセッサを採用しているため、安全ドメイン120内の安全AP124,126や、非安全ドメイン130内の非安全AP134,136は並列に実行可能である。
【0032】
〈機能構成〉
次に、本実施形態に係るプログラム修復システムの機能構成を、図2を参照して説明する。本システムでは、主ドメイン10,検査ドメイン20の2つのドメインを定義する。
【0033】
主ドメイン10は、ユーザにサービス機能を提供するアプリケーションプログラムが実行されるドメインであり、上述の非安全ドメインに相当する。アプリケーションプログラムの実行コードはストレージ装置30に格納されており、主ドメイン10は、これをRAM上にロードして実行する。ストレージ装置30は、ハードディスク装置やROMなどの不揮発性メモリである補助記憶装置である。また、ストレージ装置30としては、RAMにロードせずに直接実行可能なNOR型フラッシュメモリーを採用しても良い。
【0034】
また、検査ドメイン20は、主ドメイン10のサービス機能の状態が正常であるか検査し、異常が発生した場合には主ドメイン10を復元するプログラムが実行されるドメインであり、上述の安全ドメインに相当する。
【0035】
検査ドメイン20は、改ざんされないことが必要である。このドメインを非安全ドメインから独立した安全ドメインとすることで、悪意のある非安全ドメイン内のプログラムからの改ざんを防ぐことができる。さらに、ROMに格納されたプログラムイメージ自体の改ざんを防ぐために、セキュアブートを利用して攻撃や事故などを防ぐことが好ましい。セキュアブートは、電源投入直後に起動されるブートROMやBIOSを検証し、ブートプロセスにおける信用の連鎖を確立しながら、プラットフォームが改ざんされていないことを保証する技術である。
【0036】
主ドメイン10は、ユーザにサービス機能を提供するアプリケーションプログラム以外に、割り込み送信部11を有する。
【0037】
検査ドメイン20は、割り込み受信部21、検査処理制御部22、乱数発生部23、ソフトウェア検査部24、検査対象正常値記憶部25、および主ドメイン復元部26を備える。
【0038】
なお、上記の各機能部は、補助記憶装置に格納されたプログラムがCPUによって実行されることで、その機能が実現されるが、一部についてはハードウェアとして実装しても構わない。
【0039】
〈検査処理〉
まず、検査ドメイン20内の各機能部について、検査処理の概要とともに説明する。検査ドメイン20は、ストレージ装置30に格納された検査対象ソフトウェア31を所定の時間間隔で検査する。なお、この検査対象ソフトウェア31が、主ドメイン10で実行されるプログラムである。
【0040】
検査処理制御部22は、検査のタイミングを決定し、そのタイミングでソフトウェア検査部24による検査処理を開始する。検査処理制御部22による検査タイミングの決定は、乱数発生部23を参照して乱数により決定することで、悪意のあるソフトウェアに検査時期を予測されることを回避することが好ましい。
【0041】
ソフトウェア検査部24は、ストレージ装置30に格納された検査対象ソフトウェア31のハッシュ値を算出し、検査対象正常値記憶部25に格納されている正常な場合のハッシュ値(正規ハッシュ値という)と比較することで、検査対象ソフトウェア31が改ざんされていないかを検査する。本実施形態では、ソフトウェア検査部24におけるソフトウェア検査処理としてSHA−1アルゴリズムによるハッシュ値の比較を用いるが、その他のアルゴリズムによるハッシュ値を利用しても良い。
【0042】
ソフトウェア検査部24は、検査対象ソフトウェア31が改ざんされている場合には、主ドメイン復元部26を起動して、主ドメイン10の復元を行う。主ドメイン復元部26は、主ドメイン10をリセットし、検査ドメイン20内に格納している正常なプログラムをストレージ装置30内に格納し直すことで、主ドメイン10の復元を行う。検査ドメイン20は、この復元処理中に、主ドメインで行う処理の代替処理を行う緊急処理実行部を有することも好適である。このような、緊急処理実行部を備えることで、復元処理中も継続してサービスを提供し続けることができる。なお、緊急処理実行部は、代替処理として最低限必要な機能のみ提供すればよい。
【0043】
ソフトウェア検査部24は、検査対象ソフトウェア31全体を対象としてハッシュ値を求めるのではなく、図3に示すように、検査対象ソフトウェアを複数の部分領域に分割して、各部分領域ごとにハッシュ値を求める。本実施形態では、部分領域は所定の長さの固定長とする。部分領域を固定長とすることで、各部分領域のメモリ上のアドレス領域を容易に算出することが可能となる。このようなハッシュ値算出方法に合わせて、検査対象正常値記憶部25には各部分領域ごとの正規ハッシュ値が格納される。
【0044】
ソフトウェア検査部24は、部分領域ごとにハッシュ値を算出し、算出結果を正規ハッシュ値と比較する。全ての部分領域について算出したハッシュ値と正規ハッシュ値が一致する場合にはソフトウェアが正常である(改ざんされていない)と判断し、いずれかの部分領域で算出したハッシュ値が正規ハッシュ値と異なる場合にはソフトウェアが異常である(改ざんされている)と判断する。
【0045】
ここで、検査ドメイン20による検査処理と、主ドメイン10によるプログラム実行処理は、マルチコアシステムを利用することで並行して実行することができる。したがって、演算資源の観点からは検査処理を行うことによる主ドメインの処理効率の低下は少ない。ただし、ストレージ装置30に対するアクセスは同時には行えないため、検査処理によって主ドメインのスループットが低下してしまう。
【0046】
そこで図4に示すように、主ドメイン10がストレージ装置30にアクセスするときに、検査ドメイン20がストレージ装置30にアクセスしている場合は、主ドメイン10内の割り込み送信部11が検査ドメイン20に対して割り込み信号を送信する。なお、割り込み送信部11は、検査ドメイン20がストレージ装置30にアクセスしているか調べてからストレージ装置30に対して割り込み信号を送信しても良いが、検査ドメイン20によるアクセスがあるか否かを調べずに割り込み信号を送信しても良い。割り込み信号の送信は負荷の軽い処理なので、主ドメイン10の処理効率の低下を最小限とすることができる。
【0047】
割り込み受信部21が主ドメイン10からの割り込み信号を受信すると、検査ドメイン20のソフトウェア検査部24は即座に検査処理を中断(abort)する。これは、主ドメイン10の処理に、待ち時間を発生させないためである。したがって、主ドメイン10は、ストレージ装置30に対してすぐにアクセスすることができる。
【0048】
ソフトウェア検査部24は、図5に示すように、検査対象ソフトウェア31を細かい部分領域に分けて検査しているため、検査開始から割り込み発生までの間隔が極端に短くなければ、少なくとも一部の部分領域については検査が完了している。図5の例では、2つの部分領域について検査を完了し、3つ目の部分領域を検査中に割り込みが発生した場合を示している。この場合は、次回の検査処理では3つ目の部分領域から検査を再開すれば良く、既に検査が完了している2つの部分領域については再度検査を行う必要がない。つまり、割り込みによって検査処理が中断された場合でも、無駄になる検査処理を少なくすることができる。
【0049】
なお、部分領域の大きさを小さくするほど、中断によって生じる無駄な検査処理の量を減らすことができる。一方、ハッシュ値の値は部分領域の大きさによらず固定長となるので、検査対象正常値記憶部25に格納する正規ハッシュ値の容量が大きくなってしまう問題が生じる。そこで、部分領域の大きさは、ストレージ装置30に対するアクセス競合が発生する頻度に基づいて設定することが好適である。より具体的には、主ドメイン10がストレージ装置30にアクセスする平均時間間隔の半分程度の時間でソフトウェア検査部24が検査可能な大きさを、部分領域の大きさとすればよい。このように部分領域を設定すれば、主ドメイン10がストレージ装置30に平均的にアクセスする限り、ソフトウェア検査部24が少なくとも1つの部分領域を検査することができ、中断によって無駄になる検査処理を少なくすることができる。
【0050】
また、ソフトウェア検査部24は、検査対象ソフトウェア31の各部分領域を先頭から順番に検査する必要はない。逆に、このように先頭から検査をする場合、検査対象ソフトウェア31が改ざんされている場合に、検査タイミングを予測して、検査タイミングの時のみストレージ装置30内のデータを一時的に正常なものに戻すことによって改ざん検出を免れることが可能となってしまう。そこで、ソフトウェア検査部24は、乱数発生部23によって、検査対象ソフトウェア31の各部分領域の検査順序をランダムに決定することが好ましい。
【0051】
〈処理フロー〉
次に、図6,7のフローチャートを参照して、検査処理の流れについて説明する。図6は、検査処理全体の流れを示すフローチャートである。図7は、ソフトウェア検査部24による検査処理の詳細な流れを示すフローチャートである。
【0052】
まず、検査処理を行うタイミングが到来すると、検査処理制御部22が起動して、ソフトウェア検査部24を実行する(S10)。そして、ソフトウェア検査部24が、検査対象ソフトウェア31の検査処理を実行する(S11)。なお、このステップS11の検査
処理の詳細については、後で図7のフローチャートを参照して詳しく説明する。
【0053】
ソフトウェア検査処理の結果、ソフトウェアに異常がないと判断された場合(S12:NO)は、検査処理制御部22が、乱数発生部23の乱数によって次回の検査タイミングを決定する(S13)。そして、検査処理制御部22は、次の検査タイミングまで休止する(S14)。
【0054】
一方、ソフトウェア検査処理の結果、ソフトウェアに異常があると判断された場合(S12:YES)は、主ドメイン復元部26が、主ドメイン10のリセットとソフトウェアの復元処理を行う(S15)。この主ドメイン10の復元処理の間、緊急処理部によって緊急処理をおこなう(S16)。そして、主ドメイン10が復元したら、緊急処理を停止し、主ドメイン10を再開する(S17)。この後、検査処理制御部22は、適当なタイミングで次回の検査処理を行う。
【0055】
次に、ステップS11におけるソフトウェア検査部24による検査処理の詳細を図7のフローチャートを参照して説明する。
【0056】
まず、検査処理が開始されたときに、前回の検査処理が割り込みによって中断されたか否かを判断する(S20)。これは、後述する、各部分領域の検査順序と検査が完了したか否かを格納するテーブルを参照することで行える。前回の検査が中断せずに終了した場合(S20:NO)は、今回の検査処理での各部分領域の検査順序を、乱数発生部23の乱数によって決定する(S21)。この検査順序はメモリ上に格納しておく。一方、前回の検査が中断されていた場合(S20:YES)は、前回の検査順序を利用する。
【0057】
ソフトウェア検査部24は、決定された検査順序にしたがって、次に検査する部分領域を決定する(S22)。これは、検査未完了の部分領域のうち、最も早い検査順序が割り当てられた部分領域を選択することによって行われる。
【0058】
ソフトウェア検査部24は、検査対象の部分領域についてのハッシュ値を算出し(S23)、これを検査対象正常値記憶部25に格納された正規ハッシュ値と比較する(S24)。ここで、これらのハッシュ値が一致しない場合(S25:NO)は、ソフトウェアに異常があるとして、検査処理を終了する(S29)。一方、これらのハッシュ値が一致する場合(S25:YES)は、今回の検査順序の部分領域の検査が完了したことをメモリ上のテーブルに記憶する(S26)。検査すべき部分領域がまだ存在する場合(S27:NO)は、ステップS22に戻って次に検査対象の部分領域について、検査を行う。一方、全ての部分領域を検査済みの場合(S27:YES)は、ソフトウェアに異常なしとして、検査処理を終了する(S28)。
【0059】
主ドメイン10から割り込みが発生した場合には、検査処理を即座に中断するが、メモリ上に、各部分領域の検査順序とどの部分領域について検査が完了したかの情報が格納されている。したがって、次回の検査実行時には、この情報を参照することで、前回の検査が全て終わったのか、あるいは割り込みによって中断したのかを判別することができる。
【0060】
〈本実施形態の作用・効果〉
本実施形態のプログラム検査システムでは、各コアが並列に動作するマルチコアシステムを利用して、サービス機能を動作させる主ドメインと、主ドメインを監視する検査ドメインを並列に実行可能である。したがって、検査ドメインによる検査処理が、主ドメインの処理に対して与える悪影響を抑制することができる。
【0061】
また、検査処理と主ドメインとの間でストレージ装置へのアクセス競合が発生した場合
に、主ドメインの処理に待ち状態を発生させないように、すぐに検査処理を中断する構成としている。このとき、検査対象のソフトウェアを細かい領域ごとに検査しているので、検査処理の中断が発生した場合でも、無駄になる検査処理の量を減らすことができる。
【0062】
また、各部分領域の検査順序をランダムに決定しているので、検査対象ソフトウェアが既に危殆化していても、検査時期を予測することが困難となる。したがって、検査のタイミングだけメモリ上のデータを正常なものに置き換えて、改ざんの検出を免れるという回避手法も防止可能である。さらに、各部分領域の検査順序だけでなく、検査のタイミング自体もランダムに決定しているので検査時期を予測することは困難である。
【0063】
(変形例)
上記の実施形態の説明では、検査対象のプログラムが1つである例を挙げて説明したが、複数のプログラムを検査対象としても良いことは言うまでもない。この際、複数のプログラムをどのような順序で検査するかの決定を、ランダムに決定することが好ましい。検査時期を予測可能にしないためである。
【0064】
また、各部分領域の検査順序の決定を、1つの検査対象プログラムの中だけでランダムとするのではなく、全ての検査対象プログラムにまたがってランダムとしても良い。このようにしても検査時期を予測不可能とすることができる。
【0065】
また、上記の実施形態では、検査対象ソフトウェアの検査間隔を乱数によって決定している(図6のS13)が、検査対象ソフトウェアが正常であると判定された回数が多くなるほど、検査間隔を長く(乱数の平均値を長く)しても良い。一旦正常であると判定された場合は、すぐに改ざんされる可能性は低いため、検査間隔を長くしても問題は生じにくい。一方、検査間隔を長くすることで、検査処理によるストレージ装置へのアクセス頻度を抑えることができるので、ストレージ装置へのアクセス競合の発生を抑えることができる。
【0066】
また、上記の実施形態では、ハッシュ値を用いて検査対象ソフトウェアが改ざんされたかを検査しているが、MD5やCRCなどのチェックサムを利用して改ざん検出を行っても良い。ただし、チェックサムでは、データが異なっていても同じチェックサム値になってしまう可能性や、あるチェックサム値を有するデータを悪意者が作成可能であるという点で、信頼性がそれほど高くない。もっとも、一般にチェックサムの算出処理はハッシュ値算出処理に比べて負荷の少ない処理であるので、所望のセキュリティ強度とシステムの演算能力によっては、チェックサムを採用することも有効である。
【0067】
また、複数のドメインを提供するための仕組みは、図1で説明したようにモニターソフトウェアによってドメインを区切る方法に限られるものではない。例えば、図8に示すように、各コアに固有のRAM領域を割り当て、その上でそれぞれがOSを稼働する。そして、チップとバスとの間に設けたフィルタによって、あるコアからの別のコアに割り当てられたRAM領域へのアクセスを禁止することでドメインの分離が実現できる。さらに、あるコアから他のコアに対してアクセスを許可するようにしておけば、安全ドメインと非安全ドメインとの区別を設けることができる。
【0068】
また、図9に示すように、マルチコアシステム上でホストOSを実行、その中で仮想マシン環境(プログラム)を実現し、仮想マシン環境上でゲストOSを実行することで、ドメインを区切ってもよい。各ゲストOSは、仮想的に独立した実行環境である。そして、ゲストOSからはホストOSに対してアクセスができないものの、ホストOSはゲストOSに対してアクセスすることができる。よって、ホストOSが安全ドメインで、ゲストOSが非安全ドメインとすることができる。
【図面の簡単な説明】
【0069】
【図1】安全ドメインと非安全ドメインを説明する図である。
【図2】本実施形態に係るプログラム検査システムの機能ブロック図を示す図である。
【図3】検査ドメインによる検査処理の概要を説明する図である。
【図4】検査ドメインと主ドメインとの間でストレージ装置にアクセス競合が発生した場合の、主ドメインからの割り込みによる検査中断を説明する図である。
【図5】検査対象を細かい部分領域に分割することで得られる効果を説明する図である。
【図6】検査処理の全体の流れを示すフローチャートである。
【図7】ソフトウェア検査部により検査処理の詳細な流れを示すフローチャートである。
【図8】安全ドメインと非安全ドメインを実現する別の例を示す図である。
【図9】安全ドメインと非安全ドメインを実現する別の例を示す図である。
【符号の説明】
【0070】
10 主ドメイン
11 割り込み送信部
20 検査ドメイン
21 割り込み受信部
22 検査処理制御部
23 乱数発生部
24 ソフトウェア検査部
25 検査対象正常値記憶部
26 主ドメイン復元部

【特許請求の範囲】
【請求項1】
プログラムを格納する記憶手段と、
前記プログラムを実行するプログラム実行手段と、
前記記憶手段内の前記プログラムを検査する検査手段と、
を有し、前記プログラムの検査をマルチコアシステムにより前記プログラムの実行と並列に行うプログラム検査システムであって、
前記プログラム実行手段は、前記記憶手段にアクセスする場合に、前記検査手段に割り込みを送信する割り込み送信手段を有し、
前記検査手段は、前記プログラムの検査を複数の部分領域ごとに行うとともに、前記割り込み送信手段からの割り込みを受信した場合は検査を中断するものであり、検査再開時には検査が未完了の部分領域について検査を行う
ことを特徴とするプログラム検査システム。
【請求項2】
前記検査手段は、前記プログラムの各部分領域について、プログラムが正常な場合の状態情報をあらかじめ記憶しておき、前記記憶手段内のプログラムから算出した状態情報と比較することでプログラムの各部分領域が正常であるか検査する
ことを特徴とする請求項1に記載のプログラム検査システム。
【請求項3】
前記検査手段は、前記プログラムの各部分領域の検査順序を、ランダムに決定することを特徴とする請求項1又は2に記載のプログラム検査システム。
【請求項4】
前記検査手段が検査対象とするプログラムは複数有り、
前記検査手段は、各プログラムの検査順序を、ランダムに決定することを特徴とする請求項1〜3のいずれか1項に記載のプログラム検査システム。
【請求項5】
前記検査手段が検査対象とするプログラムは複数有り、
前記検査手段は、各プログラムの複数の部分領域の検査順序を、前記複数のプログラムにまたがってランダムに決定することを特徴とする請求項1〜4のいずれか1項に記載のプログラム検査システム。
【請求項6】
前記プログラム検査システムは、それぞれが独立したドメインを複数有しており、
前記プログラム実行手段は、第1のドメインで実行され、
前記検査手段は、信頼されたプログラムのみが実行可能であり、かつ、前記第1のドメインからアクセスされない第2のドメインで実行される
ことを特徴とする請求項1〜5のいずれか1項に記載のプログラム検査システム。
【請求項7】
プログラムを格納する記憶手段と、
前記プログラムを実行するプログラム実行手段と、
前記記憶手段内の前記プログラムを検査する検査手段と、
を有し、前記プログラムの検査をマルチコアシステムにより前記プログラムの実行と並列に行うプログラム検査システムにおけるプログラム検査方法であって、
前記検査手段が前記プログラムの検査を複数の部分領域ごとに行う検査工程と、
前記プログラム実行手段が前記記憶手段にアクセスする場合に、前記検査手段に割り込みを送信する割り込み工程と、
前記検査手段が、割り込みを受信したときに検査を中断する中断工程と、
前記検査手段が、前記プログラム実行手段による前記記憶手段へのアクセスが完了した後に、検査が未完了の部分領域について検査を再開する再開工程と、
を含むプログラム検査方法。
【請求項8】
前記検査工程は、
前記プログラムの各部分領域について、プログラムが正常な場合の状態情報をあらかじめ記憶する工程と、
前記記憶手段内のプログラムから状態情報を算出する工程と、
記憶された状態情報と算出した状態情報とを比較することでプログラムの各部分領域が正常であるか検査する工程と
を含むことを特徴とする請求項7に記載のプログラム検査方法。
【請求項9】
前記検査工程では、前記プログラムの各部分領域の検査順序が、ランダムに決定されることを特徴とする請求項7又は8に記載のプログラム検査方法。
【請求項10】
前記検査手段が検査対象とするプログラムは複数有り、
前記検査工程では、各プログラムの検査順序が、ランダムに決定されることを特徴とする請求項7〜9のいずれか1項に記載のプログラム検査方法。
【請求項11】
前記検査手段が検査対象とするプログラムは複数有り、
前記検査工程では、各プログラムの複数の部分領域の検査順序が、前記複数のプログラムにまたがってランダムに決定されることを特徴とする請求項7〜10のいずれか1項に記載のプログラム検査方法。
【請求項12】
前記プログラム検査システムは、それぞれが独立したドメインを複数有しており、
前記プログラム実行手段を、第1のドメインで実行し、
前記検査手段を、信頼されたプログラムのみが実行可能であり、かつ、前記第1のドメインからアクセスされない第2のドメインで実行する
ことを特徴とする請求項7〜11のいずれか1項に記載のプログラム検査方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate