(57)【要約】      （修正有）【課題】不正なプログラムの実行によってリソースがアクセスされる場合であっても当該アクセスを検知して不正プログラムのカーネルへの侵入を阻止する。【解決手段】情報処理装置は、ＣＰＵに対して発行される命令のうち、少なくとも処理をＯＳのカーネルに引き渡すための命令に対する監視を行うSyscall命令監視部３１３と、Syscall命令監視部３１３として機能する監視ソフトウェア３１を、ＯＳのカーネルに設定されるリング２より高いリング０でＲＡＭの領域にロードする専用ローダとを備える。【選択図】図４
2015219682.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサに対して発行される命令のうち、少なくとも処理をＯＳのカーネルに引き渡すための命令に対する監視を行う監視手段と、
前記監視手段として機能する監視ソフトウェアを、前記ＯＳのカーネルに設定される特権レベルより高い特権レベルで主メモリの所定領域にロードするロード手段とを含む情報処理装置。
【請求項２】
前記監視手段は、
前記プロセッサに対して発行される命令のうち、少なくとも処理を前記ＯＳのカーネルに引き渡すための命令の発行を検出する検出手段と、
検出された前記命令の正否を評価する評価手段と、
評価結果に応じて前記命令を代理して実行する代理処理手段とを備えたことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記検出手段は、前記命令を無効オペコード違反として検出することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記命令は、シスコール命令であり、
前記評価手段は、前記シスコール命令を構成するＡＰＩに関する情報との照合に基づいて正否を評価することを特徴とする請求項２又は３に記載の情報処理装置。
【請求項５】
前記代理処理手段は、前記評価手段が前記命令を正当と判断した場合、前記命令と同一の内容を前記カーネルへ移行し、前記評価手段が前記命令を不当と判断した場合、前記命令を終了する命令を前記カーネルへ戻すことを特徴とする請求項２〜４のいずれかに記載の情報処理装置。
【請求項６】
前記代理処理手段は、前記評価手段が前記命令を正当と判断した場合、前記命令と同一の内容を前記カーネルへ移行し、前記評価手段が前記命令を不当と判断した場合、前記命令をスキップする命令を前記カーネルに戻すことを特徴とする請求項２〜４のいずれかに記載の情報処理装置。
【請求項７】
前記監視手段に監視のためのフック条件を設定するフック条件設定手段を備え、
前記監視手段は、前記フック条件設定手段で設定された前記フック条件に基づいて前記プロセッサに対して発行される命令のうち、少なくとも処理を前記ＯＳのカーネルに引き渡すための命令の発行を検出することを特徴とする請求項１〜６のいずれかに記載の情報処理装置。
【請求項８】
前記フック条件設定手段は、前記フック条件に対する書き換えアクセスを監視するフック条件監視手段と、前記フック条件に対する書き換えアクセスの発行の検出毎に、前記フック条件を書き直すフック条件更正手段とを備えたことを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記ロード手段は、前記監視手段として機能する監視ソフトウェアのロードを行う第１のロード手段と、前記第１のロード手段によってロードされた前記監視ソフトウェアに含まれ、前記ＯＳのカーネルのロードを行う第２のロード手段とを含む請求項１〜８のいずれかに記載の情報処理装置。
【請求項１０】
前記第１のロード手段は、前記監視手段として機能する監視ソフトウェアを特権レベル０でロードし、前記第２のロード手段は、前記ＯＳのカーネルを特権レベル１及び２のいずれか一方でロードする請求項９に記載の情報処理装置。
【請求項１１】
プロセッサに対して発行される命令のうち、少なくとも処理をＯＳのカーネルに引き渡すための命令に対する監視を行う監視ステップと、
前記監視ステップとして機能する監視ソフトウェアを前記ＯＳのカーネルに設定される特権レベルより高い特権レベルを設定して主メモリの所定領域にロードするロードステップとを備えた情報処理監視方法。
【請求項１２】
プロセッサに対して発行される命令のうち、少なくとも処理をＯＳのカーネルに引き渡すための命令に対する監視を行う監視手段、
前記監視手段として機能する監視ソフトウェアを前記ＯＳのカーネルに設定される特権レベルより高い特権レベルを設定して主メモリの所定領域にロードするロード手段として前記プロセッサを機能させるプログラム。
【請求項１３】
プロセッサに対して発行される命令のうち、少なくとも処理をＯＳのカーネルに引き渡すための命令に対する監視を行う監視手段、
前記監視手段として機能する監視ソフトウェアを前記ＯＳのカーネルに設定される特権レベルより高い特権レベルを設定して主メモリの所定領域にロードするロード手段として前記プロセッサを機能させるプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサが実行する情報処理動作を監視する技術に関する。
【背景技術】
【０００２】
昨今、不正かつ有害な動作を行う意図で作成された悪意のあるプログラム（以下、不正プログラム）によるファイルの書き換えやシステムの設定変更等によってコンピュータのセキュリティーが大きく損なわれている。不正プログラムの挙動は、外部からコンピュータ内のメモリに侵入した後、アプリケーションプログラム（ＡＰ）の実行に伴うユーザモードからカーネル空間のリソースへのアクセスに便乗して特権レベル（リング０）を取得し、以後、リソースの制御を支配することで、意図した不正行為を実行可能にする。今日、不正プログラムの実行を監視し、不正動作を規制する各種の対応ソフトウェアが提案されている。
【０００３】
特許文献１には、ＡＰＩの利用制限を図るべく、アプリケーションの起動を検出するステップと、起動されたアプリケーションから発行されたリソースに対する処理要求を一時保留するステップと、起動されたアプリケーションが正規のアプリケーションであるか否かを認証するステップと、起動されたアプリケーションの認証結果が成功の場合にのみ、前記一時保留した処理要求による処理を許可するステップとを備えて、リソースの情報漏洩防止を図るアプリケーションの監視方法が記載されている。
【０００４】
特許文献２には、コンピュータ上で実行されるアプリケーションがハードディスクＨＤＤ等の記憶装置に記憶された情報にアクセスする時点で、オペレーティングシステム（ＯＳ）のフック機能を利用してこのアプリケーションをフックし、予め設定されたアクセス許容条件を満たすかどうかを判定部によって判定し、ウイルス等の不正なアクセスと判定された場合には前記記憶装置に記憶された情報のアプリケーションへの受け渡しを禁止するコンピュータの情報漏洩防止システムが記載されている。
【０００５】
特許文献３には、予め専用ローダ及び管理ファイルを格納した外部デバイスを装着してコンピュータの電源を投入することで、外部デバイスから主メモリ（ＲＡＭ）ロードされる専用ローダを用いて管理ファイルが、更にＨＤＤからＯＳがロードされる領域をそれぞれ制御し、かつ領域間で特権レベルに差を設けることでＲＡＭの所定領域に管理ファイルによるセキュア領域を確保し得る外部ブート技術が記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−１０８２５３号公報
【特許文献２】特開２００７−１４０７９８号公報
【特許文献３】特開２０１３−１０１５５０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載された、リソースの情報漏洩防止を図るためのアプリケーション監視方法では、フックを行うフィルタモジュール及び認証モジュールがアプリケーションと同一プロセス空間に設けられた構成であるため、これらモジュールによるフック動作及び認証動作の両信頼性に大きな問題がある。また、フックされたアプリケーションと予め登録されているアプリケーションとのハッシュ値同士を照合によって認証し、この認証が不成功の場合、当該アプリケーションを強制終了又は管理者に通知するようにしているため、コンピュータの動作が停止してしまう場合があるという問題がある。
【０００８】
特許文献２に記載された情報漏洩防止システムは、ファイルシステムの入出力に関する機能を対象とするもので、アクセス許容条件として、コンピュータのユーザインタフェースを介して入力される、ファイルデータの書き込みなどの操作を表すＩＯタイプ、アプリケーション名、データ・ファイル名、実行プログラムの実行制約条件（日時、範囲等）などの所定のチェック項目を活用し、これによってユーザの設定によりファイルシステム自身にウイルスに対する監視機能と判断機能を保持させるものである。従って、ファイルデータの読み出しと関連せず、ユーザ空間からカーネル空間のリソースへアクセスするプロセス全般に対して適切な監視を行うには限界がある。
【０００９】
また、特許文献３に記載された発明は、外部デバイスを必須とし、ＯＳからの不当なアクセスを無効化して、起動時に構築した主メモリ内のセキュア領域を立ち上げ後も維持するようにした技術であり、リソースに対する処理要求のためのカーネルへのアクセス命令に対する監視を行うものではない。
【００１０】
本発明は、上記に鑑みてなされたもので、リソースに対する処理要求のためのＯＳのカーネルへの命令を監視することのできる情報処理装置、情報処理監視方法、プログラム、及び記録媒体を提供することにある。
【課題を解決するための手段】
【００１１】
本発明に係る情報処理装置は、プロセッサに対して発行される命令のうち、少なくとも処理をＯＳのカーネルに引き渡すための命令に対する監視を行う監視手段と、前記監視手段として機能する監視ソフトウェアを、前記ＯＳのカーネルに設定される特権レベルより高い特権レベルで主メモリの所定領域にロードするロード手段とを含むものである。また、本発明は、情報処理監視方法、プログラム、及び記録媒体に適用される。
【００１２】
本発明によれば、監視ソフトウェアがＯＳのカーネルに設定される特権レベル（リング）よりも高い特権レベルに設定されるため、プロセッサに対して発行される命令のうち、少なくとも処理をＯＳのカーネルに引き渡すための命令の発行を常にフック可能な監視状況が確保し得る。従って、かかる命令に不当なプログラムが含まれ、その不正なプログラムの実行によってリソースがアクセスされる場合であっても、当該アクセスを検知して不正プログラムのカーネルへの侵入が阻止される。
【００１３】
また、前記監視手段は、前記プロセッサに対して発行される命令のうち、少なくとも処理を前記ＯＳのカーネルに引き渡すための命令の発行を検出する検出手段と、検出された前記命令の正否を評価する評価手段と、評価結果に応じて前記命令を代理して実行する代理処理手段とを備えたことを特徴とする。この構成によれば、検出手段によって検知された命令は、評価手段によって正否が評価される。評価は、不正プログラムの可能性に関連する方法で行われる。そして、代理処理手段によって、評価結果に応じた命令が発行される。評価結果とは、評価が正当な場合と不当な場合とを想定しており、いずれの場合にも、代理処理手段によって新たに命令を発行するようにし、発行元からの元の命令は直接使用されない。従って、不正プログラムのカーネルを介してのリソースへの侵入、さらに潜伏が阻止される。
【００１４】
また、前記検出手段は、前記命令を無効オペコード違反として検出することを特徴とする。この構成によれば、問題となるアクセス命令が確実に検知可能となる。
【００１５】
また、前記命令は、シスコール命令であり、前記評価手段は、前記シスコール命令を構成するＡＰＩに関する情報との照合に基づいて正否を評価することを特徴とする。この構成によれば、アプリケーションプログラムからリソースへのアクセスを可能にするシスコール（Syscall）命令に注目して検知し、シスコールを構成するＡＰＩ（Application Programming Interface）に関する情報、例えば属性、格納場所、出典等を参照情報等と照合することで正否評価するので、不正なプログラムか否かが適正に評価される。
【００１６】
また、前記代理処理手段は、前記評価手段が前記命令を正当と判断した場合、前記命令と同一の内容を前記カーネルへ移行し、前記評価手段が前記命令を不当と判断した場合、前記命令を終了する命令を前記カーネルへ戻すことを特徴とする。この構成によれば、アクセス命令が正当、不当いずれの場合であっても、代理処理手段によって新たに命令が発行されるので、不正プログラムの感染の危険が抑止される。
【００１７】
また、前記代理処理手段は、前記評価手段が前記命令を正当と判断した場合、前記命令と同一の内容を前記カーネルへ移行し、前記評価手段が前記命令を不当と判断した場合、前記命令をスキップする命令を前記カーネルに戻すことを特徴とする。この構成によれば、アクセス命令が正当、不当いずれの場合であっても、代理処理手段によって新たに命令が発行されるので、不正プログラムの感染の危険が抑止される。
【００１８】
また、前記監視手段に監視のためのフック条件を設定するフック条件設定手段を備え、前記監視手段は、前記フック条件設定手段で設定された前記フック条件に基づいて前記プロセッサに対して発行される命令のうち、少なくとも処理を前記ＯＳのカーネルに引き渡すための命令の発行を検出することを特徴とする。この構成によれば、監視手段は、フック条件設定手段によって設定されたフック条件に従って前記前記ＯＳのカーネルに引き渡すための命令の発行を検出する。
【００１９】
また、前記フック条件設定手段は、前記フック条件に対する書き換えアクセスを監視するフック条件監視手段と、前記フック条件に対する書き換えアクセスの発行の検出毎に、前記フック条件を書き直すフック条件更正手段とを備えたことを特徴とする。この構成によれば、フック条件監視手段によって前記フック条件に対する書き換えアクセスが監視され、前記フック条件に対する書き換えアクセスの発行の検出毎に、フック条件更正手段によって前記フック条件が正しく書き直される。
【００２０】
また、前記ロード手段は、前記監視手段として機能する監視ソフトウェアのロードを行う第１のロード手段と、前記第１のロード手段によってロードされた前記監視ソフトウェアに含まれ、前記ＯＳのカーネルのロードを行う第２のロード手段とを含むものである。この構成によれば、監視ソフトウェアのロードを行う第１のロード手段によってロードされた前記監視ソフトウェアに含まれる第２のロード手段によって、前記ＯＳのカーネルのロードが行われるので、前記ＯＳのカーネルにより低い特権レベルが設定される。
【００２１】
また、前記第１のロード手段は、前記監視手段として機能する監視ソフトウェアを特権レベル０でロードし、前記第２のロード手段は、前記ＯＳのカーネルを特権レベル１及び２のいずれか一方でロードするものである。この構成によれば、監視ソフトウェアは最高権限の特権レベルを有することで、特権レベル１か２の、カーネルモードで動作可能な前記ＯＳのカーネル側の挙動を監視することが可能となる。
【発明の効果】
【００２２】
本発明によれば、不正なプログラムの実行によってリソースがアクセスされる場合であっても当該アクセスを検知して不正プログラムのカーネルへの侵入を阻止することができる。
【図面の簡単な説明】
【００２３】
【図１】本発明に係る情報処理装置の一実施形態を示す構成図である。
【図２】起動後における情報処理装置の主メモリのプログラムマップの一例を示す図である。
【図３】起動処理の一例を示すフローチャートである。
【図４】監視ソフトウェアの一例を示す機能構成図である。
【図５】ＭＳＲ監視処理の一例を示すフローチャートである。
【図６】監視処理の手順を示す説明図である。
【図７】Syscall監視処理の一例を示すフローチャートである。
【図８】ログ処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００２４】
図１は、本発明に係る情報処理装置の一実施形態を示す構成図である。本発明が適用される情報処理装置１としては、コンピュータを内蔵するサーバ装置、汎用パーソナルコンピュータ、携行用の情報処理端末等、更にはネットワークを介して通信する機能を備えた各種の情報処理装置を含む。
【００２５】
情報処理装置１は、マイクロコンピュタで構成され、プロセッサとしてのＣＰＵ（Central Processing Unit）１１を含むチップセット１０を備える。ＣＰＵ１０は、バスＢＡを介してフラッシュＲＯＭ（Read Only Memory）２１とハードディスクドライブ（ＨＤＤ）２２とを含む補助記憶装置２０、主メモリとしてのＲＡＭ（Random Access Memory）３０、入力部４０、出力部５０、及び必要に応じて設けられるログ記憶部６０と接続されている。
【００２６】
フラッシュＲＯＭ２１は、ＢＩＯＳ（Ｂａｓｉｃ Input/ Output System）を格納する。ＨＤＤ２２は、ＯＳ（Operation System）の他、各種アプリケーションプログラム及び必要なデータ類の情報を格納する。ＨＤＤ２２に格納されている情報は、図２に示すように、主に起動時にＲＡＭ３０に読み出（ロード）される。詳細は図２において説明する。
【００２７】
ＲＡＭ３０は、主メモリとして機能し、情報処理装置１が起動する際に補助記憶装置２０に格納されているプログラム等がロードされると共に、処理途中の情報が一時的に格納される。情報処理装置１は、補助記憶装置２０に格納されているプログラム等がＲＡＭ３０にロードされ、ＣＰＵ１１によって実行されることで、公知の各種の情報処理に加えて、本発明に係る図４に示すような処理実行部として機能する。
【００２８】
入力部４０は、テンキー等を備えたキーボードやマウス、タッチパネル等を含み、所要の情報の入力や処理の指示を行うものである。出力部５０は、画像を表示する表示部を想定している。なお、出力部５０としては、プリンタ部やインターネット等のネットワークに接続して情報の授受を行う通信部等でもよく、更にこれらが併設されたものでもよい。ログ記憶部６０は、後述するように、情報処理装置１の動作中において発生する、リソースに対する処理要求である特権命令によるアクセス（Syscall、Sysenter、コールゲート等）の履歴（プログラム）及び、かかる命令に関する処理内容のログを経時的に記録する。
【００２９】
図２は、起動後における情報処理装置１のＲＡＭ３０のプログラムマップの一例を示す図で、ＣＰＵ１１を含むチップセット１０と共に示している。
【００３０】
チップセット１０は、プロセッサとしてのＣＰＵ１１の他、現在のＣＰＵ１１の状態を表すフラグレジスタやＭＳＲ（Model Specific Register）１２、データ格納用の汎用レジスタ１３の他、メモリのアドレス指定等に関係するインデックスレジスタや特殊レジスタ、メモリ管理方式に関係するセグメントレジスタ等を備えたレジスタ群を有する。ＭＳＲ１２中のレジスタ１２１は、Syscall命令の発行に対して無効オペコード例外を発生（フック）させる所定のレジスタである。このレジスタ１２１がDisable（＝０）のフック条件に設定されている場合、Syscall命令の発行は無効オペコード違反としてフックされる。
【００３１】
図３は、起動処理の一例を示すフローチャートである。まず、図２に示すＲＡＭ３０のプログラムマップを説明し、次いで、図３に示す起動処理のフローチャートについて説明する。
【００３２】
ＲＡＭ３０は、領域Ａ，Ｂ，Ｃに区分け領域を有する。領域Ａには特権レベルであるＤＰＬ（Description Privilege Level）に値０（いわゆるリング０）が設定されている。また、領域Ｂにはリング２が、領域Ｃにはリング３が設定されている。領域Ａに対して、リング０を設定することによって、例えば監視ソフトウェア３１を最も高い特権レベルでロード可能にしている他、この領域Ａ内に設定される情報に対して全てリング０でのロードを実現している。ＤＰＬ（リング）とは、公知のように、メモリ空間の特権レベルを記述するもので、ＤＰＬ“０”からＤＰＬ“３”（リング０〜リング３）までの４ランクがある。ＤＰＬ値が相対的に小さい程、特権のレベルが上位となる。例えば、ＤＰＬ値の相対的に大きい値として記述された空間で動作するプログラムはＤＰＬ値がそれより小さい値で記述された空間側にアクセスすることはできない。すなわち、この場合は特権レベル違反として、後述する一般保護例外（＃ＧＰ）が発行され、当該アクセスは無効とされる。一方、ＤＰＬ値の相対的に小さい値として記述された空間で動作するプログラムはＤＰＬ値がそれより大きい値で記述された空間側にアクセスしたり閲覧したりすることができる。これによって、不適当なアクセスか否かの判断が事前に可能となる。
【００３３】
領域Ａには、ＨＤＤ２２からロードされる監視ソフトウェア３１と、監視ソフトウェア３１によって形成されるシステムテーブル３４及び割込ハンドラ３２と、ＨＤＤ２２からロードされる後述の参照情報部３３とが含まれる。なお、参照情報部３３は、後述するように監視ソフトウェア３１の実行に際して使用されることから、監視ソフトウェア３１と一体的に機能する。
【００３４】
システムテーブル３４は、監視ソフトウェア３１を動作させるためのＧＤＴ（Global Descriptor Table）３４１、ＩＤＴ（InterruptDescriptor Table）３４２、ＴＳＳ（Task State Segment）３４３、及びＧＤＴ３４１からのリニアアドレスを物理アドレスに変換するＰＴＥ（Page Table Entry）３４４等を含む。
【００３５】
ＧＤＴ３４１は、公知のように情報の格納箇所を示すテーブルである。より詳細には、ＧＤＴ３４１は、例えば８バイト単位で各情報の格納箇所を管理するセグメントディスクリプタのリストである。各セグメントディスクリプタは、４つの属性を有している。属性は、情報の「種別」（プログラムコード、データ、スタック）と、「ベースアドレス」と、「リミット」と、「ＤＰＬ」とである。「ベースアドレス」は、情報のＲＡＭ３０内における格納基準（スタート）アドレスを示している。「リミット」は、情報のアクセス範囲を示す。ＤＰＬは、前述した特権レベルを示す。アドレッシングにおいて採用されるセグメントディスクリプタは、リニアアドレスからの変換に際して使用されるセグメントセレクタの情報を介して選択される。また、タスクのアクセスが許可されるものか否かは、アクセス要求時に、チップセット１０内のレジスタ群内のレジスタＣＳ，ＤＳ，ＳＳのいずれかに書き込まれたＣＰＬ（Current Privilege Level）及びＲＰＬ（Requested Privilege Level）と、ＧＤＴ３４１の対応するセグメントディスクリプタとを照合することで決定される。
【００３６】
ＩＤＴ３４２は、例外割込としての一般保護例外（＃ＧＰ）に対応して実行される、監視ソフトウェア３１内の割込ハンドラ３２の格納箇所を示すテーブルである。
【００３７】
ＴＳＳ３４３は、監視ソフトウェア３１内の各プログラム（タスク）の各々に対応付けて作成されている。すなわち、ＴＳＳ３４３は、動作状態に応じたプログラムを稼働させるべく、タスクスイッチによって必要なプログラムに実行状態を移し、かつ直前のプログラムの処理内容を対応する個々のＴＳＳにコンテキストすることで、現状復帰を可能にしている。
【００３８】
ＰＴＥ３４４は、ＧＤＴ３４１で作成されたリニアアドレスを物理アドレスに変換するためのもので、各情報（各プログラムコード、各データ、各スタック）について対応して設けられている。より詳細には、ＰＴＥ３４４はページを有し、各ページは所定のデータ量、例えば４ＫＢ毎に分割されている。各ページデータには、物理アドレスとアクセス属性とが設定されている。各ページデータには、プログラムコード、データ、スタックの種類が含まれる。物理アドレスは、リニアアドレスをＲＡＭ３０内の所定の位置に移動させるためのものである。アクセス属性は、特権レベルに相当するもので、「スーパーバイザー」と「ユーザ」とを有する。なお、「スーパーバイザー」はカーネル空間での処理（カーネルモード）をいい、リング０〜リング２に該当し、「ユーザ」はリング３に該当する。なお、波線で示す専用ローダ２０１は、監視ソフトウェア３１をロードするためのプログラムである。
【００３９】
領域Ｂには、ＯＳであるカーネル（kernel）３５と、カーネル３５が自己の挙動を記述するために作成するシステムテーブル３６とが含まれる。
【００４０】
領域Ｃには、カーネル３５の環境下で動作する各種のアプリケーションプログラムであるＡＰ（１）３７１〜ＡＰ（ｎ）３７ｎを含む。領域Ｃには、ＡＰ（１）３７１〜ＡＰ（ｎ）３７ｎからＯＳ（カーネル）３５へのアクセスを実行するための関数であるＡＰＩ（Application Programming Interface）の動的なリストであるダイナミックリンクライブラリｄｌｌ（dynamic link library）（ＡＰＩ）３８が含まれる。ｄｌｌ（ＡＰＩ）３８で作成された、リソースへの処理要求の際の特権レベル０でのカーネル３５に対して発行されるＡＰＩ構造をSyscall命令という。なお、ＡＰＩとは、複数のプログラムが共通に利用できる種々の機能（ソフトウェア）の呼び出し時の手順やデータ形式などを定めた仕様をいう。ｄｌｌ（ＡＰＩ）とは、モジュール化して実装されたＡＰＩを、動的なリンクによって実行時にプログラムの結合を行うようにした共有ライブラリをいう。
【００４１】
図３において、まず装置の電源が投入されると、フラッシュＲＯＭ２１からＢＩＯＳ（プログラム）がＲＡＭ３０にロードされ（ステップＳ１）、続いてＢＩＯＳが起動されて利用可能な周辺機器の初期化を行うＰＯＳＴ（Power On Self Test）処理が実行される（ステップＳ３）。
【００４２】
次いで、監視ソフトウェア３１のロード処理が実行される（ステップＳ５）。監視ソフトウェア３１のロード処理は、例えば以下の手順で行うことができる。すなわち、ＢＩＯＳによってＨＤＤ２２の先頭セクタからＭＢＲ(Master Boot Record)がＲＡＭ３０にロードされ、次いでＣＰＵ１１の制御がＭＢＲに渡されて、ＨＤＤ２２のアクティブなパーティションテーブルに予め格納されている専用ローダ２０１（図２参照）がＲＡＭ３０にロードされる。次いで、専用ローダ２０１によって一時的なＧＤＴが作成され、このＧＤＴによって領域Ａに対して特権レベルがリング０に設定され、この状態で監視ソフトウェア３１が領域Ａにロードされることで行われる。
【００４３】
監視ソフトウェア３１のロード処理が終了すると（ステップＳ７でＹｅｓ）、
ＣＰＵ１１の制御が監視ソフトウェア３１に渡される（ステップＳ９）。続いて、監視ソフトウェア３１により、監視環境の設定処理、すなわちシステムテーブル３４の作成、割込ハンドラ３２の作成が行われる。次いで、ＯＳローダ３１０（図２参照）が起動されて、領域Ｂの指定、特権レベルとしてリング２の設定を行って、カーネル３５を領域Ｂにロードする（ステップＳ１１）。なお、その後、公知のように、カーネル３５内のＡＰローダによって、ＡＰ３７１〜ＡＰ（ｎ）３７ｎ、ｄｌｌ（ＡＰＩ）３８が、領域Ｃに特権レベルとしてリング３でロードされる。
【００４４】
図４は、監視ソフトウェアの一例を示す機能構成図である。ＣＰＵ１１は、ＲＡＭ３０にロードされた監視ソフトウェア３１を実行する。監視ソフトウェア３１は、割込ハンドラ３２を作成する割込ハンドラ作成部３１１、フック条件監視部３１２、Syscall命令に関する監視を行うSyscall命令監視部３１３、及び必要に応じて採用されるログ処理部３１４、環境監視部３１５を備え、それぞれＣＰＵ１１の処理実行部として機能する。なお、Syscall命令監視部３１３は、フック条件監視部３１２とは個別に実行される態様でもよい。また、ログ処理部３１４、環境監視部３１５は、フック条件監視部３１２及びSyscall命令監視部３１３とは個別に実行される態様でもよい。
【００４５】
割込ハンドラ作成部３１１は、フック条件監視部３１２、Syscall命令監視部３１３でそれぞれ検出されたアクセスに対して発行される各例外に対する一連の監視処理をそれぞれ実行させる割込ハンドラ３２を作成する。
【００４６】
フック条件監視部３１２は、割込ハンドラ３２の内、アクセス検出部３１２１、及びフック条件を監視するプログラムであるフック条件更正部３１２２を含む。
【００４７】
ＭＳＲ１２の内容を読み書きするための命令は特権モード（リング０）で許可される。一方、本実施形態では、カーネル３５をリング２として動作させるため、特権命令であるＭＳＲ１２へのアクセス命令（rdmsr、wrmsr）は、ＣＰＵ１１の一般保護例外となる。この時のＣＰＵ１１による例外割込みは、予め設定しているＩＤＴ３４２を介して割込ハンドラ３２に移行する。
【００４８】
そこで、割込ハンドラ３２のアクセス検出部３１２１は、この一般保護例外をの発行を受けて、ＣＰＵ１１がスタック（stack）にプッシュ（push）した命令ポインタEIP（例外が発生した命令の実行アドレス)を参照してwrmsr命令か否かを判断する。アクセス検出部３１２１は、アクセス命令がwrmsr命令であると判断した場合、その書込み先がＭＳＲ１２内の、Syscall命令に関するレジスタ１２１か否かを判断する。
【００４９】
フック条件更正部３１２２は、アクセス検出部３１２１によって書き込み先がSyscallに関するレジスタ１２１であると判断された場合、レジスタ１２１内のDisable bitを値０にする書き込みを行う。フック条件更正部３１２２は、その後、カーネル３５に制御を戻すため、スタックのEIPにwrmsr命令のバイト数分を足し算してiret命令（割り込みでの呼び出しには、スタック上にフラグ（eflags）も積み上げられるために、専用の復帰命令iretを使用）を発行することにより、カーネル３５のwrmsr命令に続く次の命令に制御を戻す。かかるフック条件監視処理を行うことで、レジスタ１２１の不当な書き換え要求（アクセス）に対して、常にそのDisable bitに対して、当該ビットが書き換えられているか否かに関わらず、一律に値０に更正するようにすることで、後述する例外に対する監視可能状態を維持している。なお、値１に書き換えられている場合にのみ、値０に更正するようにしてもよい。
【００５０】
図５は、ＭＳＲ監視処理の一例を示すフローチャートである。なお、図５において、ステップＳ２１，Ｓ２３は一般保護例外のステップであるが、理解を助ける意味で本フローチャートに含めて説明している。まず、ＭＳＲ１２へのアクセス命令による一般保護例外が発生したか否かが判断される（ステップＳ２１）。ＭＳＲレジスタ１２へのアクセス命令による一般保護例外でなければ、本フローをスルーし、ＭＳＲ１２へのアクセス命令による一般保護例外であれば、処理が割込ハンドラ３２に移行される（ステップＳ２３）。
【００５１】
そして、割込ハンドラ３２で、一般保護例外の内容が検査され、書き込み（wrmsr）命令か否かが判断される（ステップＳ２５）。一般保護例外の内容が書き込み（wrmsr）命令でなければ、本フローを抜け、一方、一般保護例外の内容が書き込み（wrmsr）命令であれば、続いて、書き込み先がＭＳＲレジスタ１２内の、Syscall命令に関するレジスタ１２１か否かが判断される（ステップＳ２７）。Syscall命令に関するレジスタ１２１でなければ、発生した一般保護例外の内容に対応した処理が実行される（ステップＳ２９）。一方、Syscall命令に関するレジスタ１２１であれば、当該レジスタ１２１内のDisable bitに値０が書き込まれる（ステップＳ３１）。次いで、カーネル３５に制御を戻すためのiret命令が発行され、カーネル３５の（wrmsr）命令に続く次の命令に制御が戻される（ステップＳ３３）。
【００５２】
図４に戻って、Syscall命令監視部３１３は、割込ハンドラ３２の内、Syscall命令に対する監視を行うプログラムで、検出部３１３１、正否評価部３１３２、及び代理処理部３１３３を含む。
【００５３】
ＭＳＲレジスタ１２内のSyscall命令に関するレジスタ１２１がDisable（＝０）の場合、Syscall命令の発行に対し、ＣＰＵ１１は無効オペコード例外を発生する。すなわち、本実施形態では、リソースへの処理要求を発行するリング０でのアクセス、ここではSyscall命令は、無効オペコード違反（Invalid Opcode Fault）として設定している。無効オペコード違反とは、例えば正当なコンピュータ命令が存在しない場合とかプロセッサが無効なオペランドを含む命令を実行しようとした場合をいい、無効オペコード違反の種類によっては、この違反から回復できず、すなわちシステムの再起動又はシャットダウンを強いられる。リソースへの処理要求のためのアクセス手段がSyscall命令であることから、Syscall命令中に不正プログラムが関与（潜伏など）する可能性を考慮して、本実施形態では、Syscall命令を一律に無効オペコード違反とするフック対象としている。
【００５４】
割込ハンドラ３２としての検出部３１３１は、ＣＰＵ１１による例外割込の発生によって、処理が割込ハンドラ３２に移行すると、スタックに保存（プッシュ）した命令ポインタEIP（例外が発生した命令の実行アドレス）を参照して、アクセスがSyscall命令であるか否かを判断する。
【００５５】
割込ハンドラ３２としての正否評価部３１３２は、アクセスがSyscall命令であった場合、その時点での汎用レジスタ１３内のeax，ebx，ecx，edxの各レジスタ等や直前の処理内容を退避保存しているスタックの内容（Syscall命令のコード等）から、カーネル３５への呼び出し機能とそのパラメータの正否を、下記のように評価する。
【００５６】
正否評価部３１３２による、カーネル３５の呼び出し機能とそのパラメータの正否の評価は、予め設定された、領域Ａ内の参照情報部３３を利用して、例えば照合によって行われる。参照情報部３３には、Syscall命令を構成するＡＰＩのコードの内、不当性が高い候補が設定されている。不当性が高いＡＰＩ候補としては、例えば、（ａ）現状では未使用乃至は非公開のＡＰＩ、（ｂ）Ｃ：￥ ＷＩＮＤＯＷＳ（登録商標）やＣ：￥ ＰｒｏｇｒａｍＦｉｌｅｓ 配下のファイルへの読み書き（改竄や新たな作成など）、（ｃ）カーネル３５から付与される権限（Token）の制御（例えば、ユーザ権限から管理者権限への昇格要求など）がある。また、参照情報部３３に、ＡＰ（１）３７１〜ＡＰ（ｎ）３７ｎについて、スレッドやプロセスの関連を記述するＰＣＲ（Processor Control Region）を参照して、（ａ）動作を許可されているＡＰかどうか（例えば、ＡＰのパス（フォルダ）がインストールの許可がなされているフォルダであるかどうか）、（ｂ）データの書込先のフォルダが書込許可されているフォルダであるかどうかを含めてもよい。さらに、（ｃ）ＡＰＩがどのプロセス(アプリケーションプログラム)から発行されたかを含めて区別する、例えば通信する筈のないプロセスが通信のＡＰＩを発行したかどうか、（ｄ）通信のＡＰＩを発行したプロセスが人が操作するプロセスによって生成されたプロセスであったかどうかを区別する内容を含めることで、入力部４０を経由しての人為的な操作に依拠するものか、プログラムに依拠する（一般的には不正プログラム）ものかの区別を可能にすることが好ましい。
【００５７】
また、割込ハンドラ３２としての代理処理部３１３３は、正当と評価された場合、カーネル３５に制御を移行し、一方、不当と評価された場合、不当と評価されたSyscall命令を無効とした上で、次の命令を、当該Syscall命令を発行したＡＰに戻すか、あるいはカーネル３５にプログラムの終了機能を処理させる。
【００５８】
なお、カーネル３５に制御を移行する場合、スタックのEIPをカーネル３５のエントリポイントに書き換えることで、スタックの内容を、リング２に設定されているカーネル３５に戻すことが可能となる。なお、リング２に設定されているカーネル３５はスーパーバイザ（カーネルモード）で、代理処理部３１３３で作成された内容を実行する。また、アプリケーションに制御を戻す場合、Syscall命令のバイト数分を足し算して、iret命令を発行することにより制御が移行される。
【００５９】
情報処理装置１の動作中に、図６に示すように、例えばＡＰ（１）３７１が、所定のリソースへの処理要求を発する場合、ｄｌｌ（ＡＰＩ）３８に対してアクセスし（図６、工程（１）参照）、ＡＰＩを構築してSyscall命令を作成する（図６、工程（２）参照）。次いで、Syscall命令はリング０でカーネル３５にアクセスされる（図６、工程（３）参照）。このとき、Syscall命令に対して無効オペコード違反が発行され、この無効オペコード違反が監視ソフトウェア３１でフックされる（図６、工程（４）参照）。
【００６０】
ところで、無効オペコード違反となる対象は、Syscall命令以外にもあることから、無効オペコード違反を発行した命令の内容の分析が行われる。すなわち、Syscall命令に関しては無効処理とする一方、その正否（正当性）の評価結果に応じて代理処理部３１３３が処置を行うようにしている（図６、工程（５１），（５２）参照）。
【００６１】
より詳細には、代理処理部３１３３は、評価結果が正当であると判断された場合、カーネル３５へ制御を移行する代行処理を行う（図６、工程（５１）参照）。代理処理部３１３３は、カーネル３５への制御のための命令として、無効オペコード違反として無効にしたSyscall命令と同一内容を発行する。
【００６２】
一方、代理処理部３１３３は、不当であると判断した場合、カーネル３５へ制御を移行するか（図６、工程（５２）参照）、あるいはSyscall命令に続く次の命令を発行元のＡＰに戻す（図６、工程（５２−２）参照）処置を行う。カーネル３５へ制御を移行する処置は、正当の場合と同様な手順で行う。なお、代理処理部３１３３によって作成されるSyscall命令は、プログラムの強制終了を指示するもの、すなわち何らの処理を行うことなく（スルーさせて）、リターンさせるものである。また、Syscall命令に続く次の命令を発行元のＡＰに戻す処理は、Syscall命令のバイト数分だけ加算することでSyscall命令をスキップしたと同様に、続きの命令に制御を戻すようにしたものである。
【００６３】
図７は、Syscall監視処理の一例を示すフローチャートである。なお、図７において、ステップＳ４１，Ｓ４３は無効オペコード例外の発生ステップであるが、理解を助ける意味で本フローチャートに含めて説明している。まず、図７において、無効オペコード例外の発生か否かが判断される（ステップＳ４１）。無効オペコード例外の発生であると、制御が割込ハンドラ３２に移行される（ステップＳ４３）。
【００６４】
そして、割込ハンドラ３２では、無効オペコード例外を発行した命令がSyscall命令であったか否かの分析が行われる（ステップＳ４５）。Syscall命令でなければ、当該命令に応じた他の無効オペコードに対応する処理が実行される（ステップＳ４７）。一方、Syscall命令であれば、正否評価の処理が実行され（ステップＳ４９）、評価の結果が正当であれば（ステップＳ５１でＹｅｓ）、カーネル３５に制御が移行される。（ステップＳ５３）。一方、評価の結果が不当であれば（ステップＳ５１でＮｏ）、Syscall命令に続く次の命令を発行元のＡＰに戻す処理（iret）、又はカーネル３５に対するプログラムの終了機能の処理が施される（ステップＳ５３）。従って、監視ソフトウェア３１によれば、リソース（ハードウェア資源）の保護の他、カーネル３５及びＡＰの動作をリアルタイムで監視可能となることから、外部からの不正プログラムの侵入、逆に外部への情報の漏洩が効果的に防止できる。
【００６５】
また、ログ処理部３１４は、参照情報部３３と一致した、あるいは不当と評価されたアクセスのプログラム内容を全てログ記憶部６０に経時方向に格納する。好ましくは発生時刻情報を含めて格納する。ログ記憶部６０がインターネット等のネットワークを介してデータサーバ装置としての位置づけである場合、送信元ＩＰアドレスを付して送信し格納させる。外部のデータサーバ装置の場合には、ＩＰアドレス毎にソートすることで、情報処理装置毎のログ管理が可能となる。なお、ログ情報としては無効オペコード違反のSyscall命令が少なくとも含まれていればよい。本実施形態によれば、後に、ログ記憶部６０のセーブ内容を分析することで、異常動作や処理があった場合に対する確実かつ適正な事後解析に供することが可能となる。また、解析を通して、以後の教訓材料とすることができ、不正の抑止効果にもつながる。
【００６６】
なお、本実施形態におけるログ対象情報としては、プロセス一覧、ファイルＩ／Ｏログ、ネットワーク送受信ログ、環境設定値アクセスログ、及び監視及びロギング内容の少なくとも１つ乃至は全てが含まれる。プロセス一覧は、実行されたプログラムはプロセスとしてＯＳに管理され、ＰＣＲに格納される。実行されたプロセスは、必ずSyscallを経てカーネル３５とのやり取りが発生するため、実行されたプロセスの一覧が取得できる。取得情報としては、例えば、プログラムファイル名とそのパス、プロセスＩＤ、起動時間を含む。これらを取得することで、不知もしくは不要なプログラムの実行の有無が把握できる。また、取得情報から異常なプログラムか否かが判断できる。
【００６７】
ファイルＩ／Ｏログは、Syscall時点でのＡＰＩ機能番号（レジスタeax）より、ファイルＩ／Ｏの要求を取得し、そのパラメータ値（汎用レジスタ１３の内容やスタック内のデータ)からファイルパス及びその操作（読み書き）として取得される。取得情報としては、例えば、ファイルパス、操作方法（書き込みもしくは読み込み）、プロセスＩＤを含む。これらを取得することで、プログラムファイルの書込みやシステムフォルダもしくはユーザ指定の特定フォルダに対する操作から不正の有無が判断できる。
【００６８】
ネットワーク送受信ログは、Syscall及びSysret時点でのＡＰＩ機能番号(レジスタeax)より送受信要求を取得し、そのパラメータ値（汎用レジスタ１３の内容やスタック内のデータ）から送受信データ及びその操作（connect、send、receive、accept）として取得される。取得情報としては、例えば、操作方法（connect、send、receive、accept）、送受信テータ、送受信ポート、送受信ＩＰアドレス（IPV4及びIPV6）を含む。これらを取得することで、情報漏洩の基本となる送受信操作が監視できる。また、送信先ＩＰアドレス及び受信元ＩＰアドレスを元に不正アクセスが追跡できる。さらに送受信データの解析に基づく保護を可能とする。
【００６９】
環境設定値アクセスログは、カーネルモードからの不正操作がSyscall命令を介さないため、環境設定値へのアクセスが監視されており、その監視内容として取得される。取得情報としては、例えば、ＭＳＲ１２へのアクセスとその内容、コントロールレジスタ（CR0, CR2,CR4）へのアクセスとその内容、デバッグレジスタへのアクセスとその内容、キャッシュ制御命令の実行、CPUID命令の実行、ページテーブルPML4へのアクセス、ソフトウェア割込み命令の実行、ＣＰＵシステムテーブル（GDT、IDT、LDT、TSS）へのアクセスとロード命令、実行EIPとそのモジュール名（カーネルプログラムやカーネルドライバ）、及び未使用割込みベクタへの割込みと割込み先実行コードを含む。
【００７０】
監視及びロギング内容には、物理アドレス１Mbyte以下へのアクセスを含む。これは、ＯＳ起動後、使用されない領域であるため、不正利用と見なすことができる。物理アドレスACPI管理テーブルへのアクセスは、端末情報の不正取得と見なすことができる。全ページテーブルに対するデバイスアクセス（MMIO）物理アドレスの設定は、カーネル以外からの直接デバイスアクセスは不正と判断できる。カーネルプログラム領域の比較は、カーネルプログラムの改ざんをチェックできる。
【００７１】
図８は、ログ処理の一例を示すフローチャートである。まず、Syscall命令がフックされたかどうかが判断され（ステップＳ６１）、フックされていなければ、本フローを抜ける。一方、フックされた場合、ログ記憶部６０に記録される（ステップＳ６３）。かかる処理が、シャットダウン（ステップＳ６５でＹｅｓ）まで継続して行われる。なお、ここでは、Syscall命令をログ対象としたが、特定のフック理由、例えば無効オペコード違反に該当する命令をログ対象とする場合も同様となる。
【００７２】
ところで、ＣＰＵ１１の稼働中は、ＭＳＲ１２や他のレジスタ内の特定のレジスタ等の内容が悪意のプログラムによって書き替えられる可能性がある。環境監視部３１５は、かかる特定のレジスタ等への書き込みのアクセスが発行されると、このアクセスをフックする機能を備える。ここに、特定のレジスタ等とは、ＣＰＵ１１の動作に必要とされる根本的な環境設定値が設定されるレジスタである。なお、根本的な環境設定値は、下記のものを含む。環境監視部３１５は、これらの環境設定値が設定される特定のレジスタ等へのアクセス、特に書込アクセスを、一般保護例外あるいは無効オペコード違反等としてフックし、このアクセスを阻止（無効、禁止、元に戻すなど）した後、次の命令に戻すようにしている。あるいは、書き換えられたか否かを問わず、元の内容に書き直す処理を施して、戻すようにしてもよい。
【００７３】
根本的な環境設定値は、以下のように複数種類存在する。まず、プロセス管理情報（Windows（登録商標） OSのPCR,PRCB,ETHREAD,EPROCESS等）を指すＯＳ（カーネル）の環境設定値がある。この設定値へのアクセスはＡＰＩを通じてカーネルに依頼して行わなければならない。そこで、その際、プロセスはＯＳが管理する管理者権限（ＣＰＵ１１の権限である、前述のリングとは異なる）が必要となるため、個々のプロセスの権限を監視する。また、他の根本的な環境設定値として、コントロールレジスタ（CR0,CR4,CR3）、デバッグレジスタ（DR0〜DR7）、ＭＳＲ（IA32E_EFERなど）、及びGDTR、IDTR、LDTRに格納されるCPUの環境設定値、MSRの環境設定値があり、これらへのアクセスをリング２にして、監視する。また、他の根本的な環境設定値として、カーネルに依頼する直前とカーネルからの戻り直後のパラメータ値やデータを監視するＡＰＩの環境設定値がある。監視に際しては、「ＯＳの環境設定値」との組み合わせも加味して、正否を判断する。なお、パラメータの監視に関する例としては、指定されたファイルパス（c:\windows\system32\ntoskrnl.exe）に書込みを依頼しようとしたかどうかがあり、また、データの監視に関する例としては、送受信バッファの内容にバイナリが含まれるかどうかがある。また、他の根本的な環境設定値として、コンピュータの電源制御とハードウェア構成要素を規格化したACPIの環境設定値（Advanced Configuration and Power Interface）がある。監視ソフトウェア３１が構成する物理メモリマップがＯＳのカーネル３５から分からなくするため、カーネル３５が物理メモリに関する情報にアクセスした際、その情報を変更する。また、他の根本的な環境設定値として、ＯＳがリアルモードの時、ソフトウェア割込みを使用してBIOS Functionを使用するBIOSジャンプ命令の環境設定値がある。このBIOS Functionの改ざんや不正使用の防止のため、リアルモードの割込みベクタをフックする。また、他の根本的な環境設定値として、KernelDriverの環境設定値がある。ドライバにより「ＣＰＵ１１の環境設定値」を変更しようとした場合、その命令を無視してアンロードする。また、アプリケーションからドライバのロードを禁止する。
【００７４】
なお、本実施形態では、Syscall命令を無効オペコード違反としてフックするようにしたが、無効オペコード違反に限定されず、他の例外を適用してフックするようにしてもよい。
【符号の説明】
【００７５】
１  情報処理装置
１１  ＣＰＵ（プロセッサ）
１２１  Syscall命令に関するレジスタ
２０１  専用ローダ（ロード手段）
３０  ＲＡＭ（主メモリ）
３１  監視ソフトウェア（監視手段）
３２  割込ハンドラ
３３  参照情報部
３５  カーネル
３８  ｄｌｌ（ＡＰＩ）
３１２  フック条件監視部（フック条件設定手段）
３１２１  アクセス検出部（フック条件監視手段）
３１２２  フック条件更正部（フック条件更正手段）
３１３  Syscall命令監視部（監視手段）
３１３１  検出部（検出手段）
３１３２  正否評価部（評価手段）
３１３３  代理処理部（代理処理手段）
【図１】
2015219682.tif 000003
【図２】
2015219682.tif 000004
【図３】
2015219682.tif 000005
【図４】
2015219682.tif 000006
【図５】
2015219682.tif 000007
【図６】
2015219682.tif 000008
【図７】
2015219682.tif 000009
【図８】
2015219682.tif 000010