(57)【要約】      （修正有）【課題】コンピュータのセキュリティをある程度保しつつも、ユーザ負担を軽減する。【解決手段】ＯＳプログラムは、規制対象とすべき複数のシステムコールの組合わせ及び規制処理内容を示すアクションを有するポリシデータベースと、プロセスからのシステムコールを監視するためのシステムコールフックモジュールとを有する。システムコールフックモジュールは、プロセスから順次受け付けられた複数のシステムコール中に、ポリシデータベース中の複数のシステムコールの組合わせと対応する組合わせのシステムコールがある、ポリシマッチであるか否かを判定するステップＳ１３と、ポリシマッチである場合にポリシデータベース中のアクションをＯＳ主機能部へ出力するステップＳ１６と、ポリシアンマッチである場合に、受け付けたシステムコールをＯＳ主機能部へ出力するステップＳ１７と、をプロセッサに実行させる。【選択図】図５
2011081501.tif 000002
【特許請求の範囲】
【請求項１】
プロセスからの各種システムコールを処理するためのオペレーティングシステム（以下、ＯＳとする）主機能モジュールを有するＯＳプログラムにおいて、
規制対象とすべき複数のシステムコールの組合わせと、前記プロセスから該組合わせのシステムコールが出力された場合の規制処理内容を示すシステムコールであるアクションとを有する複数のポリシデータを含むポリシデータベースと、
前記プロセスからの前記システムコールを監視するためのシステムコールフックモジュールと、
を有し、
前記システムコールフックモジュールは、
前記プロセスからのシステムコールを受け付けるシステムコール受付ステップと、
前記システムコール受付ステップでシステムコールを受け付けると、該システムコール受付ステップで順次受け付けられた複数のシステムコール中に、前記ポリシデータベース中のいずれかのポリシデータに含まれている前記複数のシステムコールの組合わせと対応する組合わせのシステムコールがある、ポリシマッチであるか否かを判定する判定ステップと、
前記判定ステップで前記ポリシマッチであると判定されると、前記ポリシマッチであると判定された際に対象になった前記ポリシデータ中の前記アクションを取得して、該アクションを出力し、前記判定ステップで前記ポリシマッチでないと判定されると、前記システムコール受付ステップで受け付けたシステムコールのうち、該判定ステップでの判定の契機となった最新のシステムコールを出力する指示出力ステップと、
をコンピュータのプロセッサに実行させ、
前記ＯＳ主機能モジュールは、
前記指示出力ステップで出力された前記システムコール又は前記アクションを受け付ける指示受付ステップと、
前記指示受付ステップで受け付けた前記システムコール又は前記アクションが示す処理を実行する指示実行ステップと、
を前記プロセッサに実行させる、
ことを特徴とするＯＳプログラム。
【請求項２】
請求項１に記載のＯＳプログラムにおいて、
前記システムコールフックモジュールは、
前記システムコール受付ステップでシステムコールを受け付ける毎に、該システムコールのシステムコール名が前記ポリシデータベースの複数のポリシデータのうちのいずれかのポリシデータに含まれているシステムコールのシステムコール名に一致するか否かを判定するコール名判定ステップと、
コール名判定ステップで一致すると判定されたシステムコール名のシステムコールを、システムコール履歴として前記コンピュータの記憶手段に記憶するシステムコール記憶ステップと、
を前記プロセッサに実行させ、
前記判定ステップでは、前記システムコール履歴中の複数のシステムコールのうち、前記ポリシデータベース中のいずれかのポリシデータ中の複数のシステムコールの組合わせと対応する組合わせが存在するか否かを判定し、対応する組合わせが存在する場合には前記ポリシマッチとする、
ことを特徴とするＯＳプログラム。
【請求項３】
請求項２に記載のＯＳプログラムにおいて、
前記判定ステップでは、
前記ポリシデータベースの複数のポリシデータのうち、未コピーのポリシデータを一つコピーして、該ポリシデータをポリシデータコピーとして前記記憶手段に記憶するポリシデータコピーステップと、
前記システムコール履歴から、最新のシステムコールをターゲットシステムコールとして抽出し、該ターゲットシステムコールと前記ポリシデータコピーとを比較し、該ターゲットシステムコールと、該ポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールとが対応する、要素マッチであるか否かを判定する要素マッチ判定ステップと、
前記要素マッチ判定ステップで、前記ターゲットシステムコールと、前記ポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールとが対応し、前記要素マッチであると判定されると、該ポリシデータコピー中の対応システムコールを要素マッチしたことを示す記述に変更するポリシデータコピー更新ステップと、
前記ポリシデータコピー更新ステップで更新された前記ポリシデータが、前記要素マッチしていないシステムコールを含むか否かを判定し、該要素マッチしていないシステムコールを含まないときに前記ポリシマッチとするポリシマッチ判定ステップと、
前記要素マッチ判定ステップで前記要素マッチでないと判定された場合、及び前記ポリシマッチ判定ステップで前記ポリシマッチでないと判定された場合に、前記システムコール履歴から、前記ターゲットシステムコールの次に新しいシステムコールを新たなターゲットシステムコールとして抽出し、該新たなターゲットシステムコールに関して前記要素マッチ判定ステップを実行させるターゲットシステムコール抽出ステップと、
を実行し、
前記ポリシデータコピーステップは、前記システムコール履歴中から前記新たなターゲットシステムコールを抽出できなくなると、繰り返し実行される、
ことを特徴とするＯＳプログラム。
【請求項４】
請求項３に記載のＯＳプログラムにおいて、
前記ＯＳ主機能モジュール又は前記システムコールフックモジュールは、
前記コンピュータの記憶手段に格納されたオブジェクトの識別情報と、該オブジェクトへのアクセスを制限すべきか否かを示すオブジェクトタイプとを受け付けて、前記コンピュータの記憶手段に記憶するオブジェクトタイプ受付ステップを、前記プロセッサに実行させ、
前記要素マッチ判定ステップでは、
前記ターゲットシステムコールのシステムコール名と、前記全てのポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールのシステムコール名とが一致するか否かを判定し、
両システムコール名が一致すると判定した場合に、前記ターゲットシステムコールのシステムコール名と一致する、前記ポリシデータコピー中の対応システムコールが、オブジェクトタイプを含んでいれば、前記記憶手段を参照して、前記ターゲットシステムコール中に含まれている引数に関するオブジェクトタイプを把握し、両オブジェクトタイプが一致するか否かを判定し、
両オブジェクトタイプが一致すると判定した場合に、前記要素マッチとする、
ことを特徴とするＯＳプログラム。
【請求項５】
請求項１に記載のＯＳプログラムにおいて、
前記ＯＳ主機能モジュール又は前記システムコールフックモジュールは、前記プロセスの起動時に、前記ポリシデータベース中の全てのポリシデータをコピーして、該コピーをポリシデータコピーとして前記コンピュータの記憶手段に記憶するポリシコピーステップを、前記プロセッサに実行させ、
前記判定ステップでは、
前記システムコール受付ステップでシステムコールを受け付ける毎に、該システムコールをターゲットシステムコールとして、前記記憶手段に記憶されている全てのポリシデータコピーを比較し、該ターゲットシステムコールと、該全てのポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールとが対応する、要素マッチであるか否かを判定する要素マッチ判定ステップと、
前記要素マッチ判定ステップで、前記ターゲットシステムコールと、前記全てのポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールとが対応し、前記要素マッチであると判定されると、ポリシデータコピー中の対応システムコールを要素マッチしたことを示す記述に変更するポリシデータコピー更新ステップと、
前記ポリシデータコピー更新ステップで更新された前記ポリシデータが、前記要素マッチしていないシステムコールを含むか否かを判定し、該要素マッチしていないシステムコールを含まないときに前記ポリシマッチとするポリシマッチ判定ステップと、
を実行する、
ことを特徴とするＯＳプログラム。
【請求項６】
請求項５に記載のＯＳプログラムにおいて、
前記ＯＳ主機能モジュール又は前記システムコールフックモジュールは、
前記コンピュータの記憶手段に格納されたオブジェクトの識別情報と、該オブジェクトへのアクセスを制限すべきか否かを示すオブジェクトタイプとを受け付けて、前記コンピュータの記憶手段に記憶するオブジェクトタイプ受付ステップを、前記プロセッサに実行させ、
前記要素マッチ判定ステップでは、
前記ターゲットシステムコールのシステムコール名と、前記全てのポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールのシステムコール名とが一致するか否かを判定し、
両システムコール名が一致すると判定した場合に、前記ターゲットシステムコールのシステムコール名と一致する、前記ポリシデータコピー中の対応システムコールが、オブジェクトタイプを含んでいれば、前記記憶手段を参照して、前記ターゲットシステムコール中に含まれている引数に関するオブジェクトタイプを把握し、両オブジェクトタイプが一致するか否かを判定し、
両オブジェクトタイプが一致すると判定した場合に、前記要素マッチとする、
ことを特徴とするＯＳプログラム。
【請求項７】
請求項１に記載のＯＳプログラムにおいて、
前記ポリシデータに含まれている前記複数のシステムコールの組み合わせは、該複数のシステムコールを含み、該複数のシステムコールの組み合わせ形態が記述されたデータである、
ことを特徴とするＯＳプログラム。
【請求項８】
記憶手段と、各種処理を実行するプロセッサとを備えているコンピュータにおいて、
前記記憶手段には、請求項１から７のいずれか一項に記載のＯＳプログラムが格納され、
前記プロセッサは、前記ＯＳプログラム中の前記ＯＳ主機能モジュールと前記システムコールフックモジュールとを実行する、
ことを特徴とするコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オペレーティングシステムによるコンピュータのセキュリティ技術に関する。
【背景技術】
【０００２】
近年、コンピュータやＩＰネットワークの普及に伴い、コンピュータからの情報漏えいやコンピュータウイルスの感染など、コンピュータのセキュリティが脅かされる事態が急増しており、コンピュータセキュリティ技術の重要性が増している。
【０００３】
コンピュータセキュリティ技術には、大別して、コンピュータへの不正侵入を防ぐ手法と、コンピュータに不正侵入された場合でも被害を最小限に抑える手法とがある。
【０００４】
後者の手法で、もっとも広く用いられているのはアクセス制御に代表される実行制御の手法である。ここで、アクセス制御とは、サブジェクト毎に、実行可能なオペレーションとアクセス可能なオブジェクトを制限する手法である。なお、サブジェクトとは、能動的に動作を行う存在であり、ユーザやプロセス等が該当し、プロセスとは、実行中のプログラムである。また、オブジェクトとは、操作される対象であり、ファイルやディレクトリ等が該当する。
【０００５】
このアクセス制御による手法としては、以下の非特許文献１に記載されているSELinux（Security Enhanced Linux）が挙げられる。
【０００６】
このSELinux手法とは、NSA(アメリカ国家安全保障局)が主体となって開発されたソフトウェアであり、コンピュータ上で動作する各プロセスに対して、ＯＳ（Operating System）レベルでアクセス制限を行う手法である。
【０００７】
このSELinux手法では、コンピュータ上で動作する全てのプロセスに対しドメインと呼ばれるラベルを設定すると共に、オブジェクトに対して、そのタイプ、さらにタイプ毎のアクセス・ベクタと呼ばれるアクセス形態（一切のアクセス不可、readのみ可、read及びwrite可、等）を設定し、プロセスのドメインとオブジェクトのタイプとを関係付けることで、各オブジェクトに対するプロセスのアクセス制限をＯＳレベルで実現している。
【０００８】
このように、SELinux手法では、プロセスのアクセス制限をＯＳレベルで実現しているため、仮に、不正侵入者に、コンピュータのroot権限を奪われたとしても、この不正侵入者がアクセス可能なオブジェクトは限定され、被害を最小限に抑えることができる。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】Bill Mccarty 著 田口裕也、根津研介 監訳 林英幸 訳 「SELinuxシステム管理― セキュアＯＳの基礎と運用」オライリージャパン  2005年3月25日発行
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上述のSELinux手法では、新たなプロセスが追加される毎に、このプロセスに対するドメインの設定、さらに、このドメインとオブジェクトのタイプとの関係付けを行う必要が有り、コンピュータユーザに負担を強いてしまう、という問題点がある。
【００１１】
本発明は、このような従来技術の問題点に着目し、コンピュータのセキュリティをある程度確保しつつも、ユーザの負担を軽減することができる技術を提供することを目的とする。
【課題を解決するための手段】
【００１２】
前記問題点を解決するための発明に係るＯＳプログラムは、
プロセスからの各種システムコールを処理するためのオペレーティングシステム（以下、ＯＳとする）主機能モジュールと、
規制対象とすべき複数のシステムコールの組合わせと、前記プロセスから該組合わせのシステムコールが出力された場合の規制処理内容を示すシステムコールであるアクションとを有する複数のポリシデータを含むポリシデータベースと、
前記プロセスからの前記システムコールを監視するためのシステムコールフックモジュールと、
を有し、
前記システムコールフックモジュールは、
前記プロセスからのシステムコールを受け付けるシステムコール受付ステップと、
前記システムコール受付ステップでシステムコールを受け付けると、該システムコール受付ステップで順次受け付けられた複数のシステムコール中に、前記ポリシデータベース中のいずれかのポリシデータに含まれている前記複数のシステムコールの組合わせと対応する組合わせのシステムコールがある、ポリシマッチであるか否かを判定する判定ステップと、
前記判定ステップで前記ポリシマッチであると判定されると、前記ポリシマッチであると判定された際に対象になった前記ポリシデータ中の前記アクションを取得して、該アクションを出力し、前記判定ステップで前記ポリシマッチでないと判定されると、前記システムコール受付ステップで受け付けたシステムコールのうち、該判定ステップでの判定の契機となった最新のシステムコールを出力する指示出力ステップと、
をコンピュータのプロセッサに実行させ、
前記ＯＳ主機能モジュールは、
前記指示出力ステップで出力された前記システムコール又は前記アクションを受け付ける指示受付ステップと、
前記指示受付ステップで受け付けた前記システムコール又は前記アクションが示す処理を実行する指示実行ステップと、
を前記プロセッサに実行させる、ことを特徴とする。
【００１３】
また、前記問題点を解決するための発明に係るコンピュータは、
前記ＯＳプログラムが搭載されている、ことを特長とする。
【発明の効果】
【００１４】
本発明では、ＯＳプログラムに予め組み込まれているポリシデータベース中の複数のポリシデータを用いて、コンピュータのセキュリティを一定範囲で確保しているで、従来のSELinux手法のように、新たなプロセスが追加される毎に、このプロセスに対するドメインの設定、さらに、このドメインとオブジェクトのタイプとの関係付けを行う必要がなく、コンピュータユーザの負担を軽減することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明に係る第一実施形態におけるコンピュータの構成図である。
【図２】本発明に係る第一実施形態におけるポリシデータベースのデータ構成を示す説明図である。
【図３】本発明に係る第一実施形態におけるポリシコンテキストの記述例を示す説明図である。
【図４】本発明に係る第一実施形態におけるタスク・ストラクトのデータ構成を示す説明図である。
【図５】本発明に係る第一実施形態におけるシステムコールフック部の動作を示すフローチャートである。
【図６】図５のポリシマッチ判定処理（Ｓ１３）の詳細処理を示すフローチャートである。
【図７】本発明に係る第一実施形態におけるポリシコンテキストの更新過程を示す説明図である。
【図８】本発明に係る第一実施形態における変数対応表の更新過程を示す説明図である。
【図９】本発明に係る第一実施形態におけるＯＳ主機能部の動作を示すフローチャートである。
【図１０】本発明に係る第二実施形態におけるコンピュータの構成図である。
【図１１】本発明に係る第二実施形態におけるタスク・ストラクトのデータ構成を示す説明図ある。
【図１２】本発明に係る第二実施形態におけるシステムコールフック部の動作をを示すフローチャートである。
【図１３】図１２のポリシマッチ判定処理（Ｓ１３Ａ）の詳細処理を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、本発明に係るコンピュータの各実施形態について、図面を用いて説明する。
【００１７】
「第一実施形態」
本発明に係るコンピュータの第一実施形態について、図１〜図９を用いて説明する。
【００１８】
本実施形態のコンピュータ１００は、図１に示すように、各種演算処理を実行するＣＰＵ１１０と、ＣＰＵ１１０のワークエリア等になるＲＡＭ１２０と、データやプログラム等が予め格納されているＲＯＭ１３０と、ハードディスクドライブ装置等の補助記憶装置１４０と、ディスプレイ１５１と、キーボードやマウス等の入力装置１５２と、ディスプレイ１５１や入力装置１５２のインタフェースである入出力インタフェース１５０と、ネットワークＮを介して他の装置と通信するためのネットワークインタフェース１６０と、を備えている。
【００１９】
補助記憶装置１４０には、ＯＳ（Operating System）プログラム１４１と、アプリケーションプログラム１４８とが予め格納されている。ＯＳプログラム１４１は、プロセスからの各種システムコールを処理するためのプログラムであるＯＳ主機能モジュール１４２と、プロセスからのシステムコールを監視するためのプログラムであるシステムコールフックモジュール１４３と、規制対象とすべき複数のシステムコールの組合わせ等が示されている複数のポリシデータを含むポリシデータベース１４４と、を有している。
【００２０】
ＣＰＵ１１０は、機能的に、ＯＳ実行部１１１とプロセス１１８とを有している。このＯＳ実行部１１１は、ＣＰＵ１１０がＯＳ主機能モジュール１４２をＲＡＭ１２０にロードし、これを実行することで機能するＯＳ主機能部１１３と、ＣＰＵ１１０がシステムコールフックモジュール１４３をＲＡＭ１２０にロードし、これを実行することで機能するシステムコールフック部１１３と、を有している。プロセス１１８は、ＣＰＵ１１０がアプリケーションプログラム１４８をＲＡＭ１２０にロードし、これを実行することで機能する。
【００２１】
ＲＡＭ１２０には、ＯＳ実行部１１１により、プロセス１１８を管理するためのタスク・ストラクト１２１と、ポリシデータベース１４４の一つのポリシデータのコピーであるポリシデータコピー１２５と、プロセス１１８からのシステムコールに含まれている変数と代入値との関係を示す変数対応表１２７とが作成される。
【００２２】
補助記憶装置１４０に格納されているポリシデータベース１４４は、図２に示すように、複数のポリシデータ１４５と、オブジェクトタイプ表１４６とを有している。
【００２３】
ポリシデータ１４５は、当該ポリシデータを一意に識別するためのポリシＩＤ１４５ａと、規制対象とすべき複数のシステムコールの組合わせを記述したポリシコンテキスト１４５ｂと、ＯＳ主機能部１１２に処理動作させるべき規制処理内容を示すアクション１４５ｃと、を有している。
【００２４】
ポリシＩＤ１４５ａは、ここでは、重要度の高いポリシデータ順に、１，２，３，…と付される。
【００２５】
ポリシコンテキスト１４５ｂは、実行することによって情報漏えいやシステムダウン等、ユーザにとって好ましくない状況を引き起こす可能性のある複数のシステムコールの組み合わせ、つまり、前述したように、規制対象とすべき複数のシステムコールの組合せを記述したものである。
【００２６】
アクション１４５ｃは、プロセスからの複数のシステムコールがポリシコンテキスト１４５ｂにマッチしたときに、ＯＳ主機能部１１２に処理動作させるべき規制処理内容を示すシステムコールである。ポリシデータ１４５中で、このアクション１４５ｃが記述される領域は、プロセスからの複数のシステムコールがポリシコンテキスト１４５ｂにマッチしたときに、ＯＳ主機能部１１２に処理動作させるべきシステムコールが存在しない場合には、空欄となる。また、ポリシデータ１４５中で、このアクション１４５ｃが記述される領域には、実行順序を指定して複数のシステムコールを記述される場合もある。
【００２７】
具体的に、アクション１４５ｃには、システムコールを出力したプロセスの強制終了を意味するシステムコール「exit（1）」や、このプロセスの停止を意味するシステムコール等が記述される。また、アクション１４５ｃには、エラーメッセージを出力する旨のシステムコールと受付システムコールとが、出力順序を定められた形で記述される場合もある。このアクションは、まず、エラーメッセージを出力する旨のシステムコールをＯＳ主機能部１１２に出力し、次に、ステップ１０で受け付けたシステムコールをＯＳ主機能部１１２に出力することを意味する。
【００２８】
オブジェクトタイプ表１４６は、補助記憶装置１４０に格納されているファイルやディレクトリ等のオブジェクト（アクセス対象）の名前が格納されるオブジェクト名領域１４６ａと、オブジェクトの属性が格納されるオブジェクトタイプ領域１４６ｂと、を有する。
【００２９】
オブジェクトタイプ領域１４６ｂに格納されるオブジェクトの属性としては、機密情報を含むファイル等であることを示す「secret」や、一般ファイル等であることを示す「normal」等がある。
【００３０】
なお、ポリシデータベース１４４中の複数のポリシデータ１４５は、基本的に、ＯＳプログラム１４１に予め組み込まれているものであるが、ＯＳ主機能部１１２が、入力装置１５１から新たなポリシデータを受け付けて、又は、既存のポリシデータの変更内容を受け付けて、これをポリシデータベース１４４中に格納するようにしてもよい。
【００３１】
また、オブジェクトタイプ表１４６の各領域１４６ａ，１４６ｂには、補助記憶装置１４０に新たにファイル等が格納される際に、ＯＳ主機能部１１２又はシステムコールブック部１１３により、入力装置１５１から受け付けたデータが格納される。このため、ユーザは、新たなファイル等を作成する際には、入力装置１５１を操作して、そのオブジェク名及びオブジェクトタイプを指定することになる。但し、ユーザは、新たなファイル等を作成する毎に、必ず、そのオブジェクト名及びオブジェクトタイプを指定する必要はないが、機密情報を含むファイル等を作成する際には、そのオブジェクト名及びオブジェクトタイプを指定することが好ましい。
【００３２】
次に、以上で説明したポリシコンテキスト１４５ｂの具体的な記述形式について、図３を用いて説明する。
【００３３】
複数のシステムコールの組合わせは、「→」と「and」と「or」と用いて表現される。
【００３４】
「→」は、この「→」を中心として両側に記述されたシステムコールの順序を示し、「→」の左辺に記述されたシステムコールが、「→」の右辺に記述されたシステムコールより、プロセスからの出力順序が先であることを意味させる記号である。
【００３５】
「and」は、この「and」の両側に記述されたシステムコールが、プロセスからのシステムコールであることを意味させる記号である。また、「or」は、この「or」の両側に記述されたシステムコールのうち、いずれか一方のシステムコールが、プロセスからのシステムコールであることを意味させる記号である。
【００３６】
また、システムコールの引数として、変数、及びオブジェクトタイプ条件付き変数を記述できる。変数は、１以上のアルファベットで記述される。また、オブジェクトタイプ条件付き変数は、まず、オブジェクトタイプが記述され、このオブジェクトタイプの右辺に、「＆」が記述され、この「＆」の右辺に、１以上のアルファベットにより変数が記述される。
【００３７】
具体的に、図３中のポリシコンテキスト１４５Ａｂは、プロセスからシステムコール「open（ｘ）」が出力された後、プロセスからシステムコール「sendto(x,y)」が出力され、且つ、システムコール「open（ｘ）」の引数とシステムコール「sendto(x,y)」の第一引数とが等しいという意味を表現するポリシである。
【００３８】
このため、実際に、プロセスからシステムコール「open」が出力された後、プロセスからシステムコール「sendto」が出力され、しかも、システムコール「open」の引数とシステムコール「sendto」の第一引数とが等しい場合、これらのシステムコールの組み合わせは、このポリシコンテキスト１４５ｂＡが示すポリシにマッチすることになる。
【００３９】
なお、実際に、プロセスからシステムコール「open（ｘ）」が出力された後、プロセスから他のシステムコールが出力され、さらに、その後に、プロセスからシステムコール「sendto(x,y)」が出力された場合も、本実施形態では、このポリシコンテキスト１４５Ａｂが示すポリシにマッチしていると定義する。
【００４０】
また、図３中のポリシコンテキスト１４５Ｂｂは、プロセスからシステムコール「open（ｘ）」とシステムコール「sendto(x,y)」とが出力され、且つ、システムコール「open（ｘ）」の引数とシステムコール「sendto(x,y)」の第一引数とが等しいという意味を表現するポリシである。
【００４１】
図３中のポリシコンテキスト１４５Ｃｂは、プロセスからシステムコール「open（ｘ）」システムコール「sendto(x,y)」とのうちの一方のシステムコールが出力されたという意味を表現するポリシである。
【００４２】
ポリシコンテキスト１４５Ｄｂは、プロセスからシステムコール「open（ｘ）」とシステムコール「read（x）」とのうちの一方が出力された後、プロセスからシステムコール「sendto(x,y)」が出力され、且つ、システムコール「open（ｘ）」又はシステムコール「read（x）」の引数と、システムコール「sendto(x,y)」の第一引数とが等しいという意味を表現するポリシである。
【００４３】
図３中のポリシコンテキスト１４５Ｅｂは、プロセスからシステムコール「open（ｘ）」が出力された後、プロセスからシステムコール「sendto(x,y)」が出力され、且つ、システムコール「open（ｘ）」の引数とシステムコール「sendto(x,y)」の第一引数とが等しく、さらに、システムコール「open（ｘ）」の引数「ｘ」のオブジェクトタイプとシステムコール「sendto(x,y)」の第一引数「ｘ」のオブジェクトタイプがいずれも「secret_ｔ」であるという意味を表現するポリシである。
【００４４】
以上のように、本実施形態において、複数のシステムコールの組合わせとは、複数のシステムコールを単に全て含む場合の他、複数のシステムコールのいずれかを含む場合や、複数のシステムコールを含み且つこれらの順序が定められている場合、さらに、これらの組み合わせを含んでいる。
【００４５】
以上、ポリシコンテキスト１４５ｂの具体的な記述形式について説明したが、他の記述形式で、複数のシステムコールの組合せを記述してもよいことは言うまでもない。
【００４６】
次に、図４を用いて、タスク・ストラクト１２１について説明する。
【００４７】
このタスク・ストラクト１２１は、プロセス１１８（図１）を管理するために、このプロセス１１８に関するアプリケーションプログラム１４８（図１）の起動時に、ＯＳ実行部１１１により、ＲＡＭ１２０に上に作成される。
【００４８】
このタスク・ストラクト１２１は、プロセスの状態（正常動作中、停止中等）が格納されるプロセス状態領域１２１ａと、プロセスを一意に識別するためのプロセスＩＤが格納されるプロセスＩＤ領域１２１ｂと、プロセスによる使用メモリ量が格納される使用メモリ量領域１２１ｃと、プロセスからのシステムコール履歴が格納されるシステムコールテーブル１２１ｄと、図示されていないが、ＣＰＵの使用状況が格納される領域等を有する。
【００４９】
このタスク・ストラクト１２１は、ＯＳ主機能部１１２により、プロセス１１８に関するアプリケーションプログラム１４８の起動時に、ＲＡＭ１２０に上に作成される。また、このタスク・ストラクト１２１の各領域のデータのうち、システムコールテーブル１２１ｄを除く全ての領域のデータは、いずれも、ＯＳ主機能部１１２が更新する。一方、システムコールテーブル１２１ｄのデータは、システムコールフック部１１３が更新する。
【００５０】
システムコールフック部１１３は、プロセス１１８から順次出力されるシステムコールのうち、後述するように、ポリシデータベース１４４のいずれかのポリシデータ１４５中に記述されているシステムコール名に一致するシステムコール名のシステムコールを、線形リスト形式で、システムコールテーブル１２１ｄに格納する。なお、システムコール名とは、例えば、システムコール「open（ｘ）」の場合、「open」がシステムコール名である。
【００５１】
システムコールフック部１１３は、システムコールテーブル１２１ｄ中に、新たなシステムコールを追加する場合、システムコールテーブル１２１ｄ中のリストの末尾の位置に、「→」及び新たなシステムコールを格納する。
【００５２】
このように、システムコールテーブル１２１に、システムコールを順次格納することで、プロセスからの各システムコールの出力順を明記することができる。
【００５３】
次に、図５及び図６に示すフローチャートに従って、システムコールフック部１１３の動作について説明する。
【００５４】
アプリケーションプログラム１４８が起動し、このアプリケーションプログラム１４８によるプロセス１１８が動作可能な状態になると、ＯＳ主機能部１１２は、このプロセス１１８に関するタスク・ストラクト１２１をＲＡＭ１２１上に展開する。なお、この段階で、このタスク・ストラクト１２１のシステムコールテーブル１２１ｄ（図４）には、何ら記述されていない。
【００５５】
システムコールフック部１１３は、プロセス１１８が動作可能な状態になると、このプロセス１１８の監視を開始し、このプロセス１１８からのシステムコール出力を待ち（Ｓ１０）、プロセス１１８からのシステムコールを受け付けると、このシステムコールのシステムコール名がポリシデータベース１４４に記述されているいずれかのシステムコールのシステムコール名と一致するか否かを判断する（Ｓ１１）。
【００５６】
システムコールフック部１１３は、ステップ１０で受け付けたシステムコールのシステムコール名がポリシデータベース１４４に記述されているいずれのシステムコールのシステムコール名とも一致しないと判断すると、ステップ１０で受け付けたシステムコールをＯＳ主機能部１１２へ出力し（Ｓ１７）、ステップ１０に戻る。また、システムコールフック部１１３は、ステップ１０で受け付けたシステムコールのシステムコール名がポリシデータベース１４４に記述されているいずれかのシステムコールのシステムコール名と一致すると判断すると、ステップ１０で受け付けたシステムコールを、ＲＡＭ１２０上に展開されているシステムコールテーブル１２１ｄ（図４）に記述する（Ｓ１２）。そして、システムコールフック部１１３は、システムコールテーブル１２１ｄに記述されているシステムコールに関して、ポリシデータとのポリシマッチ判定を行う（Ｓ１３）。
【００５７】
システムコールフック部１１３は、このポリシマッチ判定処理（Ｓ１３）で、システムコールテーブル１２１ｄに記述されているシステムコールに関して、ポリシデータとマッチしていると判定すると、このポリシデータのポリシＩＤをＲＡＭ１２０上に一時的に記憶する。なお、このポリシマッチ判定処理に関しては、図６を用いて詳細に後述する。
【００５８】
システムコールフック部１１３は、ポリシマッチ判定処理（Ｓ１３）が終了すると、ＲＡＭ１２０上にポリシＩＤが記憶されているか否かを判断する（Ｓ１４）。システムコールフック部１１３は、ＲＡＭ１２０上にポリシＩＤが記憶されていない、言い換えると、システムコールテーブル１２１ｄに記述されているシステムコールとポリシデータとがマッチしていない、と判断すると、ステップ１０で受け付けたシステムコールをＯＳ主機能部１１２へ出力し（Ｓ１７）、ステップ１０に戻る。
【００５９】
また、システムコールフック部１１３は、ＲＡＭ１２０上にポリシＩＤが記憶されている、言い換えると、システムコールテーブル１２１ｄに記述されているシステムコールとポリシデータとがマッチしている、と判断すると、当該ポリシＩＤのポリシデータからシステムコールの一種であるアクションを抽出し（Ｓ１５）、このアクションをＯＳ主機能部１１２へ出力して（Ｓ１６）、ステップ１０に戻る。
【００６０】
次に、ポリシマッチ判定処理（Ｓ１３）の詳細処理について説明する。
【００６１】
ここで、以下の説明の都合上、プロセス１１８からは、図４のシステムコールテーブル１２１ｄに示すように、システムコール「open（myfile）」が出力され、その後、システムコール「sendto(myfile,server)」が出力され、さらに、その後、システムコール「close(…)」が出力されると、仮定する。また、ポリシデータベース１４４には、ポリシデータ１４５として、図２に示す、ポリシＩＤ「８」のポリシデータ１４５のみが格納され、オブジェクトタイプ表１４６として、図２に示すものが格納されていると、仮定する。
【００６２】
図５を用いて前述したように、プロセス１１８からシステムコール「open（myfile）」が出力され、これをシステムコールフック部１１３が受け付けると（Ｓ１０）、このシステムコールのシステムコール名「open」と、図２に示すポリシデータベース１４４のポリシデータ１４５に記述されているシステムコール名とを比較する(Ｓ１１)。この際、システムコールフック部１１３は、ポリシデータ１４５中に、受け付けたシステムコールのシステムコール名「open」と一致するものがあると判断して、このシステムコール「open（myfile）」を、ＲＡＭ１２０上に展開されているシステムコールテーブル１２１ｄ（図４）に記述し（Ｓ１２）、ポリシマッチ判定処理（Ｓ１３）を開始する。
【００６３】
システムコールフック部１１３は、ポリシマッチ判定処理で、図６のフローチャートに示すように、まず、システムコールテーブル１２１ｄから、先頭要素としてのシステムコールをターゲットシステムコールとして抽出する（Ｓ２０）。この場合、システムコールテーブル１２１ｄには、システムコール「open（myfile）」しか記述されていないので、このシステムコール「open（myfile）」をターゲットシステムコールとして抽出する。
【００６４】
システムコールフック部１１３は、次に、全てのポリシデータ１４５をコピーしたか否かを判断する（Ｓ２１）。この場合、ポリシデータ１４５を未だコピーしていないので、全てのポリシデータ１４５をコピーしていないと判断し、未コピーのポリシデータ１４５をコピーして、これをポリシデータコピー１２５としてＲＡＭ１２１を展開すると共に、変対応表１２７をＲＡＭ１２０上に展開する（Ｓ２２）。
【００６５】
図２及び図７に示すように、この段階で作成されるポリシデータコピー１２５Ａは、ポリシデータ１４５をコピーしたものであるから、このポリシデータ１４５のポリシＩＤ１４５ａと同じポリシＩＤ１２５ａと、このポリシデータ１４５のポリシコンテキスト１４５ｂと同じポリシコンテキストコピー１２５Ａｂと、このポリシデータのアクション１４５ｃと同じアクション１２５ｃとを有している。
【００６６】
また、図８に示すように、変数対応表１２７Ａは、ポリシデータコピー１２５Ａ内の引数「ｘ、ｙ」が変数として格納される変数領域１２７ａと、ターゲットシステムコールの引数が代入値として格納される代入値領域１２７ｂとを有する。この段階で、変数対応表１２７Ａには、変数領域１２７ａに、ポリシリコンテキストコピー１２５Ａｂに記述されている全てのシステムコールの引数「ｘ、ｙ」が格納され、代入値領１２７ｂには、何ら格納されない。
【００６７】
システムコールフック部１１３は、ポリシリコンテキストコピーとターゲットシステムコールとを比較し（Ｓ２３）、このターゲットシステムコールがポリシコンテキストコピー中の対応要素と要素マッチしているか否かを判定する（Ｓ２４）。
【００６８】
ここでの判定では、以下の三つの条件ａ）ｂ）ｃ）を満たす場合に、要素マッチと判定する。但し、条件ｃ）は、ポリシコンテキストコピー中でターゲットシステムコールに対応する要素がオブジェクトタイプ条件付き変数である場合に適用される条件であり、ポリシコンテキストコピー中でターゲットシステムコールに対応する要素がオブジェクトタイプ条件付き変数でない場合には、二つの条件ａ）ｂ）を満たす場合に、要素マッチと判定する。
【００６９】
ａ）ターゲットシステムコールのシステムコール名がポリシコンテキストコピー内に存在する。
【００７０】
ｂ）ターゲットシステムコール中の引数が変数対応表１２７Ａ内の変数と代入値との組合わせに矛盾がない。
【００７１】
ｃ）ターゲットシステムコール中の引数に関するオブジェクトタイプと、ポリシコンテキストコピーの対応システムコール中に記述されているオブジェクトタイプとが一致する。
【００７２】
この場合、ターゲットシステムコール「open（myfile）」のシステムコール名「open」であり、ポリシリコンテキストコピー１２５Ａｂ内の先頭要素であるシステムコール名が「open」又は「read」であるため、システムコールフック部１１３は、条件ａ）を満たすと判定する。
【００７３】
また、変数対応表１２７Ａ（図８）には、変数領域１２７ａに「ｘ、ｙ」が格納され、代入値領１２７ｂには何ら格納されておらず、代入値として任意の値を代入することが可能であるため、ターゲットシステムコール「open（myfile）」中の引数「myfile」は、変数対応表１２７Ａ内の変数と変数対応表１２７Ａ内の代入値との組合わせに矛盾せず、システムコールフック部１１３は、条件ｂ）を満たすと判定する。なお、矛盾する場合については後述する。
【００７４】
また、ターゲットシステムコール「open（myfile）」中の引数「myfile」に関するオブジェクトタイプは、オブジェクトタイプ表１４６（図２）によれば「secret_t」であり、ポリシコンテキスト１２５Ａｂの対応システムコール「open」中に記述されているオブジェクトタイプも「secret_t」であるため、システムコールフック部１１３は、条件ｃ）を満たすと判定する。
【００７５】
よって、この場合、システムコールフック部１１３は、このターゲットシステムコール「open（myfile）」がポリシコンテキスト１２５Ａｂと要素マッチしていると判定する。
【００７６】
システムコールフック部１１３は、ステップ２４でターゲットシステムコールがポリシコンテキストコピーと要素マッチしていないと判定すると、ステップ２７に進み、要素マッチしていると判定すると、ポリシリコンテキストコピー及び変数対応表１２７を更新する（Ｓ２５）。
【００７７】
ここで、ポリシリコンテキストコピーの更新とは、このポリシコンテキストコピー中で、ターゲットシステムコールに対する対応要素を、マッチしたことを示す「true」に変更する等を行って、このポリシコンテキストコピーの記述内容を整理することである。
【００７８】
具体的に、システムコールフック部１１３は、図７に示すように、ポリシリコンテキストコピー１２５Ａｂの更新では、まず、ポリシリコンテキストコピー１２５Ａｂ中で要素マッチと判定した「open(secret_t & x)」を、マッチしたことを示す「true」に変更したポリシリコンテキストコピー１２５Ｂｂを作成する。次に、このポリシコンテキストコピー１２５Ｂｂ中の「or」の左辺が「true」になったため、or式の全体を「true」に変更したポリシコンテキストコピー１２５Ｃｂを作成する。以上で、この段階でのポリシコンテキストコピーの更新が終了する。
【００７９】
また、ここでの変数対応表１２７の更新とは、変数対応表１２７の代入値領域１２７ｂに、ターゲットシステムコールの引数を格納することである。
【００８０】
具体的に、システムコールフック部１１３は、図８に示すように、変数対応表１２７Ａの代入値領域１２７ｂのうち、ポリシリコンテキストコピー１２５Ａｂ中の対応要素の引数「ｘ」に対応する代入値領域１２７ｂに、ターゲットシステムコール「open（myfile）」の引数「myfile」を格納し、変数対応表１２７Ｂを作成する。
【００８１】
システムコールフック部１１３は、ポリシコンテキストコピー及び変数対応表１２７の更新が終了すると（Ｓ２５）、ターゲットシステムコールの受け付けで、ポリシマッチしたか否かを判定し（Ｓ２６）、ポリシマッチしたと判定すると、ポリシデータコピー１２５のポリシＩＤ１２５ａをマッチポリシＩＤとしてＲＡＭ１２０に記憶する（Ｓ２９）。また、ポリシアンマッチと判定するとステップ２７に進む。ポリシマッチの判定は、ポリシコンテキストコピーの記述内容が「true」のみであるか否かによる。
【００８２】
ここでは、図７に示すように、ポリシコンテキストコピー１２５Ｃｂの記述内容が「true」のみでないため、ポリシアンマッチと判定し、ステップ２７に進む。
【００８３】
システムコールフック部１１３は、ステップ２４で要素マッチしていないと判定した場合、さらに、上述のステップ２６でポリシアンマッチと判定した場合、システムコールテーブル１２１ｄから全ての要素を抽出したか否かを判定する（Ｓ２７）。全ての要素を抽出していればステップ３０に進み、全ての要素を抽出していればステップ２８に進む。
【００８４】
この場合、システムコールテーブル１２１ｄには、システムコール「open（myfile）」のみしか記述されていないため、システムコールフック部１１３は、システムコールテーブル１２１ｄから全ての要素を抽出したと判定し、ステップ３０に進む。
【００８５】
システムコールフック部１１３は、ステップ３０で、ポリシデータコピー及び変数対応表１２７をＲＡＭ１２０から削除し、ステップ２１に戻る。
【００８６】
システムコールフック部１１３は、ステップ２１で、前述したように、全てのポリシデータ１４５をコピーしたか否かを判断する。ここでは、前述したように、ポリシデータベース１４４にはポリシデータ１４５が一つか格納されていないと仮定しているので、全てのポリシデータ１４５をコピーしたと判断し、ポリシマッチ判定処理（Ｓ１３）を終了する。一方、ポリシデータベース１４４にはポリシデータ１４５が複数格納されている場合、システムコールフック部１１３は、前述のステップ２２以降の処理を実行する。
【００８７】
図５を用いて前述したように、システムコールフック部１１３は、以上で説明したポリシマッチ判定処理（Ｓ１３）を終了すると、ＲＡＭ１２０上にマッチポリシＩＤが記憶されているか否かを判断する（Ｓ１４）。この場合、ＲＡＭ１２０上にマッチポリシＩＤが記憶されていないため、ステップ１０で受け付けたシステムコールをＯＳ主機能部１１２へ出力して（Ｓ１７）、ステップ１０に戻る。
【００８８】
次に、プロセス１１８から、前述のシステムコール「open（myfile）」の出力後、システムコール「sendto（myfile，server）」が出力された場合について説明する。
【００８９】
図５を用いて前述したように、プロセス１１８からシステムコール「sendto（myfile，server）」が出力され、これをシステムコールフック部１１３が受け付けると（Ｓ１０）、このシステムコールのシステムコール名「sendto」と、図２に示すポリシデータベース１４４のポリシデータ１４５に記述されているシステムコール名とを比較する(Ｓ１１)。この際、システムコールフック部１１３は、ポリシデータ１４５中に、受け付けたシステムコールのシステムコール名「sendto」と一致するものがあると判断して、このシステムコール「sendto（myfile，server）」を、ＲＡＭ１２０上に展開されているシステムコールテーブル１２１ｄ（図４）に追記する（Ｓ１２）。この結果、システムコールテーブル１２１ｄには、open（myfile）→ … → sendto（myfile，server）が記述されることになる。
【００９０】
システムコールフック部１１３は、次に、ポリシマッチ判定処理を行う（Ｓ１３）。このポリシマッチ判定処理で、システムコールフック部１１３は、図６のフローチャートに示すように、まず、システムコールテーブル１２１ｄから、先頭要素としてのシステムコールをターゲットシステムコールとして抽出する（Ｓ２０）。この場合、システムコールテーブル１２１ｄには、先頭要素としてシステムコール「open（myfile）」が記述されているので、このシステムコール「open（myfile）」をターゲットシステムコールとして抽出する。
【００９１】
システムコールフック部１１３は、以降、システムコール「open（myfile）」を受け付けたときのポリシマッチ判定処理と同様、ステップ２１，２２，２３，２４，２５，２６，２７を実行する。この結果、ポリシコンテキストコピーは、図７中のポリシコンテキストコピー１２５Ｃｂの状態になり、変数対応表１２７は、図８中の変数対応表１２７Ｂの状態になる。
【００９２】
システムコールフック部１１３は、ステップ２７で、前述したように、システムコールテーブル１２１ｄから全ての要素を抽出したか否かを判定する。この場合、システムコールテーブル１２１ｄには、システムコール「open（myfile）」の他に、システムコール「sendto（myfile，server）」も記述されているため、システムコールフック部１１３は、システムコールテーブル１２１ｄから全ての要素を抽出していないと判定し、ステップ２８に進む。
【００９３】
システムコールフック部１１３は、ステップ２８で、システムコールテーブル１２１ｄから次要素を抽出して、これをターゲットシステムコールとし、ステップ２３に戻る。この場合、システムコールフック部１１３は、ターゲットシステムコールとしてシステムコール「sendto（myfile，server）」を抽出する。
【００９４】
次に、システムコールフック部１１３は、前述したように、ポリシリコンテキストコピーとターゲットシステムコールとを比較し（Ｓ２３）、このターゲットシステムコールがポリシコンテキストコピー中の対応要素と要素マッチしているか否かを判定する（Ｓ２４）。
【００９５】
この要素マッチ判定では、ポリシコンテキストコピー１２５Ｃｂ中でターゲットシステムコール「sendto（myfile，server）」に対応する要素「sendto（x，y）」がオブジェクトタイプ条件付き変数でないので、上記三つの条件ａ）ｂ）ｃ）のうち、条件ａ）ｂ）を満たす場合に、要素マッチと判定する。
【００９６】
この場合、ターゲットシステムコール「sendto（myfile，server）」のシステムコール名「sendto」であり、ポリシリコンテキストコピー１２５Ｃｂ内の対応要素であるシステムコール名が「sendto」であるため、システムコールフック部１１３は、条件a)を満たすと判定する。
【００９７】
また、この場合、変数対応表１２７Ｂ（図８）には、変数領域１２７ａに「ｘ、ｙ」が格納され、代入値領１２７ｂには、変数ｘに対応する代入値として「myfile」が格納されており、変数ｙに対する代入値が格納されていない。また、ターゲットシステムコール「sendto（myfile，server）」中の引数「myfile，server」は、変数対応表１２７Ａ内の変数と変数対応表１２７Ａ内の代入値との組合わせに矛盾せず、システムコールフック部１１３は、条件ｂ）を満たすと判定する。なお、仮に、ターゲットシステムコールが「sendto（ourfile，server）」である場合には、変数ｘに対応する値が「myfile」ではなく「ourfile」であるため、変数対応表１２７Ａ内の変数と変数対応表１２７Ａ内の代入値との組合わせに矛盾し、条件ｂ）を満たさないと判定することになる。
【００９８】
よって、この場合、システムコールフック部１１３は、このターゲットシステムコール「sendto（myfile，server）がポリシコンテキスト１２５Ｃｂと要素マッチしていると判定する。
【００９９】
システムコールフック部１１３は、ステップ２３でターゲットシステムコールがポリシコンテキストコピーと要素マッチしていると判定すると、ポリシリコンテキストコピー及び変数対応表１２７を更新する（Ｓ２５）。
【０１００】
具体的に、システムコールフック部１１３は、図７に示すように、ポリシリコンテキストコピー１２５Ｃｂの更新では、まず、ポリシリコンテキストコピー１２５Ｃｂ中で要素マッチと判定した「sendto（x，y）」を、マッチしたことを示す「true」に変更したポリシリコンテキストコピー１２５Ｄｂを作成する。次に、このポリシコンテキストコピー１２５Ｄｂ中の「→」の両辺が「true」になったため、全体を「true」に変更したポリシコンテキストコピー１２５Ｅｂを作成する。以上で、ポリシコンテキストコピーの更新が終了する。
【０１０１】
また、システムコールフック部１１３は、図８に示すように、変数対応表１２７Ｂの代入値領域１２７ｂのうち、ポリシリコンテキストコピー１２５Ｃｂ中の対応要素の引数「ｘ，ｙ」のうち、引数「ｙ」に対応する代入値領域１２７ｂに、ターゲットシステムコール「sendto（myfile，server）」の引数「server」を格納し、変数対応表１２７Ｅを作成する。
【０１０２】
システムコールフック部１１３は、ポリシコンテキストコピー及び変数対応表１２７の更新が終了すると、前述したように、ターゲットシステムコールの受け付けで、ポリシマッチしたか否かを判定する（Ｓ２８）。この場合、ポリシコンテキストコピー１２５Ｅｂの記述内容が「true」のみであるため、ポリシマッチと判定し、ステップ２９に進む。
【０１０３】
システムコールフック部１１３は、ステップ２９で、前述したように、ポリシデータコピー１２５のポリシＩＤ１２５ａをマッチポリシＩＤとしてＲＡＭ１２０に記憶する。この場合、ポリシデータコピー１２５のポリシＩＤ１２５ａ「８」をマッチポリシＩＤとしてＲＡＭ１２０に記憶する。
【０１０４】
そして、システムコールフック部１１３は、ポリシデータコピー１２５及び変数対応表１２７をＲＡＭ１２０から削除してから（Ｓ３０）、ステップ２１に戻る。
【０１０５】
システムコールフック部１１３は、ステップ２１で、全てのポリシデータ１４５をコピーしたと判断すると、このポリシマッチ判定処理（Ｓ１３）を終了する。
【０１０６】
図５を用いて前述したように、システムコールフック部１１３は、以上で説明したポリシマッチ判定処理（Ｓ１３）を終了すると、ＲＡＭ１２０上にマッチポリシＩＤが記憶されているか否かを判断する（Ｓ１４）。この場合、ＲＡＭ１２０上にマッチポリシＩＤ「８」が記憶されているため、システムコールフック部１１３は、このマッチポリシＩＤ「８」のポリシデータ１４５からアクション１４５ｃとしての「exit（1）」を抽出する（Ｓ１５）。そして、システムコールフック部１１３は、アクション１４５ｃとしての「exit（1）」をＯＳ主機能部１１２へ出力してから（Ｓ１６）、ステップ１０に戻る。
【０１０７】
なお、ポリシマッチ判定処理（Ｓ１３）では、複数のポリシデータの全てに関して判定が実行されるため、システムコールテーブル１２１ｄに記述されているシステムコールが複数のポリシデータにマッチしており、ＲＡＭ１２０上に複数のマッチポリシＩＤが記憶されている場合がある。この場合、システムコールフック部１１３は、ステップ１６において、マッチポリシＩＤが小さい、つまり重要度の高いポリシデータ中のアクションから順に、ＯＳ主機能部１１２へ出力する。
【０１０８】
次に、図９に示すフローチャートに従って、ＯＳ主機能部１１２の動作について説明する。
【０１０９】
ＯＳ主機能部１１２は、システムコールフック部１１３からのシステムコール出力を待ち（Ｓ４０）、このシステムコールを受け付けると、このシステムコールを実行し（Ｓ４１）、ステップ４０に戻る。
【０１１０】
システムコールフック部１１３から出力されるシステムコールとしては、システムコールフック部１１３がプロセス１１８から受け付けたシステムコールと、ポリシマッチしたときにシステムコールフック部１１３が出力するアクションとしてのシステムコールとがある。さらに、アクションとしてのシステムコールには、プロセスの動作規制を示すシステムコールのみの場合と、プロセスの動作規制を示すシステムコールと受付システムコール（プロセス１１８から受け付けたシステムコール）とを含む場合とがある。
【０１１１】
ＯＳ主機能部１１２は、以上のシステムコールを実行する。具体的に、ポリシマッチしたときにシステムコールフック部１１３が出力するアクションとしてのシステムコールとして、プロセスの強制終了又は停止を意味するシステムコールを受け付けると、このプロセスを強制終了又は停止する。また、アクションとしてのシステムコールとして、エラーメッセージを出力する旨のシステムコールに引き続き、受付システムコールを受け付けると、ディスプレイ１５２にエラーメッセージを表示させてから、当該受付システムコールを実行する。
【０１１２】
以上のように、本実施形態では、ＯＳプログラム１４１に予め組み込まれているポリシデータベース１４４中の複数のポリシデータを用いて、コンピュータのセキュリティを一定範囲で確保しているで、従来のSELinux手法のように、新たなプロセスが追加される毎に、このプロセスに対するドメインの設定、さらに、このドメインとオブジェクトのタイプとの関係付けを行う必要がなく、コンピュータユーザの負担を軽減することができる。
【０１１３】
また、従来のSELinux手法では、例えば、システムコール「open」でオブジェクトにアクセスしようとした場合、このオブジェクトがアクセス規制のタイプであれば、このシステムコールの実行を認めていない。しかしながら、実際には、単に、プロセスが規制対象のオブジェクトにアクセスしただけでは、外部に情報漏えいすることがない。つまり、アクセス規制対象のオブジェクトであっても、このオブジェクトにアクセスするという行為自体を防止する必要はない。
【０１１４】
一方、本実施形態では、ポリシデータとして、システムコール「open」とシステムコール「sendto（オブジェクトを他のコンピュータに送る旨を示すシステムコール）」とを組合わせたポリシデータが存在していれば、システムコール「open」でのオブジェクトがアクセス規制対象であっても、このシステムコール「open」を実行する。そして、このシステムコール「open」を実行した後、システムコール「sendto」を実行しようとした場合に、この実行を認めていない。よって、本実施形態では、不必要にシステムコールの実行を制限せずに、情報漏えいを防ぐことができる。
【０１１５】
なお、本実施形態では、ＯＳ主機能部１１２が、システムコールテーブル１２１ｄを含むタスク・ストラクト１２１のＲＡＭ１２０上に作成しているが、システムコールテーブル１２１ｄをＲＡＭ上に作成するものの、このシステムコールテーブル１２１ｄをタスク・ストラクト１２１内に設けない場合には、システムコールフック部１１３がシステムコールテーブル１２１ｄの作成及び更新を行うようにしてもよい。
【０１１６】
「第二実施形態」
本発明に係るコンピュータの第二実施形態について、図１０〜図１３を用いて説明する。
【０１１７】
本実施形態のコンピュータ１００Ａは、そのハードウェア構成が第一実施形態と同一で、ソフトウェア構成のみが異なっている。すなわち、補助記憶装置１４０に格納されているＯＳプログラム１４２Ａが第一実施形態と異なっている。
【０１１８】
ＯＳプログラム１４２Ａは、第一実施形態と異なるＯＳ主機能モジュール１４２Ａ及びシステムコールフックモジュール１４３Ａと、第一実施形態と同じポリシデータベース１４４とを有している。
【０１１９】
このように、ＯＳ主機能モジュール１４２Ａ及びシステムコールフックモジュール１４３Ａが第一実施形態と異なるため、ＣＰＵ１１０の機能構成の一つであるＯＳ実行部１１１Ａ、その要素であるＯＳ主機能部１１２Ａ及びシステムコールフック部１１３Ａも第一実施形態と異なっている。なお、ＯＳ主機能部１１２Ａ及びシステムコールフック部１１３Ａに関する第一実施形態との相違点に関しては、後述の動作説明の際に説明する。
【０１２０】
ＲＡＭ１２０に上に作成されるタスク・ストラクト１２１Ａは、図１１に示すように、第一実施形態におけるシステムコールテーブル１２１ｄの替わりに、ポリシデータコピーテーブル１２１ｅを有している。
【０１２１】
このポリシデータコピーテーブル１２１ｅは、ポリシデータベース１４４に格納されている全てのポリシデータ１４５がコピーされたポリシデータコピー１２５，１２５，…と、各ポリシデータコピー１２５，１２５，…に対応付けられた変数対応表１２７，１２７，…と、を有している。
【０１２２】
このタスク・ストラクト１２１Ａは、ＯＳ主機能部１１２Ａにより、プロセス１１８に関するアプリケーションプログラム１４８の起動時に、ＲＡＭ１２０に上に作成される。また、このタスク・ストラクト１２１Ａの各領域のデータのうち、ポリシコピーテーブル１２１ｅを除く全ての領域のデータは、いずれも、ＯＳ主機能部１１２Ａにより更新される。一方、ポリシコピーテーブル１２１ｅのデータは、システムコールフック部１１３Ａにより更新される。
【０１２３】
次に、図１２及び図１３に示すフローチャートに従って、システムコールフック部１１３の動作について説明する。なお、図１２及び図１３中で、第一実施形態と異なる符合が付されているブロックは、第一実施形態と異なる処理を行うブロックである。
【０１２４】
アプリケーションプログラム１４８が起動し、このアプリケーションプログラム１４８によるプロセス１１８が動作可能な状態になると、ＯＳ主機能部１１２Ａは、このプロセス１１８に関するタスク・ストラクト１２１ＡをＲＡＭ１２１上に展開する。この際、タスク・ストラクト１２１Ａのポリシデータコピーテーブル１２１ｅには、前述したように、ポリシデータベース１４４内の全てのポリシデータ１４５のポリシデータコピー１２５，１２５，…が作成されると共に、各ポリシデータコピー１２５，１２５，…に対応付けて変数対応表１２７，１２７，…が作成される。
【０１２５】
本実施形態のＯＳ主機能部１１２Ａは、以上のタスク・ストラクト１２１Ａの作成動作が第一実施形態と異なる。
【０１２６】
システムコールフック部１１３Ａは、プロセス１１８が動作可能な状態になると、このプロセス１１８の監視を開始し、このプロセス１１８からのシステムコール出力を待ち（Ｓ１０）、プロセス１１８からのシステムコールを受け付けると、このシステムコールに関して、ポリシデータとのポリシマッチ判定を行う（Ｓ１３Ａ）。
【０１２７】
システムコールフック部１１３Ａは、次に、第一実施形態と同様、ＲＡＭ１２０上にポリシＩＤが記憶されているか否かを判断する（Ｓ１４）。そして、システムコールフック部１１３Ａは、ＲＡＭ１２０上にポリシＩＤが記憶されていない、言い換えると、ポリシアンマッチと判断すると、このシステムコールをＯＳ主機能部１１２Ａへ出力し（Ｓ１７）、ステップ１０に戻る。
【０１２８】
また、システムコールフック部１１３Ａは、ＲＡＭ１２０上にポリシＩＤが記憶されている、言い換えると、ポリシマッチと判断すると、当該ポリシＩＤのポリシデータコピーからシステムコールの一種であるアクションを抽出し（Ｓ１５Ａ）、当該ポリシＩＤのポリシデータコピー１２５及び変数対応表１２７を削除した後、当該ポリシＩＤの新たなポリシデータコピー１２５及び変数対応表１２７を再生する（Ｓ１９）。そして、システムコールフック部１１３Ａは、ステップ１５Ａで抽出したアクションをＯＳ主機能部１１２へ出力して（Ｓ１６）、ステップ１０に戻る。
【０１２９】
次に、ポリシマッチ判定処理（Ｓ１３Ａ）の詳細処理について、図１３のフローチャートに従って説明する。
【０１３０】
システムコールフック部１１３Ａは、ポリシデータコピーテーブル１２１ｅ内の全てのポリシリコンテキストコピー１２５ｂ，１２５ｂ，…とターゲットシステムコールとを比較し（Ｓ２３Ａ）、このターゲットシステムコールがいずれかのポリシコンテキストコピー１２５ｂ中の対応要素と要素マッチしているか否かを、第一実施形態と同様の判定手法で判定する（Ｓ２４Ａ）。
【０１３１】
システムコールフック部１１３Ａは、ターゲットシステムコールがいずれのポリシコンテキストコピー１２５ｂ中の対応要素とも要素マッチしていないと判定すると、直ちに、このポリシマッチ判定処理（Ｓ１３Ａ）を終了する。
【０１３２】
また、システムコールフック部１１３Ａは、要素マッチしていると判定すると、要素マッチと判定した全てのポリシコンテキストコピー１２５ｂ、これに対応する変数対応表１２７を、第一実施形態と同様の手法で更新する（Ｓ２５Ａ）。
【０１３３】
システムコールフック部１１３Ａは、次に、ステップ２５Ａで更新した全てのポリシコンテキストコピー１２５ｂに関して、いずれかがポリシマッチしていることを示しているか否かを判定する（Ｓ２６ａ）。なお、ポリシコンテキストコピー１２５ｂがポリシマッチしていることを示しているか否かは、第一実施形態と同様、その記述内容が「true」のみであるか否かによる。
【０１３４】
システムコールフック部１１３Ａは、いずれかのポリシコンテキストコピー１２５ｂがポリシマッチしたことを示している判定すると、そのポリシデータコピー１２５ｂのポリシＩＤ１２５ａをマッチポリシＩＤとしてＲＡＭ１２０に記憶して（Ｓ２９Ａ）、ポリシマッチ判定処理（Ｓ１３Ａ）を終了する。また、ポリシアンマッチと判定すると、直ちに、ポリシマッチ判定処理（Ｓ１３Ａ）を終了する。
【０１３５】
以上のように、本実施形態でも、本実施形態では、ＯＳプログラム１４１に予め組み込まれているポリシデータベース１４４中の複数のポリシデータを用いて、コンピュータのセキュリティを一定範囲内で確保しているので、第一実施形態と同様の効果を得ることができる。
【０１３６】
さらに、本実施形態では、タスク・ストラクト１２１Ａの生成時間が第一実施形態よりも長くなるものの、第一実施形態のように、全てのポリシデータに関してステップ２１〜３０（図６）のループ処理を行わず、全てのポリシデータに関して各ステップでまとめて処理しているので、全体として、処理の高速化を図ることができる。
【０１３７】
なお、本実施形態では、ＯＳ主機能部１１２が、ポリシデータコピーテーブル１２１ｅを含むタスク・ストラクト１２１ＡをＲＡＭ１２０上に作成しているが、ポリシデータコピーテーブル１２１ｅをＲＡＭ１２０上に作成するもものの、タスク・ストラクト１２１Ａ内に設けない場合には、システムコールフック部１１３がポリシデータコピーテーブル１２１ｅを作成してもよい。
【符号の説明】
【０１３８】
１００，１００Ａ：コンピュータ、１１０：ＣＰＵ、１１１，１１１Ａ：ＯＳ実行部、１１２，１１２Ａ：ＯＳ主機能部、１１３，１１３Ａ：システムコールフック部、１１８：プロセス、１２０：ＲＡＭ、１２１，１２１Ａ：タスク・ストラクト、１２１ｄ：システムコールテーブル、１２１ｅ：ポリシデータコピーテーブル、１２５：ポリシデータコピー、１２５ａ：ポリシＩＤ、１２５ｂ：ポリシコンテキストコピー、１２５ｃ：アクション、１２７：変数対応表、１４０：補助記憶装置、１４１，１４１Ａ：ＯＳプログラム、１４２，１４２Ａ：ＯＳ主機能モジュール、１４３，１４３Ａ：システムコールフックモジュール、１４４：ポリシデータベース、１４５：ポリシデータ、１４６：オブジェクトタイプ表、１４８：アプリケーションプログラム
【図１】
2011081501.tif 000003
【図２】
2011081501.tif 000004
【図３】
2011081501.tif 000005
【図４】
2011081501.tif 000006
【図５】
2011081501.tif 000007
【図６】
2011081501.tif 000008
【図７】
2011081501.tif 000009
【図８】
2011081501.tif 000010
【図９】
2011081501.tif 000011
【図１０】
2011081501.tif 000012
【図１１】
2011081501.tif 000013
【図１２】
2011081501.tif 000014
【図１３】
2011081501.tif 000015