(57)【要約】【課題】完全性が保証されたカーネルから、完全性が保証されたユーザアプリケーションを起動することができる情報処理装置を提供する。【解決手段】カーネルが改竄されていないことが確認できた場合にカーネルが起動され、カーネルの稼働中は、メモリ１１のカーネル領域１１０に対するユーザアプリケーションからのアクセスが禁止される。また、完全性の保証されたカーネルによって、ユーザアプリケーションが改竄されていないことが確認できた場合にユーザアプリケーションが起動される。【選択図】図１
2010182196.tif 000002
【特許請求の範囲】
【請求項１】
OSのカーネルおよびユーザアプリケーションのプログラムを記憶するプログラム記憶手段と、
前記カーネルのプログラムが格納されるカーネル領域と、前記ユーザアプリケーションのプログラムが格納されるユーザ領域とを有するメモリと、
前記カーネルの起動時に当該カーネルの完全性を検証するカーネル検証手段と、
前記メモリに格納されたプログラムに従って処理を実行するCPUと、
前記ユーザアプリケーションから前記カーネル領域に対するデータの書き込みを禁止する禁止手段と、
を備え、前記CPUは、
前記カーネル検証手段によって、前記カーネルが改竄されていないことが確認できた場合に、前記カーネルのプログラムを前記プログラム記憶手段から前記カーネル領域に読み込んで前記カーネルを起動する処理と、
前記カーネルによって、前記ユーザアプリケーションの起動時に前記ユーザアプリケーションの完全性を検証し、前記ユーザアプリケーションが改竄されていないことが確認できた場合に、前記ユーザアプリケーションのプログラムを前記プログラム記憶手段から前記ユーザ領域に読み込んで前記ユーザアプリケーションを起動する処理と、
を実行することを特徴とする情報処理装置。
【請求項２】
ファイルを記憶するファイル記憶手段をさらに有し、
前記CPUはさらに、前記ユーザアプリケーションによって、前記ファイルのハッシュ値を算出する処理を実行する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記CPUはさらに、前記カーネルによって、前記ハッシュ値に電子署名を施す処理を実行することを特徴とする請求項１に記載の情報処理装置。
【請求項４】
情報処理装置とファイル検証装置を備えたファイル検証システムであって、
前記情報処理装置は、
OSのカーネルおよびユーザアプリケーションのプログラムを記憶するプログラム記憶手段と、
前記カーネルのプログラムが格納されるカーネル領域と、前記ユーザアプリケーションのプログラムが格納されるユーザ領域とを有するメモリと、
前記カーネルの起動時に当該カーネルの完全性を検証するカーネル検証手段と、
前記メモリに格納されたプログラムに従って処理を実行するCPUと、
前記ユーザアプリケーションから前記カーネル領域に対するデータの書き込みを禁止する禁止手段と、
ファイルを記憶するファイル記憶手段と、
を備え、前記CPUは、
前記カーネル検証手段によって、前記カーネルが改竄されていないことが確認できた場合に、前記カーネルのプログラムを前記プログラム記憶手段から前記カーネル領域に読み込んで前記カーネルを起動する処理と、
前記カーネルによって、前記ユーザアプリケーションの起動時に前記ユーザアプリケーションの完全性を検証し、前記ユーザアプリケーションが改竄されていないことが確認できた場合に、前記ユーザアプリケーションのプログラムを前記プログラム記憶手段から前記ユーザ領域に読み込んで前記ユーザアプリケーションを起動する処理と、
前記ユーザアプリケーションによって、前記ファイルのハッシュ値を算出する処理と、
前記カーネルによって、前記ハッシュ値に電子署名を施す処理と、
前記ユーザアプリケーションによって、前記ハッシュ値と前記電子署名を外部の端末へ送信する処理と、
を実行し、
前記ファイル検証装置は、
前記情報処理装置から前記ハッシュ値と前記電子署名を受信する受信手段と、
前記ハッシュ値に基づいて前記ファイルの完全性を検証する第１の検証手段と、
前記電子署名に基づいて前記ハッシュ値の完全性を検証する第２の検証手段と、
を備えたことを特徴とするファイル検証システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、セキュリティの向上を図った情報処理装置に関する。また、本発明は、本情報処理装置内のファイルの完全性を検証するファイル検証システムにも関する。
【背景技術】
【０００２】
公開サーバへ侵入し、公開サーバ内のデータやアプリケーションを改竄する事件が多発している。多くの公開サーバはデータセンタで運用されており、サーバ管理者は、リモートアクセスによって公開サーバにアクセスして検証用アプリケーションを起動し、検証用アプリケーションが出力する検証結果によって公開サーバ内の侵入の痕跡や改竄の有無を検証（リモート検証）する。
【０００３】
しかし、一旦サーバへの侵入を許してしまうと、Rootkitをカーネルに埋め込んで応答を偽る攻撃や、検証用アプリケーションを改竄して応答を偽る攻撃、検証結果を改竄する攻撃など、検証結果の完全性を担保できない問題がある。これに対して、昨今のサーバの多くには、Trusted Platform Module（TPM）と呼ばれる、耐タンパ性を有するチップが搭載されており、サーバの起動時にカーネルとアプリケーションの完全性（改竄されていないこと）をリモート検証する仕組みはあった。
【０００４】
TPMは、外部からアクセスできない領域を持ったチップであり、その安全な領域に暗号鍵や電子署名用のプログラムが保存されている。TPMは、ホストが起動するタイミングで、カーネルとアプリケーケーションの状態をハッシュ値として保存し、リモートアクセスによる要求に従い、電子署名を施したハッシュ値を返信する。これによって、リモートアクセスしたサーバ管理者は起動時のホストの状態を把握することができる。TPMが実行する処理は、サーバのカーネルから独立している。これによって、カーネルが改竄された場合でも、その影響を受けない仕組みが実現されている。
【０００５】
また、稼働中のカーネルの完全性を保証する仕組みとして、SecVisor（非特許文献１参照）と呼ばれる技術がある。SecVisorは、メモリ上で稼動中のカーネル領域に対するユーザ空間（ユーザアプリケーション）からのアクセスを禁止する仕組みを実現している。さらに、SecVisorは、カーネルの起動時にカーネルの状態を検証し、カーネルの完全性が確認された場合にのみ起動処理を継続する仕組みも持つ。したがって、SecVisorによって、起動時ならびに稼動中のカーネルの完全性を保証することができる。
【０００６】
また、ユーザアプリケーションの完全性を保証する仕組みとして、DigSig（非特許文献２参照）と呼ばれる技術がある。DigSigは、ユーザアプリケーションに電子署名を施しておき、アプリケーションの起動時に、電子署名による認証を行うことで、信頼された完全なアプリケーションのみを起動させる制御を実現している。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】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
【非特許文献２】A. Apvrille, M. Pourzandi, D. Gordon, V. Roy, "Stop Malicious Code Execution at Kernel Level," Linux World, Vol.2, No.1, January 2004
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、TPMでは、起動時のみしかカーネルとアプリケーションの完全性を保証することができず、稼動中のサーバに対するバッファオーバフロー攻撃などによる侵入を受けた場合に、カーネルとアプリケーションの完全性を保証できない。また、SecVisorでは、カーネルの完全性を常に担保できるものの、ユーザアプリケーションの完全性を保証できない。また、DigSigでは、起動時のアプリケーションの完全性は保証できるものの、カーネルの完全性を保証できない。
【０００９】
本発明は、上述した課題に鑑みてなされたものであって、完全性が保証されたカーネルから、完全性が保証されたユーザアプリケーションを起動することができる情報処理装置およびファイル検証システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、上記の課題を解決するためになされたもので、OSのカーネルおよびユーザアプリケーションのプログラムを記憶するプログラム記憶手段と、前記カーネルのプログラムが格納されるカーネル領域と、前記ユーザアプリケーションのプログラムが格納されるユーザ領域とを有するメモリと、前記カーネルの起動時に当該カーネルの完全性を検証するカーネル検証手段と、前記メモリに格納されたプログラムに従って処理を実行するCPUと、前記ユーザアプリケーションから前記カーネル領域に対するデータの書き込みを禁止する禁止手段と、を備え、前記CPUは、前記カーネル検証手段によって、前記カーネルが改竄されていないことが確認できた場合に、前記カーネルのプログラムを前記プログラム記憶手段から前記カーネル領域に読み込んで前記カーネルを起動する処理と、前記カーネルによって、前記ユーザアプリケーションの起動時に前記ユーザアプリケーションの完全性を検証し、前記ユーザアプリケーションが改竄されていないことが確認できた場合に、前記ユーザアプリケーションのプログラムを前記プログラム記憶手段から前記ユーザ領域に読み込んで前記ユーザアプリケーションを起動する処理と、を実行することを特徴とする情報処理装置である。
【００１１】
また、本発明の情報処理装置は、ファイルを記憶するファイル記憶手段をさらに有し、前記CPUはさらに、前記ユーザアプリケーションによって、前記ファイルのハッシュ値を算出する処理を実行することを特徴とする。
【００１２】
また、本発明の情報処理装置において、前記CPUはさらに、前記カーネルによって、前記ハッシュ値に電子署名を施す処理を実行することを特徴とする。
【００１３】
また、本発明は、情報処理装置とファイル検証装置を備えたファイル検証システムであって、前記情報処理装置は、OSのカーネルおよびユーザアプリケーションのプログラムを記憶するプログラム記憶手段と、前記カーネルのプログラムが格納されるカーネル領域と、前記ユーザアプリケーションのプログラムが格納されるユーザ領域とを有するメモリと、前記カーネルの起動時に当該カーネルの完全性を検証するカーネル検証手段と、前記メモリに格納されたプログラムに従って処理を実行するCPUと、前記ユーザアプリケーションから前記カーネル領域に対するデータの書き込みを禁止する禁止手段と、ファイルを記憶するファイル記憶手段と、を備え、前記CPUは、前記カーネル検証手段によって、前記カーネルが改竄されていないことが確認できた場合に、前記カーネルのプログラムを前記プログラム記憶手段から前記カーネル領域に読み込んで前記カーネルを起動する処理と、前記カーネルによって、前記ユーザアプリケーションの起動時に前記ユーザアプリケーションの完全性を検証し、前記ユーザアプリケーションが改竄されていないことが確認できた場合に、前記ユーザアプリケーションのプログラムを前記プログラム記憶手段から前記ユーザ領域に読み込んで前記ユーザアプリケーションを起動する処理と、前記ユーザアプリケーションによって、前記ファイルのハッシュ値を算出する処理と、前記カーネルによって、前記ハッシュ値に電子署名を施す処理と、前記ユーザアプリケーションによって、前記ハッシュ値と前記電子署名を外部の端末へ送信する処理と、を実行し、前記ファイル検証装置は、前記情報処理装置から前記ハッシュ値と前記電子署名を受信する受信手段と、前記ハッシュ値に基づいて前記ファイルの完全性を検証する第１の検証手段と、前記電子署名に基づいて前記ハッシュ値の完全性を検証する第２の検証手段と、を備えたことを特徴とするファイル検証システムである。
【発明の効果】
【００１４】
本発明によれば、カーネルが改竄されていないことが確認できた場合にカーネルが起動され、カーネルの稼働中は、カーネル領域に対するユーザアプリケーションからのアクセスが禁止されるため、起動時および稼働中のカーネルの完全性が保証される。また、完全性の保証されたカーネルによって、ユーザアプリケーションが改竄されていないことが確認できた場合にユーザアプリケーションが起動されるので、起動時のユーザアプリケーションの完全性が保証される。したがって、完全性が保証されたカーネルから、完全性が保証されたユーザアプリケーションを起動することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の一実施形態による情報処理装置の構成を示すブロック図である。
【図２】本発明の一実施形態において、カーネルを起動するときの処理の様子を示す参考図である。
【図３】完全性が確認されたカーネルからユーザアプリケーションを起動するときの処理の様子を示す参考図である。
【図４】本発明の一実施形態において、カーネル領域へのアクセスを禁止する処理の様子を示す参考図である。
【図５】本発明の一実施形態において、カーネル領域へのアクセスを禁止する処理の様子を示す参考図である。
【図６】本発明の一実施形態において、検証用アプリケーションがシステムファイルの状態を確認するときの処理の様子を示す参考図である。
【発明を実施するための形態】
【００１６】
以下、図面を参照し、本発明の実施形態を説明する。図１は、本発明の一実施形態による情報処理装置の構成を示している。図１に示す情報処理装置は、HDD（ハードディスクドライブ）１０、メモリ１１、CPU１２、DMA１３、メモリ管理部１４、カーネル起動制御部１５を備えて構成されている。これらの構成はバス２０に接続されている。
【００１７】
HDD１０は、OS（オペレーティングシステム）の根幹をなすカーネルが実行する処理を規定するカーネルプログラムや、OSの動作に必要なシステムファイル、各種アプリケーションが実行する処理を規定するユーザアプリケーションプログラム等を記憶する。メモリ１１は、CPU１２が実行するプログラムや、演算に必要なデータを一時的に記憶する。メモリ１１は、カーネルプログラムが格納されるカーネル領域１１０と、ユーザアプリケーションプログラムが格納されるユーザ領域１１１とを備えている。さらに、カーネル領域１１０は、カーネルプログラム自体が格納されるプログラム領域と、起動したカーネルプログラムが処理を行うために必要なデータが格納されるデータ領域とを備えている。
【００１８】
CPU１２は、メモリ１１に格納された各種プログラムに従った処理を実行することで各種機能を実現する。カーネルプログラムがHDD１０からメモリ１１のカーネル領域１１０に読み込まれてカーネルが起動されると、CPU１２は、プロセス管理やメモリ管理等のカーネルの機能に係る処理を実行する。また、ユーザアプリケーションプログラムがHDD１０からメモリ１１のユーザ領域１１１に読み込まれてユーザアプリケーションが起動されると、CPU１２は、画像処理やデータ通信等のユーザアプリケーションの機能に係る処理を実行する。
【００１９】
DMA（Direct Memory Access）１３は、CPU１２を介さずにメモリ１１とハードウェアの間でデータ転送を行うことが可能なハードウェアである。メモリ管理部１４は、メモリ１１に対するアクセスを管理する。CPU１２によるメモリ１１へのアクセスは、メモリ管理部１４内のMMU（Memory Management Unit）によって管理され、DMA１３によるメモリ１１へのアクセスは、メモリ管理部１４内のIOMMU（Input/Output MMU）によって管理される。メモリ管理部１４内の一部の機能（例えばMMU）をCPU１２に実装してもよい。カーネル起動制御部１５は、情報処理装置の起動時にカーネルの起動を制御する。
【００２０】
次に、本実施形態による情報処理装置の動作を説明する。本実施形態では、（１）完全なカーネルの起動、（２）完全なカーネルによる完全なユーザアプリケーションの起動、（３）稼働中のカーネルの完全性の担保、（４）完全な検証用アプリケーションがファイルの状態を確認した結果に対する完全なカーネルによる電子署名、が実現されている。
【００２１】
（１）完全なカーネルの起動
情報処理装置の起動時にCPU１２は、図示せぬROMからメモリ１１のカーネル領域１１０にBIOS（Basic Input/Output System）のプログラムを読み込むことによってBIOSを起動する。続いて、CPU１２は、BIOSによって、HDD１０のMBR（Master Boot Record）からメモリ１１のカーネル領域１１０にブートローダのプログラムを読み込むことによってブートローダを起動する。続いて、CPU１２は、ブートローダによって、HDD１０からメモリ１１のカーネル領域１１０にカーネルプログラムを読み込むことによってカーネルを起動する。以上のようにしてカーネルが起動される。
【００２２】
図２は、カーネルを起動するときの処理の様子を示している。カーネル起動制御部１５は、外部から改竄できない、耐タンパ性を有するチップであり、処理を実行するCPUや、データを格納するためのメモリを内部に備えている。カーネル起動制御部１５は、前述したTPMによって実現される。以下、カーネル起動制御部１５の動作を説明する。
【００２３】
情報処理装置が初めて起動されるとき、カーネル起動制御部１５は、BIOS２１、ブートローダ２２、カーネル２３のそれぞれのプログラムからハッシュ値を算出する。ハッシュ値は、ハッシュ関数を用いて算出される値であり、入力値に対して一意となる値である。カーネル起動制御部１５は、算出したBIOS２１、ブートローダ２２、カーネル２３のそれぞれのハッシュ値を内部のメモリに保持する。この時点では、BIOS２１、ブートローダ２２、カーネル２３は改竄されていないものとする。
【００２４】
２回目以後の起動時にカーネル起動制御部１５は、まず、BIOS２１のプログラムのハッシュ値を算出し、そのハッシュ値を、内部のメモリに保持しているBIOS２１のプログラムのハッシュ値と比較する。両方のハッシュ値が異なる場合、BIOS２１が改竄されている可能性があるため、カーネル起動制御部１５は、BIOS２１の起動を中止する命令をCPU１２に送る。この命令を受け取ったCPU１２はBIOS２１の起動を中止する。
【００２５】
一方、両方のハッシュ値が同一である場合、BIOS２１が改竄されていないことが確認できたので、カーネル起動制御部１５は処理をCPU１２に受け渡し、CPU１２はBIOS２１を起動する。続いて、カーネル起動制御部１５は、ブートローダ２２のプログラムのハッシュ値を算出し、そのハッシュ値を、内部のメモリに保持しているブートローダ２２のプログラムのハッシュ値と比較する。両方のハッシュ値が異なる場合、ブートローダ２２が改竄されている可能性があるため、カーネル起動制御部１５は、ブートローダ２２の起動を中止する命令をCPU１２に送る。この命令を受け取ったCPU１２はブートローダ２２の起動を中止する。
【００２６】
一方、両方のハッシュ値が同一である場合、ブートローダ２２が改竄されていないことが確認できたので、カーネル起動制御部１５は処理をCPU１２に受け渡し、CPU１２はブートローダ２２を起動する。続いて、カーネル起動制御部１５は、カーネル２３のプログラムのハッシュ値を算出し、そのハッシュ値を、内部のメモリに保持しているカーネル２３のプログラムのハッシュ値と比較する。両方のハッシュ値が異なる場合、カーネル２３が改竄されている可能性があるため、カーネル起動制御部１５は、カーネル２３の起動を中止する命令をCPU１２に送る。この命令を受け取ったCPU１２はカーネル２３の起動を中止する。
【００２７】
一方、両方のハッシュ値が同一である場合、カーネル２３が改竄されていないことが確認できたので、カーネル起動制御部１５は処理をCPU１２に受け渡し、CPU１２はカーネル２３を起動する。以上のようにして、完全性が保証されたカーネル２３を起動することができる。上記では、TPMによって完全なカーネルを起動する方法を実現しているが、前述したSecVisorを利用した場合も、同様にハッシュ値によりカーネルの完全性を確認してからカーネルを起動する方法を実現することができる。
【００２８】
（２）完全なカーネルによる完全なユーザアプリケーションの起動
図３は、上記により完全性が確認されたカーネルからユーザアプリケーションを起動するときの処理の様子を示している。図３および後述する図６において、カーネル空間３０およびユーザ空間４０は、CPU１２およびメモリ１１のリソースを含んで構成されている。
【００２９】
カーネル空間３０は、カーネルとしての機能を実現するための処理を実行するCPU１２のリソースと、その処理を実行するためにメモリ１１に割り当てられたカーネル領域１１０とを含んでいる。また、ユーザ空間４０は、ユーザアプリケーションとしての機能を実現するための処理を実行するCPU１２のリソースと、その処理を実行するためにメモリ１１に割り当てられたユーザ領域１１１とを含んでいる。
【００３０】
カーネル空間３０に属する起動制御部３１は、プロセスがユーザアプリケーションを起動するときにカーネルに対して行うシステムコール（起動要求）を検出し、ユーザアプリケーションの起動を制御する。Linux（登録商標）には、カーネルにおいてセキュリティ機能を拡張するフレームワークであるLinux（登録商標） Security Module（LSM）が実装されている。LSMでは、ファイルやプロセスの操作が行われた際に、ユーザが定義したセキュリティ検証機構を呼び出して権限の検証やログの生成を行うための監視ポイントが設けられている。カーネル空間３０に属する起動制御部３１は、このLSMの監視ポイントに相当する。
【００３１】
検証部３２は、起動制御部３１によってユーザアプリケーションの起動要求が検出された場合に、ユーザアプリケーションプログラムの完全性を検証する。この検証を行うため、検証部３２は検証に必要な公開鍵Kpを有している。起動制御部３１および検証部３２が動作している間、これらの実体（プログラム）はメモリ１１のカーネル領域１１０内のプログラム領域に格納されている。また、HDD１０に格納されているアプリケーションプログラムには、検証部３２が有する公開鍵Kpに対応する秘密鍵でアプリケーションプログラムのハッシュ値が暗号化された電子署名が予め付加されている。
【００３２】
ユーザアプリケーションは以下のようにして起動される。まず、カーネル空間３０またはユーザ空間４０上の何らかのプロセスがユーザアプリケーションを起動するためにシステムコール（起動要求）を発生する（ステップＳ１００）。起動制御部３１はこの起動要求を検出し、検証部３２に処理を受け渡す（ステップＳ１１０）。検証部３２は、起動を要求されたユーザアプリケーションプログラムをHDD１０からメモリ１１のカーネル領域１１０内のデータ領域に読み込む（ステップＳ１２０）。
【００３３】
検証部３２は、ユーザアプリケーションに付加されている電子署名を公開鍵Kpで復号し、ハッシュ値を得る。また、検証部３２は、ユーザアプリケーションプログラムからハッシュ値を算出する。そして、検証部３２は、電子署名を復号して得たハッシュ値と、ユーザアプリケーションプログラムから算出したハッシュ値とを比較することによって、ユーザアプリケーションの完全性を検証する（ステップＳ１３０）。
【００３４】
両方のハッシュ値が異なる場合、ユーザアプリケーションプログラムが改竄されている可能性がある。また、両方のハッシュ値が一致した場合、ユーザアプリケーションプログラムの完全性が保証される。検証部３２は検証結果を起動制御部３１に通知する（ステップＳ１４０）。
【００３５】
通知を受けた起動制御部３１は、検証結果に基づいてアプリケーションの起動を制御する。検証の結果、改竄が検知された場合には、起動制御部３１はアプリケーションの起動処理を中止する。また、検証の結果、ユーザアプリケーションプログラムの完全性が確認できた場合には、起動制御部３１は、カーネル領域１１０内のデータ領域に格納されているユーザアプリケーションプログラムをユーザ領域１１１に移動し、ユーザアプリケーションを起動させる（ステップＳ１５０）。
【００３６】
カーネル空間３０内の起動制御部３１と検証部３２の完全性はカーネルの起動時に保証されており、また、後述するように稼働中のカーネルの完全性も保証されることから、上記のようにしてカーネル空間３０から起動されたユーザアプリケーションの完全性が保証される。上記と同様の方法はDigSigによっても実現されている。
【００３７】
（３）稼働中のカーネルの完全性の担保
稼働中のカーネルの完全性は以下の３つの方法により担保される。これらの方法のうち１つだけを実装しても効果は得られるが、全ての方法を実装することで、カーネルの完全性をより高めることもできる。また、これらの方法と同様の方法がSecVisorによっても実現されている。
【００３８】
図４は第１の方法を示している。メモリ１１において、カーネル領域１１０として割り当てられる領域は予め固定されており、メモリ管理部１４はカーネル領域１１０のアドレスを保持している。DMA１３がメモリ１１にアクセスするため、アクセスしたいメモリ１１のアドレスをメモリ管理部１４へ出力すると、メモリ管理部１４は、DMA１３から出力されたアドレスとカーネル領域１１０のアドレスとを比較する。
【００３９】
DMA１３から出力されたアドレスがカーネル領域１１０のアドレスに相当しない場合、すなわちDMA１３がカーネル領域１１０以外の領域にアクセスしようとしている場合（図４のアクセス５０）、メモリ管理部１４はアクセスを許可する。また、DMA１３から出力されたアドレスがカーネル領域１１０のアドレスに相当する場合、すなわちDMA１３がカーネル領域１１０にアクセスしようとしている場合（図４のアクセス５１）、メモリ管理部１４はアクセスを禁止する。このようにして、DMA１３からカーネル領域１１０に不正な上書きが行われることを防止し、稼働中のカーネルの完全性を保証することができる。
【００４０】
図５は第２の方法を示している。一般的にコンピュータではメモリ管理方式として仮想記憶が採用されている。CPU１２から見たメモリ１１のアドレスは仮想アドレスであり、メモリ１１の物理アドレス（実アドレス）とは異なる。メモリ管理部１４は仮想アドレスと物理アドレスの対応関係を変換テーブルとして保持している。ユーザアプリケーションの起動時や終了時にCPU１２は、カーネルの機能によって、変換テーブルの再構成を実行する。
【００４１】
本実施形態では、変換テーブルとして、カーネル用とユーザアプリケーション用の２種類の変換テーブルが用いられる。ユーザアプリケーション用の変換テーブルでは、カーネル領域１１０に対応する仮想アドレスにはカーネル領域１１０の物理アドレスではなく、カーネル領域１１０以外の物理アドレスが割り当てられている。メモリ１１にアクセスする要求が発生すると、CPU１２はその要求がカーネルとユーザアプリケーションのどちらからの要求であるのかを判別し、要求元を識別する情報と共にアクセス先のメモリ１１の仮想アドレスをメモリ管理部１４へ出力する。
【００４２】
メモリ管理部１４は、変換テーブルに基づいて、CPU１２から出力された仮想アドレスを物理アドレスに変換する。要求元がカーネルである場合、メモリ管理部１４はカーネル用の変換テーブルにより仮想アドレスを物理アドレスに変換する。カーネル用の変換テーブルではカーネルはカーネル領域１１０にアクセスすることができる。また、要求元がユーザアプリケーションである場合、メモリ管理部１４はユーザアプリケーション用の変換テーブルにより仮想アドレスを物理アドレスに変換する。具体的には以下のようになる。
【００４３】
CPU１２から出力された仮想アドレスがカーネル領域１１０の物理アドレスに相当しない場合、すなわちCPU１２がカーネル領域１１０以外の領域にアクセスしようとしている場合（図５のアクセス５２）、その領域の物理アドレスがメモリ管理部１４からメモリ１１へ出力される。また、CPU１２から出力された仮想アドレスがカーネル領域１１０の物理アドレスに相当する場合、すなわちCPU１２がカーネル領域１１０にアクセスしようとしている場合（図５のアクセス５３）、CPU１２がアクセスしようとしていたカーネル領域１１０とは異なる領域の物理アドレスがメモリ管理部１４からメモリ１１へ出力される。したがって、ユーザアプリケーションがカーネル領域１１０に書き込みを行おうとしても、カーネル領域１１０以外の領域に書き込みを行うことになる。このようにして、ユーザアプリケーションによってカーネル領域１１０に不正な上書きが行われることを防止し、稼働中のカーネルの完全性を保証することができる。
【００４４】
第３の方法は、カーネルのバッファオーバフロー攻撃を防止することによって、カーネル領域１１０に不正な上書きが行われることを防止する方法である。カーネルのバッファオーバフロー攻撃では、カーネル領域１１０のデータ領域に悪意の実行プログラムが格納され、この実行プログラムがデータ領域上で起動され、悪意の処理が実行される。また、この処理によってカーネル領域１１０のプログラム領域に書き込みが行われ、カーネルプログラムが改竄されてしまう。
【００４５】
そこで、CPU１２は、カーネルプログラムに従って、カーネル領域１１０のデータ領域の実行権限を実行不可とする設定を行う。したがって、ユーザアプリケーションによってカーネル領域１１０のデータ領域に悪意の実行プログラムが格納された場合でも、その実行プログラムの実行が許可されないので、カーネル領域１１０に不正な上書きが行われることを防止し、稼働中のカーネルの完全性を保証することができる。
【００４６】
（４）完全な検証用アプリケーションがファイルの状態を確認した結果に対する完全なカーネルによる電子署名
図６は、検証用アプリケーションがHDD１０内のシステムファイルの状態を確認するときの処理の様子を示している。ユーザ空間４０に属する検証用アプリケーション４１は、図３に示した処理により起動されたユーザアプリケーションである。完全性が保証されている起動制御部３１と検証部３２の処理によって検証用アプリケーション４１が起動されているので、検証用アプリケーション４１の完全性が保証されている。
【００４７】
カーネル空間３０に属するハッシュインタフェース３３は、カーネルとユーザアプリケーションの間でデータの入出力を行うためのキャラクタベースのインタフェースである。カーネル空間３０に属する署名部３４は秘密鍵Ksを保持しており、この秘密鍵Ksで暗号化を行い、電子署名を生成する。
【００４８】
検証用アプリケーション４１は以下のようにしてHDD１０内のシステムファイルの検証を行う。まず、検証用アプリケーション４１はHDD１０からメモリ１１のユーザ領域１１１にシステムファイルを読み込み、システムファイルのハッシュ値を算出する。このハッシュ値はシステムファイルの状態を表しており、システムファイルが改竄されると、ハッシュ値が変化することになる。検証用アプリケーション４１は、システムファイルを識別する情報（ファイル名等）と、算出したハッシュ値とを関連付けてリスト化したハッシュ値リストをユーザ領域１１１に保持する。また、検証用アプリケーション４１は、ハッシュ値リスト全体からさらにハッシュ値を算出する（ステップＳ２００）
【００４９】
検証用アプリケーション４１は、ハッシュインタフェース３３へハッシュ値リストのハッシュ値を出力し、署名を要求する（ステップＳ２１０）。ハッシュインタフェース３３はハッシュ値を署名部３４に渡す（ステップＳ２２０）。
【００５０】
署名部３４は、受け取ったハッシュ値を秘密鍵Ksで暗号化し、電子署名を生成する。署名部３４は、生成した電子署名をハッシュインタフェース３３に渡す（ステップＳ２３０）。ハッシュインタフェース３３は電子署名を検証用アプリケーション４１へ出力する（ステップＳ２４０）。検証用アプリケーション４１は、保持しているハッシュ値リストに対して電子署名を付加し、HDD１０に格納する（ステップＳ２５０）。
【００５１】
上記のようにしてHDD１０に格納されたハッシュ値リストに基づいて、HDD１０上のシステムファイルが改竄されているか否かを検証することができる。すなわち、所定のシステムファイルについて第１のタイミングで取得されたハッシュ値リスト内のハッシュ値と、第２のタイミングで取得されたハッシュ値リスト内のハッシュ値とを比較し、両方のハッシュ値が一致していなければ、システムファイルが改竄されたことを検知することができる。また、両方のハッシュ値が一致していれば、システムファイルが改竄されていないことを確認することができる。
【００５２】
一方、ハッシュ値リストに付加されている電子署名を検証することにより、ハッシュ値リストが改竄されているか否かを検証することができる。すなわち、ハッシュ値リストに付加されている電子署名を秘密鍵Ksに対応する公開鍵で復号して得たハッシュ値と、ハッシュ値リスト全体から算出したハッシュ値とを比較し、両方のハッシュ値が一致していなければ、ハッシュ値リストが改竄されたことを検知することができる。また、両方のハッシュ値が一致していれば、ハッシュ値リストが改竄されていないことを確認することができる。
【００５３】
上記の電子署名は、完全性が保証されているカーネルによって生成されたものなので、検証用アプリケーション４１がシステムファイルの状態を確認した結果に対して、完全性の保証された電子署名を付加することができる。
【００５４】
HDD１０に格納されたハッシュ値リストの検証、およびハッシュ値リストに付加されている電子署名の検証をリモート側の端末（ファイル検証装置）で行うことが可能である。すなわち、CPU１２は、通信を行うユーザアプリケーションによって、HDD１０からハッシュ値リストを読み出し、リモート端末へ送信する処理を実行する。リモート端末はハッシュ値リストを受信し、自身のHDDに格納する。続いて、リモート端末は、HDDからハッシュ値リストを読み出し、上述したハッシュ値リストの検証、およびハッシュ値リストに付加されている電子署名の検証を行う。なお、リモート端末は、取得したハッシュ値リストと比較される正しいハッシュ値リストを予め保持しており、取得したハッシュ値リスト内のハッシュ値と、正しいハッシュ値とを比較することにより、HDD１０上のシステムファイルが改竄されているか否かを検証する。
【００５５】
上述したように、本実施形態によれば、カーネルが改竄されていないことが確認できた場合にカーネルが起動され、カーネルの稼働中は、メモリ１１のカーネル領域１１０に対するユーザアプリケーションからのアクセスが禁止されるため、起動時および稼働中のカーネルの完全性が保証される。また、完全性の保証されたカーネルによって、ユーザアプリケーションが改竄されていないことが確認できた場合にユーザアプリケーションが起動されるので、起動時のユーザアプリケーションの完全性が保証される。したがって、完全性が保証されたカーネルから、完全性が保証されたユーザアプリケーションを起動することができる。また、完全性が保証された検証用アプリケーションを起動することによって、完全な検証用アプリケーションがファイルの状態を確認することができる。
【００５６】
上記のように完全な検証用アプリケーションがファイルの状態を確認することができるが、検証用アプリケーションの出力結果であるハッシュ値リストがHDD１０上で改竄される可能性がある。しかし、本実施形態では、ハッシュ値リストに対して、完全性が保証されたカーネルによる電子署名が付加されるので、その電子署名に基づいてHDD１０上のハッシュ値リストの改竄を検知することができる。したがって、ハッシュ値リストの信頼性を向上することができる。
【００５７】
本実施形態は公開サーバ等のサーバに適用可能なだけでなく、携帯電話等にも適用することが可能である。例えば、ユーザが所有する携帯電話の状態を電話会社がリモート検証したり、ユーザに貸し出したセットトップボックス等の家電製品の状態をサービス提供会社がリモート検証したりすることが可能である。
【００５８】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【００５９】
１０・・・HDD（プログラム記憶手段、ファイル記憶手段）、１１・・・メモリ、１２・・・CPU、１３・・・DMA、１４・・・メモリ管理部（禁止手段）、１５・・・カーネル起動制御部（カーネル検証手段）、２０・・・バス、３１・・・起動制御部、３２・・・検証部、３３・・・ハッシュインタフェース、３４・・・署名部、１１０・・・カーネル領域、１１１・・・ユーザ領域
【図１】
2010182196.tif 000003
【図２】
2010182196.tif 000004
【図３】
2010182196.tif 000005
【図４】
2010182196.tif 000006
【図５】
2010182196.tif 000007
【図６】
2010182196.tif 000008