JP6734479B2 - 特定支援装置、特定支援方法及び特定支援プログラム - Google Patents

特定支援装置、特定支援方法及び特定支援プログラム Download PDF

Info

Publication number
JP6734479B2
JP6734479B2 JP2019525199A JP2019525199A JP6734479B2 JP 6734479 B2 JP6734479 B2 JP 6734479B2 JP 2019525199 A JP2019525199 A JP 2019525199A JP 2019525199 A JP2019525199 A JP 2019525199A JP 6734479 B2 JP6734479 B2 JP 6734479B2
Authority
JP
Japan
Prior art keywords
difference
source code
unit
correction
vulnerability
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2019525199A
Other languages
English (en)
Other versions
JPWO2018230194A1 (ja
Inventor
明日香 中島
明日香 中島
誠 岩村
誠 岩村
剛男 針生
剛男 針生
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Publication of JPWO2018230194A1 publication Critical patent/JPWO2018230194A1/ja
Application granted granted Critical
Publication of JP6734479B2 publication Critical patent/JP6734479B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)

Description

本発明は、特定支援装置、特定支援方法及び特定支援プログラムに関する。
ソフトウェアの脆弱性は、マルウェア感染等に利用され、ユーザに大きな被害をもたらす可能性があることから、発見又は報告され次第、各ソフトウェアベンダによってただちに修正される。また、実行ファイルの配布等により脆弱性の対策は可能であることから、修正された脆弱性の箇所の情報が公開されることはほとんどない。一方で、修正された脆弱性の箇所に関する情報は、セキュリティ製品の開発者等にとっては重要な情報となる。
そこで、従来、実行ファイル間の類似関数の発見及び比較を行うバイナリ比較ツールを用いて解析を行う技術が知られている(例えば、非特許文献1を参照)。また、パッチ差分時に、修正後の関数で増加した部分に着目し、脆弱性修正箇所の特徴に基づいて、SIS(Security Implication Score)と呼ばれる点数付けを行い、解析を支援するDarunGrimという技術が提案されている(例えば、非特許文献2を参照)。
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
しかしながら、従来の技術には、解析者の知見や経験が不足している場合、ソフトウェアの脆弱性の解析を行うことができない場合があるという問題があった。例えば、ソースコードのある1箇所が修正された場合であっても、コンパイラやリンク環境の違いから、実行ファイルでは複数の箇所が修正前後で変化している場合がある。このような場合、バイナリ比較ツールによる修正前後の実行ファイルの比較結果から脆弱性の修正箇所を特定するには、解析者に深い知識や多様な経験が要求される。また、DarunGrimでは、着目する関数や点数の付け方は、解析者の経験に基づいて決定されるため、解析者の知見や経験が不足している場合、解析を行うことは困難である。
本発明の特定支援装置は、ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正が行われた箇所の差分を抽出する第1の差分抽出部と、前記第1の差分抽出部によって抽出された差分の特徴を算出する特徴算出部と、ソースコードから変換された実行ファイルと、当該ソースコードに修正が行われた後のソースコードから変換された実行ファイルと、の所定の箇所の差分を抽出する第2の差分抽出部と、前記第2の差分抽出部によって算出された前記所定の箇所の差分の、前記特徴算出部によって算出された前記脆弱性修正が行われた箇所の差分の特徴との類似度を算出する類似度算出部と、を有することを特徴とする。
本発明によれば、解析者の知見や経験が不足している場合であっても、ソフトウェアの脆弱性の解析を行うことができる。
図1は、第1の実施形態に係る特定支援装置の構成の一例を示す図である。 図2は、第1の実施形態に係る特定支援装置による修正箇所の特定について説明するための図である。 図3は、第1の実施形態に係る特定支援装置による関数の特定について説明するための図である。 図4は、プログラムコードの一例を示す図である。 図5は、第1の実施形態に係る特定支援装置による差分の抽出について説明するための図である。 図6は、命令の正規化規則の一例を示す図である。 図7は、脆弱性修正箇所候補の一例を示す図である。 図8は、第1の実施形態に係る特定支援装置の処理の流れを示すフローチャートである。 図9は、第1の実施形態に係る特定支援装置の処理の流れを示すフローチャートである。 図10は、第1の実施形態に係る特定支援装置の処理の流れを示すフローチャートである。 図11は、特定支援プログラムを実行するコンピュータの一例を示す図である。
以下に、本願に係る特定支援装置、特定支援方法及び特定支援プログラムの実施形態を図面に基づいて詳細に説明する。なお、本発明は、以下に説明する実施形態により限定されるものではない。
[第1の実施形態の構成]
まず、図1を用いて、第1の実施形態に係る特定支援装置の構成について説明する。図1は、第1の実施形態に係る特定支援装置の構成の一例を示す図である。図1に示すように、特定支援装置10は、学習部100及び候補算出部200を有する。
学習部100は、脆弱性修正の特徴と、脆弱性修正以外の修正の特徴と、を学習する。また、候補算出部200は、学習部100によって学習された特徴に基づき、ソフトウェアの修正箇所のうち、脆弱性修正が行われた修正箇所を算出する。
ここで、脆弱性とは、ソフトウェアに存在するバグ(不具合)のうち、第三者によって悪用可能なものである。脆弱性を有するソフトウェアは、マルウェアの感染等に悪用されることで、ユーザに大きな被害をもたらすことがある。脆弱性は、被害を最小限にするため、発見又は報告され次第、各ソフトウェアベンダによってただちに修正される。また、修正された脆弱性の情報は、脆弱性データベース(共通脆弱性識別子、CVE:Common Vulnerabilities and Exposures)や、ソフトウェアベンダのWebサイト等で公表される。このとき、公表される情報は、脆弱性の種類や深刻度等多岐にわたるが、ソフトウェアにおける脆弱性の修正箇所等の具体的な情報が掲載されることはほとんどない。
学習部100には、脆弱性修正が行われる前後のソースコードである修正前ソースコード21及び修正後ソースコード22と、脆弱性修正以外の修正が行われる前後のソースコードである修正前ソースコード31及び修正後ソースコード32と、が入力される。また、候補算出部200には、所定の修正が行われた前後の実行ファイルである修正前実行ファイル41及び修正後実行ファイル42が入力される。本実施形態の特定支援装置10は、修正後実行ファイル42の修正箇所のうち、脆弱性修正が行われた箇所の特定を支援するものである。
ここで、ソースコードとは、コンピュータに対する一連の指示を、プログラミング言語を用いて記述したものである。また、実行ファイルとは、ソースコードを、コンピュータが理解及び実行ができる形式にコンパイラを用いて変換したものである。また、コンパイラとは、高級言語で記述されたソースコードを、コンピュータで実行可能な形式に変換するソフトウェアである。また、コンパイルとは、コンパイラによって行われる変換処理である。
[学習部の構成]
図1に示すように、学習部100は、修正箇所特定部101、変換部102、差分抽出部103及び特徴算出部104を有する。また、学習部100は、脆弱性修正の前後の差分の特徴120、及び、脆弱性修正以外の修正の前後の差分の特徴130を算出する。以下では、学習部100が、修正前ソースコード21及び修正後ソースコード22を用いて、差分の特徴120を算出する処理について説明する。同様の処理により、学習部100は、修正前ソースコード31及び修正後ソースコード32を用いて、差分の特徴130を算出することができる。
修正箇所特定部101は、修正前ソースコード21と修正後ソースコード22とを比較し、差分が発生している部分を特定する。図2は、第1の実施形態に係る特定支援装置による修正箇所の特定について説明するための図である。図2に示すように、修正箇所特定部101は、diffプログラム等を利用して差分が発生している箇所の行数を取得する。図2の例では、修正箇所特定部101は、修正後ソースコード22の193行目から5行分が修正箇所であることを特定している。
そして、修正箇所特定部101は、特定した差分が発生している部分を含む関数を特定する。修正箇所特定部101は、ctags等のソースコード解析ソフトウェアを用いること等により、各関数の先頭及び終端の行を取得する。例えば、修正箇所特定部101は、関数の先頭行を取得し、先頭行を基に終端記号を探索し、終端記号が存在していた行を終端行とする。
図3は、第1の実施形態に係る特定支援装置による関数の特定について説明するための図である。まず、図3に示すように、修正箇所特定部101は、BN_hex2bn関数の先端行として178行目を取得し、終端行として252行目を取得する。修正箇所特定部101は、関数BN_hex2bnが178行目から252行目にかけて定義されていることから、193行目から5行分の修正箇所が、BN_hex2bn関数の差分箇所であったことを特定する。つまり、修正箇所特定部101は、BN_hex2bn関数が修正箇所を含んでいることを特定する。
変換部102は、ソースコード及び実行ファイルを所定の形式に変換する。変換部102は、修正前ソースコード21と修正後ソースコード22とを、同じコンパイラを用いて同じコンパイルオプションでコンパイルした後、さらに逆アセンブルを行う。
ここで、逆アセンブルとは、コンピュータで実行可能な形式からアセンブリ言語で記述されたソースコードに変換する処理である。一方、アセンブルとは、低級言語であるアセンブリ言語で記述されたソースコードをコンピュータで実行可能な形式に変換する処理である。また、アセンブルを行うソフトウェアをアセンブラという。同様に、逆アセンブルを行うソフトウェアを逆アセンブラという。また、以降の説明では、逆アセンブルの結果得られたプログラムの事をプログラムコードと表記する。
図4は、プログラムコードの一例を示す図である。図4は、変換部102がBN_hex2bn関数に対して逆アセンブルを行うことによって得られたプログラムコードである。図4に示すように、プログラムコードにおいては、各命令が機械語命令として記載されている。
変換部102は、既知の逆アセンブル手法を用いることができる。既知の逆アセンブル手法としては、リニア・スイープ法やリカーシブ・トラバーサル法を利用した手法(参考文献1: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.)や、確率モデルを利用した手法(参考文献2:特許第5009186号公報)が知られている。
差分抽出部103は、ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正が行われた箇所の差分を抽出する。また、差分抽出部103は、ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性対策以外を目的とする修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性対策以外を目的とする修正が行われた箇所の差分をさらに抽出することができる。このとき、本実施形態では、差分抽出部103は、実行ファイルの差分を、変換部102による逆アセンブルの結果得られたプログラムコードを基に抽出する。
差分抽出部103は、修正箇所を含んでいることが特定された関数のプログラムコードから、修正前後の差分を抽出する。差分抽出部103は、関数単位だけでなく、基本ブロック単位、機械語命令単位のいずれかの単位で差分を抽出することができる。なお、関数とは、ソフトウェア中に存在する、ある特定の目的を果たすための特定の手順のプログラムコードの塊である。一方、基本ブロックとは、1つの入り口と1つの出口を持ち、内部に分岐を含まないプログラムコードの塊である。
また、差分抽出部103は、機械語命令、呼出し関数、即値のうちの少なくともいずれかに基づいて差分を抽出することができる。差分抽出部103は、修正前後の実行ファイルにおける、所定の情報の出現回数の差分を抽出することができる。差分抽出部103は、修正前後の実行ファイルにおける、所定の情報の増加分及び減少分を差分として抽出することができる。例えば、差分抽出部103は、プログラムコードの修正箇所において、修正の前後で「push」という機械語命令の出現回数の増加分、又は減少分を差分として抽出する。
また、差分抽出部103は、各要素を正規化し抽象化したうえで差分を抽出してもよい。図5を用いて、要素を正規化したうえで差分を抽出する方法について説明する。図5は、第1の実施形態に係る特定支援装置による差分の抽出について説明するための図である。まず、図5の(1)に示すように、差分抽出部103は、脆弱性修正前の修正箇所に含まれていた機械語命令の一覧と脆弱性修正後の修正箇所に含まれていた機械語命令の一覧とから、出現命令集合の増分を増分命令集合として抽出する。差分抽出部103は、例えば、脆弱性修正前の修正箇所に「mov」という機械語命令が1回出現し、脆弱性修正後の修正箇所に「mov」という機械語命令が3回出現している場合、3回から1回を引くと2なので、増分命令集合には、「mov」という機械語命令を2個含める。差分抽出部103は、他の機械語命令についても同様の処理を行う。
そして、図5の(2)に示すように、差分抽出部103は、増分命令集合を正規化する。ここで、差分抽出部103は、図6に示す正規化規則に従って機械語命令を正規化命令に置き換えることで正規化を行う。図6は、命令の正規化規則の一例を示す図である。図6に示すように、例えば、「jns」、「jle」、「jne」、「jge」、「jae」、「jmp」、「js」、「jl」、「je」、「jg」、「ja」、「jb」、「jbe」という機械語命令は、いずれも命令の種類としては「分岐」であり、「jump」に置き換えられる。そして、図5の(3)に示すように、差分抽出部103は、正規化後の増分命令集合における、正規化命令ごとの出現頻度を差分として抽出する。
特徴算出部104は、差分抽出部103によって抽出された差分の特徴を算出する。特徴算出部104は、例えば、差分抽出部103によって抽出された差分を学習し、線形分類器を作成してもよい。例えば、差分抽出部103によって作成される線形分類器は、修正目的が未知の実行ファイルの修正前後の差分を入力すると、当該差分と脆弱性修正前後の差分との類似度を出力する。
前述の通り、差分抽出部103は、脆弱性修正の修正箇所の差分だけでなく、脆弱性以外の修正箇所の差分を抽出する。そのため、特徴算出部104は、修正による差分を、脆弱性修正のクラスタと、脆弱性以外の修正のクラスタとに分類するクラスタ分析のアルゴリズムを生成してもよい。
[候補算出部の構成]
図1に示すように、候補算出部200は、変換部201、差分抽出部202、類似度算出部203及び一覧生成部204を有する。また、候補算出部200は、脆弱性修正箇所候補250を生成する。
変換部201は、実行ファイルを所定の形式に変換する。変換部201は、修正前実行ファイル41及び修正後実行ファイル42を、逆アセンブルを行うことによりプログラムコードに変換する。変換部201は、変換部102と同様の手法により逆アセンブルを行う。
差分抽出部202は、ソースコードから変換された修正前実行ファイル41と、当該ソースコードに修正が行われた後のソースコードから変換された修正後実行ファイル42と、の当該脆弱性修正が行われた箇所の差分を抽出する。本実施形態では、差分抽出部202は、実行ファイルの差分を、変換部201による逆アセンブルの結果得られたプログラムコードを基に抽出する。なお、差分抽出部202による差分の抽出には、修正前実行ファイル41及び修正後実行ファイル42の元となったソースコードは不要である。また、修正前実行ファイル41に対して行われた修正が脆弱性修正であるか否かは未知であってよい。
差分抽出部202は、差分抽出部103と同様に、プログラムコードから修正前後の差分を抽出する。差分抽出部202は、差分抽出部103と同様に、関数単位だけでなく、基本ブロック単位、機械語命令単位のいずれかの単位で差分を抽出することができる。また、差分抽出部202は、差分抽出部103と同様に、機械語命令、呼出し関数、即値のうちの少なくともいずれかに基づいて差分を抽出することができる。差分抽出部202は、差分抽出部103と同様に、修正前後の実行ファイルにおける、所定の情報の出現回数の差分を抽出することができる。差分抽出部202は、差分抽出部103と同様に、修正前後の実行ファイルにおける、所定の情報の増加分及び減少分を差分として抽出することができる。また、差分抽出部202は、差分抽出部103と同様に、各要素を正規化し抽象化したうえで差分を抽出してもよい。
類似度算出部203は、差分抽出部202によって算出された所定の箇所の差分の、特徴算出部104によって算出された脆弱性対策を目的とする修正が行われた箇所の差分の特徴との類似度を算出する。また、類似度算出部203は、差分抽出部202によって算出された所定の箇所の差分の、特徴算出部104によって算出された脆弱性対策以外を目的とする修正が行われた箇所の差分の特徴との類似度を算出する。
例えば、類似度算出部203は、特徴算出部104によって作成された線形分類器に、差分抽出部202によって抽出された差分を入力し、当該差分と脆弱性修正前後の差分との類似度を出力させてもよい。また、類似度算出部203は、特徴算出部104によって生成されたクラスタ分析のアルゴリズムを用いて、差分抽出部202によって抽出された差分を、脆弱性修正のクラスタ又は脆弱性以外の修正のクラスタのいずれかに分類してもよい。
一覧生成部204は、類似度算出部203によって算出された修正箇所ごとの類似度の一覧を生成し出力する。例えば、一覧生成部204は、修正後実行ファイル42に含まれる関数ごとの類似度の一覧を生成し、脆弱性修正箇所候補250として出力する。図7は、脆弱性修正箇所候補の一例を示す図である。図7に示すように、脆弱性修正箇所候補250では、関数ごとの類似度が点数として表される。例えば、functionA関数の脆弱性修正の差分の特徴との類似度は43.5である。また、例えば、functionD関数の脆弱性修正の差分の特徴との類似度は5.3である。
[第1の実施形態の処理]
図8〜10を用いて、特定支援装置10の処理の流れについて説明する。図8〜10は、第1の実施形態に係る特定支援装置の処理の流れを示すフローチャートである。図8に示すように、学習部100は、脆弱性修正が行われた修正箇所、及び脆弱性修正以外の修正が行われた修正箇所の差分の特徴を学習する(ステップS100)。次に、候補算出部200は、学習部100によって学習された差分の特徴を基に、修正が行われた実行ファイルから、脆弱性修正が行われた箇所の候補を算出する(ステップS200)。
図9を用いて、図8のステップS100について詳細に説明する。図9に示すように、修正箇所特定部101は、ソースコードから修正箇所を特定する(ステップS101)。変換部102は、ソースコードを実行ファイルに変換し、さらに実行ファイルをプログラムコードに変換する(ステップS102)。変換部102は、例えば、コンパイラ及び逆アセンブラを用いて変換を行うことができる。差分抽出部103は、プログラムコードから修正前後の差分を抽出する(ステップS103)。差分抽出部103は、例えば、機械語命令の修正前後における増加分及び減少分を差分として抽出することができる。また、特徴算出部104は、差分抽出部103が抽出した修正前後の差分の特徴を算出する(ステップS104)。例えば、特徴算出部104は、差分の特徴を基に線形分類器を作成してもよい。
図10を用いて、図8のステップS200について詳細に説明する。変換部201は、修正前後の実行ファイルをプログラムコードに変換する(ステップS201)。差分抽出部202は、プログラムコードから修正前後の差分を抽出する(ステップS202)。類似度算出部203は、差分抽出部202が抽出した修正前後の差分と、学習部100によって学習済みの特徴との類似度を算出する(ステップS203)。例えば、類似度算出部203は、特徴算出部104によって作成された線形分類器を用いて類似度を算出してもよい。一覧生成部204は、脆弱性修正箇所候補の一覧を生成する(ステップS204)。
[第1の実施形態の効果]
差分抽出部103は、ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正が行われた箇所の差分を抽出する。また、特徴算出部104は、差分抽出部103によって抽出された差分の特徴を算出する。また、差分抽出部202は、ソースコードから変換された実行ファイルと、当該ソースコードに修正が行われた後のソースコードから変換された実行ファイルと、の所定の箇所の差分を抽出する。また、類似度算出部203は、差分抽出部202によって算出された所定の箇所の差分の、特徴算出部104によって算出された脆弱性修正が行われた箇所の差分の特徴との類似度を算出する。本実施形態によれば、解析者は修正前後の実行ファイルを特定支援装置10入力するだけでよく、脆弱性修正箇所の候補の特定に関する処理は、特定支援装置10によって自動的に行われる。このため、本実施形態によれば、解析者の知見や経験が不足している場合であっても、ソフトウェアの解析を行うことができる。
差分抽出部103及び差分抽出部202は、関数単位、基本ブロック単位、機械語命令単位のいずれかの単位で差分を抽出することができる。また、差分抽出部103及び差分抽出部202は、機械語命令、呼出し関数、即値のうちの少なくともいずれかに基づいて差分を抽出することができる。差分抽出部103及び差分抽出部202は、修正前後の実行ファイルにおける、所定の情報の出現回数の差分を抽出することができる。これにより、解析者の知見や経験が不足している場合であっても、特定支援装置10はあらかじめ定められた基準に基づいて解析を行うことができる。
差分抽出部103及び差分抽出部202は、修正前後の実行ファイルにおける、所定の情報の増加分及び減少分を差分として抽出することができる。このように増加分だけでなく減少分を差分として抽出することで、増加分だけでは特定することができなかった脆弱性の修正箇所を特定することが可能となる。
差分抽出部103は、ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正以外の修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正以外の修正が行われた箇所の差分をさらに抽出することができる。このとき、類似度算出部203は、差分抽出部202によって算出された所定の箇所の差分の、特徴算出部104によって算出された脆弱性修正以外の修正が行われた箇所の差分の特徴との類似度を算出する。このように、脆弱性修正だけでなく、脆弱性以外の修正との類似度を計算することで、脆弱性修正の候補をより高い精度で特定できる。
[システム構成等]
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示のように構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部又は任意の一部が、CPU(Central Processing Unit)及び当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
[プログラム]
一実施形態として、特定支援装置10は、パッケージソフトウェアやオンラインソフトウェアとして上記の脆弱性修正箇所の特定支援を実行する特定支援プログラムを所望のコンピュータにインストールさせることによって実装できる。例えば、上記の特定支援プログラムを情報処理装置に実行させることにより、情報処理装置を特定支援装置10として機能させることができる。ここで言う情報処理装置には、デスクトップ型又はノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やPHS(Personal Handyphone System)等の移動体通信端末、さらには、PDA(Personal Digital Assistant)等のスレート端末等がその範疇に含まれる。
また、特定支援装置10は、ユーザが使用する端末装置をクライアントとし、当該クライアントに上記の脆弱性修正箇所の特定支援に関するサービスを提供する特定支援サーバ装置として実装することもできる。例えば、特定支援サーバ装置は、修正前後の実行ファイルを入力とし、脆弱性修正箇所の候補を出力とする特定支援サービスを提供するサーバ装置として実装される。この場合、特定支援サーバ装置は、Webサーバとして実装することとしてもよいし、アウトソーシングによって上記の脆弱性修正箇所の特定支援に関するサービスを提供するクラウドとして実装することとしてもかまわない。
図11は、特定支援プログラムを実行するコンピュータの一例を示す図である。コンピュータ1000は、例えば、メモリ1010、CPU1020を有する。また、コンピュータ1000は、ハードディスクドライブインタフェース1030、ディスクドライブインタフェース1040、シリアルポートインタフェース1050、ビデオアダプタ1060、ネットワークインタフェース1070を有する。これらの各部は、バス1080によって接続される。
メモリ1010は、ROM(Read Only Memory)1011及びRAM(Random Access Memory)1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1090に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1100に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ1100に挿入される。シリアルポートインタフェース1050は、例えばマウス1110、キーボード1120に接続される。ビデオアダプタ1060は、例えばディスプレイ1130に接続される。
ハードディスクドライブ1090は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、特定支援装置10の各処理を規定するプログラムは、コンピュータにより実行可能なコードが記述されたプログラムモジュール1093として実装される。プログラムモジュール1093は、例えばハードディスクドライブ1090に記憶される。例えば、特定支援装置10における機能構成と同様の処理を実行するためのプログラムモジュール1093が、ハードディスクドライブ1090に記憶される。なお、ハードディスクドライブ1090は、SSD(Solid State Drive)により代替されてもよい。
また、上述した実施形態の処理で用いられる設定データは、プログラムデータ1094として、例えばメモリ1010やハードディスクドライブ1090に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1090に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出して実行する。
なお、プログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1090に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ1100等を介してCPU1020によって読み出されてもよい。あるいは、プログラムモジュール1093及びプログラムデータ1094は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール1093及びプログラムデータ1094は、他のコンピュータから、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
10 特定支援装置
21、31 修正前ソースコード
22、32 修正後ソースコード
41 修正前実行ファイル
42 修正後実行ファイル
100 学習部
101 修正箇所特定部
102、201 変換部
103、202 差分抽出部
104 特徴算出部
120、130 差分の特徴
200 候補算出部
203 類似度算出部
204 一覧生成部
250 脆弱性修正箇所候補

Claims (8)

  1. ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正が行われた箇所の差分を抽出する第1の差分抽出部と、
    前記第1の差分抽出部によって抽出された差分の特徴を算出する特徴算出部と、
    ソースコードから変換された実行ファイルと、当該ソースコードに修正が行われた後のソースコードから変換された実行ファイルと、の所定の箇所の差分を抽出する第2の差分抽出部と、
    前記第2の差分抽出部によって算出された前記所定の箇所の差分の、前記特徴算出部によって算出された前記脆弱性修正が行われた箇所の差分の特徴との類似度を算出する類似度算出部と、
    前記類似度算出部により算出された修正箇所ごとの類似度を出力する出力部と、
    を有することを特徴とする特定支援装置。
  2. 前記第1の差分抽出部及び前記第2の差分抽出部は、関数単位、基本ブロック単位、機械語命令単位のいずれかの単位で差分を抽出することを特徴とする請求項1に記載の特定支援装置。
  3. 前記第1の差分抽出部及び前記第2の差分抽出部は、機械語命令、呼出し関数、即値のうちの少なくともいずれかに基づいて差分を抽出することを特徴とする請求項1又は2に記載の特定支援装置。
  4. 前記第1の差分抽出部及び前記第2の差分抽出部は、修正前後の実行ファイルにおける、所定の情報の出現回数の差分を抽出することを特徴とする請求項1から3のいずれか1項に記載の特定支援装置。
  5. 前記第1の差分抽出部及び前記第2の差分抽出部は、修正前後の実行ファイルにおける、所定の情報の増加分及び減少分を差分として抽出することを特徴とする請求項1から3のいずれか1項に記載の特定支援装置。
  6. 前記第1の差分抽出部は、ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正以外の修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正以外の修正が行われた箇所の差分をさらに抽出し、
    前記類似度算出部は、前記第2の差分抽出部によって算出された前記所定の箇所の差分の、前記特徴算出部によって算出された前記脆弱性修正以外の修正が行われた箇所の差分の特徴との類似度を算出することを特徴とする請求項1から5のいずれか1項に記載の特定支援装置。
  7. コンピュータによって実行される特定支援方法であって、
    ソースコードから変換された実行ファイルと、当該ソースコードに脆弱性修正が行われた後のソースコードから変換された実行ファイルと、の当該脆弱性修正が行われた箇所の差分を抽出する第1の差分抽出工程と、
    前記第1の差分抽出工程によって抽出された差分の特徴を算出する特徴算出工程と、
    ソースコードから変換された実行ファイルと、当該ソースコードに修正が行われた後のソースコードから変換された実行ファイルと、の所定の箇所の差分を抽出する第2の差分抽出工程と、
    前記第2の差分抽出工程によって算出された前記所定の箇所の差分の、前記特徴算出工程によって算出された前記脆弱性修正が行われた箇所の差分の特徴との類似度を算出する類似度算出工程と、
    前記類似度算出工程により算出された修正箇所ごとの類似度を出力する出力工程と、
    を含んだことを特徴とする特定支援方法。
  8. コンピュータを、請求項1から6のいずれか1項に記載の特定支援装置として機能させるための特定支援プログラム。
JP2019525199A 2017-06-14 2018-05-08 特定支援装置、特定支援方法及び特定支援プログラム Active JP6734479B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2017116668 2017-06-14
JP2017116668 2017-06-14
PCT/JP2018/017787 WO2018230194A1 (ja) 2017-06-14 2018-05-08 特定支援装置、特定支援方法及び特定支援プログラム

Publications (2)

Publication Number Publication Date
JPWO2018230194A1 JPWO2018230194A1 (ja) 2019-11-07
JP6734479B2 true JP6734479B2 (ja) 2020-08-05

Family

ID=64660442

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019525199A Active JP6734479B2 (ja) 2017-06-14 2018-05-08 特定支援装置、特定支援方法及び特定支援プログラム

Country Status (3)

Country Link
US (1) US11609998B2 (ja)
JP (1) JP6734479B2 (ja)
WO (1) WO2018230194A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111310178B (zh) * 2020-01-20 2024-01-23 武汉理工大学 跨平台场景下的固件漏洞检测方法及系统
US11768945B2 (en) * 2020-04-07 2023-09-26 Allstate Insurance Company Machine learning system for determining a security vulnerability in computer software

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090013405A1 (en) * 2007-07-06 2009-01-08 Messagelabs Limited Heuristic detection of malicious code
KR20090065977A (ko) * 2007-12-18 2009-06-23 삼성에스디에스 주식회사 파일의 바이러스 감염여부 판정방법
JP5009186B2 (ja) 2008-02-12 2012-08-22 日本電信電話株式会社 逆アセンブル方法および逆アセンブル装置
US20090313700A1 (en) * 2008-06-11 2009-12-17 Jefferson Horne Method and system for generating malware definitions using a comparison of normalized assembly code
US8479188B2 (en) * 2010-07-08 2013-07-02 Microsoft Corporation Binary code change vulnerability prioritization
TWI515598B (zh) * 2013-08-23 2016-01-01 國立交通大學 產生純化惡意程式的方法、偵測惡意程式之方法及其系統
CN106575337A (zh) * 2014-08-20 2017-04-19 日本电信电话株式会社 漏洞发现装置、漏洞发现方法以及漏洞发现程序
US10043009B2 (en) * 2014-09-24 2018-08-07 Intel Corporation Technologies for software basic block similarity analysis
CN108140091B (zh) * 2015-10-09 2021-12-31 日本电信电话株式会社 漏洞发现装置、漏洞发现方法以及存储介质
US10289843B2 (en) * 2016-04-06 2019-05-14 Nec Corporation Extraction and comparison of hybrid program binary features

Also Published As

Publication number Publication date
WO2018230194A1 (ja) 2018-12-20
US20200097664A1 (en) 2020-03-26
JPWO2018230194A1 (ja) 2019-11-07
US11609998B2 (en) 2023-03-21

Similar Documents

Publication Publication Date Title
US10534914B2 (en) Vulnerability finding device, vulnerability finding method, and vulnerability finding program
US11775414B2 (en) Automated bug fixing using deep learning
CN110287702B (zh) 一种二进制漏洞克隆检测方法及装置
US11048798B2 (en) Method for detecting libraries in program binaries
KR101893090B1 (ko) 취약점 정보 관리 방법 및 그 장치
CN107615240B (zh) 用于分析二进制文件的基于生物序列的方案
RU2722692C1 (ru) Способ и система выявления вредоносных файлов в неизолированной среде
CN108563951B (zh) 病毒检测方法及装置
NL2029110B1 (en) Method and system for static analysis of executable files
KR102073068B1 (ko) 어플리케이션 클러스터링 방법 및 그 장치
US11250129B2 (en) Method and system for determining affiliation of software to software families
JP6734479B2 (ja) 特定支援装置、特定支援方法及び特定支援プログラム
JP2017004123A (ja) 判定装置、判定方法および判定プログラム
US20210389977A1 (en) System migration support apparatus, system migration support method and program
US20200042911A1 (en) Mobile application compatibility testing
Zhang et al. An optimized positive-unlabeled learning method for detecting a large scale of malware variants
US20230040982A1 (en) Attack information processing apparatus, attack information processing method, and computer readable medium
WO2023072002A1 (zh) 开源组件包的安全检测方法及装置
Zou et al. SCVD: A new semantics-based approach for cloned vulnerable code detection
KR102415494B1 (ko) 에뮬레이션 기반의 임베디드 기기 취약점 점검 및 검증 방법
WO2022172437A1 (ja) 影響推定装置、影響推定方法、および、影響推定プログラム
JP7509244B2 (ja) 生成装置、生成方法および生成プログラム
JPWO2018116522A1 (ja) 判定装置、判定方法及び判定プログラム
CN116578979B (zh) 一种基于代码特征的跨平台二进制代码匹配方法及系统
RU2778979C1 (ru) Способ и система кластеризации исполняемых файлов

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190531

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200428

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200526

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200707

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200709

R150 Certificate of patent or registration of utility model

Ref document number: 6734479

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150