説明

情報処理装置およびファイル検証システム

【課題】完全性が保証されたカーネルから、完全性が保証されたユーザアプリケーションを起動することができる情報処理装置を提供する。
【解決手段】カーネルが改竄されていないことが確認できた場合にカーネルが起動され、カーネルの稼働中は、メモリ11のカーネル領域110に対するユーザアプリケーションからのアクセスが禁止される。また、完全性の保証されたカーネルによって、ユーザアプリケーションが改竄されていないことが確認できた場合にユーザアプリケーションが起動される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、セキュリティの向上を図った情報処理装置に関する。また、本発明は、本情報処理装置内のファイルの完全性を検証するファイル検証システムにも関する。
【背景技術】
【0002】
公開サーバへ侵入し、公開サーバ内のデータやアプリケーションを改竄する事件が多発している。多くの公開サーバはデータセンタで運用されており、サーバ管理者は、リモートアクセスによって公開サーバにアクセスして検証用アプリケーションを起動し、検証用アプリケーションが出力する検証結果によって公開サーバ内の侵入の痕跡や改竄の有無を検証(リモート検証)する。
【0003】
しかし、一旦サーバへの侵入を許してしまうと、Rootkitをカーネルに埋め込んで応答を偽る攻撃や、検証用アプリケーションを改竄して応答を偽る攻撃、検証結果を改竄する攻撃など、検証結果の完全性を担保できない問題がある。これに対して、昨今のサーバの多くには、Trusted Platform Module(TPM)と呼ばれる、耐タンパ性を有するチップが搭載されており、サーバの起動時にカーネルとアプリケーションの完全性(改竄されていないこと)をリモート検証する仕組みはあった。
【0004】
TPMは、外部からアクセスできない領域を持ったチップであり、その安全な領域に暗号鍵や電子署名用のプログラムが保存されている。TPMは、ホストが起動するタイミングで、カーネルとアプリケーケーションの状態をハッシュ値として保存し、リモートアクセスによる要求に従い、電子署名を施したハッシュ値を返信する。これによって、リモートアクセスしたサーバ管理者は起動時のホストの状態を把握することができる。TPMが実行する処理は、サーバのカーネルから独立している。これによって、カーネルが改竄された場合でも、その影響を受けない仕組みが実現されている。
【0005】
また、稼働中のカーネルの完全性を保証する仕組みとして、SecVisor(非特許文献1参照)と呼ばれる技術がある。SecVisorは、メモリ上で稼動中のカーネル領域に対するユーザ空間(ユーザアプリケーション)からのアクセスを禁止する仕組みを実現している。さらに、SecVisorは、カーネルの起動時にカーネルの状態を検証し、カーネルの完全性が確認された場合にのみ起動処理を継続する仕組みも持つ。したがって、SecVisorによって、起動時ならびに稼動中のカーネルの完全性を保証することができる。
【0006】
また、ユーザアプリケーションの完全性を保証する仕組みとして、DigSig(非特許文献2参照)と呼ばれる技術がある。DigSigは、ユーザアプリケーションに電子署名を施しておき、アプリケーションの起動時に、電子署名による認証を行うことで、信頼された完全なアプリケーションのみを起動させる制御を実現している。
【先行技術文献】
【非特許文献】
【0007】
【非特許文献1】A. Seshadri, M. Luk, N. Qu, and A. Perrig, “SecVisor: A Tiny Hypervisor to Provide Lifetime Kernel Code Integrity for Commodity OSes,” 21st ACM Symposium on Operating Systems Principles, October, 2007
【非特許文献2】A. Apvrille, M. Pourzandi, D. Gordon, V. Roy, "Stop Malicious Code Execution at Kernel Level," Linux World, Vol.2, No.1, January 2004
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかし、TPMでは、起動時のみしかカーネルとアプリケーションの完全性を保証することができず、稼動中のサーバに対するバッファオーバフロー攻撃などによる侵入を受けた場合に、カーネルとアプリケーションの完全性を保証できない。また、SecVisorでは、カーネルの完全性を常に担保できるものの、ユーザアプリケーションの完全性を保証できない。また、DigSigでは、起動時のアプリケーションの完全性は保証できるものの、カーネルの完全性を保証できない。
【0009】
本発明は、上述した課題に鑑みてなされたものであって、完全性が保証されたカーネルから、完全性が保証されたユーザアプリケーションを起動することができる情報処理装置およびファイル検証システムを提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明は、上記の課題を解決するためになされたもので、OSのカーネルおよびユーザアプリケーションのプログラムを記憶するプログラム記憶手段と、前記カーネルのプログラムが格納されるカーネル領域と、前記ユーザアプリケーションのプログラムが格納されるユーザ領域とを有するメモリと、前記カーネルの起動時に当該カーネルの完全性を検証するカーネル検証手段と、前記メモリに格納されたプログラムに従って処理を実行するCPUと、前記ユーザアプリケーションから前記カーネル領域に対するデータの書き込みを禁止する禁止手段と、を備え、前記CPUは、前記カーネル検証手段によって、前記カーネルが改竄されていないことが確認できた場合に、前記カーネルのプログラムを前記プログラム記憶手段から前記カーネル領域に読み込んで前記カーネルを起動する処理と、前記カーネルによって、前記ユーザアプリケーションの起動時に前記ユーザアプリケーションの完全性を検証し、前記ユーザアプリケーションが改竄されていないことが確認できた場合に、前記ユーザアプリケーションのプログラムを前記プログラム記憶手段から前記ユーザ領域に読み込んで前記ユーザアプリケーションを起動する処理と、を実行することを特徴とする情報処理装置である。
【0011】
また、本発明の情報処理装置は、ファイルを記憶するファイル記憶手段をさらに有し、前記CPUはさらに、前記ユーザアプリケーションによって、前記ファイルのハッシュ値を算出する処理を実行することを特徴とする。
【0012】
また、本発明の情報処理装置において、前記CPUはさらに、前記カーネルによって、前記ハッシュ値に電子署名を施す処理を実行することを特徴とする。
【0013】
また、本発明は、情報処理装置とファイル検証装置を備えたファイル検証システムであって、前記情報処理装置は、OSのカーネルおよびユーザアプリケーションのプログラムを記憶するプログラム記憶手段と、前記カーネルのプログラムが格納されるカーネル領域と、前記ユーザアプリケーションのプログラムが格納されるユーザ領域とを有するメモリと、前記カーネルの起動時に当該カーネルの完全性を検証するカーネル検証手段と、前記メモリに格納されたプログラムに従って処理を実行するCPUと、前記ユーザアプリケーションから前記カーネル領域に対するデータの書き込みを禁止する禁止手段と、ファイルを記憶するファイル記憶手段と、を備え、前記CPUは、前記カーネル検証手段によって、前記カーネルが改竄されていないことが確認できた場合に、前記カーネルのプログラムを前記プログラム記憶手段から前記カーネル領域に読み込んで前記カーネルを起動する処理と、前記カーネルによって、前記ユーザアプリケーションの起動時に前記ユーザアプリケーションの完全性を検証し、前記ユーザアプリケーションが改竄されていないことが確認できた場合に、前記ユーザアプリケーションのプログラムを前記プログラム記憶手段から前記ユーザ領域に読み込んで前記ユーザアプリケーションを起動する処理と、前記ユーザアプリケーションによって、前記ファイルのハッシュ値を算出する処理と、前記カーネルによって、前記ハッシュ値に電子署名を施す処理と、前記ユーザアプリケーションによって、前記ハッシュ値と前記電子署名を外部の端末へ送信する処理と、を実行し、前記ファイル検証装置は、前記情報処理装置から前記ハッシュ値と前記電子署名を受信する受信手段と、前記ハッシュ値に基づいて前記ファイルの完全性を検証する第1の検証手段と、前記電子署名に基づいて前記ハッシュ値の完全性を検証する第2の検証手段と、を備えたことを特徴とするファイル検証システムである。
【発明の効果】
【0014】
本発明によれば、カーネルが改竄されていないことが確認できた場合にカーネルが起動され、カーネルの稼働中は、カーネル領域に対するユーザアプリケーションからのアクセスが禁止されるため、起動時および稼働中のカーネルの完全性が保証される。また、完全性の保証されたカーネルによって、ユーザアプリケーションが改竄されていないことが確認できた場合にユーザアプリケーションが起動されるので、起動時のユーザアプリケーションの完全性が保証される。したがって、完全性が保証されたカーネルから、完全性が保証されたユーザアプリケーションを起動することができる。
【図面の簡単な説明】
【0015】
【図1】本発明の一実施形態による情報処理装置の構成を示すブロック図である。
【図2】本発明の一実施形態において、カーネルを起動するときの処理の様子を示す参考図である。
【図3】完全性が確認されたカーネルからユーザアプリケーションを起動するときの処理の様子を示す参考図である。
【図4】本発明の一実施形態において、カーネル領域へのアクセスを禁止する処理の様子を示す参考図である。
【図5】本発明の一実施形態において、カーネル領域へのアクセスを禁止する処理の様子を示す参考図である。
【図6】本発明の一実施形態において、検証用アプリケーションがシステムファイルの状態を確認するときの処理の様子を示す参考図である。
【発明を実施するための形態】
【0016】
以下、図面を参照し、本発明の実施形態を説明する。図1は、本発明の一実施形態による情報処理装置の構成を示している。図1に示す情報処理装置は、HDD(ハードディスクドライブ)10、メモリ11、CPU12、DMA13、メモリ管理部14、カーネル起動制御部15を備えて構成されている。これらの構成はバス20に接続されている。
【0017】
HDD10は、OS(オペレーティングシステム)の根幹をなすカーネルが実行する処理を規定するカーネルプログラムや、OSの動作に必要なシステムファイル、各種アプリケーションが実行する処理を規定するユーザアプリケーションプログラム等を記憶する。メモリ11は、CPU12が実行するプログラムや、演算に必要なデータを一時的に記憶する。メモリ11は、カーネルプログラムが格納されるカーネル領域110と、ユーザアプリケーションプログラムが格納されるユーザ領域111とを備えている。さらに、カーネル領域110は、カーネルプログラム自体が格納されるプログラム領域と、起動したカーネルプログラムが処理を行うために必要なデータが格納されるデータ領域とを備えている。
【0018】
CPU12は、メモリ11に格納された各種プログラムに従った処理を実行することで各種機能を実現する。カーネルプログラムがHDD10からメモリ11のカーネル領域110に読み込まれてカーネルが起動されると、CPU12は、プロセス管理やメモリ管理等のカーネルの機能に係る処理を実行する。また、ユーザアプリケーションプログラムがHDD10からメモリ11のユーザ領域111に読み込まれてユーザアプリケーションが起動されると、CPU12は、画像処理やデータ通信等のユーザアプリケーションの機能に係る処理を実行する。
【0019】
DMA(Direct Memory Access)13は、CPU12を介さずにメモリ11とハードウェアの間でデータ転送を行うことが可能なハードウェアである。メモリ管理部14は、メモリ11に対するアクセスを管理する。CPU12によるメモリ11へのアクセスは、メモリ管理部14内のMMU(Memory Management Unit)によって管理され、DMA13によるメモリ11へのアクセスは、メモリ管理部14内のIOMMU(Input/Output MMU)によって管理される。メモリ管理部14内の一部の機能(例えばMMU)をCPU12に実装してもよい。カーネル起動制御部15は、情報処理装置の起動時にカーネルの起動を制御する。
【0020】
次に、本実施形態による情報処理装置の動作を説明する。本実施形態では、(1)完全なカーネルの起動、(2)完全なカーネルによる完全なユーザアプリケーションの起動、(3)稼働中のカーネルの完全性の担保、(4)完全な検証用アプリケーションがファイルの状態を確認した結果に対する完全なカーネルによる電子署名、が実現されている。
【0021】
(1)完全なカーネルの起動
情報処理装置の起動時にCPU12は、図示せぬROMからメモリ11のカーネル領域110にBIOS(Basic Input/Output System)のプログラムを読み込むことによってBIOSを起動する。続いて、CPU12は、BIOSによって、HDD10のMBR(Master Boot Record)からメモリ11のカーネル領域110にブートローダのプログラムを読み込むことによってブートローダを起動する。続いて、CPU12は、ブートローダによって、HDD10からメモリ11のカーネル領域110にカーネルプログラムを読み込むことによってカーネルを起動する。以上のようにしてカーネルが起動される。
【0022】
図2は、カーネルを起動するときの処理の様子を示している。カーネル起動制御部15は、外部から改竄できない、耐タンパ性を有するチップであり、処理を実行するCPUや、データを格納するためのメモリを内部に備えている。カーネル起動制御部15は、前述したTPMによって実現される。以下、カーネル起動制御部15の動作を説明する。
【0023】
情報処理装置が初めて起動されるとき、カーネル起動制御部15は、BIOS21、ブートローダ22、カーネル23のそれぞれのプログラムからハッシュ値を算出する。ハッシュ値は、ハッシュ関数を用いて算出される値であり、入力値に対して一意となる値である。カーネル起動制御部15は、算出したBIOS21、ブートローダ22、カーネル23のそれぞれのハッシュ値を内部のメモリに保持する。この時点では、BIOS21、ブートローダ22、カーネル23は改竄されていないものとする。
【0024】
2回目以後の起動時にカーネル起動制御部15は、まず、BIOS21のプログラムのハッシュ値を算出し、そのハッシュ値を、内部のメモリに保持しているBIOS21のプログラムのハッシュ値と比較する。両方のハッシュ値が異なる場合、BIOS21が改竄されている可能性があるため、カーネル起動制御部15は、BIOS21の起動を中止する命令をCPU12に送る。この命令を受け取ったCPU12はBIOS21の起動を中止する。
【0025】
一方、両方のハッシュ値が同一である場合、BIOS21が改竄されていないことが確認できたので、カーネル起動制御部15は処理をCPU12に受け渡し、CPU12はBIOS21を起動する。続いて、カーネル起動制御部15は、ブートローダ22のプログラムのハッシュ値を算出し、そのハッシュ値を、内部のメモリに保持しているブートローダ22のプログラムのハッシュ値と比較する。両方のハッシュ値が異なる場合、ブートローダ22が改竄されている可能性があるため、カーネル起動制御部15は、ブートローダ22の起動を中止する命令をCPU12に送る。この命令を受け取ったCPU12はブートローダ22の起動を中止する。
【0026】
一方、両方のハッシュ値が同一である場合、ブートローダ22が改竄されていないことが確認できたので、カーネル起動制御部15は処理をCPU12に受け渡し、CPU12はブートローダ22を起動する。続いて、カーネル起動制御部15は、カーネル23のプログラムのハッシュ値を算出し、そのハッシュ値を、内部のメモリに保持しているカーネル23のプログラムのハッシュ値と比較する。両方のハッシュ値が異なる場合、カーネル23が改竄されている可能性があるため、カーネル起動制御部15は、カーネル23の起動を中止する命令をCPU12に送る。この命令を受け取ったCPU12はカーネル23の起動を中止する。
【0027】
一方、両方のハッシュ値が同一である場合、カーネル23が改竄されていないことが確認できたので、カーネル起動制御部15は処理をCPU12に受け渡し、CPU12はカーネル23を起動する。以上のようにして、完全性が保証されたカーネル23を起動することができる。上記では、TPMによって完全なカーネルを起動する方法を実現しているが、前述したSecVisorを利用した場合も、同様にハッシュ値によりカーネルの完全性を確認してからカーネルを起動する方法を実現することができる。
【0028】
(2)完全なカーネルによる完全なユーザアプリケーションの起動
図3は、上記により完全性が確認されたカーネルからユーザアプリケーションを起動するときの処理の様子を示している。図3および後述する図6において、カーネル空間30およびユーザ空間40は、CPU12およびメモリ11のリソースを含んで構成されている。
【0029】
カーネル空間30は、カーネルとしての機能を実現するための処理を実行するCPU12のリソースと、その処理を実行するためにメモリ11に割り当てられたカーネル領域110とを含んでいる。また、ユーザ空間40は、ユーザアプリケーションとしての機能を実現するための処理を実行するCPU12のリソースと、その処理を実行するためにメモリ11に割り当てられたユーザ領域111とを含んでいる。
【0030】
カーネル空間30に属する起動制御部31は、プロセスがユーザアプリケーションを起動するときにカーネルに対して行うシステムコール(起動要求)を検出し、ユーザアプリケーションの起動を制御する。Linux(登録商標)には、カーネルにおいてセキュリティ機能を拡張するフレームワークであるLinux(登録商標) Security Module(LSM)が実装されている。LSMでは、ファイルやプロセスの操作が行われた際に、ユーザが定義したセキュリティ検証機構を呼び出して権限の検証やログの生成を行うための監視ポイントが設けられている。カーネル空間30に属する起動制御部31は、このLSMの監視ポイントに相当する。
【0031】
検証部32は、起動制御部31によってユーザアプリケーションの起動要求が検出された場合に、ユーザアプリケーションプログラムの完全性を検証する。この検証を行うため、検証部32は検証に必要な公開鍵Kpを有している。起動制御部31および検証部32が動作している間、これらの実体(プログラム)はメモリ11のカーネル領域110内のプログラム領域に格納されている。また、HDD10に格納されているアプリケーションプログラムには、検証部32が有する公開鍵Kpに対応する秘密鍵でアプリケーションプログラムのハッシュ値が暗号化された電子署名が予め付加されている。
【0032】
ユーザアプリケーションは以下のようにして起動される。まず、カーネル空間30またはユーザ空間40上の何らかのプロセスがユーザアプリケーションを起動するためにシステムコール(起動要求)を発生する(ステップS100)。起動制御部31はこの起動要求を検出し、検証部32に処理を受け渡す(ステップS110)。検証部32は、起動を要求されたユーザアプリケーションプログラムをHDD10からメモリ11のカーネル領域110内のデータ領域に読み込む(ステップS120)。
【0033】
検証部32は、ユーザアプリケーションに付加されている電子署名を公開鍵Kpで復号し、ハッシュ値を得る。また、検証部32は、ユーザアプリケーションプログラムからハッシュ値を算出する。そして、検証部32は、電子署名を復号して得たハッシュ値と、ユーザアプリケーションプログラムから算出したハッシュ値とを比較することによって、ユーザアプリケーションの完全性を検証する(ステップS130)。
【0034】
両方のハッシュ値が異なる場合、ユーザアプリケーションプログラムが改竄されている可能性がある。また、両方のハッシュ値が一致した場合、ユーザアプリケーションプログラムの完全性が保証される。検証部32は検証結果を起動制御部31に通知する(ステップS140)。
【0035】
通知を受けた起動制御部31は、検証結果に基づいてアプリケーションの起動を制御する。検証の結果、改竄が検知された場合には、起動制御部31はアプリケーションの起動処理を中止する。また、検証の結果、ユーザアプリケーションプログラムの完全性が確認できた場合には、起動制御部31は、カーネル領域110内のデータ領域に格納されているユーザアプリケーションプログラムをユーザ領域111に移動し、ユーザアプリケーションを起動させる(ステップS150)。
【0036】
カーネル空間30内の起動制御部31と検証部32の完全性はカーネルの起動時に保証されており、また、後述するように稼働中のカーネルの完全性も保証されることから、上記のようにしてカーネル空間30から起動されたユーザアプリケーションの完全性が保証される。上記と同様の方法はDigSigによっても実現されている。
【0037】
(3)稼働中のカーネルの完全性の担保
稼働中のカーネルの完全性は以下の3つの方法により担保される。これらの方法のうち1つだけを実装しても効果は得られるが、全ての方法を実装することで、カーネルの完全性をより高めることもできる。また、これらの方法と同様の方法がSecVisorによっても実現されている。
【0038】
図4は第1の方法を示している。メモリ11において、カーネル領域110として割り当てられる領域は予め固定されており、メモリ管理部14はカーネル領域110のアドレスを保持している。DMA13がメモリ11にアクセスするため、アクセスしたいメモリ11のアドレスをメモリ管理部14へ出力すると、メモリ管理部14は、DMA13から出力されたアドレスとカーネル領域110のアドレスとを比較する。
【0039】
DMA13から出力されたアドレスがカーネル領域110のアドレスに相当しない場合、すなわちDMA13がカーネル領域110以外の領域にアクセスしようとしている場合(図4のアクセス50)、メモリ管理部14はアクセスを許可する。また、DMA13から出力されたアドレスがカーネル領域110のアドレスに相当する場合、すなわちDMA13がカーネル領域110にアクセスしようとしている場合(図4のアクセス51)、メモリ管理部14はアクセスを禁止する。このようにして、DMA13からカーネル領域110に不正な上書きが行われることを防止し、稼働中のカーネルの完全性を保証することができる。
【0040】
図5は第2の方法を示している。一般的にコンピュータではメモリ管理方式として仮想記憶が採用されている。CPU12から見たメモリ11のアドレスは仮想アドレスであり、メモリ11の物理アドレス(実アドレス)とは異なる。メモリ管理部14は仮想アドレスと物理アドレスの対応関係を変換テーブルとして保持している。ユーザアプリケーションの起動時や終了時にCPU12は、カーネルの機能によって、変換テーブルの再構成を実行する。
【0041】
本実施形態では、変換テーブルとして、カーネル用とユーザアプリケーション用の2種類の変換テーブルが用いられる。ユーザアプリケーション用の変換テーブルでは、カーネル領域110に対応する仮想アドレスにはカーネル領域110の物理アドレスではなく、カーネル領域110以外の物理アドレスが割り当てられている。メモリ11にアクセスする要求が発生すると、CPU12はその要求がカーネルとユーザアプリケーションのどちらからの要求であるのかを判別し、要求元を識別する情報と共にアクセス先のメモリ11の仮想アドレスをメモリ管理部14へ出力する。
【0042】
メモリ管理部14は、変換テーブルに基づいて、CPU12から出力された仮想アドレスを物理アドレスに変換する。要求元がカーネルである場合、メモリ管理部14はカーネル用の変換テーブルにより仮想アドレスを物理アドレスに変換する。カーネル用の変換テーブルではカーネルはカーネル領域110にアクセスすることができる。また、要求元がユーザアプリケーションである場合、メモリ管理部14はユーザアプリケーション用の変換テーブルにより仮想アドレスを物理アドレスに変換する。具体的には以下のようになる。
【0043】
CPU12から出力された仮想アドレスがカーネル領域110の物理アドレスに相当しない場合、すなわちCPU12がカーネル領域110以外の領域にアクセスしようとしている場合(図5のアクセス52)、その領域の物理アドレスがメモリ管理部14からメモリ11へ出力される。また、CPU12から出力された仮想アドレスがカーネル領域110の物理アドレスに相当する場合、すなわちCPU12がカーネル領域110にアクセスしようとしている場合(図5のアクセス53)、CPU12がアクセスしようとしていたカーネル領域110とは異なる領域の物理アドレスがメモリ管理部14からメモリ11へ出力される。したがって、ユーザアプリケーションがカーネル領域110に書き込みを行おうとしても、カーネル領域110以外の領域に書き込みを行うことになる。このようにして、ユーザアプリケーションによってカーネル領域110に不正な上書きが行われることを防止し、稼働中のカーネルの完全性を保証することができる。
【0044】
第3の方法は、カーネルのバッファオーバフロー攻撃を防止することによって、カーネル領域110に不正な上書きが行われることを防止する方法である。カーネルのバッファオーバフロー攻撃では、カーネル領域110のデータ領域に悪意の実行プログラムが格納され、この実行プログラムがデータ領域上で起動され、悪意の処理が実行される。また、この処理によってカーネル領域110のプログラム領域に書き込みが行われ、カーネルプログラムが改竄されてしまう。
【0045】
そこで、CPU12は、カーネルプログラムに従って、カーネル領域110のデータ領域の実行権限を実行不可とする設定を行う。したがって、ユーザアプリケーションによってカーネル領域110のデータ領域に悪意の実行プログラムが格納された場合でも、その実行プログラムの実行が許可されないので、カーネル領域110に不正な上書きが行われることを防止し、稼働中のカーネルの完全性を保証することができる。
【0046】
(4)完全な検証用アプリケーションがファイルの状態を確認した結果に対する完全なカーネルによる電子署名
図6は、検証用アプリケーションがHDD10内のシステムファイルの状態を確認するときの処理の様子を示している。ユーザ空間40に属する検証用アプリケーション41は、図3に示した処理により起動されたユーザアプリケーションである。完全性が保証されている起動制御部31と検証部32の処理によって検証用アプリケーション41が起動されているので、検証用アプリケーション41の完全性が保証されている。
【0047】
カーネル空間30に属するハッシュインタフェース33は、カーネルとユーザアプリケーションの間でデータの入出力を行うためのキャラクタベースのインタフェースである。カーネル空間30に属する署名部34は秘密鍵Ksを保持しており、この秘密鍵Ksで暗号化を行い、電子署名を生成する。
【0048】
検証用アプリケーション41は以下のようにしてHDD10内のシステムファイルの検証を行う。まず、検証用アプリケーション41はHDD10からメモリ11のユーザ領域111にシステムファイルを読み込み、システムファイルのハッシュ値を算出する。このハッシュ値はシステムファイルの状態を表しており、システムファイルが改竄されると、ハッシュ値が変化することになる。検証用アプリケーション41は、システムファイルを識別する情報(ファイル名等)と、算出したハッシュ値とを関連付けてリスト化したハッシュ値リストをユーザ領域111に保持する。また、検証用アプリケーション41は、ハッシュ値リスト全体からさらにハッシュ値を算出する(ステップS200)
【0049】
検証用アプリケーション41は、ハッシュインタフェース33へハッシュ値リストのハッシュ値を出力し、署名を要求する(ステップS210)。ハッシュインタフェース33はハッシュ値を署名部34に渡す(ステップS220)。
【0050】
署名部34は、受け取ったハッシュ値を秘密鍵Ksで暗号化し、電子署名を生成する。署名部34は、生成した電子署名をハッシュインタフェース33に渡す(ステップS230)。ハッシュインタフェース33は電子署名を検証用アプリケーション41へ出力する(ステップS240)。検証用アプリケーション41は、保持しているハッシュ値リストに対して電子署名を付加し、HDD10に格納する(ステップS250)。
【0051】
上記のようにしてHDD10に格納されたハッシュ値リストに基づいて、HDD10上のシステムファイルが改竄されているか否かを検証することができる。すなわち、所定のシステムファイルについて第1のタイミングで取得されたハッシュ値リスト内のハッシュ値と、第2のタイミングで取得されたハッシュ値リスト内のハッシュ値とを比較し、両方のハッシュ値が一致していなければ、システムファイルが改竄されたことを検知することができる。また、両方のハッシュ値が一致していれば、システムファイルが改竄されていないことを確認することができる。
【0052】
一方、ハッシュ値リストに付加されている電子署名を検証することにより、ハッシュ値リストが改竄されているか否かを検証することができる。すなわち、ハッシュ値リストに付加されている電子署名を秘密鍵Ksに対応する公開鍵で復号して得たハッシュ値と、ハッシュ値リスト全体から算出したハッシュ値とを比較し、両方のハッシュ値が一致していなければ、ハッシュ値リストが改竄されたことを検知することができる。また、両方のハッシュ値が一致していれば、ハッシュ値リストが改竄されていないことを確認することができる。
【0053】
上記の電子署名は、完全性が保証されているカーネルによって生成されたものなので、検証用アプリケーション41がシステムファイルの状態を確認した結果に対して、完全性の保証された電子署名を付加することができる。
【0054】
HDD10に格納されたハッシュ値リストの検証、およびハッシュ値リストに付加されている電子署名の検証をリモート側の端末(ファイル検証装置)で行うことが可能である。すなわち、CPU12は、通信を行うユーザアプリケーションによって、HDD10からハッシュ値リストを読み出し、リモート端末へ送信する処理を実行する。リモート端末はハッシュ値リストを受信し、自身のHDDに格納する。続いて、リモート端末は、HDDからハッシュ値リストを読み出し、上述したハッシュ値リストの検証、およびハッシュ値リストに付加されている電子署名の検証を行う。なお、リモート端末は、取得したハッシュ値リストと比較される正しいハッシュ値リストを予め保持しており、取得したハッシュ値リスト内のハッシュ値と、正しいハッシュ値とを比較することにより、HDD10上のシステムファイルが改竄されているか否かを検証する。
【0055】
上述したように、本実施形態によれば、カーネルが改竄されていないことが確認できた場合にカーネルが起動され、カーネルの稼働中は、メモリ11のカーネル領域110に対するユーザアプリケーションからのアクセスが禁止されるため、起動時および稼働中のカーネルの完全性が保証される。また、完全性の保証されたカーネルによって、ユーザアプリケーションが改竄されていないことが確認できた場合にユーザアプリケーションが起動されるので、起動時のユーザアプリケーションの完全性が保証される。したがって、完全性が保証されたカーネルから、完全性が保証されたユーザアプリケーションを起動することができる。また、完全性が保証された検証用アプリケーションを起動することによって、完全な検証用アプリケーションがファイルの状態を確認することができる。
【0056】
上記のように完全な検証用アプリケーションがファイルの状態を確認することができるが、検証用アプリケーションの出力結果であるハッシュ値リストがHDD10上で改竄される可能性がある。しかし、本実施形態では、ハッシュ値リストに対して、完全性が保証されたカーネルによる電子署名が付加されるので、その電子署名に基づいてHDD10上のハッシュ値リストの改竄を検知することができる。したがって、ハッシュ値リストの信頼性を向上することができる。
【0057】
本実施形態は公開サーバ等のサーバに適用可能なだけでなく、携帯電話等にも適用することが可能である。例えば、ユーザが所有する携帯電話の状態を電話会社がリモート検証したり、ユーザに貸し出したセットトップボックス等の家電製品の状態をサービス提供会社がリモート検証したりすることが可能である。
【0058】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【0059】
10・・・HDD(プログラム記憶手段、ファイル記憶手段)、11・・・メモリ、12・・・CPU、13・・・DMA、14・・・メモリ管理部(禁止手段)、15・・・カーネル起動制御部(カーネル検証手段)、20・・・バス、31・・・起動制御部、32・・・検証部、33・・・ハッシュインタフェース、34・・・署名部、110・・・カーネル領域、111・・・ユーザ領域

【特許請求の範囲】
【請求項1】
OSのカーネルおよびユーザアプリケーションのプログラムを記憶するプログラム記憶手段と、
前記カーネルのプログラムが格納されるカーネル領域と、前記ユーザアプリケーションのプログラムが格納されるユーザ領域とを有するメモリと、
前記カーネルの起動時に当該カーネルの完全性を検証するカーネル検証手段と、
前記メモリに格納されたプログラムに従って処理を実行するCPUと、
前記ユーザアプリケーションから前記カーネル領域に対するデータの書き込みを禁止する禁止手段と、
を備え、前記CPUは、
前記カーネル検証手段によって、前記カーネルが改竄されていないことが確認できた場合に、前記カーネルのプログラムを前記プログラム記憶手段から前記カーネル領域に読み込んで前記カーネルを起動する処理と、
前記カーネルによって、前記ユーザアプリケーションの起動時に前記ユーザアプリケーションの完全性を検証し、前記ユーザアプリケーションが改竄されていないことが確認できた場合に、前記ユーザアプリケーションのプログラムを前記プログラム記憶手段から前記ユーザ領域に読み込んで前記ユーザアプリケーションを起動する処理と、
を実行することを特徴とする情報処理装置。
【請求項2】
ファイルを記憶するファイル記憶手段をさらに有し、
前記CPUはさらに、前記ユーザアプリケーションによって、前記ファイルのハッシュ値を算出する処理を実行する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記CPUはさらに、前記カーネルによって、前記ハッシュ値に電子署名を施す処理を実行することを特徴とする請求項1に記載の情報処理装置。
【請求項4】
情報処理装置とファイル検証装置を備えたファイル検証システムであって、
前記情報処理装置は、
OSのカーネルおよびユーザアプリケーションのプログラムを記憶するプログラム記憶手段と、
前記カーネルのプログラムが格納されるカーネル領域と、前記ユーザアプリケーションのプログラムが格納されるユーザ領域とを有するメモリと、
前記カーネルの起動時に当該カーネルの完全性を検証するカーネル検証手段と、
前記メモリに格納されたプログラムに従って処理を実行するCPUと、
前記ユーザアプリケーションから前記カーネル領域に対するデータの書き込みを禁止する禁止手段と、
ファイルを記憶するファイル記憶手段と、
を備え、前記CPUは、
前記カーネル検証手段によって、前記カーネルが改竄されていないことが確認できた場合に、前記カーネルのプログラムを前記プログラム記憶手段から前記カーネル領域に読み込んで前記カーネルを起動する処理と、
前記カーネルによって、前記ユーザアプリケーションの起動時に前記ユーザアプリケーションの完全性を検証し、前記ユーザアプリケーションが改竄されていないことが確認できた場合に、前記ユーザアプリケーションのプログラムを前記プログラム記憶手段から前記ユーザ領域に読み込んで前記ユーザアプリケーションを起動する処理と、
前記ユーザアプリケーションによって、前記ファイルのハッシュ値を算出する処理と、
前記カーネルによって、前記ハッシュ値に電子署名を施す処理と、
前記ユーザアプリケーションによって、前記ハッシュ値と前記電子署名を外部の端末へ送信する処理と、
を実行し、
前記ファイル検証装置は、
前記情報処理装置から前記ハッシュ値と前記電子署名を受信する受信手段と、
前記ハッシュ値に基づいて前記ファイルの完全性を検証する第1の検証手段と、
前記電子署名に基づいて前記ハッシュ値の完全性を検証する第2の検証手段と、
を備えたことを特徴とするファイル検証システム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate