(57)【特許請求の範囲】
【請求項１】
ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正が行われた箇所の差分を抽出する第１の差分抽出部と、
前記第１の差分抽出部によって抽出された差分の特徴を算出する特徴算出部と、
ソースコードから変換された実行ファイルと、当該ソースコードに修正が行われた後のソースコードから変換された実行ファイルと、の所定の箇所の差分を抽出する第２の差分抽出部と、
前記第２の差分抽出部によって算出された前記所定の箇所の差分の、前記特徴算出部によって算出された前記脆弱性修正が行われた箇所の差分の特徴との類似度を算出する類似度算出部と、
前記類似度算出部により算出された修正箇所ごとの類似度を出力する出力部と、
を有することを特徴とする特定支援装置。
【請求項２】
前記第１の差分抽出部及び前記第２の差分抽出部は、関数単位、基本ブロック単位、機械語命令単位のいずれかの単位で差分を抽出することを特徴とする請求項１に記載の特定支援装置。
【請求項３】
前記第１の差分抽出部及び前記第２の差分抽出部は、機械語命令、呼出し関数、即値のうちの少なくともいずれかに基づいて差分を抽出することを特徴とする請求項１又は２に記載の特定支援装置。
【請求項４】
前記第１の差分抽出部及び前記第２の差分抽出部は、修正前後の実行ファイルにおける、所定の情報の出現回数の差分を抽出することを特徴とする請求項１から３のいずれか１項に記載の特定支援装置。
【請求項５】
前記第１の差分抽出部及び前記第２の差分抽出部は、修正前後の実行ファイルにおける、所定の情報の増加分及び減少分を差分として抽出することを特徴とする請求項１から３のいずれか１項に記載の特定支援装置。
【請求項６】
前記第１の差分抽出部は、ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正以外の修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正以外の修正が行われた箇所の差分をさらに抽出し、
前記類似度算出部は、前記第２の差分抽出部によって算出された前記所定の箇所の差分の、前記特徴算出部によって算出された前記脆弱性修正以外の修正が行われた箇所の差分の特徴との類似度を算出することを特徴とする請求項１から５のいずれか１項に記載の特定支援装置。
【請求項７】
コンピュータによって実行される特定支援方法であって、
ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正が行われた箇所の差分を抽出する第１の差分抽出工程と、
前記第１の差分抽出工程によって抽出された差分の特徴を算出する特徴算出工程と、
ソースコードから変換された実行ファイルと、当該ソースコードに修正が行われた後のソースコードから変換された実行ファイルと、の所定の箇所の差分を抽出する第２の差分抽出工程と、
前記第２の差分抽出工程によって算出された前記所定の箇所の差分の、前記特徴算出工程によって算出された前記脆弱性修正が行われた箇所の差分の特徴との類似度を算出する類似度算出工程と、
前記類似度算出工程により算出された修正箇所ごとの類似度を出力する出力工程と、
を含んだことを特徴とする特定支援方法。
【請求項８】
コンピュータを、請求項１から６のいずれか１項に記載の特定支援装置として機能させるための特定支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特定支援装置、特定支援方法及び特定支援プログラムに関する。
【背景技術】
【０００２】
ソフトウェアの脆弱性は、マルウェア感染等に利用され、ユーザに大きな被害をもたらす可能性があることから、発見又は報告され次第、各ソフトウェアベンダによってただちに修正される。また、実行ファイルの配布等により脆弱性の対策は可能であることから、修正された脆弱性の箇所の情報が公開されることはほとんどない。一方で、修正された脆弱性の箇所に関する情報は、セキュリティ製品の開発者等にとっては重要な情報となる。【０００３】
そこで、従来、実行ファイル間の類似関数の発見及び比較を行うバイナリ比較ツールを用いて解析を行う技術が知られている（例えば、非特許文献１を参照）。また、パッチ差分時に、修正後の関数で増加した部分に着目し、脆弱性修正箇所の特徴に基づいて、ＳＩＳ（Security  Implication  Score）と呼ばれる点数付けを行い、解析を支援するDarunGrimという技術が提案されている（例えば、非特許文献２を参照）。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】H.  Flake,  “Structural  comparison  of  executable  objects,”  in  DIMVA,  2004,  pp.  161-173.
【非特許文献２】ExploitSpotting:  Locating  Vulnerabilities  Out  Of  Vendor  Patches  Automatically,  Black  Hat  USA  2010,  Las  Vegas,  USA.  Jeongwook  “Matt”  Oh
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の技術には、解析者の知見や経験が不足している場合、ソフトウェアの脆弱性の解析を行うことができない場合があるという問題があった。例えば、ソースコードのある１箇所が修正された場合であっても、コンパイラやリンク環境の違いから、実行ファイルでは複数の箇所が修正前後で変化している場合がある。このような場合、バイナリ比較ツールによる修正前後の実行ファイルの比較結果から脆弱性の修正箇所を特定するには、解析者に深い知識や多様な経験が要求される。また、DarunGrimでは、着目する関数や点数の付け方は、解析者の経験に基づいて決定されるため、解析者の知見や経験が不足している場合、解析を行うことは困難である。
【課題を解決するための手段】
【０００６】
本発明の特定支援装置は、ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正が行われた箇所の差分を抽出する第１の差分抽出部と、前記第１の差分抽出部によって抽出された差分の特徴を算出する特徴算出部と、ソースコードから変換された実行ファイルと、当該ソースコードに修正が行われた後のソースコードから変換された実行ファイルと、の所定の箇所の差分を抽出する第２の差分抽出部と、前記第２の差分抽出部によって算出された前記所定の箇所の差分の、前記特徴算出部によって算出された前記脆弱性修正が行われた箇所の差分の特徴との類似度を算出する類似度算出部と、を有することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、解析者の知見や経験が不足している場合であっても、ソフトウェアの脆弱性の解析を行うことができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、第１の実施形態に係る特定支援装置の構成の一例を示す図である。
【図２】図２は、第１の実施形態に係る特定支援装置による修正箇所の特定について説明するための図である。
【図３】図３は、第１の実施形態に係る特定支援装置による関数の特定について説明するための図である。
【図４】図４は、プログラムコードの一例を示す図である。
【図５】図５は、第１の実施形態に係る特定支援装置による差分の抽出について説明するための図である。
【図６】図６は、命令の正規化規則の一例を示す図である。
【図７】図７は、脆弱性修正箇所候補の一例を示す図である。
【図８】図８は、第１の実施形態に係る特定支援装置の処理の流れを示すフローチャートである。
【図９】図９は、第１の実施形態に係る特定支援装置の処理の流れを示すフローチャートである。
【図１０】図１０は、第１の実施形態に係る特定支援装置の処理の流れを示すフローチャートである。
【図１１】図１１は、特定支援プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【０００９】
以下に、本願に係る特定支援装置、特定支援方法及び特定支援プログラムの実施形態を図面に基づいて詳細に説明する。なお、本発明は、以下に説明する実施形態により限定されるものではない。
【００１０】
［第１の実施形態の構成］
まず、図１を用いて、第１の実施形態に係る特定支援装置の構成について説明する。図１は、第１の実施形態に係る特定支援装置の構成の一例を示す図である。図１に示すように、特定支援装置１０は、学習部１００及び候補算出部２００を有する。
【００１１】
学習部１００は、脆弱性修正の特徴と、脆弱性修正以外の修正の特徴と、を学習する。また、候補算出部２００は、学習部１００によって学習された特徴に基づき、ソフトウェアの修正箇所のうち、脆弱性修正が行われた修正箇所を算出する。
【００１２】
ここで、脆弱性とは、ソフトウェアに存在するバグ（不具合）のうち、第三者によって悪用可能なものである。脆弱性を有するソフトウェアは、マルウェアの感染等に悪用されることで、ユーザに大きな被害をもたらすことがある。脆弱性は、被害を最小限にするため、発見又は報告され次第、各ソフトウェアベンダによってただちに修正される。また、修正された脆弱性の情報は、脆弱性データベース（共通脆弱性識別子、ＣＶＥ：Common  Vulnerabilities  and  Exposures）や、ソフトウェアベンダのＷｅｂサイト等で公表される。このとき、公表される情報は、脆弱性の種類や深刻度等多岐にわたるが、ソフトウェアにおける脆弱性の修正箇所等の具体的な情報が掲載されることはほとんどない。
【００１３】
学習部１００には、脆弱性修正が行われる前後のソースコードである修正前ソースコード２１及び修正後ソースコード２２と、脆弱性修正以外の修正が行われる前後のソースコードである修正前ソースコード３１及び修正後ソースコード３２と、が入力される。また、候補算出部２００には、所定の修正が行われた前後の実行ファイルである修正前実行ファイル４１及び修正後実行ファイル４２が入力される。本実施形態の特定支援装置１０は、修正後実行ファイル４２の修正箇所のうち、脆弱性修正が行われた箇所の特定を支援するものである。
【００１４】
ここで、ソースコードとは、コンピュータに対する一連の指示を、プログラミング言語を用いて記述したものである。また、実行ファイルとは、ソースコードを、コンピュータが理解及び実行ができる形式にコンパイラを用いて変換したものである。また、コンパイラとは、高級言語で記述されたソースコードを、コンピュータで実行可能な形式に変換するソフトウェアである。また、コンパイルとは、コンパイラによって行われる変換処理である。
【００１５】
［学習部の構成］
図１に示すように、学習部１００は、修正箇所特定部１０１、変換部１０２、差分抽出部１０３及び特徴算出部１０４を有する。また、学習部１００は、脆弱性修正の前後の差分の特徴１２０、及び、脆弱性修正以外の修正の前後の差分の特徴１３０を算出する。以下では、学習部１００が、修正前ソースコード２１及び修正後ソースコード２２を用いて、差分の特徴１２０を算出する処理について説明する。同様の処理により、学習部１００は、修正前ソースコード３１及び修正後ソースコード３２を用いて、差分の特徴１３０を算出することができる。
【００１６】
修正箇所特定部１０１は、修正前ソースコード２１と修正後ソースコード２２とを比較し、差分が発生している部分を特定する。図２は、第１の実施形態に係る特定支援装置による修正箇所の特定について説明するための図である。図２に示すように、修正箇所特定部１０１は、diffプログラム等を利用して差分が発生している箇所の行数を取得する。図２の例では、修正箇所特定部１０１は、修正後ソースコード２２の１９３行目から５行分が修正箇所であることを特定している。
【００１７】
そして、修正箇所特定部１０１は、特定した差分が発生している部分を含む関数を特定する。修正箇所特定部１０１は、ctags等のソースコード解析ソフトウェアを用いること等により、各関数の先頭及び終端の行を取得する。例えば、修正箇所特定部１０１は、関数の先頭行を取得し、先頭行を基に終端記号を探索し、終端記号が存在していた行を終端行とする。
【００１８】
図３は、第１の実施形態に係る特定支援装置による関数の特定について説明するための図である。まず、図３に示すように、修正箇所特定部１０１は、BN_hex2bn関数の先端行として１７８行目を取得し、終端行として２５２行目を取得する。修正箇所特定部１０１は、関数BN_hex2bnが１７８行目から２５２行目にかけて定義されていることから、１９３行目から５行分の修正箇所が、BN_hex2bn関数の差分箇所であったことを特定する。つまり、修正箇所特定部１０１は、BN_hex2bn関数が修正箇所を含んでいることを特定する。
【００１９】
変換部１０２は、ソースコード及び実行ファイルを所定の形式に変換する。変換部１０２は、修正前ソースコード２１と修正後ソースコード２２とを、同じコンパイラを用いて同じコンパイルオプションでコンパイルした後、さらに逆アセンブルを行う。
【００２０】
ここで、逆アセンブルとは、コンピュータで実行可能な形式からアセンブリ言語で記述されたソースコードに変換する処理である。一方、アセンブルとは、低級言語であるアセンブリ言語で記述されたソースコードをコンピュータで実行可能な形式に変換する処理である。また、アセンブルを行うソフトウェアをアセンブラという。同様に、逆アセンブルを行うソフトウェアを逆アセンブラという。また、以降の説明では、逆アセンブルの結果得られたプログラムの事をプログラムコードと表記する。
【００２１】
図４は、プログラムコードの一例を示す図である。図４は、変換部１０２がBN_hex2bn関数に対して逆アセンブルを行うことによって得られたプログラムコードである。図４に示すように、プログラムコードにおいては、各命令が機械語命令として記載されている。
【００２２】
変換部１０２は、既知の逆アセンブル手法を用いることができる。既知の逆アセンブル手法としては、リニア・スイープ法やリカーシブ・トラバーサル法を利用した手法（参考文献１：B.  Schwarz,  S.  K.  Debray,  and  G.  R.  Andrews.  Disassembly  of  executable  code  revisited.  In  Proc.  IEEE  2002  Working  Conference  on  Reverse  Engineering  (WCRE),  October  2002.）や、確率モデルを利用した手法（参考文献２：特許第５００９１８６号公報）が知られている。
【００２３】
差分抽出部１０３は、ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正が行われた箇所の差分を抽出する。また、差分抽出部１０３は、ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性対策以外を目的とする修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性対策以外を目的とする修正が行われた箇所の差分をさらに抽出することができる。このとき、本実施形態では、差分抽出部１０３は、実行ファイルの差分を、変換部１０２による逆アセンブルの結果得られたプログラムコードを基に抽出する。
【００２４】
差分抽出部１０３は、修正箇所を含んでいることが特定された関数のプログラムコードから、修正前後の差分を抽出する。差分抽出部１０３は、関数単位だけでなく、基本ブロック単位、機械語命令単位のいずれかの単位で差分を抽出することができる。なお、関数とは、ソフトウェア中に存在する、ある特定の目的を果たすための特定の手順のプログラムコードの塊である。一方、基本ブロックとは、１つの入り口と１つの出口を持ち、内部に分岐を含まないプログラムコードの塊である。
【００２５】
また、差分抽出部１０３は、機械語命令、呼出し関数、即値のうちの少なくともいずれかに基づいて差分を抽出することができる。差分抽出部１０３は、修正前後の実行ファイルにおける、所定の情報の出現回数の差分を抽出することができる。差分抽出部１０３は、修正前後の実行ファイルにおける、所定の情報の増加分及び減少分を差分として抽出することができる。例えば、差分抽出部１０３は、プログラムコードの修正箇所において、修正の前後で「push」という機械語命令の出現回数の増加分、又は減少分を差分として抽出する。
【００２６】
また、差分抽出部１０３は、各要素を正規化し抽象化したうえで差分を抽出してもよい。図５を用いて、要素を正規化したうえで差分を抽出する方法について説明する。図５は、第１の実施形態に係る特定支援装置による差分の抽出について説明するための図である。まず、図５の（１）に示すように、差分抽出部１０３は、脆弱性修正前の修正箇所に含まれていた機械語命令の一覧と脆弱性修正後の修正箇所に含まれていた機械語命令の一覧とから、出現命令集合の増分を増分命令集合として抽出する。差分抽出部１０３は、例えば、脆弱性修正前の修正箇所に「mov」という機械語命令が１回出現し、脆弱性修正後の修正箇所に「mov」という機械語命令が３回出現している場合、３回から１回を引くと２なので、増分命令集合には、「mov」という機械語命令を２個含める。差分抽出部１０３は、他の機械語命令についても同様の処理を行う。
【００２７】
そして、図５の（２）に示すように、差分抽出部１０３は、増分命令集合を正規化する。ここで、差分抽出部１０３は、図６に示す正規化規則に従って機械語命令を正規化命令に置き換えることで正規化を行う。図６は、命令の正規化規則の一例を示す図である。図６に示すように、例えば、「jns」、「jle」、「jne」、「jge」、「jae」、「jmp」、「js」、「jl」、「je」、「jg」、「ja」、「jb」、「jbe」という機械語命令は、いずれも命令の種類としては「分岐」であり、「jump」に置き換えられる。そして、図５の（３）に示すように、差分抽出部１０３は、正規化後の増分命令集合における、正規化命令ごとの出現頻度を差分として抽出する。
【００２８】
特徴算出部１０４は、差分抽出部１０３によって抽出された差分の特徴を算出する。特徴算出部１０４は、例えば、差分抽出部１０３によって抽出された差分を学習し、線形分類器を作成してもよい。例えば、差分抽出部１０３によって作成される線形分類器は、修正目的が未知の実行ファイルの修正前後の差分を入力すると、当該差分と脆弱性修正前後の差分との類似度を出力する。
【００２９】
前述の通り、差分抽出部１０３は、脆弱性修正の修正箇所の差分だけでなく、脆弱性以外の修正箇所の差分を抽出する。そのため、特徴算出部１０４は、修正による差分を、脆弱性修正のクラスタと、脆弱性以外の修正のクラスタとに分類するクラスタ分析のアルゴリズムを生成してもよい。
【００３０】
［候補算出部の構成］
図１に示すように、候補算出部２００は、変換部２０１、差分抽出部２０２、類似度算出部２０３及び一覧生成部２０４を有する。また、候補算出部２００は、脆弱性修正箇所候補２５０を生成する。
【００３１】
変換部２０１は、実行ファイルを所定の形式に変換する。変換部２０１は、修正前実行ファイル４１及び修正後実行ファイル４２を、逆アセンブルを行うことによりプログラムコードに変換する。変換部２０１は、変換部１０２と同様の手法により逆アセンブルを行う。
【００３２】
差分抽出部２０２は、ソースコードから変換された修正前実行ファイル４１と、当該ソースコードに修正が行われた後のソースコードから変換された修正後実行ファイル４２と、の当該脆弱性修正が行われた箇所の差分を抽出する。本実施形態では、差分抽出部２０２は、実行ファイルの差分を、変換部２０１による逆アセンブルの結果得られたプログラムコードを基に抽出する。なお、差分抽出部２０２による差分の抽出には、修正前実行ファイル４１及び修正後実行ファイル４２の元となったソースコードは不要である。また、修正前実行ファイル４１に対して行われた修正が脆弱性修正であるか否かは未知であってよい。
【００３３】
差分抽出部２０２は、差分抽出部１０３と同様に、プログラムコードから修正前後の差分を抽出する。差分抽出部２０２は、差分抽出部１０３と同様に、関数単位だけでなく、基本ブロック単位、機械語命令単位のいずれかの単位で差分を抽出することができる。また、差分抽出部２０２は、差分抽出部１０３と同様に、機械語命令、呼出し関数、即値のうちの少なくともいずれかに基づいて差分を抽出することができる。差分抽出部２０２は、差分抽出部１０３と同様に、修正前後の実行ファイルにおける、所定の情報の出現回数の差分を抽出することができる。差分抽出部２０２は、差分抽出部１０３と同様に、修正前後の実行ファイルにおける、所定の情報の増加分及び減少分を差分として抽出することができる。また、差分抽出部２０２は、差分抽出部１０３と同様に、各要素を正規化し抽象化したうえで差分を抽出してもよい。
【００３４】
類似度算出部２０３は、差分抽出部２０２によって算出された所定の箇所の差分の、特徴算出部１０４によって算出された脆弱性対策を目的とする修正が行われた箇所の差分の特徴との類似度を算出する。また、類似度算出部２０３は、差分抽出部２０２によって算出された所定の箇所の差分の、特徴算出部１０４によって算出された脆弱性対策以外を目的とする修正が行われた箇所の差分の特徴との類似度を算出する。
【００３５】
例えば、類似度算出部２０３は、特徴算出部１０４によって作成された線形分類器に、差分抽出部２０２によって抽出された差分を入力し、当該差分と脆弱性修正前後の差分との類似度を出力させてもよい。また、類似度算出部２０３は、特徴算出部１０４によって生成されたクラスタ分析のアルゴリズムを用いて、差分抽出部２０２によって抽出された差分を、脆弱性修正のクラスタ又は脆弱性以外の修正のクラスタのいずれかに分類してもよい。
【００３６】
一覧生成部２０４は、類似度算出部２０３によって算出された修正箇所ごとの類似度の一覧を生成し出力する。例えば、一覧生成部２０４は、修正後実行ファイル４２に含まれる関数ごとの類似度の一覧を生成し、脆弱性修正箇所候補２５０として出力する。図７は、脆弱性修正箇所候補の一例を示す図である。図７に示すように、脆弱性修正箇所候補２５０では、関数ごとの類似度が点数として表される。例えば、functionA関数の脆弱性修正の差分の特徴との類似度は４３．５である。また、例えば、functionD関数の脆弱性修正の差分の特徴との類似度は５．３である。
【００３７】
［第１の実施形態の処理］
図８〜１０を用いて、特定支援装置１０の処理の流れについて説明する。図８〜１０は、第１の実施形態に係る特定支援装置の処理の流れを示すフローチャートである。図８に示すように、学習部１００は、脆弱性修正が行われた修正箇所、及び脆弱性修正以外の修正が行われた修正箇所の差分の特徴を学習する（ステップＳ１００）。次に、候補算出部２００は、学習部１００によって学習された差分の特徴を基に、修正が行われた実行ファイルから、脆弱性修正が行われた箇所の候補を算出する（ステップＳ２００）。
【００３８】
図９を用いて、図８のステップＳ１００について詳細に説明する。図９に示すように、修正箇所特定部１０１は、ソースコードから修正箇所を特定する（ステップＳ１０１）。変換部１０２は、ソースコードを実行ファイルに変換し、さらに実行ファイルをプログラムコードに変換する（ステップＳ１０２）。変換部１０２は、例えば、コンパイラ及び逆アセンブラを用いて変換を行うことができる。差分抽出部１０３は、プログラムコードから修正前後の差分を抽出する（ステップＳ１０３）。差分抽出部１０３は、例えば、機械語命令の修正前後における増加分及び減少分を差分として抽出することができる。また、特徴算出部１０４は、差分抽出部１０３が抽出した修正前後の差分の特徴を算出する（ステップＳ１０４）。例えば、特徴算出部１０４は、差分の特徴を基に線形分類器を作成してもよい。
【００３９】
図１０を用いて、図８のステップＳ２００について詳細に説明する。変換部２０１は、修正前後の実行ファイルをプログラムコードに変換する（ステップＳ２０１）。差分抽出部２０２は、プログラムコードから修正前後の差分を抽出する（ステップＳ２０２）。類似度算出部２０３は、差分抽出部２０２が抽出した修正前後の差分と、学習部１００によって学習済みの特徴との類似度を算出する（ステップＳ２０３）。例えば、類似度算出部２０３は、特徴算出部１０４によって作成された線形分類器を用いて類似度を算出してもよい。一覧生成部２０４は、脆弱性修正箇所候補の一覧を生成する（ステップＳ２０４）。
【００４０】
［第１の実施形態の効果］
差分抽出部１０３は、ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正が行われた箇所の差分を抽出する。また、特徴算出部１０４は、差分抽出部１０３によって抽出された差分の特徴を算出する。また、差分抽出部２０２は、ソースコードから変換された実行ファイルと、当該ソースコードに修正が行われた後のソースコードから変換された実行ファイルと、の所定の箇所の差分を抽出する。また、類似度算出部２０３は、差分抽出部２０２によって算出された所定の箇所の差分の、特徴算出部１０４によって算出された脆弱性修正が行われた箇所の差分の特徴との類似度を算出する。本実施形態によれば、解析者は修正前後の実行ファイルを特定支援装置１０入力するだけでよく、脆弱性修正箇所の候補の特定に関する処理は、特定支援装置１０によって自動的に行われる。このため、本実施形態によれば、解析者の知見や経験が不足している場合であっても、ソフトウェアの解析を行うことができる。
【００４１】
差分抽出部１０３及び差分抽出部２０２は、関数単位、基本ブロック単位、機械語命令単位のいずれかの単位で差分を抽出することができる。また、差分抽出部１０３及び差分抽出部２０２は、機械語命令、呼出し関数、即値のうちの少なくともいずれかに基づいて差分を抽出することができる。差分抽出部１０３及び差分抽出部２０２は、修正前後の実行ファイルにおける、所定の情報の出現回数の差分を抽出することができる。これにより、解析者の知見や経験が不足している場合であっても、特定支援装置１０はあらかじめ定められた基準に基づいて解析を行うことができる。
【００４２】
差分抽出部１０３及び差分抽出部２０２は、修正前後の実行ファイルにおける、所定の情報の増加分及び減少分を差分として抽出することができる。このように増加分だけでなく減少分を差分として抽出することで、増加分だけでは特定することができなかった脆弱性の修正箇所を特定することが可能となる。
【００４３】
差分抽出部１０３は、ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正以外の修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正以外の修正が行われた箇所の差分をさらに抽出することができる。このとき、類似度算出部２０３は、差分抽出部２０２によって算出された所定の箇所の差分の、特徴算出部１０４によって算出された脆弱性修正以外の修正が行われた箇所の差分の特徴との類似度を算出する。このように、脆弱性修正だけでなく、脆弱性以外の修正との類似度を計算することで、脆弱性修正の候補をより高い精度で特定できる。
【００４４】
［システム構成等］
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示のように構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部又は任意の一部が、ＣＰＵ（Central  Processing  Unit）及び当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００４５】
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００４６】
［プログラム］
一実施形態として、特定支援装置１０は、パッケージソフトウェアやオンラインソフトウェアとして上記の脆弱性修正箇所の特定支援を実行する特定支援プログラムを所望のコンピュータにインストールさせることによって実装できる。例えば、上記の特定支援プログラムを情報処理装置に実行させることにより、情報処理装置を特定支援装置１０として機能させることができる。ここで言う情報処理装置には、デスクトップ型又はノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）等の移動体通信端末、さらには、ＰＤＡ（Personal  Digital  Assistant）等のスレート端末等がその範疇に含まれる。
【００４７】
また、特定支援装置１０は、ユーザが使用する端末装置をクライアントとし、当該クライアントに上記の脆弱性修正箇所の特定支援に関するサービスを提供する特定支援サーバ装置として実装することもできる。例えば、特定支援サーバ装置は、修正前後の実行ファイルを入力とし、脆弱性修正箇所の候補を出力とする特定支援サービスを提供するサーバ装置として実装される。この場合、特定支援サーバ装置は、Ｗｅｂサーバとして実装することとしてもよいし、アウトソーシングによって上記の脆弱性修正箇所の特定支援に関するサービスを提供するクラウドとして実装することとしてもかまわない。
【００４８】
図１１は、特定支援プログラムを実行するコンピュータの一例を示す図である。コンピュータ１０００は、例えば、メモリ１０１０、ＣＰＵ１０２０を有する。また、コンピュータ１０００は、ハードディスクドライブインタフェース１０３０、ディスクドライブインタフェース１０４０、シリアルポートインタフェース１０５０、ビデオアダプタ１０６０、ネットワークインタフェース１０７０を有する。これらの各部は、バス１０８０によって接続される。
【００４９】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１１００に挿入される。シリアルポートインタフェース１０５０は、例えばマウス１１１０、キーボード１１２０に接続される。ビデオアダプタ１０６０は、例えばディスプレイ１１３０に接続される。
【００５０】
ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、特定支援装置１０の各処理を規定するプログラムは、コンピュータにより実行可能なコードが記述されたプログラムモジュール１０９３として実装される。プログラムモジュール１０９３は、例えばハードディスクドライブ１０９０に記憶される。例えば、特定支援装置１０における機能構成と同様の処理を実行するためのプログラムモジュール１０９３が、ハードディスクドライブ１０９０に記憶される。なお、ハードディスクドライブ１０９０は、ＳＳＤ（Solid  State  Drive）により代替されてもよい。
【００５１】
また、上述した実施形態の処理で用いられる設定データは、プログラムデータ１０９４として、例えばメモリ１０１０やハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して実行する。
【００５２】
なお、プログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、プログラムモジュール１０９３及びプログラムデータ１０９４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール１０９３及びプログラムデータ１０９４は、他のコンピュータから、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００５３】
１０  特定支援装置
２１、３１  修正前ソースコード
２２、３２  修正後ソースコード
４１  修正前実行ファイル
４２  修正後実行ファイル
１００  学習部
１０１  修正箇所特定部
１０２、２０１  変換部
１０３、２０２  差分抽出部
１０４  特徴算出部
１２０、１３０  差分の特徴
２００  候補算出部
２０３  類似度算出部
２０４  一覧生成部
２５０  脆弱性修正箇所候補
【図１】
0006734479.tif 000002
【図２】
0006734479.tif 000003
【図３】
0006734479.tif 000004
【図４】
0006734479.tif 000005
【図５】
0006734479.tif 000006
【図６】
0006734479.tif 000007
【図７】
0006734479.tif 000008
【図８】
0006734479.tif 000009
【図９】
0006734479.tif 000010
【図１０】
0006734479.tif 000011
【図１１】
0006734479.tif 000012