最小権限違反検出プログラム
【課題】プログラムの最小権限違反を検出する。
【解決手段】権限要求APIの呼出とオブジェクトに対する実際のアクセスAPI(実アクセスAPIと呼ぶ)の呼出とをトレースする。そして、権限要求APIのトレースログから想定されるアクセスAPI(想定アクセスAPI)の呼出を導出して、実アクセスAPIの呼出と対応付けられるかを確認する。想定アクセスAPIについて実アクセスAPIとが適切に対応付けられない場合には、最小権限違反と判断する。
【解決手段】権限要求APIの呼出とオブジェクトに対する実際のアクセスAPI(実アクセスAPIと呼ぶ)の呼出とをトレースする。そして、権限要求APIのトレースログから想定されるアクセスAPI(想定アクセスAPI)の呼出を導出して、実アクセスAPIの呼出と対応付けられるかを確認する。想定アクセスAPIについて実アクセスAPIとが適切に対応付けられない場合には、最小権限違反と判断する。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、プログラムの動作に不要な権限の要求や使用を検出するための技術に関する。
【背景技術】
【0002】
顧客の要求仕様に従ったプログラムを作成する際には、最小権限違反とならないようにする必要がある。すなわち、(1)なくても動作する権限をプログラムが持たない、(2)なくても動作する権限をプログラムが要求しない、(3)なくても動作するパーミッションをプログラムがオブジェクトに設定しない、ということが必要である。最小権限違反となるようなプログラムを作成してしまうと、(a)不要に高い権限を有するプログラムが乗っ取られて、システム全体が乗っ取られるなど深刻な被害が発生するおそれがあり、(b)システムに何らかのセキュリティ上の問題が発生すると、高い権限を有するプログラムが疑われ、検証などに手間がかかる、(c)不要に高いパーミッション/アクセス許可を有するオブジェクトがねらわれ、情報漏洩などの深刻な被害が発生するおそれがある。
【0003】
最小権限違反の具体例としては以下のようなものがある。
(1)プログラムの仕様上、最低限必要な権限、パーミッション/アクセス許可を有するユーザ/グループよりも高い権限、パーミッション/アクセス許可を有するユーザ/グループでプログラムが実行されている。
[例1]目的のファイルへのアクセスは一般ユーザで可能であるのに,管理者「Administrator」で実行している。
[例2]シャットダウンAPI(Application Program Interface)を呼ぶことはないのに、特別権限SE_SHUTDOWN_NAME(シャットダウン権限)を有するユーザ/グループで実行している。
(2)プログラムの仕様上、最低限必要な一般権限/特権以上の権限/特権を要求している。
[例1]ファイルを参照するAPIを呼んでいるだけなのに、API OpenFile()で書き込み権を要求している。
[例2]ファイルのバックアップを行っていないのに、API AdjustTokenPrivileges()でSE_BACKUP_NAME(バックアップ権限)を要求している。
(3)不正なパーミッション/アクセス許可を持つオブジェクトを生成する。
[例]誤ってNULL DACL(アクセス許可未設定、すなわちeveryoneフルコントールが設定されているのと同等)のオブジェクトを生成している。
【0004】
このような問題が生ずるので、最小権限違反とならないようにプログラムを作成する必要があるが、開発者はアクセスコントロールの仕様を十分に理解せず、プログラムに高い権限を与えてしまったり、不正なパーミッション/アクセス許可を有するオブジェクトを作成するようにしてしまうことがある。
【0005】
上で述べたような問題に対して従来技術では、ソースプログラムを解析して問題を検出するような手法が存在している。しかしながら、ソースプログラムや仕様書を解析することができない場合がある。さらに、必要な権限は実行環境(OS(Operating System)、セキュリティポリシー、ネットワーク)に依存するが、単にソースプログラムや仕様書を解析するだけでは、実行環境に応じた最小権限違反を検出することはできない。なお、アクセス制御のための技術は多数存在しているが、最小権限違反を検出できるわけではない。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2003−186708号公報
【特許文献2】特開2007−226495号公報
【特許文献3】特開2008−117026号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
以上のように、従来技術では、ソースプログラムや仕様書を用いることなく検査対象プログラムについて、最小権限違反が存在するか否かを判断することはできない。
【0008】
従って、本技術の目的は、検査対象プログラムを実際に実行させて最小権限違反を検出する技術を提供することである。
【課題を解決するための手段】
【0009】
第1の態様に係る最小権限違反検出方法は、検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に検査対象プログラムから出力されることが想定されている想定アクセスAPIを権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、想定アクセスAPIデータ格納部において、権限要求APIトレースログ格納部に格納されている権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、上記所定の条件を満たす想定アクセスAPIが検出された場合には、当該想定アクセスAPIのデータに対応付けて実アクセスAPIのデータを想定アクセスAPIトレースログ格納部に格納する実アクセスAPI探索ステップと、想定アクセスAPIトレースログ格納部において実アクセスAPIのデータが対応付けられていない想定アクセスAPIを探索して、検出された想定アクセスAPIに想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップとを含む。
【0010】
第2の形態に係る最小権限違反検出方法は、検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に検査対象プログラムから出力されることが想定されている想定アクセスAPIを権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、想定アクセスAPIデータ格納部において、権限要求APIトレースログ格納部に格納されている権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、所定の条件を満たす想定アクセスAPIが検出された場合には、想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている権限要求APIに対応付けて、該当する実アクセスAPIのデータを、権限要求APIトレースログ格納部に格納するステップと、権限要求APIトレースログ格納部において実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、最小権限違反データ格納部に格納するステップとを含む。
【発明の効果】
【0011】
検査対象プログラムを実際に実行させれば、最小権限違反を検出できるようになる。
【図面の簡単な説明】
【0012】
【図1】権限要求と実際のアクセスについての関係を説明するための図である。
【図2】本技術の実施の形態についてのシステム概要図である。
【図3】権限要求APIサンプリングルールの書式の一例を示す図である。
【図4】権限要求APIサンプリングルールの具体例を示す図である。
【図5】アクセス実行APIサンプリングルールの書式の一例を示す図である。
【図6】アクセス実行APIサンプリングルールの具体例を示す図である。
【図7】オブジェクトアクセスルールの書式の一例を示す図である。
【図8】オブジェクトアクセスルールの具体例を示す図である。
【図9】特別権限アクセスルールの一例を示す図である。
【図10】特別権限の一例を示す図である。
【図11】ユーザインタフェース部の処理フローを示す図である。
【図12】検査対象プログラムの指定画面の一例を示す図である。
【図13】ユーザインタフェース部の処理フローを示す図である。
【図14】検査結果確認画面の一例を示す図である。
【図15】検査結果表示画面の一例を示す図である。
【図16】APIサンプリング部の処理フローを示す図である。
【図17】権限要求APIトレースログの具体例を示す図である。
【図18】アクセス実行APIトレースログの具体例を示す図である。
【図19】最小権限違反判定部の処理フローを示す図である。
【図20】権限要求APIトレースログリストの構造例を示す図である。
【図21】実アクセスAPIトレースログリストの構造例を示す図である。
【図22】最小権限違反判定部の処理フローを示す図である。
【図23】想定アクセスAPIリストの構造例である。
【図24】最小権限違反判定部の処理フローを示す図である。
【図25】最小権限違反判定部の処理フローを示す図である。
【図26】最小権限違反リストの構造例を示す図である。
【図27】最小権限違反判定部の処理フローを示す図である。
【図28】最小権限違反判定部の処理フローを示す図である。
【図29】コンピュータの機能ブロック図である。
【発明を実施するための形態】
【0013】
[実施の形態の前提及び概要]
図1に、検査対象プログラムがオブジェクトの1つであるファイルA(FileA)にアクセスする際の処理内容を示す。
【0014】
まず、検査対象プログラム1001は、アクセス権限要求として、FileAのopen(R/W)(Read及びWrite)の権限要求をOSのアクセスコントロール部1003に出力する(ステップ(1))。アクセスコントロール部1003は、FileAのopen(R/W)の権限要求に応じて、検査対象プログラム1001についての実行ユーザの権限情報1009を参照して、検査対象プログラム1001を実行しているユーザ(すなわちFileAのopen(R/W)を出力させたユーザ)の権限を確認する(ステップ(2))。その後、アクセスコントロール部1003は、FileAについて予め設定されているパーミッション1007を参照して、実行ユーザのアクセス(ここではRead及びWrite)が許可されているか判断する(ステップ(3))。ここで実行ユーザのRead及びWriteアクセスが許可されている場合には、アクセスコントロール部1003は、検査対象プログラム1001にアクセス権限許可を返す(ステップ(4))。
【0015】
ここでは、検査対象プログラム1001は、FileAのReadアクセスを要求する(ステップ(5))。アクセスコントロール部1003は、FileAのReadアクセスに応じて、オブジェクト群に含まれるFileAのReadアクセスを実行する(ステップ(6))。
【0016】
この例では、最終的にFileAのReadアクセスしか実行しないのに、権限要求としては、FileAのRead及びWriteアクセスを要求している。すなわち、この例ではFileAのOpen(R)で十分なのに、FileAのOpen(R/W)を要求しているので、権限要求に最小権限違反があることが分かる。
【0017】
このように、権限要求から想定されるアクセスと、実際のアクセスとに齟齬がある否かを確認すれば、権限要求に最小権限違反があるか否かを判断することができる。
【0018】
本実施の形態では、権限要求APIの呼出とオブジェクトに対する実際のアクセスAPI(実アクセスAPIと呼ぶ)の呼出とをトレースする。そして、権限要求APIのトレースログから想定されるアクセスAPI(想定アクセスAPI)の呼出を導出して、実アクセスAPIの呼出と対応付けられるかを確認する。想定アクセスAPIについて実アクセスAPIが適切に対応付けられない場合には、最小権限違反と判断する。
【0019】
なお、図1では、プログラムの仕様上、最低限必要な一般権限/特権を超える権限/特権を要求している場合を示しているが、他の最小権限違反についても、基本的には同様の考え方で検出することができる。
【0020】
[本実施の形態の具体的内容]
図2に、本実施の形態に係るシステム概要を示す。オペレーティングシステム(OS)200は、従来のものと同じであって、各種プログラムからのAPI呼出に対して処理を行うAPI群210と、ファイル、ディレクトリ、パイプ、プロセス/スレッド、アクセストークン、レジストリ、サービス、プリンタ、イベント、セマフォ、ミューテックス、タイマ、ジョブなどのオブジェクト群220と、オブジェクト群220についてのパーミッションの設定データであるオブジェクト群パーミッション231と、プログラムを実行させているユーザ/グループの情報であるユーザ/グループ情報233と、ユーザ/グループに設定されている特別権限情報232とを含む。検査対象プログラム300は、OS200のAPI群210に対して必要なAPI呼出を行って、その結果を受け取るようになっている。
【0021】
本実施の形態では、最小権限違反を検出するため、ユーザインタフェース部100と、APIサンプリング部110と、APIサンプリング部110の処理のための権限要求APIサンプリングルールを格納する権限要求APIサンプリングルール格納部131と、APIサンプリング部110の処理のためのアクセス実行APIサンプリングルールを格納するアクセス実行APIサンプリングルール格納部132と、APIサンプリング部110の処理結果である権限要求APIトレースログを格納する権限要求APIトレースログ格納部133と、APIサンプリング部110の処理結果である実アクセスAPIトレースログを格納する実アクセスAPIトレースログ格納部134と、権限要求APIに対応するアクセスAPIなどを含むオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部135と、特別権限に対応して想定アクセスAPIなどを含む特別権限アクセスルールを格納する権限アクセスルール格納部136と、権限要求APIトレースログ格納部133と実アクセスAPIトレースログ格納部134とオブジェクトアクセスルール格納部135と権限アクセスルール格納部136とに格納されているデータを用いて想定アクセスAPIのデータを生成すると共に最小権限違反の判定を行う最小権限違反判定部120と、最小権限違反判定部120によって生成された想定アクセスAPIリストを格納する想定アクセスAPIリスト格納部137と、最小権限違反判定部120の判定結果を格納する判定結果格納部138とを有するコンピュータシステムが用いられる。
【0022】
ユーザインタフェース部100は、ユーザによる検査対象プログラム300の指定を受け付け、APIサンプリング部110に指示する。また、APIサンプリング部110は、検査対象プログラム300によるOS200のAPI呼出をトレースして、トレースが終了すると最小権限違反判定部120に処理を指示する。また、ユーザインタフェース部100は、判定結果格納部138に格納されている判定結果のデータを読み出して、ユーザに提示するようになっている。
【0023】
権限要求APIサンプリングルール格納部131に格納される権限要求APIサンプリングルールの書式の一例を図3に示す。図3に示すように、本ルールは、サンプリング対象APIの要求権限名(すなわちAPI名)が列挙される部分と、各要求権限APIについて記録すべきデータ項目が列挙される部分とを含む。記録すべきデータ項目は、例えば検出された権限要求APIの検出順番を表すシリアル番号であるトレース番号(TraceNO)と、API名(API)と、引数(Parameters)と、呼出元のプロセスIDである自プロセスID(OwnProcessID)と、呼出元のスレッドのIDであるスレッドID(OwnThreadID)と、本API呼出が行われた日時であるAPI呼出日時(Time)と、現在検査対象プログラム300を実行させているユーザの実行アカウント(UserAccount)と、実行ユーザの所属グループ(Group)と、実行ユーザの特別権限(Privilege)と、アクセス対象オブジェクトのパス(ObjectPath)と、オブジェクトのパーミッション(ObjectPermission)とが含まれる。API名(API)と、引数(Parameter)と、自プロセスID(OwnProcessID)と、スレッドID(OwnThreadID)と、アクセス対象オブジェクトパス(ObjectPath)については、権限要求APIの呼出自身から取得する。また、API呼出日時(Time)についてはOS200の時計から取得する。実行アカウント(UserAccount)と実行ユーザの所属グループ(Group)とについては、ユーザ/グループ情報233から取得する。特別権限(Privilege)については特別権限情報232から取得する。オブジェクトのパーミッション(ObjectPermission)については、オブジェクト群パーミッション231から取得する。
【0024】
図4に、権限要求APIサンプリングルールの具体例を示す。ここでは4つの権限要求APIが列挙されている。以下では、わかりやすいファイルのオープンを要求する権限要求APIである第1行目の「errno_t_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode)」を主に説明する。
【0025】
図5に、アクセス実行APIサンプリングルール格納部132に格納されるアクセス実行APIサンプリングルールの書式の一例を示す。図5に示すように、本ルールは、サンプリング対象APIの名称(オブジェクトアクセス名)が列挙される部分と、各オブジェクトアクセスについて記録すべきデータ項目が列挙される部分とを含む。
【0026】
記録すべきデータ項目は、例えば検出された権限要求APIの検出順番を表すシリアル番号であるトレース番号(TraceNO)と、API名(API)と、引数(Parameters)と、呼出元のプロセスの親プロセスのIDである親プロセスID(ParentProcessID)と、呼出元のプロセスIDである自プロセスID(OwnProcessID)と、呼出元のスレッドのIDであるスレッドID(OwnThreadID)と、本API呼出が行われた日時であるAPI呼出日時(Time)と、現在検査対象プログラム300を実行させているユーザの実行アカウント(UserAccount)と、実行ユーザの所属グループ(Group)と、実行ユーザの特別権限(Privilege)と、アクセス対象オブジェクトのパス(ObjectPath)と、オブジェクトのパーミッション(ObjectPermission)とが含まれる。API名(API)と、引数(Parameter)と、親プロセスID(ParentProcessID)と、自プロセスID(OwnProcessID)と、スレッドID(OwnThreadID)と、アクセス対象オブジェクトパス(ObjectPath)については、権限要求APIの呼出自身から取得する。また、API呼出日時(Time)についてはOS200の時計から取得する。実行アカウント(UserAccount)と実行ユーザの所属グループ(Group)とについては、ユーザ/グループ情報233から取得する。特別権限(Privilege)については特別権限情報232から取得する。オブジェクトのパーミッション(ObjectPermission)については、オブジェクト群パーミッション231から取得する。
【0027】
図6に、アクセス実行APIサンプリングルールの具体例を示す。ここでは6つのアクセスAPIが列挙されている。権限要求API「errno_t_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode)」に対応して出力されるアクセスAPIは、「int _read(int fd, void *buffer, unsigned int count)」又は「int _write(int fd, const void *buffer, unsigned int count)」である。
【0028】
図7に、オブジェクトアクセスルール格納部135に格納されるオブジェクトアクセスルールの書式の一例を示す。図7の例では、各行が1つのオブジェクトアクセスルールを表しており、1つのオブジェクトアクセスルールは、検索キーとなる要求権限名と、本ルールを適用すべきか否かを判断するために用いられる追加検索条件と、想定アクセスAPIと実アクセスAPIとを対応付ける際の条件となる要求権限名についての照合条件aと、想定アクセスAPIとして抽出されるオブジェクトアクセス名と、想定アクセスAPIと実アクセスAPIとを対応付ける際の条件となる実アクセスAPIについての照合条件bとを含む。
【0029】
図8に、オブジェクトアクセスルールの具体例を示す。図8の例では4つのルールが示されているが、第1行目と第2行目は同じ権限要求API「errno_t_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode)」についてのルールである。但し、追加検索条件が異なる。すなわち、第1行目ではoflag = _O_RDONLYというReadのみの場合という追加検索条件が設定されており、第2行目ではoflag = _O_RDWRというようにReadとWriteのいずれもという追加検索条件が設定されている。権限要求APIについての照合条件aは第1行目及び第2行目共に「Parameters.pfh=*」である。そして、第1行目では、権限要求APIに対応する想定アクセスAPIがReadを表す「int _read( int fd, void *buffer, unsigned int count)」となり、第2行目では、権限要求APIに対応する想定アクセスAPIがWriteを表す「int _write(int fd, const void *buffer, unsigned int count)」となる。第2行目では、権限要求APIからするとReadという想定アクセスAPIでもよいのだが、Readであるならば第1行目の権限要求APIでもよいので、Writeについての想定アクセスAPIが対応付けられている。他のルールについては、追加検索条件が設定されない場合もある。照合条件a及びbの使用方法については、処理フローの説明と共に説明する。
【0030】
図9に、権限アクセスルール格納部136に格納される特別権限アクセスルールの一例を示す。図9の例では、各特別権限について、対応する想定アクセスAPIが列挙されるようになっている。
【0031】
特別権限には、例えば図10に示すようなものがある。実行ユーザには、複数の特別権限が付与される場合があり、その場合には、図9において対応する想定アクセスAPIが複数抽出されることになる。
【0032】
次に、図11乃至図28を用いて図2に示したシステムの処理内容を説明する。最初に、ユーザインタフェース部100の処理内容について説明する。ユーザインタフェース部100は、表示装置にメインメニューを表示する(ステップS1)。本実施の形態では、検査対象プログラムの指定と、検査結果確認と、処理の終了とのいずれかが選択可能なものとする。これによってユーザにメニュー項目の選択を促す。そして、ユーザは、メニュー項目の選択を行って、ユーザインタフェース部100は、ユーザからの選択指示を受け付ける(ステップS3)。ここで、ユーザからの選択指示が、検査対象の指定であるか判断する(ステップS5)。検査対象の指定でない場合には、端子Aを介して図13の処理に移行する。
【0033】
一方、検査対象の指定である場合には、ユーザインタフェース部100は、検査対象プログラム指定画面を表示装置に表示する(ステップS7)。例えば、図12に示すような画面が表示される。すなわち、検査対象プログラムのファイルパスの入力欄と、OKボタンと、キャンセルボタンとが設けられている。なお、ファイルシステムのディレクトリを提示してファイルを選択させるようにしても良い。
【0034】
ユーザは、検査対象プログラム指定画面において、検査対象プログラムのファイルパス(すなわちファイル名)の入力を行い、OKボタンをクリックする。そうすると、ユーザインタフェース部100は、検査対象プログラムのファイルパスの入力を受け付ける(ステップS9)。そして、APIサンプリング部110が起動済みであるか確認して(ステップS11)、起動していない場合にはAPIサンプリング部110を起動する(ステップS13)。一方、起動している場合にはステップS15に移行する。
【0035】
その後、ユーザインタフェース部100は、指定された検査対象プログラムのファイル名を、APIサンプリング部110に出力して、処理開始を指示する(ステップS15)。そしてステップS1に戻る。
【0036】
図13の処理に移行して、メインメニューで選択されたメニュー項目が検査対象の指定ではない場合には、ユーザインタフェース部100は、検査結果確認が選択されたか判断する(ステップS17)。検査結果確認が選択された場合には、判定結果格納部138に格納されている判定結果の項目を含む結果確認画面データを生成して、表示装置に表示する(ステップS19)。例えば図14に示すような画面を表示する。図14の例では、3件の判定結果(ここでは3つの検査対象プログラム)が列挙されている。PIDは、プログラムIDであり、ユーザ名は、検査対象プログラムを実行させたユーザの権限を表している。ユーザは、図14のいずれかの判定結果を選択して、クリックする。すなわち参照指示を入力する。
【0037】
ユーザインタフェース部100は、特定の判定結果について参照指示がなされたか判断する(ステップS21)。参照指示がなされるまでステップS21を繰り返す。特定の判定結果について参照指示を受け付けた場合には、選択された判定結果のデータを判定結果格納部138から読み出し、表示データを生成して表示装置に表示する(ステップS23)。例えば図15に示すような画面が表示される。図15の例では、検査対象プログラムのプログラム名と、プログラムIDであるPIDと、検査対象プログラムを実行させているユーザのユーザ名と、ユーザの所属グループの所属グループ名と、起動日時及び終了日時と、総合評価(最小権限違反があるか否か)と、最小権限違反の件数(ERR)と、最小権限違反の具体的内容とが表示されるようになっている。最小権限違反の具体的内容については、以下で述べる最小権限違反判定部120により生成されるデータから得られる。このデータの具体的内容については、以下で説明する。そして、処理は端子Bを介してステップS1に戻る。また、ステップS17で結果確認ではなく、処理終了が指示された場合には、ユーザインタフェース部100は、APIサンプリング部110に処理終了を指示して、自らも処理を終了する(ステップS25)。
【0038】
以上のような処理を行うことによって、ユーザに検査対象プログラムを選択させ、最小権限違反判定結果を提示することができる。
【0039】
次に、ステップS15において処理開始を指示されたAPIサンプリング部110の処理内容を図16乃至図18を用いて説明する。APIサンプリング部110は、ユーザインタフェース部100から、検査対象プログラム300のファイル名を取得する(ステップS31)。そして、検査対象プログラム300が起動したか確認する(ステップS33)。起動していない場合には、起動するまで待機するか、APIサンプリング部110が強制的に起動するようにしても良い。
【0040】
検査対象プログラム300が起動している場合には、APIサンプリング部110は、権限要求APIサンプリングルール格納部131から権限要求APIサンプリングルールと、アクセス実行APIサンプリングルール格納部132からアクセス実行APIサンプリングルールと、ユーザ/グループ情報233と、特別権限情報232と、オブジェクト群パーミッション231とを取得する(ステップS35)。これによって、これから検査対象プログラム300が出力するAPI呼出のうちトレースログを生成すべきAPI呼出を抽出すると共に、そのAPI呼出のためのトレースログに記録すべきデータ項目のデータを取得できるようになる。
【0041】
そして、APIサンプリング部110は、検査対象プログラム300の処理が終了するか確認し(ステップS37)、処理が終了しない場合には、検査対象プログラム300からのAPI呼出に応じて、ステップS35で取得したデータを用いて権限要求APIトレースログ又は実アクセスAPIトレースログを生成し、権限要求APIトレースログ格納部133又は実アクセスAPIトレースログ格納部134に格納する(ステップS39)。そしてステップS37に戻る。
【0042】
例えば、権限要求APIの呼出があった場合には、図4の[TargetAPIs]において列挙されているAPIであるか確認する。そして、列挙されているAPIの1つである場合には、[TraceData]において列挙されているデータ項目を取得して権限要求APIトレースログ格納部133に格納する。トレース番号(TraceNO)について検出順にシリアルに番号を付与することによって取得する。例えば図17に示すようなデータが権限要求APIトレースログ格納部133に格納される。トレース番号「001」のトレースログは、図4の第1行目のサンプリングルールに従って登録されるデータである。トレース番号「002」のトレースログは、図4の第3行目のサンプリングルールに従って登録されるデータである。トレース番号「003」のトレースログは、図4の第4行目のサンプリングルールに従って登録されるデータである。
【0043】
また、アクセスAPIの呼出があった場合には、図6の[TargetAPIs]において列挙されているAPIであるか確認する。そして、列挙されるAPIの1つである場合には、[TraceData]において列挙されているデータ項目を取得して実アクセスAPIトレースログ格納部134に格納する。トレース番号(TraceNO)について検出順にシリアルに番号を付与することによって取得する。例えば図18に示すようなデータが実アクセスAPIトレースログ格納部134に格納される。トレース番号「001」のトレースログは、図6の第2行目のサンプリングルールに従って登録されるデータである。トレース番号「002」のトレースログは、図6の第5行目のサンプリングルールに従って登録されるデータである。トレース番号「003」のトレースログは、図6の第6行目のサンプリングルールに従って登録されるデータである。
【0044】
ステップS37で検査対象プログラム300の処理が終了した場合には、最小権限違反判定部120に解析開始を指示する(ステップS41)。最小権限違反判定部120の処理については以下詳細に説明する。そして、APIサンプリング部110の処理終了が指示されなければステップS31に戻り、終了が指示されると、処理を終了する。
【0045】
このように、権限要求APIトレースログ格納部133と実アクセスAPIトレースログ格納部134とに、検査対象プログラム300の実行中に出力されるAPIについてのトレースログが蓄積されるようになる。すなわち、検査対象プログラム300のソースプログラムや仕様書を解析する必要はなく、必要なデータが収集される。よって、ソースプログラムや仕様書が存在しない場合にも検査することができ、さらに人手による手間のかかる解析を不要となるので、作業負担も軽減される。
【0046】
次に、最小権限違反判定部120の処理内容について図19乃至図28を用いて説明する。
【0047】
まず、最小権限違反判定部120は、オブジェクトアクセスルール格納部135からオブジェクトアクセスルールを読み出す(ステップS51)。また、権限アクセスルール格納部136から特別権限アクセスルールを読み出す(ステップS53)。さらに、権限要求APIトレースログ格納部133から権限要求APIトレースログを読み出し、権限要求APIトレースログリストを生成して、例えばメインメモリなどの記憶装置に格納する(ステップS55)。例えば、図20に示すようなリストをトレースログ毎に有するリスト構造データを生成する。図20に示したリストにおいて「TraceNO」から「ObjectPermission」までについては、トレースログに含まれるデータそのままである。想定アクセスAPIへのポインタは、以下の処理でアドレスが登録されるまではNullポインタが登録される。権限要求APIと関連付けられる実アクセスAPIトレースログリストは複数の場合があるので、実アクセスAPIトレースログ・レコードへのポインタリストへのポインタが登録されるようになっている。関連付けられる実アクセスAPIトレースログリストが存在しない場合には、Nullポインタが登録される。次の権限要求APIリストへのポインタについては、次の権限要求APIリストがない場合、すなわち最後の権限要求APIリストの場合には、Nullポインタが登録される。
【0048】
さらに、最小権限違反判定部120は、実アクセスAPIトレースログ格納部134から実アクセスAPIトレースログを読み出し、実アクセスAPIトレースログリストを生成して、例えばメインメモリなどの記憶装置に格納する(ステップS57)。例えば、図21に示すようなリストをトレースログ毎に有するリスト構造データを生成する。図21に示したリストにおいて「TraceNO」から「ObjectPermission」までについては、トレースログに含まれるデータそのままである。次の実アクセスAPIトレースログリストへのポインタについては、次の実アクセスAPIトレースログリストが存在しない場合、すなわち最後の実アクセスAPIリストの場合には、Nullポインタが登録される。
【0049】
次に、最小権限違反判定部120は、権限要求APIトレースログリストから、先頭リストを読み出す(ステップS59)。さらに、AccessGroupというカウンタを「1」に初期化する(ステップS61)。
【0050】
そして、最小権限違反判定部120は、権限要求APIトレースログリストを読み出すことができたか判断する(ステップS63)。読み出すことができない場合には、端子Cを介して図24の処理に移行する。一方、読み出すことができた場合には、端子Dを介して図22の処理に移行する。
【0051】
次に、権限要求APIトレースログリストを読み出すことができた場合の処理について、図22及び図23を用いて説明する。まず、最小権限違反判定部120は、読み出した権限要求APIトレースログリストの権限要求API名を検索キーにしてオブジェクトアクセスルールを検索し、該当するオブジェクトアクセスルールの中で追加検索条件を満たすオブジェクトアクセスルールを特定する(ステップS65)。図8のようなオブジェクトアクセスルールの場合に、権限要求APIトレースログリストに含まれる権限要求API名が「errno_t_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode)」であれば、第1行目及び第2行目が特定される。このような場合には、今回の権限要求APIトレースログリストが、特定されたオブジェクトアクセスルールに追加検索条件として規定されている「oflag = _O_RDONLY」と「oflag = _0_RDWR」とのいずれが該当するか判断する。該当する方のオブジェクトアクセスルールが、今回用いられる。
【0052】
次に、最小権限違反判定部120は、特定されたオブジェクトアクセスルールに対応する想定アクセスAPI及び照合条件a及びbを特定する(ステップS67)。図8の第1行目が特定された場合には、想定アクセスAPI名「int _read( int fd, void *buffer, unsigned int count)」と、「Parameters.pfh=*」という権限要求APIについての照合条件aと、「Parameters.fd=*」という実アクセスAPIについての照合条件bとを特定する。
【0053】
さらに、最小権限違反判定部120は、権限要求APIトレースログリストに、想定アクセスAPIが登録されるリストへのポインタを追加する(ステップS69)。すなわち、図20の「想定アクセスAPIへのポインタ」に、想定アクセスAPIが登録されるリストへのポインタを登録する。また、権限要求APIトレースログリストへのポインタと想定アクセスAPIと権限要求APIトレースログリストにおける必要なデータとステップS67で特定された照合条件a及びbとを、想定アクセスAPIリストに登録する(ステップS71)。例えば図23のような想定アクセスAPIリストが想定アクセスAPI毎に生成される。図23の例において、「API」は想定アクセスAPI名であり、「Parameter」「UserAccount」「Group」「Privilege」「ObjectPath」及び「ObjectPermission」は権限要求APIトレースログリストにおける該当データであり、「照合条件a」及び「照合条件b」はステップS67で特定された照合条件a及びbであり、「権限要求APIへのポインタ」は権限要求APIトレースログリストへのポインタである。なお、「AccessGroup」については、本ステップではNullが設定される。また、実アクセスAPIトレースログへのポインタリストへのポインタについても、以下の処理で設定されるので、ここではNullポインタである。さらに、次の想定アクセスAPIリストへのポインタには、次に生成される想定アクセスAPIリストのアドレスが設定される。
【0054】
このように、1つの権限要求APIトレースログにつき1つの想定アクセスAPIリストを生成して、以下で述べる処理で実アクセスAPIトレースログとの対応関係を探索する。なお、想定アクセスAPIリストを、想定アクセスAPIリスト格納部137に格納する。
【0055】
そして、最小権限違反判定部120は、権限要求APIトレースログの特別権限は前のものとは変化したか判断する(ステップS73)。最初の権限要求APIトレースログの場合にも変化があったと判断する。なお、複数の特別権限が付与されている場合もあり、その場合には1つでも変化した場合には本ステップでは変化したと判断する。特別権限に変化がない場合にはステップS81に移行する。一方、特別権限に変化がある場合には、特別権限アクセスルールから、特別権限要求APIについての特別権限に対応する想定アクセスAPIを特定する(ステップS75)。図9の特別権限アクセスルールを特別権限で検索して、該当する想定アクセスAPIを特定する。複数の特別権限が設定されている場合には、複数の想定アクセスAPIを特定する。
【0056】
そして、最小権限違反判定部120は、ステップS75で特定された想定アクセスAPIと、権限要求APIトレースログリストにおける必要なデータとAccessGroupと権限要求APIトレースログリストへのポインタとを登録する(ステップS77)。図23に示したリスト構造に従ってデータを登録する。この図23の例では、「API」は想定アクセスAPI名であり、「Parameter」「UserAccount」「Group」「Privilege」「ObjectPath」及び「ObjectPermission」は権限要求APIトレースログリストにおける該当データであり、「照合条件a」及び「照合条件b」はNullであり、「権限要求APIへのポインタ」は権限要求APIトレースログリストへのポインタである。なお、「AccessGroup」については、現在のAccessGroupの数値が設定される。また、実アクセスAPIトレースログへのポインタリストへのポインタについても、以下の処理で設定されるので、ここではNullポインタである。さらに、次の想定アクセスAPIリストへのポインタには、次に生成される想定アクセスAPIリストのアドレスが設定される。このような処理を実施することによって、不必要な特別権限が設定されているか否かを判断するための想定アクセスAPIのリストが生成された。
【0057】
その後、AccessGroupを1インクリメントする(ステップS79)。その後ステップS81に移行する。
【0058】
ステップS73で特別権限が変化していない場合又はステップS79の後に、最小権限違反判定部120は、要求権限APIトレースログの次のリストを読み出す(ステップS81)。その後処理は端子Eを介してステップS63に戻る。
【0059】
以上のような処理を実施することによって、不要な権限要求がなされていたり、不要な特別権限が付与されているといった最小権限違反が発生しているか否かを確認するための想定アクセスAPIリストが生成されたことになる。
【0060】
図24の処理の説明に移行して、最小権限違反判定部120は、実アクセスAPIトレースログの最初のリストを読み出す(ステップS83)。そして、実アクセスAPIトレースログを読み出すことができたか判断する(ステップS85)。実アクセスAPIトレースログリストを読み出すことができなかった場合には、端子Fを介して図27の処理に移行する。実アクセスAPIトレースログリストを読み出すことができた場合には、想定アクセスAPIリストの先頭リストを読み出す(ステップS87)。さらに、想定アクセスAPIリストを読み出すことができたか判断する(ステップS89)。想定アクセスAPIリストを読み出すことができなかった場合には端子Gを介してステップS95に移行する。そうすると、実アクセスAPIトレースログリストにおける次のリストを読み出す(ステップS95)。そしてステップS85に移行する。
【0061】
ステップS89で想定アクセスAPIリストを読み出すことができたと判断された場合には、読み出された想定アクセスAPIのAPI名及びアクセス対象オブジェクトパスが実アクセスAPIトレースログのAPI名及びアクセス対象オブジェクトパスと等しいか判断する(ステップS91)。これが想定アクセスAPIと実アクセスAPIとを対応付ける第1の条件である。この条件を満たしていない場合には、端子Iを介して図25のステップS105に移行する。この条件を満たしている場合には、実アクセスAPIトレースログの呼出日時(Time)が、想定アクセスAPIの元となる権限要求APIの呼出日時(Time)以降であり、且つ想定アクセスAPIについて特定されている権限要求APIの照合条件aと実アクセスAPIトレースログの照合条件bとが一致するか判断する(ステップS93)。これが想定アクセスAPIと実アクセスAPIとを対応付ける第2の条件である。
【0062】
実アクセスAPIトレースログの呼出日時は、対応する権限要求APIの呼出日時以降でなければあり得ないので、この条件が第2の条件の前半の部分に設定されている。但し、権限要求APIの呼出日時から一定時間内であるかを確認するようにしても良い。
【0063】
さらに、上で特定された照合条件aは、「Parameters.pfh=*」であり、照合条件bは、「Parameters.fd=*」である。この場合、照合条件aとしては、想定アクセスAPIの元となる権限要求APIのトレースログリストにおけるParameterにおけるpfhの値が特定される。また、照合条件bとしては、実アクセスAPIリストにおけるParameterにおけるfdの値が特定される。そして、pfhの値とfdの値が一致するか判断される。
【0064】
このような第2の条件を満たしていない場合には、端子Iを介して図25のステップS105に移行する。一方、第2の条件を満たしている場合には、端子Hを介して図25のステップS97に移行する。
【0065】
図25の処理の説明に移行して、最小権限違反判定部120は、想定アクセスAPIの該当リスト(具体的には、「実アクセスAPIトレースログへのポインタリスト」)に、実アクセスAPIトレースログリストへのポインタを追加する(ステップS97)。また、想定アクセスAPIの該当リストの元となる権限要求APIトレースログリスト(具体的には、「実アクセスAPIトレースログへのポインタリスト」)に、実アクセスAPIトレースログリストへのポインタを追加する(ステップS99)。このようなポインタの設定によって、権限要求APIトレースログに係る想定アクセスAPIが実アクセスAPIトレースログと対応付けられたことが、データ上登録されたことになる。
【0066】
その後、最小権限違反判定部120は、実アクセスAPIトレースログと想定アクセスAPIのUserAccount、Group、Privilege、ObjectPath、ObjectPermissionが全て等しいか判断する(ステップS101)。想定アクセスAPIと実アクセスAPIトレースログとが対応付けられたとしても、このような条件を満たさない場合には権限要求と実アクセスに齟齬があることになるので、最小権限違反リストに実アクセスAPIトレースログリストのデータを登録する(ステップS103)。図26に最小権限違反リストの一例を示す。図26は、1件の実アクセスAPIトレースログリストについての最小権限違反リストであり、「API」から「ObjectPermission」までのデータは、実アクセスAPIトレースログリストのデータをコピーする。「次の最小権限違反リストへのポインタ」には、次の最小権限違反リストのアドレスが登録されるが、最後の場合にはNullポインタが登録される。ステップS103の後にステップS105に移行する。
【0067】
ステップS101の条件が満たされている場合又はステップS103の後に、最小権限違反判定部120は、想定アクセスAPIリストにおける次のリストを読み出す(ステップS105)。処理は端子Jを介してステップS89に戻る。
【0068】
図27の処理の説明に移行して、最小権限違反判定部120は、権限要求APIトレースログリストの先頭リストを読み出す(ステップS107)。そして、権限要求APIトレースログリストを読み出すことができたか判断する(ステップS109)。権限要求APIトレースログリストを読み出すことができない場合には端子Kを介して図28の処理に移行する。一方、権限要求APIトレースログリストを読み出すことができた場合には、権限要求APIトレースログリストに実アクセスAPIトレースログリストへのポインタが含まれているか判断する(ステップS111)。すなわち、権限要求APIトレースログに対応する実アクセスAPIトレースログが存在するか判断する。この条件を満たす場合には、適切な権限要求API呼出が行われたことになるので処理はステップS115に移行する。一方、この条件を満たさない場合には、実アクセスを伴わない権限要求API呼出であったことになるので、最小権限違反リストに、本権限要求APIトレースログリストのデータを登録する(ステップS113)。
【0069】
そして、最小権限違反判定部120は、権限要求APIトレースログリストにおける次のリストを読み出す(ステップS115)。そしてステップS109に戻る。
【0070】
図28の処理の説明に移行して、最小権限違反判定部120は、想定アクセスAPIリストの先頭リストを読み出す(ステップS117)。そして、想定アクセスAPIリストを読み出すことができたか判断する(ステップS119)。想定アクセスAPIリストを読み出すことができた場合には、想定アクセスAPIリスト全体から、処理に係る想定アクセスAPIリストのAccessGroupと同一AccessGroupについての想定アクセスAPIリストを読み出す(ステップS121)。AccessGroupを含む想定アクセスAPIリストは、ステップS77でのみ設定されるので、同じタイミングで生成された想定アクセスAPIリストが抽出される。それ以外の想定アクセスAPIリストについては1つの想定アクセスAPIリストが特定される。
【0071】
そして、最小権限違反判定部120は、同一AccessGroupについての想定アクセスAPIリストのうち、実アクセスAPIトレースログリストへのポインタ(実際には、「実アクセスAPIトレースログへのポインタリストへのポインタ」)が登録されたものがあるか判断する(ステップS123)。本条件を満たしている場合、すなわち想定アクセスAPIリストと実アクセスAPIトレースログリストとの対応付けがなされている場合には、適切な想定アクセスAPIリストが生成されていることになるので、ステップS127に移行する。一方、上記条件を満たしていない場合、すなわち想定アクセスAPIリストと実アクセスAPIトレースログリストとの対応付けがなされていない場合には、最小権限違反リストに、本想定アクセスAPIリストの元となる権限要求APIトレースログリストのデータを登録する(ステップS125)。
【0072】
ステップS125の後又はステップS123で条件を満たすと判断された場合、最小権限違反判定部120は、想定アクセスAPIリストにおける次のリストを読み出す(ステップS127)。そしてステップS119に戻る。
【0073】
このように最小権限違反であるか否かについては、図27の処理フローと図28の処理フローとの2段階で行うようになっている。図28の処理フローは、主に、特別権限の変化に応じ、AccessGroupに関連して生成される想定アクセスAPIリストについての処理であるが、基本的には図28の処理フローだけでも、問題となる権限要求APIトレースログを抽出することはできる。
【0074】
ステップS119で全ての想定アクセスAPIリストを処理したと判断された場合には、最小権限違反判定部120は、最小権限違反リストのリスト数をカウントし、判定結果格納部138に格納する(ステップS129)。また、最小権限違反リストのデータ及び関連データを、判定結果格納部138に格納する(ステップS131)。関連データには、例えば、権限要求APIトレースログ格納部133の最初のトレースログの呼出日時(Time)と最後のトレースログの呼出日時(Time)とを読み出し、さらに、実アクセスAPIトレースログ格納部134の最初のトレースログの呼出日時(Time)と最後のトレースログの呼出日時(Time)とを読み出し、起動時間(最も早い呼出時刻)及び終了時間(最も遅い呼出時刻)を特定する。さらに、検査対象プログラム名、ユーザ名、所属グループ名などについても、権限要求APIトレースログ格納部133及び実アクセスAPIトレースログ格納部134から読み出し、判定結果格納部138に格納する。
【0075】
以上で最小権限違反判定部120の処理を終了する。このような処理を実施すれば、判定結果格納部138に格納されているデータを用いて、ユーザインタフェース部100は、判定結果を表示させることができるようになる。
【0076】
以上のような処理を実施すれば、最小権限違反を、ソースプログラムや仕様書を参照することなく、検査対象プログラムを実実行環境又はそれに近い環境で実行するだけで判定することができる。また、最小権限違反リストのデータを解析すれば、どのような状況で最小権限違反が発生しているかを特定できるので、修正が効率的実施することができるようになる。
【0077】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。具体的には、図2の機能ブロック構成は一例であって、必ずしも実際のプログラムモジュール構成と一致するわけではない。特に、検査対象プログラム300が実行されるコンピュータシステムと、ユーザインタフェース部100及び最小権限違反判定部120が実施されるコンピュータシステムとは別の場合もある。さらに、ユーザインタフェース部100のみクライアント端末に設けられ、他の要素が1又は複数のコンピュータに設けられる場合もある。
【0078】
また、処理フローについても処理結果が変わらなければ、同時実行させたり実行順序を変えても良いステップも存在する。データ構造についても、同様の結果を得られるのであれば、図示したようなデータ構造でなくともよい。
【0079】
以上本実施の形態をまとめると以下のようになる。
【0080】
第1の態様に係る最小権限違反検出方法は、検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に検査対象プログラムから出力されることが想定されている想定アクセスAPIを権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、想定アクセスAPIデータ格納部において、権限要求APIトレースログ格納部に格納されている権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、所定の条件を満たす想定アクセスAPIが検出された場合には、当該想定アクセスAPIのデータに対応付けて実アクセスAPIのデータを想定アクセスAPIトレースログ格納部に格納する実アクセスAPI探索ステップと、想定アクセスAPIトレースログ格納部において実アクセスAPIのデータが対応付けられていない想定アクセスAPIを探索して、検出された想定アクセスAPIに想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップとを含む。
【0081】
このように想定アクセスAPIのデータを生成して実アクセスAPIのデータと対応付けできるか否かを判断することによって、最小権限違反を、ソースプログラムや仕様書を解析することなく実実行環境等に従って判断することができるようになる。
【0082】
また、上で述べた実アクセスAPI探索ステップが、所定の条件を満たす想定アクセスAPIが抽出された場合には、想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている権限要求APIに対応付けて、該当する実アクセスAPIのデータを、権限要求APIトレースログ格納部に格納するステップを含むようにしてもよい。そして、第1の態様に係る最小権限違反判定方法が、権限要求APIトレースログ格納部において実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、最小権限違反データ格納部に格納するステップをさらに含むようにしても良い。より漏れなく最小権限違反を検出することができるようになる。
【0083】
また、上で述べた実アクセスAPI探索ステップが、所定の条件を満たす想定アクセスAPIが抽出された場合には、実アクセスAPIと想定アクセスAPIとが実質的に同一であること(すなわち齟齬がないこと)を表す第2の所定の条件を該当する実アクセスAPI及び想定アクセスAPIが満たすか判断するステップと、第2の所定の条件を満たさないと判断された実アクセスAPIのデータを、最小権限違反データ格納部に格納するステップとを含むようにしてもよい。適切でない実アクセスAPI呼出が行われていることを検出することができる。
【0084】
さらに、上で述べた想定アクセスAPI生成ステップが、権限要求APIトレースログ格納部に格納されている特定の権限要求APIのデータに含まれる特別権限グループが当該特定の権限要求APIのデータより1つ前の第2の権限要求APIのデータに含まれる特別権限グループと相違する場合に、特別権限に応じて出力されると想定される想定アクセスAPIを規定している権限アクセスルールを格納する権限アクセスルール格納部から、前記特定の権限要求APIのデータに含まれる特別権限グループに対応する想定アクセスAPIを抽出し、当該想定アクセスAPIのデータをグループ化して前記想定アクセスAPI格納部に格納するステップを含むようにしてもよい。さらに、上で述べた最小権限違反検出ステップが、想定アクセスAPIトレースログ格納部において同一グループの想定アクセスAPIについていずれも実アクセスAPIのデータが対応付けられていない場合に、当該同一グループの想定アクセスAPIに想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納するステップを含むようにしてもよい。このようにすれば、不適切な特別権限を設定している場合には検出することができるようになる。
【0085】
第2の形態に係る最小権限違反検出方法は、検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に検査対象プログラムから出力されることが想定されている想定アクセスAPIを権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、想定アクセスAPIデータ格納部において、権限要求APIトレースログ格納部に格納されている権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、所定の条件を満たす想定アクセスAPIが検出された場合には、想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている権限要求APIに対応付けて、該当する実アクセスAPIのデータを、権限要求APIトレースログ格納部に格納するステップと、権限要求APIトレースログ格納部において実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、最小権限違反データ格納部に格納するステップとを含む。
【0086】
このように実アクセスAPIと想定アクセスAPIとの対応付けから、元となる権限要求APIと実アクセスAPIとの対応付けを行えば、対応付けのない権限要求APIを探索することによって、最小権限違反を検出することができるようになる。
【0087】
なお、上記最小権限違反検出方法をコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等の記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【0088】
なお、例えば図2に示すコンピュータシステムは、コンピュータ装置であって、図29に示すように、メモリ2501とCPU2503とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納される。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【0089】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0090】
(付記1)
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、当該想定アクセスAPIのデータに対応付けて前記実アクセスAPIのデータを前記想定アクセスAPIトレースログ格納部に格納する実アクセスAPI探索ステップと、
前記想定アクセスAPIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない想定アクセスAPIを探索して、検出された想定アクセスAPIに前記想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップと、
を、コンピュータに実行させるためのプログラム。
【0091】
(付記2)
前記実アクセスAPI探索ステップが、
前記所定の条件を満たす前記想定アクセスAPIが抽出された場合には、前記想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている前記権限要求APIに対応付けて、該当する前記実アクセスAPIのデータを、前記権限要求APIトレースログ格納部に格納するステップ
を含み、
さらに、
前記権限要求APIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、前記最小権限違反データ格納部に格納するステップ
を、前記コンピュータに実行させるための付記1記載のプログラム。
【0092】
(付記3)
前記実アクセスAPI探索ステップが、
前記所定の条件を満たす前記想定アクセスAPIが抽出された場合には、前記実アクセスAPIと前記想定アクセスAPIとが実質的に同一であることを表す第2の所定の条件を該当する前記実アクセスAPI及び前記想定アクセスAPIが満たすか判断するステップと、
前記第2の所定の条件を満たさないと判断された前記実アクセスAPIのデータを、前記最小権限違反データ格納部に格納するステップと、
を含む付記1又は2記載のプログラム。
【0093】
(付記4)
前記想定アクセスAPI生成ステップが、
前記権限要求APIトレースログ格納部に格納されている特定の権限要求APIのデータに含まれる特別権限グループが当該特定の権限要求APIのデータより1つ前の第2の権限要求APIのデータに含まれる特別権限グループと相違する場合に、特別権限に応じて出力されると想定される想定アクセスAPIを規定している権限アクセスルールを格納する権限アクセスルール格納部から、前記特定の権限要求APIのデータに含まれる特別権限グループに対応する想定アクセスAPIを抽出し、当該想定アクセスAPIのデータをグループ化して前記想定アクセスAPI格納部に格納するステップ
を含み、
前記最小権限違反検出ステップが、
前記想定アクセスAPIトレースログ格納部において同一グループの想定アクセスAPIについていずれも実アクセスAPIのデータが対応付けられていない場合に、当該同一グループの想定アクセスAPIに前記想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納するステップ
を含む、付記1乃至3のいずれか1つ記載のプログラム。
【0094】
(付記5)
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、前記想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている前記権限要求APIに対応付けて、該当する前記実アクセスAPIのデータを、前記権限要求APIトレースログ格納部に格納するステップと、
前記権限要求APIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、前記最小権限違反データ格納部に格納するステップと、
を、コンピュータに実行させるためのプログラム。
【0095】
(付記6)
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、当該想定アクセスAPIのデータに対応付けて前記実アクセスAPIのデータを前記想定アクセスAPIトレースログ格納部に格納する実アクセスAPI探索ステップと、
前記想定アクセスAPIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない想定アクセスAPIを探索して、検出された想定アクセスAPIに前記想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップと、
を含み、コンピュータに実行される最小権限違反検出方法。
【0096】
(付記7)
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、前記想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている前記権限要求APIに対応付けて、該当する前記実アクセスAPIのデータを、前記権限要求APIトレースログ格納部に格納するステップと、
前記権限要求APIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、前記最小権限違反データ格納部に格納するステップ
を含み、コンピュータに実行される最小権限違反検出方法。
【0097】
(付記8)
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成手段と、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、当該想定アクセスAPIのデータに対応付けて前記実アクセスAPIのデータを前記想定アクセスAPIトレースログ格納部に格納する実アクセスAPI探索手段と、
前記想定アクセスAPIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない想定アクセスAPIを探索して、検出された想定アクセスAPIに前記想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納する最小権限違反検出手段と、
を有する最小権限違反検出装置。
【0098】
(付記9)
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成手段と、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、前記想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている前記権限要求APIに対応付けて、該当する前記実アクセスAPIのデータを、前記権限要求APIトレースログ格納部に格納する手段と、
前記権限要求APIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、前記最小権限違反データ格納部に格納する手段と、
を有する最小権限違反検出装置。
【符号の説明】
【0099】
100 ユーザインタフェース部 110 APIサンプリング部
131 権限要求APIサンプリングルール格納部
132 アクセス実行APIサンプリングルール格納部
133 権限要求APIトレースログ格納部
134 実アクセスAPIトレースログ格納部
135 オブジェクトアクセスルール格納部
136 権限アクセスルール格納部
137 想定アクセスAPIリスト格納部
138 判定結果格納部
【技術分野】
【0001】
本技術は、プログラムの動作に不要な権限の要求や使用を検出するための技術に関する。
【背景技術】
【0002】
顧客の要求仕様に従ったプログラムを作成する際には、最小権限違反とならないようにする必要がある。すなわち、(1)なくても動作する権限をプログラムが持たない、(2)なくても動作する権限をプログラムが要求しない、(3)なくても動作するパーミッションをプログラムがオブジェクトに設定しない、ということが必要である。最小権限違反となるようなプログラムを作成してしまうと、(a)不要に高い権限を有するプログラムが乗っ取られて、システム全体が乗っ取られるなど深刻な被害が発生するおそれがあり、(b)システムに何らかのセキュリティ上の問題が発生すると、高い権限を有するプログラムが疑われ、検証などに手間がかかる、(c)不要に高いパーミッション/アクセス許可を有するオブジェクトがねらわれ、情報漏洩などの深刻な被害が発生するおそれがある。
【0003】
最小権限違反の具体例としては以下のようなものがある。
(1)プログラムの仕様上、最低限必要な権限、パーミッション/アクセス許可を有するユーザ/グループよりも高い権限、パーミッション/アクセス許可を有するユーザ/グループでプログラムが実行されている。
[例1]目的のファイルへのアクセスは一般ユーザで可能であるのに,管理者「Administrator」で実行している。
[例2]シャットダウンAPI(Application Program Interface)を呼ぶことはないのに、特別権限SE_SHUTDOWN_NAME(シャットダウン権限)を有するユーザ/グループで実行している。
(2)プログラムの仕様上、最低限必要な一般権限/特権以上の権限/特権を要求している。
[例1]ファイルを参照するAPIを呼んでいるだけなのに、API OpenFile()で書き込み権を要求している。
[例2]ファイルのバックアップを行っていないのに、API AdjustTokenPrivileges()でSE_BACKUP_NAME(バックアップ権限)を要求している。
(3)不正なパーミッション/アクセス許可を持つオブジェクトを生成する。
[例]誤ってNULL DACL(アクセス許可未設定、すなわちeveryoneフルコントールが設定されているのと同等)のオブジェクトを生成している。
【0004】
このような問題が生ずるので、最小権限違反とならないようにプログラムを作成する必要があるが、開発者はアクセスコントロールの仕様を十分に理解せず、プログラムに高い権限を与えてしまったり、不正なパーミッション/アクセス許可を有するオブジェクトを作成するようにしてしまうことがある。
【0005】
上で述べたような問題に対して従来技術では、ソースプログラムを解析して問題を検出するような手法が存在している。しかしながら、ソースプログラムや仕様書を解析することができない場合がある。さらに、必要な権限は実行環境(OS(Operating System)、セキュリティポリシー、ネットワーク)に依存するが、単にソースプログラムや仕様書を解析するだけでは、実行環境に応じた最小権限違反を検出することはできない。なお、アクセス制御のための技術は多数存在しているが、最小権限違反を検出できるわけではない。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2003−186708号公報
【特許文献2】特開2007−226495号公報
【特許文献3】特開2008−117026号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
以上のように、従来技術では、ソースプログラムや仕様書を用いることなく検査対象プログラムについて、最小権限違反が存在するか否かを判断することはできない。
【0008】
従って、本技術の目的は、検査対象プログラムを実際に実行させて最小権限違反を検出する技術を提供することである。
【課題を解決するための手段】
【0009】
第1の態様に係る最小権限違反検出方法は、検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に検査対象プログラムから出力されることが想定されている想定アクセスAPIを権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、想定アクセスAPIデータ格納部において、権限要求APIトレースログ格納部に格納されている権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、上記所定の条件を満たす想定アクセスAPIが検出された場合には、当該想定アクセスAPIのデータに対応付けて実アクセスAPIのデータを想定アクセスAPIトレースログ格納部に格納する実アクセスAPI探索ステップと、想定アクセスAPIトレースログ格納部において実アクセスAPIのデータが対応付けられていない想定アクセスAPIを探索して、検出された想定アクセスAPIに想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップとを含む。
【0010】
第2の形態に係る最小権限違反検出方法は、検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に検査対象プログラムから出力されることが想定されている想定アクセスAPIを権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、想定アクセスAPIデータ格納部において、権限要求APIトレースログ格納部に格納されている権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、所定の条件を満たす想定アクセスAPIが検出された場合には、想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている権限要求APIに対応付けて、該当する実アクセスAPIのデータを、権限要求APIトレースログ格納部に格納するステップと、権限要求APIトレースログ格納部において実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、最小権限違反データ格納部に格納するステップとを含む。
【発明の効果】
【0011】
検査対象プログラムを実際に実行させれば、最小権限違反を検出できるようになる。
【図面の簡単な説明】
【0012】
【図1】権限要求と実際のアクセスについての関係を説明するための図である。
【図2】本技術の実施の形態についてのシステム概要図である。
【図3】権限要求APIサンプリングルールの書式の一例を示す図である。
【図4】権限要求APIサンプリングルールの具体例を示す図である。
【図5】アクセス実行APIサンプリングルールの書式の一例を示す図である。
【図6】アクセス実行APIサンプリングルールの具体例を示す図である。
【図7】オブジェクトアクセスルールの書式の一例を示す図である。
【図8】オブジェクトアクセスルールの具体例を示す図である。
【図9】特別権限アクセスルールの一例を示す図である。
【図10】特別権限の一例を示す図である。
【図11】ユーザインタフェース部の処理フローを示す図である。
【図12】検査対象プログラムの指定画面の一例を示す図である。
【図13】ユーザインタフェース部の処理フローを示す図である。
【図14】検査結果確認画面の一例を示す図である。
【図15】検査結果表示画面の一例を示す図である。
【図16】APIサンプリング部の処理フローを示す図である。
【図17】権限要求APIトレースログの具体例を示す図である。
【図18】アクセス実行APIトレースログの具体例を示す図である。
【図19】最小権限違反判定部の処理フローを示す図である。
【図20】権限要求APIトレースログリストの構造例を示す図である。
【図21】実アクセスAPIトレースログリストの構造例を示す図である。
【図22】最小権限違反判定部の処理フローを示す図である。
【図23】想定アクセスAPIリストの構造例である。
【図24】最小権限違反判定部の処理フローを示す図である。
【図25】最小権限違反判定部の処理フローを示す図である。
【図26】最小権限違反リストの構造例を示す図である。
【図27】最小権限違反判定部の処理フローを示す図である。
【図28】最小権限違反判定部の処理フローを示す図である。
【図29】コンピュータの機能ブロック図である。
【発明を実施するための形態】
【0013】
[実施の形態の前提及び概要]
図1に、検査対象プログラムがオブジェクトの1つであるファイルA(FileA)にアクセスする際の処理内容を示す。
【0014】
まず、検査対象プログラム1001は、アクセス権限要求として、FileAのopen(R/W)(Read及びWrite)の権限要求をOSのアクセスコントロール部1003に出力する(ステップ(1))。アクセスコントロール部1003は、FileAのopen(R/W)の権限要求に応じて、検査対象プログラム1001についての実行ユーザの権限情報1009を参照して、検査対象プログラム1001を実行しているユーザ(すなわちFileAのopen(R/W)を出力させたユーザ)の権限を確認する(ステップ(2))。その後、アクセスコントロール部1003は、FileAについて予め設定されているパーミッション1007を参照して、実行ユーザのアクセス(ここではRead及びWrite)が許可されているか判断する(ステップ(3))。ここで実行ユーザのRead及びWriteアクセスが許可されている場合には、アクセスコントロール部1003は、検査対象プログラム1001にアクセス権限許可を返す(ステップ(4))。
【0015】
ここでは、検査対象プログラム1001は、FileAのReadアクセスを要求する(ステップ(5))。アクセスコントロール部1003は、FileAのReadアクセスに応じて、オブジェクト群に含まれるFileAのReadアクセスを実行する(ステップ(6))。
【0016】
この例では、最終的にFileAのReadアクセスしか実行しないのに、権限要求としては、FileAのRead及びWriteアクセスを要求している。すなわち、この例ではFileAのOpen(R)で十分なのに、FileAのOpen(R/W)を要求しているので、権限要求に最小権限違反があることが分かる。
【0017】
このように、権限要求から想定されるアクセスと、実際のアクセスとに齟齬がある否かを確認すれば、権限要求に最小権限違反があるか否かを判断することができる。
【0018】
本実施の形態では、権限要求APIの呼出とオブジェクトに対する実際のアクセスAPI(実アクセスAPIと呼ぶ)の呼出とをトレースする。そして、権限要求APIのトレースログから想定されるアクセスAPI(想定アクセスAPI)の呼出を導出して、実アクセスAPIの呼出と対応付けられるかを確認する。想定アクセスAPIについて実アクセスAPIが適切に対応付けられない場合には、最小権限違反と判断する。
【0019】
なお、図1では、プログラムの仕様上、最低限必要な一般権限/特権を超える権限/特権を要求している場合を示しているが、他の最小権限違反についても、基本的には同様の考え方で検出することができる。
【0020】
[本実施の形態の具体的内容]
図2に、本実施の形態に係るシステム概要を示す。オペレーティングシステム(OS)200は、従来のものと同じであって、各種プログラムからのAPI呼出に対して処理を行うAPI群210と、ファイル、ディレクトリ、パイプ、プロセス/スレッド、アクセストークン、レジストリ、サービス、プリンタ、イベント、セマフォ、ミューテックス、タイマ、ジョブなどのオブジェクト群220と、オブジェクト群220についてのパーミッションの設定データであるオブジェクト群パーミッション231と、プログラムを実行させているユーザ/グループの情報であるユーザ/グループ情報233と、ユーザ/グループに設定されている特別権限情報232とを含む。検査対象プログラム300は、OS200のAPI群210に対して必要なAPI呼出を行って、その結果を受け取るようになっている。
【0021】
本実施の形態では、最小権限違反を検出するため、ユーザインタフェース部100と、APIサンプリング部110と、APIサンプリング部110の処理のための権限要求APIサンプリングルールを格納する権限要求APIサンプリングルール格納部131と、APIサンプリング部110の処理のためのアクセス実行APIサンプリングルールを格納するアクセス実行APIサンプリングルール格納部132と、APIサンプリング部110の処理結果である権限要求APIトレースログを格納する権限要求APIトレースログ格納部133と、APIサンプリング部110の処理結果である実アクセスAPIトレースログを格納する実アクセスAPIトレースログ格納部134と、権限要求APIに対応するアクセスAPIなどを含むオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部135と、特別権限に対応して想定アクセスAPIなどを含む特別権限アクセスルールを格納する権限アクセスルール格納部136と、権限要求APIトレースログ格納部133と実アクセスAPIトレースログ格納部134とオブジェクトアクセスルール格納部135と権限アクセスルール格納部136とに格納されているデータを用いて想定アクセスAPIのデータを生成すると共に最小権限違反の判定を行う最小権限違反判定部120と、最小権限違反判定部120によって生成された想定アクセスAPIリストを格納する想定アクセスAPIリスト格納部137と、最小権限違反判定部120の判定結果を格納する判定結果格納部138とを有するコンピュータシステムが用いられる。
【0022】
ユーザインタフェース部100は、ユーザによる検査対象プログラム300の指定を受け付け、APIサンプリング部110に指示する。また、APIサンプリング部110は、検査対象プログラム300によるOS200のAPI呼出をトレースして、トレースが終了すると最小権限違反判定部120に処理を指示する。また、ユーザインタフェース部100は、判定結果格納部138に格納されている判定結果のデータを読み出して、ユーザに提示するようになっている。
【0023】
権限要求APIサンプリングルール格納部131に格納される権限要求APIサンプリングルールの書式の一例を図3に示す。図3に示すように、本ルールは、サンプリング対象APIの要求権限名(すなわちAPI名)が列挙される部分と、各要求権限APIについて記録すべきデータ項目が列挙される部分とを含む。記録すべきデータ項目は、例えば検出された権限要求APIの検出順番を表すシリアル番号であるトレース番号(TraceNO)と、API名(API)と、引数(Parameters)と、呼出元のプロセスIDである自プロセスID(OwnProcessID)と、呼出元のスレッドのIDであるスレッドID(OwnThreadID)と、本API呼出が行われた日時であるAPI呼出日時(Time)と、現在検査対象プログラム300を実行させているユーザの実行アカウント(UserAccount)と、実行ユーザの所属グループ(Group)と、実行ユーザの特別権限(Privilege)と、アクセス対象オブジェクトのパス(ObjectPath)と、オブジェクトのパーミッション(ObjectPermission)とが含まれる。API名(API)と、引数(Parameter)と、自プロセスID(OwnProcessID)と、スレッドID(OwnThreadID)と、アクセス対象オブジェクトパス(ObjectPath)については、権限要求APIの呼出自身から取得する。また、API呼出日時(Time)についてはOS200の時計から取得する。実行アカウント(UserAccount)と実行ユーザの所属グループ(Group)とについては、ユーザ/グループ情報233から取得する。特別権限(Privilege)については特別権限情報232から取得する。オブジェクトのパーミッション(ObjectPermission)については、オブジェクト群パーミッション231から取得する。
【0024】
図4に、権限要求APIサンプリングルールの具体例を示す。ここでは4つの権限要求APIが列挙されている。以下では、わかりやすいファイルのオープンを要求する権限要求APIである第1行目の「errno_t_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode)」を主に説明する。
【0025】
図5に、アクセス実行APIサンプリングルール格納部132に格納されるアクセス実行APIサンプリングルールの書式の一例を示す。図5に示すように、本ルールは、サンプリング対象APIの名称(オブジェクトアクセス名)が列挙される部分と、各オブジェクトアクセスについて記録すべきデータ項目が列挙される部分とを含む。
【0026】
記録すべきデータ項目は、例えば検出された権限要求APIの検出順番を表すシリアル番号であるトレース番号(TraceNO)と、API名(API)と、引数(Parameters)と、呼出元のプロセスの親プロセスのIDである親プロセスID(ParentProcessID)と、呼出元のプロセスIDである自プロセスID(OwnProcessID)と、呼出元のスレッドのIDであるスレッドID(OwnThreadID)と、本API呼出が行われた日時であるAPI呼出日時(Time)と、現在検査対象プログラム300を実行させているユーザの実行アカウント(UserAccount)と、実行ユーザの所属グループ(Group)と、実行ユーザの特別権限(Privilege)と、アクセス対象オブジェクトのパス(ObjectPath)と、オブジェクトのパーミッション(ObjectPermission)とが含まれる。API名(API)と、引数(Parameter)と、親プロセスID(ParentProcessID)と、自プロセスID(OwnProcessID)と、スレッドID(OwnThreadID)と、アクセス対象オブジェクトパス(ObjectPath)については、権限要求APIの呼出自身から取得する。また、API呼出日時(Time)についてはOS200の時計から取得する。実行アカウント(UserAccount)と実行ユーザの所属グループ(Group)とについては、ユーザ/グループ情報233から取得する。特別権限(Privilege)については特別権限情報232から取得する。オブジェクトのパーミッション(ObjectPermission)については、オブジェクト群パーミッション231から取得する。
【0027】
図6に、アクセス実行APIサンプリングルールの具体例を示す。ここでは6つのアクセスAPIが列挙されている。権限要求API「errno_t_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode)」に対応して出力されるアクセスAPIは、「int _read(int fd, void *buffer, unsigned int count)」又は「int _write(int fd, const void *buffer, unsigned int count)」である。
【0028】
図7に、オブジェクトアクセスルール格納部135に格納されるオブジェクトアクセスルールの書式の一例を示す。図7の例では、各行が1つのオブジェクトアクセスルールを表しており、1つのオブジェクトアクセスルールは、検索キーとなる要求権限名と、本ルールを適用すべきか否かを判断するために用いられる追加検索条件と、想定アクセスAPIと実アクセスAPIとを対応付ける際の条件となる要求権限名についての照合条件aと、想定アクセスAPIとして抽出されるオブジェクトアクセス名と、想定アクセスAPIと実アクセスAPIとを対応付ける際の条件となる実アクセスAPIについての照合条件bとを含む。
【0029】
図8に、オブジェクトアクセスルールの具体例を示す。図8の例では4つのルールが示されているが、第1行目と第2行目は同じ権限要求API「errno_t_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode)」についてのルールである。但し、追加検索条件が異なる。すなわち、第1行目ではoflag = _O_RDONLYというReadのみの場合という追加検索条件が設定されており、第2行目ではoflag = _O_RDWRというようにReadとWriteのいずれもという追加検索条件が設定されている。権限要求APIについての照合条件aは第1行目及び第2行目共に「Parameters.pfh=*」である。そして、第1行目では、権限要求APIに対応する想定アクセスAPIがReadを表す「int _read( int fd, void *buffer, unsigned int count)」となり、第2行目では、権限要求APIに対応する想定アクセスAPIがWriteを表す「int _write(int fd, const void *buffer, unsigned int count)」となる。第2行目では、権限要求APIからするとReadという想定アクセスAPIでもよいのだが、Readであるならば第1行目の権限要求APIでもよいので、Writeについての想定アクセスAPIが対応付けられている。他のルールについては、追加検索条件が設定されない場合もある。照合条件a及びbの使用方法については、処理フローの説明と共に説明する。
【0030】
図9に、権限アクセスルール格納部136に格納される特別権限アクセスルールの一例を示す。図9の例では、各特別権限について、対応する想定アクセスAPIが列挙されるようになっている。
【0031】
特別権限には、例えば図10に示すようなものがある。実行ユーザには、複数の特別権限が付与される場合があり、その場合には、図9において対応する想定アクセスAPIが複数抽出されることになる。
【0032】
次に、図11乃至図28を用いて図2に示したシステムの処理内容を説明する。最初に、ユーザインタフェース部100の処理内容について説明する。ユーザインタフェース部100は、表示装置にメインメニューを表示する(ステップS1)。本実施の形態では、検査対象プログラムの指定と、検査結果確認と、処理の終了とのいずれかが選択可能なものとする。これによってユーザにメニュー項目の選択を促す。そして、ユーザは、メニュー項目の選択を行って、ユーザインタフェース部100は、ユーザからの選択指示を受け付ける(ステップS3)。ここで、ユーザからの選択指示が、検査対象の指定であるか判断する(ステップS5)。検査対象の指定でない場合には、端子Aを介して図13の処理に移行する。
【0033】
一方、検査対象の指定である場合には、ユーザインタフェース部100は、検査対象プログラム指定画面を表示装置に表示する(ステップS7)。例えば、図12に示すような画面が表示される。すなわち、検査対象プログラムのファイルパスの入力欄と、OKボタンと、キャンセルボタンとが設けられている。なお、ファイルシステムのディレクトリを提示してファイルを選択させるようにしても良い。
【0034】
ユーザは、検査対象プログラム指定画面において、検査対象プログラムのファイルパス(すなわちファイル名)の入力を行い、OKボタンをクリックする。そうすると、ユーザインタフェース部100は、検査対象プログラムのファイルパスの入力を受け付ける(ステップS9)。そして、APIサンプリング部110が起動済みであるか確認して(ステップS11)、起動していない場合にはAPIサンプリング部110を起動する(ステップS13)。一方、起動している場合にはステップS15に移行する。
【0035】
その後、ユーザインタフェース部100は、指定された検査対象プログラムのファイル名を、APIサンプリング部110に出力して、処理開始を指示する(ステップS15)。そしてステップS1に戻る。
【0036】
図13の処理に移行して、メインメニューで選択されたメニュー項目が検査対象の指定ではない場合には、ユーザインタフェース部100は、検査結果確認が選択されたか判断する(ステップS17)。検査結果確認が選択された場合には、判定結果格納部138に格納されている判定結果の項目を含む結果確認画面データを生成して、表示装置に表示する(ステップS19)。例えば図14に示すような画面を表示する。図14の例では、3件の判定結果(ここでは3つの検査対象プログラム)が列挙されている。PIDは、プログラムIDであり、ユーザ名は、検査対象プログラムを実行させたユーザの権限を表している。ユーザは、図14のいずれかの判定結果を選択して、クリックする。すなわち参照指示を入力する。
【0037】
ユーザインタフェース部100は、特定の判定結果について参照指示がなされたか判断する(ステップS21)。参照指示がなされるまでステップS21を繰り返す。特定の判定結果について参照指示を受け付けた場合には、選択された判定結果のデータを判定結果格納部138から読み出し、表示データを生成して表示装置に表示する(ステップS23)。例えば図15に示すような画面が表示される。図15の例では、検査対象プログラムのプログラム名と、プログラムIDであるPIDと、検査対象プログラムを実行させているユーザのユーザ名と、ユーザの所属グループの所属グループ名と、起動日時及び終了日時と、総合評価(最小権限違反があるか否か)と、最小権限違反の件数(ERR)と、最小権限違反の具体的内容とが表示されるようになっている。最小権限違反の具体的内容については、以下で述べる最小権限違反判定部120により生成されるデータから得られる。このデータの具体的内容については、以下で説明する。そして、処理は端子Bを介してステップS1に戻る。また、ステップS17で結果確認ではなく、処理終了が指示された場合には、ユーザインタフェース部100は、APIサンプリング部110に処理終了を指示して、自らも処理を終了する(ステップS25)。
【0038】
以上のような処理を行うことによって、ユーザに検査対象プログラムを選択させ、最小権限違反判定結果を提示することができる。
【0039】
次に、ステップS15において処理開始を指示されたAPIサンプリング部110の処理内容を図16乃至図18を用いて説明する。APIサンプリング部110は、ユーザインタフェース部100から、検査対象プログラム300のファイル名を取得する(ステップS31)。そして、検査対象プログラム300が起動したか確認する(ステップS33)。起動していない場合には、起動するまで待機するか、APIサンプリング部110が強制的に起動するようにしても良い。
【0040】
検査対象プログラム300が起動している場合には、APIサンプリング部110は、権限要求APIサンプリングルール格納部131から権限要求APIサンプリングルールと、アクセス実行APIサンプリングルール格納部132からアクセス実行APIサンプリングルールと、ユーザ/グループ情報233と、特別権限情報232と、オブジェクト群パーミッション231とを取得する(ステップS35)。これによって、これから検査対象プログラム300が出力するAPI呼出のうちトレースログを生成すべきAPI呼出を抽出すると共に、そのAPI呼出のためのトレースログに記録すべきデータ項目のデータを取得できるようになる。
【0041】
そして、APIサンプリング部110は、検査対象プログラム300の処理が終了するか確認し(ステップS37)、処理が終了しない場合には、検査対象プログラム300からのAPI呼出に応じて、ステップS35で取得したデータを用いて権限要求APIトレースログ又は実アクセスAPIトレースログを生成し、権限要求APIトレースログ格納部133又は実アクセスAPIトレースログ格納部134に格納する(ステップS39)。そしてステップS37に戻る。
【0042】
例えば、権限要求APIの呼出があった場合には、図4の[TargetAPIs]において列挙されているAPIであるか確認する。そして、列挙されているAPIの1つである場合には、[TraceData]において列挙されているデータ項目を取得して権限要求APIトレースログ格納部133に格納する。トレース番号(TraceNO)について検出順にシリアルに番号を付与することによって取得する。例えば図17に示すようなデータが権限要求APIトレースログ格納部133に格納される。トレース番号「001」のトレースログは、図4の第1行目のサンプリングルールに従って登録されるデータである。トレース番号「002」のトレースログは、図4の第3行目のサンプリングルールに従って登録されるデータである。トレース番号「003」のトレースログは、図4の第4行目のサンプリングルールに従って登録されるデータである。
【0043】
また、アクセスAPIの呼出があった場合には、図6の[TargetAPIs]において列挙されているAPIであるか確認する。そして、列挙されるAPIの1つである場合には、[TraceData]において列挙されているデータ項目を取得して実アクセスAPIトレースログ格納部134に格納する。トレース番号(TraceNO)について検出順にシリアルに番号を付与することによって取得する。例えば図18に示すようなデータが実アクセスAPIトレースログ格納部134に格納される。トレース番号「001」のトレースログは、図6の第2行目のサンプリングルールに従って登録されるデータである。トレース番号「002」のトレースログは、図6の第5行目のサンプリングルールに従って登録されるデータである。トレース番号「003」のトレースログは、図6の第6行目のサンプリングルールに従って登録されるデータである。
【0044】
ステップS37で検査対象プログラム300の処理が終了した場合には、最小権限違反判定部120に解析開始を指示する(ステップS41)。最小権限違反判定部120の処理については以下詳細に説明する。そして、APIサンプリング部110の処理終了が指示されなければステップS31に戻り、終了が指示されると、処理を終了する。
【0045】
このように、権限要求APIトレースログ格納部133と実アクセスAPIトレースログ格納部134とに、検査対象プログラム300の実行中に出力されるAPIについてのトレースログが蓄積されるようになる。すなわち、検査対象プログラム300のソースプログラムや仕様書を解析する必要はなく、必要なデータが収集される。よって、ソースプログラムや仕様書が存在しない場合にも検査することができ、さらに人手による手間のかかる解析を不要となるので、作業負担も軽減される。
【0046】
次に、最小権限違反判定部120の処理内容について図19乃至図28を用いて説明する。
【0047】
まず、最小権限違反判定部120は、オブジェクトアクセスルール格納部135からオブジェクトアクセスルールを読み出す(ステップS51)。また、権限アクセスルール格納部136から特別権限アクセスルールを読み出す(ステップS53)。さらに、権限要求APIトレースログ格納部133から権限要求APIトレースログを読み出し、権限要求APIトレースログリストを生成して、例えばメインメモリなどの記憶装置に格納する(ステップS55)。例えば、図20に示すようなリストをトレースログ毎に有するリスト構造データを生成する。図20に示したリストにおいて「TraceNO」から「ObjectPermission」までについては、トレースログに含まれるデータそのままである。想定アクセスAPIへのポインタは、以下の処理でアドレスが登録されるまではNullポインタが登録される。権限要求APIと関連付けられる実アクセスAPIトレースログリストは複数の場合があるので、実アクセスAPIトレースログ・レコードへのポインタリストへのポインタが登録されるようになっている。関連付けられる実アクセスAPIトレースログリストが存在しない場合には、Nullポインタが登録される。次の権限要求APIリストへのポインタについては、次の権限要求APIリストがない場合、すなわち最後の権限要求APIリストの場合には、Nullポインタが登録される。
【0048】
さらに、最小権限違反判定部120は、実アクセスAPIトレースログ格納部134から実アクセスAPIトレースログを読み出し、実アクセスAPIトレースログリストを生成して、例えばメインメモリなどの記憶装置に格納する(ステップS57)。例えば、図21に示すようなリストをトレースログ毎に有するリスト構造データを生成する。図21に示したリストにおいて「TraceNO」から「ObjectPermission」までについては、トレースログに含まれるデータそのままである。次の実アクセスAPIトレースログリストへのポインタについては、次の実アクセスAPIトレースログリストが存在しない場合、すなわち最後の実アクセスAPIリストの場合には、Nullポインタが登録される。
【0049】
次に、最小権限違反判定部120は、権限要求APIトレースログリストから、先頭リストを読み出す(ステップS59)。さらに、AccessGroupというカウンタを「1」に初期化する(ステップS61)。
【0050】
そして、最小権限違反判定部120は、権限要求APIトレースログリストを読み出すことができたか判断する(ステップS63)。読み出すことができない場合には、端子Cを介して図24の処理に移行する。一方、読み出すことができた場合には、端子Dを介して図22の処理に移行する。
【0051】
次に、権限要求APIトレースログリストを読み出すことができた場合の処理について、図22及び図23を用いて説明する。まず、最小権限違反判定部120は、読み出した権限要求APIトレースログリストの権限要求API名を検索キーにしてオブジェクトアクセスルールを検索し、該当するオブジェクトアクセスルールの中で追加検索条件を満たすオブジェクトアクセスルールを特定する(ステップS65)。図8のようなオブジェクトアクセスルールの場合に、権限要求APIトレースログリストに含まれる権限要求API名が「errno_t_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode)」であれば、第1行目及び第2行目が特定される。このような場合には、今回の権限要求APIトレースログリストが、特定されたオブジェクトアクセスルールに追加検索条件として規定されている「oflag = _O_RDONLY」と「oflag = _0_RDWR」とのいずれが該当するか判断する。該当する方のオブジェクトアクセスルールが、今回用いられる。
【0052】
次に、最小権限違反判定部120は、特定されたオブジェクトアクセスルールに対応する想定アクセスAPI及び照合条件a及びbを特定する(ステップS67)。図8の第1行目が特定された場合には、想定アクセスAPI名「int _read( int fd, void *buffer, unsigned int count)」と、「Parameters.pfh=*」という権限要求APIについての照合条件aと、「Parameters.fd=*」という実アクセスAPIについての照合条件bとを特定する。
【0053】
さらに、最小権限違反判定部120は、権限要求APIトレースログリストに、想定アクセスAPIが登録されるリストへのポインタを追加する(ステップS69)。すなわち、図20の「想定アクセスAPIへのポインタ」に、想定アクセスAPIが登録されるリストへのポインタを登録する。また、権限要求APIトレースログリストへのポインタと想定アクセスAPIと権限要求APIトレースログリストにおける必要なデータとステップS67で特定された照合条件a及びbとを、想定アクセスAPIリストに登録する(ステップS71)。例えば図23のような想定アクセスAPIリストが想定アクセスAPI毎に生成される。図23の例において、「API」は想定アクセスAPI名であり、「Parameter」「UserAccount」「Group」「Privilege」「ObjectPath」及び「ObjectPermission」は権限要求APIトレースログリストにおける該当データであり、「照合条件a」及び「照合条件b」はステップS67で特定された照合条件a及びbであり、「権限要求APIへのポインタ」は権限要求APIトレースログリストへのポインタである。なお、「AccessGroup」については、本ステップではNullが設定される。また、実アクセスAPIトレースログへのポインタリストへのポインタについても、以下の処理で設定されるので、ここではNullポインタである。さらに、次の想定アクセスAPIリストへのポインタには、次に生成される想定アクセスAPIリストのアドレスが設定される。
【0054】
このように、1つの権限要求APIトレースログにつき1つの想定アクセスAPIリストを生成して、以下で述べる処理で実アクセスAPIトレースログとの対応関係を探索する。なお、想定アクセスAPIリストを、想定アクセスAPIリスト格納部137に格納する。
【0055】
そして、最小権限違反判定部120は、権限要求APIトレースログの特別権限は前のものとは変化したか判断する(ステップS73)。最初の権限要求APIトレースログの場合にも変化があったと判断する。なお、複数の特別権限が付与されている場合もあり、その場合には1つでも変化した場合には本ステップでは変化したと判断する。特別権限に変化がない場合にはステップS81に移行する。一方、特別権限に変化がある場合には、特別権限アクセスルールから、特別権限要求APIについての特別権限に対応する想定アクセスAPIを特定する(ステップS75)。図9の特別権限アクセスルールを特別権限で検索して、該当する想定アクセスAPIを特定する。複数の特別権限が設定されている場合には、複数の想定アクセスAPIを特定する。
【0056】
そして、最小権限違反判定部120は、ステップS75で特定された想定アクセスAPIと、権限要求APIトレースログリストにおける必要なデータとAccessGroupと権限要求APIトレースログリストへのポインタとを登録する(ステップS77)。図23に示したリスト構造に従ってデータを登録する。この図23の例では、「API」は想定アクセスAPI名であり、「Parameter」「UserAccount」「Group」「Privilege」「ObjectPath」及び「ObjectPermission」は権限要求APIトレースログリストにおける該当データであり、「照合条件a」及び「照合条件b」はNullであり、「権限要求APIへのポインタ」は権限要求APIトレースログリストへのポインタである。なお、「AccessGroup」については、現在のAccessGroupの数値が設定される。また、実アクセスAPIトレースログへのポインタリストへのポインタについても、以下の処理で設定されるので、ここではNullポインタである。さらに、次の想定アクセスAPIリストへのポインタには、次に生成される想定アクセスAPIリストのアドレスが設定される。このような処理を実施することによって、不必要な特別権限が設定されているか否かを判断するための想定アクセスAPIのリストが生成された。
【0057】
その後、AccessGroupを1インクリメントする(ステップS79)。その後ステップS81に移行する。
【0058】
ステップS73で特別権限が変化していない場合又はステップS79の後に、最小権限違反判定部120は、要求権限APIトレースログの次のリストを読み出す(ステップS81)。その後処理は端子Eを介してステップS63に戻る。
【0059】
以上のような処理を実施することによって、不要な権限要求がなされていたり、不要な特別権限が付与されているといった最小権限違反が発生しているか否かを確認するための想定アクセスAPIリストが生成されたことになる。
【0060】
図24の処理の説明に移行して、最小権限違反判定部120は、実アクセスAPIトレースログの最初のリストを読み出す(ステップS83)。そして、実アクセスAPIトレースログを読み出すことができたか判断する(ステップS85)。実アクセスAPIトレースログリストを読み出すことができなかった場合には、端子Fを介して図27の処理に移行する。実アクセスAPIトレースログリストを読み出すことができた場合には、想定アクセスAPIリストの先頭リストを読み出す(ステップS87)。さらに、想定アクセスAPIリストを読み出すことができたか判断する(ステップS89)。想定アクセスAPIリストを読み出すことができなかった場合には端子Gを介してステップS95に移行する。そうすると、実アクセスAPIトレースログリストにおける次のリストを読み出す(ステップS95)。そしてステップS85に移行する。
【0061】
ステップS89で想定アクセスAPIリストを読み出すことができたと判断された場合には、読み出された想定アクセスAPIのAPI名及びアクセス対象オブジェクトパスが実アクセスAPIトレースログのAPI名及びアクセス対象オブジェクトパスと等しいか判断する(ステップS91)。これが想定アクセスAPIと実アクセスAPIとを対応付ける第1の条件である。この条件を満たしていない場合には、端子Iを介して図25のステップS105に移行する。この条件を満たしている場合には、実アクセスAPIトレースログの呼出日時(Time)が、想定アクセスAPIの元となる権限要求APIの呼出日時(Time)以降であり、且つ想定アクセスAPIについて特定されている権限要求APIの照合条件aと実アクセスAPIトレースログの照合条件bとが一致するか判断する(ステップS93)。これが想定アクセスAPIと実アクセスAPIとを対応付ける第2の条件である。
【0062】
実アクセスAPIトレースログの呼出日時は、対応する権限要求APIの呼出日時以降でなければあり得ないので、この条件が第2の条件の前半の部分に設定されている。但し、権限要求APIの呼出日時から一定時間内であるかを確認するようにしても良い。
【0063】
さらに、上で特定された照合条件aは、「Parameters.pfh=*」であり、照合条件bは、「Parameters.fd=*」である。この場合、照合条件aとしては、想定アクセスAPIの元となる権限要求APIのトレースログリストにおけるParameterにおけるpfhの値が特定される。また、照合条件bとしては、実アクセスAPIリストにおけるParameterにおけるfdの値が特定される。そして、pfhの値とfdの値が一致するか判断される。
【0064】
このような第2の条件を満たしていない場合には、端子Iを介して図25のステップS105に移行する。一方、第2の条件を満たしている場合には、端子Hを介して図25のステップS97に移行する。
【0065】
図25の処理の説明に移行して、最小権限違反判定部120は、想定アクセスAPIの該当リスト(具体的には、「実アクセスAPIトレースログへのポインタリスト」)に、実アクセスAPIトレースログリストへのポインタを追加する(ステップS97)。また、想定アクセスAPIの該当リストの元となる権限要求APIトレースログリスト(具体的には、「実アクセスAPIトレースログへのポインタリスト」)に、実アクセスAPIトレースログリストへのポインタを追加する(ステップS99)。このようなポインタの設定によって、権限要求APIトレースログに係る想定アクセスAPIが実アクセスAPIトレースログと対応付けられたことが、データ上登録されたことになる。
【0066】
その後、最小権限違反判定部120は、実アクセスAPIトレースログと想定アクセスAPIのUserAccount、Group、Privilege、ObjectPath、ObjectPermissionが全て等しいか判断する(ステップS101)。想定アクセスAPIと実アクセスAPIトレースログとが対応付けられたとしても、このような条件を満たさない場合には権限要求と実アクセスに齟齬があることになるので、最小権限違反リストに実アクセスAPIトレースログリストのデータを登録する(ステップS103)。図26に最小権限違反リストの一例を示す。図26は、1件の実アクセスAPIトレースログリストについての最小権限違反リストであり、「API」から「ObjectPermission」までのデータは、実アクセスAPIトレースログリストのデータをコピーする。「次の最小権限違反リストへのポインタ」には、次の最小権限違反リストのアドレスが登録されるが、最後の場合にはNullポインタが登録される。ステップS103の後にステップS105に移行する。
【0067】
ステップS101の条件が満たされている場合又はステップS103の後に、最小権限違反判定部120は、想定アクセスAPIリストにおける次のリストを読み出す(ステップS105)。処理は端子Jを介してステップS89に戻る。
【0068】
図27の処理の説明に移行して、最小権限違反判定部120は、権限要求APIトレースログリストの先頭リストを読み出す(ステップS107)。そして、権限要求APIトレースログリストを読み出すことができたか判断する(ステップS109)。権限要求APIトレースログリストを読み出すことができない場合には端子Kを介して図28の処理に移行する。一方、権限要求APIトレースログリストを読み出すことができた場合には、権限要求APIトレースログリストに実アクセスAPIトレースログリストへのポインタが含まれているか判断する(ステップS111)。すなわち、権限要求APIトレースログに対応する実アクセスAPIトレースログが存在するか判断する。この条件を満たす場合には、適切な権限要求API呼出が行われたことになるので処理はステップS115に移行する。一方、この条件を満たさない場合には、実アクセスを伴わない権限要求API呼出であったことになるので、最小権限違反リストに、本権限要求APIトレースログリストのデータを登録する(ステップS113)。
【0069】
そして、最小権限違反判定部120は、権限要求APIトレースログリストにおける次のリストを読み出す(ステップS115)。そしてステップS109に戻る。
【0070】
図28の処理の説明に移行して、最小権限違反判定部120は、想定アクセスAPIリストの先頭リストを読み出す(ステップS117)。そして、想定アクセスAPIリストを読み出すことができたか判断する(ステップS119)。想定アクセスAPIリストを読み出すことができた場合には、想定アクセスAPIリスト全体から、処理に係る想定アクセスAPIリストのAccessGroupと同一AccessGroupについての想定アクセスAPIリストを読み出す(ステップS121)。AccessGroupを含む想定アクセスAPIリストは、ステップS77でのみ設定されるので、同じタイミングで生成された想定アクセスAPIリストが抽出される。それ以外の想定アクセスAPIリストについては1つの想定アクセスAPIリストが特定される。
【0071】
そして、最小権限違反判定部120は、同一AccessGroupについての想定アクセスAPIリストのうち、実アクセスAPIトレースログリストへのポインタ(実際には、「実アクセスAPIトレースログへのポインタリストへのポインタ」)が登録されたものがあるか判断する(ステップS123)。本条件を満たしている場合、すなわち想定アクセスAPIリストと実アクセスAPIトレースログリストとの対応付けがなされている場合には、適切な想定アクセスAPIリストが生成されていることになるので、ステップS127に移行する。一方、上記条件を満たしていない場合、すなわち想定アクセスAPIリストと実アクセスAPIトレースログリストとの対応付けがなされていない場合には、最小権限違反リストに、本想定アクセスAPIリストの元となる権限要求APIトレースログリストのデータを登録する(ステップS125)。
【0072】
ステップS125の後又はステップS123で条件を満たすと判断された場合、最小権限違反判定部120は、想定アクセスAPIリストにおける次のリストを読み出す(ステップS127)。そしてステップS119に戻る。
【0073】
このように最小権限違反であるか否かについては、図27の処理フローと図28の処理フローとの2段階で行うようになっている。図28の処理フローは、主に、特別権限の変化に応じ、AccessGroupに関連して生成される想定アクセスAPIリストについての処理であるが、基本的には図28の処理フローだけでも、問題となる権限要求APIトレースログを抽出することはできる。
【0074】
ステップS119で全ての想定アクセスAPIリストを処理したと判断された場合には、最小権限違反判定部120は、最小権限違反リストのリスト数をカウントし、判定結果格納部138に格納する(ステップS129)。また、最小権限違反リストのデータ及び関連データを、判定結果格納部138に格納する(ステップS131)。関連データには、例えば、権限要求APIトレースログ格納部133の最初のトレースログの呼出日時(Time)と最後のトレースログの呼出日時(Time)とを読み出し、さらに、実アクセスAPIトレースログ格納部134の最初のトレースログの呼出日時(Time)と最後のトレースログの呼出日時(Time)とを読み出し、起動時間(最も早い呼出時刻)及び終了時間(最も遅い呼出時刻)を特定する。さらに、検査対象プログラム名、ユーザ名、所属グループ名などについても、権限要求APIトレースログ格納部133及び実アクセスAPIトレースログ格納部134から読み出し、判定結果格納部138に格納する。
【0075】
以上で最小権限違反判定部120の処理を終了する。このような処理を実施すれば、判定結果格納部138に格納されているデータを用いて、ユーザインタフェース部100は、判定結果を表示させることができるようになる。
【0076】
以上のような処理を実施すれば、最小権限違反を、ソースプログラムや仕様書を参照することなく、検査対象プログラムを実実行環境又はそれに近い環境で実行するだけで判定することができる。また、最小権限違反リストのデータを解析すれば、どのような状況で最小権限違反が発生しているかを特定できるので、修正が効率的実施することができるようになる。
【0077】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。具体的には、図2の機能ブロック構成は一例であって、必ずしも実際のプログラムモジュール構成と一致するわけではない。特に、検査対象プログラム300が実行されるコンピュータシステムと、ユーザインタフェース部100及び最小権限違反判定部120が実施されるコンピュータシステムとは別の場合もある。さらに、ユーザインタフェース部100のみクライアント端末に設けられ、他の要素が1又は複数のコンピュータに設けられる場合もある。
【0078】
また、処理フローについても処理結果が変わらなければ、同時実行させたり実行順序を変えても良いステップも存在する。データ構造についても、同様の結果を得られるのであれば、図示したようなデータ構造でなくともよい。
【0079】
以上本実施の形態をまとめると以下のようになる。
【0080】
第1の態様に係る最小権限違反検出方法は、検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に検査対象プログラムから出力されることが想定されている想定アクセスAPIを権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、想定アクセスAPIデータ格納部において、権限要求APIトレースログ格納部に格納されている権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、所定の条件を満たす想定アクセスAPIが検出された場合には、当該想定アクセスAPIのデータに対応付けて実アクセスAPIのデータを想定アクセスAPIトレースログ格納部に格納する実アクセスAPI探索ステップと、想定アクセスAPIトレースログ格納部において実アクセスAPIのデータが対応付けられていない想定アクセスAPIを探索して、検出された想定アクセスAPIに想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップとを含む。
【0081】
このように想定アクセスAPIのデータを生成して実アクセスAPIのデータと対応付けできるか否かを判断することによって、最小権限違反を、ソースプログラムや仕様書を解析することなく実実行環境等に従って判断することができるようになる。
【0082】
また、上で述べた実アクセスAPI探索ステップが、所定の条件を満たす想定アクセスAPIが抽出された場合には、想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている権限要求APIに対応付けて、該当する実アクセスAPIのデータを、権限要求APIトレースログ格納部に格納するステップを含むようにしてもよい。そして、第1の態様に係る最小権限違反判定方法が、権限要求APIトレースログ格納部において実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、最小権限違反データ格納部に格納するステップをさらに含むようにしても良い。より漏れなく最小権限違反を検出することができるようになる。
【0083】
また、上で述べた実アクセスAPI探索ステップが、所定の条件を満たす想定アクセスAPIが抽出された場合には、実アクセスAPIと想定アクセスAPIとが実質的に同一であること(すなわち齟齬がないこと)を表す第2の所定の条件を該当する実アクセスAPI及び想定アクセスAPIが満たすか判断するステップと、第2の所定の条件を満たさないと判断された実アクセスAPIのデータを、最小権限違反データ格納部に格納するステップとを含むようにしてもよい。適切でない実アクセスAPI呼出が行われていることを検出することができる。
【0084】
さらに、上で述べた想定アクセスAPI生成ステップが、権限要求APIトレースログ格納部に格納されている特定の権限要求APIのデータに含まれる特別権限グループが当該特定の権限要求APIのデータより1つ前の第2の権限要求APIのデータに含まれる特別権限グループと相違する場合に、特別権限に応じて出力されると想定される想定アクセスAPIを規定している権限アクセスルールを格納する権限アクセスルール格納部から、前記特定の権限要求APIのデータに含まれる特別権限グループに対応する想定アクセスAPIを抽出し、当該想定アクセスAPIのデータをグループ化して前記想定アクセスAPI格納部に格納するステップを含むようにしてもよい。さらに、上で述べた最小権限違反検出ステップが、想定アクセスAPIトレースログ格納部において同一グループの想定アクセスAPIについていずれも実アクセスAPIのデータが対応付けられていない場合に、当該同一グループの想定アクセスAPIに想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納するステップを含むようにしてもよい。このようにすれば、不適切な特別権限を設定している場合には検出することができるようになる。
【0085】
第2の形態に係る最小権限違反検出方法は、検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に検査対象プログラムから出力されることが想定されている想定アクセスAPIを権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、想定アクセスAPIデータ格納部において、権限要求APIトレースログ格納部に格納されている権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、所定の条件を満たす想定アクセスAPIが検出された場合には、想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている権限要求APIに対応付けて、該当する実アクセスAPIのデータを、権限要求APIトレースログ格納部に格納するステップと、権限要求APIトレースログ格納部において実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、最小権限違反データ格納部に格納するステップとを含む。
【0086】
このように実アクセスAPIと想定アクセスAPIとの対応付けから、元となる権限要求APIと実アクセスAPIとの対応付けを行えば、対応付けのない権限要求APIを探索することによって、最小権限違反を検出することができるようになる。
【0087】
なお、上記最小権限違反検出方法をコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等の記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【0088】
なお、例えば図2に示すコンピュータシステムは、コンピュータ装置であって、図29に示すように、メモリ2501とCPU2503とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納される。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【0089】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0090】
(付記1)
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、当該想定アクセスAPIのデータに対応付けて前記実アクセスAPIのデータを前記想定アクセスAPIトレースログ格納部に格納する実アクセスAPI探索ステップと、
前記想定アクセスAPIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない想定アクセスAPIを探索して、検出された想定アクセスAPIに前記想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップと、
を、コンピュータに実行させるためのプログラム。
【0091】
(付記2)
前記実アクセスAPI探索ステップが、
前記所定の条件を満たす前記想定アクセスAPIが抽出された場合には、前記想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている前記権限要求APIに対応付けて、該当する前記実アクセスAPIのデータを、前記権限要求APIトレースログ格納部に格納するステップ
を含み、
さらに、
前記権限要求APIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、前記最小権限違反データ格納部に格納するステップ
を、前記コンピュータに実行させるための付記1記載のプログラム。
【0092】
(付記3)
前記実アクセスAPI探索ステップが、
前記所定の条件を満たす前記想定アクセスAPIが抽出された場合には、前記実アクセスAPIと前記想定アクセスAPIとが実質的に同一であることを表す第2の所定の条件を該当する前記実アクセスAPI及び前記想定アクセスAPIが満たすか判断するステップと、
前記第2の所定の条件を満たさないと判断された前記実アクセスAPIのデータを、前記最小権限違反データ格納部に格納するステップと、
を含む付記1又は2記載のプログラム。
【0093】
(付記4)
前記想定アクセスAPI生成ステップが、
前記権限要求APIトレースログ格納部に格納されている特定の権限要求APIのデータに含まれる特別権限グループが当該特定の権限要求APIのデータより1つ前の第2の権限要求APIのデータに含まれる特別権限グループと相違する場合に、特別権限に応じて出力されると想定される想定アクセスAPIを規定している権限アクセスルールを格納する権限アクセスルール格納部から、前記特定の権限要求APIのデータに含まれる特別権限グループに対応する想定アクセスAPIを抽出し、当該想定アクセスAPIのデータをグループ化して前記想定アクセスAPI格納部に格納するステップ
を含み、
前記最小権限違反検出ステップが、
前記想定アクセスAPIトレースログ格納部において同一グループの想定アクセスAPIについていずれも実アクセスAPIのデータが対応付けられていない場合に、当該同一グループの想定アクセスAPIに前記想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納するステップ
を含む、付記1乃至3のいずれか1つ記載のプログラム。
【0094】
(付記5)
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、前記想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている前記権限要求APIに対応付けて、該当する前記実アクセスAPIのデータを、前記権限要求APIトレースログ格納部に格納するステップと、
前記権限要求APIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、前記最小権限違反データ格納部に格納するステップと、
を、コンピュータに実行させるためのプログラム。
【0095】
(付記6)
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、当該想定アクセスAPIのデータに対応付けて前記実アクセスAPIのデータを前記想定アクセスAPIトレースログ格納部に格納する実アクセスAPI探索ステップと、
前記想定アクセスAPIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない想定アクセスAPIを探索して、検出された想定アクセスAPIに前記想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップと、
を含み、コンピュータに実行される最小権限違反検出方法。
【0096】
(付記7)
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、前記想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている前記権限要求APIに対応付けて、該当する前記実アクセスAPIのデータを、前記権限要求APIトレースログ格納部に格納するステップと、
前記権限要求APIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、前記最小権限違反データ格納部に格納するステップ
を含み、コンピュータに実行される最小権限違反検出方法。
【0097】
(付記8)
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成手段と、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、当該想定アクセスAPIのデータに対応付けて前記実アクセスAPIのデータを前記想定アクセスAPIトレースログ格納部に格納する実アクセスAPI探索手段と、
前記想定アクセスAPIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない想定アクセスAPIを探索して、検出された想定アクセスAPIに前記想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納する最小権限違反検出手段と、
を有する最小権限違反検出装置。
【0098】
(付記9)
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成手段と、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、前記想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている前記権限要求APIに対応付けて、該当する前記実アクセスAPIのデータを、前記権限要求APIトレースログ格納部に格納する手段と、
前記権限要求APIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、前記最小権限違反データ格納部に格納する手段と、
を有する最小権限違反検出装置。
【符号の説明】
【0099】
100 ユーザインタフェース部 110 APIサンプリング部
131 権限要求APIサンプリングルール格納部
132 アクセス実行APIサンプリングルール格納部
133 権限要求APIトレースログ格納部
134 実アクセスAPIトレースログ格納部
135 オブジェクトアクセスルール格納部
136 権限アクセスルール格納部
137 想定アクセスAPIリスト格納部
138 判定結果格納部
【特許請求の範囲】
【請求項1】
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、当該想定アクセスAPIのデータに対応付けて前記実アクセスAPIのデータを前記想定アクセスAPIトレースログ格納部に格納する実アクセスAPI探索ステップと、
前記想定アクセスAPIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない想定アクセスAPIを探索して、検出された想定アクセスAPIに前記想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップと、
を、コンピュータに実行させるためのプログラム。
【請求項2】
前記実アクセスAPI探索ステップが、
前記所定の条件を満たす前記想定アクセスAPIが抽出された場合には、前記想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている前記権限要求APIに対応付けて、該当する前記実アクセスAPIのデータを、前記権限要求APIトレースログ格納部に格納するステップ
を含み、
さらに、
前記権限要求APIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、前記最小権限違反データ格納部に格納するステップ
を、前記コンピュータに実行させるための請求項1記載のプログラム。
【請求項3】
前記実アクセスAPI探索ステップが、
前記所定の条件を満たす前記想定アクセスAPIが抽出された場合には、前記実アクセスAPIと前記想定アクセスAPIとが実質的に同一であることを表す第2の所定の条件を該当する前記実アクセスAPI及び前記想定アクセスAPIが満たすか判断するステップと、
前記第2の所定の条件を満たさないと判断された前記実アクセスAPIのデータを、前記最小権限違反データ格納部に格納するステップと、
を含む請求項1又は2記載のプログラム。
【請求項4】
前記想定アクセスAPI生成ステップが、
前記権限要求APIトレースログ格納部に格納されている特定の権限要求APIのデータに含まれる特別権限グループが当該特定の権限要求APIのデータより1つ前の第2の権限要求APIのデータに含まれる特別権限グループと相違する場合に、特別権限に応じて出力されると想定される想定アクセスAPIを規定している権限アクセスルールを格納する権限アクセスルール格納部から、前記特定の権限要求APIのデータに含まれる特別権限グループに対応する想定アクセスAPIを抽出し、当該想定アクセスAPIのデータをグループ化して前記想定アクセスAPI格納部に格納するステップ
を含み、
前記最小権限違反検出ステップが、
前記想定アクセスAPIトレースログ格納部において同一グループの想定アクセスAPIについていずれも実アクセスAPIのデータが対応付けられていない場合に、当該同一グループの想定アクセスAPIに前記想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納するステップ
を含む、請求項1乃至3のいずれか1つ記載のプログラム。
【請求項5】
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、前記想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている前記権限要求APIに対応付けて、該当する前記実アクセスAPIのデータを、前記権限要求APIトレースログ格納部に格納するステップと、
前記権限要求APIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、前記最小権限違反データ格納部に格納するステップと、
を、コンピュータに実行させるためのプログラム。
【請求項1】
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、当該想定アクセスAPIのデータに対応付けて前記実アクセスAPIのデータを前記想定アクセスAPIトレースログ格納部に格納する実アクセスAPI探索ステップと、
前記想定アクセスAPIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない想定アクセスAPIを探索して、検出された想定アクセスAPIに前記想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップと、
を、コンピュータに実行させるためのプログラム。
【請求項2】
前記実アクセスAPI探索ステップが、
前記所定の条件を満たす前記想定アクセスAPIが抽出された場合には、前記想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている前記権限要求APIに対応付けて、該当する前記実アクセスAPIのデータを、前記権限要求APIトレースログ格納部に格納するステップ
を含み、
さらに、
前記権限要求APIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、前記最小権限違反データ格納部に格納するステップ
を、前記コンピュータに実行させるための請求項1記載のプログラム。
【請求項3】
前記実アクセスAPI探索ステップが、
前記所定の条件を満たす前記想定アクセスAPIが抽出された場合には、前記実アクセスAPIと前記想定アクセスAPIとが実質的に同一であることを表す第2の所定の条件を該当する前記実アクセスAPI及び前記想定アクセスAPIが満たすか判断するステップと、
前記第2の所定の条件を満たさないと判断された前記実アクセスAPIのデータを、前記最小権限違反データ格納部に格納するステップと、
を含む請求項1又は2記載のプログラム。
【請求項4】
前記想定アクセスAPI生成ステップが、
前記権限要求APIトレースログ格納部に格納されている特定の権限要求APIのデータに含まれる特別権限グループが当該特定の権限要求APIのデータより1つ前の第2の権限要求APIのデータに含まれる特別権限グループと相違する場合に、特別権限に応じて出力されると想定される想定アクセスAPIを規定している権限アクセスルールを格納する権限アクセスルール格納部から、前記特定の権限要求APIのデータに含まれる特別権限グループに対応する想定アクセスAPIを抽出し、当該想定アクセスAPIのデータをグループ化して前記想定アクセスAPI格納部に格納するステップ
を含み、
前記最小権限違反検出ステップが、
前記想定アクセスAPIトレースログ格納部において同一グループの想定アクセスAPIについていずれも実アクセスAPIのデータが対応付けられていない場合に、当該同一グループの想定アクセスAPIに前記想定アクセスAPIデータ格納部において対応付けられている権限要求APIのデータを、最小権限違反データ格納部に格納するステップ
を含む、請求項1乃至3のいずれか1つ記載のプログラム。
【請求項5】
検査対象プログラムから出力された権限要求APIのデータを格納する権限要求APIトレースログ格納部に格納されている各権限要求APIについて、権限要求APIが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスAPIを前記権限要求API毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスAPIを読み出し、当該想定アクセスAPIのデータを前記権限要求APIに対応付けて想定アクセスAPIデータ格納部に格納する想定アクセスAPI生成ステップと、
前記検査対象プログラムから出力された実アクセスAPIのデータを格納する実アクセスAPIトレースログ格納部に格納されている各実アクセスAPIについて、前記想定アクセスAPIデータ格納部において、前記権限要求APIトレースログ格納部に格納されている前記権限要求APIに対応して出力されたとみなすための所定の条件を満たす想定アクセスAPIを探索し、前記所定の条件を満たす前記想定アクセスAPIが検出された場合には、前記想定アクセスAPIデータ格納部において当該想定アクセスAPIに対応付けられている前記権限要求APIに対応付けて、該当する前記実アクセスAPIのデータを、前記権限要求APIトレースログ格納部に格納するステップと、
前記権限要求APIトレースログ格納部において前記実アクセスAPIのデータが対応付けられていない権限要求APIを探索して、検出された権限要求APIのデータを、前記最小権限違反データ格納部に格納するステップと、
を、コンピュータに実行させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【公開番号】特開2010−176167(P2010−176167A)
【公開日】平成22年8月12日(2010.8.12)
【国際特許分類】
【出願番号】特願2009−15018(P2009−15018)
【出願日】平成21年1月27日(2009.1.27)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成22年8月12日(2010.8.12)
【国際特許分類】
【出願日】平成21年1月27日(2009.1.27)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]