オペレーティングシステムプログラム、及びこれが搭載されているコンピュータ
【課題】コンピュータのセキュリティをある程度保しつつも、ユーザ負担を軽減する。
【解決手段】OSプログラムは、規制対象とすべき複数のシステムコールの組合わせ及び規制処理内容を示すアクションを有するポリシデータベースと、プロセスからのシステムコールを監視するためのシステムコールフックモジュールとを有する。システムコールフックモジュールは、プロセスから順次受け付けられた複数のシステムコール中に、ポリシデータベース中の複数のシステムコールの組合わせと対応する組合わせのシステムコールがある、ポリシマッチであるか否かを判定するステップS13と、ポリシマッチである場合にポリシデータベース中のアクションをOS主機能部へ出力するステップS16と、ポリシアンマッチである場合に、受け付けたシステムコールをOS主機能部へ出力するステップS17と、をプロセッサに実行させる。
【解決手段】OSプログラムは、規制対象とすべき複数のシステムコールの組合わせ及び規制処理内容を示すアクションを有するポリシデータベースと、プロセスからのシステムコールを監視するためのシステムコールフックモジュールとを有する。システムコールフックモジュールは、プロセスから順次受け付けられた複数のシステムコール中に、ポリシデータベース中の複数のシステムコールの組合わせと対応する組合わせのシステムコールがある、ポリシマッチであるか否かを判定するステップS13と、ポリシマッチである場合にポリシデータベース中のアクションをOS主機能部へ出力するステップS16と、ポリシアンマッチである場合に、受け付けたシステムコールをOS主機能部へ出力するステップS17と、をプロセッサに実行させる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、オペレーティングシステムによるコンピュータのセキュリティ技術に関する。
【背景技術】
【0002】
近年、コンピュータやIPネットワークの普及に伴い、コンピュータからの情報漏えいやコンピュータウイルスの感染など、コンピュータのセキュリティが脅かされる事態が急増しており、コンピュータセキュリティ技術の重要性が増している。
【0003】
コンピュータセキュリティ技術には、大別して、コンピュータへの不正侵入を防ぐ手法と、コンピュータに不正侵入された場合でも被害を最小限に抑える手法とがある。
【0004】
後者の手法で、もっとも広く用いられているのはアクセス制御に代表される実行制御の手法である。ここで、アクセス制御とは、サブジェクト毎に、実行可能なオペレーションとアクセス可能なオブジェクトを制限する手法である。なお、サブジェクトとは、能動的に動作を行う存在であり、ユーザやプロセス等が該当し、プロセスとは、実行中のプログラムである。また、オブジェクトとは、操作される対象であり、ファイルやディレクトリ等が該当する。
【0005】
このアクセス制御による手法としては、以下の非特許文献1に記載されているSELinux(Security Enhanced Linux)が挙げられる。
【0006】
このSELinux手法とは、NSA(アメリカ国家安全保障局)が主体となって開発されたソフトウェアであり、コンピュータ上で動作する各プロセスに対して、OS(Operating System)レベルでアクセス制限を行う手法である。
【0007】
このSELinux手法では、コンピュータ上で動作する全てのプロセスに対しドメインと呼ばれるラベルを設定すると共に、オブジェクトに対して、そのタイプ、さらにタイプ毎のアクセス・ベクタと呼ばれるアクセス形態(一切のアクセス不可、readのみ可、read及びwrite可、等)を設定し、プロセスのドメインとオブジェクトのタイプとを関係付けることで、各オブジェクトに対するプロセスのアクセス制限をOSレベルで実現している。
【0008】
このように、SELinux手法では、プロセスのアクセス制限をOSレベルで実現しているため、仮に、不正侵入者に、コンピュータのroot権限を奪われたとしても、この不正侵入者がアクセス可能なオブジェクトは限定され、被害を最小限に抑えることができる。
【先行技術文献】
【非特許文献】
【0009】
【非特許文献1】Bill Mccarty 著 田口裕也、根津研介 監訳 林英幸 訳 「SELinuxシステム管理― セキュアOSの基礎と運用」オライリージャパン 2005年3月25日発行
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかしながら、上述のSELinux手法では、新たなプロセスが追加される毎に、このプロセスに対するドメインの設定、さらに、このドメインとオブジェクトのタイプとの関係付けを行う必要が有り、コンピュータユーザに負担を強いてしまう、という問題点がある。
【0011】
本発明は、このような従来技術の問題点に着目し、コンピュータのセキュリティをある程度確保しつつも、ユーザの負担を軽減することができる技術を提供することを目的とする。
【課題を解決するための手段】
【0012】
前記問題点を解決するための発明に係るOSプログラムは、
プロセスからの各種システムコールを処理するためのオペレーティングシステム(以下、OSとする)主機能モジュールと、
規制対象とすべき複数のシステムコールの組合わせと、前記プロセスから該組合わせのシステムコールが出力された場合の規制処理内容を示すシステムコールであるアクションとを有する複数のポリシデータを含むポリシデータベースと、
前記プロセスからの前記システムコールを監視するためのシステムコールフックモジュールと、
を有し、
前記システムコールフックモジュールは、
前記プロセスからのシステムコールを受け付けるシステムコール受付ステップと、
前記システムコール受付ステップでシステムコールを受け付けると、該システムコール受付ステップで順次受け付けられた複数のシステムコール中に、前記ポリシデータベース中のいずれかのポリシデータに含まれている前記複数のシステムコールの組合わせと対応する組合わせのシステムコールがある、ポリシマッチであるか否かを判定する判定ステップと、
前記判定ステップで前記ポリシマッチであると判定されると、前記ポリシマッチであると判定された際に対象になった前記ポリシデータ中の前記アクションを取得して、該アクションを出力し、前記判定ステップで前記ポリシマッチでないと判定されると、前記システムコール受付ステップで受け付けたシステムコールのうち、該判定ステップでの判定の契機となった最新のシステムコールを出力する指示出力ステップと、
をコンピュータのプロセッサに実行させ、
前記OS主機能モジュールは、
前記指示出力ステップで出力された前記システムコール又は前記アクションを受け付ける指示受付ステップと、
前記指示受付ステップで受け付けた前記システムコール又は前記アクションが示す処理を実行する指示実行ステップと、
を前記プロセッサに実行させる、ことを特徴とする。
【0013】
また、前記問題点を解決するための発明に係るコンピュータは、
前記OSプログラムが搭載されている、ことを特長とする。
【発明の効果】
【0014】
本発明では、OSプログラムに予め組み込まれているポリシデータベース中の複数のポリシデータを用いて、コンピュータのセキュリティを一定範囲で確保しているで、従来のSELinux手法のように、新たなプロセスが追加される毎に、このプロセスに対するドメインの設定、さらに、このドメインとオブジェクトのタイプとの関係付けを行う必要がなく、コンピュータユーザの負担を軽減することができる。
【図面の簡単な説明】
【0015】
【図1】本発明に係る第一実施形態におけるコンピュータの構成図である。
【図2】本発明に係る第一実施形態におけるポリシデータベースのデータ構成を示す説明図である。
【図3】本発明に係る第一実施形態におけるポリシコンテキストの記述例を示す説明図である。
【図4】本発明に係る第一実施形態におけるタスク・ストラクトのデータ構成を示す説明図である。
【図5】本発明に係る第一実施形態におけるシステムコールフック部の動作を示すフローチャートである。
【図6】図5のポリシマッチ判定処理(S13)の詳細処理を示すフローチャートである。
【図7】本発明に係る第一実施形態におけるポリシコンテキストの更新過程を示す説明図である。
【図8】本発明に係る第一実施形態における変数対応表の更新過程を示す説明図である。
【図9】本発明に係る第一実施形態におけるOS主機能部の動作を示すフローチャートである。
【図10】本発明に係る第二実施形態におけるコンピュータの構成図である。
【図11】本発明に係る第二実施形態におけるタスク・ストラクトのデータ構成を示す説明図ある。
【図12】本発明に係る第二実施形態におけるシステムコールフック部の動作をを示すフローチャートである。
【図13】図12のポリシマッチ判定処理(S13A)の詳細処理を示すフローチャートである。
【発明を実施するための形態】
【0016】
以下、本発明に係るコンピュータの各実施形態について、図面を用いて説明する。
【0017】
「第一実施形態」
本発明に係るコンピュータの第一実施形態について、図1〜図9を用いて説明する。
【0018】
本実施形態のコンピュータ100は、図1に示すように、各種演算処理を実行するCPU110と、CPU110のワークエリア等になるRAM120と、データやプログラム等が予め格納されているROM130と、ハードディスクドライブ装置等の補助記憶装置140と、ディスプレイ151と、キーボードやマウス等の入力装置152と、ディスプレイ151や入力装置152のインタフェースである入出力インタフェース150と、ネットワークNを介して他の装置と通信するためのネットワークインタフェース160と、を備えている。
【0019】
補助記憶装置140には、OS(Operating System)プログラム141と、アプリケーションプログラム148とが予め格納されている。OSプログラム141は、プロセスからの各種システムコールを処理するためのプログラムであるOS主機能モジュール142と、プロセスからのシステムコールを監視するためのプログラムであるシステムコールフックモジュール143と、規制対象とすべき複数のシステムコールの組合わせ等が示されている複数のポリシデータを含むポリシデータベース144と、を有している。
【0020】
CPU110は、機能的に、OS実行部111とプロセス118とを有している。このOS実行部111は、CPU110がOS主機能モジュール142をRAM120にロードし、これを実行することで機能するOS主機能部113と、CPU110がシステムコールフックモジュール143をRAM120にロードし、これを実行することで機能するシステムコールフック部113と、を有している。プロセス118は、CPU110がアプリケーションプログラム148をRAM120にロードし、これを実行することで機能する。
【0021】
RAM120には、OS実行部111により、プロセス118を管理するためのタスク・ストラクト121と、ポリシデータベース144の一つのポリシデータのコピーであるポリシデータコピー125と、プロセス118からのシステムコールに含まれている変数と代入値との関係を示す変数対応表127とが作成される。
【0022】
補助記憶装置140に格納されているポリシデータベース144は、図2に示すように、複数のポリシデータ145と、オブジェクトタイプ表146とを有している。
【0023】
ポリシデータ145は、当該ポリシデータを一意に識別するためのポリシID145aと、規制対象とすべき複数のシステムコールの組合わせを記述したポリシコンテキスト145bと、OS主機能部112に処理動作させるべき規制処理内容を示すアクション145cと、を有している。
【0024】
ポリシID145aは、ここでは、重要度の高いポリシデータ順に、1,2,3,…と付される。
【0025】
ポリシコンテキスト145bは、実行することによって情報漏えいやシステムダウン等、ユーザにとって好ましくない状況を引き起こす可能性のある複数のシステムコールの組み合わせ、つまり、前述したように、規制対象とすべき複数のシステムコールの組合せを記述したものである。
【0026】
アクション145cは、プロセスからの複数のシステムコールがポリシコンテキスト145bにマッチしたときに、OS主機能部112に処理動作させるべき規制処理内容を示すシステムコールである。ポリシデータ145中で、このアクション145cが記述される領域は、プロセスからの複数のシステムコールがポリシコンテキスト145bにマッチしたときに、OS主機能部112に処理動作させるべきシステムコールが存在しない場合には、空欄となる。また、ポリシデータ145中で、このアクション145cが記述される領域には、実行順序を指定して複数のシステムコールを記述される場合もある。
【0027】
具体的に、アクション145cには、システムコールを出力したプロセスの強制終了を意味するシステムコール「exit(1)」や、このプロセスの停止を意味するシステムコール等が記述される。また、アクション145cには、エラーメッセージを出力する旨のシステムコールと受付システムコールとが、出力順序を定められた形で記述される場合もある。このアクションは、まず、エラーメッセージを出力する旨のシステムコールをOS主機能部112に出力し、次に、ステップ10で受け付けたシステムコールをOS主機能部112に出力することを意味する。
【0028】
オブジェクトタイプ表146は、補助記憶装置140に格納されているファイルやディレクトリ等のオブジェクト(アクセス対象)の名前が格納されるオブジェクト名領域146aと、オブジェクトの属性が格納されるオブジェクトタイプ領域146bと、を有する。
【0029】
オブジェクトタイプ領域146bに格納されるオブジェクトの属性としては、機密情報を含むファイル等であることを示す「secret」や、一般ファイル等であることを示す「normal」等がある。
【0030】
なお、ポリシデータベース144中の複数のポリシデータ145は、基本的に、OSプログラム141に予め組み込まれているものであるが、OS主機能部112が、入力装置151から新たなポリシデータを受け付けて、又は、既存のポリシデータの変更内容を受け付けて、これをポリシデータベース144中に格納するようにしてもよい。
【0031】
また、オブジェクトタイプ表146の各領域146a,146bには、補助記憶装置140に新たにファイル等が格納される際に、OS主機能部112又はシステムコールブック部113により、入力装置151から受け付けたデータが格納される。このため、ユーザは、新たなファイル等を作成する際には、入力装置151を操作して、そのオブジェク名及びオブジェクトタイプを指定することになる。但し、ユーザは、新たなファイル等を作成する毎に、必ず、そのオブジェクト名及びオブジェクトタイプを指定する必要はないが、機密情報を含むファイル等を作成する際には、そのオブジェクト名及びオブジェクトタイプを指定することが好ましい。
【0032】
次に、以上で説明したポリシコンテキスト145bの具体的な記述形式について、図3を用いて説明する。
【0033】
複数のシステムコールの組合わせは、「→」と「and」と「or」と用いて表現される。
【0034】
「→」は、この「→」を中心として両側に記述されたシステムコールの順序を示し、「→」の左辺に記述されたシステムコールが、「→」の右辺に記述されたシステムコールより、プロセスからの出力順序が先であることを意味させる記号である。
【0035】
「and」は、この「and」の両側に記述されたシステムコールが、プロセスからのシステムコールであることを意味させる記号である。また、「or」は、この「or」の両側に記述されたシステムコールのうち、いずれか一方のシステムコールが、プロセスからのシステムコールであることを意味させる記号である。
【0036】
また、システムコールの引数として、変数、及びオブジェクトタイプ条件付き変数を記述できる。変数は、1以上のアルファベットで記述される。また、オブジェクトタイプ条件付き変数は、まず、オブジェクトタイプが記述され、このオブジェクトタイプの右辺に、「&」が記述され、この「&」の右辺に、1以上のアルファベットにより変数が記述される。
【0037】
具体的に、図3中のポリシコンテキスト145Abは、プロセスからシステムコール「open(x)」が出力された後、プロセスからシステムコール「sendto(x,y)」が出力され、且つ、システムコール「open(x)」の引数とシステムコール「sendto(x,y)」の第一引数とが等しいという意味を表現するポリシである。
【0038】
このため、実際に、プロセスからシステムコール「open」が出力された後、プロセスからシステムコール「sendto」が出力され、しかも、システムコール「open」の引数とシステムコール「sendto」の第一引数とが等しい場合、これらのシステムコールの組み合わせは、このポリシコンテキスト145bAが示すポリシにマッチすることになる。
【0039】
なお、実際に、プロセスからシステムコール「open(x)」が出力された後、プロセスから他のシステムコールが出力され、さらに、その後に、プロセスからシステムコール「sendto(x,y)」が出力された場合も、本実施形態では、このポリシコンテキスト145Abが示すポリシにマッチしていると定義する。
【0040】
また、図3中のポリシコンテキスト145Bbは、プロセスからシステムコール「open(x)」とシステムコール「sendto(x,y)」とが出力され、且つ、システムコール「open(x)」の引数とシステムコール「sendto(x,y)」の第一引数とが等しいという意味を表現するポリシである。
【0041】
図3中のポリシコンテキスト145Cbは、プロセスからシステムコール「open(x)」システムコール「sendto(x,y)」とのうちの一方のシステムコールが出力されたという意味を表現するポリシである。
【0042】
ポリシコンテキスト145Dbは、プロセスからシステムコール「open(x)」とシステムコール「read(x)」とのうちの一方が出力された後、プロセスからシステムコール「sendto(x,y)」が出力され、且つ、システムコール「open(x)」又はシステムコール「read(x)」の引数と、システムコール「sendto(x,y)」の第一引数とが等しいという意味を表現するポリシである。
【0043】
図3中のポリシコンテキスト145Ebは、プロセスからシステムコール「open(x)」が出力された後、プロセスからシステムコール「sendto(x,y)」が出力され、且つ、システムコール「open(x)」の引数とシステムコール「sendto(x,y)」の第一引数とが等しく、さらに、システムコール「open(x)」の引数「x」のオブジェクトタイプとシステムコール「sendto(x,y)」の第一引数「x」のオブジェクトタイプがいずれも「secret_t」であるという意味を表現するポリシである。
【0044】
以上のように、本実施形態において、複数のシステムコールの組合わせとは、複数のシステムコールを単に全て含む場合の他、複数のシステムコールのいずれかを含む場合や、複数のシステムコールを含み且つこれらの順序が定められている場合、さらに、これらの組み合わせを含んでいる。
【0045】
以上、ポリシコンテキスト145bの具体的な記述形式について説明したが、他の記述形式で、複数のシステムコールの組合せを記述してもよいことは言うまでもない。
【0046】
次に、図4を用いて、タスク・ストラクト121について説明する。
【0047】
このタスク・ストラクト121は、プロセス118(図1)を管理するために、このプロセス118に関するアプリケーションプログラム148(図1)の起動時に、OS実行部111により、RAM120に上に作成される。
【0048】
このタスク・ストラクト121は、プロセスの状態(正常動作中、停止中等)が格納されるプロセス状態領域121aと、プロセスを一意に識別するためのプロセスIDが格納されるプロセスID領域121bと、プロセスによる使用メモリ量が格納される使用メモリ量領域121cと、プロセスからのシステムコール履歴が格納されるシステムコールテーブル121dと、図示されていないが、CPUの使用状況が格納される領域等を有する。
【0049】
このタスク・ストラクト121は、OS主機能部112により、プロセス118に関するアプリケーションプログラム148の起動時に、RAM120に上に作成される。また、このタスク・ストラクト121の各領域のデータのうち、システムコールテーブル121dを除く全ての領域のデータは、いずれも、OS主機能部112が更新する。一方、システムコールテーブル121dのデータは、システムコールフック部113が更新する。
【0050】
システムコールフック部113は、プロセス118から順次出力されるシステムコールのうち、後述するように、ポリシデータベース144のいずれかのポリシデータ145中に記述されているシステムコール名に一致するシステムコール名のシステムコールを、線形リスト形式で、システムコールテーブル121dに格納する。なお、システムコール名とは、例えば、システムコール「open(x)」の場合、「open」がシステムコール名である。
【0051】
システムコールフック部113は、システムコールテーブル121d中に、新たなシステムコールを追加する場合、システムコールテーブル121d中のリストの末尾の位置に、「→」及び新たなシステムコールを格納する。
【0052】
このように、システムコールテーブル121に、システムコールを順次格納することで、プロセスからの各システムコールの出力順を明記することができる。
【0053】
次に、図5及び図6に示すフローチャートに従って、システムコールフック部113の動作について説明する。
【0054】
アプリケーションプログラム148が起動し、このアプリケーションプログラム148によるプロセス118が動作可能な状態になると、OS主機能部112は、このプロセス118に関するタスク・ストラクト121をRAM121上に展開する。なお、この段階で、このタスク・ストラクト121のシステムコールテーブル121d(図4)には、何ら記述されていない。
【0055】
システムコールフック部113は、プロセス118が動作可能な状態になると、このプロセス118の監視を開始し、このプロセス118からのシステムコール出力を待ち(S10)、プロセス118からのシステムコールを受け付けると、このシステムコールのシステムコール名がポリシデータベース144に記述されているいずれかのシステムコールのシステムコール名と一致するか否かを判断する(S11)。
【0056】
システムコールフック部113は、ステップ10で受け付けたシステムコールのシステムコール名がポリシデータベース144に記述されているいずれのシステムコールのシステムコール名とも一致しないと判断すると、ステップ10で受け付けたシステムコールをOS主機能部112へ出力し(S17)、ステップ10に戻る。また、システムコールフック部113は、ステップ10で受け付けたシステムコールのシステムコール名がポリシデータベース144に記述されているいずれかのシステムコールのシステムコール名と一致すると判断すると、ステップ10で受け付けたシステムコールを、RAM120上に展開されているシステムコールテーブル121d(図4)に記述する(S12)。そして、システムコールフック部113は、システムコールテーブル121dに記述されているシステムコールに関して、ポリシデータとのポリシマッチ判定を行う(S13)。
【0057】
システムコールフック部113は、このポリシマッチ判定処理(S13)で、システムコールテーブル121dに記述されているシステムコールに関して、ポリシデータとマッチしていると判定すると、このポリシデータのポリシIDをRAM120上に一時的に記憶する。なお、このポリシマッチ判定処理に関しては、図6を用いて詳細に後述する。
【0058】
システムコールフック部113は、ポリシマッチ判定処理(S13)が終了すると、RAM120上にポリシIDが記憶されているか否かを判断する(S14)。システムコールフック部113は、RAM120上にポリシIDが記憶されていない、言い換えると、システムコールテーブル121dに記述されているシステムコールとポリシデータとがマッチしていない、と判断すると、ステップ10で受け付けたシステムコールをOS主機能部112へ出力し(S17)、ステップ10に戻る。
【0059】
また、システムコールフック部113は、RAM120上にポリシIDが記憶されている、言い換えると、システムコールテーブル121dに記述されているシステムコールとポリシデータとがマッチしている、と判断すると、当該ポリシIDのポリシデータからシステムコールの一種であるアクションを抽出し(S15)、このアクションをOS主機能部112へ出力して(S16)、ステップ10に戻る。
【0060】
次に、ポリシマッチ判定処理(S13)の詳細処理について説明する。
【0061】
ここで、以下の説明の都合上、プロセス118からは、図4のシステムコールテーブル121dに示すように、システムコール「open(myfile)」が出力され、その後、システムコール「sendto(myfile,server)」が出力され、さらに、その後、システムコール「close(…)」が出力されると、仮定する。また、ポリシデータベース144には、ポリシデータ145として、図2に示す、ポリシID「8」のポリシデータ145のみが格納され、オブジェクトタイプ表146として、図2に示すものが格納されていると、仮定する。
【0062】
図5を用いて前述したように、プロセス118からシステムコール「open(myfile)」が出力され、これをシステムコールフック部113が受け付けると(S10)、このシステムコールのシステムコール名「open」と、図2に示すポリシデータベース144のポリシデータ145に記述されているシステムコール名とを比較する(S11)。この際、システムコールフック部113は、ポリシデータ145中に、受け付けたシステムコールのシステムコール名「open」と一致するものがあると判断して、このシステムコール「open(myfile)」を、RAM120上に展開されているシステムコールテーブル121d(図4)に記述し(S12)、ポリシマッチ判定処理(S13)を開始する。
【0063】
システムコールフック部113は、ポリシマッチ判定処理で、図6のフローチャートに示すように、まず、システムコールテーブル121dから、先頭要素としてのシステムコールをターゲットシステムコールとして抽出する(S20)。この場合、システムコールテーブル121dには、システムコール「open(myfile)」しか記述されていないので、このシステムコール「open(myfile)」をターゲットシステムコールとして抽出する。
【0064】
システムコールフック部113は、次に、全てのポリシデータ145をコピーしたか否かを判断する(S21)。この場合、ポリシデータ145を未だコピーしていないので、全てのポリシデータ145をコピーしていないと判断し、未コピーのポリシデータ145をコピーして、これをポリシデータコピー125としてRAM121を展開すると共に、変対応表127をRAM120上に展開する(S22)。
【0065】
図2及び図7に示すように、この段階で作成されるポリシデータコピー125Aは、ポリシデータ145をコピーしたものであるから、このポリシデータ145のポリシID145aと同じポリシID125aと、このポリシデータ145のポリシコンテキスト145bと同じポリシコンテキストコピー125Abと、このポリシデータのアクション145cと同じアクション125cとを有している。
【0066】
また、図8に示すように、変数対応表127Aは、ポリシデータコピー125A内の引数「x、y」が変数として格納される変数領域127aと、ターゲットシステムコールの引数が代入値として格納される代入値領域127bとを有する。この段階で、変数対応表127Aには、変数領域127aに、ポリシリコンテキストコピー125Abに記述されている全てのシステムコールの引数「x、y」が格納され、代入値領127bには、何ら格納されない。
【0067】
システムコールフック部113は、ポリシリコンテキストコピーとターゲットシステムコールとを比較し(S23)、このターゲットシステムコールがポリシコンテキストコピー中の対応要素と要素マッチしているか否かを判定する(S24)。
【0068】
ここでの判定では、以下の三つの条件a)b)c)を満たす場合に、要素マッチと判定する。但し、条件c)は、ポリシコンテキストコピー中でターゲットシステムコールに対応する要素がオブジェクトタイプ条件付き変数である場合に適用される条件であり、ポリシコンテキストコピー中でターゲットシステムコールに対応する要素がオブジェクトタイプ条件付き変数でない場合には、二つの条件a)b)を満たす場合に、要素マッチと判定する。
【0069】
a)ターゲットシステムコールのシステムコール名がポリシコンテキストコピー内に存在する。
【0070】
b)ターゲットシステムコール中の引数が変数対応表127A内の変数と代入値との組合わせに矛盾がない。
【0071】
c)ターゲットシステムコール中の引数に関するオブジェクトタイプと、ポリシコンテキストコピーの対応システムコール中に記述されているオブジェクトタイプとが一致する。
【0072】
この場合、ターゲットシステムコール「open(myfile)」のシステムコール名「open」であり、ポリシリコンテキストコピー125Ab内の先頭要素であるシステムコール名が「open」又は「read」であるため、システムコールフック部113は、条件a)を満たすと判定する。
【0073】
また、変数対応表127A(図8)には、変数領域127aに「x、y」が格納され、代入値領127bには何ら格納されておらず、代入値として任意の値を代入することが可能であるため、ターゲットシステムコール「open(myfile)」中の引数「myfile」は、変数対応表127A内の変数と変数対応表127A内の代入値との組合わせに矛盾せず、システムコールフック部113は、条件b)を満たすと判定する。なお、矛盾する場合については後述する。
【0074】
また、ターゲットシステムコール「open(myfile)」中の引数「myfile」に関するオブジェクトタイプは、オブジェクトタイプ表146(図2)によれば「secret_t」であり、ポリシコンテキスト125Abの対応システムコール「open」中に記述されているオブジェクトタイプも「secret_t」であるため、システムコールフック部113は、条件c)を満たすと判定する。
【0075】
よって、この場合、システムコールフック部113は、このターゲットシステムコール「open(myfile)」がポリシコンテキスト125Abと要素マッチしていると判定する。
【0076】
システムコールフック部113は、ステップ24でターゲットシステムコールがポリシコンテキストコピーと要素マッチしていないと判定すると、ステップ27に進み、要素マッチしていると判定すると、ポリシリコンテキストコピー及び変数対応表127を更新する(S25)。
【0077】
ここで、ポリシリコンテキストコピーの更新とは、このポリシコンテキストコピー中で、ターゲットシステムコールに対する対応要素を、マッチしたことを示す「true」に変更する等を行って、このポリシコンテキストコピーの記述内容を整理することである。
【0078】
具体的に、システムコールフック部113は、図7に示すように、ポリシリコンテキストコピー125Abの更新では、まず、ポリシリコンテキストコピー125Ab中で要素マッチと判定した「open(secret_t & x)」を、マッチしたことを示す「true」に変更したポリシリコンテキストコピー125Bbを作成する。次に、このポリシコンテキストコピー125Bb中の「or」の左辺が「true」になったため、or式の全体を「true」に変更したポリシコンテキストコピー125Cbを作成する。以上で、この段階でのポリシコンテキストコピーの更新が終了する。
【0079】
また、ここでの変数対応表127の更新とは、変数対応表127の代入値領域127bに、ターゲットシステムコールの引数を格納することである。
【0080】
具体的に、システムコールフック部113は、図8に示すように、変数対応表127Aの代入値領域127bのうち、ポリシリコンテキストコピー125Ab中の対応要素の引数「x」に対応する代入値領域127bに、ターゲットシステムコール「open(myfile)」の引数「myfile」を格納し、変数対応表127Bを作成する。
【0081】
システムコールフック部113は、ポリシコンテキストコピー及び変数対応表127の更新が終了すると(S25)、ターゲットシステムコールの受け付けで、ポリシマッチしたか否かを判定し(S26)、ポリシマッチしたと判定すると、ポリシデータコピー125のポリシID125aをマッチポリシIDとしてRAM120に記憶する(S29)。また、ポリシアンマッチと判定するとステップ27に進む。ポリシマッチの判定は、ポリシコンテキストコピーの記述内容が「true」のみであるか否かによる。
【0082】
ここでは、図7に示すように、ポリシコンテキストコピー125Cbの記述内容が「true」のみでないため、ポリシアンマッチと判定し、ステップ27に進む。
【0083】
システムコールフック部113は、ステップ24で要素マッチしていないと判定した場合、さらに、上述のステップ26でポリシアンマッチと判定した場合、システムコールテーブル121dから全ての要素を抽出したか否かを判定する(S27)。全ての要素を抽出していればステップ30に進み、全ての要素を抽出していればステップ28に進む。
【0084】
この場合、システムコールテーブル121dには、システムコール「open(myfile)」のみしか記述されていないため、システムコールフック部113は、システムコールテーブル121dから全ての要素を抽出したと判定し、ステップ30に進む。
【0085】
システムコールフック部113は、ステップ30で、ポリシデータコピー及び変数対応表127をRAM120から削除し、ステップ21に戻る。
【0086】
システムコールフック部113は、ステップ21で、前述したように、全てのポリシデータ145をコピーしたか否かを判断する。ここでは、前述したように、ポリシデータベース144にはポリシデータ145が一つか格納されていないと仮定しているので、全てのポリシデータ145をコピーしたと判断し、ポリシマッチ判定処理(S13)を終了する。一方、ポリシデータベース144にはポリシデータ145が複数格納されている場合、システムコールフック部113は、前述のステップ22以降の処理を実行する。
【0087】
図5を用いて前述したように、システムコールフック部113は、以上で説明したポリシマッチ判定処理(S13)を終了すると、RAM120上にマッチポリシIDが記憶されているか否かを判断する(S14)。この場合、RAM120上にマッチポリシIDが記憶されていないため、ステップ10で受け付けたシステムコールをOS主機能部112へ出力して(S17)、ステップ10に戻る。
【0088】
次に、プロセス118から、前述のシステムコール「open(myfile)」の出力後、システムコール「sendto(myfile,server)」が出力された場合について説明する。
【0089】
図5を用いて前述したように、プロセス118からシステムコール「sendto(myfile,server)」が出力され、これをシステムコールフック部113が受け付けると(S10)、このシステムコールのシステムコール名「sendto」と、図2に示すポリシデータベース144のポリシデータ145に記述されているシステムコール名とを比較する(S11)。この際、システムコールフック部113は、ポリシデータ145中に、受け付けたシステムコールのシステムコール名「sendto」と一致するものがあると判断して、このシステムコール「sendto(myfile,server)」を、RAM120上に展開されているシステムコールテーブル121d(図4)に追記する(S12)。この結果、システムコールテーブル121dには、open(myfile)→ … → sendto(myfile,server)が記述されることになる。
【0090】
システムコールフック部113は、次に、ポリシマッチ判定処理を行う(S13)。このポリシマッチ判定処理で、システムコールフック部113は、図6のフローチャートに示すように、まず、システムコールテーブル121dから、先頭要素としてのシステムコールをターゲットシステムコールとして抽出する(S20)。この場合、システムコールテーブル121dには、先頭要素としてシステムコール「open(myfile)」が記述されているので、このシステムコール「open(myfile)」をターゲットシステムコールとして抽出する。
【0091】
システムコールフック部113は、以降、システムコール「open(myfile)」を受け付けたときのポリシマッチ判定処理と同様、ステップ21,22,23,24,25,26,27を実行する。この結果、ポリシコンテキストコピーは、図7中のポリシコンテキストコピー125Cbの状態になり、変数対応表127は、図8中の変数対応表127Bの状態になる。
【0092】
システムコールフック部113は、ステップ27で、前述したように、システムコールテーブル121dから全ての要素を抽出したか否かを判定する。この場合、システムコールテーブル121dには、システムコール「open(myfile)」の他に、システムコール「sendto(myfile,server)」も記述されているため、システムコールフック部113は、システムコールテーブル121dから全ての要素を抽出していないと判定し、ステップ28に進む。
【0093】
システムコールフック部113は、ステップ28で、システムコールテーブル121dから次要素を抽出して、これをターゲットシステムコールとし、ステップ23に戻る。この場合、システムコールフック部113は、ターゲットシステムコールとしてシステムコール「sendto(myfile,server)」を抽出する。
【0094】
次に、システムコールフック部113は、前述したように、ポリシリコンテキストコピーとターゲットシステムコールとを比較し(S23)、このターゲットシステムコールがポリシコンテキストコピー中の対応要素と要素マッチしているか否かを判定する(S24)。
【0095】
この要素マッチ判定では、ポリシコンテキストコピー125Cb中でターゲットシステムコール「sendto(myfile,server)」に対応する要素「sendto(x,y)」がオブジェクトタイプ条件付き変数でないので、上記三つの条件a)b)c)のうち、条件a)b)を満たす場合に、要素マッチと判定する。
【0096】
この場合、ターゲットシステムコール「sendto(myfile,server)」のシステムコール名「sendto」であり、ポリシリコンテキストコピー125Cb内の対応要素であるシステムコール名が「sendto」であるため、システムコールフック部113は、条件a)を満たすと判定する。
【0097】
また、この場合、変数対応表127B(図8)には、変数領域127aに「x、y」が格納され、代入値領127bには、変数xに対応する代入値として「myfile」が格納されており、変数yに対する代入値が格納されていない。また、ターゲットシステムコール「sendto(myfile,server)」中の引数「myfile,server」は、変数対応表127A内の変数と変数対応表127A内の代入値との組合わせに矛盾せず、システムコールフック部113は、条件b)を満たすと判定する。なお、仮に、ターゲットシステムコールが「sendto(ourfile,server)」である場合には、変数xに対応する値が「myfile」ではなく「ourfile」であるため、変数対応表127A内の変数と変数対応表127A内の代入値との組合わせに矛盾し、条件b)を満たさないと判定することになる。
【0098】
よって、この場合、システムコールフック部113は、このターゲットシステムコール「sendto(myfile,server)がポリシコンテキスト125Cbと要素マッチしていると判定する。
【0099】
システムコールフック部113は、ステップ23でターゲットシステムコールがポリシコンテキストコピーと要素マッチしていると判定すると、ポリシリコンテキストコピー及び変数対応表127を更新する(S25)。
【0100】
具体的に、システムコールフック部113は、図7に示すように、ポリシリコンテキストコピー125Cbの更新では、まず、ポリシリコンテキストコピー125Cb中で要素マッチと判定した「sendto(x,y)」を、マッチしたことを示す「true」に変更したポリシリコンテキストコピー125Dbを作成する。次に、このポリシコンテキストコピー125Db中の「→」の両辺が「true」になったため、全体を「true」に変更したポリシコンテキストコピー125Ebを作成する。以上で、ポリシコンテキストコピーの更新が終了する。
【0101】
また、システムコールフック部113は、図8に示すように、変数対応表127Bの代入値領域127bのうち、ポリシリコンテキストコピー125Cb中の対応要素の引数「x,y」のうち、引数「y」に対応する代入値領域127bに、ターゲットシステムコール「sendto(myfile,server)」の引数「server」を格納し、変数対応表127Eを作成する。
【0102】
システムコールフック部113は、ポリシコンテキストコピー及び変数対応表127の更新が終了すると、前述したように、ターゲットシステムコールの受け付けで、ポリシマッチしたか否かを判定する(S28)。この場合、ポリシコンテキストコピー125Ebの記述内容が「true」のみであるため、ポリシマッチと判定し、ステップ29に進む。
【0103】
システムコールフック部113は、ステップ29で、前述したように、ポリシデータコピー125のポリシID125aをマッチポリシIDとしてRAM120に記憶する。この場合、ポリシデータコピー125のポリシID125a「8」をマッチポリシIDとしてRAM120に記憶する。
【0104】
そして、システムコールフック部113は、ポリシデータコピー125及び変数対応表127をRAM120から削除してから(S30)、ステップ21に戻る。
【0105】
システムコールフック部113は、ステップ21で、全てのポリシデータ145をコピーしたと判断すると、このポリシマッチ判定処理(S13)を終了する。
【0106】
図5を用いて前述したように、システムコールフック部113は、以上で説明したポリシマッチ判定処理(S13)を終了すると、RAM120上にマッチポリシIDが記憶されているか否かを判断する(S14)。この場合、RAM120上にマッチポリシID「8」が記憶されているため、システムコールフック部113は、このマッチポリシID「8」のポリシデータ145からアクション145cとしての「exit(1)」を抽出する(S15)。そして、システムコールフック部113は、アクション145cとしての「exit(1)」をOS主機能部112へ出力してから(S16)、ステップ10に戻る。
【0107】
なお、ポリシマッチ判定処理(S13)では、複数のポリシデータの全てに関して判定が実行されるため、システムコールテーブル121dに記述されているシステムコールが複数のポリシデータにマッチしており、RAM120上に複数のマッチポリシIDが記憶されている場合がある。この場合、システムコールフック部113は、ステップ16において、マッチポリシIDが小さい、つまり重要度の高いポリシデータ中のアクションから順に、OS主機能部112へ出力する。
【0108】
次に、図9に示すフローチャートに従って、OS主機能部112の動作について説明する。
【0109】
OS主機能部112は、システムコールフック部113からのシステムコール出力を待ち(S40)、このシステムコールを受け付けると、このシステムコールを実行し(S41)、ステップ40に戻る。
【0110】
システムコールフック部113から出力されるシステムコールとしては、システムコールフック部113がプロセス118から受け付けたシステムコールと、ポリシマッチしたときにシステムコールフック部113が出力するアクションとしてのシステムコールとがある。さらに、アクションとしてのシステムコールには、プロセスの動作規制を示すシステムコールのみの場合と、プロセスの動作規制を示すシステムコールと受付システムコール(プロセス118から受け付けたシステムコール)とを含む場合とがある。
【0111】
OS主機能部112は、以上のシステムコールを実行する。具体的に、ポリシマッチしたときにシステムコールフック部113が出力するアクションとしてのシステムコールとして、プロセスの強制終了又は停止を意味するシステムコールを受け付けると、このプロセスを強制終了又は停止する。また、アクションとしてのシステムコールとして、エラーメッセージを出力する旨のシステムコールに引き続き、受付システムコールを受け付けると、ディスプレイ152にエラーメッセージを表示させてから、当該受付システムコールを実行する。
【0112】
以上のように、本実施形態では、OSプログラム141に予め組み込まれているポリシデータベース144中の複数のポリシデータを用いて、コンピュータのセキュリティを一定範囲で確保しているで、従来のSELinux手法のように、新たなプロセスが追加される毎に、このプロセスに対するドメインの設定、さらに、このドメインとオブジェクトのタイプとの関係付けを行う必要がなく、コンピュータユーザの負担を軽減することができる。
【0113】
また、従来のSELinux手法では、例えば、システムコール「open」でオブジェクトにアクセスしようとした場合、このオブジェクトがアクセス規制のタイプであれば、このシステムコールの実行を認めていない。しかしながら、実際には、単に、プロセスが規制対象のオブジェクトにアクセスしただけでは、外部に情報漏えいすることがない。つまり、アクセス規制対象のオブジェクトであっても、このオブジェクトにアクセスするという行為自体を防止する必要はない。
【0114】
一方、本実施形態では、ポリシデータとして、システムコール「open」とシステムコール「sendto(オブジェクトを他のコンピュータに送る旨を示すシステムコール)」とを組合わせたポリシデータが存在していれば、システムコール「open」でのオブジェクトがアクセス規制対象であっても、このシステムコール「open」を実行する。そして、このシステムコール「open」を実行した後、システムコール「sendto」を実行しようとした場合に、この実行を認めていない。よって、本実施形態では、不必要にシステムコールの実行を制限せずに、情報漏えいを防ぐことができる。
【0115】
なお、本実施形態では、OS主機能部112が、システムコールテーブル121dを含むタスク・ストラクト121のRAM120上に作成しているが、システムコールテーブル121dをRAM上に作成するものの、このシステムコールテーブル121dをタスク・ストラクト121内に設けない場合には、システムコールフック部113がシステムコールテーブル121dの作成及び更新を行うようにしてもよい。
【0116】
「第二実施形態」
本発明に係るコンピュータの第二実施形態について、図10〜図13を用いて説明する。
【0117】
本実施形態のコンピュータ100Aは、そのハードウェア構成が第一実施形態と同一で、ソフトウェア構成のみが異なっている。すなわち、補助記憶装置140に格納されているOSプログラム142Aが第一実施形態と異なっている。
【0118】
OSプログラム142Aは、第一実施形態と異なるOS主機能モジュール142A及びシステムコールフックモジュール143Aと、第一実施形態と同じポリシデータベース144とを有している。
【0119】
このように、OS主機能モジュール142A及びシステムコールフックモジュール143Aが第一実施形態と異なるため、CPU110の機能構成の一つであるOS実行部111A、その要素であるOS主機能部112A及びシステムコールフック部113Aも第一実施形態と異なっている。なお、OS主機能部112A及びシステムコールフック部113Aに関する第一実施形態との相違点に関しては、後述の動作説明の際に説明する。
【0120】
RAM120に上に作成されるタスク・ストラクト121Aは、図11に示すように、第一実施形態におけるシステムコールテーブル121dの替わりに、ポリシデータコピーテーブル121eを有している。
【0121】
このポリシデータコピーテーブル121eは、ポリシデータベース144に格納されている全てのポリシデータ145がコピーされたポリシデータコピー125,125,…と、各ポリシデータコピー125,125,…に対応付けられた変数対応表127,127,…と、を有している。
【0122】
このタスク・ストラクト121Aは、OS主機能部112Aにより、プロセス118に関するアプリケーションプログラム148の起動時に、RAM120に上に作成される。また、このタスク・ストラクト121Aの各領域のデータのうち、ポリシコピーテーブル121eを除く全ての領域のデータは、いずれも、OS主機能部112Aにより更新される。一方、ポリシコピーテーブル121eのデータは、システムコールフック部113Aにより更新される。
【0123】
次に、図12及び図13に示すフローチャートに従って、システムコールフック部113の動作について説明する。なお、図12及び図13中で、第一実施形態と異なる符合が付されているブロックは、第一実施形態と異なる処理を行うブロックである。
【0124】
アプリケーションプログラム148が起動し、このアプリケーションプログラム148によるプロセス118が動作可能な状態になると、OS主機能部112Aは、このプロセス118に関するタスク・ストラクト121AをRAM121上に展開する。この際、タスク・ストラクト121Aのポリシデータコピーテーブル121eには、前述したように、ポリシデータベース144内の全てのポリシデータ145のポリシデータコピー125,125,…が作成されると共に、各ポリシデータコピー125,125,…に対応付けて変数対応表127,127,…が作成される。
【0125】
本実施形態のOS主機能部112Aは、以上のタスク・ストラクト121Aの作成動作が第一実施形態と異なる。
【0126】
システムコールフック部113Aは、プロセス118が動作可能な状態になると、このプロセス118の監視を開始し、このプロセス118からのシステムコール出力を待ち(S10)、プロセス118からのシステムコールを受け付けると、このシステムコールに関して、ポリシデータとのポリシマッチ判定を行う(S13A)。
【0127】
システムコールフック部113Aは、次に、第一実施形態と同様、RAM120上にポリシIDが記憶されているか否かを判断する(S14)。そして、システムコールフック部113Aは、RAM120上にポリシIDが記憶されていない、言い換えると、ポリシアンマッチと判断すると、このシステムコールをOS主機能部112Aへ出力し(S17)、ステップ10に戻る。
【0128】
また、システムコールフック部113Aは、RAM120上にポリシIDが記憶されている、言い換えると、ポリシマッチと判断すると、当該ポリシIDのポリシデータコピーからシステムコールの一種であるアクションを抽出し(S15A)、当該ポリシIDのポリシデータコピー125及び変数対応表127を削除した後、当該ポリシIDの新たなポリシデータコピー125及び変数対応表127を再生する(S19)。そして、システムコールフック部113Aは、ステップ15Aで抽出したアクションをOS主機能部112へ出力して(S16)、ステップ10に戻る。
【0129】
次に、ポリシマッチ判定処理(S13A)の詳細処理について、図13のフローチャートに従って説明する。
【0130】
システムコールフック部113Aは、ポリシデータコピーテーブル121e内の全てのポリシリコンテキストコピー125b,125b,…とターゲットシステムコールとを比較し(S23A)、このターゲットシステムコールがいずれかのポリシコンテキストコピー125b中の対応要素と要素マッチしているか否かを、第一実施形態と同様の判定手法で判定する(S24A)。
【0131】
システムコールフック部113Aは、ターゲットシステムコールがいずれのポリシコンテキストコピー125b中の対応要素とも要素マッチしていないと判定すると、直ちに、このポリシマッチ判定処理(S13A)を終了する。
【0132】
また、システムコールフック部113Aは、要素マッチしていると判定すると、要素マッチと判定した全てのポリシコンテキストコピー125b、これに対応する変数対応表127を、第一実施形態と同様の手法で更新する(S25A)。
【0133】
システムコールフック部113Aは、次に、ステップ25Aで更新した全てのポリシコンテキストコピー125bに関して、いずれかがポリシマッチしていることを示しているか否かを判定する(S26a)。なお、ポリシコンテキストコピー125bがポリシマッチしていることを示しているか否かは、第一実施形態と同様、その記述内容が「true」のみであるか否かによる。
【0134】
システムコールフック部113Aは、いずれかのポリシコンテキストコピー125bがポリシマッチしたことを示している判定すると、そのポリシデータコピー125bのポリシID125aをマッチポリシIDとしてRAM120に記憶して(S29A)、ポリシマッチ判定処理(S13A)を終了する。また、ポリシアンマッチと判定すると、直ちに、ポリシマッチ判定処理(S13A)を終了する。
【0135】
以上のように、本実施形態でも、本実施形態では、OSプログラム141に予め組み込まれているポリシデータベース144中の複数のポリシデータを用いて、コンピュータのセキュリティを一定範囲内で確保しているので、第一実施形態と同様の効果を得ることができる。
【0136】
さらに、本実施形態では、タスク・ストラクト121Aの生成時間が第一実施形態よりも長くなるものの、第一実施形態のように、全てのポリシデータに関してステップ21〜30(図6)のループ処理を行わず、全てのポリシデータに関して各ステップでまとめて処理しているので、全体として、処理の高速化を図ることができる。
【0137】
なお、本実施形態では、OS主機能部112が、ポリシデータコピーテーブル121eを含むタスク・ストラクト121AをRAM120上に作成しているが、ポリシデータコピーテーブル121eをRAM120上に作成するもものの、タスク・ストラクト121A内に設けない場合には、システムコールフック部113がポリシデータコピーテーブル121eを作成してもよい。
【符号の説明】
【0138】
100,100A:コンピュータ、110:CPU、111,111A:OS実行部、112,112A:OS主機能部、113,113A:システムコールフック部、118:プロセス、120:RAM、121,121A:タスク・ストラクト、121d:システムコールテーブル、121e:ポリシデータコピーテーブル、125:ポリシデータコピー、125a:ポリシID、125b:ポリシコンテキストコピー、125c:アクション、127:変数対応表、140:補助記憶装置、141,141A:OSプログラム、142,142A:OS主機能モジュール、143,143A:システムコールフックモジュール、144:ポリシデータベース、145:ポリシデータ、146:オブジェクトタイプ表、148:アプリケーションプログラム
【技術分野】
【0001】
本発明は、オペレーティングシステムによるコンピュータのセキュリティ技術に関する。
【背景技術】
【0002】
近年、コンピュータやIPネットワークの普及に伴い、コンピュータからの情報漏えいやコンピュータウイルスの感染など、コンピュータのセキュリティが脅かされる事態が急増しており、コンピュータセキュリティ技術の重要性が増している。
【0003】
コンピュータセキュリティ技術には、大別して、コンピュータへの不正侵入を防ぐ手法と、コンピュータに不正侵入された場合でも被害を最小限に抑える手法とがある。
【0004】
後者の手法で、もっとも広く用いられているのはアクセス制御に代表される実行制御の手法である。ここで、アクセス制御とは、サブジェクト毎に、実行可能なオペレーションとアクセス可能なオブジェクトを制限する手法である。なお、サブジェクトとは、能動的に動作を行う存在であり、ユーザやプロセス等が該当し、プロセスとは、実行中のプログラムである。また、オブジェクトとは、操作される対象であり、ファイルやディレクトリ等が該当する。
【0005】
このアクセス制御による手法としては、以下の非特許文献1に記載されているSELinux(Security Enhanced Linux)が挙げられる。
【0006】
このSELinux手法とは、NSA(アメリカ国家安全保障局)が主体となって開発されたソフトウェアであり、コンピュータ上で動作する各プロセスに対して、OS(Operating System)レベルでアクセス制限を行う手法である。
【0007】
このSELinux手法では、コンピュータ上で動作する全てのプロセスに対しドメインと呼ばれるラベルを設定すると共に、オブジェクトに対して、そのタイプ、さらにタイプ毎のアクセス・ベクタと呼ばれるアクセス形態(一切のアクセス不可、readのみ可、read及びwrite可、等)を設定し、プロセスのドメインとオブジェクトのタイプとを関係付けることで、各オブジェクトに対するプロセスのアクセス制限をOSレベルで実現している。
【0008】
このように、SELinux手法では、プロセスのアクセス制限をOSレベルで実現しているため、仮に、不正侵入者に、コンピュータのroot権限を奪われたとしても、この不正侵入者がアクセス可能なオブジェクトは限定され、被害を最小限に抑えることができる。
【先行技術文献】
【非特許文献】
【0009】
【非特許文献1】Bill Mccarty 著 田口裕也、根津研介 監訳 林英幸 訳 「SELinuxシステム管理― セキュアOSの基礎と運用」オライリージャパン 2005年3月25日発行
【発明の概要】
【発明が解決しようとする課題】
【0010】
しかしながら、上述のSELinux手法では、新たなプロセスが追加される毎に、このプロセスに対するドメインの設定、さらに、このドメインとオブジェクトのタイプとの関係付けを行う必要が有り、コンピュータユーザに負担を強いてしまう、という問題点がある。
【0011】
本発明は、このような従来技術の問題点に着目し、コンピュータのセキュリティをある程度確保しつつも、ユーザの負担を軽減することができる技術を提供することを目的とする。
【課題を解決するための手段】
【0012】
前記問題点を解決するための発明に係るOSプログラムは、
プロセスからの各種システムコールを処理するためのオペレーティングシステム(以下、OSとする)主機能モジュールと、
規制対象とすべき複数のシステムコールの組合わせと、前記プロセスから該組合わせのシステムコールが出力された場合の規制処理内容を示すシステムコールであるアクションとを有する複数のポリシデータを含むポリシデータベースと、
前記プロセスからの前記システムコールを監視するためのシステムコールフックモジュールと、
を有し、
前記システムコールフックモジュールは、
前記プロセスからのシステムコールを受け付けるシステムコール受付ステップと、
前記システムコール受付ステップでシステムコールを受け付けると、該システムコール受付ステップで順次受け付けられた複数のシステムコール中に、前記ポリシデータベース中のいずれかのポリシデータに含まれている前記複数のシステムコールの組合わせと対応する組合わせのシステムコールがある、ポリシマッチであるか否かを判定する判定ステップと、
前記判定ステップで前記ポリシマッチであると判定されると、前記ポリシマッチであると判定された際に対象になった前記ポリシデータ中の前記アクションを取得して、該アクションを出力し、前記判定ステップで前記ポリシマッチでないと判定されると、前記システムコール受付ステップで受け付けたシステムコールのうち、該判定ステップでの判定の契機となった最新のシステムコールを出力する指示出力ステップと、
をコンピュータのプロセッサに実行させ、
前記OS主機能モジュールは、
前記指示出力ステップで出力された前記システムコール又は前記アクションを受け付ける指示受付ステップと、
前記指示受付ステップで受け付けた前記システムコール又は前記アクションが示す処理を実行する指示実行ステップと、
を前記プロセッサに実行させる、ことを特徴とする。
【0013】
また、前記問題点を解決するための発明に係るコンピュータは、
前記OSプログラムが搭載されている、ことを特長とする。
【発明の効果】
【0014】
本発明では、OSプログラムに予め組み込まれているポリシデータベース中の複数のポリシデータを用いて、コンピュータのセキュリティを一定範囲で確保しているで、従来のSELinux手法のように、新たなプロセスが追加される毎に、このプロセスに対するドメインの設定、さらに、このドメインとオブジェクトのタイプとの関係付けを行う必要がなく、コンピュータユーザの負担を軽減することができる。
【図面の簡単な説明】
【0015】
【図1】本発明に係る第一実施形態におけるコンピュータの構成図である。
【図2】本発明に係る第一実施形態におけるポリシデータベースのデータ構成を示す説明図である。
【図3】本発明に係る第一実施形態におけるポリシコンテキストの記述例を示す説明図である。
【図4】本発明に係る第一実施形態におけるタスク・ストラクトのデータ構成を示す説明図である。
【図5】本発明に係る第一実施形態におけるシステムコールフック部の動作を示すフローチャートである。
【図6】図5のポリシマッチ判定処理(S13)の詳細処理を示すフローチャートである。
【図7】本発明に係る第一実施形態におけるポリシコンテキストの更新過程を示す説明図である。
【図8】本発明に係る第一実施形態における変数対応表の更新過程を示す説明図である。
【図9】本発明に係る第一実施形態におけるOS主機能部の動作を示すフローチャートである。
【図10】本発明に係る第二実施形態におけるコンピュータの構成図である。
【図11】本発明に係る第二実施形態におけるタスク・ストラクトのデータ構成を示す説明図ある。
【図12】本発明に係る第二実施形態におけるシステムコールフック部の動作をを示すフローチャートである。
【図13】図12のポリシマッチ判定処理(S13A)の詳細処理を示すフローチャートである。
【発明を実施するための形態】
【0016】
以下、本発明に係るコンピュータの各実施形態について、図面を用いて説明する。
【0017】
「第一実施形態」
本発明に係るコンピュータの第一実施形態について、図1〜図9を用いて説明する。
【0018】
本実施形態のコンピュータ100は、図1に示すように、各種演算処理を実行するCPU110と、CPU110のワークエリア等になるRAM120と、データやプログラム等が予め格納されているROM130と、ハードディスクドライブ装置等の補助記憶装置140と、ディスプレイ151と、キーボードやマウス等の入力装置152と、ディスプレイ151や入力装置152のインタフェースである入出力インタフェース150と、ネットワークNを介して他の装置と通信するためのネットワークインタフェース160と、を備えている。
【0019】
補助記憶装置140には、OS(Operating System)プログラム141と、アプリケーションプログラム148とが予め格納されている。OSプログラム141は、プロセスからの各種システムコールを処理するためのプログラムであるOS主機能モジュール142と、プロセスからのシステムコールを監視するためのプログラムであるシステムコールフックモジュール143と、規制対象とすべき複数のシステムコールの組合わせ等が示されている複数のポリシデータを含むポリシデータベース144と、を有している。
【0020】
CPU110は、機能的に、OS実行部111とプロセス118とを有している。このOS実行部111は、CPU110がOS主機能モジュール142をRAM120にロードし、これを実行することで機能するOS主機能部113と、CPU110がシステムコールフックモジュール143をRAM120にロードし、これを実行することで機能するシステムコールフック部113と、を有している。プロセス118は、CPU110がアプリケーションプログラム148をRAM120にロードし、これを実行することで機能する。
【0021】
RAM120には、OS実行部111により、プロセス118を管理するためのタスク・ストラクト121と、ポリシデータベース144の一つのポリシデータのコピーであるポリシデータコピー125と、プロセス118からのシステムコールに含まれている変数と代入値との関係を示す変数対応表127とが作成される。
【0022】
補助記憶装置140に格納されているポリシデータベース144は、図2に示すように、複数のポリシデータ145と、オブジェクトタイプ表146とを有している。
【0023】
ポリシデータ145は、当該ポリシデータを一意に識別するためのポリシID145aと、規制対象とすべき複数のシステムコールの組合わせを記述したポリシコンテキスト145bと、OS主機能部112に処理動作させるべき規制処理内容を示すアクション145cと、を有している。
【0024】
ポリシID145aは、ここでは、重要度の高いポリシデータ順に、1,2,3,…と付される。
【0025】
ポリシコンテキスト145bは、実行することによって情報漏えいやシステムダウン等、ユーザにとって好ましくない状況を引き起こす可能性のある複数のシステムコールの組み合わせ、つまり、前述したように、規制対象とすべき複数のシステムコールの組合せを記述したものである。
【0026】
アクション145cは、プロセスからの複数のシステムコールがポリシコンテキスト145bにマッチしたときに、OS主機能部112に処理動作させるべき規制処理内容を示すシステムコールである。ポリシデータ145中で、このアクション145cが記述される領域は、プロセスからの複数のシステムコールがポリシコンテキスト145bにマッチしたときに、OS主機能部112に処理動作させるべきシステムコールが存在しない場合には、空欄となる。また、ポリシデータ145中で、このアクション145cが記述される領域には、実行順序を指定して複数のシステムコールを記述される場合もある。
【0027】
具体的に、アクション145cには、システムコールを出力したプロセスの強制終了を意味するシステムコール「exit(1)」や、このプロセスの停止を意味するシステムコール等が記述される。また、アクション145cには、エラーメッセージを出力する旨のシステムコールと受付システムコールとが、出力順序を定められた形で記述される場合もある。このアクションは、まず、エラーメッセージを出力する旨のシステムコールをOS主機能部112に出力し、次に、ステップ10で受け付けたシステムコールをOS主機能部112に出力することを意味する。
【0028】
オブジェクトタイプ表146は、補助記憶装置140に格納されているファイルやディレクトリ等のオブジェクト(アクセス対象)の名前が格納されるオブジェクト名領域146aと、オブジェクトの属性が格納されるオブジェクトタイプ領域146bと、を有する。
【0029】
オブジェクトタイプ領域146bに格納されるオブジェクトの属性としては、機密情報を含むファイル等であることを示す「secret」や、一般ファイル等であることを示す「normal」等がある。
【0030】
なお、ポリシデータベース144中の複数のポリシデータ145は、基本的に、OSプログラム141に予め組み込まれているものであるが、OS主機能部112が、入力装置151から新たなポリシデータを受け付けて、又は、既存のポリシデータの変更内容を受け付けて、これをポリシデータベース144中に格納するようにしてもよい。
【0031】
また、オブジェクトタイプ表146の各領域146a,146bには、補助記憶装置140に新たにファイル等が格納される際に、OS主機能部112又はシステムコールブック部113により、入力装置151から受け付けたデータが格納される。このため、ユーザは、新たなファイル等を作成する際には、入力装置151を操作して、そのオブジェク名及びオブジェクトタイプを指定することになる。但し、ユーザは、新たなファイル等を作成する毎に、必ず、そのオブジェクト名及びオブジェクトタイプを指定する必要はないが、機密情報を含むファイル等を作成する際には、そのオブジェクト名及びオブジェクトタイプを指定することが好ましい。
【0032】
次に、以上で説明したポリシコンテキスト145bの具体的な記述形式について、図3を用いて説明する。
【0033】
複数のシステムコールの組合わせは、「→」と「and」と「or」と用いて表現される。
【0034】
「→」は、この「→」を中心として両側に記述されたシステムコールの順序を示し、「→」の左辺に記述されたシステムコールが、「→」の右辺に記述されたシステムコールより、プロセスからの出力順序が先であることを意味させる記号である。
【0035】
「and」は、この「and」の両側に記述されたシステムコールが、プロセスからのシステムコールであることを意味させる記号である。また、「or」は、この「or」の両側に記述されたシステムコールのうち、いずれか一方のシステムコールが、プロセスからのシステムコールであることを意味させる記号である。
【0036】
また、システムコールの引数として、変数、及びオブジェクトタイプ条件付き変数を記述できる。変数は、1以上のアルファベットで記述される。また、オブジェクトタイプ条件付き変数は、まず、オブジェクトタイプが記述され、このオブジェクトタイプの右辺に、「&」が記述され、この「&」の右辺に、1以上のアルファベットにより変数が記述される。
【0037】
具体的に、図3中のポリシコンテキスト145Abは、プロセスからシステムコール「open(x)」が出力された後、プロセスからシステムコール「sendto(x,y)」が出力され、且つ、システムコール「open(x)」の引数とシステムコール「sendto(x,y)」の第一引数とが等しいという意味を表現するポリシである。
【0038】
このため、実際に、プロセスからシステムコール「open」が出力された後、プロセスからシステムコール「sendto」が出力され、しかも、システムコール「open」の引数とシステムコール「sendto」の第一引数とが等しい場合、これらのシステムコールの組み合わせは、このポリシコンテキスト145bAが示すポリシにマッチすることになる。
【0039】
なお、実際に、プロセスからシステムコール「open(x)」が出力された後、プロセスから他のシステムコールが出力され、さらに、その後に、プロセスからシステムコール「sendto(x,y)」が出力された場合も、本実施形態では、このポリシコンテキスト145Abが示すポリシにマッチしていると定義する。
【0040】
また、図3中のポリシコンテキスト145Bbは、プロセスからシステムコール「open(x)」とシステムコール「sendto(x,y)」とが出力され、且つ、システムコール「open(x)」の引数とシステムコール「sendto(x,y)」の第一引数とが等しいという意味を表現するポリシである。
【0041】
図3中のポリシコンテキスト145Cbは、プロセスからシステムコール「open(x)」システムコール「sendto(x,y)」とのうちの一方のシステムコールが出力されたという意味を表現するポリシである。
【0042】
ポリシコンテキスト145Dbは、プロセスからシステムコール「open(x)」とシステムコール「read(x)」とのうちの一方が出力された後、プロセスからシステムコール「sendto(x,y)」が出力され、且つ、システムコール「open(x)」又はシステムコール「read(x)」の引数と、システムコール「sendto(x,y)」の第一引数とが等しいという意味を表現するポリシである。
【0043】
図3中のポリシコンテキスト145Ebは、プロセスからシステムコール「open(x)」が出力された後、プロセスからシステムコール「sendto(x,y)」が出力され、且つ、システムコール「open(x)」の引数とシステムコール「sendto(x,y)」の第一引数とが等しく、さらに、システムコール「open(x)」の引数「x」のオブジェクトタイプとシステムコール「sendto(x,y)」の第一引数「x」のオブジェクトタイプがいずれも「secret_t」であるという意味を表現するポリシである。
【0044】
以上のように、本実施形態において、複数のシステムコールの組合わせとは、複数のシステムコールを単に全て含む場合の他、複数のシステムコールのいずれかを含む場合や、複数のシステムコールを含み且つこれらの順序が定められている場合、さらに、これらの組み合わせを含んでいる。
【0045】
以上、ポリシコンテキスト145bの具体的な記述形式について説明したが、他の記述形式で、複数のシステムコールの組合せを記述してもよいことは言うまでもない。
【0046】
次に、図4を用いて、タスク・ストラクト121について説明する。
【0047】
このタスク・ストラクト121は、プロセス118(図1)を管理するために、このプロセス118に関するアプリケーションプログラム148(図1)の起動時に、OS実行部111により、RAM120に上に作成される。
【0048】
このタスク・ストラクト121は、プロセスの状態(正常動作中、停止中等)が格納されるプロセス状態領域121aと、プロセスを一意に識別するためのプロセスIDが格納されるプロセスID領域121bと、プロセスによる使用メモリ量が格納される使用メモリ量領域121cと、プロセスからのシステムコール履歴が格納されるシステムコールテーブル121dと、図示されていないが、CPUの使用状況が格納される領域等を有する。
【0049】
このタスク・ストラクト121は、OS主機能部112により、プロセス118に関するアプリケーションプログラム148の起動時に、RAM120に上に作成される。また、このタスク・ストラクト121の各領域のデータのうち、システムコールテーブル121dを除く全ての領域のデータは、いずれも、OS主機能部112が更新する。一方、システムコールテーブル121dのデータは、システムコールフック部113が更新する。
【0050】
システムコールフック部113は、プロセス118から順次出力されるシステムコールのうち、後述するように、ポリシデータベース144のいずれかのポリシデータ145中に記述されているシステムコール名に一致するシステムコール名のシステムコールを、線形リスト形式で、システムコールテーブル121dに格納する。なお、システムコール名とは、例えば、システムコール「open(x)」の場合、「open」がシステムコール名である。
【0051】
システムコールフック部113は、システムコールテーブル121d中に、新たなシステムコールを追加する場合、システムコールテーブル121d中のリストの末尾の位置に、「→」及び新たなシステムコールを格納する。
【0052】
このように、システムコールテーブル121に、システムコールを順次格納することで、プロセスからの各システムコールの出力順を明記することができる。
【0053】
次に、図5及び図6に示すフローチャートに従って、システムコールフック部113の動作について説明する。
【0054】
アプリケーションプログラム148が起動し、このアプリケーションプログラム148によるプロセス118が動作可能な状態になると、OS主機能部112は、このプロセス118に関するタスク・ストラクト121をRAM121上に展開する。なお、この段階で、このタスク・ストラクト121のシステムコールテーブル121d(図4)には、何ら記述されていない。
【0055】
システムコールフック部113は、プロセス118が動作可能な状態になると、このプロセス118の監視を開始し、このプロセス118からのシステムコール出力を待ち(S10)、プロセス118からのシステムコールを受け付けると、このシステムコールのシステムコール名がポリシデータベース144に記述されているいずれかのシステムコールのシステムコール名と一致するか否かを判断する(S11)。
【0056】
システムコールフック部113は、ステップ10で受け付けたシステムコールのシステムコール名がポリシデータベース144に記述されているいずれのシステムコールのシステムコール名とも一致しないと判断すると、ステップ10で受け付けたシステムコールをOS主機能部112へ出力し(S17)、ステップ10に戻る。また、システムコールフック部113は、ステップ10で受け付けたシステムコールのシステムコール名がポリシデータベース144に記述されているいずれかのシステムコールのシステムコール名と一致すると判断すると、ステップ10で受け付けたシステムコールを、RAM120上に展開されているシステムコールテーブル121d(図4)に記述する(S12)。そして、システムコールフック部113は、システムコールテーブル121dに記述されているシステムコールに関して、ポリシデータとのポリシマッチ判定を行う(S13)。
【0057】
システムコールフック部113は、このポリシマッチ判定処理(S13)で、システムコールテーブル121dに記述されているシステムコールに関して、ポリシデータとマッチしていると判定すると、このポリシデータのポリシIDをRAM120上に一時的に記憶する。なお、このポリシマッチ判定処理に関しては、図6を用いて詳細に後述する。
【0058】
システムコールフック部113は、ポリシマッチ判定処理(S13)が終了すると、RAM120上にポリシIDが記憶されているか否かを判断する(S14)。システムコールフック部113は、RAM120上にポリシIDが記憶されていない、言い換えると、システムコールテーブル121dに記述されているシステムコールとポリシデータとがマッチしていない、と判断すると、ステップ10で受け付けたシステムコールをOS主機能部112へ出力し(S17)、ステップ10に戻る。
【0059】
また、システムコールフック部113は、RAM120上にポリシIDが記憶されている、言い換えると、システムコールテーブル121dに記述されているシステムコールとポリシデータとがマッチしている、と判断すると、当該ポリシIDのポリシデータからシステムコールの一種であるアクションを抽出し(S15)、このアクションをOS主機能部112へ出力して(S16)、ステップ10に戻る。
【0060】
次に、ポリシマッチ判定処理(S13)の詳細処理について説明する。
【0061】
ここで、以下の説明の都合上、プロセス118からは、図4のシステムコールテーブル121dに示すように、システムコール「open(myfile)」が出力され、その後、システムコール「sendto(myfile,server)」が出力され、さらに、その後、システムコール「close(…)」が出力されると、仮定する。また、ポリシデータベース144には、ポリシデータ145として、図2に示す、ポリシID「8」のポリシデータ145のみが格納され、オブジェクトタイプ表146として、図2に示すものが格納されていると、仮定する。
【0062】
図5を用いて前述したように、プロセス118からシステムコール「open(myfile)」が出力され、これをシステムコールフック部113が受け付けると(S10)、このシステムコールのシステムコール名「open」と、図2に示すポリシデータベース144のポリシデータ145に記述されているシステムコール名とを比較する(S11)。この際、システムコールフック部113は、ポリシデータ145中に、受け付けたシステムコールのシステムコール名「open」と一致するものがあると判断して、このシステムコール「open(myfile)」を、RAM120上に展開されているシステムコールテーブル121d(図4)に記述し(S12)、ポリシマッチ判定処理(S13)を開始する。
【0063】
システムコールフック部113は、ポリシマッチ判定処理で、図6のフローチャートに示すように、まず、システムコールテーブル121dから、先頭要素としてのシステムコールをターゲットシステムコールとして抽出する(S20)。この場合、システムコールテーブル121dには、システムコール「open(myfile)」しか記述されていないので、このシステムコール「open(myfile)」をターゲットシステムコールとして抽出する。
【0064】
システムコールフック部113は、次に、全てのポリシデータ145をコピーしたか否かを判断する(S21)。この場合、ポリシデータ145を未だコピーしていないので、全てのポリシデータ145をコピーしていないと判断し、未コピーのポリシデータ145をコピーして、これをポリシデータコピー125としてRAM121を展開すると共に、変対応表127をRAM120上に展開する(S22)。
【0065】
図2及び図7に示すように、この段階で作成されるポリシデータコピー125Aは、ポリシデータ145をコピーしたものであるから、このポリシデータ145のポリシID145aと同じポリシID125aと、このポリシデータ145のポリシコンテキスト145bと同じポリシコンテキストコピー125Abと、このポリシデータのアクション145cと同じアクション125cとを有している。
【0066】
また、図8に示すように、変数対応表127Aは、ポリシデータコピー125A内の引数「x、y」が変数として格納される変数領域127aと、ターゲットシステムコールの引数が代入値として格納される代入値領域127bとを有する。この段階で、変数対応表127Aには、変数領域127aに、ポリシリコンテキストコピー125Abに記述されている全てのシステムコールの引数「x、y」が格納され、代入値領127bには、何ら格納されない。
【0067】
システムコールフック部113は、ポリシリコンテキストコピーとターゲットシステムコールとを比較し(S23)、このターゲットシステムコールがポリシコンテキストコピー中の対応要素と要素マッチしているか否かを判定する(S24)。
【0068】
ここでの判定では、以下の三つの条件a)b)c)を満たす場合に、要素マッチと判定する。但し、条件c)は、ポリシコンテキストコピー中でターゲットシステムコールに対応する要素がオブジェクトタイプ条件付き変数である場合に適用される条件であり、ポリシコンテキストコピー中でターゲットシステムコールに対応する要素がオブジェクトタイプ条件付き変数でない場合には、二つの条件a)b)を満たす場合に、要素マッチと判定する。
【0069】
a)ターゲットシステムコールのシステムコール名がポリシコンテキストコピー内に存在する。
【0070】
b)ターゲットシステムコール中の引数が変数対応表127A内の変数と代入値との組合わせに矛盾がない。
【0071】
c)ターゲットシステムコール中の引数に関するオブジェクトタイプと、ポリシコンテキストコピーの対応システムコール中に記述されているオブジェクトタイプとが一致する。
【0072】
この場合、ターゲットシステムコール「open(myfile)」のシステムコール名「open」であり、ポリシリコンテキストコピー125Ab内の先頭要素であるシステムコール名が「open」又は「read」であるため、システムコールフック部113は、条件a)を満たすと判定する。
【0073】
また、変数対応表127A(図8)には、変数領域127aに「x、y」が格納され、代入値領127bには何ら格納されておらず、代入値として任意の値を代入することが可能であるため、ターゲットシステムコール「open(myfile)」中の引数「myfile」は、変数対応表127A内の変数と変数対応表127A内の代入値との組合わせに矛盾せず、システムコールフック部113は、条件b)を満たすと判定する。なお、矛盾する場合については後述する。
【0074】
また、ターゲットシステムコール「open(myfile)」中の引数「myfile」に関するオブジェクトタイプは、オブジェクトタイプ表146(図2)によれば「secret_t」であり、ポリシコンテキスト125Abの対応システムコール「open」中に記述されているオブジェクトタイプも「secret_t」であるため、システムコールフック部113は、条件c)を満たすと判定する。
【0075】
よって、この場合、システムコールフック部113は、このターゲットシステムコール「open(myfile)」がポリシコンテキスト125Abと要素マッチしていると判定する。
【0076】
システムコールフック部113は、ステップ24でターゲットシステムコールがポリシコンテキストコピーと要素マッチしていないと判定すると、ステップ27に進み、要素マッチしていると判定すると、ポリシリコンテキストコピー及び変数対応表127を更新する(S25)。
【0077】
ここで、ポリシリコンテキストコピーの更新とは、このポリシコンテキストコピー中で、ターゲットシステムコールに対する対応要素を、マッチしたことを示す「true」に変更する等を行って、このポリシコンテキストコピーの記述内容を整理することである。
【0078】
具体的に、システムコールフック部113は、図7に示すように、ポリシリコンテキストコピー125Abの更新では、まず、ポリシリコンテキストコピー125Ab中で要素マッチと判定した「open(secret_t & x)」を、マッチしたことを示す「true」に変更したポリシリコンテキストコピー125Bbを作成する。次に、このポリシコンテキストコピー125Bb中の「or」の左辺が「true」になったため、or式の全体を「true」に変更したポリシコンテキストコピー125Cbを作成する。以上で、この段階でのポリシコンテキストコピーの更新が終了する。
【0079】
また、ここでの変数対応表127の更新とは、変数対応表127の代入値領域127bに、ターゲットシステムコールの引数を格納することである。
【0080】
具体的に、システムコールフック部113は、図8に示すように、変数対応表127Aの代入値領域127bのうち、ポリシリコンテキストコピー125Ab中の対応要素の引数「x」に対応する代入値領域127bに、ターゲットシステムコール「open(myfile)」の引数「myfile」を格納し、変数対応表127Bを作成する。
【0081】
システムコールフック部113は、ポリシコンテキストコピー及び変数対応表127の更新が終了すると(S25)、ターゲットシステムコールの受け付けで、ポリシマッチしたか否かを判定し(S26)、ポリシマッチしたと判定すると、ポリシデータコピー125のポリシID125aをマッチポリシIDとしてRAM120に記憶する(S29)。また、ポリシアンマッチと判定するとステップ27に進む。ポリシマッチの判定は、ポリシコンテキストコピーの記述内容が「true」のみであるか否かによる。
【0082】
ここでは、図7に示すように、ポリシコンテキストコピー125Cbの記述内容が「true」のみでないため、ポリシアンマッチと判定し、ステップ27に進む。
【0083】
システムコールフック部113は、ステップ24で要素マッチしていないと判定した場合、さらに、上述のステップ26でポリシアンマッチと判定した場合、システムコールテーブル121dから全ての要素を抽出したか否かを判定する(S27)。全ての要素を抽出していればステップ30に進み、全ての要素を抽出していればステップ28に進む。
【0084】
この場合、システムコールテーブル121dには、システムコール「open(myfile)」のみしか記述されていないため、システムコールフック部113は、システムコールテーブル121dから全ての要素を抽出したと判定し、ステップ30に進む。
【0085】
システムコールフック部113は、ステップ30で、ポリシデータコピー及び変数対応表127をRAM120から削除し、ステップ21に戻る。
【0086】
システムコールフック部113は、ステップ21で、前述したように、全てのポリシデータ145をコピーしたか否かを判断する。ここでは、前述したように、ポリシデータベース144にはポリシデータ145が一つか格納されていないと仮定しているので、全てのポリシデータ145をコピーしたと判断し、ポリシマッチ判定処理(S13)を終了する。一方、ポリシデータベース144にはポリシデータ145が複数格納されている場合、システムコールフック部113は、前述のステップ22以降の処理を実行する。
【0087】
図5を用いて前述したように、システムコールフック部113は、以上で説明したポリシマッチ判定処理(S13)を終了すると、RAM120上にマッチポリシIDが記憶されているか否かを判断する(S14)。この場合、RAM120上にマッチポリシIDが記憶されていないため、ステップ10で受け付けたシステムコールをOS主機能部112へ出力して(S17)、ステップ10に戻る。
【0088】
次に、プロセス118から、前述のシステムコール「open(myfile)」の出力後、システムコール「sendto(myfile,server)」が出力された場合について説明する。
【0089】
図5を用いて前述したように、プロセス118からシステムコール「sendto(myfile,server)」が出力され、これをシステムコールフック部113が受け付けると(S10)、このシステムコールのシステムコール名「sendto」と、図2に示すポリシデータベース144のポリシデータ145に記述されているシステムコール名とを比較する(S11)。この際、システムコールフック部113は、ポリシデータ145中に、受け付けたシステムコールのシステムコール名「sendto」と一致するものがあると判断して、このシステムコール「sendto(myfile,server)」を、RAM120上に展開されているシステムコールテーブル121d(図4)に追記する(S12)。この結果、システムコールテーブル121dには、open(myfile)→ … → sendto(myfile,server)が記述されることになる。
【0090】
システムコールフック部113は、次に、ポリシマッチ判定処理を行う(S13)。このポリシマッチ判定処理で、システムコールフック部113は、図6のフローチャートに示すように、まず、システムコールテーブル121dから、先頭要素としてのシステムコールをターゲットシステムコールとして抽出する(S20)。この場合、システムコールテーブル121dには、先頭要素としてシステムコール「open(myfile)」が記述されているので、このシステムコール「open(myfile)」をターゲットシステムコールとして抽出する。
【0091】
システムコールフック部113は、以降、システムコール「open(myfile)」を受け付けたときのポリシマッチ判定処理と同様、ステップ21,22,23,24,25,26,27を実行する。この結果、ポリシコンテキストコピーは、図7中のポリシコンテキストコピー125Cbの状態になり、変数対応表127は、図8中の変数対応表127Bの状態になる。
【0092】
システムコールフック部113は、ステップ27で、前述したように、システムコールテーブル121dから全ての要素を抽出したか否かを判定する。この場合、システムコールテーブル121dには、システムコール「open(myfile)」の他に、システムコール「sendto(myfile,server)」も記述されているため、システムコールフック部113は、システムコールテーブル121dから全ての要素を抽出していないと判定し、ステップ28に進む。
【0093】
システムコールフック部113は、ステップ28で、システムコールテーブル121dから次要素を抽出して、これをターゲットシステムコールとし、ステップ23に戻る。この場合、システムコールフック部113は、ターゲットシステムコールとしてシステムコール「sendto(myfile,server)」を抽出する。
【0094】
次に、システムコールフック部113は、前述したように、ポリシリコンテキストコピーとターゲットシステムコールとを比較し(S23)、このターゲットシステムコールがポリシコンテキストコピー中の対応要素と要素マッチしているか否かを判定する(S24)。
【0095】
この要素マッチ判定では、ポリシコンテキストコピー125Cb中でターゲットシステムコール「sendto(myfile,server)」に対応する要素「sendto(x,y)」がオブジェクトタイプ条件付き変数でないので、上記三つの条件a)b)c)のうち、条件a)b)を満たす場合に、要素マッチと判定する。
【0096】
この場合、ターゲットシステムコール「sendto(myfile,server)」のシステムコール名「sendto」であり、ポリシリコンテキストコピー125Cb内の対応要素であるシステムコール名が「sendto」であるため、システムコールフック部113は、条件a)を満たすと判定する。
【0097】
また、この場合、変数対応表127B(図8)には、変数領域127aに「x、y」が格納され、代入値領127bには、変数xに対応する代入値として「myfile」が格納されており、変数yに対する代入値が格納されていない。また、ターゲットシステムコール「sendto(myfile,server)」中の引数「myfile,server」は、変数対応表127A内の変数と変数対応表127A内の代入値との組合わせに矛盾せず、システムコールフック部113は、条件b)を満たすと判定する。なお、仮に、ターゲットシステムコールが「sendto(ourfile,server)」である場合には、変数xに対応する値が「myfile」ではなく「ourfile」であるため、変数対応表127A内の変数と変数対応表127A内の代入値との組合わせに矛盾し、条件b)を満たさないと判定することになる。
【0098】
よって、この場合、システムコールフック部113は、このターゲットシステムコール「sendto(myfile,server)がポリシコンテキスト125Cbと要素マッチしていると判定する。
【0099】
システムコールフック部113は、ステップ23でターゲットシステムコールがポリシコンテキストコピーと要素マッチしていると判定すると、ポリシリコンテキストコピー及び変数対応表127を更新する(S25)。
【0100】
具体的に、システムコールフック部113は、図7に示すように、ポリシリコンテキストコピー125Cbの更新では、まず、ポリシリコンテキストコピー125Cb中で要素マッチと判定した「sendto(x,y)」を、マッチしたことを示す「true」に変更したポリシリコンテキストコピー125Dbを作成する。次に、このポリシコンテキストコピー125Db中の「→」の両辺が「true」になったため、全体を「true」に変更したポリシコンテキストコピー125Ebを作成する。以上で、ポリシコンテキストコピーの更新が終了する。
【0101】
また、システムコールフック部113は、図8に示すように、変数対応表127Bの代入値領域127bのうち、ポリシリコンテキストコピー125Cb中の対応要素の引数「x,y」のうち、引数「y」に対応する代入値領域127bに、ターゲットシステムコール「sendto(myfile,server)」の引数「server」を格納し、変数対応表127Eを作成する。
【0102】
システムコールフック部113は、ポリシコンテキストコピー及び変数対応表127の更新が終了すると、前述したように、ターゲットシステムコールの受け付けで、ポリシマッチしたか否かを判定する(S28)。この場合、ポリシコンテキストコピー125Ebの記述内容が「true」のみであるため、ポリシマッチと判定し、ステップ29に進む。
【0103】
システムコールフック部113は、ステップ29で、前述したように、ポリシデータコピー125のポリシID125aをマッチポリシIDとしてRAM120に記憶する。この場合、ポリシデータコピー125のポリシID125a「8」をマッチポリシIDとしてRAM120に記憶する。
【0104】
そして、システムコールフック部113は、ポリシデータコピー125及び変数対応表127をRAM120から削除してから(S30)、ステップ21に戻る。
【0105】
システムコールフック部113は、ステップ21で、全てのポリシデータ145をコピーしたと判断すると、このポリシマッチ判定処理(S13)を終了する。
【0106】
図5を用いて前述したように、システムコールフック部113は、以上で説明したポリシマッチ判定処理(S13)を終了すると、RAM120上にマッチポリシIDが記憶されているか否かを判断する(S14)。この場合、RAM120上にマッチポリシID「8」が記憶されているため、システムコールフック部113は、このマッチポリシID「8」のポリシデータ145からアクション145cとしての「exit(1)」を抽出する(S15)。そして、システムコールフック部113は、アクション145cとしての「exit(1)」をOS主機能部112へ出力してから(S16)、ステップ10に戻る。
【0107】
なお、ポリシマッチ判定処理(S13)では、複数のポリシデータの全てに関して判定が実行されるため、システムコールテーブル121dに記述されているシステムコールが複数のポリシデータにマッチしており、RAM120上に複数のマッチポリシIDが記憶されている場合がある。この場合、システムコールフック部113は、ステップ16において、マッチポリシIDが小さい、つまり重要度の高いポリシデータ中のアクションから順に、OS主機能部112へ出力する。
【0108】
次に、図9に示すフローチャートに従って、OS主機能部112の動作について説明する。
【0109】
OS主機能部112は、システムコールフック部113からのシステムコール出力を待ち(S40)、このシステムコールを受け付けると、このシステムコールを実行し(S41)、ステップ40に戻る。
【0110】
システムコールフック部113から出力されるシステムコールとしては、システムコールフック部113がプロセス118から受け付けたシステムコールと、ポリシマッチしたときにシステムコールフック部113が出力するアクションとしてのシステムコールとがある。さらに、アクションとしてのシステムコールには、プロセスの動作規制を示すシステムコールのみの場合と、プロセスの動作規制を示すシステムコールと受付システムコール(プロセス118から受け付けたシステムコール)とを含む場合とがある。
【0111】
OS主機能部112は、以上のシステムコールを実行する。具体的に、ポリシマッチしたときにシステムコールフック部113が出力するアクションとしてのシステムコールとして、プロセスの強制終了又は停止を意味するシステムコールを受け付けると、このプロセスを強制終了又は停止する。また、アクションとしてのシステムコールとして、エラーメッセージを出力する旨のシステムコールに引き続き、受付システムコールを受け付けると、ディスプレイ152にエラーメッセージを表示させてから、当該受付システムコールを実行する。
【0112】
以上のように、本実施形態では、OSプログラム141に予め組み込まれているポリシデータベース144中の複数のポリシデータを用いて、コンピュータのセキュリティを一定範囲で確保しているで、従来のSELinux手法のように、新たなプロセスが追加される毎に、このプロセスに対するドメインの設定、さらに、このドメインとオブジェクトのタイプとの関係付けを行う必要がなく、コンピュータユーザの負担を軽減することができる。
【0113】
また、従来のSELinux手法では、例えば、システムコール「open」でオブジェクトにアクセスしようとした場合、このオブジェクトがアクセス規制のタイプであれば、このシステムコールの実行を認めていない。しかしながら、実際には、単に、プロセスが規制対象のオブジェクトにアクセスしただけでは、外部に情報漏えいすることがない。つまり、アクセス規制対象のオブジェクトであっても、このオブジェクトにアクセスするという行為自体を防止する必要はない。
【0114】
一方、本実施形態では、ポリシデータとして、システムコール「open」とシステムコール「sendto(オブジェクトを他のコンピュータに送る旨を示すシステムコール)」とを組合わせたポリシデータが存在していれば、システムコール「open」でのオブジェクトがアクセス規制対象であっても、このシステムコール「open」を実行する。そして、このシステムコール「open」を実行した後、システムコール「sendto」を実行しようとした場合に、この実行を認めていない。よって、本実施形態では、不必要にシステムコールの実行を制限せずに、情報漏えいを防ぐことができる。
【0115】
なお、本実施形態では、OS主機能部112が、システムコールテーブル121dを含むタスク・ストラクト121のRAM120上に作成しているが、システムコールテーブル121dをRAM上に作成するものの、このシステムコールテーブル121dをタスク・ストラクト121内に設けない場合には、システムコールフック部113がシステムコールテーブル121dの作成及び更新を行うようにしてもよい。
【0116】
「第二実施形態」
本発明に係るコンピュータの第二実施形態について、図10〜図13を用いて説明する。
【0117】
本実施形態のコンピュータ100Aは、そのハードウェア構成が第一実施形態と同一で、ソフトウェア構成のみが異なっている。すなわち、補助記憶装置140に格納されているOSプログラム142Aが第一実施形態と異なっている。
【0118】
OSプログラム142Aは、第一実施形態と異なるOS主機能モジュール142A及びシステムコールフックモジュール143Aと、第一実施形態と同じポリシデータベース144とを有している。
【0119】
このように、OS主機能モジュール142A及びシステムコールフックモジュール143Aが第一実施形態と異なるため、CPU110の機能構成の一つであるOS実行部111A、その要素であるOS主機能部112A及びシステムコールフック部113Aも第一実施形態と異なっている。なお、OS主機能部112A及びシステムコールフック部113Aに関する第一実施形態との相違点に関しては、後述の動作説明の際に説明する。
【0120】
RAM120に上に作成されるタスク・ストラクト121Aは、図11に示すように、第一実施形態におけるシステムコールテーブル121dの替わりに、ポリシデータコピーテーブル121eを有している。
【0121】
このポリシデータコピーテーブル121eは、ポリシデータベース144に格納されている全てのポリシデータ145がコピーされたポリシデータコピー125,125,…と、各ポリシデータコピー125,125,…に対応付けられた変数対応表127,127,…と、を有している。
【0122】
このタスク・ストラクト121Aは、OS主機能部112Aにより、プロセス118に関するアプリケーションプログラム148の起動時に、RAM120に上に作成される。また、このタスク・ストラクト121Aの各領域のデータのうち、ポリシコピーテーブル121eを除く全ての領域のデータは、いずれも、OS主機能部112Aにより更新される。一方、ポリシコピーテーブル121eのデータは、システムコールフック部113Aにより更新される。
【0123】
次に、図12及び図13に示すフローチャートに従って、システムコールフック部113の動作について説明する。なお、図12及び図13中で、第一実施形態と異なる符合が付されているブロックは、第一実施形態と異なる処理を行うブロックである。
【0124】
アプリケーションプログラム148が起動し、このアプリケーションプログラム148によるプロセス118が動作可能な状態になると、OS主機能部112Aは、このプロセス118に関するタスク・ストラクト121AをRAM121上に展開する。この際、タスク・ストラクト121Aのポリシデータコピーテーブル121eには、前述したように、ポリシデータベース144内の全てのポリシデータ145のポリシデータコピー125,125,…が作成されると共に、各ポリシデータコピー125,125,…に対応付けて変数対応表127,127,…が作成される。
【0125】
本実施形態のOS主機能部112Aは、以上のタスク・ストラクト121Aの作成動作が第一実施形態と異なる。
【0126】
システムコールフック部113Aは、プロセス118が動作可能な状態になると、このプロセス118の監視を開始し、このプロセス118からのシステムコール出力を待ち(S10)、プロセス118からのシステムコールを受け付けると、このシステムコールに関して、ポリシデータとのポリシマッチ判定を行う(S13A)。
【0127】
システムコールフック部113Aは、次に、第一実施形態と同様、RAM120上にポリシIDが記憶されているか否かを判断する(S14)。そして、システムコールフック部113Aは、RAM120上にポリシIDが記憶されていない、言い換えると、ポリシアンマッチと判断すると、このシステムコールをOS主機能部112Aへ出力し(S17)、ステップ10に戻る。
【0128】
また、システムコールフック部113Aは、RAM120上にポリシIDが記憶されている、言い換えると、ポリシマッチと判断すると、当該ポリシIDのポリシデータコピーからシステムコールの一種であるアクションを抽出し(S15A)、当該ポリシIDのポリシデータコピー125及び変数対応表127を削除した後、当該ポリシIDの新たなポリシデータコピー125及び変数対応表127を再生する(S19)。そして、システムコールフック部113Aは、ステップ15Aで抽出したアクションをOS主機能部112へ出力して(S16)、ステップ10に戻る。
【0129】
次に、ポリシマッチ判定処理(S13A)の詳細処理について、図13のフローチャートに従って説明する。
【0130】
システムコールフック部113Aは、ポリシデータコピーテーブル121e内の全てのポリシリコンテキストコピー125b,125b,…とターゲットシステムコールとを比較し(S23A)、このターゲットシステムコールがいずれかのポリシコンテキストコピー125b中の対応要素と要素マッチしているか否かを、第一実施形態と同様の判定手法で判定する(S24A)。
【0131】
システムコールフック部113Aは、ターゲットシステムコールがいずれのポリシコンテキストコピー125b中の対応要素とも要素マッチしていないと判定すると、直ちに、このポリシマッチ判定処理(S13A)を終了する。
【0132】
また、システムコールフック部113Aは、要素マッチしていると判定すると、要素マッチと判定した全てのポリシコンテキストコピー125b、これに対応する変数対応表127を、第一実施形態と同様の手法で更新する(S25A)。
【0133】
システムコールフック部113Aは、次に、ステップ25Aで更新した全てのポリシコンテキストコピー125bに関して、いずれかがポリシマッチしていることを示しているか否かを判定する(S26a)。なお、ポリシコンテキストコピー125bがポリシマッチしていることを示しているか否かは、第一実施形態と同様、その記述内容が「true」のみであるか否かによる。
【0134】
システムコールフック部113Aは、いずれかのポリシコンテキストコピー125bがポリシマッチしたことを示している判定すると、そのポリシデータコピー125bのポリシID125aをマッチポリシIDとしてRAM120に記憶して(S29A)、ポリシマッチ判定処理(S13A)を終了する。また、ポリシアンマッチと判定すると、直ちに、ポリシマッチ判定処理(S13A)を終了する。
【0135】
以上のように、本実施形態でも、本実施形態では、OSプログラム141に予め組み込まれているポリシデータベース144中の複数のポリシデータを用いて、コンピュータのセキュリティを一定範囲内で確保しているので、第一実施形態と同様の効果を得ることができる。
【0136】
さらに、本実施形態では、タスク・ストラクト121Aの生成時間が第一実施形態よりも長くなるものの、第一実施形態のように、全てのポリシデータに関してステップ21〜30(図6)のループ処理を行わず、全てのポリシデータに関して各ステップでまとめて処理しているので、全体として、処理の高速化を図ることができる。
【0137】
なお、本実施形態では、OS主機能部112が、ポリシデータコピーテーブル121eを含むタスク・ストラクト121AをRAM120上に作成しているが、ポリシデータコピーテーブル121eをRAM120上に作成するもものの、タスク・ストラクト121A内に設けない場合には、システムコールフック部113がポリシデータコピーテーブル121eを作成してもよい。
【符号の説明】
【0138】
100,100A:コンピュータ、110:CPU、111,111A:OS実行部、112,112A:OS主機能部、113,113A:システムコールフック部、118:プロセス、120:RAM、121,121A:タスク・ストラクト、121d:システムコールテーブル、121e:ポリシデータコピーテーブル、125:ポリシデータコピー、125a:ポリシID、125b:ポリシコンテキストコピー、125c:アクション、127:変数対応表、140:補助記憶装置、141,141A:OSプログラム、142,142A:OS主機能モジュール、143,143A:システムコールフックモジュール、144:ポリシデータベース、145:ポリシデータ、146:オブジェクトタイプ表、148:アプリケーションプログラム
【特許請求の範囲】
【請求項1】
プロセスからの各種システムコールを処理するためのオペレーティングシステム(以下、OSとする)主機能モジュールを有するOSプログラムにおいて、
規制対象とすべき複数のシステムコールの組合わせと、前記プロセスから該組合わせのシステムコールが出力された場合の規制処理内容を示すシステムコールであるアクションとを有する複数のポリシデータを含むポリシデータベースと、
前記プロセスからの前記システムコールを監視するためのシステムコールフックモジュールと、
を有し、
前記システムコールフックモジュールは、
前記プロセスからのシステムコールを受け付けるシステムコール受付ステップと、
前記システムコール受付ステップでシステムコールを受け付けると、該システムコール受付ステップで順次受け付けられた複数のシステムコール中に、前記ポリシデータベース中のいずれかのポリシデータに含まれている前記複数のシステムコールの組合わせと対応する組合わせのシステムコールがある、ポリシマッチであるか否かを判定する判定ステップと、
前記判定ステップで前記ポリシマッチであると判定されると、前記ポリシマッチであると判定された際に対象になった前記ポリシデータ中の前記アクションを取得して、該アクションを出力し、前記判定ステップで前記ポリシマッチでないと判定されると、前記システムコール受付ステップで受け付けたシステムコールのうち、該判定ステップでの判定の契機となった最新のシステムコールを出力する指示出力ステップと、
をコンピュータのプロセッサに実行させ、
前記OS主機能モジュールは、
前記指示出力ステップで出力された前記システムコール又は前記アクションを受け付ける指示受付ステップと、
前記指示受付ステップで受け付けた前記システムコール又は前記アクションが示す処理を実行する指示実行ステップと、
を前記プロセッサに実行させる、
ことを特徴とするOSプログラム。
【請求項2】
請求項1に記載のOSプログラムにおいて、
前記システムコールフックモジュールは、
前記システムコール受付ステップでシステムコールを受け付ける毎に、該システムコールのシステムコール名が前記ポリシデータベースの複数のポリシデータのうちのいずれかのポリシデータに含まれているシステムコールのシステムコール名に一致するか否かを判定するコール名判定ステップと、
コール名判定ステップで一致すると判定されたシステムコール名のシステムコールを、システムコール履歴として前記コンピュータの記憶手段に記憶するシステムコール記憶ステップと、
を前記プロセッサに実行させ、
前記判定ステップでは、前記システムコール履歴中の複数のシステムコールのうち、前記ポリシデータベース中のいずれかのポリシデータ中の複数のシステムコールの組合わせと対応する組合わせが存在するか否かを判定し、対応する組合わせが存在する場合には前記ポリシマッチとする、
ことを特徴とするOSプログラム。
【請求項3】
請求項2に記載のOSプログラムにおいて、
前記判定ステップでは、
前記ポリシデータベースの複数のポリシデータのうち、未コピーのポリシデータを一つコピーして、該ポリシデータをポリシデータコピーとして前記記憶手段に記憶するポリシデータコピーステップと、
前記システムコール履歴から、最新のシステムコールをターゲットシステムコールとして抽出し、該ターゲットシステムコールと前記ポリシデータコピーとを比較し、該ターゲットシステムコールと、該ポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールとが対応する、要素マッチであるか否かを判定する要素マッチ判定ステップと、
前記要素マッチ判定ステップで、前記ターゲットシステムコールと、前記ポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールとが対応し、前記要素マッチであると判定されると、該ポリシデータコピー中の対応システムコールを要素マッチしたことを示す記述に変更するポリシデータコピー更新ステップと、
前記ポリシデータコピー更新ステップで更新された前記ポリシデータが、前記要素マッチしていないシステムコールを含むか否かを判定し、該要素マッチしていないシステムコールを含まないときに前記ポリシマッチとするポリシマッチ判定ステップと、
前記要素マッチ判定ステップで前記要素マッチでないと判定された場合、及び前記ポリシマッチ判定ステップで前記ポリシマッチでないと判定された場合に、前記システムコール履歴から、前記ターゲットシステムコールの次に新しいシステムコールを新たなターゲットシステムコールとして抽出し、該新たなターゲットシステムコールに関して前記要素マッチ判定ステップを実行させるターゲットシステムコール抽出ステップと、
を実行し、
前記ポリシデータコピーステップは、前記システムコール履歴中から前記新たなターゲットシステムコールを抽出できなくなると、繰り返し実行される、
ことを特徴とするOSプログラム。
【請求項4】
請求項3に記載のOSプログラムにおいて、
前記OS主機能モジュール又は前記システムコールフックモジュールは、
前記コンピュータの記憶手段に格納されたオブジェクトの識別情報と、該オブジェクトへのアクセスを制限すべきか否かを示すオブジェクトタイプとを受け付けて、前記コンピュータの記憶手段に記憶するオブジェクトタイプ受付ステップを、前記プロセッサに実行させ、
前記要素マッチ判定ステップでは、
前記ターゲットシステムコールのシステムコール名と、前記全てのポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールのシステムコール名とが一致するか否かを判定し、
両システムコール名が一致すると判定した場合に、前記ターゲットシステムコールのシステムコール名と一致する、前記ポリシデータコピー中の対応システムコールが、オブジェクトタイプを含んでいれば、前記記憶手段を参照して、前記ターゲットシステムコール中に含まれている引数に関するオブジェクトタイプを把握し、両オブジェクトタイプが一致するか否かを判定し、
両オブジェクトタイプが一致すると判定した場合に、前記要素マッチとする、
ことを特徴とするOSプログラム。
【請求項5】
請求項1に記載のOSプログラムにおいて、
前記OS主機能モジュール又は前記システムコールフックモジュールは、前記プロセスの起動時に、前記ポリシデータベース中の全てのポリシデータをコピーして、該コピーをポリシデータコピーとして前記コンピュータの記憶手段に記憶するポリシコピーステップを、前記プロセッサに実行させ、
前記判定ステップでは、
前記システムコール受付ステップでシステムコールを受け付ける毎に、該システムコールをターゲットシステムコールとして、前記記憶手段に記憶されている全てのポリシデータコピーを比較し、該ターゲットシステムコールと、該全てのポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールとが対応する、要素マッチであるか否かを判定する要素マッチ判定ステップと、
前記要素マッチ判定ステップで、前記ターゲットシステムコールと、前記全てのポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールとが対応し、前記要素マッチであると判定されると、ポリシデータコピー中の対応システムコールを要素マッチしたことを示す記述に変更するポリシデータコピー更新ステップと、
前記ポリシデータコピー更新ステップで更新された前記ポリシデータが、前記要素マッチしていないシステムコールを含むか否かを判定し、該要素マッチしていないシステムコールを含まないときに前記ポリシマッチとするポリシマッチ判定ステップと、
を実行する、
ことを特徴とするOSプログラム。
【請求項6】
請求項5に記載のOSプログラムにおいて、
前記OS主機能モジュール又は前記システムコールフックモジュールは、
前記コンピュータの記憶手段に格納されたオブジェクトの識別情報と、該オブジェクトへのアクセスを制限すべきか否かを示すオブジェクトタイプとを受け付けて、前記コンピュータの記憶手段に記憶するオブジェクトタイプ受付ステップを、前記プロセッサに実行させ、
前記要素マッチ判定ステップでは、
前記ターゲットシステムコールのシステムコール名と、前記全てのポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールのシステムコール名とが一致するか否かを判定し、
両システムコール名が一致すると判定した場合に、前記ターゲットシステムコールのシステムコール名と一致する、前記ポリシデータコピー中の対応システムコールが、オブジェクトタイプを含んでいれば、前記記憶手段を参照して、前記ターゲットシステムコール中に含まれている引数に関するオブジェクトタイプを把握し、両オブジェクトタイプが一致するか否かを判定し、
両オブジェクトタイプが一致すると判定した場合に、前記要素マッチとする、
ことを特徴とするOSプログラム。
【請求項7】
請求項1に記載のOSプログラムにおいて、
前記ポリシデータに含まれている前記複数のシステムコールの組み合わせは、該複数のシステムコールを含み、該複数のシステムコールの組み合わせ形態が記述されたデータである、
ことを特徴とするOSプログラム。
【請求項8】
記憶手段と、各種処理を実行するプロセッサとを備えているコンピュータにおいて、
前記記憶手段には、請求項1から7のいずれか一項に記載のOSプログラムが格納され、
前記プロセッサは、前記OSプログラム中の前記OS主機能モジュールと前記システムコールフックモジュールとを実行する、
ことを特徴とするコンピュータ。
【請求項1】
プロセスからの各種システムコールを処理するためのオペレーティングシステム(以下、OSとする)主機能モジュールを有するOSプログラムにおいて、
規制対象とすべき複数のシステムコールの組合わせと、前記プロセスから該組合わせのシステムコールが出力された場合の規制処理内容を示すシステムコールであるアクションとを有する複数のポリシデータを含むポリシデータベースと、
前記プロセスからの前記システムコールを監視するためのシステムコールフックモジュールと、
を有し、
前記システムコールフックモジュールは、
前記プロセスからのシステムコールを受け付けるシステムコール受付ステップと、
前記システムコール受付ステップでシステムコールを受け付けると、該システムコール受付ステップで順次受け付けられた複数のシステムコール中に、前記ポリシデータベース中のいずれかのポリシデータに含まれている前記複数のシステムコールの組合わせと対応する組合わせのシステムコールがある、ポリシマッチであるか否かを判定する判定ステップと、
前記判定ステップで前記ポリシマッチであると判定されると、前記ポリシマッチであると判定された際に対象になった前記ポリシデータ中の前記アクションを取得して、該アクションを出力し、前記判定ステップで前記ポリシマッチでないと判定されると、前記システムコール受付ステップで受け付けたシステムコールのうち、該判定ステップでの判定の契機となった最新のシステムコールを出力する指示出力ステップと、
をコンピュータのプロセッサに実行させ、
前記OS主機能モジュールは、
前記指示出力ステップで出力された前記システムコール又は前記アクションを受け付ける指示受付ステップと、
前記指示受付ステップで受け付けた前記システムコール又は前記アクションが示す処理を実行する指示実行ステップと、
を前記プロセッサに実行させる、
ことを特徴とするOSプログラム。
【請求項2】
請求項1に記載のOSプログラムにおいて、
前記システムコールフックモジュールは、
前記システムコール受付ステップでシステムコールを受け付ける毎に、該システムコールのシステムコール名が前記ポリシデータベースの複数のポリシデータのうちのいずれかのポリシデータに含まれているシステムコールのシステムコール名に一致するか否かを判定するコール名判定ステップと、
コール名判定ステップで一致すると判定されたシステムコール名のシステムコールを、システムコール履歴として前記コンピュータの記憶手段に記憶するシステムコール記憶ステップと、
を前記プロセッサに実行させ、
前記判定ステップでは、前記システムコール履歴中の複数のシステムコールのうち、前記ポリシデータベース中のいずれかのポリシデータ中の複数のシステムコールの組合わせと対応する組合わせが存在するか否かを判定し、対応する組合わせが存在する場合には前記ポリシマッチとする、
ことを特徴とするOSプログラム。
【請求項3】
請求項2に記載のOSプログラムにおいて、
前記判定ステップでは、
前記ポリシデータベースの複数のポリシデータのうち、未コピーのポリシデータを一つコピーして、該ポリシデータをポリシデータコピーとして前記記憶手段に記憶するポリシデータコピーステップと、
前記システムコール履歴から、最新のシステムコールをターゲットシステムコールとして抽出し、該ターゲットシステムコールと前記ポリシデータコピーとを比較し、該ターゲットシステムコールと、該ポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールとが対応する、要素マッチであるか否かを判定する要素マッチ判定ステップと、
前記要素マッチ判定ステップで、前記ターゲットシステムコールと、前記ポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールとが対応し、前記要素マッチであると判定されると、該ポリシデータコピー中の対応システムコールを要素マッチしたことを示す記述に変更するポリシデータコピー更新ステップと、
前記ポリシデータコピー更新ステップで更新された前記ポリシデータが、前記要素マッチしていないシステムコールを含むか否かを判定し、該要素マッチしていないシステムコールを含まないときに前記ポリシマッチとするポリシマッチ判定ステップと、
前記要素マッチ判定ステップで前記要素マッチでないと判定された場合、及び前記ポリシマッチ判定ステップで前記ポリシマッチでないと判定された場合に、前記システムコール履歴から、前記ターゲットシステムコールの次に新しいシステムコールを新たなターゲットシステムコールとして抽出し、該新たなターゲットシステムコールに関して前記要素マッチ判定ステップを実行させるターゲットシステムコール抽出ステップと、
を実行し、
前記ポリシデータコピーステップは、前記システムコール履歴中から前記新たなターゲットシステムコールを抽出できなくなると、繰り返し実行される、
ことを特徴とするOSプログラム。
【請求項4】
請求項3に記載のOSプログラムにおいて、
前記OS主機能モジュール又は前記システムコールフックモジュールは、
前記コンピュータの記憶手段に格納されたオブジェクトの識別情報と、該オブジェクトへのアクセスを制限すべきか否かを示すオブジェクトタイプとを受け付けて、前記コンピュータの記憶手段に記憶するオブジェクトタイプ受付ステップを、前記プロセッサに実行させ、
前記要素マッチ判定ステップでは、
前記ターゲットシステムコールのシステムコール名と、前記全てのポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールのシステムコール名とが一致するか否かを判定し、
両システムコール名が一致すると判定した場合に、前記ターゲットシステムコールのシステムコール名と一致する、前記ポリシデータコピー中の対応システムコールが、オブジェクトタイプを含んでいれば、前記記憶手段を参照して、前記ターゲットシステムコール中に含まれている引数に関するオブジェクトタイプを把握し、両オブジェクトタイプが一致するか否かを判定し、
両オブジェクトタイプが一致すると判定した場合に、前記要素マッチとする、
ことを特徴とするOSプログラム。
【請求項5】
請求項1に記載のOSプログラムにおいて、
前記OS主機能モジュール又は前記システムコールフックモジュールは、前記プロセスの起動時に、前記ポリシデータベース中の全てのポリシデータをコピーして、該コピーをポリシデータコピーとして前記コンピュータの記憶手段に記憶するポリシコピーステップを、前記プロセッサに実行させ、
前記判定ステップでは、
前記システムコール受付ステップでシステムコールを受け付ける毎に、該システムコールをターゲットシステムコールとして、前記記憶手段に記憶されている全てのポリシデータコピーを比較し、該ターゲットシステムコールと、該全てのポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールとが対応する、要素マッチであるか否かを判定する要素マッチ判定ステップと、
前記要素マッチ判定ステップで、前記ターゲットシステムコールと、前記全てのポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールとが対応し、前記要素マッチであると判定されると、ポリシデータコピー中の対応システムコールを要素マッチしたことを示す記述に変更するポリシデータコピー更新ステップと、
前記ポリシデータコピー更新ステップで更新された前記ポリシデータが、前記要素マッチしていないシステムコールを含むか否かを判定し、該要素マッチしていないシステムコールを含まないときに前記ポリシマッチとするポリシマッチ判定ステップと、
を実行する、
ことを特徴とするOSプログラム。
【請求項6】
請求項5に記載のOSプログラムにおいて、
前記OS主機能モジュール又は前記システムコールフックモジュールは、
前記コンピュータの記憶手段に格納されたオブジェクトの識別情報と、該オブジェクトへのアクセスを制限すべきか否かを示すオブジェクトタイプとを受け付けて、前記コンピュータの記憶手段に記憶するオブジェクトタイプ受付ステップを、前記プロセッサに実行させ、
前記要素マッチ判定ステップでは、
前記ターゲットシステムコールのシステムコール名と、前記全てのポリシデータコピー中に含まれている複数のシステムコールのうちのいずれかのシステムコールのシステムコール名とが一致するか否かを判定し、
両システムコール名が一致すると判定した場合に、前記ターゲットシステムコールのシステムコール名と一致する、前記ポリシデータコピー中の対応システムコールが、オブジェクトタイプを含んでいれば、前記記憶手段を参照して、前記ターゲットシステムコール中に含まれている引数に関するオブジェクトタイプを把握し、両オブジェクトタイプが一致するか否かを判定し、
両オブジェクトタイプが一致すると判定した場合に、前記要素マッチとする、
ことを特徴とするOSプログラム。
【請求項7】
請求項1に記載のOSプログラムにおいて、
前記ポリシデータに含まれている前記複数のシステムコールの組み合わせは、該複数のシステムコールを含み、該複数のシステムコールの組み合わせ形態が記述されたデータである、
ことを特徴とするOSプログラム。
【請求項8】
記憶手段と、各種処理を実行するプロセッサとを備えているコンピュータにおいて、
前記記憶手段には、請求項1から7のいずれか一項に記載のOSプログラムが格納され、
前記プロセッサは、前記OSプログラム中の前記OS主機能モジュールと前記システムコールフックモジュールとを実行する、
ことを特徴とするコンピュータ。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2011−81501(P2011−81501A)
【公開日】平成23年4月21日(2011.4.21)
【国際特許分類】
【出願番号】特願2009−231662(P2009−231662)
【出願日】平成21年10月5日(2009.10.5)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
【公開日】平成23年4月21日(2011.4.21)
【国際特許分類】
【出願日】平成21年10月5日(2009.10.5)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
[ Back to top ]