(57)【特許請求の範囲】
【請求項１】
ソフトウェアのソースコードに含まれる問題が存在する不正関数の名称を含む問題種別と、前記問題に関連する前記不正関数の引数名を含む問題情報レコードを格納する問題情報格納手段と、
前記問題種別と、前記問題を修正するための、引数名を含む修正汎用コードを対応付けた修正レコードと、を格納する修正情報格納手段と、
前記問題情報レコードと前記問題種別が一致する、前記修正レコードを検索して、検索された前記修正レコード内の前記修正汎用コード内の前記引数名を、検索された前記問題情報レコード内の前記引数名で置換して修正実コードを生成する修正候補生成手段と、
を備えるソフトウェア修正装置。
【請求項２】
前記問題情報レコードは、さらに、前記不正関数の前記ソースコードにおける位置を示す不正関数位置情報を包含し、
前記修正レコードは、さらに、置換または挿入の区別を示す修正処理情報を包含し、
検索された前記問題情報レコード内の前記不正関数位置情報と、検索された前記修正レコードに包含される前記修正処理情報に基づいて、前記ソースコードの前記不正関数を前記修正実コードで置換、または前記ソースコードの前記不正関数の前に前記修正実コードを挿入する修正反映手段を、
さらに備える、請求項１のソフトウェア修正装置。
【請求項３】
前記問題種別は、前記不正関数の名称に加えて、ソフトウェア問題カテゴリを包含する、
請求項１乃至２の何れかのソフトウェア修正装置。
【請求項４】
前記修正情報格納手段は、前記問題種別が同一であって、前記修正汎用コードが異なる複数の前記修正レコードを包含し、
前記修正候補生成手段は、前記問題情報レコードと前記問題種別が一致する、前記複数の前記修正レコードを検索して、前記複数の前記修正実コードを生成して、表示装置に出力する、
請求項１乃至３の何れかのソフトウェア修正装置。
【請求項５】
請求項１から４に記載のソフトウェア修正装置と、ソフトウェア問題解析ツールとを包含するソフトウェア修正システム。
【請求項６】
ソフトウェア修正装置が、
ソフトウェアのソースコードに含まれる問題が存在する不正関数の名称を含む問題種別と、前記問題に関連する前記不正関数の引数名を含む問題情報レコードを記憶域に格納し、
前記問題種別と、前記問題を修正するための、引数名を含む修正汎用コードを対応付けた修正レコードと、を記憶域に格納し、
前記問題情報レコードと前記問題種別が一致する、前記修正レコードを検索して、検索された前記修正レコード内の前記修正汎用コード内の前記引数名を、検索された前記問題情報レコード内の前記引数名で置換して修正実コードを生成する、
ソフトウェア修正方法。
【請求項７】
前記問題情報レコードは、さらに、前記不正関数の前記ソースコードにおける位置を示す不正関数位置情報を包含し、
前記修正レコードは、さらに、置換または挿入の区別を示す修正処理情報を包含し、
前記ソフトウェア修正装置は、検索された前記問題情報レコード内の前記不正関数位置情報と、検索された前記修正レコードに包含される前記修正処理情報に基づいて、前記ソースコードの前記不正関数を前記修正実コードで置換、または前記ソースコードの前記不正関数の前に前記修正実コードを挿入する、
請求項６のソフトウェア修正方法。
【請求項８】
ソフトウェアのソースコードに含まれる問題が存在する不正関数の名称を含む問題種別と、前記問題に関連する前記不正関数の引数名を含む問題情報レコードを記憶域に格納する問題情報格納処理と、
前記問題種別と、前記問題を修正するための、引数名を含む修正汎用コードを対応付けた修正レコードと、を記憶域に格納する修正情報格納処理と、
前記問題情報レコードと前記問題種別が一致する、前記修正レコードを検索して、検索された前記修正レコード内の前記修正汎用コード内の前記引数名を、検索された前記問題情報レコード内の前記引数名で置換して修正実コードを生成する修正候補生成処理と、
をコンピュータに実行させるソフトウェア修正プログラム。
【請求項９】
前記問題情報レコードは、さらに、前記不正関数の前記ソースコードにおける位置を示す不正関数位置情報を包含し、
前記修正レコードは、さらに、置換または挿入の区別を示す修正処理情報を包含し、
検索された前記問題情報レコード内の前記不正関数位置情報と、検索された前記修正レコードに包含される前記修正処理情報に基づいて、前記ソースコードの前記不正関数を前記修正実コードで置換、または前記ソースコードの前記不正関数の前に前記修正実コードを挿入する修正反映処理を、
さらにコンピュータに実行させる、請求項８のソフトウェア修正プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明は、ソフトウェアのセキュリティ脆弱性を含む問題を解消するためのソフトウェア修正装置、ソフトウェア修正システム、ソフトウェア修正方法、及び、ソフトウェア修正プログラムに関する。
【背景技術】
【０００２】
ＩＴ環境が高度に発達した現代社会においては、システムの中で使用されているソフトウェアに存在する様々な問題を、迅速に解消することが必要不可欠になってきている。特に最近は、サイバー攻撃をはじめとするコンピュータ犯罪等による影響が深刻化しており、ソフトウェアのセキュリティ脆弱性を可能な限り小さくすることの重要性がますます高まってきている。
【０００３】
セキュリティ脆弱性の例としては、ソフトウェアが外部からの入力データを誤処理することで生じるバッファオーバーフローがある。また、入力データを誤処理、あるいは未処理のまま他のソフトウェアに出力することで生じるクロスサイトスクリプティングやＳＱＬインジェクションなどもある。
【０００４】
このようなセキュリティ脆弱性を排除するための技術として、特許文献１には、ソフトウェアのソースコードのセキュリティ脆弱性検査において、構文解析の解析木を構築することで、脆弱性を有する部分を精度よく検出するための装置が公開されている。
【０００５】
また、特許文献２には、脆弱なライブラリを全て検出するのではなく、適切に用いられていない箇所のみを検出することで、脆弱性検出の制度を向上させるプログラムが公開されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−０５２６２５号公報
【特許文献２】特開２０１１−１５０７１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
前述の特許文献１や特許文献２に記載された技術では、セキュリティ脆弱性の検出結果に対して、ソフトウェアのソースコードをどのように修正したらよいかまでは提示されず、修正内容の検討はソフトウェア開発者に委ねられる。
【０００８】
したがって、特にセキュリティ領域に精通していないソフトウェア開発者がソースコードの修正を行う場合は、修正対応完了まで多くの時間を要するという問題がある。
【０００９】
本願発明の目的は、これらの問題点を解決したソフトウェア修正装置、ソフトウェア修正システム、ソフトウェア修正方法、及び、ソフトウェア修正プログラムを提供することである。
【課題を解決するための手段】
【００１０】
本願発明の一実施形態のソフトウェア修正装置は、ソフトウェアのソースコードに含まれる問題が存在する不正関数の名称を含む問題種別と、前記問題に関連する前記不正関数の引数名を含む問題情報レコードを格納する問題情報格納手段と、前記問題種別と、前記問題を修正するための、引数名を含む修正汎用コードを対応付けた修正レコードと、を格納する修正情報格納手段と、前記問題情報レコードと前記問題種別が一致する、前記修正情報レコードを検索して、検索された前記修正レコード内の前記修正汎用コード内の前記引数名を、検索された前記問題情報レコード内の前記引数名で置換して修正実コードを生成する修正候補生成手段と、を備える。
【００１１】
本願発明の一実施形態のソフトウェア修正方法は、ソフトウェアのソースコードに含まれる問題が存在する不正関数の名称を含む問題種別と、前記問題に関連する前記不正関数の引数名を含む問題情報レコードを格納し、前記問題種別と、前記問題を修正するための、引数名を含む修正汎用コードを対応付けた修正レコードと、を格納し、前記問題情報レコードと前記問題種別が一致する、前記修正情報レコードを検索して、検索された前記修正レコード内の前記修正汎用コード内の前記引数名を、検索された前記問題情報レコード内の前記引数名で置換して修正実コードを生成する。
【００１２】
本願発明の一実施形態のソフトウェア修正プログラムは、ソフトウェアのソースコードに含まれる問題が存在する不正関数の名称を含む問題種別と、前記問題に関連する前記不正関数の引数名を含む問題情報レコードを格納する問題情報格納処理と、前記問題種別と、前記問題を修正するための、引数名を含む修正汎用コードを対応付けた修正レコードと、を格納する修正情報格納処理と、前記問題情報レコードと前記問題種別が一致する、前記修正情報レコードを検索して、検索された前記修正レコード内の前記修正汎用コード内の前記引数名を、検索された前記問題情報レコード内の前記引数名で置換して修正実コードを生成する修正候補生成処理と、をコンピュータに実行させる。
【発明の効果】
【００１３】
本願発明は、ソフトウェアのセキュリティ脆弱性等の問題を解消するソースファイル修正コードの候補を自動生成することを実現する。
【図面の簡単な説明】
【００１４】
【図１】本願発明の第１の実施形態の構成を示すブロック図である。
【図２】本願発明の第１の実施形態の動作を示すフローチャートである。
【図３】本願発明の第１の実施形態におけるオリジナルソースファイル１１の例１である。
【図４】本願発明の第１の実施形態におけるオリジナルソースファイル１１の例２である。
【図５】本願発明の第１の実施形態におけるセキュリティ脆弱性種別情報１０２０とセキュリティ脆弱性詳細情報１０２１の詳細である。
【図６】本願発明の第１の実施形態におけるセキュリティ脆弱性種別情報１０１０とセキュリティ脆弱性修正情報１０１１の詳細である。
【図７】本願発明の第１の実施形態におけるセキュリティ脆弱性修正内容反映部１０６の処理実行時のユーザコンソール１５の画面（例１の場合）である。
【図８】本願発明の第１の実施形態における修正後ソースファイル１４の例１である。
【図９】本願発明の第１の実施形態における修正後ソースファイル１４の例２である。
【図１０】本願発明の第２の実施形態の構成を示すブロック図である。
【図１１】本願発明の第２の実施形態の動作を示すフローチャートである。
【発明を実施するための形態】
【００１５】
本願発明の第一の実施の形態について図面を参照して詳細に説明する。
【００１６】
図１はセキュリティ脆弱性修正装置１０と、オリジナルソースファイル１１と、セキュリティ脆弱性検証ツール１２と、検証ツール検証結果１３と、修正後ソースファイル１４と、ユーザコンソール１５とから構成されたセキュリティ脆弱性修正システムの構成を示す。
【００１７】
オリジナルソースファイル１１は、セキュリティ脆弱性の検証、修正の対象であるソフトウェアのソースファイルであり、その２つの例を例１（ＳａｍｐｌｅＸＳＳ．ｊａｖａ）、例２（ＳＱＬＩｎｊｅｃｔｉｏｎ．ｊａｖａ）としてそれぞれ図３、図４に示す。例１、例２は、プログラミング言語としてJAVA（登録商標）を使用しているが、C言語やhtmlなどのその他のプログラミング言語で書かれたソースファイルでもよい。
【００１８】
例１のソースファイルの場合、２４行目のリクエストパラメータから取得したデータを、そのまま２６行目のｓｅｎｄＥｒｒｏｒメソッドで使用しているため、クロスサイトスクリプティングの脆弱性が存在する。
【００１９】
例２のソースファイルの場合、15行目のリクエストパラメータから取得したデータをそのまま２２行目のｐｒｅｐａｒｅＳｔａｔｅｍｅｎｔメソッドで使用しているため、ＳＱＬインジェクションの脆弱性が存在する。
【００２０】
セキュリティ脆弱性検証ツール１２は、オリジナルソースファイル１１のセキュリティ脆弱性を解析するパッケージソフトウェアであり、いくつかのツールが知られている。セキュリティ脆弱性検証ツール１２が出力する検証ツール検証結果１３は、図５に記載のセキュリティ脆弱性種別情報１０２０、セキュリティ脆弱性詳細情報１０２１を必ず包含する。検証ツール検証結果１３は、その他に、セキュリティ脆弱性カテゴリの重要度レベル、脆弱性カテゴリの解説と対応方法の概要説明、不正データの入力から出力にいたるまでのプログラムの流れなどの様々な解析情報を包含してもよい。
【００２１】
修正後ソースファイル１４は、セキュリティ脆弱性修正装置１０がオリジナルソースファイル１１におけるセキュリティ脆弱性の存在する箇所のコードを修正して出力したファイルである。前記例１、例２のオリジナルソースファイル１１が修正されて出力された修正後ソースファイル１４を、それぞれ図８、図９に示す。
【００２２】
図８に示す通り、例１のソースファイルの場合、セキュリティ脆弱性修正装置１０が２６行目のサニタイズ処理を追加することで、オリジナルソースファイル１１に存在したクロスサイトスクリプティングの脆弱性を解消する。
【００２３】
図９に示す通り、例２のソースファイルの場合、セキュリティ脆弱性修正装置１０が２２行目のサニタイズ処理を追加することで、オリジナルソースファイル１１に存在したＳＱＬインジェクションの脆弱性を解消する。
【００２４】
ユーザコンソール１５は、ソフトウェア開発者がセキュリティ脆弱性修正装置１０を使用する時のユーザインターフェースとなる画面、キーボード、および、マウスである。
【００２５】
セキュリティ脆弱性修正装置１０は、セキュリティ脆弱性検証結果情報取得部１００と、セキュリティ脆弱性修正ルール格納部１０１と、セキュリティ脆弱性検証結果情報格納部１０２と、セキュリティ脆弱性修正候補提示部１０３と、セキュリティ脆弱性修正コード１０４と、セキュリティ脆弱性修正箇所１０５と、セキュリティ脆弱性修正内容反映部１０６とを備えている。
【００２６】
セキュリティ脆弱性検証結果情報取得部１００は、検証ツール検証結果１３からセキュリティ脆弱性種別情報１０２０とセキュリティ脆弱性詳細情報１０２１を抜き出して、セキュリティ脆弱性検証結果情報格納部１０２に格納する。
【００２７】
セキュリティ脆弱性種別情報１０２０は、図５に記載の通り、セキュリティ脆弱性のカテゴリと不正関数名の情報とを包含している。オリジナルソースファイル１１が前記例１の場合、セキュリティ脆弱性検証結果情報取得部１００は、カテゴリに「Ｃｒｏｓｓ  Ｓｉｔｅ  Ｓｃｒｉｐｔｉｎｇ」、不正関数名に「ｓｅｎｄＥｒｒｏｒ」を格納する。オリジナルソースファイル１１が前記例２の場合、セキュリティ脆弱性検証結果情報取得部１００は、カテゴリに「ＳＱＬ  Ｉｎｊｅｃｔｉｏｎ」、不正関数名に「ｐｒｅｐａｒｅＳｔａｔｅｍｅｎｔ」を格納する。
【００２８】
セキュリティ脆弱性詳細情報１０２１は、図５に記載の通り、セキュリティ脆弱性が存在するファイル名と、そのファイルにおけるセキュリティ脆弱性が存在する箇所の行番号と、不正関数引数情報とを包含している。オリジナルソースファイル１１が前記例１の場合、セキュリティ脆弱性検証結果情報取得部１００は、ファイル名に「ＳａｍｐｌｅＸＳＳ．ｊａｖａ」、行番号に「２６」、不正関数引数情報に図５に示す情報を格納する。オリジナルソースファイル１１が前記例２の場合、セキュリティ脆弱性検証結果情報取得部１００は、ファイル名に「ＳａｍｐｌｅＳＱＬ．ｊａｖａ」、行番号に「２２」、不正関数引数情報に図５に示す情報を格納する。
【００２９】
セキュリティ脆弱性検証結果情報格納部１０２は、セキュリティ脆弱性種別情報１０２０とセキュリティ脆弱性詳細情報１０２１を、セキュリティ脆弱性修正候補提示部１０３に出力する。
【００３０】
セキュリティ脆弱性修正ルール格納部１０１は、セキュリティ脆弱性種別情報１０１０とセキュリティ脆弱性修正情報１０１１とを格納している。セキュリティ脆弱性種別情報１０１０とセキュリティ脆弱性修正情報１０１１は、ソフトウェア開発者がユーザコンソール１５からセキュリティ脆弱性修正ルールとして登録したものである。セキュリティ脆弱性種別情報１０１０は、図６に記載の通り、セキュリティ脆弱性のカテゴリと不正関数名の情報とを包含している。セキュリティ脆弱性修正情報１０１１は、修正処理区分と修正汎用コードの情報とを包含している。修正汎用コードは、汎用的に表記された引数の記述を包含している。
【００３１】
ソフトウェア開発者は、図６に記載の通り、クロスサイトスクリプティングの脆弱性に対する脆弱性修正ルールとして、カテゴリに「Ｃｒｏｓｓ  Ｓｉｔｅ  Ｓｃｒｉｐｔｉｎｇ」、不正関数名に「ｓｅｎｄＥｒｒｏｒ」、修正処理区分に「Ｉｎｓｅｒｔ」、修正汎用コードに図６に示すコード文を登録する。ソフトウェア開発者は、ＳＱＬインジェクションの脆弱性に対する脆弱性修正ルールとして、カテゴリに「ＳＱＬ Ｉｎｊｅｃｔｉｏｎ」、不正関数名に「ｐｒｅｐａｒｅＳｔａｔｅｍｅｎｔ」、修正処理区分に「Ｉｎｓｅｒｔ」、修正汎用コードに図６に示すコード文を登録する。クロスサイトスクリプティングやＳＱＬインジェクションのカテゴリのセキュリティ脆弱性の場合、不正関数名として登録するのは各カテゴリに１つであり、各々の不正関数に対する修正汎用コードも１つあればよい。
【００３２】
バッファオーバーフローの脆弱性に対する脆弱性修正ルールの場合は、図６に記載の通り、不正関数名として、「ｓｔｒｃｐｙ」と「ｇｅｔｓ」の２つが存在し、「ｓｔｒｃｐｙ」の場合は、さらに修正汎用コードとして２つのものを登録する必要がある。
【００３３】
セキュリティ脆弱性修正ルール格納部１０１は、セキュリティ脆弱性種別情報１０１０とセキュリティ脆弱性修正情報１０１１を、セキュリティ脆弱性修正候補提示部１０３に出力する。
【００３４】
セキュリティ脆弱性修正候補提示部１０３は、セキュリティ脆弱性種別情報１０２０とセキュリティ脆弱性種別情報１０１０が一致するレコードをサーチする。サーチの結果一致するものがある場合、セキュリティ脆弱性修正候補提示部１０３は、一致したレコードについて、セキュリティ脆弱性詳細情報１０１１における修正汎用コードの中の引数の記述を、セキュリティ脆弱性詳細情報１０２１における不正関数引数情報の記述に置換して修正実コードを生成し、セキュリティ脆弱性修正コード１０４として出力する。セキュリティ脆弱性修正コード１０４は、対応するレコードのセキュリティ脆弱性修正情報１０１１における修正処理区分の情報も包含している。
【００３５】
セキュリティ脆弱性修正候補提示部１０３は、前記の一致したレコードについて、セキュリティ脆弱性詳細情報１０２１のファイル名と行番号の情報を、セキュリティ脆弱性修正箇所１０５として出力する。
【００３６】
セキュリティ脆弱性修正候補提示部１０３の前記動作をオリジナルソースファイル１１が例１の場合で説明する。セキュリティ脆弱性種別情報１０２０とセキュリティ脆弱性種別情報１０１０は、カテゴリが「Ｃｒｏｓｓ  Ｓｉｔｅ  Ｓｃｒｉｐｔｉｎｇ」、不正関数名が「ｓｅｎｄＥｒｒｏｒ」のレコードで一致する。セキュリティ脆弱性修正候補提示部１０３は、このレコードの不正関数引数情報の「ＴａｉｎｔＡｒｇ＝ｎａｍｅ」から、修正汎用コードにおける「％ＴａｉｎｔＡｒｇ％」の表記を「ｎａｍｅ」で置換して、「Ｓａｎｉｔｉｚｅｒ．ｓａｎｉｔｉｚｅＨＴＭＬ（ｎａｍｅ）；」の修正実コードを生成し、セキュリティ脆弱性修正コード１０４として出力する。セキュリティ脆弱性修正コード１０４は、このレコードの修正処理区分の「Ｉｎｓｅｒｔ」の情報も包含している。
【００３７】
セキュリティ脆弱性修正候補提示部１０３は、前記レコードのファイル名の「ＳａｍｐｌｅＸＳＳ．ｊａｖａ」と、行番号の「２６」の情報を、セキュリティ脆弱性修正箇所１０５として出力する。
【００３８】
オリジナルソースファイル１１が例２の場合のセキュリティ脆弱性修正候補提示部１０３の動作も、例１の場合と同様である。例２の場合、セキュリティ脆弱性種別情報１０２０とセキュリティ脆弱性種別情報１０１０は、カテゴリが「ＳＱＬ  Ｉｎｊｅｃｔｉｏｎ」、不正関数名が「ｐｒｅｐａｒｅＳｔａｔｅｍｅｎｔ」のレコードで一致し、「Ｓａｎｉｔｉｚｅｒ．ｓａｎｉｔｉｚｅＳＱＬ（ｓｔｒ）；」の修正実コードを生成し、修正処理区分の「Ｉｎｓｅｒｔ」の情報も包含させて、セキュリティ脆弱性修正コード１０４として出力する。あわせて、前記レコードのファイル名の「ＳａｍｐｌｅＳＱＬ．ｊａｖａ」と、行番号の「２２」の情報を、セキュリティ脆弱性修正箇所１０５として出力する。
【００３９】
セキュリティ脆弱性修正内容反映部１０６は、オリジナルソースファイル１１に対する修正内容の候補として、セキュリティ脆弱性修正コード１０４とセキュリティ脆弱性修正箇所１０５の情報をユーザコンソール１５の画面に表示する。
【００４０】
図７は、オリジナルソースファイル１１が例１の時のユーザコンソール１５の画面である。セキュリティ脆弱性修正内容反映部１０６は、セキュリティ脆弱性修正箇所１０５におけるファイル名の情報から、画面右上にオリジナルソースファイル１１のファイル名を表示し、その下にオリジナルソースファイル１１のソースコードを表示する。
【００４１】
セキュリティ脆弱性修正内容反映部１０６は、セキュリティ脆弱性修正箇所１０５における行番号の情報から、セキュリティ脆弱性が存在する２６行目を、その他の行とは別の文字色で表示させる。ソフトウェア開発者が、マウスカーソルを２６行目の上に移動させると、セキュリティ脆弱性修正内容反映部１０６は、画面左側のＭｏｄｉｆｉｃａｔｉｏｎ欄に修正処理区分の「Ｉｎｓｅｒｔ」と、修正実コードの「Ｓａｎｉｔｉｚｅｒ．ｓａｎｉｔｉｚｅＨＴＭＬ（ｎａｍｅ）；」を表示させる。
【００４２】
ソフトウェア開発者は、表示された修正内容を確認し、マウスカーソルを修正実コードの表示部付近に移動させて、ダブルクリックする。セキュリティ脆弱性修正内容反映部１０６は、ダブルクリックを受けて、修正内容をオリジナルソースファイル１１に反映し、修正後ソースファイル１４を生成する。
【００４３】
オリジナルソースファイル１１が例１あるいは例２の場合は、図６に記載の通り修正内容の候補は１つとなるが、オリジナルソースファイル１１のセキュリティ脆弱性カテゴリが「Ｂｕｆｆｅｒ  Ｏｖｅｒｆｌｏｗ」で不正関数名が「ｓｔｒｃｐｙ」の場合は、修正候補は２つ存在する。この場合、セキュリティ脆弱性修正内容反映部１０６は、２つの修正候補を画面に表示し、ソフトウェア開発者がいずれかの修正候補を選択し、選択した方の修正実コードの表示部付近にマウスカーソルを移動させてダブルクリックする。セキュリティ脆弱性修正内容反映部１０６は、ソフトウェア開発者が選択した方の修正内容をオリジナルソースファイル１１に反映させる。
【００４４】
次に図２のフローチャートを参照して、本実施形態の動作について詳細に説明する。
【００４５】
セキュリティ脆弱性検証ツール１２は、オリジナルソースファイル１１のセキュリティ脆弱性を解析し、検証ツール検証結果１３を出力する（Ｓ１０１）。検証ツール検証結果１３で、セキュリティ脆弱性が存在しない場合（Ｓ１０２でＮｏ）、全体の処理は終了する。
【００４６】
検証ツール検証結果１３で、セキュリティ脆弱性が存在する場合（Ｓ１０２でＹｅｓ）、検証結果情報取得部１００は、検証ツール検証結果１３からセキュリティ脆弱性種別情報１０２０とセキュリティ脆弱性詳細情報１０２１を取り出し、セキュリティ脆弱性検証結果情報格納部１０２に格納する（Ｓ１０３）。
【００４７】
セキュリティ脆弱性修正候補提示部１０３は、セキュリティ脆弱性種別情報１０２０とセキュリティ脆弱性種別情報１０１０のレコードで一致するものをサーチする（Ｓ１０４）。一致したレコードが存在しない場合（Ｓ１０５でＮｏ）、セキュリティ脆弱性修正候補提示部１０３は、ユーザコンソール１５の画面に「セキュリティ脆弱性修正情報が定義されていません」のメッセージを表示し（Ｓ１０７）、全体の処理は終了する。
【００４８】
サーチ結果で一致したレコードが存在する場合（Ｓ１０５でＹｅｓ）、セキュリティ脆弱性修正候補提示部１０３は、セキュリティ脆弱性修正情報１０１１の修正汎用コードの引数名を、セキュリティ脆弱性詳細情報１０２1の不正関数引数情報に置換して修正実コードを生成し、セキュリティ脆弱性修正情報１０１１における修正処理区分を添付して、セキュリティ脆弱性修正コード１０４を生成する。同時にセキュリティ脆弱性修正候補提示部１０３は、セキュリティ脆弱性詳細情報１０２１のファイル名と行番号のデータから、セキュリティ脆弱性修正箇所１０５を生成する（Ｓ１０６）。
【００４９】
セキュリティ脆弱性修正内容反映部１０６は、セキュリティ脆弱性修正コード１０４とセキュリティ脆弱性修正箇所１０５をユーザコンソール１５の画面に出力し、ソフトウェア開発者が、最適な修正コードを画面上で選択する（Ｓ１０８）。
【００５０】
セキュリティ脆弱性修正内容反映部１０６は、ソフトウェア開発者が選択した修正コードをオリジナルソースファイル１１に反映し、修正後ソースファイル１４を出力する（Ｓ１０９）。
【００５１】
尚、セキュリティ脆弱性修正コード１０４が１つの場合は、Ｓ１０８の処理は必須ではなく、セキュリティ脆弱性修正内容反映部１０６が、ユーザコンソール１５の画面に出力せずに、セキュリティ脆弱性修正コード１０４とセキュリティ脆弱性修正箇所１０５をオリジナルソースファイル１１に反映させる方式でもよい。
【００５２】
本実施形態には、セキュリティ脆弱性が存在するソフトウェアの問題を解消する修正コードの候補を自動生成するという効果がある。なぜなら、セキュリティ脆弱性修正候補提示部１０３が、セキュリティ脆弱性検証結果情報格納部１０２に格納されたセキュリティ脆弱性解析結果とセキュリティ脆弱性修正ルール格納部１０１に格納された修正ルールを基にして、ソフトウェアソースファイルに対する修正箇所と修正コードを生成して提示するからである。
【００５３】
修正コードの候補を自動生成することで、セキュリティ領域に精通していないソフトウェア開発者でも、セキュリティ脆弱性に関するソースコードの修正を短時間で行うことが可能となる。
＜第二の実施形態＞
次に、本願発明の第二の実施形態について図面を参照して詳細に説明する。
【００５４】
図１０は本実施形態のソフトウェア修正装置２０の構成を示すブロック図である。
【００５５】
修正情報格納部２０１は、１つ以上のレコードを包含する問題種別情報２０１０と、問題種別情報２０１０の各レコードに対応付けられた修正レコード２０１１を格納している。問題種別情報２０１０の各レコードは、不正関数の情報を包含している。修正レコード２０１１の各レコードは、引数名を含む修正汎用コードの情報を包含している。問題種別情報２０１０と修正レコード２０１１は、ソフトウェア開発者がソフトウェアの修正ルールとして入力したものである。
【００５６】
修正問題情報格納部２０２は、１つ以上のレコードを包含する問題種別情報２０２０と、問題種別情報２０２０の各レコードに対応づけられた問題情報レコード２０２１を格納している。問題種別情報２０２０の各レコードは不正関数の情報を包含している。問題情報レコード２０２１の各レコードは、不正関数引数の情報を包含している。本実施形態では、ソフトウェア開発者が修正箇所の検討を行うため、問題情報レコード２０２１は第一の実施形態で記載したファイル名と行番号の情報を包含しなくてもよい。問題種別情報２０２０と問題情報レコード２０２１は、ソフトウェア問題解析ツールの出力を編集したものでもよいし、ソフトウェア開発者のソフトウェア解析結果を入力したものでもよい。
【００５７】
修正候補生成部２０３は、問題種別情報２０２０と問題種別情報２０１０が一致するレコードをサーチする。一致するものがある場合、修正候補生成部２０３は、一致したレコードについて、修正レコード２０１１における汎用修正コードの引数名を、問題情報レコード２０２１における不正関数引数に置き換えて修正実コード２０４を生成する。修正実コード２０４は、ソフトウェア開発者がソースファイルへ適用する。
【００５８】
次に図１１のフローチャートを参照して、本実施形態の動作について詳細に説明する。
【００５９】
修正候補生成部２０３は、問題種別情報２０２０と問題別情報２０１０が一致するレコードをサーチする（Ｓ２０１）。一致したレコードが存在しない場合（Ｓ２０２でＮｏ）、全体の処理は終了する。一致したレコードが存在する場合（Ｓ２０２でＹｅｓ）、修正候補生成部２０３は、修正レコード２０１１の修正汎用コードの引数名を、問題情報レコード２０２１の不正関数引数情報に置換して修正実コード２０４を生成する（Ｓ２０３）。
【００６０】
本実施形態には、第一の実施形態と同様に、ソフトウェアの問題を解消する修正コードの候補を自動生成するという効果がある。なぜなら、修正候補生成部２０３が、修正問題情報格納部２０２に格納された問題解析情報と修正情報格納部２０１に格納された修正ルールを基にして、ソフトウェアソースファイルにおける修正コードを生成して提示するからである。
【００６１】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されたものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【００６２】
１０    セキュリティ脆弱性修正装置
１００    セキュリティ脆弱性検証結果情報取得部
１０１    セキュリティ脆弱性修正ルール格納部
１０１０    セキュリティ脆弱性種別情報
１０１１    セキュリティ脆弱性修正情報
１０２    セキュリティ脆弱性検証結果情報格納部
１０２０    セキュリティ脆弱性種別情報
１０２１    セキュリティ脆弱性詳細情報
１０３    セキュリティ脆弱性修正候補提示部
１０４    セキュリティ脆弱性修正コード
１０５    セキュリティ脆弱性修正箇所
１０６    セキュリティ脆弱性修正内容反映部
１１    オリジナルソースファイル
１２    セキュリティ脆弱性検証ツール
１３    検証ツール検証結果
１４    修正後ソースファイル
１５    ユーザコンソール
２０    ソフトウェア修正装置
２０１    修正情報格納部
２０１０    問題種別情報
２０１１    修正レコード
２０２    問題情報格納部
２０２０    問題種別情報
２０２１    問題情報レコード
２０３    修正候補生成部
２０４    修正実コード
【図１】
0005845888.tif 000002
【図２】
0005845888.tif 000003
【図３】
0005845888.tif 000004
【図４】
0005845888.tif 000005
【図５】
0005845888.tif 000006
【図６】
0005845888.tif 000007
【図７】
0005845888.tif 000008
【図８】
0005845888.tif 000009
【図９】
0005845888.tif 000010
【図１０】
0005845888.tif 000011
【図１１】
0005845888.tif 000012