(57)【要約】【課題】アクセス競合による処理効率の低下を最小限としつつ、効率的にプログラムの検査を行う。【解決手段】プログラム検査システムは、プログラムを格納する記憶手段と、前記プログラムを実行するプログラム実行手段と、前記記憶手段内のプログラムを検査する検査手段と、を有し、前記プログラムの検査をマルチコアシステムにより前記プログラムの実行と並列に行うプログラム検査システムであって、前記プログラム実行手段は、前記記憶手段にアクセスする場合に、前記検査手段に割り込みを送信する割り込み送信手段を有し、前記検査手段は、前記プログラムの検査を複数の部分領域ごとに行うとともに、前記割り込み送信手段からの割り込みを受信した場合は検査を中断するものであり、検査再開時には検査が未完了の部分領域について検査を行う。各部分領域の検査順序はランダムとすることが好ましい。【選択図】図２
2009282751.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを格納する記憶手段と、
前記プログラムを実行するプログラム実行手段と、
前記記憶手段内の前記プログラムを検査する検査手段と、
を有し、前記プログラムの検査をマルチコアシステムにより前記プログラムの実行と並列に行うプログラム検査システムであって、
前記プログラム実行手段は、前記記憶手段にアクセスする場合に、前記検査手段に割り込みを送信する割り込み送信手段を有し、
前記検査手段は、前記プログラムの検査を複数の部分領域ごとに行うとともに、前記割り込み送信手段からの割り込みを受信した場合は検査を中断するものであり、検査再開時には検査が未完了の部分領域について検査を行う
ことを特徴とするプログラム検査システム。
【請求項２】
前記検査手段は、前記プログラムの各部分領域について、プログラムが正常な場合の状態情報をあらかじめ記憶しておき、前記記憶手段内のプログラムから算出した状態情報と比較することでプログラムの各部分領域が正常であるか検査する
ことを特徴とする請求項１に記載のプログラム検査システム。
【請求項３】
前記検査手段は、前記プログラムの各部分領域の検査順序を、ランダムに決定することを特徴とする請求項１又は２に記載のプログラム検査システム。
【請求項４】
前記検査手段が検査対象とするプログラムは複数有り、
前記検査手段は、各プログラムの検査順序を、ランダムに決定することを特徴とする請求項１〜３のいずれか１項に記載のプログラム検査システム。
【請求項５】
前記検査手段が検査対象とするプログラムは複数有り、
前記検査手段は、各プログラムの複数の部分領域の検査順序を、前記複数のプログラムにまたがってランダムに決定することを特徴とする請求項１〜４のいずれか１項に記載のプログラム検査システム。
【請求項６】
前記プログラム検査システムは、それぞれが独立したドメインを複数有しており、
前記プログラム実行手段は、第１のドメインで実行され、
前記検査手段は、信頼されたプログラムのみが実行可能であり、かつ、前記第１のドメインからアクセスされない第２のドメインで実行される
ことを特徴とする請求項１〜５のいずれか１項に記載のプログラム検査システム。
【請求項７】
プログラムを格納する記憶手段と、
前記プログラムを実行するプログラム実行手段と、
前記記憶手段内の前記プログラムを検査する検査手段と、
を有し、前記プログラムの検査をマルチコアシステムにより前記プログラムの実行と並列に行うプログラム検査システムにおけるプログラム検査方法であって、
前記検査手段が前記プログラムの検査を複数の部分領域ごとに行う検査工程と、
前記プログラム実行手段が前記記憶手段にアクセスする場合に、前記検査手段に割り込みを送信する割り込み工程と、
前記検査手段が、割り込みを受信したときに検査を中断する中断工程と、
前記検査手段が、前記プログラム実行手段による前記記憶手段へのアクセスが完了した後に、検査が未完了の部分領域について検査を再開する再開工程と、
を含むプログラム検査方法。
【請求項８】
前記検査工程は、
前記プログラムの各部分領域について、プログラムが正常な場合の状態情報をあらかじめ記憶する工程と、
前記記憶手段内のプログラムから状態情報を算出する工程と、
記憶された状態情報と算出した状態情報とを比較することでプログラムの各部分領域が正常であるか検査する工程と
を含むことを特徴とする請求項７に記載のプログラム検査方法。
【請求項９】
前記検査工程では、前記プログラムの各部分領域の検査順序が、ランダムに決定されることを特徴とする請求項７又は８に記載のプログラム検査方法。
【請求項１０】
前記検査手段が検査対象とするプログラムは複数有り、
前記検査工程では、各プログラムの検査順序が、ランダムに決定されることを特徴とする請求項７〜９のいずれか１項に記載のプログラム検査方法。
【請求項１１】
前記検査手段が検査対象とするプログラムは複数有り、
前記検査工程では、各プログラムの複数の部分領域の検査順序が、前記複数のプログラムにまたがってランダムに決定されることを特徴とする請求項７〜１０のいずれか１項に記載のプログラム検査方法。
【請求項１２】
前記プログラム検査システムは、それぞれが独立したドメインを複数有しており、
前記プログラム実行手段を、第１のドメインで実行し、
前記検査手段を、信頼されたプログラムのみが実行可能であり、かつ、前記第１のドメインからアクセスされない第２のドメインで実行する
ことを特徴とする請求項７〜１１のいずれか１項に記載のプログラム検査方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアシステムにおけるプログラム検査システムおよび方法に関する。
【背景技術】
【０００２】
実行するプログラムの安全性を確保するために、装置の起動時だけではなく稼働中においてもプログラムの改ざん検出を行う技術が提案されている（特許文献１，２）。プログラムの検査は、正規のハッシュ値と実際に格納されているデータから求められたハッシュ値を比較することで行われる。
【０００３】
このような技術をシングルコアシングルプロセッサのシステムに適用すると、検査処理の実行によって、他のプログラムの応答時間に悪影響を与えてしまう。そのため、厳しいリアルタイム性が要求されるシステムに対しては、上記の技術を適用することは難しい。
【０００４】
ところで、近年では、複数のプロセッサコアを有するプロセッサを用いたシステムや複数のプロセッサを用いたシステム（これらを総称して、マルチコアシステムという）が、利用されるようになってきている。マルチコアシステムでは、それぞれのコアで並列にプログラムを実行可能であるため、プログラムの実行とそのプログラムの検査処理とを並行して行える。したがって、上記のようにランタイムにプログラムの検査を行う技術をマルチコアシステムに適用することが考えられる。
【特許文献１】特開２００７−６６０２１号公報
【特許文献２】特開２００４−１７１５６４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、マルチコアシステムでは各コアが並行して演算処理を行うことができるものの、記憶手段を共有している場合には、プログラムの実行処理とその検査処理とでアクセス競合が発生する。
【０００６】
アクセス競合が発生した場合に検査処理が終了するまでプログラムの実行処理を待つようにしてしまうと、プログラムのスループットに悪影響を与えてしまう。また、アクセス競合が発生した場合に検査処理を中断（ａｂｏｒｔ）するようにすると、プログラムからのアクセスが頻繁に生じる場合には検査処理の処理効率が低下し、検査完了までに時間がかかってしまう。
【０００７】
本発明は上記実情に鑑みてなされたものであって、その目的とするところは、アクセス競合による処理効率の低下を最小限としつつ、効率的にプログラムの検査を行うことのできる技術を提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するために本発明では、以下の手段または処理によって記憶手段に格納されたプログラムの検査を行う。
【０００９】
本発明に係るプログラム検査システムは、プログラムを格納する記憶手段と、このプログラムを実行するプログラム実行手段と、記憶手段内のプログラムを検査する検査手段とを有する。本プログラム検査システムは、マルチコアシステム上で動作するものであり、プログラムの検査処理を、プログラムの実行と並列に行うことができるものである。
【００１０】
なお、本明細書において、マルチコアシステムとは、複数のプロセッサコアを有するコンピュータシステムのことを意味する。したがって、１つのプロセッサパッケージの中に複数のプロセッサコアを含むシステムや、それぞれが１つのプロセッサコアを有する複数のプロセッサを含むシステムや、これらの組み合わせが、本明細書におけるマルチコアシステムに該当する。
【００１１】
本発明におけるプログラム実行手段は、記憶手段にアクセスする場合に、検査手段に割り込みを送信する。なお、この割り込みの送信は、検査手段が記憶手段にアクセスしているかを調べて、検査手段が記憶手段にアクセスしている場合のみ行っても良いし、そのような調査を行わず常に行っても良い。
【００１２】
本発明における検査手段は、記憶手段に格納されているプログラムの検査を、複数の部分領域ごとに行う。また、検査手段は、割り込み送信手段からの割り込みを受信した場合には、即座に検査を中断する。そして、検査を再開する場合には、検査済みの部分領域はスキップして、検査が完了していない部分領域について検査を行う。
【００１３】
このようにすれば、プログラム実行手段が記憶手段にアクセスする場合には、割り込みによってプログラム実行手段が優先してアクセスできるようになるため、検査処理の実行に伴うプログラムのスループット低下を最小限とすることができる。また、検査手段は、割り込みによって検査を中断した場合であっても、すでに検査済みの部分領域については、再度検査処理を実行する必要がないため、割り込みによる中断までに行った検査処理の少なくとも一部を無駄にしないことができる。つまり、検査処理も効率的に行うことができる。
【００１４】
本発明における検査手段は、プログラムの各部分領域について、検査対象プログラムが正常な場合の状態情報をあらかじめ記憶しておく。また、記憶手段内のプログラムから状態情報を算出する。そして、これらを比較することでプログラムの各部分領域が正常であるか検査することが好適である。検査手段は、いずれかの部分領域で状態情報が相違する場合に、このプログラムが異常である（改ざんされている）と判断する。
【００１５】
上記の状態情報としては、例えば、ＳＨＡ−１などのハッシュ値を用いることが好適である。また、状態情報として、ＭＤ５やＣＲＣなどのチェックサムを用いても良い。つまり、状態情報としては、プログラムデータが異なるものであれば異なる値をとることが期待されるような値であれば、任意のものを採用可能である。
【００１６】
本発明において、部分領域は、プログラム実行手段が記憶手段にアクセスする平均的な時間間隔の間に、検査手段が検査を行える領域より小さい領域であることが好適である。言い換えると、プログラム実行手段による割り込みが発生した場合に、少なくとも１つの部分領域について検査が完了していることを期待できるように、部分領域を設定することが好ましい。部分領域を細かく設定するほど中断による無駄が少なくなるが、部分領域を細かく設定しすぎると、記憶しておく正規のハッシュ値の容量が多くなってしまうので、記憶容量に制限がある場合にはこの記憶容量を考慮して部分領域の大きさを設定することが好ましい。
【００１７】
また、本発明において、プログラムの複数の部分領域の検査順序を、ランダムに決定することが好ましい。また、検査するプログラムが複数存在する場合には、プログラムの検索順序をランダムに設定することも好ましい。また、複数のプログラムにまたがって、部分領域の検査順序をランダムに設定することも好ましい。
【００１８】
これは、改ざんされたプログラムが検査時期を推測して、検査を行っているときだけ記
憶手段内のプログラムを正常なものに書き換える可能性があるからである。検査順序をランダムにすることで、そのような攻撃も回避することができ、より安全性を高めることができる。
【００１９】
また、本発明において、プログラム実行手段を第１のドメインで実行し、検査手段を第１のドメインとは異なる第２のドメインで実行することが好ましい。
【００２０】
本明細書において、ドメインとは、プログラムが実行される仮想的な領域・環境を表し、各ドメインは互いに独立しており原則として他のドメインにアクセスすることができない。したがって、各ドメイン内でプログラムに異常が発生した場合であっても、他のドメインに影響を与えることがない。
【００２１】
そして、検査手段が実行される第２のドメインは、信頼されたプログラムのみが実行可能であり、第１のドメインからアクセスされないドメインであることが好ましい。逆に、検査手段がプログラムを検査できるように、第２のドメインからは第１のドメインに対してアクセス可能とする。
【００２２】
このようにすることで、検査手段の信頼性は保証されるため、適切な検査を行え、システム全体の信頼性が向上する。
【００２３】
なお、本発明は、上記手段の少なくとも一部を有するプログラム検査システムとして捉えることができる。また、本発明は、上記処理の少なくとも一部を含むプログラム検査方法、または、かかる方法を実現するためのプログラムとして捉えることもできる。上記手段および処理の各々は可能な限り互いに組み合わせて本発明を構成することができる。
【発明の効果】
【００２４】
本発明によれば、アクセス競合による処理効率の低下を最小限としつつ、効率的にプログラムの検査を行うことが可能となる。
【発明を実施するための最良の形態】
【００２５】
以下に図面を参照して、この発明の好適な実施の形態を例示的に詳しく説明する。
【００２６】
本実施形態は、複数のマルチプロセッサコアのＣＰＵを有し、複数のドメインを有する処理システムである。各ドメインは、基本的に互いに独立した実行環境であり、他のドメインにアクセスすることができない。ただし、ドメイン間のアクセスを制御する機構を設けることで、他のドメインに対するアクセスが許可されたドメインを設けることができる。例えば、ＡＲＭ社のＴｒｕｓｔＺｏｎｅ（登録商標）技術は安全ドメインと非安全ドメインを提供できるため、マルチコアプロセッサ上でＴｒｕｓｔＺｏｎｅを用いることで、複数のドメインを有する本処理システムを好適に実現可能である。ここで、安全ドメインは信頼されたプログラムが実行可能であり、かつ、外部から改ざんされることのない安全なドメインである。一方、非安全ドメインは信頼性が保証されていないプログラムでも実行可能である。そして、非安全ドメインから安全ドメインに対するアクセスは禁止されるのに対して、安全ドメインから非安全ドメインへのアクセスは許可される。
【００２７】
本処理システムで作動する種々のプログラムの概略図を図１に示す。このシステムでは、安全ドメイン１２０と非安全ドメイン１３０の２つのドメインが提供される。また、特権モードで動作し、安全ドメイン１２０と非安全ドメイン１３０との間の全ての変更を両方向に管理するモニタプログラム１１０が設けられる。
【００２８】
安全ドメイン１２０内では、安全オペレーティングシステム（ＯＳ）１２２が実行され
、その上で複数の安全アプリケーションプログラム（ＡＰ）１２４，１２６が実行される。安全ドメイン１２０は、信頼されたプログラムのみが実行可能な環境であり、安全ＯＳ１２２や、安全ＡＰ１２４，１２６は、その信頼性が保証されたプログラムである。
【００２９】
非安全ドメイン１３０内では、非安全ＯＳ１３２が実行され、その上で複数の非安全ＡＰ１３４，１３６が実行される。これらの非安全ＡＰ１３４，１３６は、非安全ＯＳ１３２と協働して実行される。
【００３０】
これらの実行環境は互いに独立しているため、あるドメインで異常が発生しても他のドメインに対して悪影響を及ぼすことがない。非安全ドメイン１３０側から安全ドメイン１２０側へのアクセスは、モニタプログラム１１０によって禁止されるので、非安全ＡＰ１３４，１３６が改ざんされたりしても、安全ドメイン１２０を改ざんしたりすることはできない。一方、安全ドメイン１２０側から非安全ドメイン１３０側へのアクセスは許可されるため、安全ＡＰ１２４，１２６は非安全ドメイン１３０に割り当てられたメモリにアクセスし、正常に動作しているかを検査したり、リセットをかけたりすることができる。
【００３１】
また、本処理システムはマルチコアプロセッサを採用しているため、安全ドメイン１２０内の安全ＡＰ１２４，１２６や、非安全ドメイン１３０内の非安全ＡＰ１３４，１３６は並列に実行可能である。
【００３２】
〈機能構成〉
次に、本実施形態に係るプログラム修復システムの機能構成を、図２を参照して説明する。本システムでは、主ドメイン１０，検査ドメイン２０の２つのドメインを定義する。
【００３３】
主ドメイン１０は、ユーザにサービス機能を提供するアプリケーションプログラムが実行されるドメインであり、上述の非安全ドメインに相当する。アプリケーションプログラムの実行コードはストレージ装置３０に格納されており、主ドメイン１０は、これをＲＡＭ上にロードして実行する。ストレージ装置３０は、ハードディスク装置やＲＯＭなどの不揮発性メモリである補助記憶装置である。また、ストレージ装置３０としては、ＲＡＭにロードせずに直接実行可能なＮＯＲ型フラッシュメモリーを採用しても良い。
【００３４】
また、検査ドメイン２０は、主ドメイン１０のサービス機能の状態が正常であるか検査し、異常が発生した場合には主ドメイン１０を復元するプログラムが実行されるドメインであり、上述の安全ドメインに相当する。
【００３５】
検査ドメイン２０は、改ざんされないことが必要である。このドメインを非安全ドメインから独立した安全ドメインとすることで、悪意のある非安全ドメイン内のプログラムからの改ざんを防ぐことができる。さらに、ＲＯＭに格納されたプログラムイメージ自体の改ざんを防ぐために、セキュアブートを利用して攻撃や事故などを防ぐことが好ましい。セキュアブートは、電源投入直後に起動されるブートＲＯＭやＢＩＯＳを検証し、ブートプロセスにおける信用の連鎖を確立しながら、プラットフォームが改ざんされていないことを保証する技術である。
【００３６】
主ドメイン１０は、ユーザにサービス機能を提供するアプリケーションプログラム以外に、割り込み送信部１１を有する。
【００３７】
検査ドメイン２０は、割り込み受信部２１、検査処理制御部２２、乱数発生部２３、ソフトウェア検査部２４、検査対象正常値記憶部２５、および主ドメイン復元部２６を備える。
【００３８】
なお、上記の各機能部は、補助記憶装置に格納されたプログラムがＣＰＵによって実行されることで、その機能が実現されるが、一部についてはハードウェアとして実装しても構わない。
【００３９】
〈検査処理〉
まず、検査ドメイン２０内の各機能部について、検査処理の概要とともに説明する。検査ドメイン２０は、ストレージ装置３０に格納された検査対象ソフトウェア３１を所定の時間間隔で検査する。なお、この検査対象ソフトウェア３１が、主ドメイン１０で実行されるプログラムである。
【００４０】
検査処理制御部２２は、検査のタイミングを決定し、そのタイミングでソフトウェア検査部２４による検査処理を開始する。検査処理制御部２２による検査タイミングの決定は、乱数発生部２３を参照して乱数により決定することで、悪意のあるソフトウェアに検査時期を予測されることを回避することが好ましい。
【００４１】
ソフトウェア検査部２４は、ストレージ装置３０に格納された検査対象ソフトウェア３１のハッシュ値を算出し、検査対象正常値記憶部２５に格納されている正常な場合のハッシュ値（正規ハッシュ値という）と比較することで、検査対象ソフトウェア３１が改ざんされていないかを検査する。本実施形態では、ソフトウェア検査部２４におけるソフトウェア検査処理としてＳＨＡ−１アルゴリズムによるハッシュ値の比較を用いるが、その他のアルゴリズムによるハッシュ値を利用しても良い。
【００４２】
ソフトウェア検査部２４は、検査対象ソフトウェア３１が改ざんされている場合には、主ドメイン復元部２６を起動して、主ドメイン１０の復元を行う。主ドメイン復元部２６は、主ドメイン１０をリセットし、検査ドメイン２０内に格納している正常なプログラムをストレージ装置３０内に格納し直すことで、主ドメイン１０の復元を行う。検査ドメイン２０は、この復元処理中に、主ドメインで行う処理の代替処理を行う緊急処理実行部を有することも好適である。このような、緊急処理実行部を備えることで、復元処理中も継続してサービスを提供し続けることができる。なお、緊急処理実行部は、代替処理として最低限必要な機能のみ提供すればよい。
【００４３】
ソフトウェア検査部２４は、検査対象ソフトウェア３１全体を対象としてハッシュ値を求めるのではなく、図３に示すように、検査対象ソフトウェアを複数の部分領域に分割して、各部分領域ごとにハッシュ値を求める。本実施形態では、部分領域は所定の長さの固定長とする。部分領域を固定長とすることで、各部分領域のメモリ上のアドレス領域を容易に算出することが可能となる。このようなハッシュ値算出方法に合わせて、検査対象正常値記憶部２５には各部分領域ごとの正規ハッシュ値が格納される。
【００４４】
ソフトウェア検査部２４は、部分領域ごとにハッシュ値を算出し、算出結果を正規ハッシュ値と比較する。全ての部分領域について算出したハッシュ値と正規ハッシュ値が一致する場合にはソフトウェアが正常である（改ざんされていない）と判断し、いずれかの部分領域で算出したハッシュ値が正規ハッシュ値と異なる場合にはソフトウェアが異常である（改ざんされている）と判断する。
【００４５】
ここで、検査ドメイン２０による検査処理と、主ドメイン１０によるプログラム実行処理は、マルチコアシステムを利用することで並行して実行することができる。したがって、演算資源の観点からは検査処理を行うことによる主ドメインの処理効率の低下は少ない。ただし、ストレージ装置３０に対するアクセスは同時には行えないため、検査処理によって主ドメインのスループットが低下してしまう。
【００４６】
そこで図４に示すように、主ドメイン１０がストレージ装置３０にアクセスするときに、検査ドメイン２０がストレージ装置３０にアクセスしている場合は、主ドメイン１０内の割り込み送信部１１が検査ドメイン２０に対して割り込み信号を送信する。なお、割り込み送信部１１は、検査ドメイン２０がストレージ装置３０にアクセスしているか調べてからストレージ装置３０に対して割り込み信号を送信しても良いが、検査ドメイン２０によるアクセスがあるか否かを調べずに割り込み信号を送信しても良い。割り込み信号の送信は負荷の軽い処理なので、主ドメイン１０の処理効率の低下を最小限とすることができる。
【００４７】
割り込み受信部２１が主ドメイン１０からの割り込み信号を受信すると、検査ドメイン２０のソフトウェア検査部２４は即座に検査処理を中断（ａｂｏｒｔ）する。これは、主ドメイン１０の処理に、待ち時間を発生させないためである。したがって、主ドメイン１０は、ストレージ装置３０に対してすぐにアクセスすることができる。
【００４８】
ソフトウェア検査部２４は、図５に示すように、検査対象ソフトウェア３１を細かい部分領域に分けて検査しているため、検査開始から割り込み発生までの間隔が極端に短くなければ、少なくとも一部の部分領域については検査が完了している。図５の例では、２つの部分領域について検査を完了し、３つ目の部分領域を検査中に割り込みが発生した場合を示している。この場合は、次回の検査処理では３つ目の部分領域から検査を再開すれば良く、既に検査が完了している２つの部分領域については再度検査を行う必要がない。つまり、割り込みによって検査処理が中断された場合でも、無駄になる検査処理を少なくすることができる。
【００４９】
なお、部分領域の大きさを小さくするほど、中断によって生じる無駄な検査処理の量を減らすことができる。一方、ハッシュ値の値は部分領域の大きさによらず固定長となるので、検査対象正常値記憶部２５に格納する正規ハッシュ値の容量が大きくなってしまう問題が生じる。そこで、部分領域の大きさは、ストレージ装置３０に対するアクセス競合が発生する頻度に基づいて設定することが好適である。より具体的には、主ドメイン１０がストレージ装置３０にアクセスする平均時間間隔の半分程度の時間でソフトウェア検査部２４が検査可能な大きさを、部分領域の大きさとすればよい。このように部分領域を設定すれば、主ドメイン１０がストレージ装置３０に平均的にアクセスする限り、ソフトウェア検査部２４が少なくとも１つの部分領域を検査することができ、中断によって無駄になる検査処理を少なくすることができる。
【００５０】
また、ソフトウェア検査部２４は、検査対象ソフトウェア３１の各部分領域を先頭から順番に検査する必要はない。逆に、このように先頭から検査をする場合、検査対象ソフトウェア３１が改ざんされている場合に、検査タイミングを予測して、検査タイミングの時のみストレージ装置３０内のデータを一時的に正常なものに戻すことによって改ざん検出を免れることが可能となってしまう。そこで、ソフトウェア検査部２４は、乱数発生部２３によって、検査対象ソフトウェア３１の各部分領域の検査順序をランダムに決定することが好ましい。
【００５１】
〈処理フロー〉
次に、図６，７のフローチャートを参照して、検査処理の流れについて説明する。図６は、検査処理全体の流れを示すフローチャートである。図７は、ソフトウェア検査部２４による検査処理の詳細な流れを示すフローチャートである。
【００５２】
まず、検査処理を行うタイミングが到来すると、検査処理制御部２２が起動して、ソフトウェア検査部２４を実行する（Ｓ１０）。そして、ソフトウェア検査部２４が、検査対象ソフトウェア３１の検査処理を実行する（Ｓ１１）。なお、このステップＳ１１の検査
処理の詳細については、後で図７のフローチャートを参照して詳しく説明する。
【００５３】
ソフトウェア検査処理の結果、ソフトウェアに異常がないと判断された場合（Ｓ１２：ＮＯ）は、検査処理制御部２２が、乱数発生部２３の乱数によって次回の検査タイミングを決定する（Ｓ１３）。そして、検査処理制御部２２は、次の検査タイミングまで休止する（Ｓ１４）。
【００５４】
一方、ソフトウェア検査処理の結果、ソフトウェアに異常があると判断された場合（Ｓ１２：ＹＥＳ）は、主ドメイン復元部２６が、主ドメイン１０のリセットとソフトウェアの復元処理を行う（Ｓ１５）。この主ドメイン１０の復元処理の間、緊急処理部によって緊急処理をおこなう（Ｓ１６）。そして、主ドメイン１０が復元したら、緊急処理を停止し、主ドメイン１０を再開する（Ｓ１７）。この後、検査処理制御部２２は、適当なタイミングで次回の検査処理を行う。
【００５５】
次に、ステップＳ１１におけるソフトウェア検査部２４による検査処理の詳細を図７のフローチャートを参照して説明する。
【００５６】
まず、検査処理が開始されたときに、前回の検査処理が割り込みによって中断されたか否かを判断する（Ｓ２０）。これは、後述する、各部分領域の検査順序と検査が完了したか否かを格納するテーブルを参照することで行える。前回の検査が中断せずに終了した場合（Ｓ２０：ＮＯ）は、今回の検査処理での各部分領域の検査順序を、乱数発生部２３の乱数によって決定する（Ｓ２１）。この検査順序はメモリ上に格納しておく。一方、前回の検査が中断されていた場合（Ｓ２０：ＹＥＳ）は、前回の検査順序を利用する。
【００５７】
ソフトウェア検査部２４は、決定された検査順序にしたがって、次に検査する部分領域を決定する（Ｓ２２）。これは、検査未完了の部分領域のうち、最も早い検査順序が割り当てられた部分領域を選択することによって行われる。
【００５８】
ソフトウェア検査部２４は、検査対象の部分領域についてのハッシュ値を算出し（Ｓ２３）、これを検査対象正常値記憶部２５に格納された正規ハッシュ値と比較する（Ｓ２４）。ここで、これらのハッシュ値が一致しない場合（Ｓ２５：ＮＯ）は、ソフトウェアに異常があるとして、検査処理を終了する（Ｓ２９）。一方、これらのハッシュ値が一致する場合（Ｓ２５：ＹＥＳ）は、今回の検査順序の部分領域の検査が完了したことをメモリ上のテーブルに記憶する（Ｓ２６）。検査すべき部分領域がまだ存在する場合（Ｓ２７：ＮＯ）は、ステップＳ２２に戻って次に検査対象の部分領域について、検査を行う。一方、全ての部分領域を検査済みの場合（Ｓ２７：ＹＥＳ）は、ソフトウェアに異常なしとして、検査処理を終了する（Ｓ２８）。
【００５９】
主ドメイン１０から割り込みが発生した場合には、検査処理を即座に中断するが、メモリ上に、各部分領域の検査順序とどの部分領域について検査が完了したかの情報が格納されている。したがって、次回の検査実行時には、この情報を参照することで、前回の検査が全て終わったのか、あるいは割り込みによって中断したのかを判別することができる。
【００６０】
〈本実施形態の作用・効果〉
本実施形態のプログラム検査システムでは、各コアが並列に動作するマルチコアシステムを利用して、サービス機能を動作させる主ドメインと、主ドメインを監視する検査ドメインを並列に実行可能である。したがって、検査ドメインによる検査処理が、主ドメインの処理に対して与える悪影響を抑制することができる。
【００６１】
また、検査処理と主ドメインとの間でストレージ装置へのアクセス競合が発生した場合
に、主ドメインの処理に待ち状態を発生させないように、すぐに検査処理を中断する構成としている。このとき、検査対象のソフトウェアを細かい領域ごとに検査しているので、検査処理の中断が発生した場合でも、無駄になる検査処理の量を減らすことができる。
【００６２】
また、各部分領域の検査順序をランダムに決定しているので、検査対象ソフトウェアが既に危殆化していても、検査時期を予測することが困難となる。したがって、検査のタイミングだけメモリ上のデータを正常なものに置き換えて、改ざんの検出を免れるという回避手法も防止可能である。さらに、各部分領域の検査順序だけでなく、検査のタイミング自体もランダムに決定しているので検査時期を予測することは困難である。
【００６３】
（変形例）
上記の実施形態の説明では、検査対象のプログラムが１つである例を挙げて説明したが、複数のプログラムを検査対象としても良いことは言うまでもない。この際、複数のプログラムをどのような順序で検査するかの決定を、ランダムに決定することが好ましい。検査時期を予測可能にしないためである。
【００６４】
また、各部分領域の検査順序の決定を、１つの検査対象プログラムの中だけでランダムとするのではなく、全ての検査対象プログラムにまたがってランダムとしても良い。このようにしても検査時期を予測不可能とすることができる。
【００６５】
また、上記の実施形態では、検査対象ソフトウェアの検査間隔を乱数によって決定している（図６のＳ１３）が、検査対象ソフトウェアが正常であると判定された回数が多くなるほど、検査間隔を長く（乱数の平均値を長く）しても良い。一旦正常であると判定された場合は、すぐに改ざんされる可能性は低いため、検査間隔を長くしても問題は生じにくい。一方、検査間隔を長くすることで、検査処理によるストレージ装置へのアクセス頻度を抑えることができるので、ストレージ装置へのアクセス競合の発生を抑えることができる。
【００６６】
また、上記の実施形態では、ハッシュ値を用いて検査対象ソフトウェアが改ざんされたかを検査しているが、ＭＤ５やＣＲＣなどのチェックサムを利用して改ざん検出を行っても良い。ただし、チェックサムでは、データが異なっていても同じチェックサム値になってしまう可能性や、あるチェックサム値を有するデータを悪意者が作成可能であるという点で、信頼性がそれほど高くない。もっとも、一般にチェックサムの算出処理はハッシュ値算出処理に比べて負荷の少ない処理であるので、所望のセキュリティ強度とシステムの演算能力によっては、チェックサムを採用することも有効である。
【００６７】
また、複数のドメインを提供するための仕組みは、図１で説明したようにモニターソフトウェアによってドメインを区切る方法に限られるものではない。例えば、図８に示すように、各コアに固有のＲＡＭ領域を割り当て、その上でそれぞれがＯＳを稼働する。そして、チップとバスとの間に設けたフィルタによって、あるコアからの別のコアに割り当てられたＲＡＭ領域へのアクセスを禁止することでドメインの分離が実現できる。さらに、あるコアから他のコアに対してアクセスを許可するようにしておけば、安全ドメインと非安全ドメインとの区別を設けることができる。
【００６８】
また、図９に示すように、マルチコアシステム上でホストＯＳを実行、その中で仮想マシン環境（プログラム）を実現し、仮想マシン環境上でゲストＯＳを実行することで、ドメインを区切ってもよい。各ゲストＯＳは、仮想的に独立した実行環境である。そして、ゲストＯＳからはホストＯＳに対してアクセスができないものの、ホストＯＳはゲストＯＳに対してアクセスすることができる。よって、ホストＯＳが安全ドメインで、ゲストＯＳが非安全ドメインとすることができる。
【図面の簡単な説明】
【００６９】
【図１】安全ドメインと非安全ドメインを説明する図である。
【図２】本実施形態に係るプログラム検査システムの機能ブロック図を示す図である。
【図３】検査ドメインによる検査処理の概要を説明する図である。
【図４】検査ドメインと主ドメインとの間でストレージ装置にアクセス競合が発生した場合の、主ドメインからの割り込みによる検査中断を説明する図である。
【図５】検査対象を細かい部分領域に分割することで得られる効果を説明する図である。
【図６】検査処理の全体の流れを示すフローチャートである。
【図７】ソフトウェア検査部により検査処理の詳細な流れを示すフローチャートである。
【図８】安全ドメインと非安全ドメインを実現する別の例を示す図である。
【図９】安全ドメインと非安全ドメインを実現する別の例を示す図である。
【符号の説明】
【００７０】
１０  主ドメイン
１１  割り込み送信部
２０  検査ドメイン
２１  割り込み受信部
２２  検査処理制御部
２３  乱数発生部
２４  ソフトウェア検査部
２５  検査対象正常値記憶部
２６  主ドメイン復元部
【図１】
2009282751.tif 000003
【図２】
2009282751.tif 000004
【図３】
2009282751.tif 000005
【図４】
2009282751.tif 000006
【図５】
2009282751.tif 000007
【図６】
2009282751.tif 000008
【図７】
2009282751.tif 000009
【図８】
2009282751.tif 000010
【図９】
2009282751.tif 000011