(57)【要約】【課題】プログラムの最小権限違反を検出する。【解決手段】権限要求ＡＰＩの呼出とオブジェクトに対する実際のアクセスＡＰＩ（実アクセスＡＰＩと呼ぶ）の呼出とをトレースする。そして、権限要求ＡＰＩのトレースログから想定されるアクセスＡＰＩ（想定アクセスＡＰＩ）の呼出を導出して、実アクセスＡＰＩの呼出と対応付けられるかを確認する。想定アクセスＡＰＩについて実アクセスＡＰＩとが適切に対応付けられない場合には、最小権限違反と判断する。【選択図】図２
2010176167.tif 000002
【特許請求の範囲】
【請求項１】
検査対象プログラムから出力された権限要求ＡＰＩのデータを格納する権限要求ＡＰＩトレースログ格納部に格納されている各権限要求ＡＰＩについて、権限要求ＡＰＩが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスＡＰＩを前記権限要求ＡＰＩ毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスＡＰＩを読み出し、当該想定アクセスＡＰＩのデータを前記権限要求ＡＰＩに対応付けて想定アクセスＡＰＩデータ格納部に格納する想定アクセスＡＰＩ生成ステップと、
前記検査対象プログラムから出力された実アクセスＡＰＩのデータを格納する実アクセスＡＰＩトレースログ格納部に格納されている各実アクセスＡＰＩについて、前記想定アクセスＡＰＩデータ格納部において、前記権限要求ＡＰＩトレースログ格納部に格納されている前記権限要求ＡＰＩに対応して出力されたとみなすための所定の条件を満たす想定アクセスＡＰＩを探索し、前記所定の条件を満たす前記想定アクセスＡＰＩが検出された場合には、当該想定アクセスＡＰＩのデータに対応付けて前記実アクセスＡＰＩのデータを前記想定アクセスＡＰＩトレースログ格納部に格納する実アクセスＡＰＩ探索ステップと、
前記想定アクセスＡＰＩトレースログ格納部において前記実アクセスＡＰＩのデータが対応付けられていない想定アクセスＡＰＩを探索して、検出された想定アクセスＡＰＩに前記想定アクセスＡＰＩデータ格納部において対応付けられている権限要求ＡＰＩのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップと、
を、コンピュータに実行させるためのプログラム。
【請求項２】
前記実アクセスＡＰＩ探索ステップが、
前記所定の条件を満たす前記想定アクセスＡＰＩが抽出された場合には、前記想定アクセスＡＰＩデータ格納部において当該想定アクセスＡＰＩに対応付けられている前記権限要求ＡＰＩに対応付けて、該当する前記実アクセスＡＰＩのデータを、前記権限要求ＡＰＩトレースログ格納部に格納するステップ
を含み、
さらに、
前記権限要求ＡＰＩトレースログ格納部において前記実アクセスＡＰＩのデータが対応付けられていない権限要求ＡＰＩを探索して、検出された権限要求ＡＰＩのデータを、前記最小権限違反データ格納部に格納するステップ
を、前記コンピュータに実行させるための請求項１記載のプログラム。
【請求項３】
前記実アクセスＡＰＩ探索ステップが、
前記所定の条件を満たす前記想定アクセスＡＰＩが抽出された場合には、前記実アクセスＡＰＩと前記想定アクセスＡＰＩとが実質的に同一であることを表す第２の所定の条件を該当する前記実アクセスＡＰＩ及び前記想定アクセスＡＰＩが満たすか判断するステップと、
前記第２の所定の条件を満たさないと判断された前記実アクセスＡＰＩのデータを、前記最小権限違反データ格納部に格納するステップと、
を含む請求項１又は２記載のプログラム。
【請求項４】
前記想定アクセスＡＰＩ生成ステップが、
前記権限要求ＡＰＩトレースログ格納部に格納されている特定の権限要求ＡＰＩのデータに含まれる特別権限グループが当該特定の権限要求ＡＰＩのデータより１つ前の第２の権限要求ＡＰＩのデータに含まれる特別権限グループと相違する場合に、特別権限に応じて出力されると想定される想定アクセスＡＰＩを規定している権限アクセスルールを格納する権限アクセスルール格納部から、前記特定の権限要求ＡＰＩのデータに含まれる特別権限グループに対応する想定アクセスＡＰＩを抽出し、当該想定アクセスＡＰＩのデータをグループ化して前記想定アクセスＡＰＩ格納部に格納するステップ
を含み、
前記最小権限違反検出ステップが、
前記想定アクセスＡＰＩトレースログ格納部において同一グループの想定アクセスＡＰＩについていずれも実アクセスＡＰＩのデータが対応付けられていない場合に、当該同一グループの想定アクセスＡＰＩに前記想定アクセスＡＰＩデータ格納部において対応付けられている権限要求ＡＰＩのデータを、最小権限違反データ格納部に格納するステップ
を含む、請求項１乃至３のいずれか１つ記載のプログラム。
【請求項５】
検査対象プログラムから出力された権限要求ＡＰＩのデータを格納する権限要求ＡＰＩトレースログ格納部に格納されている各権限要求ＡＰＩについて、権限要求ＡＰＩが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスＡＰＩを前記権限要求ＡＰＩ毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスＡＰＩを読み出し、当該想定アクセスＡＰＩのデータを前記権限要求ＡＰＩに対応付けて想定アクセスＡＰＩデータ格納部に格納する想定アクセスＡＰＩ生成ステップと、
前記検査対象プログラムから出力された実アクセスＡＰＩのデータを格納する実アクセスＡＰＩトレースログ格納部に格納されている各実アクセスＡＰＩについて、前記想定アクセスＡＰＩデータ格納部において、前記権限要求ＡＰＩトレースログ格納部に格納されている前記権限要求ＡＰＩに対応して出力されたとみなすための所定の条件を満たす想定アクセスＡＰＩを探索し、前記所定の条件を満たす前記想定アクセスＡＰＩが検出された場合には、前記想定アクセスＡＰＩデータ格納部において当該想定アクセスＡＰＩに対応付けられている前記権限要求ＡＰＩに対応付けて、該当する前記実アクセスＡＰＩのデータを、前記権限要求ＡＰＩトレースログ格納部に格納するステップと、
前記権限要求ＡＰＩトレースログ格納部において前記実アクセスＡＰＩのデータが対応付けられていない権限要求ＡＰＩを探索して、検出された権限要求ＡＰＩのデータを、前記最小権限違反データ格納部に格納するステップと、
を、コンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、プログラムの動作に不要な権限の要求や使用を検出するための技術に関する。
【背景技術】
【０００２】
顧客の要求仕様に従ったプログラムを作成する際には、最小権限違反とならないようにする必要がある。すなわち、（１）なくても動作する権限をプログラムが持たない、（２）なくても動作する権限をプログラムが要求しない、（３）なくても動作するパーミッションをプログラムがオブジェクトに設定しない、ということが必要である。最小権限違反となるようなプログラムを作成してしまうと、（ａ）不要に高い権限を有するプログラムが乗っ取られて、システム全体が乗っ取られるなど深刻な被害が発生するおそれがあり、（ｂ）システムに何らかのセキュリティ上の問題が発生すると、高い権限を有するプログラムが疑われ、検証などに手間がかかる、（ｃ）不要に高いパーミッション／アクセス許可を有するオブジェクトがねらわれ、情報漏洩などの深刻な被害が発生するおそれがある。
【０００３】
最小権限違反の具体例としては以下のようなものがある。
（１）プログラムの仕様上、最低限必要な権限、パーミッション／アクセス許可を有するユーザ／グループよりも高い権限、パーミッション／アクセス許可を有するユーザ／グループでプログラムが実行されている。
［例１］目的のファイルへのアクセスは一般ユーザで可能であるのに，管理者「Administrator」で実行している。
［例２］シャットダウンＡＰＩ（Application Program Interface）を呼ぶことはないのに、特別権限SE_SHUTDOWN_NAME（シャットダウン権限）を有するユーザ／グループで実行している。
（２）プログラムの仕様上、最低限必要な一般権限／特権以上の権限／特権を要求している。
［例１］ファイルを参照するＡＰＩを呼んでいるだけなのに、API OpenFile()で書き込み権を要求している。
［例２］ファイルのバックアップを行っていないのに、API AdjustTokenPrivileges()でSE_BACKUP_NAME（バックアップ権限）を要求している。
（３）不正なパーミッション／アクセス許可を持つオブジェクトを生成する。
［例］誤ってNULL DACL（アクセス許可未設定、すなわちeveryoneフルコントールが設定されているのと同等）のオブジェクトを生成している。
【０００４】
このような問題が生ずるので、最小権限違反とならないようにプログラムを作成する必要があるが、開発者はアクセスコントロールの仕様を十分に理解せず、プログラムに高い権限を与えてしまったり、不正なパーミッション／アクセス許可を有するオブジェクトを作成するようにしてしまうことがある。
【０００５】
上で述べたような問題に対して従来技術では、ソースプログラムを解析して問題を検出するような手法が存在している。しかしながら、ソースプログラムや仕様書を解析することができない場合がある。さらに、必要な権限は実行環境（ＯＳ（Operating System）、セキュリティポリシー、ネットワーク）に依存するが、単にソースプログラムや仕様書を解析するだけでは、実行環境に応じた最小権限違反を検出することはできない。なお、アクセス制御のための技術は多数存在しているが、最小権限違反を検出できるわけではない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−１８６７０８号公報
【特許文献２】特開２００７−２２６４９５号公報
【特許文献３】特開２００８−１１７０２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
以上のように、従来技術では、ソースプログラムや仕様書を用いることなく検査対象プログラムについて、最小権限違反が存在するか否かを判断することはできない。
【０００８】
従って、本技術の目的は、検査対象プログラムを実際に実行させて最小権限違反を検出する技術を提供することである。
【課題を解決するための手段】
【０００９】
第１の態様に係る最小権限違反検出方法は、検査対象プログラムから出力された権限要求ＡＰＩのデータを格納する権限要求ＡＰＩトレースログ格納部に格納されている各権限要求ＡＰＩについて、権限要求ＡＰＩが出力された後に検査対象プログラムから出力されることが想定されている想定アクセスＡＰＩを権限要求ＡＰＩ毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスＡＰＩを読み出し、当該想定アクセスＡＰＩのデータを権限要求ＡＰＩに対応付けて想定アクセスＡＰＩデータ格納部に格納する想定アクセスＡＰＩ生成ステップと、検査対象プログラムから出力された実アクセスＡＰＩのデータを格納する実アクセスＡＰＩトレースログ格納部に格納されている各実アクセスＡＰＩについて、想定アクセスＡＰＩデータ格納部において、権限要求ＡＰＩトレースログ格納部に格納されている権限要求ＡＰＩに対応して出力されたとみなすための所定の条件を満たす想定アクセスＡＰＩを探索し、上記所定の条件を満たす想定アクセスＡＰＩが検出された場合には、当該想定アクセスＡＰＩのデータに対応付けて実アクセスＡＰＩのデータを想定アクセスＡＰＩトレースログ格納部に格納する実アクセスＡＰＩ探索ステップと、想定アクセスＡＰＩトレースログ格納部において実アクセスＡＰＩのデータが対応付けられていない想定アクセスＡＰＩを探索して、検出された想定アクセスＡＰＩに想定アクセスＡＰＩデータ格納部において対応付けられている権限要求ＡＰＩのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップとを含む。
【００１０】
第２の形態に係る最小権限違反検出方法は、検査対象プログラムから出力された権限要求ＡＰＩのデータを格納する権限要求ＡＰＩトレースログ格納部に格納されている各権限要求ＡＰＩについて、権限要求ＡＰＩが出力された後に検査対象プログラムから出力されることが想定されている想定アクセスＡＰＩを権限要求ＡＰＩ毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスＡＰＩを読み出し、当該想定アクセスＡＰＩのデータを権限要求ＡＰＩに対応付けて想定アクセスＡＰＩデータ格納部に格納する想定アクセスＡＰＩ生成ステップと、検査対象プログラムから出力された実アクセスＡＰＩのデータを格納する実アクセスＡＰＩトレースログ格納部に格納されている各実アクセスＡＰＩについて、想定アクセスＡＰＩデータ格納部において、権限要求ＡＰＩトレースログ格納部に格納されている権限要求ＡＰＩに対応して出力されたとみなすための所定の条件を満たす想定アクセスＡＰＩを探索し、所定の条件を満たす想定アクセスＡＰＩが検出された場合には、想定アクセスＡＰＩデータ格納部において当該想定アクセスＡＰＩに対応付けられている権限要求ＡＰＩに対応付けて、該当する実アクセスＡＰＩのデータを、権限要求ＡＰＩトレースログ格納部に格納するステップと、権限要求ＡＰＩトレースログ格納部において実アクセスＡＰＩのデータが対応付けられていない権限要求ＡＰＩを探索して、検出された権限要求ＡＰＩのデータを、最小権限違反データ格納部に格納するステップとを含む。
【発明の効果】
【００１１】
検査対象プログラムを実際に実行させれば、最小権限違反を検出できるようになる。
【図面の簡単な説明】
【００１２】
【図１】権限要求と実際のアクセスについての関係を説明するための図である。
【図２】本技術の実施の形態についてのシステム概要図である。
【図３】権限要求ＡＰＩサンプリングルールの書式の一例を示す図である。
【図４】権限要求ＡＰＩサンプリングルールの具体例を示す図である。
【図５】アクセス実行ＡＰＩサンプリングルールの書式の一例を示す図である。
【図６】アクセス実行ＡＰＩサンプリングルールの具体例を示す図である。
【図７】オブジェクトアクセスルールの書式の一例を示す図である。
【図８】オブジェクトアクセスルールの具体例を示す図である。
【図９】特別権限アクセスルールの一例を示す図である。
【図１０】特別権限の一例を示す図である。
【図１１】ユーザインタフェース部の処理フローを示す図である。
【図１２】検査対象プログラムの指定画面の一例を示す図である。
【図１３】ユーザインタフェース部の処理フローを示す図である。
【図１４】検査結果確認画面の一例を示す図である。
【図１５】検査結果表示画面の一例を示す図である。
【図１６】ＡＰＩサンプリング部の処理フローを示す図である。
【図１７】権限要求ＡＰＩトレースログの具体例を示す図である。
【図１８】アクセス実行ＡＰＩトレースログの具体例を示す図である。
【図１９】最小権限違反判定部の処理フローを示す図である。
【図２０】権限要求ＡＰＩトレースログリストの構造例を示す図である。
【図２１】実アクセスＡＰＩトレースログリストの構造例を示す図である。
【図２２】最小権限違反判定部の処理フローを示す図である。
【図２３】想定アクセスＡＰＩリストの構造例である。
【図２４】最小権限違反判定部の処理フローを示す図である。
【図２５】最小権限違反判定部の処理フローを示す図である。
【図２６】最小権限違反リストの構造例を示す図である。
【図２７】最小権限違反判定部の処理フローを示す図である。
【図２８】最小権限違反判定部の処理フローを示す図である。
【図２９】コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１３】
［実施の形態の前提及び概要］
図１に、検査対象プログラムがオブジェクトの１つであるファイルＡ（ＦｉｌｅＡ）にアクセスする際の処理内容を示す。
【００１４】
まず、検査対象プログラム１００１は、アクセス権限要求として、ＦｉｌｅＡのｏｐｅｎ（Ｒ／Ｗ）（Ｒｅａｄ及びＷｒｉｔｅ）の権限要求をＯＳのアクセスコントロール部１００３に出力する（ステップ（１））。アクセスコントロール部１００３は、ＦｉｌｅＡのｏｐｅｎ（Ｒ／Ｗ）の権限要求に応じて、検査対象プログラム１００１についての実行ユーザの権限情報１００９を参照して、検査対象プログラム１００１を実行しているユーザ（すなわちＦｉｌｅＡのｏｐｅｎ（Ｒ／Ｗ）を出力させたユーザ）の権限を確認する（ステップ（２））。その後、アクセスコントロール部１００３は、ＦｉｌｅＡについて予め設定されているパーミッション１００７を参照して、実行ユーザのアクセス（ここではＲｅａｄ及びＷｒｉｔｅ）が許可されているか判断する（ステップ（３））。ここで実行ユーザのＲｅａｄ及びＷｒｉｔｅアクセスが許可されている場合には、アクセスコントロール部１００３は、検査対象プログラム１００１にアクセス権限許可を返す（ステップ（４））。
【００１５】
ここでは、検査対象プログラム１００１は、ＦｉｌｅＡのＲｅａｄアクセスを要求する（ステップ（５））。アクセスコントロール部１００３は、ＦｉｌｅＡのＲｅａｄアクセスに応じて、オブジェクト群に含まれるＦｉｌｅＡのＲｅａｄアクセスを実行する（ステップ（６））。
【００１６】
この例では、最終的にＦｉｌｅＡのＲｅａｄアクセスしか実行しないのに、権限要求としては、ＦｉｌｅＡのＲｅａｄ及びＷｒｉｔｅアクセスを要求している。すなわち、この例ではＦｉｌｅＡのＯｐｅｎ（Ｒ）で十分なのに、ＦｉｌｅＡのＯｐｅｎ（Ｒ／Ｗ）を要求しているので、権限要求に最小権限違反があることが分かる。
【００１７】
このように、権限要求から想定されるアクセスと、実際のアクセスとに齟齬がある否かを確認すれば、権限要求に最小権限違反があるか否かを判断することができる。
【００１８】
本実施の形態では、権限要求ＡＰＩの呼出とオブジェクトに対する実際のアクセスＡＰＩ（実アクセスＡＰＩと呼ぶ）の呼出とをトレースする。そして、権限要求ＡＰＩのトレースログから想定されるアクセスＡＰＩ（想定アクセスＡＰＩ）の呼出を導出して、実アクセスＡＰＩの呼出と対応付けられるかを確認する。想定アクセスＡＰＩについて実アクセスＡＰＩが適切に対応付けられない場合には、最小権限違反と判断する。
【００１９】
なお、図１では、プログラムの仕様上、最低限必要な一般権限／特権を超える権限／特権を要求している場合を示しているが、他の最小権限違反についても、基本的には同様の考え方で検出することができる。
【００２０】
［本実施の形態の具体的内容］
図２に、本実施の形態に係るシステム概要を示す。オペレーティングシステム（ＯＳ）２００は、従来のものと同じであって、各種プログラムからのＡＰＩ呼出に対して処理を行うＡＰＩ群２１０と、ファイル、ディレクトリ、パイプ、プロセス／スレッド、アクセストークン、レジストリ、サービス、プリンタ、イベント、セマフォ、ミューテックス、タイマ、ジョブなどのオブジェクト群２２０と、オブジェクト群２２０についてのパーミッションの設定データであるオブジェクト群パーミッション２３１と、プログラムを実行させているユーザ／グループの情報であるユーザ／グループ情報２３３と、ユーザ／グループに設定されている特別権限情報２３２とを含む。検査対象プログラム３００は、ＯＳ２００のＡＰＩ群２１０に対して必要なＡＰＩ呼出を行って、その結果を受け取るようになっている。
【００２１】
本実施の形態では、最小権限違反を検出するため、ユーザインタフェース部１００と、ＡＰＩサンプリング部１１０と、ＡＰＩサンプリング部１１０の処理のための権限要求ＡＰＩサンプリングルールを格納する権限要求ＡＰＩサンプリングルール格納部１３１と、ＡＰＩサンプリング部１１０の処理のためのアクセス実行ＡＰＩサンプリングルールを格納するアクセス実行ＡＰＩサンプリングルール格納部１３２と、ＡＰＩサンプリング部１１０の処理結果である権限要求ＡＰＩトレースログを格納する権限要求ＡＰＩトレースログ格納部１３３と、ＡＰＩサンプリング部１１０の処理結果である実アクセスＡＰＩトレースログを格納する実アクセスＡＰＩトレースログ格納部１３４と、権限要求ＡＰＩに対応するアクセスＡＰＩなどを含むオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部１３５と、特別権限に対応して想定アクセスＡＰＩなどを含む特別権限アクセスルールを格納する権限アクセスルール格納部１３６と、権限要求ＡＰＩトレースログ格納部１３３と実アクセスＡＰＩトレースログ格納部１３４とオブジェクトアクセスルール格納部１３５と権限アクセスルール格納部１３６とに格納されているデータを用いて想定アクセスＡＰＩのデータを生成すると共に最小権限違反の判定を行う最小権限違反判定部１２０と、最小権限違反判定部１２０によって生成された想定アクセスＡＰＩリストを格納する想定アクセスＡＰＩリスト格納部１３７と、最小権限違反判定部１２０の判定結果を格納する判定結果格納部１３８とを有するコンピュータシステムが用いられる。
【００２２】
ユーザインタフェース部１００は、ユーザによる検査対象プログラム３００の指定を受け付け、ＡＰＩサンプリング部１１０に指示する。また、ＡＰＩサンプリング部１１０は、検査対象プログラム３００によるＯＳ２００のＡＰＩ呼出をトレースして、トレースが終了すると最小権限違反判定部１２０に処理を指示する。また、ユーザインタフェース部１００は、判定結果格納部１３８に格納されている判定結果のデータを読み出して、ユーザに提示するようになっている。
【００２３】
権限要求ＡＰＩサンプリングルール格納部１３１に格納される権限要求ＡＰＩサンプリングルールの書式の一例を図３に示す。図３に示すように、本ルールは、サンプリング対象ＡＰＩの要求権限名（すなわちＡＰＩ名）が列挙される部分と、各要求権限ＡＰＩについて記録すべきデータ項目が列挙される部分とを含む。記録すべきデータ項目は、例えば検出された権限要求ＡＰＩの検出順番を表すシリアル番号であるトレース番号（TraceNO）と、ＡＰＩ名（API）と、引数（Parameters）と、呼出元のプロセスＩＤである自プロセスＩＤ（OwnProcessID）と、呼出元のスレッドのＩＤであるスレッドＩＤ（OwnThreadID）と、本ＡＰＩ呼出が行われた日時であるＡＰＩ呼出日時（Time）と、現在検査対象プログラム３００を実行させているユーザの実行アカウント（UserAccount）と、実行ユーザの所属グループ（Group）と、実行ユーザの特別権限（Privilege）と、アクセス対象オブジェクトのパス（ObjectPath）と、オブジェクトのパーミッション（ObjectPermission）とが含まれる。ＡＰＩ名（API）と、引数（Parameter）と、自プロセスＩＤ（OwnProcessID）と、スレッドＩＤ（OwnThreadID）と、アクセス対象オブジェクトパス（ObjectPath）については、権限要求ＡＰＩの呼出自身から取得する。また、ＡＰＩ呼出日時（Time）についてはＯＳ２００の時計から取得する。実行アカウント（UserAccount）と実行ユーザの所属グループ（Group）とについては、ユーザ／グループ情報２３３から取得する。特別権限（Privilege）については特別権限情報２３２から取得する。オブジェクトのパーミッション（ObjectPermission）については、オブジェクト群パーミッション２３１から取得する。
【００２４】
図４に、権限要求ＡＰＩサンプリングルールの具体例を示す。ここでは４つの権限要求ＡＰＩが列挙されている。以下では、わかりやすいファイルのオープンを要求する権限要求ＡＰＩである第１行目の「errno_t_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode)」を主に説明する。
【００２５】
図５に、アクセス実行ＡＰＩサンプリングルール格納部１３２に格納されるアクセス実行ＡＰＩサンプリングルールの書式の一例を示す。図５に示すように、本ルールは、サンプリング対象ＡＰＩの名称（オブジェクトアクセス名）が列挙される部分と、各オブジェクトアクセスについて記録すべきデータ項目が列挙される部分とを含む。
【００２６】
記録すべきデータ項目は、例えば検出された権限要求ＡＰＩの検出順番を表すシリアル番号であるトレース番号（TraceNO）と、ＡＰＩ名（API）と、引数（Parameters）と、呼出元のプロセスの親プロセスのＩＤである親プロセスＩＤ（ParentProcessID）と、呼出元のプロセスＩＤである自プロセスＩＤ（OwnProcessID）と、呼出元のスレッドのＩＤであるスレッドＩＤ（OwnThreadID）と、本ＡＰＩ呼出が行われた日時であるＡＰＩ呼出日時（Time）と、現在検査対象プログラム３００を実行させているユーザの実行アカウント（UserAccount）と、実行ユーザの所属グループ（Group）と、実行ユーザの特別権限（Privilege）と、アクセス対象オブジェクトのパス（ObjectPath）と、オブジェクトのパーミッション（ObjectPermission）とが含まれる。ＡＰＩ名（API）と、引数（Parameter）と、親プロセスＩＤ（ParentProcessID）と、自プロセスＩＤ（OwnProcessID）と、スレッドＩＤ（OwnThreadID）と、アクセス対象オブジェクトパス（ObjectPath）については、権限要求ＡＰＩの呼出自身から取得する。また、ＡＰＩ呼出日時（Time）についてはＯＳ２００の時計から取得する。実行アカウント（UserAccount）と実行ユーザの所属グループ（Group）とについては、ユーザ／グループ情報２３３から取得する。特別権限（Privilege）については特別権限情報２３２から取得する。オブジェクトのパーミッション（ObjectPermission）については、オブジェクト群パーミッション２３１から取得する。
【００２７】
図６に、アクセス実行ＡＰＩサンプリングルールの具体例を示す。ここでは６つのアクセスＡＰＩが列挙されている。権限要求ＡＰＩ「errno_t_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode)」に対応して出力されるアクセスＡＰＩは、「int _read(int fd, void *buffer, unsigned int count)」又は「int _write(int fd, const void *buffer, unsigned int count)」である。
【００２８】
図７に、オブジェクトアクセスルール格納部１３５に格納されるオブジェクトアクセスルールの書式の一例を示す。図７の例では、各行が１つのオブジェクトアクセスルールを表しており、１つのオブジェクトアクセスルールは、検索キーとなる要求権限名と、本ルールを適用すべきか否かを判断するために用いられる追加検索条件と、想定アクセスＡＰＩと実アクセスＡＰＩとを対応付ける際の条件となる要求権限名についての照合条件ａと、想定アクセスＡＰＩとして抽出されるオブジェクトアクセス名と、想定アクセスＡＰＩと実アクセスＡＰＩとを対応付ける際の条件となる実アクセスＡＰＩについての照合条件ｂとを含む。
【００２９】
図８に、オブジェクトアクセスルールの具体例を示す。図８の例では４つのルールが示されているが、第１行目と第２行目は同じ権限要求ＡＰＩ「errno_t_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode)」についてのルールである。但し、追加検索条件が異なる。すなわち、第１行目ではoflag = _O_RDONLYというＲｅａｄのみの場合という追加検索条件が設定されており、第２行目ではoflag = _O_RDWRというようにＲｅａｄとＷｒｉｔｅのいずれもという追加検索条件が設定されている。権限要求ＡＰＩについての照合条件ａは第１行目及び第２行目共に「Parameters.pfh=*」である。そして、第１行目では、権限要求ＡＰＩに対応する想定アクセスＡＰＩがＲｅａｄを表す「int _read( int fd, void *buffer, unsigned int count)」となり、第２行目では、権限要求ＡＰＩに対応する想定アクセスＡＰＩがＷｒｉｔｅを表す「int _write(int fd, const void *buffer, unsigned int count)」となる。第２行目では、権限要求ＡＰＩからするとＲｅａｄという想定アクセスＡＰＩでもよいのだが、Ｒｅａｄであるならば第１行目の権限要求ＡＰＩでもよいので、Ｗｒｉｔｅについての想定アクセスＡＰＩが対応付けられている。他のルールについては、追加検索条件が設定されない場合もある。照合条件ａ及びｂの使用方法については、処理フローの説明と共に説明する。
【００３０】
図９に、権限アクセスルール格納部１３６に格納される特別権限アクセスルールの一例を示す。図９の例では、各特別権限について、対応する想定アクセスＡＰＩが列挙されるようになっている。
【００３１】
特別権限には、例えば図１０に示すようなものがある。実行ユーザには、複数の特別権限が付与される場合があり、その場合には、図９において対応する想定アクセスＡＰＩが複数抽出されることになる。
【００３２】
次に、図１１乃至図２８を用いて図２に示したシステムの処理内容を説明する。最初に、ユーザインタフェース部１００の処理内容について説明する。ユーザインタフェース部１００は、表示装置にメインメニューを表示する（ステップＳ１）。本実施の形態では、検査対象プログラムの指定と、検査結果確認と、処理の終了とのいずれかが選択可能なものとする。これによってユーザにメニュー項目の選択を促す。そして、ユーザは、メニュー項目の選択を行って、ユーザインタフェース部１００は、ユーザからの選択指示を受け付ける（ステップＳ３）。ここで、ユーザからの選択指示が、検査対象の指定であるか判断する（ステップＳ５）。検査対象の指定でない場合には、端子Ａを介して図１３の処理に移行する。
【００３３】
一方、検査対象の指定である場合には、ユーザインタフェース部１００は、検査対象プログラム指定画面を表示装置に表示する（ステップＳ７）。例えば、図１２に示すような画面が表示される。すなわち、検査対象プログラムのファイルパスの入力欄と、ＯＫボタンと、キャンセルボタンとが設けられている。なお、ファイルシステムのディレクトリを提示してファイルを選択させるようにしても良い。
【００３４】
ユーザは、検査対象プログラム指定画面において、検査対象プログラムのファイルパス（すなわちファイル名）の入力を行い、ＯＫボタンをクリックする。そうすると、ユーザインタフェース部１００は、検査対象プログラムのファイルパスの入力を受け付ける（ステップＳ９）。そして、ＡＰＩサンプリング部１１０が起動済みであるか確認して（ステップＳ１１）、起動していない場合にはＡＰＩサンプリング部１１０を起動する（ステップＳ１３）。一方、起動している場合にはステップＳ１５に移行する。
【００３５】
その後、ユーザインタフェース部１００は、指定された検査対象プログラムのファイル名を、ＡＰＩサンプリング部１１０に出力して、処理開始を指示する（ステップＳ１５）。そしてステップＳ１に戻る。
【００３６】
図１３の処理に移行して、メインメニューで選択されたメニュー項目が検査対象の指定ではない場合には、ユーザインタフェース部１００は、検査結果確認が選択されたか判断する（ステップＳ１７）。検査結果確認が選択された場合には、判定結果格納部１３８に格納されている判定結果の項目を含む結果確認画面データを生成して、表示装置に表示する（ステップＳ１９）。例えば図１４に示すような画面を表示する。図１４の例では、３件の判定結果（ここでは３つの検査対象プログラム）が列挙されている。ＰＩＤは、プログラムＩＤであり、ユーザ名は、検査対象プログラムを実行させたユーザの権限を表している。ユーザは、図１４のいずれかの判定結果を選択して、クリックする。すなわち参照指示を入力する。
【００３７】
ユーザインタフェース部１００は、特定の判定結果について参照指示がなされたか判断する（ステップＳ２１）。参照指示がなされるまでステップＳ２１を繰り返す。特定の判定結果について参照指示を受け付けた場合には、選択された判定結果のデータを判定結果格納部１３８から読み出し、表示データを生成して表示装置に表示する（ステップＳ２３）。例えば図１５に示すような画面が表示される。図１５の例では、検査対象プログラムのプログラム名と、プログラムＩＤであるＰＩＤと、検査対象プログラムを実行させているユーザのユーザ名と、ユーザの所属グループの所属グループ名と、起動日時及び終了日時と、総合評価（最小権限違反があるか否か）と、最小権限違反の件数（ＥＲＲ）と、最小権限違反の具体的内容とが表示されるようになっている。最小権限違反の具体的内容については、以下で述べる最小権限違反判定部１２０により生成されるデータから得られる。このデータの具体的内容については、以下で説明する。そして、処理は端子Ｂを介してステップＳ１に戻る。また、ステップＳ１７で結果確認ではなく、処理終了が指示された場合には、ユーザインタフェース部１００は、ＡＰＩサンプリング部１１０に処理終了を指示して、自らも処理を終了する（ステップＳ２５）。
【００３８】
以上のような処理を行うことによって、ユーザに検査対象プログラムを選択させ、最小権限違反判定結果を提示することができる。
【００３９】
次に、ステップＳ１５において処理開始を指示されたＡＰＩサンプリング部１１０の処理内容を図１６乃至図１８を用いて説明する。ＡＰＩサンプリング部１１０は、ユーザインタフェース部１００から、検査対象プログラム３００のファイル名を取得する（ステップＳ３１）。そして、検査対象プログラム３００が起動したか確認する（ステップＳ３３）。起動していない場合には、起動するまで待機するか、ＡＰＩサンプリング部１１０が強制的に起動するようにしても良い。
【００４０】
検査対象プログラム３００が起動している場合には、ＡＰＩサンプリング部１１０は、権限要求ＡＰＩサンプリングルール格納部１３１から権限要求ＡＰＩサンプリングルールと、アクセス実行ＡＰＩサンプリングルール格納部１３２からアクセス実行ＡＰＩサンプリングルールと、ユーザ／グループ情報２３３と、特別権限情報２３２と、オブジェクト群パーミッション２３１とを取得する（ステップＳ３５）。これによって、これから検査対象プログラム３００が出力するＡＰＩ呼出のうちトレースログを生成すべきＡＰＩ呼出を抽出すると共に、そのＡＰＩ呼出のためのトレースログに記録すべきデータ項目のデータを取得できるようになる。
【００４１】
そして、ＡＰＩサンプリング部１１０は、検査対象プログラム３００の処理が終了するか確認し（ステップＳ３７）、処理が終了しない場合には、検査対象プログラム３００からのＡＰＩ呼出に応じて、ステップＳ３５で取得したデータを用いて権限要求ＡＰＩトレースログ又は実アクセスＡＰＩトレースログを生成し、権限要求ＡＰＩトレースログ格納部１３３又は実アクセスＡＰＩトレースログ格納部１３４に格納する（ステップＳ３９）。そしてステップＳ３７に戻る。
【００４２】
例えば、権限要求ＡＰＩの呼出があった場合には、図４の［TargetAPIs］において列挙されているＡＰＩであるか確認する。そして、列挙されているＡＰＩの１つである場合には、［TraceData］において列挙されているデータ項目を取得して権限要求ＡＰＩトレースログ格納部１３３に格納する。トレース番号（TraceNO）について検出順にシリアルに番号を付与することによって取得する。例えば図１７に示すようなデータが権限要求ＡＰＩトレースログ格納部１３３に格納される。トレース番号「００１」のトレースログは、図４の第１行目のサンプリングルールに従って登録されるデータである。トレース番号「００２」のトレースログは、図４の第３行目のサンプリングルールに従って登録されるデータである。トレース番号「００３」のトレースログは、図４の第４行目のサンプリングルールに従って登録されるデータである。
【００４３】
また、アクセスＡＰＩの呼出があった場合には、図６の［TargetAPIs］において列挙されているＡＰＩであるか確認する。そして、列挙されるＡＰＩの１つである場合には、［TraceData］において列挙されているデータ項目を取得して実アクセスＡＰＩトレースログ格納部１３４に格納する。トレース番号（TraceNO）について検出順にシリアルに番号を付与することによって取得する。例えば図１８に示すようなデータが実アクセスＡＰＩトレースログ格納部１３４に格納される。トレース番号「００１」のトレースログは、図６の第２行目のサンプリングルールに従って登録されるデータである。トレース番号「００２」のトレースログは、図６の第５行目のサンプリングルールに従って登録されるデータである。トレース番号「００３」のトレースログは、図６の第６行目のサンプリングルールに従って登録されるデータである。
【００４４】
ステップＳ３７で検査対象プログラム３００の処理が終了した場合には、最小権限違反判定部１２０に解析開始を指示する（ステップＳ４１）。最小権限違反判定部１２０の処理については以下詳細に説明する。そして、ＡＰＩサンプリング部１１０の処理終了が指示されなければステップＳ３１に戻り、終了が指示されると、処理を終了する。
【００４５】
このように、権限要求ＡＰＩトレースログ格納部１３３と実アクセスＡＰＩトレースログ格納部１３４とに、検査対象プログラム３００の実行中に出力されるＡＰＩについてのトレースログが蓄積されるようになる。すなわち、検査対象プログラム３００のソースプログラムや仕様書を解析する必要はなく、必要なデータが収集される。よって、ソースプログラムや仕様書が存在しない場合にも検査することができ、さらに人手による手間のかかる解析を不要となるので、作業負担も軽減される。
【００４６】
次に、最小権限違反判定部１２０の処理内容について図１９乃至図２８を用いて説明する。
【００４７】
まず、最小権限違反判定部１２０は、オブジェクトアクセスルール格納部１３５からオブジェクトアクセスルールを読み出す（ステップＳ５１）。また、権限アクセスルール格納部１３６から特別権限アクセスルールを読み出す（ステップＳ５３）。さらに、権限要求ＡＰＩトレースログ格納部１３３から権限要求ＡＰＩトレースログを読み出し、権限要求ＡＰＩトレースログリストを生成して、例えばメインメモリなどの記憶装置に格納する（ステップＳ５５）。例えば、図２０に示すようなリストをトレースログ毎に有するリスト構造データを生成する。図２０に示したリストにおいて「TraceNO」から「ObjectPermission」までについては、トレースログに含まれるデータそのままである。想定アクセスＡＰＩへのポインタは、以下の処理でアドレスが登録されるまではＮｕｌｌポインタが登録される。権限要求ＡＰＩと関連付けられる実アクセスＡＰＩトレースログリストは複数の場合があるので、実アクセスＡＰＩトレースログ・レコードへのポインタリストへのポインタが登録されるようになっている。関連付けられる実アクセスＡＰＩトレースログリストが存在しない場合には、Ｎｕｌｌポインタが登録される。次の権限要求ＡＰＩリストへのポインタについては、次の権限要求ＡＰＩリストがない場合、すなわち最後の権限要求ＡＰＩリストの場合には、Ｎｕｌｌポインタが登録される。
【００４８】
さらに、最小権限違反判定部１２０は、実アクセスＡＰＩトレースログ格納部１３４から実アクセスＡＰＩトレースログを読み出し、実アクセスＡＰＩトレースログリストを生成して、例えばメインメモリなどの記憶装置に格納する（ステップＳ５７）。例えば、図２１に示すようなリストをトレースログ毎に有するリスト構造データを生成する。図２１に示したリストにおいて「TraceNO」から「ObjectPermission」までについては、トレースログに含まれるデータそのままである。次の実アクセスＡＰＩトレースログリストへのポインタについては、次の実アクセスＡＰＩトレースログリストが存在しない場合、すなわち最後の実アクセスＡＰＩリストの場合には、Ｎｕｌｌポインタが登録される。
【００４９】
次に、最小権限違反判定部１２０は、権限要求ＡＰＩトレースログリストから、先頭リストを読み出す（ステップＳ５９）。さらに、AccessGroupというカウンタを「１」に初期化する（ステップＳ６１）。
【００５０】
そして、最小権限違反判定部１２０は、権限要求ＡＰＩトレースログリストを読み出すことができたか判断する（ステップＳ６３）。読み出すことができない場合には、端子Ｃを介して図２４の処理に移行する。一方、読み出すことができた場合には、端子Ｄを介して図２２の処理に移行する。
【００５１】
次に、権限要求ＡＰＩトレースログリストを読み出すことができた場合の処理について、図２２及び図２３を用いて説明する。まず、最小権限違反判定部１２０は、読み出した権限要求ＡＰＩトレースログリストの権限要求ＡＰＩ名を検索キーにしてオブジェクトアクセスルールを検索し、該当するオブジェクトアクセスルールの中で追加検索条件を満たすオブジェクトアクセスルールを特定する（ステップＳ６５）。図８のようなオブジェクトアクセスルールの場合に、権限要求ＡＰＩトレースログリストに含まれる権限要求ＡＰＩ名が「errno_t_sopen_s(int* pfh, const char *filename, int oflag, int shflag, int pmode)」であれば、第１行目及び第２行目が特定される。このような場合には、今回の権限要求ＡＰＩトレースログリストが、特定されたオブジェクトアクセスルールに追加検索条件として規定されている「oflag = _O_RDONLY」と「oflag = _0_RDWR」とのいずれが該当するか判断する。該当する方のオブジェクトアクセスルールが、今回用いられる。
【００５２】
次に、最小権限違反判定部１２０は、特定されたオブジェクトアクセスルールに対応する想定アクセスＡＰＩ及び照合条件ａ及びｂを特定する（ステップＳ６７）。図８の第１行目が特定された場合には、想定アクセスＡＰＩ名「int _read( int fd, void *buffer, unsigned int count)」と、「Parameters.pfh=*」という権限要求ＡＰＩについての照合条件ａと、「Parameters.fd=*」という実アクセスＡＰＩについての照合条件ｂとを特定する。
【００５３】
さらに、最小権限違反判定部１２０は、権限要求ＡＰＩトレースログリストに、想定アクセスＡＰＩが登録されるリストへのポインタを追加する（ステップＳ６９）。すなわち、図２０の「想定アクセスＡＰＩへのポインタ」に、想定アクセスＡＰＩが登録されるリストへのポインタを登録する。また、権限要求ＡＰＩトレースログリストへのポインタと想定アクセスＡＰＩと権限要求ＡＰＩトレースログリストにおける必要なデータとステップＳ６７で特定された照合条件ａ及びｂとを、想定アクセスＡＰＩリストに登録する（ステップＳ７１）。例えば図２３のような想定アクセスＡＰＩリストが想定アクセスＡＰＩ毎に生成される。図２３の例において、「ＡＰＩ」は想定アクセスＡＰＩ名であり、「Parameter」「UserAccount」「Group」「Privilege」「ObjectPath」及び「ObjectPermission」は権限要求ＡＰＩトレースログリストにおける該当データであり、「照合条件ａ」及び「照合条件ｂ」はステップＳ６７で特定された照合条件ａ及びｂであり、「権限要求ＡＰＩへのポインタ」は権限要求ＡＰＩトレースログリストへのポインタである。なお、「AccessGroup」については、本ステップではＮｕｌｌが設定される。また、実アクセスＡＰＩトレースログへのポインタリストへのポインタについても、以下の処理で設定されるので、ここではＮｕｌｌポインタである。さらに、次の想定アクセスＡＰＩリストへのポインタには、次に生成される想定アクセスＡＰＩリストのアドレスが設定される。
【００５４】
このように、１つの権限要求ＡＰＩトレースログにつき１つの想定アクセスＡＰＩリストを生成して、以下で述べる処理で実アクセスＡＰＩトレースログとの対応関係を探索する。なお、想定アクセスＡＰＩリストを、想定アクセスＡＰＩリスト格納部１３７に格納する。
【００５５】
そして、最小権限違反判定部１２０は、権限要求ＡＰＩトレースログの特別権限は前のものとは変化したか判断する（ステップＳ７３）。最初の権限要求ＡＰＩトレースログの場合にも変化があったと判断する。なお、複数の特別権限が付与されている場合もあり、その場合には１つでも変化した場合には本ステップでは変化したと判断する。特別権限に変化がない場合にはステップＳ８１に移行する。一方、特別権限に変化がある場合には、特別権限アクセスルールから、特別権限要求ＡＰＩについての特別権限に対応する想定アクセスＡＰＩを特定する（ステップＳ７５）。図９の特別権限アクセスルールを特別権限で検索して、該当する想定アクセスＡＰＩを特定する。複数の特別権限が設定されている場合には、複数の想定アクセスＡＰＩを特定する。
【００５６】
そして、最小権限違反判定部１２０は、ステップＳ７５で特定された想定アクセスＡＰＩと、権限要求ＡＰＩトレースログリストにおける必要なデータとAccessGroupと権限要求ＡＰＩトレースログリストへのポインタとを登録する（ステップＳ７７）。図２３に示したリスト構造に従ってデータを登録する。この図２３の例では、「ＡＰＩ」は想定アクセスＡＰＩ名であり、「Parameter」「UserAccount」「Group」「Privilege」「ObjectPath」及び「ObjectPermission」は権限要求ＡＰＩトレースログリストにおける該当データであり、「照合条件ａ」及び「照合条件ｂ」はＮｕｌｌであり、「権限要求ＡＰＩへのポインタ」は権限要求ＡＰＩトレースログリストへのポインタである。なお、「AccessGroup」については、現在のAccessGroupの数値が設定される。また、実アクセスＡＰＩトレースログへのポインタリストへのポインタについても、以下の処理で設定されるので、ここではＮｕｌｌポインタである。さらに、次の想定アクセスＡＰＩリストへのポインタには、次に生成される想定アクセスＡＰＩリストのアドレスが設定される。このような処理を実施することによって、不必要な特別権限が設定されているか否かを判断するための想定アクセスＡＰＩのリストが生成された。
【００５７】
その後、AccessGroupを１インクリメントする（ステップＳ７９）。その後ステップＳ８１に移行する。
【００５８】
ステップＳ７３で特別権限が変化していない場合又はステップＳ７９の後に、最小権限違反判定部１２０は、要求権限ＡＰＩトレースログの次のリストを読み出す（ステップＳ８１）。その後処理は端子Ｅを介してステップＳ６３に戻る。
【００５９】
以上のような処理を実施することによって、不要な権限要求がなされていたり、不要な特別権限が付与されているといった最小権限違反が発生しているか否かを確認するための想定アクセスＡＰＩリストが生成されたことになる。
【００６０】
図２４の処理の説明に移行して、最小権限違反判定部１２０は、実アクセスＡＰＩトレースログの最初のリストを読み出す（ステップＳ８３）。そして、実アクセスＡＰＩトレースログを読み出すことができたか判断する（ステップＳ８５）。実アクセスＡＰＩトレースログリストを読み出すことができなかった場合には、端子Ｆを介して図２７の処理に移行する。実アクセスＡＰＩトレースログリストを読み出すことができた場合には、想定アクセスＡＰＩリストの先頭リストを読み出す（ステップＳ８７）。さらに、想定アクセスＡＰＩリストを読み出すことができたか判断する（ステップＳ８９）。想定アクセスＡＰＩリストを読み出すことができなかった場合には端子Ｇを介してステップＳ９５に移行する。そうすると、実アクセスＡＰＩトレースログリストにおける次のリストを読み出す（ステップＳ９５）。そしてステップＳ８５に移行する。
【００６１】
ステップＳ８９で想定アクセスＡＰＩリストを読み出すことができたと判断された場合には、読み出された想定アクセスＡＰＩのＡＰＩ名及びアクセス対象オブジェクトパスが実アクセスＡＰＩトレースログのＡＰＩ名及びアクセス対象オブジェクトパスと等しいか判断する（ステップＳ９１）。これが想定アクセスＡＰＩと実アクセスＡＰＩとを対応付ける第１の条件である。この条件を満たしていない場合には、端子Ｉを介して図２５のステップＳ１０５に移行する。この条件を満たしている場合には、実アクセスＡＰＩトレースログの呼出日時（Ｔｉｍｅ）が、想定アクセスＡＰＩの元となる権限要求ＡＰＩの呼出日時（Ｔｉｍｅ）以降であり、且つ想定アクセスＡＰＩについて特定されている権限要求ＡＰＩの照合条件ａと実アクセスＡＰＩトレースログの照合条件ｂとが一致するか判断する（ステップＳ９３）。これが想定アクセスＡＰＩと実アクセスＡＰＩとを対応付ける第２の条件である。
【００６２】
実アクセスＡＰＩトレースログの呼出日時は、対応する権限要求ＡＰＩの呼出日時以降でなければあり得ないので、この条件が第２の条件の前半の部分に設定されている。但し、権限要求ＡＰＩの呼出日時から一定時間内であるかを確認するようにしても良い。
【００６３】
さらに、上で特定された照合条件ａは、「Parameters.pfh=*」であり、照合条件ｂは、「Parameters.fd=*」である。この場合、照合条件ａとしては、想定アクセスＡＰＩの元となる権限要求ＡＰＩのトレースログリストにおけるParameterにおけるpfhの値が特定される。また、照合条件ｂとしては、実アクセスＡＰＩリストにおけるParameterにおけるfdの値が特定される。そして、pfhの値とfdの値が一致するか判断される。
【００６４】
このような第２の条件を満たしていない場合には、端子Ｉを介して図２５のステップＳ１０５に移行する。一方、第２の条件を満たしている場合には、端子Ｈを介して図２５のステップＳ９７に移行する。
【００６５】
図２５の処理の説明に移行して、最小権限違反判定部１２０は、想定アクセスＡＰＩの該当リスト（具体的には、「実アクセスＡＰＩトレースログへのポインタリスト」）に、実アクセスＡＰＩトレースログリストへのポインタを追加する（ステップＳ９７）。また、想定アクセスＡＰＩの該当リストの元となる権限要求ＡＰＩトレースログリスト（具体的には、「実アクセスＡＰＩトレースログへのポインタリスト」）に、実アクセスＡＰＩトレースログリストへのポインタを追加する（ステップＳ９９）。このようなポインタの設定によって、権限要求ＡＰＩトレースログに係る想定アクセスＡＰＩが実アクセスＡＰＩトレースログと対応付けられたことが、データ上登録されたことになる。
【００６６】
その後、最小権限違反判定部１２０は、実アクセスＡＰＩトレースログと想定アクセスＡＰＩのUserAccount、Group、Privilege、ObjectPath、ObjectPermissionが全て等しいか判断する（ステップＳ１０１）。想定アクセスＡＰＩと実アクセスＡＰＩトレースログとが対応付けられたとしても、このような条件を満たさない場合には権限要求と実アクセスに齟齬があることになるので、最小権限違反リストに実アクセスＡＰＩトレースログリストのデータを登録する（ステップＳ１０３）。図２６に最小権限違反リストの一例を示す。図２６は、１件の実アクセスＡＰＩトレースログリストについての最小権限違反リストであり、「API」から「ObjectPermission」までのデータは、実アクセスＡＰＩトレースログリストのデータをコピーする。「次の最小権限違反リストへのポインタ」には、次の最小権限違反リストのアドレスが登録されるが、最後の場合にはＮｕｌｌポインタが登録される。ステップＳ１０３の後にステップＳ１０５に移行する。
【００６７】
ステップＳ１０１の条件が満たされている場合又はステップＳ１０３の後に、最小権限違反判定部１２０は、想定アクセスＡＰＩリストにおける次のリストを読み出す（ステップＳ１０５）。処理は端子Ｊを介してステップＳ８９に戻る。
【００６８】
図２７の処理の説明に移行して、最小権限違反判定部１２０は、権限要求ＡＰＩトレースログリストの先頭リストを読み出す（ステップＳ１０７）。そして、権限要求ＡＰＩトレースログリストを読み出すことができたか判断する（ステップＳ１０９）。権限要求ＡＰＩトレースログリストを読み出すことができない場合には端子Ｋを介して図２８の処理に移行する。一方、権限要求ＡＰＩトレースログリストを読み出すことができた場合には、権限要求ＡＰＩトレースログリストに実アクセスＡＰＩトレースログリストへのポインタが含まれているか判断する（ステップＳ１１１）。すなわち、権限要求ＡＰＩトレースログに対応する実アクセスＡＰＩトレースログが存在するか判断する。この条件を満たす場合には、適切な権限要求ＡＰＩ呼出が行われたことになるので処理はステップＳ１１５に移行する。一方、この条件を満たさない場合には、実アクセスを伴わない権限要求ＡＰＩ呼出であったことになるので、最小権限違反リストに、本権限要求ＡＰＩトレースログリストのデータを登録する（ステップＳ１１３）。
【００６９】
そして、最小権限違反判定部１２０は、権限要求ＡＰＩトレースログリストにおける次のリストを読み出す（ステップＳ１１５）。そしてステップＳ１０９に戻る。
【００７０】
図２８の処理の説明に移行して、最小権限違反判定部１２０は、想定アクセスＡＰＩリストの先頭リストを読み出す（ステップＳ１１７）。そして、想定アクセスＡＰＩリストを読み出すことができたか判断する（ステップＳ１１９）。想定アクセスＡＰＩリストを読み出すことができた場合には、想定アクセスＡＰＩリスト全体から、処理に係る想定アクセスＡＰＩリストのAccessGroupと同一AccessGroupについての想定アクセスＡＰＩリストを読み出す（ステップＳ１２１）。AccessGroupを含む想定アクセスＡＰＩリストは、ステップＳ７７でのみ設定されるので、同じタイミングで生成された想定アクセスＡＰＩリストが抽出される。それ以外の想定アクセスＡＰＩリストについては１つの想定アクセスＡＰＩリストが特定される。
【００７１】
そして、最小権限違反判定部１２０は、同一AccessGroupについての想定アクセスＡＰＩリストのうち、実アクセスＡＰＩトレースログリストへのポインタ（実際には、「実アクセスＡＰＩトレースログへのポインタリストへのポインタ」）が登録されたものがあるか判断する（ステップＳ１２３）。本条件を満たしている場合、すなわち想定アクセスＡＰＩリストと実アクセスＡＰＩトレースログリストとの対応付けがなされている場合には、適切な想定アクセスＡＰＩリストが生成されていることになるので、ステップＳ１２７に移行する。一方、上記条件を満たしていない場合、すなわち想定アクセスＡＰＩリストと実アクセスＡＰＩトレースログリストとの対応付けがなされていない場合には、最小権限違反リストに、本想定アクセスＡＰＩリストの元となる権限要求ＡＰＩトレースログリストのデータを登録する（ステップＳ１２５）。
【００７２】
ステップＳ１２５の後又はステップＳ１２３で条件を満たすと判断された場合、最小権限違反判定部１２０は、想定アクセスＡＰＩリストにおける次のリストを読み出す（ステップＳ１２７）。そしてステップＳ１１９に戻る。
【００７３】
このように最小権限違反であるか否かについては、図２７の処理フローと図２８の処理フローとの２段階で行うようになっている。図２８の処理フローは、主に、特別権限の変化に応じ、AccessGroupに関連して生成される想定アクセスＡＰＩリストについての処理であるが、基本的には図２８の処理フローだけでも、問題となる権限要求ＡＰＩトレースログを抽出することはできる。
【００７４】
ステップＳ１１９で全ての想定アクセスＡＰＩリストを処理したと判断された場合には、最小権限違反判定部１２０は、最小権限違反リストのリスト数をカウントし、判定結果格納部１３８に格納する（ステップＳ１２９）。また、最小権限違反リストのデータ及び関連データを、判定結果格納部１３８に格納する（ステップＳ１３１）。関連データには、例えば、権限要求ＡＰＩトレースログ格納部１３３の最初のトレースログの呼出日時（Ｔｉｍｅ）と最後のトレースログの呼出日時（Ｔｉｍｅ）とを読み出し、さらに、実アクセスＡＰＩトレースログ格納部１３４の最初のトレースログの呼出日時（Ｔｉｍｅ）と最後のトレースログの呼出日時（Ｔｉｍｅ）とを読み出し、起動時間（最も早い呼出時刻）及び終了時間（最も遅い呼出時刻）を特定する。さらに、検査対象プログラム名、ユーザ名、所属グループ名などについても、権限要求ＡＰＩトレースログ格納部１３３及び実アクセスＡＰＩトレースログ格納部１３４から読み出し、判定結果格納部１３８に格納する。
【００７５】
以上で最小権限違反判定部１２０の処理を終了する。このような処理を実施すれば、判定結果格納部１３８に格納されているデータを用いて、ユーザインタフェース部１００は、判定結果を表示させることができるようになる。
【００７６】
以上のような処理を実施すれば、最小権限違反を、ソースプログラムや仕様書を参照することなく、検査対象プログラムを実実行環境又はそれに近い環境で実行するだけで判定することができる。また、最小権限違反リストのデータを解析すれば、どのような状況で最小権限違反が発生しているかを特定できるので、修正が効率的実施することができるようになる。
【００７７】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。具体的には、図２の機能ブロック構成は一例であって、必ずしも実際のプログラムモジュール構成と一致するわけではない。特に、検査対象プログラム３００が実行されるコンピュータシステムと、ユーザインタフェース部１００及び最小権限違反判定部１２０が実施されるコンピュータシステムとは別の場合もある。さらに、ユーザインタフェース部１００のみクライアント端末に設けられ、他の要素が１又は複数のコンピュータに設けられる場合もある。
【００７８】
また、処理フローについても処理結果が変わらなければ、同時実行させたり実行順序を変えても良いステップも存在する。データ構造についても、同様の結果を得られるのであれば、図示したようなデータ構造でなくともよい。
【００７９】
以上本実施の形態をまとめると以下のようになる。
【００８０】
第１の態様に係る最小権限違反検出方法は、検査対象プログラムから出力された権限要求ＡＰＩのデータを格納する権限要求ＡＰＩトレースログ格納部に格納されている各権限要求ＡＰＩについて、権限要求ＡＰＩが出力された後に検査対象プログラムから出力されることが想定されている想定アクセスＡＰＩを権限要求ＡＰＩ毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスＡＰＩを読み出し、当該想定アクセスＡＰＩのデータを権限要求ＡＰＩに対応付けて想定アクセスＡＰＩデータ格納部に格納する想定アクセスＡＰＩ生成ステップと、検査対象プログラムから出力された実アクセスＡＰＩのデータを格納する実アクセスＡＰＩトレースログ格納部に格納されている各実アクセスＡＰＩについて、想定アクセスＡＰＩデータ格納部において、権限要求ＡＰＩトレースログ格納部に格納されている権限要求ＡＰＩに対応して出力されたとみなすための所定の条件を満たす想定アクセスＡＰＩを探索し、所定の条件を満たす想定アクセスＡＰＩが検出された場合には、当該想定アクセスＡＰＩのデータに対応付けて実アクセスＡＰＩのデータを想定アクセスＡＰＩトレースログ格納部に格納する実アクセスＡＰＩ探索ステップと、想定アクセスＡＰＩトレースログ格納部において実アクセスＡＰＩのデータが対応付けられていない想定アクセスＡＰＩを探索して、検出された想定アクセスＡＰＩに想定アクセスＡＰＩデータ格納部において対応付けられている権限要求ＡＰＩのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップとを含む。
【００８１】
このように想定アクセスＡＰＩのデータを生成して実アクセスＡＰＩのデータと対応付けできるか否かを判断することによって、最小権限違反を、ソースプログラムや仕様書を解析することなく実実行環境等に従って判断することができるようになる。
【００８２】
また、上で述べた実アクセスＡＰＩ探索ステップが、所定の条件を満たす想定アクセスＡＰＩが抽出された場合には、想定アクセスＡＰＩデータ格納部において当該想定アクセスＡＰＩに対応付けられている権限要求ＡＰＩに対応付けて、該当する実アクセスＡＰＩのデータを、権限要求ＡＰＩトレースログ格納部に格納するステップを含むようにしてもよい。そして、第１の態様に係る最小権限違反判定方法が、権限要求ＡＰＩトレースログ格納部において実アクセスＡＰＩのデータが対応付けられていない権限要求ＡＰＩを探索して、検出された権限要求ＡＰＩのデータを、最小権限違反データ格納部に格納するステップをさらに含むようにしても良い。より漏れなく最小権限違反を検出することができるようになる。
【００８３】
また、上で述べた実アクセスＡＰＩ探索ステップが、所定の条件を満たす想定アクセスＡＰＩが抽出された場合には、実アクセスＡＰＩと想定アクセスＡＰＩとが実質的に同一であること（すなわち齟齬がないこと）を表す第２の所定の条件を該当する実アクセスＡＰＩ及び想定アクセスＡＰＩが満たすか判断するステップと、第２の所定の条件を満たさないと判断された実アクセスＡＰＩのデータを、最小権限違反データ格納部に格納するステップとを含むようにしてもよい。適切でない実アクセスＡＰＩ呼出が行われていることを検出することができる。
【００８４】
さらに、上で述べた想定アクセスＡＰＩ生成ステップが、権限要求ＡＰＩトレースログ格納部に格納されている特定の権限要求ＡＰＩのデータに含まれる特別権限グループが当該特定の権限要求ＡＰＩのデータより１つ前の第２の権限要求ＡＰＩのデータに含まれる特別権限グループと相違する場合に、特別権限に応じて出力されると想定される想定アクセスＡＰＩを規定している権限アクセスルールを格納する権限アクセスルール格納部から、前記特定の権限要求ＡＰＩのデータに含まれる特別権限グループに対応する想定アクセスＡＰＩを抽出し、当該想定アクセスＡＰＩのデータをグループ化して前記想定アクセスＡＰＩ格納部に格納するステップを含むようにしてもよい。さらに、上で述べた最小権限違反検出ステップが、想定アクセスＡＰＩトレースログ格納部において同一グループの想定アクセスＡＰＩについていずれも実アクセスＡＰＩのデータが対応付けられていない場合に、当該同一グループの想定アクセスＡＰＩに想定アクセスＡＰＩデータ格納部において対応付けられている権限要求ＡＰＩのデータを、最小権限違反データ格納部に格納するステップを含むようにしてもよい。このようにすれば、不適切な特別権限を設定している場合には検出することができるようになる。
【００８５】
第２の形態に係る最小権限違反検出方法は、検査対象プログラムから出力された権限要求ＡＰＩのデータを格納する権限要求ＡＰＩトレースログ格納部に格納されている各権限要求ＡＰＩについて、権限要求ＡＰＩが出力された後に検査対象プログラムから出力されることが想定されている想定アクセスＡＰＩを権限要求ＡＰＩ毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスＡＰＩを読み出し、当該想定アクセスＡＰＩのデータを権限要求ＡＰＩに対応付けて想定アクセスＡＰＩデータ格納部に格納する想定アクセスＡＰＩ生成ステップと、検査対象プログラムから出力された実アクセスＡＰＩのデータを格納する実アクセスＡＰＩトレースログ格納部に格納されている各実アクセスＡＰＩについて、想定アクセスＡＰＩデータ格納部において、権限要求ＡＰＩトレースログ格納部に格納されている権限要求ＡＰＩに対応して出力されたとみなすための所定の条件を満たす想定アクセスＡＰＩを探索し、所定の条件を満たす想定アクセスＡＰＩが検出された場合には、想定アクセスＡＰＩデータ格納部において当該想定アクセスＡＰＩに対応付けられている権限要求ＡＰＩに対応付けて、該当する実アクセスＡＰＩのデータを、権限要求ＡＰＩトレースログ格納部に格納するステップと、権限要求ＡＰＩトレースログ格納部において実アクセスＡＰＩのデータが対応付けられていない権限要求ＡＰＩを探索して、検出された権限要求ＡＰＩのデータを、最小権限違反データ格納部に格納するステップとを含む。
【００８６】
このように実アクセスＡＰＩと想定アクセスＡＰＩとの対応付けから、元となる権限要求ＡＰＩと実アクセスＡＰＩとの対応付けを行えば、対応付けのない権限要求ＡＰＩを探索することによって、最小権限違反を検出することができるようになる。
【００８７】
なお、上記最小権限違反検出方法をコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等の記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００８８】
なお、例えば図２に示すコンピュータシステムは、コンピュータ装置であって、図２９に示すように、メモリ２５０１とＣＰＵ２５０３とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。必要に応じてＣＰＵ２５０３は、表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ２５０１に格納され、必要があればＨＤＤ２５０５に格納される。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００８９】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００９０】
（付記１）
検査対象プログラムから出力された権限要求ＡＰＩのデータを格納する権限要求ＡＰＩトレースログ格納部に格納されている各権限要求ＡＰＩについて、権限要求ＡＰＩが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスＡＰＩを前記権限要求ＡＰＩ毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスＡＰＩを読み出し、当該想定アクセスＡＰＩのデータを前記権限要求ＡＰＩに対応付けて想定アクセスＡＰＩデータ格納部に格納する想定アクセスＡＰＩ生成ステップと、
前記検査対象プログラムから出力された実アクセスＡＰＩのデータを格納する実アクセスＡＰＩトレースログ格納部に格納されている各実アクセスＡＰＩについて、前記想定アクセスＡＰＩデータ格納部において、前記権限要求ＡＰＩトレースログ格納部に格納されている前記権限要求ＡＰＩに対応して出力されたとみなすための所定の条件を満たす想定アクセスＡＰＩを探索し、前記所定の条件を満たす前記想定アクセスＡＰＩが検出された場合には、当該想定アクセスＡＰＩのデータに対応付けて前記実アクセスＡＰＩのデータを前記想定アクセスＡＰＩトレースログ格納部に格納する実アクセスＡＰＩ探索ステップと、
前記想定アクセスＡＰＩトレースログ格納部において前記実アクセスＡＰＩのデータが対応付けられていない想定アクセスＡＰＩを探索して、検出された想定アクセスＡＰＩに前記想定アクセスＡＰＩデータ格納部において対応付けられている権限要求ＡＰＩのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップと、
を、コンピュータに実行させるためのプログラム。
【００９１】
（付記２）
前記実アクセスＡＰＩ探索ステップが、
前記所定の条件を満たす前記想定アクセスＡＰＩが抽出された場合には、前記想定アクセスＡＰＩデータ格納部において当該想定アクセスＡＰＩに対応付けられている前記権限要求ＡＰＩに対応付けて、該当する前記実アクセスＡＰＩのデータを、前記権限要求ＡＰＩトレースログ格納部に格納するステップ
を含み、
さらに、
前記権限要求ＡＰＩトレースログ格納部において前記実アクセスＡＰＩのデータが対応付けられていない権限要求ＡＰＩを探索して、検出された権限要求ＡＰＩのデータを、前記最小権限違反データ格納部に格納するステップ
を、前記コンピュータに実行させるための付記１記載のプログラム。
【００９２】
（付記３）
前記実アクセスＡＰＩ探索ステップが、
前記所定の条件を満たす前記想定アクセスＡＰＩが抽出された場合には、前記実アクセスＡＰＩと前記想定アクセスＡＰＩとが実質的に同一であることを表す第２の所定の条件を該当する前記実アクセスＡＰＩ及び前記想定アクセスＡＰＩが満たすか判断するステップと、
前記第２の所定の条件を満たさないと判断された前記実アクセスＡＰＩのデータを、前記最小権限違反データ格納部に格納するステップと、
を含む付記１又は２記載のプログラム。
【００９３】
（付記４）
前記想定アクセスＡＰＩ生成ステップが、
前記権限要求ＡＰＩトレースログ格納部に格納されている特定の権限要求ＡＰＩのデータに含まれる特別権限グループが当該特定の権限要求ＡＰＩのデータより１つ前の第２の権限要求ＡＰＩのデータに含まれる特別権限グループと相違する場合に、特別権限に応じて出力されると想定される想定アクセスＡＰＩを規定している権限アクセスルールを格納する権限アクセスルール格納部から、前記特定の権限要求ＡＰＩのデータに含まれる特別権限グループに対応する想定アクセスＡＰＩを抽出し、当該想定アクセスＡＰＩのデータをグループ化して前記想定アクセスＡＰＩ格納部に格納するステップ
を含み、
前記最小権限違反検出ステップが、
前記想定アクセスＡＰＩトレースログ格納部において同一グループの想定アクセスＡＰＩについていずれも実アクセスＡＰＩのデータが対応付けられていない場合に、当該同一グループの想定アクセスＡＰＩに前記想定アクセスＡＰＩデータ格納部において対応付けられている権限要求ＡＰＩのデータを、最小権限違反データ格納部に格納するステップ
を含む、付記１乃至３のいずれか１つ記載のプログラム。
【００９４】
（付記５）
検査対象プログラムから出力された権限要求ＡＰＩのデータを格納する権限要求ＡＰＩトレースログ格納部に格納されている各権限要求ＡＰＩについて、権限要求ＡＰＩが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスＡＰＩを前記権限要求ＡＰＩ毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスＡＰＩを読み出し、当該想定アクセスＡＰＩのデータを前記権限要求ＡＰＩに対応付けて想定アクセスＡＰＩデータ格納部に格納する想定アクセスＡＰＩ生成ステップと、
前記検査対象プログラムから出力された実アクセスＡＰＩのデータを格納する実アクセスＡＰＩトレースログ格納部に格納されている各実アクセスＡＰＩについて、前記想定アクセスＡＰＩデータ格納部において、前記権限要求ＡＰＩトレースログ格納部に格納されている前記権限要求ＡＰＩに対応して出力されたとみなすための所定の条件を満たす想定アクセスＡＰＩを探索し、前記所定の条件を満たす前記想定アクセスＡＰＩが検出された場合には、前記想定アクセスＡＰＩデータ格納部において当該想定アクセスＡＰＩに対応付けられている前記権限要求ＡＰＩに対応付けて、該当する前記実アクセスＡＰＩのデータを、前記権限要求ＡＰＩトレースログ格納部に格納するステップと、
前記権限要求ＡＰＩトレースログ格納部において前記実アクセスＡＰＩのデータが対応付けられていない権限要求ＡＰＩを探索して、検出された権限要求ＡＰＩのデータを、前記最小権限違反データ格納部に格納するステップと、
を、コンピュータに実行させるためのプログラム。
【００９５】
（付記６）
検査対象プログラムから出力された権限要求ＡＰＩのデータを格納する権限要求ＡＰＩトレースログ格納部に格納されている各権限要求ＡＰＩについて、権限要求ＡＰＩが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスＡＰＩを前記権限要求ＡＰＩ毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスＡＰＩを読み出し、当該想定アクセスＡＰＩのデータを前記権限要求ＡＰＩに対応付けて想定アクセスＡＰＩデータ格納部に格納する想定アクセスＡＰＩ生成ステップと、
前記検査対象プログラムから出力された実アクセスＡＰＩのデータを格納する実アクセスＡＰＩトレースログ格納部に格納されている各実アクセスＡＰＩについて、前記想定アクセスＡＰＩデータ格納部において、前記権限要求ＡＰＩトレースログ格納部に格納されている前記権限要求ＡＰＩに対応して出力されたとみなすための所定の条件を満たす想定アクセスＡＰＩを探索し、前記所定の条件を満たす前記想定アクセスＡＰＩが検出された場合には、当該想定アクセスＡＰＩのデータに対応付けて前記実アクセスＡＰＩのデータを前記想定アクセスＡＰＩトレースログ格納部に格納する実アクセスＡＰＩ探索ステップと、
前記想定アクセスＡＰＩトレースログ格納部において前記実アクセスＡＰＩのデータが対応付けられていない想定アクセスＡＰＩを探索して、検出された想定アクセスＡＰＩに前記想定アクセスＡＰＩデータ格納部において対応付けられている権限要求ＡＰＩのデータを、最小権限違反データ格納部に格納する最小権限違反検出ステップと、
を含み、コンピュータに実行される最小権限違反検出方法。
【００９６】
（付記７）
検査対象プログラムから出力された権限要求ＡＰＩのデータを格納する権限要求ＡＰＩトレースログ格納部に格納されている各権限要求ＡＰＩについて、権限要求ＡＰＩが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスＡＰＩを前記権限要求ＡＰＩ毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスＡＰＩを読み出し、当該想定アクセスＡＰＩのデータを前記権限要求ＡＰＩに対応付けて想定アクセスＡＰＩデータ格納部に格納する想定アクセスＡＰＩ生成ステップと、
前記検査対象プログラムから出力された実アクセスＡＰＩのデータを格納する実アクセスＡＰＩトレースログ格納部に格納されている各実アクセスＡＰＩについて、前記想定アクセスＡＰＩデータ格納部において、前記権限要求ＡＰＩトレースログ格納部に格納されている前記権限要求ＡＰＩに対応して出力されたとみなすための所定の条件を満たす想定アクセスＡＰＩを探索し、前記所定の条件を満たす前記想定アクセスＡＰＩが検出された場合には、前記想定アクセスＡＰＩデータ格納部において当該想定アクセスＡＰＩに対応付けられている前記権限要求ＡＰＩに対応付けて、該当する前記実アクセスＡＰＩのデータを、前記権限要求ＡＰＩトレースログ格納部に格納するステップと、
前記権限要求ＡＰＩトレースログ格納部において前記実アクセスＡＰＩのデータが対応付けられていない権限要求ＡＰＩを探索して、検出された権限要求ＡＰＩのデータを、前記最小権限違反データ格納部に格納するステップ
を含み、コンピュータに実行される最小権限違反検出方法。
【００９７】
（付記８）
検査対象プログラムから出力された権限要求ＡＰＩのデータを格納する権限要求ＡＰＩトレースログ格納部に格納されている各権限要求ＡＰＩについて、権限要求ＡＰＩが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスＡＰＩを前記権限要求ＡＰＩ毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスＡＰＩを読み出し、当該想定アクセスＡＰＩのデータを前記権限要求ＡＰＩに対応付けて想定アクセスＡＰＩデータ格納部に格納する想定アクセスＡＰＩ生成手段と、
前記検査対象プログラムから出力された実アクセスＡＰＩのデータを格納する実アクセスＡＰＩトレースログ格納部に格納されている各実アクセスＡＰＩについて、前記想定アクセスＡＰＩデータ格納部において、前記権限要求ＡＰＩトレースログ格納部に格納されている前記権限要求ＡＰＩに対応して出力されたとみなすための所定の条件を満たす想定アクセスＡＰＩを探索し、前記所定の条件を満たす前記想定アクセスＡＰＩが検出された場合には、当該想定アクセスＡＰＩのデータに対応付けて前記実アクセスＡＰＩのデータを前記想定アクセスＡＰＩトレースログ格納部に格納する実アクセスＡＰＩ探索手段と、
前記想定アクセスＡＰＩトレースログ格納部において前記実アクセスＡＰＩのデータが対応付けられていない想定アクセスＡＰＩを探索して、検出された想定アクセスＡＰＩに前記想定アクセスＡＰＩデータ格納部において対応付けられている権限要求ＡＰＩのデータを、最小権限違反データ格納部に格納する最小権限違反検出手段と、
を有する最小権限違反検出装置。
【００９８】
（付記９）
検査対象プログラムから出力された権限要求ＡＰＩのデータを格納する権限要求ＡＰＩトレースログ格納部に格納されている各権限要求ＡＰＩについて、権限要求ＡＰＩが出力された後に前記検査対象プログラムから出力されることが想定されている想定アクセスＡＰＩを前記権限要求ＡＰＩ毎に規定しているオブジェクトアクセスルールを格納するオブジェクトアクセスルール格納部から該当する想定アクセスＡＰＩを読み出し、当該想定アクセスＡＰＩのデータを前記権限要求ＡＰＩに対応付けて想定アクセスＡＰＩデータ格納部に格納する想定アクセスＡＰＩ生成手段と、
前記検査対象プログラムから出力された実アクセスＡＰＩのデータを格納する実アクセスＡＰＩトレースログ格納部に格納されている各実アクセスＡＰＩについて、前記想定アクセスＡＰＩデータ格納部において、前記権限要求ＡＰＩトレースログ格納部に格納されている前記権限要求ＡＰＩに対応して出力されたとみなすための所定の条件を満たす想定アクセスＡＰＩを探索し、前記所定の条件を満たす前記想定アクセスＡＰＩが検出された場合には、前記想定アクセスＡＰＩデータ格納部において当該想定アクセスＡＰＩに対応付けられている前記権限要求ＡＰＩに対応付けて、該当する前記実アクセスＡＰＩのデータを、前記権限要求ＡＰＩトレースログ格納部に格納する手段と、
前記権限要求ＡＰＩトレースログ格納部において前記実アクセスＡＰＩのデータが対応付けられていない権限要求ＡＰＩを探索して、検出された権限要求ＡＰＩのデータを、前記最小権限違反データ格納部に格納する手段と、
を有する最小権限違反検出装置。
【符号の説明】
【００９９】
１００  ユーザインタフェース部    １１０  ＡＰＩサンプリング部
１３１  権限要求ＡＰＩサンプリングルール格納部
１３２  アクセス実行ＡＰＩサンプリングルール格納部
１３３  権限要求ＡＰＩトレースログ格納部
１３４  実アクセスＡＰＩトレースログ格納部
１３５  オブジェクトアクセスルール格納部
１３６  権限アクセスルール格納部
１３７  想定アクセスＡＰＩリスト格納部
１３８  判定結果格納部
【図１】
2010176167.tif 000003
【図２】
2010176167.tif 000004
【図３】
2010176167.tif 000005
【図４】
2010176167.tif 000006
【図５】
2010176167.tif 000007
【図６】
2010176167.tif 000008
【図７】
2010176167.tif 000009
【図８】
2010176167.tif 000010
【図９】
2010176167.tif 000011
【図１０】
2010176167.tif 000012
【図１１】
2010176167.tif 000013
【図１２】
2010176167.tif 000014
【図１３】
2010176167.tif 000015
【図１４】
2010176167.tif 000016
【図１５】
2010176167.tif 000017
【図１６】
2010176167.tif 000018
【図１７】
2010176167.tif 000019
【図１８】
2010176167.tif 000020
【図１９】
2010176167.tif 000021
【図２０】
2010176167.tif 000022
【図２１】
2010176167.tif 000023
【図２２】
2010176167.tif 000024
【図２３】
2010176167.tif 000025
【図２４】
2010176167.tif 000026
【図２５】
2010176167.tif 000027
【図２６】
2010176167.tif 000028
【図２７】
2010176167.tif 000029
【図２８】
2010176167.tif 000030
【図２９】
2010176167.tif 000031