(57)【要約】【課題】オーバーヘッドを軽減し、柔軟なアクセス制御を行うアクセス制御装置及びアクセス制御方法を提供する。【解決手段】アクセス制御装置１００は、入力データに対応する第一のアクセス制御規則２１０を導出する第一のアクセス制御規則導出部１１０と、入力変数と出力変数との対応を表す派生規則２２０に基づき、出力データの派生元である入力データを特定する入力データ特定部１２０と、入力データ特定部１２０によって特定された入力データに対応する第一のアクセス制御規則２１０に従って、出力データに対応する第二のアクセス制御規則２３０を導出する第二のアクセス制御規則導出部１３０と、第二のアクセス制御規則２３０に従って、出力データの出力処理を制御するアクセス制御部１４０とを備える。【選択図】図１
2006155416.tif 000002
【特許請求の範囲】
【請求項１】
入力データをプロセスが参照する入力変数へ入力し、プロセス実行に従い入力変数から派生した出力変数に格納された出力データを出力するアクセス制御装置であって、
前記入力データに対応する第一のアクセス制御規則を導出する第一のアクセス制御規則導出部と、
前記入力変数と前記出力変数との対応を表す派生規則に基づき、前記出力データの派生元である前記入力データを特定する入力データ特定部と、
前記入力データ特定部によって特定された入力データに対応する第一のアクセス制御規則に従って、前記出力データに対応する第二のアクセス制御規則を導出する第二のアクセス制御規則導出部と、
前記第二のアクセス制御規則に従って、前記出力データの出力処理を制御するアクセス制御部と
を備えることを特徴とするアクセス制御装置。
【請求項２】
前記入力データの入力元が計算機上のリソースである場合、
前記第一のアクセス制御規則導出部は、前記リソースに対応する第一のアクセス制御規則を導出することを特徴とする請求項１に記載のアクセス制御装置。
【請求項３】
前記第一のアクセス制御規則及び前記第二のアクセス制御規則は、前記出力処理の際に発生するシステムコールを許可するか否かを定めることを特徴とする請求項１又は２に記載のアクセス制御装置。
【請求項４】
前記入力データの入力先が当該プロセスを生成したプログラムが参照する変数である場合、
前記入力データ特定部は、前記変数を特定することを特徴とする請求項１〜３のいずれか１項に記載のアクセス制御装置。
【請求項５】
前記出力データが複数の入力データから派生する場合、
前記第二のアクセス制御規則導出部は、前記複数の入力データに対応する第一のアクセス制御規則に従って、前記出力データに対応する第二のアクセス制御規則を導出することを特徴とする請求項１〜４のいずれか１項に記載のアクセス制御装置。
【請求項６】
前記出力処理がプロセス間通信におけるデータの送信である場合、
前記第二のアクセス制御規則導出部は、送信先のプロセスに対応する第一のアクセス制御規則に従って、前記出力データに対応する第二のアクセス制御規則を導出することを特徴とする請求項１〜５のいずれか１項に記載のアクセス制御装置。
【請求項７】
前記派生規則は、プロセスを生成したプログラムのプログラムソースを静的解析することにより生成されることを特徴とする請求項１〜６のいずれか１項に記載のアクセス制御装置。
【請求項８】
プロセスへの入力データが他のプロセスからの出力データである場合、
前記第一のアクセス制御規則導出部は、前記他のプロセスの出力データに対応する第二のアクセス制御規則に従って、前記入力データに対応する第一のアクセス制御規則を導出することを特徴とする請求項１〜７のいずれか１項に記載のアクセス制御装置。
【請求項９】
出力データの出力先が計算機上のリソースである場合、
前記アクセス制御部は、前記出力データに対応する第二のアクセス制御規則に従って、前記リソースのアクセス制御規則を更新することを特徴とする請求項１〜８のいずれか１項に記載のアクセス制御装置。
【請求項１０】
入力データをプロセスが参照する入力変数へ入力し、プロセス実行に従い入力変数から派生した出力変数に格納された出力データを出力するアクセス制御方法であって、
前記入力データに対応する第一のアクセス制御規則を導出するステップと、
前記入力変数と前記出力変数との対応を表す派生規則に基づき、前記出力データの派生元である前記入力データを特定するステップと、
前記特定された入力データに対応する第一のアクセス制御規則に従って、前記出力データに対応する第二のアクセス制御規則を導出するステップと、
前記第二のアクセス制御規則に従って、前記出力データの出力処理を制御するステップと
を含むことを特徴とするアクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アクセス制御装置及びアクセス制御方法に関する。
【背景技術】
【０００２】
一般に、計算機上で実行されているプロセスが、キーボードからの入力データやファイルといった計算機上のリソースにアクセスするためには、カーネルプログラムにシステムコールと呼ばれる要求を発行し、カーネルを通じてアクセスする必要がある。これにより、リソースに対してアクセス権限を有するプロセスのみが、リソースへアクセス可能となる。
【０００３】
一方で、計算機上で動作する各プロセスは、信頼あるベンダから提供されたものや計算機に元々組み込まれた信頼度の高いプロセスから、計算機のユーザが独自に導入した信頼度の低いプロセスが存在する。信頼度の低いプロセスでは、プロセス自体が悪意を有していたり、脆弱性を有していたりする可能性があり、これらのプロセスに、計算機上のリソースに対するアクセスを許可した場合に、外部へ情報が漏えいしたり、計算機上のファイルが改ざんされたりするといった、危険性が存在する。
【０００４】
さらに、計算機上で動作するプロセスは、それぞれの役割に応じてアクセスする必要があるリソースが決まっている。例えば、Webのサーバプロセスであれば、HTTPリクエストに応じるために必要なファイル（例えば、Webサーバのルートディレクトリ以下）の入力や、ログファイルへの出力のみ可能であれば良い。
【０００５】
上記に挙げたような危険性を避けるためには、このような各プロセスの役割や権限に応じて、各プロセスの計算機上の各リソースに対するアクセスを制御可能である必要がある。
【０００６】
上記を実現する技術の一つとして、各プロセスの各リソースに対するアクセス権限を細かく設定したアクセス制御規則を利用することにより、細粒度のアクセス制御を行う強制アクセス制御と呼ばれる技術が存在する。例えば、SELinuxでは、各プロセスに対してドメインと呼ばれるアクセス権のレベルを設定し、また計算機上の各リソースに対しては、タイプと呼ばれるレベルを設定する（例えば、非特許文献１参照。）。しかるのち、各ドメインの各タイプに対するアクセス権を記述するアクセス制御規則を設定し、カーネルがこのアクセス制御規則により各プロセスの各リソースに対するアクセスを制御することが可能である。例えば、Webサーバの例では、図１２に示したように、Webサーバプロセスに“httpd_t”というドメインを設定し、Webページ用のファイルが格納されたディレクトリ“/var/www/html/”には“httpd_sys_content_t”というタイプを設定し、さらに＜httpd_tドメインに属するプロセスはhttpd_sys_content_tタイプに属するディレクトリのみ読み込み可能＞というアクセス制御規則を設定することで、Webサーバプロセスに必要最小限の権限のみ与えることが可能である。
【０００７】
SELinuxのような強制アクセス制御技術を適用する例として、例えば、図１３に示した例では、プロセスAはリソースAとリソースBを読み込むことが可能であり、プロセスBはリソースBのみ読み込むことが可能である。
【０００８】
ここで、プロセスAがリソースAを読み込んだ後、プロセスAがプロセスBに対して出力するような場合を考える。この場合、プロセスBは、本来読み込む権限がないはずのリソースAを読み込むことが可能となってしまう。
【０００９】
SELiunuxで実現されているような強制アクセス制御技術により、このような状況を避けるためには、＜リソースAを読み込む権限がある全てのプロセスは、プロセスBとのプロセス間通信を禁止する＞というアクセス制御規則があれば良い。
【００１０】
この場合、プロセスAが読み込んだリソースがBであったとしても、プロセスAはプロセスBに対してそれを出力することは不可能となる。
【００１１】
また、このような状況において、リソースAを読み込んだ時点でプロセスAのアクセス権限を変え、プロセスBとのプロセス間通信を禁止するという、SELinuxの強制アクセス制御技術に比べて柔軟なアクセス制御を実現可能とする技術も開示されている（例えば、特許文献１参照。）。この場合では、プロセスAはリソースAを読み込むまではプロセスBと通信可能であるが、リソースAを読み込んだ後は、プロセス Bと通信不可能となり、リソースBをプロセスBに対して出力することはできない。
【００１２】
以上挙げた二つの文献では、どちらも各プロセスの各リソースに対するアクセス制御を行う。しかし、プロセス間のアクセス権が異なる時には、図１３で挙げたような場合に実際には許可されるはずのリソースBのプロセス間通信を禁止しなければならず、各プロセスの動作が必要以上に制限されてしまう。
【００１３】
例えば、JAVA(登録商標）アプレットのように、プロセスAがインターネット上から信頼のおけないコード（上記の例ではプロセスB）を取得して実行するようなアプリケーションは数多く存在する。この場合、プロセスAはプロセスBを実行するにあたり、pipe等のシステムコールを用いて情報のやり取りを行うのが一般的である。しかし、信頼性のないプロセスBは端末の特定のリソースに対してアクセスを許可されないのが一般的であり、この場合、例えばプロセスAがブラウザ等のプログラムでユーザから入力されたパスワードを保持している場合などでは、従来技術では、プロセスAはプロセスBを実行するにあたり、一切の情報のやり取りができなくなり、各プロセスの動作は非常に制限されることとなる。しかし、一方で、プロセスAとプロセスBの自由な情報のやり取りを許可することは、プロセスBが悪意を持っていた場合には、情報漏えいが発生する危険性が大きい。
【００１４】
上記のようにプロセスの柔軟性を損なうアクセス制御は、ユーザ・プログラムベンダの双方にとって不自由となるか、または、上記のような問題点を回避するために、アクセス制御規則を緩めることにより、セキュリティ上の脆弱性が発生する。
【００１５】
このような問題について、情報流解析と呼ばれる技術を用いた解決方法が考えられる（例えば、非特許文献２参照。）。情報流解析技術では、プロセスの動作を、元のプログラムソースの静的な解析、あるいはプロセス実行中の動的な解析により、プロセスに入力された情報の流れを追跡・制御する。具体的には、プロセスに入力された情報について、プロセスが参照する変数間での情報の伝播を解析する。 
【非特許文献１】Security Enhanced Linux (SE Linux) ｈｔｔｐ：／／ｗｗｗ．ｎｓａ．ｇｏｖ／ｓｅｌｉｎｕｘ／
【特許文献１】特開平８−８７４４０号公報
【非特許文献２】Stephen Tse and Steve Zdancewic.“Run-time principals in information-flow type systems”. In proceedings of IEEE Symposium on Security and Privacy、 pages 179-193, 2004.
【発明の開示】
【発明が解決しようとする課題】
【００１６】
しかしながら、上記に挙げたような問題を解決するには、プロセスへのリソースの入力、及びプロセスからのリソースの出力のみ監視すれば良く、情報流解析技術のようにプロセスが参照する変数まで監視するのは、プロセスのパフォーマンスを低下させる要因となる。
【００１７】
そこで、本発明は、上記の課題に鑑み、オーバーヘッドを軽減し、柔軟なアクセス制御を行うアクセス制御装置及びアクセス制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１８】
上記目的を達成するため、本発明の特徴は、入力データをプロセスが参照する入力変数へ入力し、プロセス実行に従い入力変数から派生した出力変数に格納された出力データを出力するアクセス制御装置であって、（ａ）入力データに対応する第一のアクセス制御規則を導出する第一のアクセス制御規則導出部と、（ｂ）入力変数と出力変数との対応を表す派生規則に基づき、出力データの派生元である入力データを特定する入力データ特定部と、（ｃ）入力データ特定部によって特定された入力データに対応する第一のアクセス制御規則に従って、出力データに対応する第二のアクセス制御規則を導出する第二のアクセス制御規則導出部と、（ｄ）第二のアクセス制御規則に従って、出力データの出力処理を制御するアクセス制御部とを備えるアクセス制御装置であることを要旨とする。
【００１９】
第１の特徴に係るアクセス制御装置によると、オーバーヘッドを軽減し、柔軟なアクセス制御を行うことができる。
【００２０】
又、第１の特徴に係るアクセス制御装置において、入力データの入力元が計算機上のリソースである場合、第一のアクセス制御規則導出部は、リソースに対応する第一のアクセス制御規則を導出してもよい。このアクセス制御装置によると、リソースに応じた出力処理を行うことができる。
【００２１】
又、第１の特徴に係るアクセス制御装置において、第一のアクセス制御規則及び第二のアクセス制御規則は、出力処理の際に発生するシステムコールを許可するか否かを定めてもよい。このアクセス制御装置によると、システムコールの発行元プロセスが、指定されたリソースを入力する権限があるかどうかを調べ、権限がある場合にのみリソースを読み込むことができる。
【００２２】
又、第１の特徴に係るアクセス制御装置において、入力データの入力先が当該プロセスを生成したプログラムが参照する変数である場合、入力データ特定部は、変数を特定してもよい。このアクセス制御装置によると、変数に対応した第一のアクセス制御規則に従って、出力処理を制御することができる。
【００２３】
又、第１の特徴に係るアクセス制御装置において、出力データが複数の入力データから派生する場合、第二のアクセス制御規則導出部は、複数の入力データに対応する第一のアクセス制御規則に従って、出力データに対応する第二のアクセス制御規則を導出してもよい。このアクセス制御装置によると、すべての入力データを考慮した第二のアクセス制御規則を導出することができる。
【００２４】
又、第１の特徴に係るアクセス制御装置において、出力処理がプロセス間通信におけるデータの送信である場合、第二のアクセス制御規則導出部は、送信先のプロセスに対応する第一のアクセス制御規則に従って、出力データに対応する第二のアクセス制御規則を導出してもよい。このアクセス制御装置によると、送信先のプロセスに応じた出力制御を行うことができる。
【００２５】
又、第１の特徴に係るアクセス制御装置において、派生規則は、プロセスを生成したプログラムのプログラムソースを静的解析することにより生成されてもよい。このアクセス制御装置によると、生成された派生規則を参照することにより、出力変数の派生元の入力変数を適切に特定することができる。
【００２６】
又、第１の特徴に係るアクセス制御装置において、プロセスへの入力データが他のプロセスからの出力データである場合、第一のアクセス制御規則導出部は、他のプロセスの出力データに対応する第二のアクセス制御規則に従って、入力データに対応する第一のアクセス制御規則を導出してもよい。このアクセス制御装置によると、各プロセスに応じた、柔軟な出力制御を行うことができる。
【００２７】
又、第１の特徴に係るアクセス制御装置において、出力データの出力先が計算機上のリソースである場合、アクセス制御部は、出力データに対応する第二のアクセス制御規則に従って、リソースのアクセス制御規則を更新してもよい。このアクセス制御装置によると、出力処理に応じて、アクセス制御規則を適宜更新することができる。
【００２８】
本発明の第２の特徴は、入力データをプロセスが参照する入力変数へ入力し、プロセス実行に従い入力変数から派生した出力変数に格納された出力データを出力するアクセス制御方法であって、（ａ）入力データに対応する第一のアクセス制御規則を導出するステップと、（ｂ）入力変数と前記出力変数との対応を表す派生規則に基づき、出力データの派生元である入力データを特定するステップと、（ｃ）特定された入力データに対応する第一のアクセス制御規則に従って、出力データに対応する第二のアクセス制御規則を導出するステップと、（ｄ）第二のアクセス制御規則に従って、出力データの出力処理を制御するステップとを含むアクセス制御方法であることを要旨とする。
【００２９】
第２の特徴に係るアクセス制御方法によると、オーバーヘッドを軽減し、柔軟なアクセス制御を行うことができる。
【発明の効果】
【００３０】
本発明によると、オーバーヘッドを軽減し、柔軟なアクセス制御を行うアクセス制御装置及びアクセス制御方法を提供することができる。
【発明を実施するための最良の形態】
【００３１】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には、同一又は類似の符号を付している。ただし、図面は模式的なものであることに留意すべきである。
【００３２】
＜第１の実施の形態＞
（アクセス制御装置）
第１の実施の形態に係るアクセス制御装置１００は、図１に示すように、第一のアクセス制御規則導出部１１０、入力データ特定部１２０、第二のアクセス制御規則導出部１３０、アクセス制御部１４０とを備える。
【００３３】
第１の実施の形態では、例えばSELinuxで実現されているような既存の強制アクセス制御技術と同じく、計算機上で動作する各プロセスの、計算機上の各リソースに対するアクセスを制御する、アクセス制御規則があらかじめ定められているものとする。
【００３４】
また、第１及び第２の実施の形態において、プロセスにデータが入力されてから出力されるまでの流れを図２に示す。図２に示すように、入力処理により、ファイルやキーボード等の計算機上のリソースからプロセスが参照する入力変数４１０へ入力された入力データ３１０は、プロセス実行に従い出力変数４２０へ派生し、出力処理により、出力変数４２０に格納された出力データ３２０が出力される。
【００３５】
各リソースに定められたアクセス制御規則とは、具体的には、図３に示すように、プロセスの各リソースに対する、メモリへの読み込み（入力処理）や別プロセス・別計算機への送信（出力処理）といった、入出力の処理を制御する規則である。例えば、プロセス1は、キーボードからのデータの入力を禁止される。また、図３では、以下の説明のため、各アクセス制御規則に一意の識別子を付与している。アクセス制御装置１００は、プロセスによるデータの入出力処理を監視し、その制御まで行うため、例えばプロセスの入出力の処理を管理するカーネルの機能として組み込むことが考えられる。
【００３６】
アクセス制御装置１００の第一のアクセス制御規則導出部１１０は、プロセスの記憶領域に入力される入力データ３１０に対応する第一のアクセス制御規則２１０を導出する。
【００３７】
入力データ特定部１２０は、与えられた入力変数４１０と出力変数４２０との対応を表す派生規則２２０に基づき、出力データ３２０の派生元である入力データ３１０を特定する。
【００３８】
第二のアクセス制御規則導出部１３０は、入力データ特定部１２０によって特定された入力データ３１０に対応する第一のアクセス制御規則に従って、出力データ３２０に対応する第二のアクセス制御規則２３０を導出する。
【００３９】
アクセス制御部１４０は、第二のアクセス制御規則２３０に従って、出力データ３２０の出力処理を制御する。
【００４０】
上述した各部の動作については、アクセス制御方法において、詳細に説明する。
【００４１】
又、第１の実施の形態に係るアクセス制御装置１００は、処理制御装置（ＣＰＵ）を有し、上述した第一のアクセス制御規則導出部１１０、入力データ特定部１２０、第二のアクセス制御規則導出部１３０、アクセス制御部１４０などをモジュールとして、ＣＰＵに内蔵する構成とすることができる。これらのモジュールは、パーソナルコンピュータ等の汎用コンピュータにおいて、所定のプログラム言語を利用するための専用プログラムを実行することにより実現することができる。
【００４２】
又、図示していないが、アクセス制御装置１００は、第一のアクセス制御規則導出処理、入力データ特定処理、第二のアクセス制御規則導出処理、アクセス制御処理などをＣＰＵに実行させるためのプログラムを蓄積するプログラム保持部を備えてもよい。プログラム保持部は、例えば、ＲＡＭ、ＲＯＭ、ハードディスク、フレキシブルディスク、コンパクトディスク、ＩＣチップ、カセットテープなどの記録媒体である。このような記録媒体によれば、プログラムの蓄積、運搬、販売などを容易に行うことができる。
【００４３】
又、図示していないが、アクセス制御装置１００は、入力元アクセス制御規則２００、第一のアクセス制御規則２１０、派生規則２２０、第二のアクセス制御規則２３０を保持するデータ保持部を備えてもよい。データ保持部は、ＲＡＭ等の内部記憶装置でもよく、ハードディスク等の外部記憶装置でもよい。
【００４４】
（アクセス制御方法）
次に、図３に示すようなアクセス制御規則があらかじめ与えられたものとして、アクセス制御装置１００によるアクセス制御方法について、図５を用いて説明する。
【００４５】
まず、ステップＳ１０１において、第一のアクセス制御規則導出部１１０は、プロセスに入力された入力データ３１０の入力元にあらかじめ付与された入力元アクセス制御規則２００を取得する。ここで、入力元とは例えば、計算機上のリソース、具体的には計算機上に保存されたデータや、計算機のユーザによりキーボードから入力されたデータを指す。これらがプロセスに入力される際、プロセスは必ずリソースを当該プロセスのメモリ空間に読み込むためにreadシステムコールを発行する。例えば、計算機上のファイルを読み込む際には、下記のようなシステムコールを発行する。
【００４６】
read ( “ファイルディスクリプタ”、 入力変数、 入力サイズ)
第一引数のファイルディスクリプタは、計算機上のファイルを一意に表す。このシステムコールは、ファイルディスクリプタで指定されたファイルから入力サイズで指定されたデータ長だけ読み取り入力変数４１０に代入することを、カーネルに要求するものである。
【００４７】
カーネルは、システムコールを受け取った際、あらかじめ与えられたアクセス制御規則により、システムコールの発行元プロセスが、指定されたリソースを入力する権限があるかどうかを調べ、権限がある場合には、そのシステムコールを許可する。
【００４８】
上記のようなシステムコールが発行され、入力データ３１０がプロセスに入力された際、ステップＳ１０２において、第一のアクセス制御規則導出部１１０は、入力元アクセス制御規則２００を、入力変数４１０に対応する第一のアクセス制御規則２１０とする。入力データ３１０の入力先と一意に対応付けるため、例えば図４に示すように入力変数４１０と第一のアクセス制御規則２１０とを対応付けて記録する。
【００４９】
次に、ステップＳ１０４において、第二のアクセス制御規則導出部１３０は、プロセスからデータが出力される際、出力データ３２０に対応する第二のアクセス制御規則２３０を導出する。プロセスがメモリ空間からデータを出力する際、必ずwriteシステムコールを発行する。
【００５０】
write (“ファイルディスクリプタ”、出力変数、出力サイズ)
ファイルディスクリプタは、出力先を表す。例えば、ファイルディスクリプタが計算機上のファイルを指す場合、ディスプレイを指す場合、計算機内外の別プロセスを指す場合がある。このシステムコールは、出力変数４２０から出力サイズで指定されたデータ長だけ読み取り、ファイルディスクリプタで指定された出力先に出力することを、カーネルに要求するものである。
【００５１】
上記のようなシステムコールが発行され、出力データ３２０がプロセスから出力される際、第二のアクセス制御規則導出部１３０は、当該出力処理を制御するための第二のアクセス制御規則２３０を導出する。具体的には以下の手順による。
【００５２】
（１）当該出力データ３２０が格納された出力変数４２０の派生元となっている全ての入力変数４１０を導出
（２）上記各入力変数４１０に対応する第一のアクセス制御規則２１０を取得
（３）上記全ての第一のアクセス制御規則２１０から、出力変数４２０に対応する第二のアクセス制御規則２３０を導出
上記3つの手順のうち、手順（１）については、上記非特許文献2で挙げたような情報流解析技術を用いる方法も考えられるが、パフォーマンス低下に繋がる。従って、与えられた入力変数４１０と出力変数４２０との対応を表す派生規則２２０が入力されるものとし、ステップＳ１０３において、これを利用する。派生規則２２０の導出方法については、第２の実施の形態において詳細に述べる。ここでは、出力変数４２０の派生元となった全ての入力変数４１０が特定できたものとする。例えば、当該出力データが、図４で示した入力変数のうちX1、X2から派生したものであった場合、手順（２）によりPolicy2、Policy3を取得し、手順（３）により第二のアクセス制御規則２３０が導出される。この場合、第二のアクセス制御規則２３０は、Policy2、Policy3を結合し、以下のような規則となる。
【００５３】
・プロセス1とプロセス2は、ファイル出力を禁止
・プロセス1、2を含み、カーネルを除く全てのプロセスは、計算機外への出力を禁止
次に、ステップＳ１０５において、アクセス制御部１４０は、第二のアクセス制御規則２３０に従い、当該出力データ３２０の出力処理を制御する。上記で示した例では、出力処理の主体がプロセス1であった場合に、出力先が別プロセスであれば出力を許可するが、出力先が計算機外やファイルであった場合には、出力を禁止する。
【００５４】
（作用及び効果）
第１の実施の形態に係るアクセス制御装置及びアクセス制御方法によると、プロセスに入力されたデータに対してアクセス制御規則を与え、プロセスからデータが出力される際に、そのデータのアクセス制御規則に従い出力処理を制御することができる。このため、例えば、図１３の例では、プロセスAがプロセスBにリソースAを出力する際は許可されないが、リソースBを出力する際は許可されるといった柔軟なアクセス制御が可能である。また、リソースの入出力のみを監視することにより、情報流解析技術に発生したようなオーバーヘッドを軽減することができる。
【００５５】
又、入力データ３１０の入力元が計算機上のリソースである場合、第一のアクセス制御規則導出部１１０は、リソースに対応する第一のアクセス制御規則２１０を導出することができる。このため、リソースに応じた出力処理を行うことができる。
【００５６】
又、第一のアクセス制御規則２１０及び第二のアクセス制御規則２３０は、出力処理の際に発生するシステムコールを許可するか否かを定めることができる。このため、システムコールの発行元プロセスが、指定されたリソースを入力する権限があるかどうかを調べ、権限がある場合にのみリソースを読み込むことができる。
【００５７】
又、入力データ３１０の入力先が当該プロセスを生成したプログラムが参照する変数である場合、入力データ特定部１２０は、変数を特定することができる。このため、変数に対応した第一のアクセス制御規則２１０に従って、出力処理を制御することができる。
【００５８】
又、出力データ３２０が複数の入力データ３１０から派生する場合、第二のアクセス制御規則導出部１３０は、複数の入力データ３１０に対応する第一のアクセス制御規則２１０に従って、出力データ３２０に対応する第二のアクセス制御規則２３０を導出することができる。このため、すべての入力データ３１０を考慮した第二のアクセス制御規則２３０を導出することができる。
【００５９】
又、出力処理がプロセス間通信におけるデータの送信である場合、第二のアクセス制御規則導出部１３０は、送信先のプロセスに対応する第一のアクセス制御規則２１０に従って、出力データ３２０に対応する第二のアクセス制御規則２３０を導出することができる。このため、送信先のプロセスに応じた出力制御を行うことができる。
【００６０】
＜第２の実施の形態＞
（アクセス制御装置及びアクセス制御方法）
第２の実施形態では、入力データ特定部１２０が、出力変数４２０へデータを派生する入力変数４１０を特定する方法を述べる。ここで、派生とは、具体的には、出力変数４２０に格納されている出力データ３２０が、派生元の入力変数４１０に格納されている入力データ３１０から生成されたことを表す。例えば、図６のようなプログラムでは、変数に格納されているデータは、変数aと変数bに格納されたデータから生成されている。
【００６１】
入力データ特定部１２０は、あらかじめ生成された派生規則２２０を用いることで、入力変数４１０を特定する。派生規則２２０は、例えば図７のように表され、出力変数４２０がどの入力変数４１０から派生するかを表す。この例では、出力変数Y1が入力変数X1、X2から派生することを表す。
【００６２】
派生規則２２０は、例えばプロセスを生成した実行プログラムのプログラムソースを静的解析することで生成可能である。具体的には、下記の手順による。
【００６３】
（１）入力変数４１０、及び出力変数４２０を特定する。
【００６４】
(ア) 入力変数４１０や出力変数４２０は、第１の実施の形態で示したようなシステムコールや、プログラム言語で規定された、そのシステムコールを呼び出すための高水準関数の引数となる変数であるため、プログラムソースの解析により特定可能である。
【００６５】
(イ) 例えば、ファイル入力には、第１の実施の形態で示したreadシステムコールや、その高水準関数であるfgets()関数等が用いられる。
【００６６】
（２）特定された入力変数４１０、出力変数４２０を用い、プログラムソースを静的解析することで、派生規則２２０を生成する。 
【００６７】
(ア) 図６のような派生が発生する演算において、演算の入力側が入力変数４１０であった場合に、演算の出力側の変数は入力変数４１０から派生したことになる。
【００６８】
(イ) もし、入力変数４１０から派生した変数が入力となる演算が発生した場合、その演算の出力もまた、入力変数４１０から派生したことになる。
【００６９】
(ウ) 上記の繰り返しにおいて、入力変数４１０や入力変数４１０から派生した変数から、さらに派生した変数が出力変数４２０であった場合、出力変数４２０の派生元入力変数として入力変数４１０を派生規則２２０に記録する。
【００７０】
(エ) 全ての入力変数４１０について、上記処理を繰り返す。
【００７１】
入力データ特定部１２０は、上記のようにして得られた派生規則２２０を参照することで、出力処理に関わるシステムコールが発生した際、出力データ３２０が格納された出力変数４２０の派生元の入力変数４１０を特定する。
【００７２】
（作用及び効果）
第２の実施の形態に係るアクセス制御装置及びアクセス制御方法によると、派生規則２２０は、プロセスを生成したプログラムのプログラムソースを静的解析することにより生成される。
【００７３】
このように生成された派生規則２２０を参照することにより、出力変数４２０の派生元の入力変数４１０を適切に特定することができる。
【００７４】
＜第３の実施の形態＞
（アクセス制御装置及びアクセス制御方法）
第３の実施の形態では、第１の実施形態において特に出力処理による出力先が別のプロセスであった場合について述べる。第３の実施の形態では、アクセス制御部１４０により出力処理が許可され、プロセスへの出力データ３２０の出力が発生したものとする。
【００７５】
第３の実施形態に係わる入出力処理の流れを図８に示す。図８では、入力元プロセス５１０が参照する出力変数４２１に格納された出力データ３２１が、出力先プロセス５２０が参照する入力変数４１２に入力されている。
【００７６】
出力先プロセス５２０から見た場合、入力元アクセス制御規則２００は入力元プロセス５１０の出力変数に対応する第二のアクセス制御規則２３１である。出力先プロセス５２０の第一のアクセス制御規則導出部１１０は、出力先プロセス５２０が発行したシステムコールを参照することで、入力変数４１２に対応する第一のアクセス制御規則２１２を導出する。具体的には、readシステムコールのファイルディスクリプタを参照することで、入力元プロセス５１０の出力変数４２１を特定し、出力変数４２１に対応する第二のアクセス制御規則２３１を入力元アクセス制御規則２００として取得し、入力変数４１２に対応する第一のアクセス制御規則２１２とする。
【００７７】
（作用及び効果）
第３の実施の形態に係るアクセス制御装置及びアクセス制御方法によると、プロセスへの入力データが他のプロセスからの出力データ３２１である場合、第一のアクセス制御規則導出部１１０は、他のプロセスの出力データ３２１に対応する第二のアクセス制御規則２３１に従って、入力データに対応する第一のアクセス制御規則２１２を導出することができる。このため、各プロセスに応じた、柔軟な出力制御を行うことができる。
【００７８】
＜第４の実施の形態＞
（アクセス制御装置及びアクセス制御方法）
第４の実施形態では、第１の実施の形態において特に出力処理による出力先がファイルであった場合について述べる。第４の実施の形態では、アクセス制御部１４０により出力処理が許可され、ファイルへの出力データ３２０の出力が発生したものとする。
【００７９】
第４の実施形態に係わる入出力処理の流れを図９に示す。図９では、ファイル６１０から入力されたデータを格納する入力変数４１１に対応する第一のアクセス制御規則２１１、及びファイル６２０から入力されたデータを格納する入力変数４１２に対応する第一のアクセス制御規則２１２があり、出力変数４２０に対応する第二のアクセス制御規則２３０は、第一のアクセス制御規則２１１、及び第一のアクセス制御規則２１２から導出されている。また、出力データ３２０は、第二のアクセス制御規則２３０に従い、ファイル６１０へ出力されている。
【００８０】
あらかじめファイル６１０、及びファイル６２０について、図１０に示したような入力元アクセス制御規則２０１、入力元アクセス制御規則２０２が定められていたとする。Policy610に該当するものが入力元アクセス制御規則２０１であり、Policy620に該当するものが入力元アクセス制御規則２０２である。
【００８１】
第１の実施の形態でも述べたように、第二のアクセス制御規則導出部は、入力変数４１１に対応する第一のアクセス制御規則２１０と入力変数４１２に対応する第二のアクセス制御規則２１２から、以下のような、出力変数４２０に対応する第二のアクセス制御規則２３０を導出する。
【００８２】
・プロセス1とプロセス2は、ディスプレイへの出力を禁止
・プロセス1、2を含み、カーネルを除く全てのプロセスは、プロセスへの出力を禁止
第二のアクセス制御規則２３０では、ファイル出力については禁止されていないので、アクセス制御部１４０は、出力データ３２０のファイル６１０への出力を許可する。この際、アクセス制御部１４０は、第二のアクセス制御規則２３０を参照し、それをファイル６１０の入力元アクセス制御規則２０１に継承する。これにより、出力処理後の入力元アクセス制御規則２０１は、図１１に示すようになる。
【００８３】
（作用及び効果）
第４の実施の形態に係るアクセス制御装置及びアクセス制御方法によると、出力データ３２０の出力先が計算機上のリソース（例えば、ファイル６１０）である場合、アクセス制御部１４０は、出力データ３２０に対応する第二のアクセス制御規則２３０に従って、図１１に示すように、リソース（例えば、ファイル６１０）のアクセス制御規則を更新することができる。このため、出力処理に応じて、アクセス制御規則を適宜更新することができる。
【００８４】
＜その他の実施の形態＞
本発明は上記の実施の形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施の形態、実施例及び運用技術が明らかとなろう。
【００８５】
例えば、第１の実施の形態に係るアクセス制御装置１００において、第一のアクセス制御規則導出部１１０、入力データ特定部１２０、第二のアクセス制御規則導出部１３０、アクセス制御部１４０などをモジュールとして、一つのＣＰＵに内蔵する構成としてもよいとして説明したが、それらが二つあるいはそれ以上のＣＰＵに分かれていても構わない。その際はそれらのＣＰＵ間でデータのやりとりが行えるようにバスなどで装置間を接続しているとする。
【００８６】
このように、本発明はここでは記載していない様々な実施の形態等を含むことは勿論である。従って、本発明の技術的範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によってのみ定められるものである。
【図面の簡単な説明】
【００８７】
【図１】第１の実施の形態に係るアクセス制御装置の構成ブロック図である。
【図２】第１の実施の形態に係る入出力処理を説明するための図である。
【図３】第１の実施の形態に係るリソースに付与されたアクセス制御規則の一例である。
【図４】第１の実施の形態に係る入力変数と第一のアクセス制御規則との対応表の一例である。
【図５】第１の実施の形態に係るアクセス制御方法を示すフローチャートである。
【図６】第２の実施の形態に係る派生を説明するための図である。
【図７】第２の実施の形態に係る派生規則の一例である。
【図８】第３の実施の形態に係る入出力処理を説明するための図である。
【図９】第４の実施の形態に係る入出力処理を説明するための図である。
【図１０】第４の実施の形態に係る更新前のアクセス制御規則の一例である。
【図１１】第４の実施の形態に係る更新後のアクセス制御規則の一例である。
【図１２】SELinuxにおける強制アクセス制御を説明するための図である。
【図１３】プロセスに入力されたリソースの出力を説明するための図である。
【符号の説明】
【００８８】
１００…アクセス制御装置
１１０…アクセス制御規則導出部
１２０…入力データ特定部
１３０…アクセス制御規則導出部
１４０…アクセス制御部
２００、２０１、２０２…入力元アクセス制御規則
２１０、２１１、２１２…第一のアクセス制御規則
２２０…派生規則
２３０、２３１…第二のアクセス制御規則
３１０…入力データ
３２０、３２１…出力データ
４１０、４１１、４１２…入力変数
４２０、４２１…出力変数
５１０…入力元プロセス
５２０…出力先プロセス
６１０、６２０…ファイル
【図１】
2006155416.tif 000003
【図２】
2006155416.tif 000004
【図３】
2006155416.tif 000005
【図４】
2006155416.tif 000006
【図５】
2006155416.tif 000007
【図６】
2006155416.tif 000008
【図７】
2006155416.tif 000009
【図８】
2006155416.tif 000010
【図９】
2006155416.tif 000011
【図１０】
2006155416.tif 000012
【図１１】
2006155416.tif 000013
【図１２】
2006155416.tif 000014
【図１３】
2006155416.tif 000015