説明

プログラム検査システム

【課題】ストレージへのアクセス競合を発生させずに、プログラム実行と並列してプログラムの検査を行う。
【解決手段】実行ドメイン(10)と検査ドメイン(20)とを並列に実行するマルチコアシステムにおいて、実行ドメインからストレージ(30)に対するアクセスは禁止され、ストレージに対するアクセス要求は検査ドメインを介して行われる。実行ドメインからプログラムの取得要求を受け取った検査ドメインでは、ストレージから読み取ったプログラムを実行ドメインに渡すとともに、そのコピーを作成する。検査ドメインでは、コピーされたプログラムを対象として検査を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムの正当性を検証するプログラム検査技術に関し、特に、記憶装置を共有するマルチコアシステムにおけるプログラム検査技術に関する。
【背景技術】
【0002】
特許文献1にはランタイムでプログラムを検査する手法が提案されている。マルチコアプロセッサシステム上で、このようなランタイムのプログラム検査を利用する場合は、既存機能の動作環境(実行ドメイン)と並列実行できる動作環境(検査ドメイン)を導入する方法が考えられる。このようにプログラム実行とプログラム検査を並列実行することで、検査がプログラム実行に影響を与えないことが期待されるが、実際にはプログラムを保存する記憶装置(ストレージ)に対するアクセス競合によりプログラム実行のスループットに悪影響を与えてしまう。
【0003】
ストレージに対するアクセス競合によるスループットの低下を避けるために、本発明者は、実行ドメインがストレージにアクセスするときに検査ドメインに割り込みをかけることで、検査ドメインによる検査を中断する手法を提案している(特許文献2)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2004−171564号公報
【特許文献2】特開2009−282751号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、特許文献2の手法では、改ざんされた実行ドメイン内のプログラムが定期的に検査ドメインに割り込みをかけることで、プログラム検査を無効にして改ざん検知を免れるおそれがある。
【0006】
本発明は、特許文献2の手法とは異なる手法により、ストレージに対するアクセス競合に起因するスループット低下の問題を解決する。すわなち、本発明は、検査対象プログラムが格納されている記憶装置へのアクセス競合を発生させずに、プログラム実行と並列してプログラム検査を行うことを目的とする。
【課題を解決するための手段】
【0007】
上記課題を解決するために、本発明に係るプログラム検査システムは、プログラムを格納する記憶手段と、前記プログラムを実行するプログラム実行手段と、前記プログラムを検査する検査手段と、を有する。本プログラム検査システムは、マルチコアシステム上で動作するものであり、プログラム検査処理とプログラム実行処理を並列に行うことができるものである。
【0008】
なお、本明細書において、マルチコアシステムとは、複数のプロセッサコアを有するコンピュータシステムのことを意味する。したがって、1つのプロセッサパッケージの中に複数のプロセッサコアを含むシステムや、それぞれが1つのプロセッサコアを有する複数のプロセッサを含むシステムや、これらの組み合わせが、本明細書におけるマルチコアシステムに該当する。
【0009】
本発明におけるプログラム実行手段は、記憶手段からプログラムを読み出す際に、記憶
手段に直接アクセスせずに、検査手段に対してプログラムの取得を要求する。
【0010】
本発明における検査手段は、プログラム実行手段からのプログラムの取得要求に応じて記憶手段からプログラムを取得してプログラム実行手段へ送信するとともに、取得したプログラムのコピーを作成してコピーされたプログラムを対象に検査を実行する。
【0011】
このように、プログラム実行手段からは記憶手段へのアクセスを行わず、プログラム検査手段を介して記憶手段からプログラムを取得することで、記憶装置へのアクセスが統一され、両者の間でのアクセス競合が解消される。
【0012】
本発明において、検査手段は、正常なプログラムのダイジェスト値をあらかじめ記憶しており、前記コピーされたプログラムから算出されるダイジェスト値が記憶されたダイジェスト値と一致するか否かによって、プログラムが正常であるか否かを判断することができる。
【0013】
このようなダイジェスト値として、例えば、SHA−1などのハッシュ値を用いることが好適である。また、ダイジェスト値として、MD5やCRCなどのチェックサムを用いても良い。つまり、ダイジェスト値は、プログラムデータが異なるものであれば異なる値をとることが期待されるような値であれば、任意のものを採用可能である。
【0014】
本発明は、上記処理の少なくとも一部を含むプログラム検査方法、または、これらの方法を実現するためのプログラムとして捉えることもできる。上記手段および処理の各々は可能な限り互いに組み合わせて本発明を構成することができる。
【発明の効果】
【0015】
本発明によれば、検査対象プログラムが格納されている記憶装置へのアクセス競合を発生させずに、プログラム実行と並列してプログラム検査を行える。
【図面の簡単な説明】
【0016】
【図1】本実施形態に係るプログラム検査システムの構成を示す図。
【図2】本実施形態に係るプログラム検査システムをTrustZone(登録商標)を利用して実現した場合の構成を示す図。
【図3】本実施形態に係るプログラム検査システムをXenを利用して実現した場合の構成を示す図。
【図4】本実施形態に係るプログラム検査システムの全体的な処理の流れを示すフローチャート。
【図5】本実施形態に係るプログラム検査システムにおける、検査ドメインでの検査処理の流れを示すフローチャート。
【図6】ストレージ内におけるプログラムとブロックの対応関係を説明する図。
【図7】ブロック正常状態記憶部に記憶される正常なブロックのダイジェスト値を説明する図。
【発明を実施するための形態】
【0017】
以下に図面を参照して、この発明の好適な実施の形態を例示的に詳しく説明する。
【0018】
〈構成〉
図1に本実施形態に係るプログラム検査システムの構成図を示す。本実施形態は、マルチコアのCPUを有するマルチコアシステムであり、ストレージを共有している。そして、既存機能が動作する実行ドメインに加えて、並列に動作して実行ドメインを監視する検査ドメインを導入する。ドメインとは、プログラムが実行される仮想的な領域・環境を表
す。各ドメインは互いに独立しており原則として他のドメインにアクセスすることができない。ただし、ドメイン間のアクセスを制御する機構を設けることで、他のドメインに対するアクセスが許可されたドメインを設けることができる。ここで、検査ドメイン20は、改ざんなどの攻撃を受けないことが望まれるので、物理的な攻撃や他のドメインからの攻撃を受けないようにセキュアなドメインとして構築する。
【0019】
本実施形態では、プログラムを実行する環境である実行ドメインと、ストレージへのアクセスおよびプログラムの検査を行う検査ドメインの少なくとも2つのドメインを備える。実行ドメインが本発明におけるプログラム実行手段に相当し、検査ドメインが本発明におけるプログラム検査手段に相当する。
【0020】
本実施形態では、実行ドメイン10からストレージ30に対する直接のアクセスが禁止される。そこで、実行ドメイン10からストレージ30にアクセスする場合には、デバイスドライバ12は、検査ドメイン20にストレージ30へのアクセス要求を転送して、検査ドメイン20を介してストレージへアクセスする。
【0021】
なお、このような複数のドメインから構成されるマルチコアシステムは、例えば、ARM社のTrustZone(登録商標)技術によって実現することができる。図2に、TrustZone技術を利用して図1の構成を実現した場合の構成図を示す。この場合、TrustZone技術に対応したハードウェア(CPU等)を利用して、セキュアドメインと通常ドメインを構築する。TrustZone技術は、周辺機器へのアクセス制御機能を持ち、セキュアドメイン以外はストレージへのアクセスを不可にできるため、本実施形態に好適な環境である。この場合、通常ドメイン(実行ドメイン)とセキュアドメイン(検査ドメイン)との間の通信は、ドメイン間の通信を監視する、TrustZoneモニタソフトウェアを介して行わる。
【0022】
また、仮想化技術であるXenを用いて本実施形態を構築することもできる。図3にXenを利用して図1の構成を実現した場合の構成図を示す。Xenではマルチコアシステム上で、仮想マシンを提供するXen VMM(仮想マシンモニタ)を実行し、その上で複数のOSが実行される。仮想マシンの実行単位がドメインと呼ばれ、特権的なドメインであるドメイン0と、その他のドメイン(ドメインU)が存在する。ドメイン0は、実ハードウェアへのアクセスやその他のドメインを管理するものである。ドメインUからの周辺機器へのアクセスは仮想マシンであるVMMに対して行われ、その要求はドメイン0にリダイレクトされる。そして、ドメイン0が実際の周辺機器にアクセスして、アクセス結果をドメインUへ返す。Xenでは周辺機器に対するこのようなアクセス方式を提供するので、本実施形態を構築するために利用することができる。
【0023】
〈全体処理〉
図1における各機能部の役割を、処理の流れとともに説明する。図4は、本マルチコアシステムにおける全体処理の流れを示すフローチャートである。検査ドメイン20は、実行ドメイン10からのプログラムロード要求に応じてプログラムの検査を行うので、実行ドメインからのプログラムロード要求を待つ(ステップS10)。実行ドメイン10においてカーネル11がプログラムを実行する場合には、ストレージ30内のプログラムを取得するようデバイスドライバ12に対して要求する(ステップS11)。カーネル11からのプログラムロード要求を受けて、デバイスドライバ12は、検査ドメイン20に対してプログラムのロードを要求する(ステップS12)。なお、ストレージ30内には図6Aに示すようにブロックをまたがってプログラムが格納されているので、図6Bに示すようなプログラムとブロックの対応付けを記憶しているプログラム−ブロック変換部12aが要求されたプログラムに対応するブロックを決定する。そして、ブロックロード転送部12bが、このブロックをロードするように実行ドメイン通信部21を介して検査ドメイ
ン20に要求する。
【0024】
検査ドメイン20における処理は後で詳しく説明するので、ここでは簡単に説明する。検査ドメイン20が、プログラムの要求(ブロックロードの要求)を受け付ける(ステップS13)と、ストレージドライバ22がストレージ30から要求されてブロックをロードし、取得したブロックのコピーを生成するとともに、実行ドメイン10に送信する(ステップS14)。実行ドメイン10では、要求したプログラムを受け取ると、カーネル11がこのプログラムを実行する(S15)。一方、検査ドメイン20では、コピーしたプログラムを対象にして検査を行う(ステップS16)。プログラムに異常があれば、実行ドメイン10に通知して実行ドメイン10におけるプログラムの実行を停止させる。
【0025】
〈検査ドメインにおける検査処理〉
以下、検査ドメイン20における詳細な処理について、図5のフローチャートを参照して説明する。実行ドメイン通信部21が、実行ドメイン10のデバイスドライバ12からブロックロードの要求を受信すると(ステップS20)、ストレージドライバ22が、指定されたブロックをストレージ30からロードする(ステップS21)。ストレージドライバ22は、ロードしたブロックをブロックコピー生成部23に渡し(ステップS22)、ブロックコピー生成部23はロードしたブロックのコピーを検査ドメイン20内のRAM上に生成して内部で保存する(ステップS23)。また、実行ドメイン通信部21は、ロードされたコピー元のブロックを実行ドメイン10のデバイスドライバ12へ渡す(ステップS24)。上述したように、これによって実行ドメイン10でプログラムの実行が開始される。検査ドメイン20では、ブロック検査部24が、コピーされたブロックを対象として検査を行う(ステップS25)。具体的には、ブロック検査部24がコピーされたブロックのダイジェスト値を算出する。ブロック正常状態記憶部25には、図7に示すように各ブロックが正常な場合のダイジェスト値が格納されているので、ブロック検査部24は算出したダイジェスト値をブロック正常状態記憶部25に格納されているダイジェスト値を比較することで、ストレージ30内のブロックが正常であるか否か判断する。ロードしたブロックが正常である場合(S26−YES)は、検査処理を終了し次のブロックロード要求を待つ。一方、ロードしたブロックのダイジェスト値が記憶されている値と異なり異常である場合(S26−NO)は、ブロック検査部24から検査ドメインメッセージ受信部13に対して、その旨の通知を行う。実行ドメイン10では、この通知を受けた場合は、プログラムの実行を停止する。
【0026】
〈本実施形態の作用・効果〉
本実施形態においては、実行ドメインがプログラムを実行すると同時に、そのプログラムが検査ドメイン内でコピーされるので、検査ドメインから検査のために再度ストレージにアクセスする必要が無くなる。すなわち、ストレージに対するアクセスは一度だけであるため実行ドメインと検査ドメインとの間でアクセス競合が生じず、検査に伴う実行ドメインへの影響を最小限とすることができる。本実施形態では、検査ドメインにおいてロードしたプログラムのコピーをRAM上に生成するオーバヘッドが生じる。しかし、一般にRAMへの操作時間はストレージに対する操作時間よりも小さいため、コピーによるオーバヘッドは小さい。
【0027】
また、TrustZoneやXenなどの仮想化技術により、実行ドメインのカーネルやデバイスドライバに変更を加えずに、下位層を制御することで実行ドメインからストレージへのアクセス要求を検査ドメインにリダイレクトできる。すなわち、実行環境側のプログラムを変更することなく、検査ドメインのみを追加することによってプログラムの検査が行える。
【符号の説明】
【0028】
10 実行ドメイン
11 カーネル
12 デバイスドライバ
13 検査ドメインメッセージ受信部
20 検査ドメイン
21 実行ドメイン通信部
22 ストレージドライバ
23 ブロックコピー生成部
24 ブロック検査部
25 ブロック正常状態記憶部
30 ストレージ

【特許請求の範囲】
【請求項1】
プログラムを格納する記憶手段と、
前記プログラムを実行するプログラム実行手段と、
前記プログラムを検査する検査手段と、
を有し、前記プログラムの検査と実行をマルチコアシステムにより並列に実行するプログラム検査システムであって、
前記プログラム実行手段は、前記記憶手段からプログラムを読み出す際に、前記記憶手段に直接アクセスせずに、前記検査手段に対してプログラムの取得を要求し、
前記検査手段は、前記プログラム実行手段からのプログラムの取得要求に応じて前記記憶手段からプログラムを取得して前記プログラム実行手段へ送信するとともに、当該プログラムのコピーを作成してコピーされたプログラムを対象に検査を実行する
ことを特徴とするプログラム検査システム。
【請求項2】
前記検査手段は、正常なプログラムのダイジェスト値をあらかじめ記憶しており、前記コピーされたプログラムから算出されるダイジェスト値が記憶されたダイジェスト値と一致するか否かによって、プログラムが正常であるか否かを判断する
ことを特徴とする請求項1に記載のプログラム検査システム。
【請求項3】
プログラムを格納する記憶手段と、
前記プログラムを実行するプログラム実行手段と、
前記プログラムを検査する検査手段と、
を有し、前記プログラムの検査と実行をマルチコアシステムにより並列に実行するプログラム検査システムにおけるプログラム検査方法であって、
前記プログラム実行手段が、前記検査手段に対してプログラムの取得を要求するプログラム取得要求工程と、
前記検査手段が、前記プログラム実行手段からのプログラムの取得要求に応じて前記記憶手段からプログラムを取得するステップと、取得されたプログラムを前記プログラム実行手段へ送信するステップと、取得されたプログラムのコピーを作成してコピーされたプログラムを対象に検査するステップとを行う検査工程と、
を含むプログラム検査方法。
【請求項4】
前記検査手段には、正常なプログラムのダイジェスト値があらかじめ記憶されており、
前記検査するステップでは、前記コピーされたプログラムから算出されるダイジェスト値が記憶されたダイジェスト値と一致するか否かによって、プログラムが正常であるか否かを判断する
ことを特徴とする請求項3に記載のプログラム検査方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2011−150656(P2011−150656A)
【公開日】平成23年8月4日(2011.8.4)
【国際特許分類】
【出願番号】特願2010−13445(P2010−13445)
【出願日】平成22年1月25日(2010.1.25)
【出願人】(502087460)株式会社トヨタIT開発センター (232)
【出願人】(000003207)トヨタ自動車株式会社 (59,920)
【Fターム(参考)】