(57)【特許請求の範囲】
【請求項１】
データの性質を定義した解析規則を記憶する記憶部と、
データフロー解析指示を受け付けると、解析の対象となる解析対象プログラムと、前記
記憶部によって記憶された解析規則とを用いてデータフロー解析を行い、安全でないデー
タが含まれる手続きを検出箇所として抽出する検出箇所抽出手段と、
前記検出箇所抽出手段によって抽出された検出箇所の制御フローグラフを作成し、当該
検出箇所の位置から前記制御フローグラフを逆順に到達可能な手続きを解析規則の候補と
して生成する解析規則候補生成手段と、
前記解析規則候補生成手段によって生成された解析規則の候補を所定の出力部に出力す
る解析規則候補出力手段と、
前記解析規則候補出力手段によって出力された前記解析規則の候補のうち、解析規則と
して追加する解析規則の候補を受け付ける解析規則追加受付手段と、
前記解析規則追加受付手段によって受け付けられた前記解析規則の候補を解析規則とし
て前記記憶部に追加するように設定する追加規則設定手段と、
を備えることを特徴とするデータフロー解析装置。
【請求項２】
前記解析規則候補生成手段は、前記検出箇所の位置より前に呼ばれている手続きから返
値がないものを除外し、残った手続きを解析規則の候補として生成することを特徴とする
請求項１に記載のデータフロー解析装置。
【請求項３】
前記解析規則候補生成手段は、前記解析規則の候補として、安全化手続き定義候補、要
注意手続き候補、無視手続き定義候補のいずれか一つまたは複数を生成することを特徴と
する請求項１または請求項２に記載のデータフロー解析装置。
【請求項４】
コンピュータが実行するデータフロー解析方法であって、
データフロー解析指示を受け付けると、解析の対象となる解析対象プログラムと、デー
タの性質を定義した解析規則を記憶する記憶部によって記憶された解析規則とを用いてデ
ータフロー解析を行い、安全でないデータが含まれる手続きを検出箇所として抽出する検
出箇所抽出工程と、
前記検出箇所抽出工程によって抽出された検出箇所の制御フローグラフを作成し、当該
検出箇所の位置から前記制御フローグラフを逆順に到達可能な手続きを解析規則の候補と
して生成する解析規則候補生成工程と、
前記解析規則候補生成工程によって生成された解析規則の候補を所定の出力部に出力す
る解析規則候補出力工程と、
前記解析規則候補出力工程によって出力された前記解析規則の候補のうち、解析規則と
して追加する解析規則の候補を受け付ける解析規則追加受付工程と、
前記解析規則追加受付工程によって受け付けられた前記解析規則の候補を解析規則とし
て前記記憶部に追加するように設定する追加規則設定工程と、
を前記コンピュータが実行することを特徴とするデータフロー解析方法。
【請求項５】
データフロー解析指示を受け付けると、解析の対象となる解析対象プログラムと、デー
タの性質を定義した解析規則を記憶する記憶部によって記憶された解析規則とを用いてデ
ータフロー解析を行い、安全でないデータが含まれる手続きを検出箇所として抽出する検
出箇所抽出手順と、
前記検出箇所抽出手順によって抽出された検出箇所の制御フローグラフを作成し、当該
検出箇所の位置から前記制御フローグラフを逆順に到達可能な手続きを解析規則の候補と
して生成する解析規則候補生成手順と、
前記解析規則候補生成手順によって生成された解析規則の候補を所定の出力部に出力す
る解析規則候補出力手順と、
前記解析規則候補出力手順によって出力された前記解析規則の候補のうち、解析規則と
して追加する解析規則の候補を受け付ける解析規則追加受付手順と、
前記解析規則追加受付手順によって受け付けられた前記解析規則の候補を解析規則とし
て前記記憶部に追加するように設定する追加規則設定手順と、
をコンピュータに実行させることを特徴とするデータフロー解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データの性質を定義した解析規則を用いて、解析の対象となる解析対象プログラムのデータフロー解析を行い、安全でないデータが含まれる手続きを検出箇所として出力するデータフロー解析装置、データフロー解析方法およびデータフロー解析プログラムに関する。
【背景技術】
【０００２】
従来より、解析の対象となる解析対象プログラムからプログラム内の誤った処理を防止するために、バグ（例えば、セキュリティバグ）を発見する必要がある（特許文献１参照）。このようなバグを発見する方法のうち、主にインジェクション系のセキュリティバグの発見する方法として、セキュリティバグのデータフロー解析が利用されていることが知られている。
【０００３】
このようなインジェクション系のセキュリティバグは、要注意手続き引数に入力値が渡される可能性があるプログラムに潜在する。また、ここで要注意手続き引数とは、出力内容や出力先指定をする手続きの引数のことである。
【０００４】
このインジェクション系のセキュリティバグでは、図１４に例示すように、要注意手続き引数であるデータ「ｓ」に、入力値「（ｉｎｐｕｔ（））」が渡されるため問題となる。つまり、入力値として「｜」や「；」などのメタ文字が含まれると、任意のコマンド指定ができてしまう可能性があるからである。
【０００５】
このようなバグの発見のために利用されるデータフロー解析装置は、データの性質などに関する定義をした解析規則に従ってデータフロー解析を行う。セキュリティバグのデータフロー解析装置では、引数が安全でなければ問題有りとして報告する要注意手続き引数を定義した「要注意手続き定義」と、手続きの返値を安全としてみなす安全化手続き（つまり、返値を安全とみなす手続き）を定義した「安全化手続き定義」とが解析規則として用いられる。これらの解析規則は、ユーザが手続きを入力して作成されている。例えば、Ｊａｖａ（登録商標）言語では、完全限定型名、手続き名、引数群が入力されて解析規則が作成される。
【０００６】
つまり、データフロー解析装置は、対象プログラムとこれらの解析規則を入力とし、報告すべき検出箇所を出力する。例えば、「exec(...)」を要注意手続きにすると、図１５に例示するように、要注意手続き引数に安全でないデータ「input()」が含まれているからである。また、「exec(...)」を要注意手続きに、さらに「check(...)」を安全化手続きとして追加して解析させると、図１６に示すように、要注意手続き引数は、安全であるとして、何も報告されなくなる。
【０００７】
【特許文献１】特開平６−３３２７５０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ところで、上記した従来の技術では、解析規則を作成するために、ユーザが手続きを紛れなく入力する必要があるので、解析規則の作成は入力の手間がかかるという課題があった。また、対象プログラム毎に「安全」の意味が異なり、対象プログラム毎に、適した解析規則を作成する必要があるので、解析規則の作成は入力の手間がかかるという課題があった。
【０００９】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、解析規則を作成する手間を軽減することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、この装置は、データの性質を定義した解析規則を用いて、解析の対象となる解析対象プログラムのデータフロー解析を行い、安全でないデータが含まれる手続きを検出箇所として出力するデータフロー解析装置であって、前記検出箇所に基づいて、解析規則の候補を生成する解析規則候補生成手段と、前記解析規則候補生成手段によって生成された解析規則候補を所定の出力部に出力する解析規則候補出力手段と、を備えることを要件とする。
【００１１】
また、この方法は、データの性質を定義した解析規則を用いて、解析の対象となる解析対象プログラムのデータフロー解析を行い、安全でないデータが含まれる手続きを検出箇所として出力するデータフロー解析方法であって、前記検出箇所に基づいて、解析規則の候補を生成する解析規則候補生成工程と、前記解析規則候補生成工程によって生成された解析規則候補を所定の出力部に出力する解析規則候補出力工程と、を含んだことを要件とする。
【００１２】
また、このプログラムは、データの性質を定義した解析規則を用いて、解析の対象となる解析対象プログラムのデータフロー解析を行い、安全でないデータが含まれる手続きを検出箇所として出力するデータフロー解析方法をコンピュータに実行させるデータフロー解析プログラムであって、前記検出箇所に基づいて、解析規則の候補を生成する解析規則候補生成手順と、前記解析規則候補生成手順によって生成された解析規則候補を所定の出力部に出力する解析規則候補出力手順と、をコンピュータに実行させることを要件とする。
【発明の効果】
【００１３】
開示の装置は、解析規則の追加案を自動提案するので、解析規則の作成の手間を軽減する効果を奏する。
【発明を実施するための最良の形態】
【００１４】
以下に添付図面を参照して、この発明に係るデータフロー解析装置、データフロー解析方法およびデータフロー解析プログラムの実施例を詳細に説明する。
【実施例１】
【００１５】
以下の実施例では、実施例１に係るデータフロー解析装置の概要および特徴、データフロー解析装置の構成および処理の流れを順に説明し、最後に実施例１による効果を説明する。
【００１６】
［実施例１に係るデータフロー解析装置の概要および特徴］
まず最初に、図１を用いて、実施例１に係るデータフロー解析装置の概要および特徴を説明する。図１は、実施例１に係るデータフロー解析装置の概要および特徴を説明するための図である。なお、以下では、主に安全化手続きの追加規則候補を生成する場合を説明する。
【００１７】
実施例１のデータフロー解析装置１０では、データの性質を定義した解析規則を用いて、解析の対象となる解析対象プログラムのデータフロー解析を行い、安全でないデータが含まれる手続きを検出箇所として出力することを概要とする。そして、このデータフロー解析装置１０では、解析規則の作成の手間を軽減する点に主たる特徴がある。なお、以下では、「ｓｕｐｐｒｅｓｓｉｏｎ」は、無視手続き定義候補であり、「ｏｕｔｐｕｔ」は、要注意手続き定義候補であり、「ｃｏｎｓｔａｎｔ」は、安全化手続き定義候補を示すものとする（後に、詳述する）。
【００１８】
この主たる特徴について具体的に説明すると、データフロー解析装置１０は、解析対象プログラムと解析規則から検出箇所を抽出する（図１の（１）参照）。図１の例を用いて説明すると、データフロー解析装置１０は、解析規則を用いて、安全でないデータが含まれる手続きである検出箇所「"com.example.C2#p(java.lang.String,int)","14"」を解析対象プログラムから抽出する。
【００１９】
そして、データフロー解析装置１０は、抽出された検出箇所に基づいて、追加規則候補を生成する（図１の（２）参照）。具体的には、データフロー解析装置１０は、検出箇所の手続きの制御フローグラフを作成し、検出箇所の位置から制御フローグラフを逆順に到達可能なノードのうち、手続き呼び出しを全て抽出する。そして、データフロー解析装置１０は、抽出された手続き群のなかから、手続き呼び出しを全て抽出する。続いて、データフロー解析装置１０は、抽出された手続き群のうち、重複しているもの、すでに解析規則に安全化手続き定義として存在するもの、返値がないものを全て除外し、残った手続き群を追加規則候補として生成する。
【００２０】
その後、データフロー解析装置１０は、生成された追加規則候補を表示する（図１の（３）参照）。具体的には、データフロー解析装置１０は、図１に例示するように、「ｃｏｎｓｔａｎｔ」の枠中のリストのいくつかを選択し、ボタン「選択中の手続きをｃｏｎｓｔａｎｔに追加」を押すと、選択した手続きを安全化手続きとし、安全化手続き定義が新解析規則として追加される。
【００２１】
このように、データフロー解析装置１０は、解析規則の追加案を自動提案する結果、上記した主たる特徴のごとく、解析規則の作成の手間を軽減することが可能である。
【００２２】
［データフロー解析装置の構成］
次に、図２を用いて、図１に示したデータフロー解析装置１０の構成を説明する。図２は、実施例１に係るデータフロー解析装置１０の構成を示すブロック図である。同図に示すように、このデータフロー解析装置１０は、入力部１１、出力部１２、制御部１３、記憶部１４を備える。以下にこれらの各部の処理を説明する。
【００２３】
入力部１１は、データフロー解析を開始する指示、追加規則候補を選択して新解析規則として追加する指示などを入力するものであり、キーボードやマウスなどを備えて構成される。また、出力部１２は、検出箇所や追加規則候補を表示するものであり、モニタ（若しくはディスプレイ、タッチパネル）やスピーカを備えて構成される。例えば、出力部１２は、図７および図１０に示すように、検出箇所や追加規則候補を出力する（後に詳述）。
【００２４】
記憶部１４は、制御部１３による各種処理に必要なデータおよびプログラムを格納するが、特に本発明に密接に関連するものとしては、解析対象記憶部１４ａおよび解析規則記憶部１４ｂを備える。
【００２５】
解析対象記憶部１４ａは、解析の対象となる解析対象プログラムを記憶する。具体的な例を挙げて説明すると、解析対象記憶部１４ａは、図３に例示するように、手続き「com.example.C2#p(java.lang.String,int)」のＪａｖａバイトコードを記憶している。
【００２６】
また、図３では、「Ｃｏｄｅ」で示される領域の各行の始めに記された整数値は、バイトコードに対応し、「Ｅｘｃｅｐｔｉｏｎ  ｔａｂｌｅ」で示される領域の各行は、例外時の遷移の定義データに対応している。例えば、「４  ８０  ８３  Ｃｌａｓｓ  ｊａｖａ／ｌａｎｇ／ＩｎｔｅｒｒｕｐｔｅｄＥｘｃｅｐｔｉｏｎ」は、「位置４以上８０未満で、型ｊａｖａ．ｌａｎｇ．ＩｎｔｅｒｒｕｐｔｅｄＥｘｃｅｐｔｉｏｎおよびそのサブタイプの例外が起こった場合、制御を位置８３に移せと読む。
【００２７】
また、解析対象記憶部１４ａは、図４に例示するように解析対処プログラムのソースコードを記憶する。図４に例示する解析対処プログラムのソースコードは、図３に例示するバイトコードに対応するものである。
【００２８】
解析規則記憶部１４ｂは、データの性質を定義した解析規則を記憶する。具体的には、解析規則記憶部１４ｂは、解析規則として、無視手続き（環境によらず安全とみなす手続き）を定義した規則でその手続きでの問題は報告しない無視手続き定義「ｓｕｐｐｒｅｓｓｉｏｎ」と、要注意手続き引数を定義した規則で引数が安全でなければ問題有りとして報告する要注意手続き定義「ｏｕｔｐｕｔ」と、安全化手続き（返値を安全とみなす手続き）を定義した規則でその手続きの返値を安全とみなす安全化手続き定義「ｃｏｎｓｔａｎｔ」を記憶する。
【００２９】
具体的な例を挙げて説明すると、図５に例示するように、解析規則記憶部１４ｂに記憶される解析規則は、書式がＣＳＶ方式で、解析規則の各列データは、規則の種類を示す「規則種類」、手続き名（完全限定名や引数群を含む）を示す「手続き指定」、引数の序数群である「引数指定」を示している。例えば、「"output","java.lang.Runtime#exec(java.lang.String)","1"」は、Javaの標準ライブラリjava.lang.RuntimeのＯＳコマンドを発行する手続きexec(java.lang.String)の第１引数を要注意手続き引数として定義したものである。なお、二重引用符「"」はＣＳＶ形式で列データの区切りを明確化するものである。
【００３０】
制御部１３は、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行するが、特に本発明に密接に関連するものとしては、プログラム解析部１３ａ、追加規則候補生成部１３ｂ、追加規則提案部１３ｃ、追加規則設定部１３ｄを備える。
【００３１】
プログラム解析部１３ａは、解析対象記憶部１４ａに記憶された解析対象プログラムと、解析規則記憶部１４ｂに記憶された解析規則とを用いてデータフロー解析を行い、問題がある検出箇所を抽出する。具体的には、プログラム解析部１３ａは、図６に例示すように、検出箇所として、「"com.example.C2#p(java.lang.String,int)","14"」を抽出し、追加規則候補生成部１３ｂに通知する。この検出箇所の書式もＣＳＶ形式で、各列データは、検出箇所に対応する手続きの名前である「手続き名」と、検出箇所に対応する手続き内の場所でありＪａｖａクラスファイルではバイトコード位置である「手続き内箇所」とを示す。
【００３２】
その後、プログラム解析部１３ａは、図７に例示するように、検出箇所を表示する。図７の例では、検出箇所が二つ表示されており、いずれかの検出箇所をユーザに選択させ、選択された検出箇所に基づいて、後に説明する追加規則候補生成部１３ｂが解析規則の候補を生成する。
【００３３】
また、プログラム解析部１３ａは、Ｊａｖａのような言語のデータフロー解析を行う方法として、公知のデータフロー解析方法を用いる（例えば、「横森励士「オブジェクト指向プログラムにおけるセキュリティ解析アルゴリズムの提案と実現」（修士学位論文）、大阪大学、２００１年」参照）。
【００３４】
上記のような公知のデータフロー解析方法の入出力要件を満たすようにするために、Ｊａｖａクラスファイルを解析して、要注意手続きを「出力に対応するメソッド」にし、安全化手続き以外の全ての手続きを「入力に対応するメソッド」にする（ただし、クラスファイルで文字列の連結に使われる手続き（java.lang.StringBuilderなどのメソッド）はそうしない）。そして、プログラム解析部１３ａは、「メソッド呼び出し文」の処理を、安全化手続きの返値が「ｌｏｗ」にするように拡張し、出力が無視手続き以外かつ「ｈｉｇｈ」のもののみとし、検出箇所の書式で行う。
【００３５】
追加規則候補生成部１３ｂは、出された検出箇所に基づいて、追加規則候補を生成する。具体的には、追加規則候補生成部１３ｂは、検出箇所の手続きの制御フローグラフを作成し、検出箇所の位置から制御フローグラフを逆順に到達可能なノードのうち、手続き呼び出しを全て抽出する。そして、追加規則候補生成部１３ｂは、抽出した手続き群のうち、手続き呼び出しを全て抽出し、抽出した手続き群のうち、重複しているもの、すでに解析規則に安全化手続き定義として存在するもの、返値がないものを全て除外し、残った手続き群を追加規則候補として生成し、追加規則提案部１３ｃに通知する。
【００３６】
ここで、図８を用いて制御フローグラフからの手続き抽出を説明する。同図に示すように、追加規則候補生成部１３ｂは、検出箇所の手続きの制御フローグラフを作成する。そして、追加規則候補生成部１３ｂは、検出箇所の該当位置「１４」から制御フローグラフを逆順に到達可能なノードのうち、手続き呼び出しを全て抽出している。これは、要注意手続き呼び出しである該当位置「１４」より前に呼ばれている手続き呼び出しを抽出することに相当する。図４の例では、抽出したノードを色付けし、そのうち手続き呼び出しのノードを黒に色付けしている。
【００３７】
さらに、追加規則候補の生成について図９を用いて具体的に説明する。同図に示すように、追加規則候補生成部１３ｂは、抽出した手続き群のうち、重複しているもの、すでに解析規則に安全化手続き定義として存在するもの、返値がないものを全て除外する。つまり、図９の例では、追加規則候補生成部１３ｂは、「ｊａｖａ．ｌａｎｇ．Ｓｙｓｔｅｍ＃ｃｕｒｒｅｎｔＴｉｍｅＭｉｌｌｉｓ（）」が既に解析規則に安全化手続き定義として存在している（図５参照）として除外し、また、「ｊａｖａ．ｌａｎｇ．Ｐｒｏｃｅｓｓ＃ｄｅｓｔｒｏｙ（）」については返値がない（ｖｏｉｄ型）なので除外する。そして、追加規則候補生成部１３ｂは、残った手続き群を追加規則候補として生成する。
【００３８】
追加規則提案部１３ｃは、生成された追加規則候補を出力部１２に表示する。具体的には、追加規則提案部１３ｃは、図１０に例示するように、生成された追加規則候補を表示する。そして、追加規則提案部１３ｃは、「ｃｏｎｓｔａｎｔ」の枠中のリストのいくつか選択され、ボタン「選択中の手続きをｃｏｎｓｔａｎｔに追加」が押されると、選択した手続きを安全化手続きとし、安全化手続き定義が新解析規則として追加される。また、ｓｕｐｐｒｅｓｓｉｏｎの枠中のボタン「この手続きをｓｕｐｐｒｅｓｓｉｏｎに追加」を押すと、次の無視手続き定義が新解析規則として追加される。
【００３９】
追加規則提案部１３ｃは、ｏｕｔｐｕｔの枠中の数字が書かれたチェックボックスにチェックが入れられ、ボタン「この手続きをｏｕｔｐｕｔに追加」が押されると、チェックされた数字を引数群とした、要注意手続き定義が新解析規則として追加される。
【００４０】
追加規則設定部１３ｄは、追加規則候補を新解析規則として追加する。具体的には、追加規則設定部１３ｄは、追加規則候補を新解析規則として追加する指示を受け付けると（図１０参照）、追加規則候補を新解析規則として追加するように設定する。
【００４１】
［データフロー解析装置による処理］
次に、図１１および図１２を用いて、実施例１に係るデータフロー解析装置１０による処理を説明する。図１１は、実施例１に係るデータフロー解析装置１０の処理動作を示すフローチャートであり、図１２は、実施例１に係るデータフロー解析装置の追加規則候補生成処理の手順を説明するためのフローチャートである。
【００４２】
図１１に示すように、データフロー解析装置１０は、データフロー解析指示を受け付けると（ステップＳ１０１肯定）、解析対象プログラムと解析規則から検出箇所を抽出する（ステップＳ１０２）。そして、データフロー解析装置１０は、抽出された検出箇所に基づいて、追加規則候補を生成する追加規則候補生成処理（後に、図１２を用いて詳述）を行う（ステップＳ１０３）。
【００４３】
そして、データフロー解析装置１０は、生成された追加規則候補を表示し（ステップＳ１０４）、追加規則候補を新解析規則として追加する指示を受け付けると（ステップＳ１０５肯定）、追加規則候補を新解析規則として追加するように設定する（ステップＳ１０６）。
【００４４】
続いて、図１２を用いてデータフロー解析装置１０の追加規則候補生成処理の手順を説明する。同図に示すように、データフロー解析装置１０は、一つの検出箇所を受け付けると（ステップＳ２０１）、検出箇所の手続きの制御フローグラフを作成し（ステップＳ２０２）、検出箇所の位置から制御フローグラフを逆順に到達可能なノードのうち、手続き呼び出しを全て抽出する（ステップＳ２０３）。
【００４５】
そして、データフロー解析装置１０は、抽出した手続き群のうち、手続き呼び出しを全て抽出し、抽出した手続き群のうち、重複しているもの、すでに解析規則に安全化手続き定義として存在するもの、返値がないものを全て除外し（ステップＳ２０４）、残った手続き群を追加規則候補として生成する（ステップＳ２０５）。
【００４６】
[実施例１の効果]
上述してきたように、データフロー解析装置１０は、検出箇所に基づいて、解析規則の候補を生成し、生成された解析規則候補を出力部１２に出力するので、解析規則の追加案を自動提案する結果、解析規則の作成の手間を軽減することが可能である。
【実施例２】
【００４７】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では実施例２として本発明に含まれる他の実施例を説明する。
【００４８】
（１）システム構成等
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、プログラム解析部１３ａおよび追加規則候補生成部１３ｂを統合してもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００４９】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００５０】
（２）プログラム
ところで、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをコンピュータで実行することによって実現することができる。そこで、以下では、図１３を用いて、上記の実施例と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図１３は、データフロー解析プログラムを実行するコンピュータを示す図である。
【００５１】
同図に示すように、データフロー解析装置としてのコンピュータ６００は、入力部１１、出力部１２、ＨＤＤ６１０、ＲＡＭ６２０、ＲＯＭ６３０およびＣＰＵ６４０をバス６５０で接続して構成される。
【００５２】
そして、ＲＯＭ６３０には、上記の実施例と同様の機能を発揮するデータフロー解析装置、つまり、図１３に示すように、プログラム解析プログラム６３１、追加規則候補生成プログラム６３２、追加規則提案プログラム６３３、追加規則設定プログラム６３４が予め記憶されている。なお、プログラム６３１〜６３４については、図２に示したデータフロー解析装置の各構成要素と同様、適宜統合または分散してもよい。
【００５３】
そして、ＣＰＵ６４０が、これらのプログラム６３１〜６３４をＲＯＭ６３０から読み出して実行することで、図１３に示すように、各プログラム６３１〜６３４は、プログラム解析プロセス６４１、追加規則候補生成プロセス６４２、追加規則提案プロセス６４３、追加規則設定プロセス６４４として機能するようになる。各プロセス６４１〜６４５は、図２に示したプログラム解析部１３ａ、追加規則候補生成部１３ｂ、追加規則提案部１３ｃ、追加規則設定部１３ｄにそれぞれ対応する。
【００５４】
また、ＨＤＤ６１０には、図１３に示すように、解析対象テーブル６１１および解析規則テーブル６１２が設けられる。なお、解析対象テーブル６１１および解析規則テーブル６１２は、図２に示した解析対象記憶部１４ａおよび解析規則記憶部１４ｂに対応する。そして、ＣＰＵ６４０は、解析対象テーブル６１１および解析規則テーブル６１２に対してデータを登録するとともに、解析対象テーブル６１１および解析規則テーブル６１２から解析対象データ６２１および解析規則データ６２２を読み出してＲＡＭ６２０に格納し、ＲＡＭ６２０に格納された解析対象データ６２１および解析規則データ６２２に基づいて処理を実行する。
【００５５】
（付記１）データの性質を定義した解析規則を用いて、解析の対象となる解析対象プログラムのデータフロー解析を行い、安全でないデータが含まれる手続きを検出箇所として出力するデータフロー解析装置であって、
前記検出箇所に基づいて、解析規則の候補を生成する解析規則候補生成手段と、
前記解析規則候補生成手段によって生成された解析規則候補を所定の出力部に出力する解析規則候補出力手段と、
を備えることを特徴とするデータフロー解析装置。
【００５６】
（付記２）前記解析規則候補生成手段は、前記検出箇所の制御フローグラフを作成し、当該検出箇所の位置より前に呼ばれている手続きを解析規則の候補として生成することを特徴とする付記１に記載のデータフロー解析装置。
【００５７】
（付記３）前記解析規則候補生成手段は、前記検出箇所の位置より前に呼ばれている手続きから返値がないものを除外し、残った手続きを解析規則の候補として生成することを特徴とする付記２に記載のデータフロー解析装置。
【００５８】
（付記４）前記解析規則候補生成手段は、前記解析規則の候補として、安全化手続き定義候補、要注意手続き候補および無視手続き定義候補のいずれか一つまたは複数を生成することを特徴とする付記１〜３のいずれか一つに記載のデータフロー解析装置。
【００５９】
（付記５）前記解析規則候補出力手段によって出力された前記解析規則候補のうち、解析規則として追加する解析規則候補を受け付ける解析規則追加受付手段と、
前記解析規則追加受付手段によって受け付けられた前記解析規則候補を解析規則として追加するように設定する追加規則設定手段と、
をさらに備えることを特徴とする付記１〜４のいずれか一つに記載のデータフロー解析装置。
【００６０】
（付記６）データの性質を定義した解析規則を用いて、解析の対象となる解析対象プログラムのデータフロー解析を行い、安全でないデータが含まれる手続きを検出箇所として出力するデータフロー解析方法であって、
前記検出箇所に基づいて、解析規則の候補を生成する解析規則候補生成工程と、
前記解析規則候補生成工程によって生成された解析規則候補を所定の出力部に出力する解析規則候補出力工程と、
を含んだことを特徴とするデータフロー解析方法。
【００６１】
（付記７）データの性質を定義した解析規則を用いて、解析の対象となる解析対象プログラムのデータフロー解析を行い、安全でないデータが含まれる手続きを検出箇所として出力するデータフロー解析方法をコンピュータに実行させるデータフロー解析プログラムであって、
前記検出箇所に基づいて、解析規則の候補を生成する解析規則候補生成手順と、
前記解析規則候補生成手順によって生成された解析規則候補を所定の出力部に出力する解析規則候補出力手順と、
をコンピュータに実行させることを特徴とするデータフロー解析プログラム。
【産業上の利用可能性】
【００６２】
以上のように、本発明に係るデータフロー解析装置、データフロー解析方法およびデータフロー解析プログラムはデータの性質を定義した解析規則を用いて、解析の対象となる解析対象プログラムのデータフロー解析を行い、安全でないデータが含まれる手続きを検出箇所として出力する場合に有用であり、特に、解析規則を作成する手間を軽減することに適する。
【図面の簡単な説明】
【００６３】
【図１】実施例１に係るデータフロー解析装置の概要および特徴を説明するための図である。
【図２】実施例１に係るデータフロー解析装置の構成を示すブロック図である。
【図３】解析対象プログラムの例（ＪＡＶＡバイトコード）を説明するための図である。
【図４】解析対象プログラムのソースコード例（ＪＡＶＡソースコード）を説明するための図である。
【図５】解析規則の一例を説明するための図である。
【図６】検出箇所の一例を説明するための図である。
【図７】検出箇所の表示例を説明するための図である。
【図８】制御フローグラフからの抽出の例を説明するための図である。
【図９】追加規則候補として生成するデータを説明するための図である。
【図１０】追加規則候補の表示例を説明するための図である。
【図１１】実施例１に係るデータフロー解析装置の処理動作を示すフローチャートである。
【図１２】実施例１に係るデータフロー解析装置の追加規則候補生成処理の手順を説明するためのフローチャートである。
【図１３】データフロー解析プログラムを実行するコンピュータを示す図である。
【図１４】従来の技術を説明するための図である。
【図１５】従来の技術を説明するための図である。
【図１６】従来の技術を説明するための図である。
【符号の説明】
【００６４】
１０  データフロー解析装置
１１  入力部
１２  出力部
１３  制御部
１３ａ  プログラム解析部
１３ｂ  追加規則候補生成部
１３ｃ  追加規則提案部
１３ｄ  追加規則設定部
１４  記憶部
１４ａ  解析対象記憶部
１４ｂ  解析規則記憶部
【図１】
0005176478.tif 000002
【図２】
0005176478.tif 000003
【図３】
0005176478.tif 000004
【図４】
0005176478.tif 000005
【図５】
0005176478.tif 000006
【図６】
0005176478.tif 000007
【図７】
0005176478.tif 000008
【図８】
0005176478.tif 000009
【図９】
0005176478.tif 000010
【図１０】
0005176478.tif 000011
【図１１】
0005176478.tif 000012
【図１２】
0005176478.tif 000013
【図１３】
0005176478.tif 000014
【図１４】
0005176478.tif 000015
【図１５】
0005176478.tif 000016
【図１６】
0005176478.tif 000017