(57)【要約】【課題】ストレージへのアクセス競合を発生させずに、プログラム実行と並列してプログラムの検査を行う。【解決手段】実行ドメイン（１０）と検査ドメイン（２０）とを並列に実行するマルチコアシステムにおいて、実行ドメインからストレージ（３０）に対するアクセスは禁止され、ストレージに対するアクセス要求は検査ドメインを介して行われる。実行ドメインからプログラムの取得要求を受け取った検査ドメインでは、ストレージから読み取ったプログラムを実行ドメインに渡すとともに、そのコピーを作成する。検査ドメインでは、コピーされたプログラムを対象として検査を行う。【選択図】図１
2011150656.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを格納する記憶手段と、
前記プログラムを実行するプログラム実行手段と、
前記プログラムを検査する検査手段と、
を有し、前記プログラムの検査と実行をマルチコアシステムにより並列に実行するプログラム検査システムであって、
前記プログラム実行手段は、前記記憶手段からプログラムを読み出す際に、前記記憶手段に直接アクセスせずに、前記検査手段に対してプログラムの取得を要求し、
前記検査手段は、前記プログラム実行手段からのプログラムの取得要求に応じて前記記憶手段からプログラムを取得して前記プログラム実行手段へ送信するとともに、当該プログラムのコピーを作成してコピーされたプログラムを対象に検査を実行する
ことを特徴とするプログラム検査システム。
【請求項２】
前記検査手段は、正常なプログラムのダイジェスト値をあらかじめ記憶しており、前記コピーされたプログラムから算出されるダイジェスト値が記憶されたダイジェスト値と一致するか否かによって、プログラムが正常であるか否かを判断する
ことを特徴とする請求項１に記載のプログラム検査システム。
【請求項３】
プログラムを格納する記憶手段と、
前記プログラムを実行するプログラム実行手段と、
前記プログラムを検査する検査手段と、
を有し、前記プログラムの検査と実行をマルチコアシステムにより並列に実行するプログラム検査システムにおけるプログラム検査方法であって、
前記プログラム実行手段が、前記検査手段に対してプログラムの取得を要求するプログラム取得要求工程と、
前記検査手段が、前記プログラム実行手段からのプログラムの取得要求に応じて前記記憶手段からプログラムを取得するステップと、取得されたプログラムを前記プログラム実行手段へ送信するステップと、取得されたプログラムのコピーを作成してコピーされたプログラムを対象に検査するステップとを行う検査工程と、
を含むプログラム検査方法。
【請求項４】
前記検査手段には、正常なプログラムのダイジェスト値があらかじめ記憶されており、
前記検査するステップでは、前記コピーされたプログラムから算出されるダイジェスト値が記憶されたダイジェスト値と一致するか否かによって、プログラムが正常であるか否かを判断する
ことを特徴とする請求項３に記載のプログラム検査方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの正当性を検証するプログラム検査技術に関し、特に、記憶装置を共有するマルチコアシステムにおけるプログラム検査技術に関する。
【背景技術】
【０００２】
特許文献１にはランタイムでプログラムを検査する手法が提案されている。マルチコアプロセッサシステム上で、このようなランタイムのプログラム検査を利用する場合は、既存機能の動作環境（実行ドメイン）と並列実行できる動作環境（検査ドメイン）を導入する方法が考えられる。このようにプログラム実行とプログラム検査を並列実行することで、検査がプログラム実行に影響を与えないことが期待されるが、実際にはプログラムを保存する記憶装置（ストレージ）に対するアクセス競合によりプログラム実行のスループットに悪影響を与えてしまう。
【０００３】
ストレージに対するアクセス競合によるスループットの低下を避けるために、本発明者は、実行ドメインがストレージにアクセスするときに検査ドメインに割り込みをかけることで、検査ドメインによる検査を中断する手法を提案している（特許文献２）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１７１５６４号公報
【特許文献２】特開２００９−２８２７５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献２の手法では、改ざんされた実行ドメイン内のプログラムが定期的に検査ドメインに割り込みをかけることで、プログラム検査を無効にして改ざん検知を免れるおそれがある。
【０００６】
本発明は、特許文献２の手法とは異なる手法により、ストレージに対するアクセス競合に起因するスループット低下の問題を解決する。すわなち、本発明は、検査対象プログラムが格納されている記憶装置へのアクセス競合を発生させずに、プログラム実行と並列してプログラム検査を行うことを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明に係るプログラム検査システムは、プログラムを格納する記憶手段と、前記プログラムを実行するプログラム実行手段と、前記プログラムを検査する検査手段と、を有する。本プログラム検査システムは、マルチコアシステム上で動作するものであり、プログラム検査処理とプログラム実行処理を並列に行うことができるものである。
【０００８】
なお、本明細書において、マルチコアシステムとは、複数のプロセッサコアを有するコンピュータシステムのことを意味する。したがって、１つのプロセッサパッケージの中に複数のプロセッサコアを含むシステムや、それぞれが１つのプロセッサコアを有する複数のプロセッサを含むシステムや、これらの組み合わせが、本明細書におけるマルチコアシステムに該当する。
【０００９】
本発明におけるプログラム実行手段は、記憶手段からプログラムを読み出す際に、記憶
手段に直接アクセスせずに、検査手段に対してプログラムの取得を要求する。
【００１０】
本発明における検査手段は、プログラム実行手段からのプログラムの取得要求に応じて記憶手段からプログラムを取得してプログラム実行手段へ送信するとともに、取得したプログラムのコピーを作成してコピーされたプログラムを対象に検査を実行する。
【００１１】
このように、プログラム実行手段からは記憶手段へのアクセスを行わず、プログラム検査手段を介して記憶手段からプログラムを取得することで、記憶装置へのアクセスが統一され、両者の間でのアクセス競合が解消される。
【００１２】
本発明において、検査手段は、正常なプログラムのダイジェスト値をあらかじめ記憶しており、前記コピーされたプログラムから算出されるダイジェスト値が記憶されたダイジェスト値と一致するか否かによって、プログラムが正常であるか否かを判断することができる。
【００１３】
このようなダイジェスト値として、例えば、ＳＨＡ−１などのハッシュ値を用いることが好適である。また、ダイジェスト値として、ＭＤ５やＣＲＣなどのチェックサムを用いても良い。つまり、ダイジェスト値は、プログラムデータが異なるものであれば異なる値をとることが期待されるような値であれば、任意のものを採用可能である。
【００１４】
本発明は、上記処理の少なくとも一部を含むプログラム検査方法、または、これらの方法を実現するためのプログラムとして捉えることもできる。上記手段および処理の各々は可能な限り互いに組み合わせて本発明を構成することができる。
【発明の効果】
【００１５】
本発明によれば、検査対象プログラムが格納されている記憶装置へのアクセス競合を発生させずに、プログラム実行と並列してプログラム検査を行える。
【図面の簡単な説明】
【００１６】
【図１】本実施形態に係るプログラム検査システムの構成を示す図。
【図２】本実施形態に係るプログラム検査システムをＴｒｕｓｔＺｏｎｅ（登録商標）を利用して実現した場合の構成を示す図。
【図３】本実施形態に係るプログラム検査システムをＸｅｎを利用して実現した場合の構成を示す図。
【図４】本実施形態に係るプログラム検査システムの全体的な処理の流れを示すフローチャート。
【図５】本実施形態に係るプログラム検査システムにおける、検査ドメインでの検査処理の流れを示すフローチャート。
【図６】ストレージ内におけるプログラムとブロックの対応関係を説明する図。
【図７】ブロック正常状態記憶部に記憶される正常なブロックのダイジェスト値を説明する図。
【発明を実施するための形態】
【００１７】
以下に図面を参照して、この発明の好適な実施の形態を例示的に詳しく説明する。
【００１８】
〈構成〉
図１に本実施形態に係るプログラム検査システムの構成図を示す。本実施形態は、マルチコアのＣＰＵを有するマルチコアシステムであり、ストレージを共有している。そして、既存機能が動作する実行ドメインに加えて、並列に動作して実行ドメインを監視する検査ドメインを導入する。ドメインとは、プログラムが実行される仮想的な領域・環境を表
す。各ドメインは互いに独立しており原則として他のドメインにアクセスすることができない。ただし、ドメイン間のアクセスを制御する機構を設けることで、他のドメインに対するアクセスが許可されたドメインを設けることができる。ここで、検査ドメイン２０は、改ざんなどの攻撃を受けないことが望まれるので、物理的な攻撃や他のドメインからの攻撃を受けないようにセキュアなドメインとして構築する。
【００１９】
本実施形態では、プログラムを実行する環境である実行ドメインと、ストレージへのアクセスおよびプログラムの検査を行う検査ドメインの少なくとも２つのドメインを備える。実行ドメインが本発明におけるプログラム実行手段に相当し、検査ドメインが本発明におけるプログラム検査手段に相当する。
【００２０】
本実施形態では、実行ドメイン１０からストレージ３０に対する直接のアクセスが禁止される。そこで、実行ドメイン１０からストレージ３０にアクセスする場合には、デバイスドライバ１２は、検査ドメイン２０にストレージ３０へのアクセス要求を転送して、検査ドメイン２０を介してストレージへアクセスする。
【００２１】
なお、このような複数のドメインから構成されるマルチコアシステムは、例えば、ＡＲＭ社のＴｒｕｓｔＺｏｎｅ（登録商標）技術によって実現することができる。図２に、ＴｒｕｓｔＺｏｎｅ技術を利用して図１の構成を実現した場合の構成図を示す。この場合、ＴｒｕｓｔＺｏｎｅ技術に対応したハードウェア（ＣＰＵ等）を利用して、セキュアドメインと通常ドメインを構築する。ＴｒｕｓｔＺｏｎｅ技術は、周辺機器へのアクセス制御機能を持ち、セキュアドメイン以外はストレージへのアクセスを不可にできるため、本実施形態に好適な環境である。この場合、通常ドメイン（実行ドメイン）とセキュアドメイン（検査ドメイン）との間の通信は、ドメイン間の通信を監視する、ＴｒｕｓｔＺｏｎｅモニタソフトウェアを介して行わる。
【００２２】
また、仮想化技術であるＸｅｎを用いて本実施形態を構築することもできる。図３にＸｅｎを利用して図１の構成を実現した場合の構成図を示す。Ｘｅｎではマルチコアシステム上で、仮想マシンを提供するＸｅｎ  ＶＭＭ（仮想マシンモニタ）を実行し、その上で複数のＯＳが実行される。仮想マシンの実行単位がドメインと呼ばれ、特権的なドメインであるドメイン０と、その他のドメイン（ドメインＵ）が存在する。ドメイン０は、実ハードウェアへのアクセスやその他のドメインを管理するものである。ドメインＵからの周辺機器へのアクセスは仮想マシンであるＶＭＭに対して行われ、その要求はドメイン０にリダイレクトされる。そして、ドメイン０が実際の周辺機器にアクセスして、アクセス結果をドメインＵへ返す。Ｘｅｎでは周辺機器に対するこのようなアクセス方式を提供するので、本実施形態を構築するために利用することができる。
【００２３】
〈全体処理〉
図１における各機能部の役割を、処理の流れとともに説明する。図４は、本マルチコアシステムにおける全体処理の流れを示すフローチャートである。検査ドメイン２０は、実行ドメイン１０からのプログラムロード要求に応じてプログラムの検査を行うので、実行ドメインからのプログラムロード要求を待つ（ステップＳ１０）。実行ドメイン１０においてカーネル１１がプログラムを実行する場合には、ストレージ３０内のプログラムを取得するようデバイスドライバ１２に対して要求する（ステップＳ１１）。カーネル１１からのプログラムロード要求を受けて、デバイスドライバ１２は、検査ドメイン２０に対してプログラムのロードを要求する（ステップＳ１２）。なお、ストレージ３０内には図６Ａに示すようにブロックをまたがってプログラムが格納されているので、図６Ｂに示すようなプログラムとブロックの対応付けを記憶しているプログラム−ブロック変換部１２ａが要求されたプログラムに対応するブロックを決定する。そして、ブロックロード転送部１２ｂが、このブロックをロードするように実行ドメイン通信部２１を介して検査ドメイ
ン２０に要求する。
【００２４】
検査ドメイン２０における処理は後で詳しく説明するので、ここでは簡単に説明する。検査ドメイン２０が、プログラムの要求（ブロックロードの要求）を受け付ける（ステップＳ１３）と、ストレージドライバ２２がストレージ３０から要求されてブロックをロードし、取得したブロックのコピーを生成するとともに、実行ドメイン１０に送信する（ステップＳ１４）。実行ドメイン１０では、要求したプログラムを受け取ると、カーネル１１がこのプログラムを実行する（Ｓ１５）。一方、検査ドメイン２０では、コピーしたプログラムを対象にして検査を行う（ステップＳ１６）。プログラムに異常があれば、実行ドメイン１０に通知して実行ドメイン１０におけるプログラムの実行を停止させる。
【００２５】
〈検査ドメインにおける検査処理〉
以下、検査ドメイン２０における詳細な処理について、図５のフローチャートを参照して説明する。実行ドメイン通信部２１が、実行ドメイン１０のデバイスドライバ１２からブロックロードの要求を受信すると（ステップＳ２０）、ストレージドライバ２２が、指定されたブロックをストレージ３０からロードする（ステップＳ２１）。ストレージドライバ２２は、ロードしたブロックをブロックコピー生成部２３に渡し（ステップＳ２２）、ブロックコピー生成部２３はロードしたブロックのコピーを検査ドメイン２０内のＲＡＭ上に生成して内部で保存する（ステップＳ２３）。また、実行ドメイン通信部２１は、ロードされたコピー元のブロックを実行ドメイン１０のデバイスドライバ１２へ渡す（ステップＳ２４）。上述したように、これによって実行ドメイン１０でプログラムの実行が開始される。検査ドメイン２０では、ブロック検査部２４が、コピーされたブロックを対象として検査を行う（ステップＳ２５）。具体的には、ブロック検査部２４がコピーされたブロックのダイジェスト値を算出する。ブロック正常状態記憶部２５には、図７に示すように各ブロックが正常な場合のダイジェスト値が格納されているので、ブロック検査部２４は算出したダイジェスト値をブロック正常状態記憶部２５に格納されているダイジェスト値を比較することで、ストレージ３０内のブロックが正常であるか否か判断する。ロードしたブロックが正常である場合（Ｓ２６−ＹＥＳ）は、検査処理を終了し次のブロックロード要求を待つ。一方、ロードしたブロックのダイジェスト値が記憶されている値と異なり異常である場合（Ｓ２６−ＮＯ）は、ブロック検査部２４から検査ドメインメッセージ受信部１３に対して、その旨の通知を行う。実行ドメイン１０では、この通知を受けた場合は、プログラムの実行を停止する。
【００２６】
〈本実施形態の作用・効果〉
本実施形態においては、実行ドメインがプログラムを実行すると同時に、そのプログラムが検査ドメイン内でコピーされるので、検査ドメインから検査のために再度ストレージにアクセスする必要が無くなる。すなわち、ストレージに対するアクセスは一度だけであるため実行ドメインと検査ドメインとの間でアクセス競合が生じず、検査に伴う実行ドメインへの影響を最小限とすることができる。本実施形態では、検査ドメインにおいてロードしたプログラムのコピーをＲＡＭ上に生成するオーバヘッドが生じる。しかし、一般にＲＡＭへの操作時間はストレージに対する操作時間よりも小さいため、コピーによるオーバヘッドは小さい。
【００２７】
また、ＴｒｕｓｔＺｏｎｅやＸｅｎなどの仮想化技術により、実行ドメインのカーネルやデバイスドライバに変更を加えずに、下位層を制御することで実行ドメインからストレージへのアクセス要求を検査ドメインにリダイレクトできる。すなわち、実行環境側のプログラムを変更することなく、検査ドメインのみを追加することによってプログラムの検査が行える。
【符号の説明】
【００２８】
１０  実行ドメイン
１１  カーネル
１２  デバイスドライバ
１３  検査ドメインメッセージ受信部
２０  検査ドメイン
２１  実行ドメイン通信部
２２  ストレージドライバ
２３  ブロックコピー生成部
２４  ブロック検査部
２５  ブロック正常状態記憶部
３０  ストレージ
【図１】
2011150656.tif 000003
【図２】
2011150656.tif 000004
【図３】
2011150656.tif 000005
【図４】
2011150656.tif 000006
【図５】
2011150656.tif 000007
【図６】
2011150656.tif 000008
【図７】
2011150656.tif 000009