(57)【特許請求の範囲】
【請求項１】
評価対象となるプログラムの情報セキュリティ上の脆弱性の有無を評価する脆弱性分析装置であって、
プログラム情報の脆弱性の存在の判定が可能なアタック判定位置からプログラム情報の開始位置までの経路情報であって、プログラム情報上の分岐によって分割して導出される経路の情報であり、プログラム情報の各処理を、処理順に保持する単一経路情報を導出する単一経路導出部と、
前記単一経路情報を前記開始位置から前記アタック判定位置まで解析し、プログラム情報上の分岐条件と分岐結果の情報から実値の値域を限定する実値範囲情報を導出する変数解析部と、
入力変数情報が指定されている場合に前記入力変数情報に対応する仮想アドレスおよび前記仮想アドレスに対応する入力フラグを設定し、前記入力変数情報の実値情報を前記仮想アドレスの実値フィールドに記憶し、および、前記変数解析部から通知された実値範囲情報に対応する仮想アドレスを取得し、前記仮想アドレスの実値範囲フィールドに前記実値範囲情報を記憶するメモリ編集部と、
前記アタック判定位置におけるアタック成立条件において用いられている変数情報を抽出し、前記変数情報に対応する仮想アドレスを取得し、前記仮想アドレスに対応する実値情報および実値範囲情報を取得し、前記仮想アドレスに入力フラグが設定されている場合に、前記実値範囲情報によって実値情報を限定した限定入力実値情報を算出し、前記限定入力実値情報が前記アタック成立条件を満たしているか否かを判定し、前記仮想アドレスに入力フラグが設定されていない場合に、前記仮想アドレスに対応する実値情報が前記アタック成立条件を満たしているか否かを判定する脆弱性成立判定部を含む脆弱性分析装置。
【請求項２】
前記アタック成立条件は前記プログラム情報で用いられることが可能な変数情報を用いた論理式で表現される請求項１に記載の脆弱性分析装置。
【請求項３】
前記入力変数情報は、評価対象となるプログラムが、プログラムの外部から入力される情報を保持するための変数を含む変数情報であり、前記変数情報は、変数、直接的なメモリ上のアドレス値、共用体、構造体、配列を含む情報である請求項１または２に記載の脆弱性分析装置。
【請求項４】
前記メモリ編集部は、前記変数情報に対応する仮想アドレス領域の前後の仮想アドレスにｎｕｌｌフラグを設定する請求項３に記載の脆弱性分析装置。
【請求項５】
前記脆弱性成立判定部は、前記アタック成立条件が満たされている場合に、入力フラグを持つすべての前記仮想アドレスを抽出し、前記仮想アドレスの実値フィールドの値を入力実値情報とし、前記入力実値情報に対応する実値範囲情報フィールドの値によって限定された値を限定入力実値情報とし、前記限定入力実値情報が前記実値フィールドの値に存在しない場合には、前記限定入力実値情報を出力しない請求項１に記載の脆弱性分析装置。
【請求項６】
前記脆弱性成立判定部において前記アタック成立条件が満たされていない場合には、前記変数解析部はその他の単一経路情報がある場合には前記その他の単一経路情報について解析を続行し、前記脆弱性成立判定部は解析された前記その他の単一経路情報について前記アタック成立条件が満たされているか否かを判定する請求項１から５のいずれか一項に記載の脆弱性分析装置。
【請求項７】
前記メモリ編集部は、前記実値範囲情報に使用される変数情報に対応する仮想アドレスに入力フラグが設定されていない場合には、前記変数情報を経路矛盾判定部に通知し、前記経路矛盾判定部は、前記変数情報に対応する仮想アドレスを持つレコードの実値フィールドに含まれる実値情報が、当該仮想アドレスを持つレコードの実値範囲フィールドに含まれる実値範囲情報に含まれない場合には、論理的な矛盾があることを示す矛盾発生通知を前記変数解析部に通知し、前記変数解析部は論理的な矛盾がある単一経路情報の解析を停止し、他の単一経路情報がある場合には当該他の単一経路情報の解析を開始する請求項１から６のいずれか一項に記載の脆弱性分析装置。
【請求項８】
前記プログラム情報は、プログラムのソースコードまたは制御フローグラフを含むプログラムで実現する機能の処理ロジックおよび手順を含む情報である請求項１から７のいずれか一項に記載の脆弱性分析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムにおける脆弱性を分析する脆弱性分析装置に関する。
【背景技術】
【０００２】
従来から、コンピュータに組み込まれたプログラムに存在するセキュリティ上の脆弱性を検出する方法があり、特許文献１に記載された検出法が提案されている。
【０００３】
特許文献１では、遷移解析部、敵対者状態算出部、協力者状態算出部、および、不利状態算出部等の各要素が脆弱性を検出する手段として含まれる。遷移解析部では、評価対象のプログラムを解析して状態間の遷移関係を求める遷移解析処理を実行する。その際に、ファンクションを呼び出したユーザのユーザ種別に応じて、協力者によって生じる遷移と敵対者による遷移が区別される。次に到達可能性の判定が行われる。協力者による入力の前後には敵対者の任意回の入力が割り込みうる。区別された敵対者の遷移関係および協力者の遷移関係が交互に用いられ、評価条件を満たさない状態に達するか否かが判定される。このように、当該各要素は、入力とする条件や状態から、出力となる状態や状態の集合を算出している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１８−１５６１５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、上記従来技術の開示によれば、実際のプログラムにおける条件を示したとしても、状態の集合を算出するには膨大な計算が必要となり、セキュリティ上の脆弱性を検出することは現実的ではない。すなわち、不正な入力によって、プログラムが特定の不都合な状態に到達する可能性の有無を確認する具体的な方法を提供していないという課題があった。そこで、本発明はこのような課題を解決する手段を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の態様に係わる脆弱性分析装置は、評価対象となるプログラムの情報セキュリティ上の脆弱性の有無を評価する脆弱性分析装置であって、プログラム情報の脆弱性の存在の判定が可能なアタック判定位置からプログラム情報の開始位置までの経路情報であって、プログラム情報上の分岐によって分割して導出される経路の情報であり、プログラム情報の各処理を、処理順に保持する単一経路情報を導出する単一経路導出部と、前記単一経路情報を前記開始位置から前記アタック判定位置まで解析し、プログラム情報上の分岐条件と分岐結果の情報から実値の値域を限定する実値範囲情報を導出する変数解析部と、入力変数情報が指定されている場合に前記入力変数情報に対応する仮想アドレスおよび前記仮想アドレスに対応する入力フラグを設定し、前記入力変数情報の実値情報を前記仮想アドレスの実値フィールドに記憶し、および、前記変数解析部から通知された実値範囲情報に対応する仮想アドレスを取得し、前記仮想アドレスの実値範囲フィールドに前記実値範囲情報を記憶するメモリ編集部と、前記アタック判定位置におけるアタック成立条件において用いられている変数情報を抽出し、前記変数情報に対応する仮想アドレスを取得し、前記仮想アドレスに対応する実値情報および実値範囲情報を取得し、前記仮想アドレスに入力フラグが設定されている場合に、前記実値範囲情報によって実値情報を限定した限定入力実値情報を算出し、前記限定入力実値情報が前記アタック成立条件を満たしているか否かを判定し、前記仮想アドレスに入力フラグが設定されていない場合に、前記仮想アドレスに対応する実値情報が前記アタック成立条件を満たしているか否かを判定する脆弱性成立判定部を含むことが好ましい。
【０００７】
前記アタック成立条件は前記プログラム情報で用いられることが可能な変数情報を用いた論理式で表現されることが好ましい。
【０００８】
前記入力変数情報は、評価対象となるプログラムが、プログラムの外部から入力される情報を保持するための変数を含む変数情報であり、前記変数情報は、変数、直接的なメモリ上のアドレス値、共用体、構造体、配列を含む情報であることが好ましい。
【０００９】
前記メモリ編集部は、前記変数情報に対応する仮想アドレス領域の前後の仮想アドレスにｎｕｌｌフラグを設定することが好ましい。
【００１０】
前記脆弱性成立判定部は、前記アタック成立条件が満たされている場合に、入力フラグを持つすべての前記仮想アドレスを抽出し、前記仮想アドレスの実値フィールドの値を入力実値情報とし、前記入力実値情報に対応する実値範囲情報フィールドの値によって限定された値を限定入力実値情報とし、前記限定入力実値情報が前記実値フィールドの値に存在しない場合には、前記限定入力実値情報を出力しないことが好ましい。
【００１１】
前記脆弱性成立判定部において前記アタック成立条件が満たされていない場合には、前記変数解析部はその他の単一経路情報がある場合には前記その他の単一経路情報について解析を続行し、前記脆弱性成立判定部は解析された前記その他の単一経路情報について前記アタック成立条件が満たされているか否かを判定することが好ましい。
【００１２】
前記メモリ編集部は、前記実値範囲情報に使用される変数情報に対応する仮想アドレスに入力フラグが設定されていない場合には、前記変数情報を経路矛盾判定部（２９０）に通知し、前記経路矛盾判定部は、前記変数情報に対応する仮想アドレスを持つレコードの実値フィールドに含まれる実値情報が、当該仮想アドレスを持つレコードの実値範囲フィールドに含まれる実値範囲情報に含まれない場合には、論理的な矛盾があることを示す矛盾発生通知を前記変数解析部に通知し、前記変数解析部は論理的な矛盾がある単一経路情報の解析を停止し、他の単一経路情報がある場合には当該他の単一経路情報の解析を開始することが好ましい。
【００１３】
前記プログラム情報は、プログラムのソースコードまたは制御フローグラフを含むプログラムで実現する機能の処理ロジックおよび手順を含む情報であることが好ましい。
【発明の効果】
【００１４】
本発明によれば、不正な入力によって、プログラムが特定の不都合な状態に到達する可能性の有無を確認する具体的な方法を提供することが可能となる。
【図面の簡単な説明】
【００１５】
【図１】本実施形態に係わる脆弱性分析装置の構成の一例を示す図である。
【図２】本実施形態に係わる単一経路導出部の構成の一例を示す図である。
【図３】本実施形態に係わる脆弱性分析部の構成の一例を示す図である。
【図４】本実施形態に係わる単一経路導出部の動作の一例を示す図である。
【図５Ａ】本実施形態に係わる変数解析部の動作の一例を示す図である。
【図５Ｂ】本実施形態に係わる変数解析部の図５ＡのステップＳ５０２の動作の一例を示す図である。
【図５Ｃ】本実施形態に係わる変数解析部の図５ＡのステップＳ５０３の動作の一例を示す図である。
【図５Ｄ】本実施形態に係わる変数解析部の図５ＡのステップＳ５０４の動作の一例を示す図である。
【図５Ｅ】本実施形態に係わる変数解析部の図５ＡのステップＳ５０５の動作の一例を示す図である。
【図５Ｆ】本実施形態に係わる変数解析部の図５ＡのステップＳ５０６の動作の一例を示す図である。
【図５Ｇ】本実施形態に係わる変数解析部の図５ＡのステップＳ５０７の動作の一例を示す図である。
【図６Ａ】本実施形態に係わるメモリ編集部の動作の一例を示す図である。
【図６Ｂ】本実施形態に係わるメモリ編集部の図６ＡのステップＳ６０２およびステップＳ６０３の動作の一例を示す図である。
【図６Ｃ】本実施形態に係わるメモリ編集部の図６ＡのステップＳ６０４の動作の一例を示す図である。
【図６Ｄ】本実施形態に係わるメモリ編集部の図６ＡのステップＳ６０５の動作の一例を示す図である。
【図６Ｅ】本実施形態に係わるメモリ編集部の図６ＡのステップＳ６０６の動作の一例を示す図である。
【図６Ｆ】本実施形態に係わるメモリ編集部の図６ＡのステップＳ６０７の動作の一例を示す図である。
【図６Ｇ】本実施形態に係わるメモリ編集部の図６ＡのステップＳ６０８の動作の一例を示す図である。
【図７Ａ】本実施形態に係る変数等が直接的なメモリ上のアドレス値である場合について説明する模式図である。
【図７Ｂ】本実施形態に係る変数等が変数である場合について説明する模式図である。
【図７Ｃ】本実施形態に係る変数等が共用体である場合について説明する模式図である。
【図７Ｄ】本実施形態に係る変数等が構造体である場合について説明する模式図である。
【図７Ｅ】本実施形態に係る変数等が配列である場合について説明する模式図である。
【図８Ａ】本実施形態に係る脆弱性分析部に経路矛盾判定部が追加された一例を示す図である。
【図８Ｂ】本実施形態に係る経路矛盾判定部が追加された場合のメモリ編集部の追加機能の一例を示す図である。
【図８Ｃ】本実施形態に係る経路矛盾判定部の動作の一例を示す図である。
【図８Ｄ】本実施形態に係る経路矛盾判定部の動作の一例を示す図である。
【発明を実施するための形態】
【００１６】
最初に、本実施形態において使用されるいくつかの技術用語および当該技術用語の意味について以下に説明する。
・経路情報：評価対象となるプログラムのソースコード、または、制御フローグラフ等のプログラム情報において、処理フローとして辿る手順と処理の情報。
・単一経路情報：プログラム情報の脆弱性の存在の判定が可能なアタック判定位置からプログラム情報の開始位置までの経路情報であって、プログラム情報上の分岐によって分割して導出される経路の情報であり、プログラム情報の各処理を、処理順に保持する情報。
・アタックポイント情報：以下に説明するアタック判定位置およびアタック成立条件を含む情報。
・アタック判定位置：プログラム情報において、脆弱性の存在の判定が可能な特定の位置。
・アタック成立条件：プログラム情報のアタック判定位置において、脆弱性の存在の有無を判定するための条件であって、プログラム情報において用いられている変数による論理式で表現される条件。
・入力変数：評価対象となるプログラムが実装されるシステムが、当該システムの外部から入力される情報を保持するための変数等。
・変数等：評価対象となるプログラムが情報を保持するためのものであって、変数、直接的なメモリ上のアドレス値、共用体、構造体、配列などが含まれる。
・仮想メモリマップ：プログラムを実行する上で確保する物理メモリへのデータ展開を、仮想的にシミュレートしたメモリ空間および付随情報を保持する情報。仮想メモリマップは、仮想アドレス、実値、実値範囲、物理アドレスなどの情報を有する。なお、仮想メモリマップは、１仮想アドレスにつき１レコードとして管理することが可能である。
・仮想アドレス：仮想メモリマップの一部として保持される情報であり、プログラムを実行する上で確保する物理メモリへのデータ展開を仮想的にシミュレートしたメモリ空間の特定領域を示すための情報。
・プログラム情報：プログラムのソースコード、或いは、制御フローグラフ等であって、プログラムで実現する機能の処理ロジックと手順を読み取ることが可能な情報。
・開始位置：プログラム情報における処理の起点となる位置。ユーザが指定することも可能であり、コンパイラやＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が処理の起点として認識する位置を開始位置することも可能である。
・脱出条件：プログラムのループにおいて、ループを終了させ、ループ外に処理が遷移するための条件。
・分岐結果：プログラム情報における分岐箇所において、ある片方の分岐に処理が遷移するための成立条件のこと。例えば、正となる論理式の形で表現することが可能である。
・変数等のパラメータ情報：プログラムにおいて、変数等を取扱う上で必要となる情報。変数名、変数の型種別などの情報が含まれる。
・実値情報：仮想アドレスマップのレコードで記憶される情報であり、変数等が保持する値を示す情報。
・実値範囲情報：仮想アドレスマップのレコードで記憶される情報であり、プログラムの特定箇所に関連付けられる変数等の実値の閾値を表す情報。
【００１７】
（脆弱性分析装置の概要）
図１に、入力情報が限定される電子装置に実装されるプログラムを評価対象として、不正な入力情報に起因して、プログラムが特定の不都合な状態に到達する可能性があるか否かを判定する、本実施形態に係る脆弱性分析装置１０００の一例を図示する。脆弱性分析装置１０００には単一経路導出部１００および脆弱性分析部２００が含まれる。
【００１８】
図２に単一経路導出部１００の一例を図示する。単一経路導出部１００は、プログラム情報を読み込み、プログラム情報を解析し、アタック判定位置から開始位置までの経路であって、プログラム情報上の分岐によって分割して導出される経路である単一経路情報の全てを生成し、保持する機能を有する。上記機能を実現するために、単一経路導出部１００には、プログラム情報が記憶されるプログラム情報記憶部１１０、単一経路情報の全てを生成する経路生成部１２０、および、生成された全ての単一経路情報を記憶する単一経路情報記憶部１３０が含まれる。
【００１９】
図４に単一経路導出部１００の動作の一例を図示する。
【００２０】
ステップＳ４０１において、経路生成部１２０はプログラム情報記憶部１１０からプログラム情報を入力し、プログラム情報におけるアタック判定位置を特定する。次に、経路生成部１２０はステップＳ４０２に進む。
【００２１】
ステップＳ４０２において、経路生成部１２０はアタック判定位置を起点とし、プログラム情報における各処理を遡る形で各処理を順次読み込むと共に、読み込んだ処理を経路情報として、読み込んだ順に保持する。なお、後述するステップＳ４０３およびステップＳ４０４の処理順番は本実施形態に限定されるわけではなく、経路生成部１２０がプログラム情報上の各処理を遡る順番で実施することが可能である。
【００２２】
ステップＳ４０３において、経路生成部１２０は読み込んだプログラム情報における処理が２分岐である場合、分岐条件が成立する場合と成立しない場合を当該２分岐の分岐結果として持つ経路情報を二つ作成し、それぞれを独立した経路として扱う。また、分岐が３分岐以上の場合であっても、同様に分岐条件の結果を当該分岐における分岐結果として持つ経路情報として分岐結果の数だけ作成し、それぞれを独立した経路情報として扱う。分岐処理以降の遡る形での順次読み込みは、経路情報ごとに行う。
【００２３】
ステップＳ４０４において、経路生成部１２０は読み込んだプログラム情報における処理がループの終端である場合、ループ内における脱出条件の数だけ経路情報を作成する。経路生成部１２０は作成した経路情報に各脱出条件の成立条件を分岐結果として持たせた上で、それぞれを独立した経路情報として扱う。ループ処理以降の遡る形での順次読み込みは、経路情報ごとに行う。
【００２４】
ステップＳ４０５において、経路生成部１２０は読み込んだプログラム情報における処理がプログラムにおける開始位置である場合、当該経路情報を単一経路情報として保持する。単一経路情報になっていない経路情報がある場合は、全ての経路情報が単一経路情報となるまで、経路生成部１２０は単一経路情報の導出処理を続ける。
【００２５】
図３に脆弱性分析部２００の一例を図示する。脆弱性分析部２００は、単一経路導出部１００によって生成された単一経路情報を取得し、ユーザによって指定された入力変数情報、ならびに、アタック判定位置情報およびアタック成立条件情報を含むアタックポイント情報を取得し、評価対象の逐次解析を行う。評価対象の逐次解析では、評価対象の各処理については、以下に詳述する。なお、脆弱性分析部２００は、各処理を通知機能によって通知した後も、評価対象の逐次解析を継続する。
【００２６】
上記機能を実現するために、脆弱性分析部２００には、ユーザによって指定された入力変数情報を記憶する入力変数情報記憶部２１０が含まれる。また、脆弱性分析部２００には、アタック判定位置情報およびアタック成立条件情報を含むアタックポイント情報を記憶するアタックポイント情報記憶部２２０が含まれる。さらに、脆弱性分析部２００には、変数解析部２４０、メモリ編集部２５０、仮想メモリマップ記憶部２６０、変数等テーブル記憶部２７０、脆弱性成立判定部２３０、脆弱性が存在する単一経路情報を記憶する脆弱性単一経路情報記憶部２８０が含まれる。各構成要素の動作は以下に詳述する、
【００２７】
図５Ａに変数解析部２４０の動作の一例を図示する。
【００２８】
ステップＳ５０１において、変数解析部２４０は各単一経路情報の解析を開始する前に、メモリクリアが必要である旨を、メモリ編集部２５０に通知する。メモリクリアが必要である旨の通知は通知Ａと称する場合がある。
【００２９】
ステップＳ５０２において、変数解析部２４０は単一経路情報を単一経路情報記憶部１３０から入力し、入力変数情報を入力変数情報記憶部２１０から入力する。変数解析部２４０は、単一経路情報を解析し、当該単一経路情報が持つ変数等の宣言を認識し、かつ、入力変数情報として当該変数等が指定されていない場合、指定されていない変数等が宣言された事実と変数等のパラメータ情報を、メモリ編集部２５０に通知する。指定されていない変数等が宣言された事実と変数等のパラメータ情報の通知は通知Ｂと称する場合がある。
【００３０】
メモリ編集部２５０は通知Ｂによって入力ではない変数等が正しく宣言されたことを認識することができる。また、メモリ編集部２５０は、正しい宣言に従って仮想メモリマップ上に仮想アドレス領域を確保する準備が整ったことを示すことが可能となる。
【００３１】
ステップＳ５０３において、変数解析部２４０は単一経路情報を解析し、当該単一経路情報が持つ変数等の宣言の記述を認識する。さらに、変数解析部２４０は入力変数情報として当該変数等が指定されている場合、入力変数情報に属する入力変数等が宣言された事実と変数等のパラメータ情報を、メモリ編集部２５０に通知する。入力変数情報に属する入力変数等が宣言された事実と変数等のパラメータ情報の通知を通知Ｃと称する場合がある。
【００３２】
メモリ編集部２５０は通知Ｃによって入力変数等が正しく宣言されたことを認識することができる。また、メモリ編集部２５０は、正しい宣言に従って仮想メモリマップ上に仮想アドレス領域を確保する準備が整ったことを示すことが可能となる。
【００３３】
ステップＳ５０４において、変数解析部２４０は単一経路情報を解析するにしたがって変化する、変数等と紐づけられているメモリ上の値の情報に変化が生じる都度、変化した事実と変化した変数名と変化後の値を、メモリ編集部２５０に通知する。変化した事実と変化した変数名と変化後の値の通知は通知Ｃと称する場合がある。
【００３４】
メモリ編集部２５０は通知Ｃによって単一経路情報におけるプログラム情報における処理フローにおいて、変数が変化していることを認識でき、また、変化後の値を保持する準備が整ったことを知ることが可能となる。
【００３５】
ステップＳ５０５において、変数解析部２４０は単一経路情報を解析する上で、変数等のメモリ領域が解放された場合、メモリ領域が解放された事実と解放された変数等の名前を、メモリ編集部２５０に通知する。メモリ領域が解放された事実と解放された変数等の名前の通知は通知Ｅと称する場合がある。
【００３６】
メモリ編集部２５０は、単一経路情報におけるプログラムフローにおいて、変数が不要であることを認識することができる。また、メモリ編集部２５０は、当該変数を削除する準備が整ったことを知ることが可能となる。
【００３７】
ステップＳ５０６において、変数解析部２４０は単一経路情報を解析する上で、変数等がプログラム情報上で分岐であった箇所の分岐条件に使われている場合、分岐条件と分岐結果の情報から実値の値域を限定する情報である実値範囲情報を導出する。変数解析部２４０は変数等によって分岐している事実、当該変数等の名前、および、実値範囲情報を、メモリ編集部２５０に通知する。変数等によって分岐している事実、当該変数等の名前、および、実値範囲情報の通知は通知Ｆと称する場合がある。実値範囲情報は、分岐条件が分岐結果となるような当該変数の範囲によって導出される情報である。なお、分岐条件として複数の変数等が用いられている場合には、各変数等について、上記処理が変数解析部２４０によって実行される。
【００３８】
メモリ編集部２５０は通知Ｆによって単一経路情報におけるプログラムフローにおいて、分岐が存在していることを認識できる。実値範囲情報によって当該変数が取り得る値の制限範囲を導出することが可能であり、また、メモリ編集部２５０は、当該変数の実値範囲を保持する準備が整ったことを知ることが可能となる。
【００３９】
ステップＳ５０７において、変数解析部２４０は単一経路情報の解析中に、アタック判定位置情報が示す箇所に至った場合、アタックポイント到達の事実および解析中の単一経路情報を特定するための情報を、脆弱性成立判定部２３０に通知する。アタックポイント到達の事実および解析中の単一経路情報を特定するための情報の通知は通知Ｇと称する場合がある。
【００４０】
脆弱性成立判定部２３０は通知Ｇによって、単一経路情報におけるプログラムフローにおいて、脆弱性を判定できる箇所に至ったことを認識できる。また、脆弱性成立判定部２３０は、当該単一経路情報において、脆弱性を判定するための準備が整ったことを知ることが可能となる。
【００４１】
図５ＢはステップＳ５０２の動作の概略を示す模式図である。変数解析部２４０には、変数抽出部２４１、変数チェック部２４２、通知部２４３が含まれる。変数抽出部２４１は、単一経路情報記憶部１３０から単一経路情報を入力し、単一経路情報に含まれる変数等の宣言を認識し、当該変数等を抽出し、変数チェック部２４２に出力する。変数チェック部２４２は、入力変数情報記憶部２１０から入力変数情報を入力する。変数チェック部２４２は、入力変数情報に当該変数等が指定されているか、指定されていないかをチェックする。入力変数情報に当該変数等が指定されていない場合には、変数チェック部２４２は、変数等が宣言された事実、および、変数等のパラメータ情報を、通知Ｂとして通知部２４３に出力する。通知部２４３は、変数チェック部２４２から入力した通知Ｂをメモリ編集部２５０に出力する。
【００４２】
図５ＣはステップＳ５０３の動作の概略を示す模式図である。変数抽出部２４１は、ステップＳ５０２における動作を示している。変数チェック部２４２は、入力変数情報に当該変数等が指定されているか、指定されていないかをチェックする。入力変数情報に当該変数等が指定されている場合には、変数チェック部２４２は、入力変数情報に属する入力変数等が宣言された事実、および、変数等のパラメータ情報を、通知Ｃとして通知部２４３に出力する。通知部２４３は、変数チェック部２４２から入力した通知Ｃをメモリ編集部２５０に出力する。
【００４３】
図５ＤはステップＳ５０４の動作の概略を示す模式図である。変数抽出部２４１は、単一経路情報を解析するにしたがって変化する、変数等と紐づけられているメモリ上の値の情報に変化が生じる都度、変化した事実を示す変数等の変化通知、変数等の新しい値、および、変化した変数名を通知Ｄとして通知部２４３に出力する。通知部２４３は、変数抽出部２４１から入力した通知Ｄをメモリ編集部２５０に出力する。
【００４４】
図５ＥはステップＳ５０５の動作の概略を示す模式図である。変数抽出部２４１は、単一経路情報を解析している場合に、変数等のメモリ領域が解放された場合、メモリ領域が解放された事実を示す変数等の解放通知および解放された変数等の名前を通知Ｅとして通知部２４３に出力する。通知部２４３は、変数抽出部２４１から入力した通知Ｅをメモリ編集部２５０に出力する。
【００４５】
図５ＦはステップＳ５０６の動作の概略を示す模式図である。分岐分析部２４４は、単一経路情報を解析している場合に、変数等がプログラム情報上で分岐である箇所の分岐条件に使われている場合、分岐結果および分岐箇所の分岐条件の情報を抽出する。また、実値範囲導出部２４５は、分岐分析部２４４から入力した分岐結果および分岐箇所の分岐条件の情報から、実値の値域を限定する実値範囲情報を導出する。実値範囲導出部２４５は、変数等を使用して分岐している事実を示す分岐通知、実値範囲情報、および、当該変数等の名前を通知Ｆとして通知部２４３に出力する。通知部２４３は、実値範囲導出部２４５から入力した通知Ｆをメモリ編集部２５０に出力する。なお、分岐条件として複数の変数等が用いられている場合には、各変数等について上記処理を同様に実行する。
【００４６】
図５ＧはステップＳ５０７の動作の概略を示す模式図である。変数抽出部２４１は、アタックポイント情報記憶部２２０からアタックポイント情報を入力する。変数抽出部２４１は、単一経路情報を解析している場合に、アタックポイント情報のアタック判定位置が示す箇所に至ったか否かを判定する。アタック判定位置が示す箇所に至った場合に、変数抽出部２４１は、アタックポイント到達の事実を示すアタックポイント到達通知、および、解析中の単一経路情報を特定するための特定情報を通知Ｇとして通知部２４３に出力する。通知部２４３は、変数抽出部２４１から入力した通知Ｇをメモリ編集部２５０に出力する。
【００４７】
図６Ａにメモリ編集部２５０および脆弱性成立判定部２３０の動作の一例を図示する。
【００４８】
ステップＳ６０１において、メモリ編集部２５０は、変数解析部２４０からの通知Ａに対応して、仮想メモリマップ記憶部２６０及び変数等テーブル記憶部２７０で保持している情報を全て削除する。上記処理を処理Ｈと称する場合がある。処理Ｈによって、仮想メモリマップ記憶部２６０及び変数等テーブル記憶部２７０は新たな単一経路情報の分析を開始するために必要な情報を確保することが可能となる。
【００４９】
ステップＳ６０２において、メモリ編集部２５０は、変数解析部２４０からの通知Ｂに対応して、変数等テーブル記憶部２７０に、各パラメータ情報を元にレコードを作成する。レコードを作成することによって、単一経路情報において、変化していく変数等の値を保持するための場所を作成することが可能となる。また、保持するための場所を作成していない変数等の名前の変数が不正に変化したり参照されたりする場合には、該当する場所が発見できないことで、不正を明らかにすることが可能となる。
【００５０】
ステップＳ６０３において、メモリ編集部２５０は、変数解析部２４０からの通知Ｂに対応して、仮想メモリマップ上に、当該変数等のパラメータ情報から導出可能なメモリ領域量の領域を割り振る。すなわち、メモリ編集部２５０は、上記レコードに仮想アドレスを持たせて、各領域にユニークかつ連続した仮想アドレスを割り当てる。このとき、当該仮想メモリマップ上の領域の前後に、仮想アドレスの1つ分の領域を空けるように割り当てる。割り振った仮想メモリマップ上の領域の前後に空けておいた仮想アドレスのレコードには、ｎｕｌ１フラグ情報を持たせる。確保した仮想アドレスの前後の仮想アドレスにｎｕｌ１フラグを持たせて認識可能とすることで、仮に変数等と紐づけた仮想アドレスから逸脱した仮想アドレスへのアクセスがあった場合に、その逸脱した仮想アドレスであることの判別が可能となる。
【００５１】
変数等テーブル記憶部２７０において、変数等テーブルにおける当該変数等のレコードは、仮想メモリマップ上で割り当てた仮想アドレスのうちで、ｎｕ１１を除いたもっとも小さい仮想アドレスの値を、先頭仮想アドレスとして保持する。ｎｕｌ１で囲まれた領域を1つの変数等と紐づけているため、当該変数等の情報が格納されている場所を一意に特定するための情報を先頭仮想アドレスとして変数等の名前と紐づけて保持することが可能となる。仮想メモリマップ上の領域確保方法、及び、変数等テーブルにおけるレコードの生成方法の例示については、後述する。なお、ステップＳ６０２およびステップＳ６０３の処理を処理Ｉと称する場合がある。
【００５２】
ステップＳ６０４において、メモリ編集部２５０は、変数解析部２４０からの通知Ｃに対応して、通知Ｃに含まれる変数等のパラメータ情報によって仮想メモリマップ上に割り振った仮想アドレスを持つレコードに対して以下の処理を実行する。すなわち、メモリ編集部２５０は、ｎｕ１１フラグを持つ仮想アドレスをもつレコードを除くすべての仮想アドレスを持つレコードについて、入力フラグを持たせる。入力フラグを立てることで入力変数であることを特定でき、また、特定できることによって解析終了後に入力変数が持ちうる範囲を効率的に分析することが可能になる。なお、ステップＳ６０４の処理を処理Ｊと称する場合がある。
【００５３】
ステップＳ６０５において、メモリ編集部２５０は、変数解析部２４０からの通知Ｄに対応して、変数等テーブル記憶部２７０を参照し、通知Ｄに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。仮想メモリマップ上において処理すべきレコードの仮想アドレスを把握する。取得した仮想アドレスを持つレコードの実値フィールドの値として、通知Ｄに含まれる変数等の新しい値を仮想メモリマップにおいて保持する。単一経路情報において、変化していく変数等の値を変数等の名前と紐づけて保持することで、以降の解析で変数等の名前をキーとして参照することが可能になる。なお、ステップＳ６０５の処理を処理Ｋと称する場合がある。
【００５４】
ステップＳ６０６において、メモリ編集部２５０は、変数解析部２４０からの通知Ｅに対応して、変数等テーブル記憶部２７０を参照し、通知Ｅに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。仮想メモリマップ上において処理すべきレコードの仮想アドレスを把握する。メモリ編集部２５０は、取得した仮想アドレスを持つレコード、および、当該レコードの前後に存在するｎｕ１１フラグを持つレコードまでの間の全レコードを、ｎｕ１１フラグを持つレコードを含めて削除する。ここで、間の全レコードとは、仮想アドレスの値を昇順に並べたときにｎｕ１１フラグを持つレコードで挟まれたレコードのすべてという意図である。プログラムにおける以降の処理で利用されないことが宣言された変数等に対して、消された事実を踏まえた処理が可能となる。なお、ステップＳ６０６の処理を処理Ｌと称する場合がある。
【００５５】
ステップＳ６０７において、メモリ編集部２５０は、変数解析部２４０からの通知Ｆに対応して、変数等テーブル記憶部２７０を参照し、通知Ｆに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。仮想メモリマップ上において処理すべきレコードの仮想アドレスを把握する。メモリ編集部２５０は、取得した仮想アドレスを持つ仮想メモリマップ上のレコードの実値範囲フィールドに、通知Ｆに含まれる実値範囲情報を追加保持する。実値範囲情報を設定することで、仮想メモリマップ上の当該レコードが示す仮想アドレスの値として、取り得る範囲を限定することが可能となる。なお、ステップＳ６０７の処理を処理Ｍと称する場合がある。
【００５６】
ステップＳ６０８において、脆弱性成立判定部２３０は、変数解析部２４０からの通知Ｇに対応して、アタックポイント情報記憶部２２０からアタックポイント情報を入力し、アタック成立条件を取得する。脆弱性成立判定部２３０は、アタック成立条件で用いられている変数等の名前を抽出し、各変数等の名前と紐つく先頭仮想アドレスを、変数等テーブル記憶部２７０から取得する。脆弱性成立判定部２３０は、先頭仮想アドレスと紐つく実値情報と実値範囲情報を、仮想メモリマップ記憶部２６０から取得する。脆弱性成立判定部２３０は、当該レコードが入力フラグを持つレコードである場合、当該レコードの実値情報を、当該レコードの実値範囲情報を用いて限定し、限定入力実値情報とする。脆弱性成立判定部２３０は、当該レコードが入力フラグを持つレコードである場合、限定入力実値情報がアタック成立条件を満たしているか否かを判定する。また、脆弱性成立判定部２３０は、当該レコードが入力フラグを持たないレコードである場合、実値情報がアタック成立条件を満たしているか否かを判定する。
【００５７】
なお、アタック成立条件の取得後から、アタック成立条件の判定までは、アタック成立条件で用いられている全ての変数等について脆弱性成立判定部２３０は処理を実施する。何れかの変数等でアタック成立条件を満たしている場合は、後述の「アタック成立条件を満たしている場合」の処理を行い、全ての変数でアタック成立条件を満たしていない場合は、後述の「アタック成立条件を満たしていない場合」の処理を行う。
【００５８】
（アタック成立条件を満たしている場合）
脆弱性成立判定部２３０は、仮想メモリマップ記憶部２６０からすべての入力フラグを持つレコードを抽出し、抽出したレコードの実値フィールドの値を入力実値情報として取得する。入力実値情報は、各入力実値情報と紐づけられるレコードの実値範囲フィールドから取得できる実値範囲情報を用いて値の範囲を限定し、限定入力実値情報とする。このとき、限定入力実値情報が示す値が、範囲が限定されることによって存在しない場合、或いは、仮想メモリマップ上に入力フラグを持つレコードが存在しない場合は、結果出力の際に、限定入力実値情報なしで出力する。なお、アタック成立条件に含まれる変数等と紐づけられた限定入力実値情報は既に前述処理で取得しているため、これ以外の入力フラグを持つレコードについてのみ本処理を実施してもよい。変数解析部２４０より通知された通知Ｇに含まれる単一経路情報特定情報、限定入力実値情報、および、脆弱性が存在する事実を、当該単一経路情報に関する分析結果として出力する。解析していない単一経路情報が存在する場合は、変数解析部２４０の解析を継続し、解析していない単一経路情報が存在しない場合は、解析を終了する。
【００５９】
（アタック成立条件を満たさない場合）
解析していない単一経路情報が存在する場合は、変数解析部２４０の解析を継続し、解析していない単一経路情報が存在しない場合は、解析を終了する。
【００６０】
図６ＢはステップＳ６０２およびステップＳ６０３の動作の概略を示す模式図である。変数解析部２４０は、変数等の宣言通知、および、宣言された変数等のパラメータ情報をメモリ編集部２５０に通知する。レコード編集部２５１は、変数等のパラメータ情報から変数等テーブル記憶部２７０に、各パラメータ情報を元にレコードを作成する。仮想メモリマップ編集部２５２は、仮想メモリマップ上に、当該変数等のパラメータ情報から導出可能なメモリ領域量の領域を割り振る。すなわち、仮想メモリマップ編集部２５２は、上記レコードに仮想アドレスを持たせて、各領域にユニークかつ連続した仮想アドレスを割り当てる。このとき、当該仮想メモリマップ上の領域の前後に、仮想アドレスの1つ分の領域を空けるように割り当てる。割り振った仮想メモリマップ上の領域の前後に空けておいた仮想アドレスのレコードには、ｎｕｌ１フラグ情報を持たせる。確保した仮想アドレスの前後の仮想アドレスにｎｕｌ１フラグを持たせて認識可能とすることで、仮に変数等と紐づけた仮想アドレスから逸脱した仮想アドレスへのアクセスがあった場合に、その逸脱した仮想アドレスであることの判別が可能となる。仮想メモリマップ編集部２５２は、仮想メモリマップ記憶部２６０から変数等毎に先頭仮想アドレスを取得し、レコード編集部２５１は、当該先頭仮想アドレスを変数等テーブル記憶部２７０に記憶する。
【００６１】
図６ＣはステップＳ６０４の動作の概略を示す模式図である。メモリ編集部２５０は、変数解析部２４０からの通知Ｃに対応して、通知Ｃに含まれる入力変数等のパラメータ情報によって仮想メモリマップ上に割り振った仮想アドレスを持つレコードに対して以下の処理を実行する。すなわち、仮想メモリマップ編集部２５２は、ｎｕ１１フラグを持つ仮想アドレスをもつレコードを除くすべての仮想アドレスを持つレコードについて、入力フラグを持たせて、仮想メモリマップ記憶部２６０に記憶する。入力フラグを立てることで入力変数であることを特定でき、また、特定できることによって解析終了後に入力変数が持ちうる範囲を効率的に分析することが可能になる。
【００６２】
図６ＤはステップＳ６０５の動作の概略を示す模式図である。メモリ編集部２５０は、変数解析部２４０からの通知Ｄに対応して、変数等テーブル記憶部２７０を参照し、通知Ｄに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。仮想メモリマップ上において処理すべきレコードの仮想アドレスを把握する。仮想メモリマップ編集部２５２は、取得した仮想アドレスを持つレコードの実値フィールドの値として、通知Ｄに含まれる変数等の新しい値を仮想メモリマップにおいて保持するように仮想メモリマップ記憶部２６０に記憶する。単一経路情報において、変化していく変数等の値を変数等の名前と紐づけて保持することで、以降の解析で変数等の名前をキーとして参照することが可能になる。
【００６３】
図６ＥはステップＳ６０６の動作の概略を示す模式図である。レコード編集部２５１は、変数解析部２４０からの通知Ｅに対応して、変数等テーブル記憶部２７０を参照し、通知Ｅに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。仮想メモリマップ編集部２５２は、取得した仮想アドレスを持つレコード、および、当該レコードの前後に存在するｎｕ１１フラグを持つレコードまでの間の全レコードを、ｎｕ１１フラグを持つレコードを含めて仮想メモリマップ記憶部２６０から削除する。ここで、間の全レコードとは、仮想アドレスの値を先頭仮想アドレスから昇順に並べたときにｎｕ１１フラグを持つレコードで挟まれたレコードのすべてという意図である。
【００６４】
図６ＦはステップＳ６０７の動作の概略を示す模式図である。レコード編集部２５１は、変数解析部２４０からの通知Ｆに対応して、変数等テーブル記憶部２７０を参照し、通知Ｆに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。仮想メモリマップ編集部２５２は、取得した仮想アドレスを持つ仮想メモリマップ上のレコードの実値範囲フィールドに、通知Ｆに含まれる実値範囲情報を追加保持し、仮想メモリマップ記憶部２６０に記憶する。実値範囲情報を設定することで、仮想メモリマップ上の当該レコードが示す仮想アドレスの値として、取り得る範囲を限定することが可能となる。
【００６５】
図６ＧはステップＳ６０８の動作の概略を示す模式図である。脆弱性成立分析部２３４は、変数解析部２４０からの通知Ｇに対応して、アタックポイント情報記憶部２２０からアタックポイント情報を入力し、アタック成立条件を取得する。レコード編集部２３１は、アタック成立条件で用いられている変数等の名前を抽出し、各変数等の名前と紐つく先頭仮想アドレスを、変数等テーブル記憶部２７０から取得する。限定実値算出部２３３は、先頭仮想アドレスと紐つく実値情報と実値範囲情報を、仮想メモリマップ記憶部２６０から取得する。脆弱性成立分析部２３４は、当該レコードが入力フラグを持つレコードである場合、当該レコードの実値情報を、当該レコードの実値範囲情報を用いて限定し、限定入力実値情報とする。脆弱性成立分析部２３４は、当該レコードが入力フラグを持つレコードである場合、限定入力実値情報がアタック成立条件を満たしているか否かを判定する。また、脆弱性成立分析部２３４は、当該レコードが入力フラグを持たないレコードである場合、実値情報がアタック成立条件を満たしているか否かを判定する。
【００６６】
脆弱性成立分析部２３４がアタック成立条件を満たしていると判定した場合には、脆弱性成立判定部２３０は以下の処理を実施する。限定実値算出部２３３は、仮想メモリマップ記憶部２６０からすべての入力フラグを持つレコードを抽出し、抽出したレコードの実値フィールドの値を入力実値情報として取得する。入力実値情報は、各入力実値情報と紐づけられるレコードの実値範囲フィールドから取得できる実値範囲情報を用いて値の範囲を限定し、限定入力実値情報とする。このとき、限定入力実値情報が示す値が、範囲が限定されることによって存在しない場合、或いは、仮想メモリマップ上に入力フラグを持つレコードが存在しない場合は、結果出力の際に、限定入力実値情報なしで出力する。脆弱性成立分析部２３４は、変数解析部２４０より通知された通知Ｇに含まれる単一経路情報特定情報、限定入力実値情報、および、脆弱性が存在する事実を、当該単一経路情報に関する分析結果情報として出力部２３５に出力する。
【００６７】
図７Ａは、本実施形態に係る変数等が直接的なメモリ上のアドレス値である場合について説明する模式図である。変数等が直接的なメモリ上のアドレス値である場合は、変数等テーブルを用いず、仮想メモリマップ上に仮想アドレスを割り振ると同時に、実アドレス値を仮想アドレスに紐づけて配置する。図７Ａでは、実アドレスが「０ｘＦＦ０１」であり、実アドレス値が「６０」である場合を示している。実アドレスである「０ｘＦＦ０１」に対応する先頭の仮想アドレスが「０ｘ４００１」の場合には、仮想アドレス「０ｘ４０００」および「０ｘ４００２」にｎｕｌｌフラグが設定される。
【００６８】
図７Ｂは、本実施形態に係る変数等が変数である場合について説明する模式図である。本実施形態に係る変数等が変数である場合は、変数等テーブルとして変数テーブルを用いる。変数テーブルには、変数の変数名、先頭の仮想アドレス、および、変数の型種別を持つレコードを持たせる。さらに、仮想メモリマップでは、変数の型種別と同量のメモリ領域量を確保する。図７Ｂでは、変数の変数名が「ｃＤａｔａ」であり、変数の型種別が「ｃｈａｒ」であるので、１バイトのメモリ領域量が確保されている。変数の変数名が「ｃＤａｔａ」の先頭の仮想アドレスが「０ｘ０００１」の場合には、仮想アドレス「０ｘ００００」および「０ｘ０００２」にｎｕｌｌフラグが設定される。
【００６９】
図７Ｃは、本実施形態に係る変数等が共用体である場合について説明する模式図である。
本実施形態に係る変数等が共用体である場合は、変数等テーブルとして共用体テーブルを用いて、共用体テーブルに、共用体名を共通に持たせる。さらに、先頭の仮想アドレス、および、要素の型種別と要素の変数型を持つレコードを持たせる。さらに、仮想メモリマップでは、共用体が持つ要素の型種別のうちで、最大のメモリ領域量を確保する。図７Ｂでは、要素の型種別が「ｉＶａｌｕｅ」の場合の変数型が「ｉｎｔ」であるので、４バイトのメモリ領域量が確保されている。共用体の先頭の仮想アドレスが「０ｘ２００１」の場合には、仮想アドレス「０ｘ２０００」および「０ｘ２００５」にｎｕｌｌフラグが設定される。
【００７０】
図７Ｄは、本実施形態に係る変数等が構造体である場合について説明する模式図である。
本実施形態に係る変数等が構造体である場合は、変数等テーブルとして構造体テーブルを用いて、構造体テーブルに、構造体名を共通に持たせる。さらに、先頭の仮想アドレス、および、要素の型種別と要素の変数型を持つレコードを持たせる。さらに、仮想メモリマップでは、構造体が持つ全要素の型種別から導出されるメモリ領域量の和で算出される総メモリ領域量を確保する。
【００７１】
図７Ｅは、本実施形態に係る変数等が配列である場合について説明する模式図である。
本実施形態に係る変数等が配列である場合は、変数等テーブルとして配列テーブルを用いて、配列テーブルに、配列の変数名、先頭の仮想アドレス、要素の型種別、および、配列の次元数を持つレコードを持たせる。さらに、仮想メモリマップでは、配列の要素の型種別から導出されるメモリ領域量と配列の次元数の積で算出される総メモリ領域量を確保する。
【００７２】
（変形例）
図８Ａは、上述の実施形態に対する付加機能を示し、付加機能は経路矛盾判定部２９０を含む構成によって実現される。付加機能に係るメモリ編集部２５０、経路矛盾判定部２９０、および、変数解析部２４０の動作を以下に説明する。
【００７３】
図８Ｂは、図８Ａの付加機能を実現するためのメモリ編集部２５０の追加機能を説明するための模式図である。
【００７４】
メモリ編集部２５０はステップＳ６０７の処理Ｍに追加して、以下の機能を実施する。
処理Ｍにおいては、レコード編集部２５１は、変数解析部２４０からの通知Ｆに対応して、変数等テーブル記憶部２７０を参照し、通知Ｆに含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。追加する機能として、仮想メモリマップ編集部２５２は、取得した仮想アドレスを持つ仮想メモリマップ上のレコードが入力フラグを持たない場合、変数解析部２４０から通知された変数等の名前を、分岐通知に含ませて経路矛盾判定部２９０に通知する。変数情報によって分岐した通知である通知Ｆを発信した変数解析部２４０は、経路矛盾判定部２９０から通知があるまで評価対象のプログラム情報の逐次解析を停止する。
【００７５】
経路矛盾判定部２９０では、メモリ編集部２５０からの分岐通知を受信すると、以下の処理を実施する。
【００７６】
変数等テーブル読込部２９１は、メモリ編集部２５０からの分岐通知に対応して、変数等テーブル記憶部２７０を参照し、分岐通知に含まれる変数等の名前に対応するレコードが持つ先頭仮想アドレスを取得する。経路矛盾判定部２９０は、仮想メモリマップ上において処理すべきレコードの仮想アドレスを把握することが可能となる。
【００７７】
経路矛盾解析部２９３は、把握した仮想アドレスを持つレコードの実値フィールドに含まれる情報と、当該仮想アドレスを持つレコードの実値範囲フィールドに含まれる情報について、論理的な矛盾の有無を解析する。これは、実値が、実値範囲に含まれるか否かで矛盾を判定する。なお、実値範囲は複数の異なる分岐通知によって決定される場合がある。
【００７８】
矛盾が発見された場合は、矛盾発生の事実を、変数解析部２４０に矛盾発生通知を通知する（図８Ｄ）。解析中の単一経路情報は、当該単一経路情報で用いられる変数の情報と分岐経路が矛盾しているため、当該単一経路情報が示すプログラム上のフローは、現在までの解析以上は辿られることがないことが示されたと判断できる。
【００７９】
変数解析部２４０では、経路矛盾判定部２９０から矛盾発生通知を受け取った場合、現在解析している単一経路情報の解析を停止し、次の単一経路情報の解析に移行する。解析中の単一経路情報は、現在までの解析以上は辿られることができないと判断されたため、変数解析部２４０は無駄な解析を中止することが可能となる。
【００８０】
矛盾が発見されない場合には、矛盾未発見の事実を、変数解析部２４０に矛盾未発生通知を通知する（図８Ｃ）。解析中の単一経路情報は、当該単一経路情報で用いられる変数の情報と分岐経路になんら矛盾は生じていない。したがって、現在までの解析範囲において、当該単一経路情報が示すプログラム上のフローが辿られる可能性が存在することが示されたと判断できる。
【００８１】
変数解析部２４０では、経路矛盾判定部２９０から矛盾未発生通知を受け取った場合、現在解析している単一経路情報の解析を継続する。解析中の単一経路情報は、当該単一経路情報が示すプログラム上のフローを辿ることができる可能性が存在すると判断されたため、変数解析部２４０は解析の継続をすることが可能となる。
【００８２】
なお、脆弱性分析装置１０００における動作のフローチャートの一例を示す処理手順は以下のように処理される。すなわち、脆弱性分析装置１０００が有するコンピュータのＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）に格納されたプログラムにしたがいＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が各処理を実行する。
【００８３】
なお、上述した処理手順の一部または全部は、例えば、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）やＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）等のハードウェアにより実行させられる。但し本実施形態では、ＲＯＭのプログラムにしたがってＣＰＵが実行する形態とした場合について説明した。
【００８４】
以上説明したように、本実施形態によれば、保護資産の保護状態が成立している状況を論理式で表現するために、保護資産の保護状態を侵害するケースに限定して脆弱性を見つけ出すことが可能になる。また、保護資産の保護状態が成立している状況は、プログラムにおいて発生しては困る処理に直結する状況を論理式で示せばよいので、セキュリティに関する知識を有していなくとも当該論理式を示すことが可能になる。
【００８５】
（比較例）
従来技術においては、評価対象となるプログラムにおいて特定の状態に至らないことを、あらゆる経路について網羅的に確認する構成が存在する。しかし、あらゆる経路について網羅的に確認することは非常に冗長であり、計算リソースと計算時間に大きな無駄が発生する。
【００８６】
しかし、本実施形態の脆弱性分析装置１０００では、アタック判定位置と開始位置との間の経路について、脆弱性を確認するので、確認する必要がない評価対象のプログラムの処理を含むフロー上の経路を除外することが可能となる。その結果、計算リソースと計算時間に大きな無駄が発生せずに、効率的な脆弱性評価手段を提供することが可能となる。
【００８７】
また、従来技術においては、障害発生条件、不正なコマンドおよび不正なデータの特徴に対する一致度を確率的に算出し、評価対象となるプログラムの脆弱性を評価する構成が存在する。しかし、当該構成では、評価対象となるプログラムの脆弱性を確率的に評価するために、脆弱性評価に対する確実性および網羅性がないものとなる。
【００８８】
しかし、本実施形態の脆弱性分析装置１０００では、アタック判定位置と開始位置との間のすべての経路について、アタック成立条件に基づいて脆弱性を確認するので、脆弱性評価に対する確実性および網羅性がある構成となる。このため、検出漏れも生じない。
【００８９】
さらに、従来技術においては、事前に用意したテストケースを用いて、評価対象となるプログラムに有効なテストケースを選択する構成がある。しかし、当該構成では、事前に用意した範囲を超える手段を用いた攻撃には対応できないために、脆弱性に対する検出漏れが発生する場合がある。
【００９０】
しかし、本実施形態の脆弱性分析装置１０００では、ソースコード自体を解析し攻撃経路を抽出することが可能となり、攻撃経路を利用し得る入力値のすべてを導出することが可能になる。さらに、選択するべきテストケースを事前に用意する必要がない。
【００９１】
さらに、従来技術においては、評価対象となるプログラムの経路を選択する場合に、事前に指定したキーワードとの関連性を条件として選択する構成が存在する。しかし、評価対象となるプログラムにおいて、同一のキーワードが異なる意味を有する場合がある。また、評価対象となるプログラムにおいて、異なるキーワードが同一の情報を有する場合がある。このように、キーワードとの関連性を条件とすると、経路の選択が不完全な場合が発生する可能性があり、脆弱性の検出漏れが発生する場合がある。また、従来技術においては、ある特定状態における状態遷移の遷移条件を重複させない構成を提供している。しかし、特定状態における遷移条件に関係のないパラメータが異なるケースに、プログラムフローにおいて攻撃経路が存在する可能性が存在し得るため、脆弱性の検出漏れが発生する場合がある。
【００９２】
しかし、本実施形態の脆弱性分析装置１０００では、確認する必要がない経路以外のすべての攻撃経路について解析を実施しているので、脆弱性評価に対する確実性および網羅性がある構成となる。このため、検出漏れも生じない。
【００９３】
さらに、従来技術においては、評価対象となるプログラムにおける異常点に至ることを確認することによって、バグが生じていることを判定している。しかし、脆弱性を評価するセキュリティにおいては、プログラムの正常点において異常な動作が発生することも検出する必要があるので、当該判定では、脆弱性の検出漏れが発生する場合がある。
【００９４】
しかし、本実施形態の脆弱性分析装置１０００では、指定されたアタック判定位置において判定を実施し、アタック判定位置はプログラムにおけるいずれの位置においても指定可能な位置である。したがって、本実施形態の脆弱性分析装置１０００では、プログラムにおける異常点である例外処理ではない、正常な経路上の脆弱性を検出することが可能である。
【００９５】
以下に、本実施形態の脆弱性分析装置１０００の特徴について記載する。
【００９６】
本発明の第１の態様に係わる評価対象となるプログラムの情報セキュリティ上の脆弱性の有無を評価する脆弱性分析装置１０００は、以下の処理を実施する単一経路導出部１００を含む。当該単一経路導出部１００はプログラム情報の脆弱性の存在の判定が可能なアタック判定位置からプログラム情報の開始位置までの経路情報であって、プログラム情報上の分岐によって分割して導出される経路の情報である単一経路情報を導出する。当該単一経路情報は、プログラム情報の各処理を、処理順に保持する。
【００９７】
また、第１の態様に係わる脆弱性分析装置１０００は、単一経路情報を開始位置からアタック判定位置まで解析し、プログラム情報上の分岐条件と分岐結果の情報から実値の値域を限定する実値範囲情報を導出する変数解析部２４０を含む。
【００９８】
さらに、第１の態様に係わる脆弱性分析装置１０００は、以下の処理を実施するメモリ編集部２５０を含む。当該メモリ編集部２５０は、入力変数情報が指定されている場合に入力変数情報に対応する仮想アドレスおよび仮想アドレスに対応する入力フラグを設定し、入力変数情報の実値情報を仮想アドレスの実値フィールドに記憶する。また、当該メモリ編集部２５０は、変数解析部２４０から通知された実値範囲情報に対応する仮想アドレスを取得し、仮想アドレスの実値範囲フィールドに実値範囲情報を記憶する。
【００９９】
さらに、第１の態様に係わる脆弱性分析装置１０００は、以下の処理を実施する脆弱性成立判定部２３０を含む。当該脆弱性成立判定部２３０は、アタック判定位置におけるアタック成立条件において用いられている変数情報を抽出し、変数情報に対応する仮想アドレスを取得し、仮想アドレスに対応する実値情報および実値範囲情報を取得する。当該脆弱性成立判定部２３０は、仮想アドレスに入力フラグが設定されている場合に、実値範囲情報によって実値情報を限定した限定入力実値情報を算出し、限定入力実値情報がアタック成立条件を満たしているか否かを判定する。当該脆弱性成立判定部２３０は、仮想アドレスに入力フラグが設定されていない場合に、仮想アドレスに対応する実値情報がアタック成立条件を満たしているか否かを判定する。
【０１００】
上記構成によれば、不正な入力によって、プログラムが特定の不都合な状態に到達する可能性の有無を確認する具体的な方法を提供することが可能となる。
【０１０１】
本発明の第２の態様に係わる脆弱性分析装置１０００のアタック成立条件はプログラム情報で用いられることが可能な変数情報を用いた論理式で表現される。
【０１０２】
上記構成によれば、保護資産の保護状態が成立していない状況を論理式で表現するために、保護資産の保護状態を侵害するケースに限定して脆弱性を見つけ出すことが可能になる。
【０１０３】
本発明の第３の態様に係わる脆弱性分析装置１０００の入力変数情報は、評価対象となるプログラムの外部から入力される情報を保持するための変数を含む変数情報である。また、変数情報は、変数、直接的なメモリ上のアドレス値、共用体、構造体、配列を含む情報である。
【０１０４】
上記構成によれば、攻撃経路を成立させるために使用される情報としてプログラムに対する入力情報を指定することによって、脆弱性の評価に対する確実性および網羅性を満たし、検出漏れの発生を抑制することが可能になる。
【０１０５】
本発明の第４の態様に係わる脆弱性分析装置１０００のメモリ編集部２５０は、変数情報に対応する仮想アドレス領域の前後の仮想アドレスにｎｕｌｌフラグを設定する。
【０１０６】
上記構成によれば、確保した仮想アドレスの前後の仮想アドレスにｎｕｌ１フラグを持たせて認識可能とする。ｎｕｌ１フラグを認識可能とすることで、仮に変数等と紐づけた仮想アドレスから逸脱した仮想アドレスへのアクセスがあった場合に、その逸脱した仮想アドレスであることの判別が可能となる。
【０１０７】
本発明の第５の態様に係わる脆弱性分析装置１０００の脆弱性成立判定部２３０は、アタック成立条件が満たされている場合に、入力フラグを持つすべての仮想アドレスを抽出し、仮想アドレスの実値フィールドの値を入力実値情報とする。さらに、脆弱性成立判定部２３０は、入力実値情報に対応する実値範囲情報フィールドの値によって限定された値を限定入力実値情報とし、限定入力実値情報が実値フィールドの値に存在しない場合には、限定入力実値情報を出力しない。
【０１０８】
上記構成によれば、存在し得ない限定入力実値情報を検出し、出力することを抑制することが可能になる。
【０１０９】
本発明の第６の態様に係わる脆弱性分析装置１０００の脆弱性成立判定部２３０においてアタック成立条件が満たされていない場合には、変数解析部２４０はその他の単一経路情報がある場合にはその他の単一経路情報について解析を続行する。脆弱性成立判定部２３０は解析されたその他の単一経路情報についてアタック成立条件が満たされているか否かを判定する。
【０１１０】
上記構成によれば、確認する必要のない経路以外は、あらゆる経路について解析を実施しているので、脆弱性の評価に対する確実性および網羅性を満たし、検出漏れの発生を抑制することが可能になる。
【０１１１】
本発明の第７の態様に係わる脆弱性分析装置１０００のメモリ編集部２５０は、実値範囲情報に使用される変数情報に対応する仮想アドレスに入力フラグが設定されていない場合には、変数情報を経路矛盾判定部２９０に通知する。経路矛盾判定部２９０は、変数情報に対応する仮想アドレスを持つレコードの実値フィールドに含まれる実値情報が、当該仮想アドレスを持つレコードの実値範囲フィールドに含まれる実値範囲情報に含まれないか否かを判定する。経路矛盾判定部２９０は、実値情報が実値範囲情報に含まれない場合には、論理的な矛盾があることを示す矛盾発生通知を前記変数解析部２４０に通知する。変数解析部２４０は論理的な矛盾がある単一経路情報の解析を停止し、他の単一経路情報がある場合には他の単一経路情報の解析を開始する。
【０１１２】
上記構成によれば、単一経路情報の解析において分岐処理があるごとに、論理的な矛盾がある単一経路情報の解析を中止することが可能になるので、脆弱性分析装置１０００の分析処理を高速化することが可能になる。
【０１１３】
本発明の第８の態様に係わる脆弱性分析装置１０００のプログラム情報は、プログラムのソースコードまたは制御フローグラフを含むプログラムで実現する機能の処理ロジックおよび手順を含む情報である。
【０１１４】
上記構成によれば、評価対象のプログラムのソースコードを対象とすることによって、攻撃判定位置から開始位置まで辿り解析を確実に実施することが可能になる。すなわち、攻撃判定位置にたどり着かない、確認する必要のない経路を除外して分析することが可能になるので、効率的な解析手段を提供することが可能になる。また、確認する必要のない経路以外は、あらゆる経路について解析を実施しているので、脆弱性の評価に対する確実性および網羅性を満たし、検出漏れの発生を抑制することが可能になる。
【０１１５】
以上説明したように、本実施形態によれば、保護資産の保護状態が成立している状況を論理式で表現するために、保護資産の保護状態を侵害するケースに限定して脆弱性を見つけ出すことが可能になる。また、保護資産の保護状態が成立している状況は、プログラムにおいて発生しては困る処理に直結する状況を論理式で示せばよいので、セキュリティに関する知識を有していなくとも当該論理式を示すことが可能になる。
【０１１６】
以上、さまざまな実施例を説明したが、それらの実施例の一部または全部を組み合わせて新たな実施例とすることもできる。
【符号の説明】
【０１１７】
１００      単一経路導出部
１１０      プログラム情報記憶部
１２０      経路生成部
１３０      単一経路情報記憶部
２００      脆弱性分析部
２１０      入力変数情報記憶部
２２０      アタックポイント情報記憶部
２３０      脆弱性成立判定部
２３１      レコード編集部
２３２      仮想メモリマップ編集部
２３３      限定実値算出部
２３４      脆弱性成立分析部
２３５      出力部
２４０      変数解析部
２４１      変数抽出部
２４２      変数チェック部
２４３      通知部
２４４      分岐分析部
２４５      実値範囲導出部
２５０      メモリ編集部
２５１      レコード編集部
２５２      仮想メモリマップ編集部
２５３      通知部
２６０      仮想メモリマップ記憶部
２７０      変数等テーブル記憶部
２８０      脆弱性単一経路情報記憶部
２９０      経路矛盾判定部
２９１      変数等テーブル読込部
２９２      仮想メモリマップ読込部
２９３      経路矛盾解析部
２９４      通知部
１０００    脆弱性分析装置
【図１】
0006966522.tif 000002
【図２】
0006966522.tif 000003
【図３】
0006966522.tif 000004
【図４】
0006966522.tif 000005
【図５Ａ】
0006966522.tif 000006
【図５Ｂ】
0006966522.tif 000007
【図５Ｃ】
0006966522.tif 000008
【図５Ｄ】
0006966522.tif 000009
【図５Ｅ】
0006966522.tif 000010
【図５Ｆ】
0006966522.tif 000011
【図５Ｇ】
0006966522.tif 000012
【図６Ａ】
0006966522.tif 000013
【図６Ｂ】
0006966522.tif 000014
【図６Ｃ】
0006966522.tif 000015
【図６Ｄ】
0006966522.tif 000016
【図６Ｅ】
0006966522.tif 000017
【図６Ｆ】
0006966522.tif 000018
【図６Ｇ】
0006966522.tif 000019
【図７Ａ】
0006966522.tif 000020
【図７Ｂ】
0006966522.tif 000021
【図７Ｃ】
0006966522.tif 000022
【図７Ｄ】
0006966522.tif 000023
【図７Ｅ】
0006966522.tif 000024
【図８Ａ】
0006966522.tif 000025
【図８Ｂ】
0006966522.tif 000026
【図８Ｃ】
0006966522.tif 000027
【図８Ｄ】
0006966522.tif 000028