JPWO2020240830A1 - 検知装置、検知方法、及び、検知プログラム - Google Patents

検知装置、検知方法、及び、検知プログラム Download PDF

Info

Publication number
JPWO2020240830A1
JPWO2020240830A1 JP2021522572A JP2021522572A JPWO2020240830A1 JP WO2020240830 A1 JPWO2020240830 A1 JP WO2020240830A1 JP 2021522572 A JP2021522572 A JP 2021522572A JP 2021522572 A JP2021522572 A JP 2021522572A JP WO2020240830 A1 JPWO2020240830 A1 JP WO2020240830A1
Authority
JP
Japan
Prior art keywords
binary
source
control flow
block
flow graph
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.)
Granted
Application number
JP2021522572A
Other languages
English (en)
Other versions
JP6945768B2 (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Application granted granted Critical
Publication of JP6945768B2 publication Critical patent/JP6945768B2/ja
Publication of JPWO2020240830A1 publication Critical patent/JPWO2020240830A1/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Abstract

検知装置(100)は、バイナリコードの制御フローグラフであるバイナリ制御フローグラフと、バイナリコードに対応するソースコードの制御フローグラフであるソース制御フローグラフとの差分を抽出する差分抽出部(140)と、差分に基づいてバイナリコードに存在する異常を抽出する異常抽出部(150)とを備える。

Description

この発明は、検知装置、検知方法、及び、検知プログラムに関する。
組み込み機器等のソフトウェアにおいて、プログラミング言語により記述されたソースコードは、コンパイラ、及び/又は、リンカを通じて、最終的に機械言語が記述されたバイナリコードに変換される。
近年、コンパイラ等の開発環境をクラウドに整備する開発形態が増えつつある。この場合、ソースコードをクラウドに送信すると、クラウドにおいてコンパイル等が実行され、バイナリコードが返ってくる。
作業用PC(Personal Computer)等においてコンパイル等を実行することに対するクラウドにおいてコンパイル等を実行することの利点として、コンパイル時間が短縮する等、開発効率が向上することが挙げられる。
しかしながら、クラウドに悪意がある場合、あるいは、正規の開発環境とは異なる悪意ある開発環境へと誘導された場合等に、
出力として得られたバイナリコードにバックドアが埋め込まれていることがあり、
バックドアを検出することは極めて困難である。
バックドアは、そもそも埋め込まれているのか否か分からないことが多く、埋め込まれている場合であっても埋め込まれている場所は不明である。
そのため、動的解析によってバックドアを探す場合、膨大な工数を要する。
特許文献1では、静的解析に関する技術として、2つのCFG(Control Flow Graph、制御フローグラフ)の差分を比較する技術が開示されている。
特許文献1の技術によれば、2つのCFGそれぞれの内部に存在する基本ブロックについて、それらの内容、及び/又は、局所近傍に基づいてマッチングすることにより、両者に共通する基本ブロックを特定することができる。
特開2008−165825号公報
静的解析によりバックドアを検知するためには、ソースコードと、バイナリコードとの間で処理に関する差分の有無を検査する必要がある。しかし、特許文献1の技術は、2つのバイナリ間の差分を比較するものであり、ソースコードから生成したCFGと、バイナリコードから生成したCFGとを比較するものではない。
そのため、静的解析により、バックドアである可能性が高い箇所を効率良く抽出することができないという課題があった。
ただし、ソースコードから生成したCFGと、バイナリコードから生成したCFGとを比較する場合、同じソースコードから生成したバイナリであっても、コンパイル時の最適化オプション等によって、生成されるバイナリコードの構造が変化し得る点を考慮する必要がある。この点を考慮しない場合、具体例としては、基本ブロックの内容に基づいて単純に一致箇所を特定する方法を用いる場合、最適化オプションの影響により変化した箇所についても全て差分と判断してしまう。
本発明は、静的解析により、バックドアである可能性が高い箇所を効率良く抽出することを目的とする。
本発明の検知装置は、
バイナリコードの制御フローグラフであるバイナリ制御フローグラフと、前記バイナリコードに対応するソースコードの制御フローグラフであるソース制御フローグラフとの差分を抽出する差分抽出部と、
前記差分に基づいて前記バイナリコードに存在する異常を抽出する異常抽出部と
を備える。
本発明の検知装置によれば、バイナリコードにバックドアが埋め込まれている場合に、バイナリコードの制御フローグラフであるバイナリ制御フローグラフと、バイナリコードに対応するソースコードの制御フローグラフであるソース制御フローグラフとの差分に基づいてバイナリコードに存在する異常を抽出するため、静的解析により、バックドアである可能性が高い箇所を効率良く抽出することができる。
実施の形態1に係る検知装置100の構成図。 実施の形態1に係るソース解析部120の構成図。 実施の形態1に係るバイナリ解析部130の構成図。 実施の形態1に係る差分抽出部140の構成図。 実施の形態1に係る異常抽出部150の構成図。 実施の形態1に係る検知装置100のハードウェア構成図。 実施の形態1に係る検知装置100の動作を示すフローチャート。 実施の形態1に係るソース解析部120の動作を示すフローチャート。 関数Func_a400のCFGの具体例。 実施の形態1に係るバイナリ解析部130の動作を示すフローチャート。 関数Func_X500のCFGの具体例。 実施の形態1に係る差分抽出部140の動作を示すフローチャート。 ソース特徴情報601の具体例。 バイナリ特徴情報602の具体例。 差分情報603の具体例。 実施の形態1に係る異常抽出部150の動作を示すフローチャート。 異常特徴リスト152の具体例。 異常候補情報155の具体例。
実施の形態1.
以下、本実施の形態について、図面を参照しながら詳細に説明する。
本実施の形態に係る検知装置100は、コンパイル等をする際にバイナリコードに組み込まれた任意の異常を検知することができる。
しかし、以下の説明において、前記異常がバックドアに係るものである場合について説明する。従って、下記のバックドアという記述を、他の異常に関する用語に置き換えても良い。
バックドアは、サイバー攻撃の1種である。
***構成の説明***
図1は、本実施の形態に係る検知装置100の構成例である。
本図に示すように、検知装置100は、ソース解析部120と、バイナリ解析部130と、差分抽出部140と、異常抽出部150とから構成される。
図2は、ソース解析部120の構成例である。
本図に示すように、ソース解析部120は、中間コード生成部210と、ソースCFG(Control Flow Graph、制御フローグラフ)生成部220とから構成される。
ソース解析部120は、具体例としては、ソースコードからCFGを生成することができる既存のコンパイラ基盤である。
即ち、ソース解析部120は、
ソース200(ソースコード)に基づいて中間コード201を生成する中間コード生成部210と、
中間コード201に基づいてソースCFG(制御フローグラフ)202を生成するソースCFG(制御フローグラフ)生成部220と
を備える。
CFGは、プログラムに含まれる処理を、分岐を含まない処理の塊である基本ブロックに分割し、基本ブロックから基本ブロックへの遷移を線で表現することにより、プログラム実行時の処理の流れをグラフで表現したものである。
基本ブロックは、CFGにおける用語である。
本図の矢印は、検知装置100の実行中に、データが流れ得ることを表す。
図3は、バイナリ解析部130の構成例である。
本図に示すように、バイナリ解析部130は、逆アセンブル部310と、バイナリCFG生成部320とから構成される。
即ち、バイナリ解析部130は、
バイナリ300(バイナリコード)を逆アセンブルする逆アセンブル部310と、
逆アセンブル部310が逆アセンブルした結果に基づいてバイナリCFG(制御フローグラフ)302を生成するバイナリCFG(制御フローグラフ)生成部320と
を備える。
バイナリ解析部130は、具体例としては、バイナリコードからCFGを生成することができる既存の逆アセンブルツールである。
図4は、差分抽出部140の構成例である。
本図に示すように、差分抽出部140は、特徴量計算部610と、特徴量比較部620とから構成される。
差分抽出部140は、バイナリ300(バイナリコード)の制御フローグラフであるバイナリCFG(制御フローグラフ)302と、バイナリ300(バイナリコード)に対応するソース200(ソースコード)の制御フローグラフであるソースCFG(制御フローグラフ)202との差分を抽出する。
図5は、異常抽出部150の構成例である。
本図に示すように、異常抽出部150は、異常特徴リスト152と、リスト比較部151とから構成される。
異常抽出部150は、差分抽出部140が抽出した差分に基づいてバイナリ300(バイナリコード)に存在する異常を抽出する。
異常抽出部150は、
異常の特徴を異常特徴として記憶している異常特徴リスト152を有し、
異常特徴に基づいて異常を抽出することができる。
異常抽出部150は、異常としてバックドアであると考えられるものを抽出しても良い。
異常特徴リスト152は、異常特徴としてバックドアの特徴を記憶していても良い。
異常特徴リスト152は、バックドアの特徴的な振る舞いに関する情報が格納されたリストである。
異常特徴リスト152が格納するデータの形式は、任意であって良い。バックドアの特徴的な振る舞いは、任意の振る舞いであって良い。
図6は、本実施の形態に係る検知装置100のH/W(ハードウェア)・S/W(ソフトウェア)構成例である。
検知装置100は、本図に示すH/W15から構成される。
検知装置100は、典型的には、汎用PC(Personal Computer)から構成される。
ソース解析部120と、バイナリ解析部130と、差分抽出部140と、異常抽出部150との処理は、メモリ12に格納されたプログラムをプロセッサ11が読み出し実行する。
H/W15は、実施の形態1のハードウェア構成を示し、プロセッサ11と、メモリ12と、補助記憶装置13とから構成される。
プロセッサ11は、検知プログラムと、OS(Operating System)と等を実行するプロセッシング装置である。プロセッシング装置は、IC(Integrated Circuit)と呼ぶこともあり、プロセッサ11は、具体例としては、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、GPU(Graphics Processing Unit)である。
プロセッサ11は、メモリ12と接続されており、演算に必要なデータの一時記憶、及び/又は、データの保存を行い、メモリ12に格納されたプログラムを読み出して実行する。
本図の検知装置100は、プロセッサ11を1つだけ備えているが、検知装置100は、プロセッサ11を代替する複数のプロセッサを備えていても良い。これら複数のプロセッサは、プログラムの実行等を分担する。
メモリ12は、データを一時的に記憶する記憶装置であり、プロセッサ11の作業領域として使用されるメインメモリとして機能する。メモリ12は、具体例としては、SRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)等のRAM(Random Access Memory)である。メモリ12は、プロセッサ11の演算結果を保持する。
補助記憶装置13は、ソース200と、バイナリ300と、プロセッサ11によって実行される各種プログラムと、S/W16と、各プログラムの実行時に使用されるデータと等を記憶する。補助記憶装置13は、具体例としては、HDD(Hard Disk Drive)又は、SSD(Solid State Drive)である。また、補助記憶装置13は、メモリカード、SD(Secure Digital、登録商標)メモリカード、CF(Compact Flash)、NANDフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ(登録商標)ディスク、又は、DVD(Digital Versatile Disk)等の可搬記録媒体であってもよい。
S/W16は、実施の形態1のソフトウェア構成を示し、ソース解析部120と、バイナリ解析部130と、差分抽出部140と、異常抽出部150と、OS19とから構成される。
OS19は、プロセッサ11によって補助記憶装置13からロードされ、メモリ12に展開され、プロセッサ11上で実行される。OS19は、具体例としては、Linux(登録商標)又はWindows(登録商標)等、プロセッサ11に適合する任意のものでよい。なお、OS19と、S/W16とは、メモリ12に記憶されていても良い。
***動作の説明***
本実施の形態に係る検知装置100の動作を説明する。
検知装置100の動作手順は、検知方法に相当する。また、検知装置100の動作を実現するプログラムは、検知プログラムに相当する。
図7は、検知装置100の動作を示すフローチャートの例である。
本フローチャートに示す処理の順序は、適宜変更しても良い。
(ステップS101:ソースCFG生成処理)
ソース解析部120は、ソース200に対応するソースCFG202を生成する。
ソース解析部120は、ソース200(ソースコード)を解析し、ソース200(ソースコード)の制御フローグラフを、ソースCFG(制御フローグラフ)202として生成する。
ソースCFG202は、ソース200の制御フローをグラフ化したものであり、ソース200に対応するCFGである。
ソース200は、ソースコードであり、バイナリ300に対応するソースコードであり、バックドアに当たる処理を含まない。ソース200の形式は任意であって良く、ソース200の処理は任意であって良い。
(ステップS102:バイナリCFG生成処理)
バイナリ解析部130は、バイナリ300に対応するバイナリCFG302を生成する。
バイナリ解析部130は、バイナリ300(バイナリコード)を解析し、バイナリ300(バイナリコード)の制御フローグラフを、バイナリCFG(制御フローグラフ)302として生成する。
バイナリCFG302は、バイナリ300の制御フローをグラフ化したものであり、バイナリ300に対応するCFGである。
バイナリ300は、
ソース200に対応するバイナリコードであり、
ソース200をクラウドに構築された開発環境においてコンパイルした結果として生成されたバイナリコードである。
検知装置100は、
ステップS101と、ステップS102とを任意の順序で実行して良く、
ステップS101と、ステップS102とを並列に実行しても良い。
(ステップS103:差分抽出処理)
差分抽出部140は、ソースCFG202と、バイナリCFG302とのそれぞれについて特徴量を計算し、その計算結果から、両者の差分箇所を特定する。
差分抽出部140は、任意の特徴量を採用して良い。
(ステップS104:異常抽出処理)
異常抽出部150は、差分箇所の中から、バックドアの特徴的な振る舞いに合致する箇所を特定し、バックドアである可能性が高い箇所を更に絞り込む。
***ソース解析部120の動作の説明***
図8は、ソース解析部120の動作を示すフローチャートの例である。
本フローチャートに示す処理の順序は、適宜変更しても良い。
ソース解析部120は、ソース200を入力とし、本フローチャートの処理を実行する。
(ステップS121:中間コード生成処理)
中間コード生成部210は、入力されたソース200の構文を解析した上で、中間コード201を生成する。
中間コード201は、典型的には、ソース200からバイナリ300を生成する途中段階において生成するコードである。
(ステップS122:ソースCFG生成処理)
ソースCFG生成部220は、中間コード201から、ソースCFG202を生成する。
図9は、ソースCFG202の一部の具体例であって、関数Func_a400のCFGの具体例である。本例において、ソース200は、関数Func_a400を含むものとする。
本図より、
Func_a400は、5つの基本ブロック(ブロックa401と、ブロックb402と、ブロックc403と、ブロックd404と、ブロックe405)から構成されており、
ブロックa401は、Func_a400の先頭の基本ブロックであり、
ブロックe405は、Func_a400の終端の基本ブロックであり、
ブロックa401からブロックb402又はブロックc403を経由してブロックe405への遷移が存在し、
ブロックd404は、どこからも遷移せず、どこへも遷移しない基本ブロックであることが分かる。
***バイナリ解析部130の動作の説明***
図10は、バイナリ解析部130の動作を示すフローチャートの例である。
本フローチャートに示す処理の順序は、適宜変更しても良い。
バイナリ解析部130は、バイナリ300を入力とし、本フローチャートの処理を実行する。
(ステップS131:逆アセンブル処理)
逆アセンブル部310は、
入力されたバイナリ300を逆アセンブルし、
アセンブラコード301を生成する。
(ステップS132:バイナリCFG生成処理)
バイナリCFG生成部320は、アセンブラコード301から、バイナリCFG302を生成する。
図11は、バイナリCFG302の一部の具体例であって、関数Func_X500のCFGの具体例である。本例において、バイナリ300はFunc_X500を含むものとする。
本図より、
Func_X500は5つの基本ブロック(ブロックV501と、ブロックW502と、ブロックX503と、ブロックY504と、ブロックZ505)から構成されており、
ブロックV501は、Func_X500の先頭の基本ブロックであり、
ブロックZ505は、Func_X500の終端の基本ブロックであり、
ブロックV501からブロックW502、又は、ブロックX503と、ブロックY504とを経由してブロックZ505への遷移が存在することが分かる。
***差分抽出部140の動作の説明***
図12は、差分抽出部140の動作を示すフローチャートの例である。
本フローチャートに示す処理の順序は、適宜変更しても良い。
差分抽出部140は、図2に示すソース解析部120が生成したソースCFG202と、図3に示すバイナリ解析部130が生成したバイナリCFG302とを入力とし、本フローチャートの処理を実行する。
(ステップS141:ソース特徴情報生成処理)
特徴量計算部610は、ソースCFG202に基づいてソース特徴情報601を生成する。
特徴量計算部610は、ソース特徴情報601を、ソース200、又は、バイナリ300の関数毎に生成しても良く、別の区分毎に作成しても良い。
特徴量計算部610は、具体例としては、Func_a400の基本ブロック数と、基本ブロック間の線の数と、基本ブロック内の実行命令数と等を集計し、図13のソース特徴情報601を生成する。
図13は、Func_a400に対応するソース特徴情報601の例である。
図13のソース特徴情報601は、ブロック700と、IN数701と、INブロック702と、OUT数703と、OUTブロック704と、Step数705とから構成される。
ブロック700には、ソースCFG202に存在する基本ブロックのラベル名が格納される。
ブロック700には、本例において、ブロックa401と、ブロックb402と、ブロックc403と、ブロックd404と、ブロックe405とが格納される。
IN数701には、各基本ブロックの遷移元の基本ブロックの数が格納される。
INブロック702には、各基本ブロックの遷移元の基本ブロックのラベル名が格納される。
ブロックa401と、ブロックd404とについては、遷移元の基本ブロックが存在しないため、
IN数701には、共に0が格納され、
INブロック702には、共に遷移先がないことを示すNULLが格納される。
ブロックb402と、ブロックc403とについては、遷移元はブロックa401であるため、
IN数701には、共に1が格納され、
INブロック702には、共にブロックa401を示す「a」が格納される。
ブロックe405については、遷移元は、ブロックb402と、ブロックc403とであるため、
IN数701には、2が格納され、
INブロック702には、ブロックb402と、ブロックc403とを示す「b」と「c」とが格納される。
OUT数703には、各基本ブロックの遷移先の基本ブロックの数が格納される。
OUTブロック704には、各基本ブロックの遷移先の基本ブロックのラベル名が格納される。
ブロックa401については、ブロックb402と、ブロックc403とに遷移するため、
OUT数703には、2が格納され、
OUTブロック704には、ブロックb402と、ブロックc403とを示す「b」と「c」とが格納される。
ブロックb402と、ブロックc403とについては、ブロックe405に遷移するため、
OUT数703には、共に1が格納され、
OUTブロック704には、共にブロックe405を示す「e」が格納される。
ブロックd404と、ブロックe405とについては、どの基本ブロックにも遷移しないため、
OUT数703には、共に0が格納され、
OUTブロック704には、共にNULLが格納される。
Step数705には、その基本ブロック内の実行命令数が格納される。
Step数705の各値は、一例である。
(ステップS142:バイナリ特徴情報生成処理)
特徴量計算部610は、ステップS141と同様に、バイナリCFG302に基づいてバイナリ特徴情報602を生成する。
特徴量計算部610は、バイナリ特徴情報602を関数毎に生成しても良い。
特徴量計算部610は、具体例としては、Func_X500の基本ブロック数と、基本ブロック間の線の数と、基本ブロック内の実行命令数と等を集計し、図14のバイナリ特徴情報602を生成する。
図14は、Func_X500に対応するバイナリ特徴情報602の例である。
本例のバイナリ特徴情報602は、ブロック800と、IN数801と、INブロック802と、OUT数803と、OUTブロック804と、Step数805との各項目から構成される。
各項目の定義は、それぞれブロック700〜Step数705の各項目と同一である。
バイナリ特徴情報602の各項目の値は、Func_X500のCFGに対応したものである。ただし、Step数805の各値は、一例である。
特徴量計算部610は、
ステップS141と、ステップS142とを任意の順序で実行して良く、
ステップS141と、ステップS142とを並列に実行しても良い。
(ステップS143:特徴比較処理)
特徴量比較部620は、
ソース特徴情報601と、バイナリ特徴情報602との間で各関数の特徴を比較することにより、ソースCFG202と、バイナリCFG302との全ての関数について、対応している関数(以下、対応関数)が存在するか否かを判断し、
ソース特徴情報601と、バイナリ特徴情報602との対応関係がある全ての関数間で各基本ブロックの特徴を比較することにより、ソースCFG202と、バイナリCFG302との全ての基本ブロックについて、対応している基本ブロック(以下、対応ブロック)が存在するか否かを判断し、
対応ブロック間に差分が存在するか否かを判断し、
差分情報をまとめた差分情報603を生成する。
差分情報は、対応関数が存在しない関数の情報と、対応ブロックが存在しない基本ブロックの情報と、対応ブロック間に差分が存在する対応ブロックの情報との総称である。
関数と、基本ブロックとの差分情報の一部又は全部を差分と呼ぶ。
特徴量比較部620がバイナリCFG302の基本ブロックに対応ブロックが存在すると判断した場合、典型的には、バイナリCFG302の基本ブロックに対応する記述であってバイナリ300の一部の記述は、ソースCFG202の基本ブロックに対応する記述であってソース200の一部の記述がコンパイラ等により変換されたものである。特徴量比較部620がバイナリ300の関数に対応関数が存在すると判断した場合についても同様である。
なお、特徴量比較部620は、本ステップの処理において、ソースCFG202のグラフ構造と、バイナリCFG302のグラフ構造とを総合的に考慮して対応する基本ブロックが存在するか否かを判断しても良い。
ソースCFG202の基本ブロックが、バイナリCFG302の基本ブロックと対応している場合、
ソースCFG202の基本ブロックは、バイナリCFG302の基本ブロックの対応ブロックであり、
バイナリCFG302の基本ブロックは、ソースCFG202の基本ブロックの対応ブロックである。バイナリCFG302の基本ブロックが、ソースCFG202の基本ブロックに対応している場合についても同様である。
図13と、図14とに示す例において、
ブロックb402が、ブロックW502と、
ブロックc403が、ブロックX503と、
ブロックe405が、ブロックZ505と、それぞれ対応していることが分かる。
ブロックa401と、ブロックV501とは、どちらも関数の先頭に位置する基本ブロックであることから互いに対応している。しかし、Step数に差異があるため、特徴量比較部620は、共に差分があると判断する。
図15は、Func_a400に対応するソース特徴情報601と、Func_X500に対応するバイナリ特徴情報602との差分の情報をまとめた差分情報603の具体例である。
以下、本例を用いて差分情報603を説明する。
本図の差分情報603は、ファイル900と、Func901と、対応Func902と、ブロック903と、対応ブロック904と、IN数905と、INブロック906と、OUT数907と、OUTブロック908と、Step数909との各項目から構成される。
ファイル900には、ソースCFG202と、バイナリCFG302とのいずれについての情報であるかを示すデータが格納される。
Func901には、差分が存在する関数の名前が格納される。本例においては、Func_a400と、Func_X500とのいずれかが格納される。
対応Func902には、Func901に示される関数に対応する関数の名前が格納される。
本例においては、Func_a400と、Func_X500とが対応する関数であるため、Func901にFunc_a400が示される場合、対応Func902にはFunc_X500の関数の名前が格納される。
Func901に示される関数に対応する関数が存在しない場合、対応Func902にはNULLが格納される。
ブロック903には、差分である基本ブロックのラベル名が格納される。
本例において、ブロックa401と、ブロックd404と、ブロックV501と、ブロックY504とが差分であるため、これらのラベル名が格納される。
対応ブロック904には、ブロック903に示される基本ブロックの対応ブロックのラベル名が格納される。
本例において、ブロック903にブロックa401が示される場合、対応ブロック904には、ブロックV501が格納される。
ブロックd404と、ブロックY504とのように、対応ブロックが存在しない場合、対応ブロック904にはNULLが格納される。
IN数905と、INブロック906と、OUT数907と、OUTブロック908と、Step数909とには、IN数701〜Step数705の各項目、又は、IN数801〜Step数805の各項目の内容が、そのまま格納される。
***異常抽出部150の動作の説明***
図16は、異常抽出部150の動作を示すフローチャートの例である。
本フローチャートに示す処理の順序は、適宜変更しても良い。
異常抽出部150は、差分情報603を入力とし、以下の処理を実行する。
(ステップS151:比較処理)
リスト比較部151は、差分情報603に格納された差分情報の中に、異常特徴リスト152に格納された条件と合致するものが存在するか否かを確認し、
条件と合致するものに基づいて異常候補情報155を生成する。
異常抽出部150は、差分情報603の中から、バックドアの特徴的な振る舞いに合致している差分情報を抽出する。
異常特徴リスト152は、バックドアの特徴的な振る舞いに関する情報が格納されたリストである。
異常特徴リスト152に格納された条件と合致する差分情報は、バックドアに対応する情報である可能性が高いと考えられる。
異常特徴リスト152は、バックドア以外の異常の特徴的な振る舞いに関する情報を格納していても良い。
異常特徴リスト152の情報は、差分情報603に関する条件式であっても良い。
図17は、異常特徴リスト152の例である。
本例において、バックドアの特徴的な振る舞いとして、2つの条件を例示している。
「No.1:ソースCFG202に存在しない関数がバイナリCFG302に存在する」については、図15の差分情報603において、ファイル900がバイナリCFG302であり、かつ、対応Func902がNULLであるものが該当する。
「No.2:バイナリCFG302にのみ存在する基本ブロックから、ソースCFG202と、バイナリCFG302とに共通して存在する基本ブロックへの分岐がある」は、図15の差分情報603において、ファイル900がバイナリCFG302、かつ、対応ブロック904がNULL、かつ、ソースCFG202にも存在する基本ブロックがOUTブロック908に格納されているものが該当する。
リスト比較部151は、図15の差分情報603と、本例とを用いる場合、ブロックY504に関する情報が異常特徴リスト152のNo.2の条件と合致しているため、ブロックY504に関する情報に基づいて異常候補情報155を生成する。
なお、異常特徴リスト152に格納された条件と合致しなかった、ブロックa401と、ブロックd404と、ブロックV501とについては、コンパイル時の最適化によって、基本ブロック内の不要な処理が削除された、あるいは、基本ブロック全体が削除されたために生じた差分であると考えられる。
図18は、リスト比較部151が生成する異常候補情報155の例である。
異常候補情報155は、Func921と、対応Func922と、ブロック923と、対応ブロック924と、IN数925と、INブロック926と、OUT数927と、OUTブロック928と、Step数929との各項目から構成される。
各項目の定義は、図15に示したFunc901〜Step数909の各項目と同一であるため、ここでの説明は割愛する。
(ステップS152:出力処理)
リスト比較部151は、異常候補情報155を出力する。
***実施の形態1の特徴***
差分抽出部140は、
ソースCFG(制御フローグラフ)202の基本ブロックの数と、基本ブロック間の接続情報と、基本ブロック内の命令数とをソース特徴情報601として生成し、
バイナリCFG(制御フローグラフ)302の基本ブロックの数と、基本ブロック間の接続情報と、基本ブロック内の命令数とをバイナリ特徴情報602として生成し、
差分として、ソース特徴情報601と、バイナリ特徴情報602との差分を抽出する。
***実施の形態1の効果の説明***
以上のように、本実施の形態によれば、
差分抽出部140は、バイナリCFG302と、ソースCFG202との差分に基づいて差分情報603を生成し、
異常抽出部150は、差分情報603の中から、バックドアの特徴的な振る舞いに合致している差分情報を抽出するため、
バイナリ300にバックドアが埋め込まれている場合に、CFGを用いた静的解析により、埋め込まれたバックドアである可能性が高い箇所を抽出することができる。
さらに、本実施の形態によれば、コンパイル時の最適化処理により、ソースCFG202と、バイナリCFG302との間に差分が生じた場合であっても、最適化処理の影響による差分を除外し、バックドアが埋め込まれている可能性の高い箇所を抽出することができる。
<変形例1>
検知装置100は、ソース解析部120を備えなくても良い。
本変形例において、
差分抽出部140は、他の装置等が生成したソースCFG202を利用し、
検知装置100は、任意の方法によりソースCFG202を取り込んで良い。
<変形例2>
検知装置100は、バイナリ解析部130を備えなくても良い。
本変形例において、
差分抽出部140は、他の装置等が生成したバイナリCFG302を利用し、
検知装置100は、任意の方法によりバイナリCFG302を取り込んで良い。
<変形例3>
特徴量比較部620は、ステップS143において、ソースCFG202のある基本ブロックと、バイナリCFG302のある基本ブロックとについて、ソースCFG202のグラフ構造と、バイナリCFG302のグラフ構造とを考慮した場合に対応関係を見出せる場合であっても、両基本ブロックの特徴間に差異がある場合、互いに対応していないと判断しても良い。
特徴量比較部620は、ステップS143において、ソースCFG202のある関数と、バイナリCFG302のある関数とについても同様に判断しても良い。
<変形例4>
本実施の形態では、各機能構成要素をソフトウェアで実現する場合を説明した。しかし、変形例として、各機能構成要素はハードウェアで実現されても良い。
各機能構成要素がハードウェアで実現される場合には、検知装置100は、プロセッサ11に代えて、電子回路17を備える。あるいは、図示しないが、検知装置100は、プロセッサ11、メモリ12、及び補助記憶装置13に代えて、電子回路17を備える。電子回路17は、各機能構成要素(及びメモリ12と補助記憶装置13)の機能を実現する専用の電子回路である。電子回路を、処理回路と呼ぶこともある。
電子回路17は、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックIC、GA(Gate Array)、ASIC(Application Specific Integrated Circuit)、FPGA(Field−Programmable Gate Array)が想定される。
各機能構成要素を1つの電子回路17で実現してもよいし、各機能構成要素を複数の電子回路17に分散させて実現してもよい。
あるいは、一部の各機能構成要素がハードウェアで実現され、他の各機能構成要素がソフトウェアで実現されてもよい。
前述したプロセッサ11とメモリ12と補助記憶装置13と電子回路17とを、総称して「プロセッシングサーキットリー」という。つまり、各機能構成要素の機能は、プロセッシングサーキットリーにより実現される。
***他の実施の形態***
前述した実施の形態の任意の構成要素の変形、もしくは実施の形態において任意の構成要素の省略が可能である。
また、実施の形態は、実施の形態1で示したものに限定されるものではなく、必要に応じて種々の変更が可能である。
11 プロセッサ、12 メモリ、13 補助記憶装置、15 H/W、16 S/W、17 電子回路、19 OS、100 検知装置、120 ソース解析部、130 バイナリ解析部、140 差分抽出部、150 異常抽出部、151 リスト比較部、152 異常特徴リスト、155 異常候補情報、200 ソース、201 中間コード、202 ソースCFG、210 中間コード生成部、220 ソースCFG生成部、300 バイナリ、301 アセンブラコード、302 バイナリCFG、310 逆アセンブル部、320 バイナリCFG生成部、400 Func_a、401 ブロックa、402 ブロックb、403 ブロックc、404 ブロックd、405 ブロックe、500 Func_X、501 ブロックV、502 ブロックW、503 ブロックX、504 ブロックY、505 ブロックZ、601 ソース特徴情報、602 バイナリ特徴情報、603 差分情報、610 特徴量計算部、620 特徴量比較部、700 ブロック、701 IN数、702 INブロック、703 OUT数、704 OUTブロック、705 Step数、800 ブロック、801 IN数、802 INブロック、803 OUT数、804 OUTブロック、805 Step数、900 ファイル、901 Func、902 対応Func、903 ブロック、904 対応ブロック、905 IN数、906 INブロック、907 OUT数、908 OUTブロック、909 Step数、921 Func、922 対応Func、923 ブロック、924 対応ブロック、925 IN数、926 INブロック、927 OUT数、928 OUTブロック、929 Step数。

Claims (8)

  1. バイナリコードの制御フローグラフであるバイナリ制御フローグラフと、前記バイナリコードに対応するソースコードの制御フローグラフであるソース制御フローグラフとの差分を抽出する差分抽出部と、
    前記差分に基づいて前記バイナリコードに存在する異常を抽出する異常抽出部と
    を備える検知装置。
  2. 前記異常抽出部は、
    異常の特徴を異常特徴として記憶している異常特徴リストを有し、
    前記異常特徴に基づいて前記異常を抽出する請求項1に記載の検知装置。
  3. 前記異常抽出部は、前記異常としてバックドアであると考えられるものを抽出し、
    前記異常特徴リストは、前記異常特徴として前記バックドアの特徴を記憶している請求項2に記載の検知装置。
  4. 前記ソースコードを解析し、前記ソースコードの前記制御フローグラフを、前記ソース制御フローグラフとして生成するソース解析部と、
    前記バイナリコードを解析し、前記バイナリコードの前記制御フローグラフを、前記バイナリ制御フローグラフとして生成するバイナリ解析部と
    を備える請求項1から3のいずれか1項に記載の検知装置。
  5. 前記ソース解析部は、
    前記ソースコードに基づいて中間コードを生成する中間コード生成部と、
    前記中間コードに基づいて前記ソース制御フローグラフを生成するソース制御フローグラフ生成部と
    を備え、
    前記バイナリ解析部は、
    前記バイナリコードを逆アセンブルする逆アセンブル部と、
    前記逆アセンブル部が逆アセンブルした結果に基づいて前記バイナリ制御フローグラフを生成するバイナリ制御フローグラフ生成部と
    を備える請求項4に記載の検知装置。
  6. 前記差分抽出部は、
    前記ソース制御フローグラフの基本ブロックの数と、前記基本ブロック間の接続情報と、前記基本ブロック内の命令数とをソース特徴情報として生成し、
    前記バイナリ制御フローグラフの前記基本ブロックの数と、前記基本ブロック間の接続情報と、前記基本ブロック内の命令数とをバイナリ特徴情報として生成し、
    前記差分として、前記ソース特徴情報と、前記バイナリ特徴情報との差分を抽出する請求項4又は5に記載の検知装置。
  7. 差分抽出部が、バイナリコードの制御フローグラフであるバイナリ制御フローグラフと、前記バイナリコードに対応するソースコードの制御フローグラフであるソース制御フローグラフとの差分を抽出し、
    異常抽出部が、前記差分に基づいて前記バイナリコードに存在する異常を抽出する検知方法。
  8. コンピュータに、
    バイナリコードの制御フローグラフであるバイナリ制御フローグラフと、前記バイナリコードに対応するソースコードの制御フローグラフであるソース制御フローグラフとの差分を抽出させ、
    前記差分に基づいて前記バイナリコードに存在する異常を抽出させる検知プログラム。
JP2021522572A 2019-05-31 2019-05-31 検知装置、検知方法、及び、検知プログラム Active JP6945768B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2019/021753 WO2020240830A1 (ja) 2019-05-31 2019-05-31 検知装置、検知方法、及び、検知プログラム

Publications (2)

Publication Number Publication Date
JP6945768B2 JP6945768B2 (ja) 2021-10-06
JPWO2020240830A1 true JPWO2020240830A1 (ja) 2021-10-21

Family

ID=73553717

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021522572A Active JP6945768B2 (ja) 2019-05-31 2019-05-31 検知装置、検知方法、及び、検知プログラム

Country Status (2)

Country Link
JP (1) JP6945768B2 (ja)
WO (1) WO2020240830A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240037010A1 (en) * 2021-03-23 2024-02-01 Nec Corporation Program analysis apparatus, program analysis method, and non-transitory computer readable medium storing program
WO2023062768A1 (en) * 2021-10-14 2023-04-20 Nec Corporation Backdoor detecting apparatus, backdoor detecting method,and backdoor detecting program

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07141196A (ja) * 1993-06-28 1995-06-02 Hokkaido Nippon Denki Software Kk ループ外分岐を持つループの展開方式
JP2000276356A (ja) * 1999-03-25 2000-10-06 Nec Software Kobe Ltd コンパイル装置、コンパイル方法およびコンパイラプログラムを記録した記録媒体
JP2009098851A (ja) * 2007-10-16 2009-05-07 Mitsubishi Electric Corp 不正コード検出システム
JP2013152559A (ja) * 2012-01-24 2013-08-08 Toshiba Corp プログラム比較解析装置およびプログラム比較解析方法
US20150013011A1 (en) * 2013-07-01 2015-01-08 Sap Ag Modular static application security testing
US20180157843A1 (en) * 2016-12-01 2018-06-07 International Business Machines Corporation Detection of compiler injected security flaws

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07141196A (ja) * 1993-06-28 1995-06-02 Hokkaido Nippon Denki Software Kk ループ外分岐を持つループの展開方式
JP2000276356A (ja) * 1999-03-25 2000-10-06 Nec Software Kobe Ltd コンパイル装置、コンパイル方法およびコンパイラプログラムを記録した記録媒体
JP2009098851A (ja) * 2007-10-16 2009-05-07 Mitsubishi Electric Corp 不正コード検出システム
JP2013152559A (ja) * 2012-01-24 2013-08-08 Toshiba Corp プログラム比較解析装置およびプログラム比較解析方法
US20150013011A1 (en) * 2013-07-01 2015-01-08 Sap Ag Modular static application security testing
US20180157843A1 (en) * 2016-12-01 2018-06-07 International Business Machines Corporation Detection of compiler injected security flaws

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
岩本一樹、和▲崎▼克己: "制御フロー解析によるAndroidマルウェア検出方法の提案", コンピュータセキュリティシンポジウム2011(CSS2011)論文集[CD−ROM], vol. 2011, no. 3, JPN6019030778, 12 October 2011 (2011-10-12), JP, pages 714 - 719, ISSN: 0004571742 *

Also Published As

Publication number Publication date
WO2020240830A1 (ja) 2020-12-03
JP6945768B2 (ja) 2021-10-06

Similar Documents

Publication Publication Date Title
US11567759B1 (en) Generating source code from binary files
US8843912B2 (en) Optimization of an application to reduce local memory usage
JP6164054B2 (ja) 情報処理装置、コンパイル方法およびコンパイラプログラム
US20200065226A1 (en) Automated software program repair of similar code snippets
US9405906B1 (en) System and method for enhancing static analysis of software applications
JP6945768B2 (ja) 検知装置、検知方法、及び、検知プログラム
US20220164170A1 (en) Usage-based software library decomposition
US10229273B2 (en) Identifying components for static analysis of software applications
JP6925433B2 (ja) データ検証装置、データ検証方法及びデータ検証プログラム
US20170337112A1 (en) Code update based on detection of change in runtime code during debugging
JP2009129204A (ja) コード検査システム及びコード検査方法及びプログラム
US10956241B1 (en) Unified container for hardware and software binaries
JP2016128941A (ja) 出力判定装置、出力判定方法、出力判定プログラム、及び、静的解析装置
CN113574511A (zh) 测试用例生成装置、测试用例生成方法和测试用例生成程序
US20150310332A1 (en) Predicting outcome based on input
US9354870B2 (en) Maintaining integrity of output of code generators
JPWO2020157795A1 (ja) 試験装置、試験方法および試験プログラム
GB2590414A (en) Anomaly detection for code management
GB2590415A (en) Software code management
GB2590416A (en) Logistic model for code management
US11294647B1 (en) Support apparatus and design support method
JP6390217B2 (ja) ソフトウェア変更プログラム、ソフトウェア変更装置、及びソフトウェア変更方法
KR101225577B1 (ko) 어셈블리 언어 코드의 분석 장치 및 방법
JP6081144B2 (ja) ソースコード解析装置
JP2012059202A (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210617

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210617

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20210617

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: 20210817

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210914

R150 Certificate of patent or registration of utility model

Ref document number: 6945768

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150