(57)【要約】  本発明は、情報処理装置で実行されるプロセスを解析して、プロセスの中で利用されている暗号関数や復号関数などの暗号ロジックを抽出するプロセス解析装置に関する。  プロセス解析装置は、解析対象のプロセスの実行トレースを取得する実行トレース取得部と、実行トレースからループ構造を示す処理単位であるブロックを抽出するブロック抽出部と、ブロックから、入力情報と出力情報とを含むブロック情報を抽出するブロック情報抽出部と、ブロック情報の入力情報または出力情報を用いてブロックの入出力関係の特徴を判定する特徴判定情報を生成し、この特徴判定情報を利用してブロックの入出力関係を解析し、暗号関数または復号関数の入出力関係の特徴を示すブロックを暗号ロジックと判定するブロック情報解析部とを備える。
2016030927.tif 000002
【特許請求の範囲】
【請求項１】
解析対象のプロセスの実行トレースを取得する実行トレース取得部と、
前記実行トレースからループ構造を示す処理単位であるブロックを抽出するブロック抽出部と、
前記ブロックから、入力情報と出力情報とを含むブロック情報を抽出するブロック情報抽出部と、
前記ブロック情報の前記入力情報または前記出力情報を用いて前記ブロックの入出力関係の特徴を判定する特徴判定情報を生成し、この特徴判定情報を利用して前記ブロックの入出力関係を解析し、暗号関数または復号関数の入出力関係の特徴を示すブロックを暗号ロジックと判定するブロック情報解析部と
を備えるプロセス解析装置。
【請求項２】
前記ブロック情報の前記入力情報または前記出力情報に含まれる印刷可能な文字列の割合である印刷可能文字列割合を判定する文字列割合判定部を備え、
前記ブロック情報解析部は、前記特徴判定情報として、前記文字列割合判定部により判定された前記入力情報の第１の印刷可能文字列割合と前記出力情報の第２の印刷可能文字列割合との差分を算出し、この差分が予め定められた閾値以上の場合に、前記ブロックを暗号ロジックと判定する請求項１記載のプロセス解析装置。
【請求項３】
前記ブロック情報の前記出力情報をデコードするデータデコード部を備え、
前記ブロック情報解析部は、前記特徴判定情報として、前記データデコード部により前記ブロック情報の前記出力情報をデコードしたデコード結果を生成し、このデコード結果と一致する前記出力情報を持つ前記ブロックを暗号ロジックと判定する請求項１記載のプロセス解析装置。
【請求項４】
前記ブロック情報の前記出力情報を解凍するデータ解凍部を備え、
前記ブロック情報解析部は、前記特徴判定情報として、前記データ解凍部により前記ブロック情報の前記出力情報を解凍したデコード結果を生成し、このデコード結果と一致する前記出力情報を持つ前記ブロックを暗号ロジックと判定する請求項１記載のプロセス解析装置。
【請求項５】
前記ブロック情報の前記出力情報を他のブロックへ入力して前記他のブロックの処理を実行する仮想実行部を備え、
前記ブロック情報解析部は、前記特徴判定情報として、前記仮想実行部により前記他のブロックの処理を実行した実行結果を生成し、この実行結果と一致する前記入力情報を持つ前記ブロックを暗号ロジックと判定する請求項１記載のプロセス解析装置。
【請求項６】
解析対象のプロセスを解析して暗号ロジックを判定するプロセス解析装置のプロセス解析方法であって、
実行トレース取得部が、解析対象のプロセスの実行トレースを取得する実行トレース取得ステップと、
ブロック抽出部が、前記実行トレースからループ構造を示す処理単位であるブロックを抽出するブロック抽出ステップと、
ブロック情報抽出部が、前記ブロックから、入力情報と出力情報とを含むブロック情報を抽出するブロック情報抽出ステップと、
ブロック情報解析部が、前記ブロック情報の前記入力情報または前記出力情報を用いて前記ブロックの入出力関係の特徴を判定する特徴判定情報を生成し、この特徴判定情報を利用して前記ブロックの入出力関係を解析し、暗号関数または復号関数の入出力関係の特徴を示すブロックを暗号ロジックと判定するブロック情報解析ステップと
を備えるプロセス解析方法。
【請求項７】
コンピュータに、
解析対象のプロセスの実行トレースを取得する実行トレース取得ステップと、
前記実行トレースからループ構造を示す処理単位であるブロックを抽出するブロック抽出ステップと、
前記ブロックから、入力情報と出力情報とを含むブロック情報を抽出するブロック情報抽出ステップと、
前記ブロック情報の前記入力情報または前記出力情報を用いて前記ブロックの入出力関係の特徴を判定する特徴判定情報を生成し、この特徴判定情報を利用して前記ブロックの入出力関係を解析し、暗号関数または復号関数の入出力関係の特徴を示すブロックを暗号ロジックと判定するブロック情報解析ステップと
を実行させるためのプロセス解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置で実行されるプロセスを解析して、プロセスの中で利用されている暗号関数や復号関数などの暗号ロジックを抽出するプロセス解析装置に関する。
【背景技術】
【０００２】
近年、新しいセキュリティ脅威として、特定の組織をねらい、執拗に攻撃を行なうＡｄｖａｎｃｅｄ  Ｐｅｒｓｉｓｔｅｎｔ  Ｔｈｒｅａｔ  （ＡＰＴ）と呼ばれる「標的型攻撃」が顕在化している。ＡＰＴでは、メールによって標的とする組織の端末にマルウェアを感染させ、感染したマルウェアが外部の攻撃者のサーバと通信を行ない、新しい攻撃プログラムのダウンロードや組織システム内の機密情報の送信を行なう。このようなセキュリティインシデントの発生を早期に検出し被害の拡大を防ぐために、ネットワーク機器の様々なログを監視し不審な兆候の検出を行なうＳｅｃｕｒｉｔｙ  Ｏｐｅｒａｔｉｏｎ  Ｃｅｎｔｅｒ  （ＳＯＣ）サービスが必要とされる。一方、インシデントの発生が判明した場合、組織は、インシデントの原因や被害の調査、対応策の検討、サービスの復旧、再発防止策の実施などのインシデントレスポンスを行なわなければならない。さらに、組織の顧客やビジネスパートナーによっては、組織は、機密情報の何が漏えいし、何が漏えいしなかったのかを、明確にする必要がある。【０００３】
組織がインシデントの原因や被害の調査を行なうにあたり、パソコン、サーバ、ネットワーク機器などが生成したログやネットワーク上で記録されたパケットを解析し、マルウェアの侵入経路、感染端末、アクセスした情報、攻撃者からの命令、外部に送信した情報などを調査するネットワークフォレンジックが重要な役割を担う。ところが、昨今のマルウェアは、暗号技術を活用して通信を秘匿する。そのため、組織がネットワークフォレンジックを行なったとしても、攻撃者から送られる命令が何であり、どのような情報が外部に送信されたのかを追跡することが困難となっている。【０００４】
この問題に対応するためには、マルウェアが通信の秘匿に利用した暗号ロジックと鍵を見つけ、暗号化された通信を復号する必要がある。一般に、この作業はマルウェアのプログラムのバイナリを解析する必要がある。従来の暗号ロジック抽出手法の多くは、例えば、特許文献１に開示されているマルウェア解析システムのように、マルウェアを実行した際の実行トレースから、暗号ロジックによく見られる特徴を探すことで、暗号ロジックと鍵の特定を行なう。また、マルウェアのプログラムのバイナリを解析する技術としては、非特許文献１〜９に開示されている技術が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開2013-114637号公報
【非特許文献】
【０００６】
【非特許文献１】Noe Lutz, Towards Revealing Attacker's Intent by Automatically Decrypting Network Traffic, Master Thesis MA-2008-08.
【非特許文献２】Zhi Wang, Xuxian Jiang, Weidong Cui, Xinyuan Wang and Mike Grace, ReFormat: automatic reverse engineering of encrypted messages, Proceedings of the 14th European Conference on Research in Computer Security.
【非特許文献３】Felix Matenaar, Andre Wichmann, Felix Leder and Elmar Gerhards-Padilla, CIS: The Crypto Intelligence System for Automatic Detection and Localization of Cryptographic Functions in Current Malware, Proceedings of the 7th and Unwanted Software (Malware 2012).
【非特許文献４】Xin Li, Xinyuan WaInternational Conference on Malicious ng, Wentao Chang, CipherXRay: Exposing Cryptographic Operations and Transient Secrets from Monitored Binary Execution, IEEE TRANSACTIONS ON DEPENDABLE AND SECURE COMPUTING (preprint) 2012.
【非特許文献５】Felix Grobert, Carsten Willems, and Thorsten Holz, Automated Identification of Cryptographic Primitives in Binary Programs, Proceedings of the 14th International Conference on Recent Advances in Intrusion Detection.
【非特許文献６】Joan Calvet, Jose M. Fernandez, Jean-Yves Marion, Aligot: Cryptographic Function Identification in Obfuscated Binary Programs, Proceedings of the 19th ACM Conference on Computer and Communications Security, CCS 2012.
【非特許文献７】Intel, Pin - A Dynamic Binary Instrumentation Tool, https://software.intel.com/en-us/articles/pin-a-dynamic-binary-instrumentation-tool
【非特許文献８】Bitblaze, TEMU: The BitBlaze Dynamic Analysis Component, http://bitblaze.cs.berkeley.edu/temu.html
【非特許文献９】Jordi Tubella and Antonio Gonzalez, Control Speculation in Multithreaded Processors through Dynamic Loop Detection, In Proceedings of the Fourth International Symposium on High-Performance Computer Architecture, pp.14-23, 1998.
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に代表される従来技術では、暗号ロジックの候補として多くの無関係なロジックが抽出される。マルウェア解析者は、手作業で無関係なロジックを除外しなければならず、多大な手間暇を要するという課題がある。そのため、無関係なロジックの抽出を抑えた、精度の高い暗号ロジック抽出手法が必要となる。【０００８】
この発明は上記のような課題を解決するためになされたもので、ファイルや通信を暗号化するマルウェアが利用する暗号ロジックの特徴を基にしてマルウェアの実行トレースを解析することにより、マルウェアが用いる暗号ロジックを、精度良く特定することを目的とする。
【課題を解決するための手段】
【０００９】
上記で述べた課題を解決するため、本発明のプロセス解析装置は、解析対象のプロセスの実行トレースを取得する実行トレース取得部と、前記実行トレースからループ構造を示す処理単位であるブロックを抽出するブロック抽出部と、前記ブロックから、入力情報と出力情報とを含むブロック情報を抽出するブロック情報抽出部と、前記ブロック情報の前記入力情報または前記出力情報を用いて前記ブロックの入出力関係の特徴を判定する特徴判定情報を生成し、この特徴判定情報を利用して前記ブロックの入出力関係を解析し、暗号関数または復号関数の入出力関係の特徴を示すブロックを暗号ロジックと判定するブロック情報解析部とを備える。
【発明の効果】
【００１０】
本発明によれば、実行トレースから抽出したブロックの入出力関係の特徴を判定する特徴判定情報を生成し、この特徴判定情報を利用してブロックの入出力関係を解析し、暗号関数または復号関数の入出力関係の特徴を示すブロックを暗号ロジックと判定することにより、マルウェアが用いる暗号ロジックを、精度良く特定することができるという効果がある。
【図面の簡単な説明】
【００１１】
【図１】実施の形態１に係るプロセス解析装置の一構成例を示す構成図である。
【図２】実施の形態１に係るプロセス解析装置のプロセス解析処理の流れを示すフローチャートである。
【図３】定義リスト１０５の一例を示す図である。
【図４】入力情報と出力情報を格納するデータ形式の一例を説明する図である。
【図５】暗号関数の入出力情報が含む印刷可能文字列の特徴を示す図である。
【図６】実施例１に係るプロセス解析装置の一構成例を示す構成図である。
【図７】実施例１に係る文字列割合判定部１６０の文字列割合判定処理の流れを示すフローチャートである。
【図８】文字コード表ＤＢ１６２に格納された文字コード表の例を示す図である。
【図９】マルウェアの暗号関数の使い方の一例（その１）を示す図である。
【図１０】実施例２に係るプロセス解析装置の一構成例を示す構成図である。
【図１１】実施例２に係るデータデコード部１７０のデコード判定処理の流れを示すフローチャートである。
【図１２】マルウェアの暗号関数の使い方の一例（その２）を示す図である。
【図１３】実施例３に係るプロセス解析装置の一構成例を示す構成図である。
【図１４】実施例３に係るデータ解凍部１８０のデータ解凍判定処理の流れを示すフローチャートである。
【図１５】暗号の基本定義を説明する図である。
【図１６】実施例４に係るプロセス解析装置の一構成例を示す構成図である。
【図１７】実施例４に係る仮想実行部１９０の仮想実行判定処理の流れを示すフローチャートである。
【図１８】実施例４に係る仮想実行部１９０の仮想実行解析の処理の流れ（前半）を示すフローチャートである。
【図１９】実施例４に係る仮想実行部１９０の仮想実行解析の処理の流れ（後半）を示すフローチャートである。
【発明を実施するための形態】
【００１２】
実施の形態１．
図１は、実施の形態１に係るプロセス解析装置の一構成例を示す構成図である。
図１において、プロセス解析装置１００は、実行トレース取得部１１０、ブロック抽出部１２０、ブロック情報抽出部１３０、ブロック情報解析部１４０、及び、解析結果出力部１５０を備える。
【００１３】
プロセス解析装置１００は、マルウェアのプログラムのバイナリを解析するための機器であり、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）がバスを介して、ＲＯＭ、ＲＡＭ、通信ボード、ディスプレイ、キーボード、マウス、磁気ディスク装置などのハードウェアデバイスと接続されたコンピュータにより、プロセス解析装置１００を構成する。また、プロセス解析装置１００では、ＣＰＵ上に仮想マシンを備え、マルウェアのプログラムを実行できる実行環境を備えている。
【００１４】
実行トレース取得部１１０は、仮想マシンの実行環境上で、解析対象の実行ファイル１０１を実行し、実行した処理のログ情報である実行トレース１０２と、実行したプロセスに関する各種情報であるプロセス情報１０３を取得する。
【００１５】
ブロック抽出部１２０は、実行トレース取得部１１０により取得した実行トレース１０２から、プログラムを構成する基本的な構成要素であるブロックを抽出し、抽出した複数のブロックのリストであるブロックリスト１０４を出力する。また、ブロック抽出部１２０は、実行トレース１０２の各行から、後述するブロック情報解析処理に必要な情報を抽出して、定義リスト１０５を出力する。
【００１６】
ブロック情報抽出部１３０は、実行トレース１０２とブロックリスト１０４と定義リスト１０５から、ブロックで実行される入出力情報を含むブロック情報を抽出し、ブロック情報リスト１０６を出力する。
【００１７】
ブロック情報解析部１４０は、ブロック情報抽出部１３０が出力したブロック情報リスト１０６を用いて、解析対象ブロックが暗号ロジックか否かを解析し、解析結果リスト１０７を出力する。
【００１８】
解析結果出力部１５０は、ブロック情報解析部１４０が解析した解析結果リスト１０７の内容を、例えばディスプレイに出力して解析者に表示する。
【００１９】
次に、プロセス解析装置１００のプロセス解析処理を、図２のフローチャートを用いて説明する。
図２は、実施の形態１に係るプロセス解析装置のプロセス解析処理の流れを示すフローチャートである。
【００２０】
まず、ステップＳ１１０において、実行トレース取得部１１０は、仮想マシンなどの解析環境上で、解析対象の実行ファイル１０１のプログラムを実行する。実行トレース取得部１１０は、実行したプログラムのプロセスを監視し、同プロセスの実行トレース１０２を記録する。実行トレース１０２により記録する情報は、例えば、以下のような情報を記録する。
・実行した命令のアドレス
・実行した命令のアドレス（オペコード、オペランド）
・アクセスされたレジスタとその値
・アクセスされたメモリのアドレス、その値、そのモード（ＲＥＡＤ／ＷＲＩＴＥ）
【００２１】
実行トレースを取得する方法としては、例えば、非特許文献７に記載されているＰｉｎなどのＤｙｎａｍｉｃ  Ｉｎｓｔｒｕｍｅｎｔａｔｉｏｎ  Ｔｏｏｌを用いる方法や、非特許文献８に記載されているＴＥＭＵのようなエミュレータを用いる方法がある。実行トレース取得部１１０では、これらの既存の方法を基に、実行トレースを取得する。
【００２２】
また、実行トレース取得部１１０は、実行トレース１０２の取得と同時に、実行トレース１０２を取得したプロセスがロードしているＤＬＬや関数についての情報をプロセス情報１０３として抽出する。プロセス情報１０３には、例えば、以下のような情報が記録される。
・プロセスのベースアドレス
・プロセスがロードしているＤＬＬの名前、アドレス、サイズ
・ＤＬＬがエクスポートしているＡＰＩの名前、アドレス
なお、プロセス情報１０３の分かりやすい実例としては、メモリにロードされているプロセスのＰＥヘッダである。
【００２３】
次に、ステップＳ１２０において、ブロック抽出部１２０は、実行トレース１０２から、プログラムを構成する基本的な構成要素であるブロックを抽出する。ここでいうブロックとは、関数、ループ、連結したループなどであり、それらを表現するために必要な、以下の情報を持つ。
・ブロックＩＤ
・ブロックの種類
・ブロックの開始アドレス
・ブロックの終了アドレス
・ブロック内の命令列（プロセスのメモリイメージから取得）
ブロック抽出部１２０は、抽出した複数のブロックについて上記のブロックの情報を、ブロックリスト１０４として管理する。
【００２４】
以下、ブロックを表現する各情報について説明する。
ブロックＩＤは、ブロックリストにおいて一意となる値を設定する。ブロックの種類とは、ブロックを構成する最も外側のロジック（関数、ループ、連結したループ）を設定する。ブロックの開始アドレスとは、プロセスが利用するメモリ上の何番地目からブロックが開始しているかを示す。ブロックの終了アドレスとは、プロセスが利用するメモリ上の何番地目でブロックが終了しているかを示す。ブロック内の命令列とは、プロセスが利用するメモリ上で、開始アドレスと終了アドレスの範囲に存在する命令シーケンスである。
【００２５】
ブロック抽出部１２０は、ｃａｌｌなどの関数呼出命令と、ｒｅｔなどのリターン命令の関係を実行トレース１０２上で追跡することにより、関数を特定する。また、ブロック抽出部１２０は、命令パターンの繰返しや後方ジャンプ（Ｂａｃｋｗａｒｄ  Ｊｕｍｐ）を実行トレース上で追跡することにより、ループを特定する。また、ブロック抽出部１２０は、ループ間の入出力関係を実行トレース上で追跡することにより、連結したループを特定する。なお、ブロックリスト１０４の抽出に関しては、例えば、非特許文献５、６、９に開示されている技術を活用することができる。
【００２６】
さらに、ステップＳ１２０では、後述のステップで必要な情報として、定義リスト１０５を作成する。
図３は、定義リスト１０５の一例を示す図である。
図３に示すように、定義リスト１０５は、ブロック抽出部１２０が実行トレース１０２を１行ずつ読んでいく中で、以下の情報を記録したテーブルである。
・実行トレースの行番号
・同行で実行された命令があるアドレス
・同行で変更された記憶領域（レジスタ、メモリ）
・新しい値
・値のサイズ
【００２７】
次に、ステップＳ１３０において、ブロック情報抽出部１３０は、実行トレース１０２とブロック（ブロックリスト１０４、定義リスト１０５）から、ブロック情報を抽出し、ブロック情報リスト１０６を出力する。ここでいうブロック情報リスト１０６には、以下に示す情報を持つブロック情報が要素として登録される。
・ブロックＩＤ
・入力情報
・出力情報
・コンテキスト
【００２８】
以下、ブロック情報を表現する各情報について説明する。
ブロックＩＤとは、ブロックリスト１０４に登録されているブロックと対応づけるための情報である。
入力情報とは、実行トレース１０２において、以下の条件を満たす情報である。
・ブロックの実行前に定義される情報
・ブロックの実行中において、上書きされる前に、読まれる情報
出力情報とは、実行トレース１０２において、以下の条件を満たす情報である。
・記憶領域（レジスタ、メモリ）において、ブロック実行中、同記憶領域に最後に書き込まれた情報
コンテキストとは、ブロックが実行トレース１０２において、どのタイミングで実行されているかを表わすための情報である。
【００２９】
以下、入力情報、出力情報、コンテキストの抽出処理の詳細を説明する。
【００３０】
まず、入力情報の抽出は、次のように行なう。
ブロック情報抽出部１３０は、実行トレース１０２を１行ずつ解析する。注目している実行トレース１０２の命令アドレスが、ブロックリスト１０４に登録されている、いずれかのブロックＢ１の開始アドレスと終了アドレスの範囲に含まれているとする。ブロック情報抽出部１３０は、実行トレース１０２をさらに解析し、ブロックＢ１の範囲にあるアドレスＸで命令が実行され、同命令によって、ある記憶領域がＲＥＡＤされているとする。そして、ブロック情報抽出部１３０は、定義リスト１０５を解析し、ブロックＢ１の範囲内かつアドレスＸよりも前に実行された命令によって、同記憶領域がＷＲＩＴＥされていないかを確認する。ＷＲＩＴＥされていない場合、同記憶領域を入力情報とする。
【００３１】
なお、実行トレース１０２上、隣接するメモリ領域が同じアドレスの同じ命令によってＲＥＡＤされている場合、同メモリ領域はバッファとしてアクセスされている可能性が高いため、同メモリ領域をまとめて入力情報とする。すなわち、入力情報としては、同メモリ領域の先頭アドレス、サイズ、格納されているバイト列、から構成される。また、入力情報の種類として、『バッファ』であることも記録する。また、同じアドレスの命令によってＲＥＡＤされているが、値がカウントアップまたはカウントダウンしている入力情報については、入力情報の種類を『カウンタ』とする。ループの中でループの終了条件に使われている入力情報や、カウンタの初期値に使われている入力情報の種類を、『終了条件』とする。
【００３２】
次に、出力情報の抽出は、次のように行なう。
ブロック情報抽出部１３０が、あるブロックＢ１の実行トレース１０２を解析しているとする。ブロック情報抽出部１３０は、実行トレース１０２をさらに解析し、トレースがブロックＢ１の範囲を超えたとする。このとき、ブロック情報抽出部１３０は、定義リスト１０５を解析することで、同ブロックの範囲で実行された命令によってＷＲＩＴＥされた情報を出力情報とする。また、同じ記憶領域に複数回ＷＲＩＴＥが行なわれている場合は、実行トレース１０２の行番号が大きいもの、すなわち、最新のものを出力情報とする。
【００３３】
なお、入力情報と同様に、実行トレース１０２上、隣接するメモリ領域が同じアドレスの同じ命令によってＷＲＩＴＥされている場合、バッファとしてアクセスされている可能性が高いため、同メモリ領域をまとめて出力情報とする。すなわち、出力情報としては同メモリ領域の先頭アドレス、サイズ、格納されているバイト列、から構成される。また、出力情報の種類として、『バッファ』であることも記録する。また、同じアドレスの命令によってＷＲＩＴＥされているが、値がカウントアップまたはカウントダウンしている出力情報については、出力情報の種類を『カウンタ』とする。ループの中でループの終了条件に使われている出力情報や、カウンタの初期値に使われている出力情報の種類を、『終了条件』とする。
【００３４】
次に、入力情報と出力情報を格納するデータ形式を説明する。
図４は、入力情報と出力情報を格納するデータ形式の一例を説明する図である。
図４において、入力情報と出力情報に関する情報は、記憶領域（開始アドレス）、値（バイト列）、サイズ（バイト）、情報の種類が格納されている。
【００３５】
次に、コンテキストの抽出は、次のように行なう。
コンテキストは、ブロックの呼び出し関係（入れ子関係）を表現するためのものである。例えば、Ｂ１、Ｂ２、Ｂ３、Ｂ４、Ｂ５、Ｂ６、Ｂ７、Ｂ８をブロックとする。このとき、Ｂ１の実行終了後にＢ２が実行され、Ｂ２の中でＢ３とＢ４が実行され、Ｂ２の実行終了後にＢ５が実行されるとする。さらに、Ｂ５の中でＢ６が実行され、Ｂ６の中で、Ｂ７が実行されるとする。そして、Ｂ７、Ｂ６の実行終了後、Ｂ８が実行されるとする。
【００３６】
上記で述べたブロックの呼び出し関係の場合、Ｂ１、Ｂ２、Ｂ５、Ｂ８のコンテキストを、それぞれ１、２、３、４と表現する。また、Ｂ２の中で実行されるＢ３、Ｂ４のコンテキストを、それぞれ２．１、２．２と表現する。同様に、Ｂ５の中で実行されるＢ６のコンテキストを３．１と表現する。さらに、Ｂ６の中で実行されるＢ７のコンテキストを３．１．１と表現する。このようにコンテキストを表現することにより、同じブロック（同じブロックＩＤ）の呼び出しであっても、呼び出し場所に応じて区別することができる。
【００３７】
なお、コンテキストの表現形式は、ブロックの呼び出し関係（入れ子関係）を表現できる表現形式であればどのような表現形式でも構わない。
【００３８】
また、ブロック情報抽出部１３０は、実行トレース１０２を解析していく中で、ブロックが終了したのか、それともブロックの中で新しくブロックが呼ばれたかのかは、次のように判断する。
・あるブロックの実行トレース１０２を解析している最中に、関数呼び出し（例えばｃａｌｌやｅｎｔｅｒ）以外の命令（例えばｊｍｐ、ｊｎｅ、ｒｅｔ）でブロックの範囲外へジャンプする場合、同ブロックの終了を意味する。
・あるブロックの実行トレース１０２を解析している最中に、関数呼び出し（例えばｃａｌｌやｅｎｔｅｒ）命令でブロックの範囲外へジャンプする場合、同ブロックは終了せず、同ブロックの中で新たにブロックが呼び出されたものとする。
・あるブロックの実行トレース１０２を解析している最中に、上記以外のケースで、実行トレース１０２がブロックの範囲を超えた場合、同ブロックの終了を意味する。
【００３９】
次に、図２のフローチャートの説明に戻る。
ステップＳ１４０において、ブロック情報解析部１４０は、ブロック情報リスト１０６のブロック情報を解析し、暗号ロジックを特定する。ブロック情報の解析では、ブロック情報解析部１４０は、ブロック情報の入力情報または出力情報を用いて、ブロックの入出力関係の特徴を判定する特徴判定情報を生成し、この特徴判定情報を利用してブロックの入出力関係を解析し、暗号関数または復号関数の入出力関係の特徴を示すブロックを暗号ロジックと判定する。ブロック情報解析部１４０が生成する特徴判定情報と、特徴判定情報を利用した暗号ロジックの判定方法は、後述する実施例１〜実施例４で詳細に説明する。ブロック情報解析部１４０は、ブロック情報を解析した結果、暗号ロジックの判定結果を含む解析結果リスト１０７を出力する。
【００４０】
最後に、ステップＳ１５０において、解析結果出力部１５０は、ブロックリスト１０４、ブロック情報リスト１０６、解析結果リスト１０７を基に、解析結果を整理して、以下の情報を出力する。
・暗号ロジックの開始アドレス
・入力情報（記憶領域、値、サイズ）
・出力情報（記憶領域、値、サイズ）
・復号ロジックの開始アドレス
【００４１】
以上のように、本実施の形態１の発明では、実行トレースから抽出したブロックの入出力関係の特徴を判定する特徴判定情報を生成し、この特徴判定情報を利用してブロックの入出力関係を解析し、暗号関数または復号関数の入出力関係の特徴を示すブロックを暗号ロジックと判定することにより、マルウェアが用いる暗号ロジックを、精度良く特定することができるという効果がある。
【００４２】
次に、本実施の形態１を具体的に実現する実施例１〜実施例４について、以下に説明する。
【００４３】
実施例１．
暗号関数の入力は、通常、平文である。一方、暗号関数の出力は、ランダムなバイト列である。そのため、暗号関数の入力には印刷可能文字列の割合が多く、出力には印刷可能文字列の割合が少ないという特徴が見られる。
図５は、暗号関数の入出力情報が含む印刷可能文字列の特徴を示す図である。
図５では、入力される「こんにちは」が印刷可能文字列であり、また、出力される情報の内、「唖」が印刷可能文字列であり、「・」が印刷不可能な文字列を示している。実施例１では、このような暗号関数の入出力情報が含む印刷可能文字列の特徴を特徴判定情報に利用して、暗号ロジックを特定する実施例を説明する。
【００４４】
図６は、実施例１に係るプロセス解析装置の一構成例を示す構成図である。
図６において、ブロック情報解析部１４０は、文字列割合判定部１６０、文字コード判定アルゴリズムデータベース（データベースは、以下ＤＢと記載する）１６１、文字コード表ＤＢ１６２を備える。ブロック情報解析部１４０は、ブロック情報リスト１０６が入力され、文字列割合判定処理を行なって、解析結果リスト１０７を出力する。また、文字列割合判定部１６０は、ブロック情報解析部１４０から入力されたブロック情報の入力情報に対して、印刷可能文字列割合を判定して暗号ロジックを特定し、特定した暗号ロジックを含む暗号ロジックリスト１（１６３）をブロック情報解析部１４０に出力する。
【００４５】
なお、文字列割合判定部１６０、文字コード判定アルゴリズムＤＢ１６１、文字コード表ＤＢ１６２は、ブロック情報解析部１４０の内部に備える構成としても良い。
【００４６】
次に、実施例１の文字列割合判定処理の流れを、図７を参照して説明する。
図７は、実施例１に係る文字列割合判定部１６０の文字列割合判定処理の流れを示すフローチャートである。
【００４７】
まず、ステップＳ１６０１において、文字列割合判定部１６０は、暗号ロジックリスト１（１６３）を初期化する。暗号ロジックリスト１（１６３）は、文字列割合判定部１６０で暗号ロジックの候補と判定されたブロック情報を格納するブロック情報リスト１０６である。
【００４８】
次に、ステップＳ１６０２において、文字列割合判定部１６０は、ブロック情報リスト１０６に次の要素（ブロック情報）があるかを確認する。次の要素のブロック情報が無ければ、Ｎｏの分岐に進み、処理を終了する。一方、次の要素のブロック情報があれば、ステップＳ１６０３において、次の要素Ｂｉを選ぶ。
【００４９】
次に、ステップＳ１６０４において、文字列割合判定部１６０は、ブロック情報の入力情報の印刷可能文字列の割合を判定する。ここで印刷可能文字列とは、改行復帰文字、または空文字（ヌル文字）で終わるｃ個の文字の連鎖からなる印刷可能な文字列のことである。文字列割合判定部１６０は、情報の種類に「バッファ」が設定されている入力情報に対して、値に設定されているバイト列の文字コード判定を行なう。この文字コード判定では、文字コード判定アルゴリズムＤＢ１６１に登録されているアルゴリズムを用いて、文字コード判定を実行する。文字コードが判定できれば、文字コード表ＤＢ１６２から対応する文字コード表を取得し、印刷可能な文字を確認することができる。
図８は、文字コード表ＤＢ１６２に格納された文字コード表の例を示す図である。
図８では、文字「あ」から文字「ぱ」に対して、文字コードが対応付けられて格納された例を示している。
【００５０】
文字列割合判定部１６０は、入力情報のバイト列から得られた印刷可能文字列の文字列長の総和を、同バイト列長で割ることで、印刷可能文字列割合を算出する。なお、文字列長は、マルチバイト文字を２バイトとして計算する。
【００５１】
次に、ステップＳ１６０５において、文字列割合判定部１６０は、ブロック情報の出力情報の印刷可能文字列の割合を判定する。ここでの処理手順はステップＳ１６０４と同様である。
【００５２】
次に、ステップＳ１６０６において、文字列割合判定部１６０は、入力と出力の印刷可能文字列の割合の差分として、入力の印刷可能文字列割合−出力の印刷文字列割合を計算する。
【００５３】
次に、ステップＳ１６０７において、文字列割合判定部１６０は、ステップＳ１６０６で計算した差分が、閾値θ以上であれば、暗号ロジックリスト１（１６３）に、同ブロック情報Ｂｉを追加する。なお、上記のｃ、及びθは、調整可能なパラメータである。
【００５４】
なお、ステップＳ１６０４において、入力情報のファイルタイプ検査を行うことも可能である。入力がWORDやPDFなどの既知のファイル形式のファイルであれば、そのファイル形式に従ってテキスト情報を抽出し、同テキスト情報に対してのみ印刷可能文字列割合を計算する。こうすることで、WORDやPDFなどのテキストを特別な形式でエンコードするタイプのファイルが入力情報であったとしても、適切に入力情報の印刷可能文字列割合を計算することができる。ファイルタイプ検査は既知のツールを利用することが可能である。
【００５５】
実施例２．
マルウェアなどの不正プログラムは、暗号化されたデータを印刷可能なデータにエンコード（例えばＢａｓｅ６４エンコード）してから、インターネット上に送信することがある。
図９は、マルウェアの暗号関数の使い方の一例（その１）を示す図である。
図９では、マルウェアが、暗号関数によりメッセージを暗号化した暗号文を、Ｂａｓｅ６４エンコードしてから、ＨＴＴＰ送信によりインターネット上に送信している例を示している。そこで、あるブロックの出力情報を、既知のデコーダ（例えばＢａｓｅ６４デコーダ）を用いてデコードを行ない、デコードに成功した場合、デコードした値と等しい出力情報を持っているブロックを、暗号ロジックの候補とすることができる。実施例２では、このような暗号関数の入出力情報が含むエンコードの特徴を特徴判定情報に利用して、暗号ロジックを特定する実施例を説明する。
【００５６】
図１０は、実施例２に係るプロセス解析装置の一構成例を示す構成図である。
図１０において、ブロック情報解析部１４０は、データデコード部１７０、エンコード／デコードアルゴリズムＤＢ１７１を備える。ブロック情報解析部１４０は、ブロック情報リスト１０６が入力され、デコード判定処理を行なって、解析結果リスト１０７を出力する。また、データデコード部１７０は、ブロック情報解析部１４０から入力されたブロック情報の出力情報に対してデコードを行ない、デコードに成功した場合、デコードした値と等しい出力情報を持っているブロックを、暗号ロジックの候補とし、候補とした暗号ロジックを含む暗号ロジックリスト２（１７２）をブロック情報解析部１４０に出力する。
【００５７】
なお、データデコード部１７０とエンコード／デコードアルゴリズムＤＢ１７１は、ブロック情報解析部１４０の内部に備える構成としても良い。
【００５８】
次に、実施例２のデコード判定処理の流れを、図１１を参照して説明する。
図１１は、実施例２に係るデータデコード部１７０のデコード判定処理の流れを示すフローチャートである。
【００５９】
まず、ステップＳ１７０１において、データデコード部１７０は、暗号ロジックリスト２（１７２）を初期化する。暗号ロジックリスト２（１７２）は、データデコード部１７０で暗号ロジックの候補と判定されたブロック情報を格納するブロック情報リスト１０６である。
【００６０】
次に、ステップＳ１７０２において、データデコード部１７０は、ブロック情報リスト１０６に次の要素（ブロック情報）があるかを確認する。次の要素のブロック情報が無ければ、Ｎｏの分岐に進み、処理を終了する。一方、次の要素のブロック情報があれば、ステップＳ１７０３において、次の要素Ｂｉを選ぶ。
【００６１】
次に、ステップＳ１７０４において、データデコード部１７０は、既知のデコードアルゴリズムを適用して、ブロック情報の出力情報をデコードする。既知のデコードアルゴリズムは、エンコード／デコードアルゴリズムＤＢ１７１に格納されている。データデコード部１７０は、情報の種類が「バッファ」となっている出力情報に対して、デコードを行なう。
【００６２】
次に、ステップＳ１７０５において、データデコード部１７０は、デコードに成功したか否かを判定する。データデコード部１７０は、エンコード／デコードアルゴリズムＤＢ１７１に格納されているいずれかのデコードアルゴリズムでデコードに成功した場合、同デコード結果を保持して、Ｙｅｓの分岐によりステップＳ１７０７に進む。
【００６３】
次に、ステップＳ１７０７において、データデコード部１７０は、ステップＳ１７０５で保持したデコード結果と一致する出力情報を持つブロックを、ブロック情報リスト１０６から探す。なお、処理の効率化のために、ブロックＢｉのコンテキストより古いコンテキストのブロックに限定して検索対象としても良い。データデコード部１７０は、ブロック情報リスト１０６を検索した結果、デコード結果と一致する出力情報を持つブロックＢｊ（ｉ≠ｊ）を発見した場合、ステップＳ１７０８において、ブロックＢｊのブロック情報を、暗号ロジック候補リスト２（１７２）に追加する。
【００６４】
実施例３．
マルウェアなどの不正プログラムは、データを暗号化する前に、同データを圧縮することがある。
図１２は、マルウェアの暗号関数の使い方の一例（その２）を示す図である。
図１２では、マルウェアが、メッセージが暗号関数に入力される前に、メッセージを圧縮関数により圧縮し、この圧縮データを暗号関数により暗号化した暗号文を、ＨＴＴＰ送信によりインターネット上に送信している例を示している。そこで、あるブロックの入力情報を、既知の解凍アルゴリズム（例えばｚｉｐ、ｌｚｈ）で解凍を試み、解凍に成功した場合、同ブロックを暗号ロジックの候補とすることができる。実施例３では、このような暗号関数の入出力情報が含む圧縮処理の特徴を特徴判定情報に利用して、暗号ロジックを特定する実施例を説明する。
【００６５】
図１３は、実施例３に係るプロセス解析装置の一構成例を示す構成図である。
図１３において、ブロック情報解析部１４０は、データ解凍部１８０、圧縮／解凍アルゴリズムＤＢ１８１を備える。ブロック情報解析部１４０は、ブロック情報リスト１０６が入力され、データ解凍判定処理を行なって、解析結果リスト１０７を出力する。また、データ解凍部１８０は、ブロック情報解析部１４０から入力されたブロック情報の入力情報に対して解凍を行ない、解凍に成功した場合、同ブロックを、暗号ロジックの候補とし、候補とした暗号ロジックを含む暗号ロジックリスト３（１８２）をブロック情報解析部１４０に出力する。
【００６６】
なお、データ解凍部１８０と圧縮／解凍アルゴリズムＤＢ１８１は、ブロック情報解析部１４０の内部に備える構成としても良い。
【００６７】
次に、実施例３のデータ解凍判定処理の流れを、図１４を参照して説明する。
図１４は、実施例３に係るデータ解凍部１８０のデータ解凍判定処理の流れを示すフローチャートである。
【００６８】
まず、ステップＳ１８０１において、データ解凍部１８０は、暗号ロジックリスト３（１８２）を初期化する。暗号ロジックリスト３（１８２）は、データ解凍部１８０で暗号ロジックの候補と判定されたブロック情報を格納するブロック情報リスト１０６である。
【００６９】
次に、ステップＳ１８０２において、データ解凍部１８０は、ブロック情報リスト１０６に次の要素（ブロック情報）があるかを確認する。次の要素のブロック情報が無ければ、Ｎｏの分岐に進み、処理を終了する。一方、次の要素のブロック情報があれば、ステップＳ１８０３において、次の要素Ｂｉを選ぶ。
【００７０】
次に、ステップＳ１８０４において、データ解凍部１８０は、既知の解凍アルゴリズムを適用して、ブロック情報の入力情報を解凍する。既知の解凍アルゴリズムは、圧縮／解凍デコードアルゴリズムＤＢ１８１に格納されている。データ解凍部１８０は、情報の種類が「バッファ」となっている入力情報に対して、解凍を行なう。
【００７１】
次に、ステップＳ１８０５において、データ解凍部１８０は、解凍に成功したか否かを判定する。データ解凍部１８０は、圧縮／解凍デコードアルゴリズムＤＢ１８１に格納されているいずれかの解凍アルゴリズムで解凍に成功した場合、Ｙｅｓの分岐によりステップＳ１８０６に進む。
【００７２】
次に、ステップＳ１８０６において、データ解凍部１８０は、ブロックＢｊのブロック情報を、暗号ロジック候補リスト３（１８２）に追加する。
【００７３】
実施例４．
暗号の基本定義より、あるメッセージ（平文）をある鍵によって暗号化して得られる暗号文を、同じ鍵で復号すると元のメッセージが得られることは自明である。すなわち、暗号関数、復号関数、鍵、平文を、それぞれＥｎｃ、Ｄｅｃ、ｋ、ｍとした場合、ｍ  ＝  Ｄｅｃ（ｋ、Ｅｎｃ（ｋ、ｍ））が成立する。
図１５は、暗号の基本定義を説明する図である。
図１５では、平文「こんにちは」をある鍵によって暗号化して、暗号文「・・・唖・」を得た場合、同じ鍵で暗号文「・・・唖・」を復号して、元のメッセージの平文「こんにちは」が得られることを示している。
このような暗号の基本定義に従えば、あるブロックｆの出力の一部（暗号文と想定）を、別のブロックｇの入力の一部としてｇの処理を実行し、ｇの出力がｆの入力（平文と想定）と一致すれば、ｆは暗号関数、ｇは復号関数である可能性が高い。そこで、あるブロックのペアを選び、これらのブロックの入力情報と出力情報に対して、上記の暗号の基本定義を利用した処理を行なえば、同ブロックのペアを暗号ロジックの候補とすることができる。実施例４では、このような暗号の基本定義による入出力情報の特徴を特徴判定情報に利用して、暗号の基本定義の関係が成立するブロックのペアを見つけ出すことにより、暗号ロジックを特定する実施例を説明する。
【００７４】
図１６は、実施例４に係るプロセス解析装置の一構成例を示す構成図である。
図１６において、ブロック情報解析部１４０は、仮想実行部１９０を備える。
ブロック情報解析部１４０は、ブロック情報リスト１０６が入力され、仮想実行判定処理を行なって、解析結果リスト１０７を出力する。また、仮想実行部１９０は、ブロック情報解析部１４０から入力されたブロック情報の入力情報と出力情報を利用して、ブロックのペアに対して、暗号の基本定義を利用した仮想実行を行ない、仮想実行に成功した場合、同ブロックのペアを暗号／復号関数ペアの候補とし、候補とした暗号／復号関数ペアを含む暗号／復号関数ペアリスト１９１をブロック情報解析部１４０に出力する。
【００７５】
なお、仮想実行部１９０は、ブロック情報解析部１４０の内部に備える構成としても良い。
【００７６】
次に、実施例４の仮想実行判定処理の流れを、図１７を参照して説明する。
図１７は、実施例４に係る仮想実行部１９０の仮想実行判定処理の流れを示すフローチャートである。
【００７７】
まず、ステップＳ１９０１において、仮想実行部１９０は、既に抽出済みの暗号ロジック候補をマージして、暗号ロジックリスト４を作成する。既に抽出済みの暗号ロジック候補としては、例えば、実施例１〜実施例３で判定した暗号ロジック候補である暗号ロジックリスト１〜３を用いる。なお、暗号ロジックリスト４を作成する際、重複した暗号ロジック候補がある場合は、１つにまとめる。
【００７８】
次に、ステップＳ１９０２において、仮想実行部１９０は、解析結果リスト１０７を初期化する。解析結果リスト１０７は、仮想実行部１９０で暗号ロジックと復号ロジックのペアと判定されたブロック情報のペアからなるリストである。
【００７９】
次に、ステップＳ１９０３において、仮想実行部１９０は、暗号ロジックリスト４に次の要素（ブロック情報）があるかを確認する。次の要素のブロック情報が無ければ、Ｎｏの分岐に進み、処理を終了する。一方、次の要素のブロック情報があれば、ステップＳ１９０４において、次の要素Ｂｉを選ぶ。
【００８０】
次に、ステップＳ１９０５において、仮想実行部１９０は、次の要素Ｂｉの出力情報を利用して、暗号の基本定義を利用した仮想実行解析を行なう。仮想実行解析の処理の詳細は、後述する。
【００８１】
次に、ステップＳ１９０６において、仮想実行部１９０は、仮想実行解析結果がＮｕｌｌか否かを判定する。仮想実行解析結果がＮｕｌｌでなければ、Ｎｏの分岐によりステップＳ１９０７に進む。
【００８２】
次に、ステップＳ１９０７において、仮想実行部１９０は、仮想実行解析結果を解析結果リスト１０７に登録する。
【００８３】
次に、ステップＳ１９０５の仮想実行解析の流れを、図１８と図１９を参照して詳細に説明する。
図１８は、実施例４に係る仮想実行部１９０の仮想実行解析の流れ（前半）を示すフローチャートである。
図１９は、実施例４に係る仮想実行部１９０の仮想実行解析の流れ（後半）を示すフローチャートである。
【００８４】
ステップＳ１９０５の仮想実行解析は、仮想実行部１９０に対して、引数としてブロック情報Ｂｉと解析対象の実行ファイルが与えられる。
【００８５】
まず、ステップＳ２０１において、仮想実行部１９０は、暗号／復号関数ペアリストを初期化する。
次に、ステップＳ２０２において、仮想実行部１９０は、解析対象の実行ファイル１０１を仮想環境上で実行してプロセスを起動し、一定期間経過後、同プロセスをサスペンドする。
次に、ステップＳ２０３において、仮想実行部１９０は、同プロセスのスナップショットを作成する。これをスナップショット１と呼ぶ。
【００８６】
次に、ステップＳ２０４において、仮想実行部１９０は、ブロック情報リスト１０６に次の要素（ブロック情報）があるかを確認する。次の要素のブロック情報が無ければ、Ｎｏの分岐に進み、ステップＳ２２２において、暗号／復号関数ペアリストを返し、処理を終了する。一方、次の要素のブロック情報があれば、ステップＳ２０５において、次の要素Ｂｊを選ぶ。なお、ブロックＢｉとブロックＢｊのコンテキストを確認し、入れ子の関係になっていないブロックＢｊを選択することも可能である。
【００８７】
次に、ステップＳ２０６において、仮想実行部１９０は、プロセスのスナップショット1をリストアする。
次に、ステップＳ２０７において、仮想実行部１９０は、ブロックＢｊを構成する命令列をプロセスにインジェクトする。具体的には、ブロック情報ＢｊのブロックＩＤに対応する要素を、ブロックリスト１０４から検索し、ブロックの命令列と開始アドレスを取得する。そして、同プロセスの同開始アドレスから同命令列をインジェクトする。
次に、ステップＳ２０８において、仮想実行部１９０は、同プロセスのスナップショットを作成する。これをスナップショット２と呼ぶ。
次に、ステップＳ２０９において、仮想実行部１９０は、Ｂｊの入力情報を取得する。
【００８８】
次に、ステップＳ２１０において、仮想実行部１９０は、Ｂｊの入力情報とＢｉの出力情報とから、入力スナップショットIssを生成する。入力スナップショットとは、実行するブロックの入力となる情報である。入力スナップショットIssの生成は、次のようにして行なう。ブロックＢｉはｎ個の出力情報を持っているとし、Ｏ  ＝  {Ｏ１〜Ｏｎ}で表わす。一方、ブロックＢｊはｍ個の入力情報を持っているとし、Ｉ  ＝  {Ｉ１〜Ｉｍ}で表わす。Ｏｉ∈Ｏとし、Iのｊ番目の要素をＯｉに入れ替えた入力情報をIssとする。入れ替える情報は、入出力情報の種類が「バッファ」のもの同士とする。その他にもサイズが近い情報同士を優先的に選択し、入れ替えることも可能である。入れ替えは、値とサイズに対して行なう。また、同じIssが２度生成されることはないように入れ替えを行なう。
【００８９】
次に、ステップＳ２１１において、仮想実行部１９０は、新しいIssが生成されたか判定する。新しいIssが生成されない場合、Ｎｏの分岐に進み、ステップＳ２０４を実行する。一方、新しいIssが生成された場合、ステップＳ２１２に処理が進み、仮想実行部１９０は、プロセスのスナップショット２をリストアし、ステップＳ２１３において、Issを同プロセスに反映させる。Issの反映では、Issにある全ての入力情報の値を、適切な記憶領域（レジスタ、メモリ）に設定する。
【００９０】
次に、ステップＳ２１４において、仮想実行部１９０は、Instruction Registerに、インジェクトした命令列の先頭アドレスをセットし、ステップＳ２１５において、プロセスをレジュームする。
【００９１】
次に、ステップＳ２１６において、仮想実行部１９０は、プロセスの実行アドレスを監視し、実行アドレスがブロックＢｊの範囲を超えるかどうかを確認する。
次に、ステップＳ２１７において、仮想実行部１９０は、ブロックの実行が終了したか否かを判定する。仮想実行部１９０は、監視している実行アドレスがブロックＢｊの範囲を超えた場合、ブロックＢｊの実行が終了したと判定し、ステップＳ２１８において、プロセスをサスペンドする。
【００９２】
次に、ステップＳ２１９において、仮想実行部１９０は、実行されたブロックＢｊの出力情報とブロックＢｉの入力情報とを比較する。ブロックＢｊを実行して得られる出力情報は、ブロックＢｊの出力情報の開始アドレスを基に、サスペンド中のプロセスのメモリから抽出する。
【００９３】
次に、ステップＳ２２０において、仮想実行部１９０は、ブロックＢｊの出力情報とブロックＢｉの入力情報とが一致するかを判定し、一致する場合、Ｙｅｓの分岐によりステップＳ２２１に進み、ブロックＢｉとブロックＢｊを暗号ロジックと復号ロジックのペアとして、暗号／復号関数ペアリストに登録する。
【００９４】
なおステップＳ２０７において、ブロックの命令列をインジェクトするのではなく、ブロックの開始アドレスまでプロセスを実行してもよい。その場合、ステップＳ２１４において同ステップの処理は行わず、ステップＳ２１５においてプロセスをレジュームするだけで良い。
【００９５】
以上のように、実施例１〜実施例４の発明では、実行トレースから抽出したブロックの入出力関係の特徴を判定する特徴判定情報を生成し、この特徴判定情報を利用してブロックの入出力関係を解析し、暗号関数または復号関数の入出力関係の特徴を示すブロックを暗号ロジックと判定することにより、マルウェアが用いる暗号ロジックを、精度良く特定することができるという効果がある。
【符号の説明】
【００９６】
１００  プロセス解析装置、１０１  実行ファイル、１０２  実行トレース、１０３  プロセス情報、１０４  ブロックリスト、１０５  定義リスト、１０６  ブロック情報リスト、１０７  解析結果リスト、１１０  実行トレース取得部、１２０  ブロック抽出部、１３０  ブロック情報抽出部、１４０  ブロック情報解析部、１５０  解析結果出力部、１６０  文字列割合判定部、１６１  文字コード判定アルゴリズムＤＢ、１６２  文字コード表ＤＢ、１６３  暗号ロジックリスト１、１７０  データデコード部、１７１  エンコード／デコードアルゴリズムＤＢ、１７２  暗号ロジックリスト２、１８０  データ解凍部、１８１  圧縮／解凍アルゴリズムＤＢ、１８２  暗号ロジックリスト３、１９０  仮想実行部、１９１  暗号／復号関数ペアリスト。
【図１】
2016030927.tif 000003
【図２】
2016030927.tif 000004
【図３】
2016030927.tif 000005
【図４】
2016030927.tif 000006
【図５】
2016030927.tif 000007
【図６】
2016030927.tif 000008
【図７】
2016030927.tif 000009
【図８】
2016030927.tif 000010
【図９】
2016030927.tif 000011
【図１０】
2016030927.tif 000012
【図１１】
2016030927.tif 000013
【図１２】
2016030927.tif 000014
【図１３】
2016030927.tif 000015
【図１４】
2016030927.tif 000016
【図１５】
2016030927.tif 000017
【図１６】
2016030927.tif 000018
【図１７】
2016030927.tif 000019
【図１８】
2016030927.tif 000020
【図１９】
2016030927.tif 000021
【手続補正書】
【提出日】平成28年9月20日(2016.9.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
解析対象のプロセスの実行トレースを取得する実行トレース取得部と、
前記実行トレースからループ構造を示す処理単位であるブロックを抽出するブロック抽出部と、
前記ブロックから、入力情報と記憶領域に書き込まれた値を含む出力情報とを含むブロック情報を抽出するブロック情報抽出部と、
前記ブロック情報の前記入力情報または前記出力情報を用いて前記ブロックの入出力関係の特徴を判定する特徴判定情報を生成し、この特徴判定情報を利用して前記ブロックの入出力関係を解析し、暗号関数または復号関数の入出力関係の特徴を示すブロックを暗号ロジックと判定するブロック情報解析部と
を備えるプロセス解析装置。
【請求項２】
前記ブロック情報の前記入力情報または前記出力情報に含まれる印刷可能な文字列の割合である印刷可能文字列割合を判定する文字列割合判定部を備え、
前記ブロック情報解析部は、前記特徴判定情報として、前記文字列割合判定部により判定された前記入力情報の第１の印刷可能文字列割合と前記出力情報の第２の印刷可能文字列割合との差分を算出し、この差分が予め定められた閾値以上の場合に、前記ブロックを暗号ロジックと判定する請求項１記載のプロセス解析装置。
【請求項３】
前記ブロック情報の前記出力情報をデコードするデータデコード部を備え、
前記ブロック情報解析部は、前記特徴判定情報として、前記データデコード部により前記ブロック情報の前記出力情報をデコードしたデコード結果を生成し、このデコード結果と一致する前記出力情報を持つ前記ブロックを暗号ロジックと判定する請求項１記載のプロセス解析装置。
【請求項４】
前記ブロック情報の前記出力情報を解凍するデータ解凍部を備え、
前記ブロック情報解析部は、前記特徴判定情報として、前記データ解凍部により前記ブロック情報の前記出力情報を解凍したデコード結果を生成し、このデコード結果と一致する前記出力情報を持つ前記ブロックを暗号ロジックと判定する請求項１記載のプロセス解析装置。
【請求項５】
前記ブロック情報の前記出力情報を他のブロックへ入力して前記他のブロックの処理を実行する仮想実行部を備え、
前記ブロック情報解析部は、前記特徴判定情報として、前記仮想実行部により前記他のブロックの処理を実行した実行結果を生成し、この実行結果と一致する前記入力情報を持つ前記ブロックを暗号ロジックと判定する請求項１記載のプロセス解析装置。
【請求項６】
解析対象のプロセスを解析して暗号ロジックを判定するプロセス解析装置のプロセス解析方法であって、
実行トレース取得部が、解析対象のプロセスの実行トレースを取得する実行トレース取得ステップと、
ブロック抽出部が、前記実行トレースからループ構造を示す処理単位であるブロックを抽出するブロック抽出ステップと、
ブロック情報抽出部が、前記ブロックから、入力情報と記憶領域に書き込まれた値を含む出力情報とを含むブロック情報を抽出するブロック情報抽出ステップと、
ブロック情報解析部が、前記ブロック情報の前記入力情報または前記出力情報を用いて前記ブロックの入出力関係の特徴を判定する特徴判定情報を生成し、この特徴判定情報を利用して前記ブロックの入出力関係を解析し、暗号関数または復号関数の入出力関係の特徴を示すブロックを暗号ロジックと判定するブロック情報解析ステップと
を備えるプロセス解析方法。
【請求項７】
コンピュータに、
解析対象のプロセスの実行トレースを取得する実行トレース取得ステップと、
前記実行トレースからループ構造を示す処理単位であるブロックを抽出するブロック抽出ステップと、
前記ブロックから、入力情報と記憶領域に書き込まれた値を含む出力情報とを含むブロック情報を抽出するブロック情報抽出ステップと、
前記ブロック情報の前記入力情報または前記出力情報を用いて前記ブロックの入出力関係の特徴を判定する特徴判定情報を生成し、この特徴判定情報を利用して前記ブロックの入出力関係を解析し、暗号関数または復号関数の入出力関係の特徴を示すブロックを暗号ロジックと判定するブロック情報解析ステップと
を実行させるためのプロセス解析プログラム。
【国際調査報告】
2016030927.tif 000022
2016030927.tif 000023
2016030927.tif 000024