"インターネットに接続され、マルウェアに感染された情報処理端末から、外部に漏洩された情報の特定に必要なマルウェアの暗号化鍵を特定するマルウェア解析システムであって、情報処理端末とインターネットとの間の通信情報が記録された通信記録蓄積手段と、感染されたマルウェアを記憶し、このマルウェアのプログラムを実行するマルウェア実行手段と、マルウェア実行手段上でマルウェアがマシン語命令を実行するたびに、実行トレース情報を記録する実行トレース記録手段を有するマルウェア実行装置と、マルウェアからの接続要求に応じて、通信記録蓄積手段の過去の通信記録からメッセージを選択してマルウェアに返すメッセージ送信装置と、実行トレース記録手段からの実行トレース情報を走査し、呼び出し引数によるネットワーク受信関数の呼び出し、引数のうち、受信バッファのアドレス、および受信バッファ長を求め、変数Pmsg、Lmsg領域に格納し、マルウェアプログラム実行中のデータ計算に参照されるデータを依存データとし、その依存データとマルウェア実行トレース情報との対応を記録するデータ依存関係履歴情報をマルウェアプログラムの実行により更新し、マルウェアプログラムの実行されたデータがビット演算または算術演算の場合は、そのデータが依存したデータを依存データ情報に追加する処理をマルウェアプログラムの実行トレース行終端まで実施し、データが追加された依存データ情報を所定の基準でグループ分けして鍵格納バッファ候補群を抽出し出力する鍵特定手段と、鍵特定手段により暗号化鍵の候補が複数抽出された場合に、抽出された暗号化鍵の候補によりデータを復号し、復号前と復号後のデータを比較し、復号に成功した暗号化鍵を選択する復号結果判定手段を有する実行トレース解析装置とを備えたマルウェア解析システム。鍵特定手段は、鍵格納バッファ候補群抽出処理におけるデータが追加された依存データ情報のグループ分けは、依存データ情報の有効実行トレース行番号に該当するマルウェアプログラムのマシン語命令アドレスが近いか否かを基準にアドレスをグループ分けし、依存データ情報をグループ分けすることを特徴とする請求項1に記載のマルウェア解析システム。複数の依存データと複数のマルウェア実行トレース情報との対応が記録されたデータ依存関係履歴情報の集合を備え、鍵特定手段は、実行トレース記録手段からの実行トレース情報を走査し、呼び出し引数によるネットワーク受信関数の呼び出し引数のうち、受信バッファのアドレス、および受信バッファ長を求め、変数Pmsg、Lmsg領域に格納し、マルウェアプログラム実行中の実行トレース行番号に対応するデータ依存関係情報をデータ依存関係履歴情報の集合から取り出し現在のデータ依存関係履歴情報とし、現在のデータ依存関係履歴情報の依存データ情報を集合Dに代入する処理をマルウェアプログラムの実行トレース行終端まで実施し、集合Dが空集合であれば、他のどこにも依存していないアドレスであるとして受信バッファのアドレスの集合を出力し、集合Dが空集合でない場合、集合D内の各エントリに対し、依存アドレス抽出手続き処理をし、他のどこにも依存していないアドレスの集合を作成し、出力することを特徴とする請求項1に記載のマルウェア解析システム。復号結果判定手段は、鍵特定手段により抽出された暗号化鍵の候補によりデータを復号し、元のデータ、復号後のデータを各々共通の圧縮アルゴリズムを用いて圧縮し、復号後のデータを圧縮した場合の圧縮後データサイズが、復号前のデータを圧縮した場合の圧縮後データサイズと比較して復号に成功した暗号化鍵を特定する構成にされたことを特徴とする請求項1に記載のマルウェア解析システム。ファイルフォーマットに関する情報が保存されたフォーマット定義蓄積手段を備え、復号結果判定手段は、鍵特定手段により抽出された暗号化鍵の候補によりデータを復号し、復号結果後のデータがフォーマット定義蓄積手段に保存されたファイルフォーマットに一致するかを条件として暗号化鍵を特定する構成にされたことを特徴とする請求項1に記載のマルウェア解析システム。昨今、マルウェアによる大規模な情報漏洩事件が注目されている。マルウェアによる感染が発覚したときには、そのマルウェアから外部に漏洩された情報を特定する必要がある。そのためには、インターネットと組織内ネットワーク上の情報処理端末との通信を普段から記録し、ある端末上でマルウェアの感染が発覚した際には、当該端末からアップロードされた通信情報を通信記録から抜き出して、解析しなければならない。これらのマルウェアはRC4やAESなどの暗号化関数を内部に持ち、外部にアップロードする情報を暗号化してから送信するため、マルウェアを解析して暗号化鍵を特定しなければ実際に漏洩した情報の内容が何かを明らかにすることはできない。しかし、従来技術では、実験環境にてマルウェアの動作を記録することはできても、その動作記録から復号に必要な暗号化鍵を抽出する方法は無く、結果として通信記録を復号して漏洩した情報を特定することはできなかった。この発明は上記のような問題点を解決するためになされたもので、マルウェアのメモリ操作を詳細に解析することにより、マルウェアがメモリに書き込む様々なデータの中から暗号化鍵を特定することを目的とする。この発明に係るマルウェア解析システムは、インターネットに接続され、マルウェアに感染された情報処理端末から、外部に漏洩された情報の特定に必要なマルウェアの暗号化鍵を特定するマルウェア解析システムであって、情報処理端末とインターネットとの間の通信情報が記録された通信記録蓄積手段と、感染されたマルウェアを記憶し、このマルウェアのプログラムを実行するマルウェア実行手段と、マルウェア実行手段上でマルウェアがマシン語命令を実行するたびに、実行トレース情報を記録する実行トレース記録手段を有するマルウェア実行装置と、マルウェアからの接続要求に応じて、通信記録蓄積手段の過去の通信記録からメッセージを選択してマルウェアに返すメッセージ送信装置と、実行トレース記録手段からの実行トレース情報を走査し、呼び出し引数によるネットワーク受信関数の呼び出し、引数のうち、受信バッファのアドレス、および受信バッファ長を求め、変数Pmsg、Lmsg領域に格納し、マルウェアプログラム実行中のデータ計算に参照されるデータを依存データとし、その依存データとマルウェア実行トレース情報との対応を記録するデータ依存関係履歴情報をマルウェアプログラムの実行により更新し、マルウェアプログラムの実行されたデータがビット演算または算術演算の場合は、そのデータが依存したデータを依存データ情報に追加する処理をマルウェアプログラムの実行トレース行終端まで実施し、データが追加された依存データ情報を所定の基準でグループ分けして鍵格納バッファ候補群を抽出し出力する鍵特定手段と、鍵特定手段により暗号化鍵の候補が複数抽出された場合に、抽出された暗号化鍵の候補によりデータを復号し、復号前と復号後のデータを比較し、復号に成功した暗号化鍵を選択する復号結果判定手段を有する実行トレース解析装置とを備える。この発明に係るマルウェア解析システムによれば、実行トレース情報を記録しながら解析対象マルウェアに、過去に蓄積されたメッセージを復号させ、実行トレース情報を解析して鍵を特定することで、過去にアップロードされた情報を復号し、内容を取り出すことができるという効果がある。さらに、鍵格納バッファ候補群抽出手続きにおいて、鍵の候補を特定する際に、参照したマシン語命令アドレスが近いかどうかを基準にアドレスをグループ分けすることで、連続したメモリ上に鍵データとは別のデータが並んでいたとしても、鍵データの一部として取り出されることを防ぐ効果がある。さらに、鍵候補を抽出する際に、受信バッファ由来のデータとビット演算算術演算されるデータのアドレスに絞り込んで解析を行うことで、抽出される鍵候補の数を削減することができるという効果がある。実施の形態1.図1はこの発明に係るマルウェア解析システムを示す装置の構成図である。本システムは、メッセージ送信装置101、マルウェア実行装置104、実行トレース解析装置108、及び通信記録蓄積手段116で構成されている。メッセージ送信装置101とマルウェア実行装置104とはネットワーク118で接続されている。その他の装置間および通信記録蓄積手段116との間の接続は、情報の入出力が可能であれば自由に行われる。次にマルウェア解析システムを構成する各装置について説明する。メッセージ送信装置101は、マルウェア実行装置104上で動作する解析対象マルウェア105に入力するためのメッセージを生成送信する装置であり、メッセージ送信手段102とメッセージ生成手段103で構成される。メッセージ送信手段102は、メッセージ生成手段103によって生成されたメッセージをネットワーク118を通じてマルウェア実行装置104に送信する手段である。メッセージ生成手段103は通信記録蓄積手段116に記録された通信記録をもとに、マルウェア実行装置104に送信すべきメッセージを生成する手段である。マルウェア実行装置104は、解析対象マルウェア105を実行し、その動作履歴である実行トレースを記録する装置であり、マルウェア実行手段106と実行トレース記録手段107で構成される。マルウェア実行手段106は、解析対象マルウェア105を1マシン語単位で実行するためのエミュレータである。実行トレース記録手段107はマルウェア実行手段106上で解析対象マルウェア105が1マシン語命令を実行するたびに、実行トレースを記録していく。実行トレース解析装置108は、実行トレース記録手段107に記録された実行トレースを解析し、解析対象マルウェア105が利用している暗号化鍵を特定した上で、通信記録蓄積手段116に記録されている解析対象マルウェア105からの上り通信情報を復号する装置であり、通信記録入力手段109、復号化関数特定手段110、実行トレース入力手段111、鍵特定手段112、通信記録復号手段113、解析結果出力手段114、復号結果判定手段115で構成されている。通信記録入力手段109は、通信記録蓄積手段116から解析対象とする通信記録情報を取得する手段である。実行トレース入力手段111は、マルウェア実行装置104の実行トレース記録手段107からマルウェア実行手段106が1マシン語単位で実行した解析対象マルウェア105の実行トレース情報を受け取る手段である。復号化関数特定手段110は、実行トレース入力手段111が受け取った解析対象マルウェア105の実行トレース情報から解析対象マルウェア105内の復号化関数のアドレスおよび復号化関数アルゴリズムを特定する手段である。鍵特定手段112は、受け取った実行トレース情報から解析対象マルウェア105が復号に使用した暗号化鍵を特定する手段である。通信記録復号手段113は鍵特定手段112によって特定された暗号化鍵と、復号化関数特定手段110が特定した復号化関数アルゴリズムを用いて通信記録入力手段109によって通信記録蓄積手段116より取得した解析対象マルウェア105からの上り通信情報を復号する手段である。復号結果判定手段115は通信記録復号手段113が復号した結果と復号前の通信情報記録とを比較し復号に成功したかどうかを判定する手段である。解析結果出力手段114は解析結果を利用者117に出力するための手段である。次に動作について説明する。本システムでは、組織内ネットワーク上の各端末とインターネットとのHTTP通信情報が通信記録蓄積手段116に記録されている。通信記録蓄積手段116に記録される通信情報を図3に示す。図3に示す通り、本システムでは通信記録蓄積手段116には、発信元のIPアドレスであるsrcip301、宛先URL302、上りデータ303、および下りデータ304が、発信元から送信されたリクエスト単位で記録される。組織内ネットワーク上のある情報処理端末でマルウェアプログラムが発見されたとする。利用者117は、同マルウェアプログラムを解析対象マルウェア105としてマルウェア実行装置104に格納し、さらにシステム実行時のパラメータとして感染が確認された端末のIPアドレスをメッセージ送信装置101および実行トレース解析装置108の図示しないメモリに入力した上で本システムでの解析を開始する。解析対象マルウェア105のプログラムはマルウェア実行手段106によって起動される。マルウェア実行手段106は、解析対象マルウェア105をマシン語単位でステップ実行する。このような手段は既存の技術、例えばデバッガのステップ実行や、あるいは非特許文献1;[httpwikiqemuorgMainPage]に示されるQEMU等のCPUエミュレータを利用することで構成可能であり、その実現方式の詳細については説明を省く。マルウェア実行手段106で解析対象マルウェア105のプログラム内のマシン語が1ステップ実行されると、その記録が実行トレース記録手段107によって実行トレース情報として記録される。記録される実行トレース情報は図2に示すとおり、実行アドレス201、実行命令202、参照したメモリアドレスおよび格納されていた値203、書き込みが行われたメモリアドレスおよび書き込まれた値204、実行直前のレジスタ値205で構成される。マルウェア実行手段106上で解析対象マルウェア105のプログラムが起動すると、解析対象マルウェア105のプログラムはネットワーク118を通じてインターネット上にある司令サーバとの接続を試みる。メッセージ送信装置101は、解析対象マルウェア105からはHTTPプロキシサーバとして見えるよう構成されているため、解析対象マルウェア105のプログラムはメッセージ送信装置101に対してHTTPリクエストを送信する。HTTPリクエストを受信したメッセージ送信装置101内では、メッセージ生成手段103が、解析対象マルウェア105のプログラムからのHTTPリクエストに含まれる宛先URLおよび、あらかじめ利用者117が入力しておいた感染が確認された端末のIPアドレスをキーとして通信記録蓄積手段116を検索し、該当する通信記録の中から一つを選び、その下りデータ304を取り出してメッセージ送信手段102に渡す。メッセージ送信手段102はメッセージ生成手段103から渡されたメッセージを、ネットワーク118を通じて解析対象マルウェア105に返す。このような通信を数回程度実行後、マルウェア実行手段106は解析対象マルウェア105のプログラム実行を停止し、それまでに実行トレース記録手段107によって記録された実行トレース情報を実行トレース解析装置108に送信する。実行トレース解析装置108内では、実行トレース入力手段111によって、マルウェア実行装置104から送信された実行トレース記録手段107によって記録された実行トレース情報が受信され、この実行トレース情報は初めに復号化関数特定手段110に入力される。復号化関数特定手段110では、実行トレース情報をもとに、復号化関数のアドレスと、同関数が使用する復号アルゴリズム名を特定する。このような技術は、例えば非特許文献2;[ZWangXJiangWCuiandXWangReFormatAutomaticreverseengineeringofencryptedmessagesInEuropeanSymposiumonResearchinComputerSecuritySaintMaloFranceSeptember2009]や非特許文献3;[FelixGrobertCarstenWillemsandThorstenHolzAutomatedIdentificationofCryptographicPrimitivesinBinaryPrograms14thInternationalSymposiumonRecentAdvancesinIntrusionDetection]記載の技術を用いることで実現が可能である。復号化関数特定手段110による復号化関数のアドレスと、使用している復号アルゴリズム名を特定後、実行トレース情報は鍵特定手段112に入力され、復号に使用された暗号化鍵の特定が行われる。鍵特定手段112の動作について図4~図10を用いて詳しく説明する。はじめに鍵特定手段112の処理の概要について図5を用いて説明する。鍵特定手段112は、入力された実行トレース情報を走査し、呼び出し引数によるネットワーク受信関数の呼び出しまで実行トレース情報をスキップする。ネットワーク受信関数は、OSが標準で提供するものであり、呼び出しに必要な引数は明らかである。そこで、ネットワーク受信関数に渡された引数のうち、受信バッファのアドレス、および受信バッファ長を、関数呼び出しの直前に記録されたPUSH等のスタック操作命令の実行トレース情報から求め、それぞれ鍵特定手段112のメモリの変数Pmsg、Lmsg領域に格納しておく。次に、ネットワーク受信関数実行後のアドレスまで実行トレース情報をスキップし、その時の実行トレース行を鍵特定手段112の変数curに格納する。また鍵特定手段112のメモリの変数Pおよび変数Flowsを初期化する。ここで、メモリPおよびメモリFlowsに格納されるデータについて説明する。はじめにメモリFlowsに格納される情報について説明する。Flowsには、解析対象マルウェア105の解析が進むにつれデータ依存関係履歴情報と呼ばれる情報が格納されていく。データ依存関係履歴情報とは、実行トレース上のある命令が実行された時点で、各レジスタメモリと、そこに書き込まれているデータが依存しているデータについて記録したものである。ここで、依存しているデータとは、あるデータの値を計算する際に、直接、あるいはレジスタを通じて間接に参照されたメモリ上のデータを指す。データ依存関係履歴情報は図4に示されるような情報であり、実行トレース行番号401、実行アドレス402、依存関係情報403で構成されている。依存関係情報403はさらにデータ格納場所404、依存データ情報405で構成されている。依存データ情報405はさらにアドレス406、および有効実行トレース行番号407で構成されている。有効実行トレース行番号407とは、実行トレース行番号401で示される命令が実行されたときに、依存データ情報405に記載されたアドレス406に格納されていた値が、実行トレースのどの時点で参照されたのかを示す実行トレース行番号を指す。これは、同一メモリアドレスに複数回データ書き込みがあった場合、どの時点で書き込まれたデータかを追跡するために必要な情報である。なお、図4において、各情報名に括弧書きで記載されている文字列は、後の動作説明で用いる際の各情報名の略称である。次にメモリPに格納される情報変数Pについて説明する。メモリPには解析対象マルウェア105が受信したメッセージを復号する際に、メッセージ内のデータとの間でビット演算算術演算を行ったデータ群が依存データ情報の形式で格納される。このようなメッセージ内のデータとの間でビット演算や算術演算を行ったデータは、暗号化鍵、あるいは拡大暗号化鍵等、暗号化鍵から派生したデータである可能性があるため、これらを暗号化鍵の候補として記録していくのが目的である。最終的に、メモリPに記録された各データが依存しているデータをメモリFlowsの変数Flowsを用いてさかのぼっていく事で暗号化鍵を特定するのが鍵特定手段112の目的となる。再び図5に戻って動作を説明する。本解析は鍵特定手段112のcurが復号関数の終端に達するまでループで実行される。ループ内ではまず、現在curが示している実行トレース行の内容に従い、鍵特定手段112の処理プログラムのデータ依存関係履歴情報更新手続きを呼び出し、データ依存関係履歴情報が更新される。次に、curで実行した命令がビット演算算術演算だった場合、同演算で参照されたレジスタあるいはメモリに、受信したメッセージに依存したデータが含まれているか、鍵特定手段112の処理プログラムのデータ依存関係確認手続きを呼び出して確認する。もし受信メッセージに依存したデータが参照されていたならば、その依存しているデータについて、Pに追加する。その後curを次の実行トレース行にうつし、ループの先頭S506に戻る。S506での判定が真、すなわちcurが復号関数の終端になるとS513にて鍵特定手段112の処理プログラムの鍵格納バッファ候補群抽出手続きが呼び出され、Pに含まれているデータのうち、暗号化鍵の候補となるメモリ領域が抽出され、鍵候補バッファ集合の変数Kに代入される。最終的に本手段の処理結果として鍵候補バッファ集合の変数Kが出力される。次に、鍵特定手段112の処理プログラムのデータ依存関係履歴情報更新手続き処理について図6および図7を用いて説明する。本手続きは、解析対象マルウェア105の実行トレース情報trace、および現在のデータ依存関係履歴情報Fを入力として受け取り、実行トレース情報traceの内容に従ってデータ依存関係履歴情報Fを更新し、更新後のデータ依存関係履歴情報Fを戻し、記録する。まず、S601~S604で変数の初期化を行う。S601ではFlowsの中から実行トレース情報traceの直前の実行結果として算出された依存関係情報を取り出し、変数lastFlowに格納する。次に、traceに記録されている命令を解析し、命令のソースオペランドおよびディスティネーションオペランドを、変数Ops、Opdに格納する,。Opsは命令によっては存在しない場合もあるが、その場合は空値が代入される。最後に、依存データ情報の集合Dを空集合に初期化する。初期化終了後、実際の処理が行われる。最初にS605にてOpsが空値もしくはOpsが即値かどうか判定される。判定結果が真だったならば、図7S701まで処理がスキップされる。S605の判定が偽だった場合、Opsがレジスタを指しているかどうかが判定される。レジスタだった場合、S612において、変数DにlastFlowstoreOpsが代入される。ここで、表記xxxyyyzzzは、依存関係情報xxxの中から情報名yyyがzzzに一致するものを全て選び、その依存データ情報を集合として取り出す処理を実行することを表している。S606の判定が偽だった場合、Opsはメモリ参照を表している。インテル社の80386では、メモリ参照はベース、インデックス、スケール、ディスプレースメントの4パラメータを組み合わせてメモリアドレスが決定される。ベース、インデックスはレジスタ名を指定する。スケールは定数であり、ディスプレースメントはメモリアドレスで指定される。スケールを除いた3パラメータと、実際に参照されたメモリアドレスがS607~S610で対応する変数に格納される。次に、S611において、base、index、dispに対し、対応する依存データ情報が取り出され、それらの和集合が依存データ情報の集合Dに格納される。さらに変数である集合Dには新たな依存データ情報として、addressaddr、dlinetraceの行番号が追加される。その後の処理について図7を用いて説明する。S701で新たな依存関係情報として、lastFlowをコピーした情報が生成され変数newFlowに格納される。その後の処理は、Opdの種別によって分岐する。Opdがレジスタだった場合、変数destにはOpdの示すレジスタがそのまま代入される。そうではなかった場合、Opdはメモリ参照であるため、Opdが参照するメモリアドレスが計算され、destに代入される。次に、S704で現在解析対象としている実行トレース情報traceの命令がmov命令かどうかが検査される。mov命令であった場合、依存データ情報の集合の変数Dの内容がnewFlowstoredestに代入される。この操作は、newFlowの中でstoredestに該当する依存データ情報を取り除き、かわりに集合の変数Dを代入する操作となる。S704の判定が偽だった場合、newFlowstoredestは、現在のnewFlowstoredestと変数Dとの和集合で更新される。最後にS706で、Fにで構成されるエントリを追加し、現在のデータ依存関係履歴情報Fを返して処理が終了する。次に、データ依存関係確認手続きの詳細について図8を用いながら説明する。本手続きは、引数として与えられたデータが受信バッファに依存するかどうかを判定する。S801で、引数として与えられた情報が各変数に格納される。S802でFSからlinetrとなる履歴を取得し現在のデータ依存関係履歴情報Fに代入し、さらに現在のデータ依存関係履歴情報Fstoresを依存データ情報の変数である集合Dに代入する。次にS804~S810で、集合D内の各依存データ情報に対し、S805~S809で示す処理が行われる。S805、S806で、エントリのaddress、およびdlineが変数m、iに代入される。もしmがPmsgで示される受信バッファ内を指していたならば、本手続きは真を返して終了する。さもなければ、mに格納されているデータが依存しているメモリが受信バッファに依存しているかどうかを再帰的に検査する。結果が真であれば、真を返して終了するが、そうでない場合には、次のエントリに対して同様な検査を行う。最終的に、依存データ情報の変数である集合D内の全てのエントリが受信バッファに依存していない場合、FALSEを返して処理が終了する。次に、図9を用いて鍵格納バッファ候補群抽出手続きの詳細について説明する。本手続きは、引数として与えられた依存データ情報の依存関係を追跡し、鍵の候補とみなすバッファ領域の集合を返す。まず初期化処理としてS901で引数として与えられた情報が各変数に代入され、鍵候補バッファ集合Kが空集合に初期化される。次にS903で依存データ情報の集合P内の各要素に対し、有効実行トレース行番号に該当する実行アドレスを、複数の依存データと複数のマルウェア実行トレース情報との対応が記録されたデータ依存関係履歴情報の集合FSを参照して求め、3要素のタプルとする。次に、S904で生成された3要素のタプル集合を実行アドレスexecの値が近い要素同士をまとめ、グループを作成する。近いかどうかの判定は事前に定義された閾値T1によって判定される。あるタプルがあるグループに所属するかどうかの判定は、そのグループ内で、対象タプルに最も実行アドレスexec値が近いものを選択し、対象タプルの実行アドレスexecとの差がT1以内だった場合、当該グループに所属すると判定する。すでにあるどのグループにも所属しない場合には、新たなグループが生成される。次に生成されたグループをループによって取り出し、S906~S912で示される処理が実行される。S906~S912は、選択されたグループGiの各要素を順に取り出し、S907~S911の処理を実行するためのループである。S907では、まずaddress、dlineで示されるメモリが依存しているアドレス群を依存アドレス抽出手続きを用いて取り出しAに格納する。次に、S908において、取り出されたアドレス群と、実行トレース情報を用いてメモリマップを作成し、マップ上連続した領域をメモリグループとして取り出す。メモリマップは、からなる集合であり、Aに格納されているアドレスと有効実行トレース行番号をキーに実行トレース情報中の参照メモリアドレス値を取得することで生成する。生成されたグループMmそれぞれが鍵の格納バッファの候補となる。そこで、各バッファの領域に格納されているデータを、鍵候補バッファ集合Kに登録する。最後に、依存アドレス抽出手続きの詳細について図10を参照しながら説明する。本手続きは、与えられたアドレス上のデータが依存しているアドレスを辿っていき、他のどこにも依存していないアドレスの集合を返す。はじめにS1001にて、引数として入力された情報を変数に代入する。次にS1002にて、指定された実行トレース行番号に対応する依存関係情報をデータ依存関係履歴情報の集合FSから取り出し現在のデータ依存関係履歴情報Fに代入し、Fstoresを依存データ情報の変数である集合Dに代入する。もし、集合Dが空集合だったならば、与えられたアドレスsは他のどこにも依存していないアドレスであり、集合Aにを追加して処理を終了させる。集合Dが空集合ではなかった場合、S1005~S1010のループを実行することで、集合D内の各エントリに対し、依存アドレス抽出手続きを再帰的に呼び出すことで、集合Aに、他のどこにも依存していないアドレスの集合を作成する。全てのエントリに対して依存アドレス抽出手続きが完了後、生成された集合Aを返して処理が終了する。以上をもって、鍵特定手段の動作についての説明を終了し、再び全体の動作の説明を再開する。鍵特定手段112での処理の結果生成された鍵の候補のそれぞれを用いて、通信記録復号手段113において復号が試みられる。通信記録復号手段113は通信記録蓄積手段に蓄積された通信記録のうち、感染端末IPアドレス、および宛先URLに合致するものに含まれている上りデータ情報を取得し、それぞれに対して鍵の候補と特定したアルゴリズムを用いて復号を行う。復号の結果と、元の上りデータを入力として復号結果判定手段115が呼び出される。復号結果判定手段115では、元のデータの復号が成功したかどうか、データのランダム性を測定することで判定する。判定は、元のデータ、復号後のデータを各々共通の圧縮アルゴリズムを用いて圧縮し、復号後のデータを圧縮した場合の圧縮後データサイズが、復号前のデータを圧縮した場合の圧縮後データサイズと比較して顕著に以上小さくなった場合に、復号に成功したとみなす。復号結果判定手段115により、復号に成功したと判定された場合には、復号結果とその時の鍵を解析結果出力手段を通じて利用者に通知し、本システムの動作が終了する。なお、本形態では通信記録蓄積手段116に格納される通信をHTTPに絞って説明したが、他の通信プロトコルの通信記録を対象として解析することももちろん可能である。以上のように、実行トレース情報を記録しながら解析対象マルウェアに、過去に蓄積されたメッセージを復号させ、実行トレースを解析して鍵を特定することで、過去にアップロードされた情報を復号し、内容を取り出すことができるという効果がある。さらに、鍵の候補が複数現れた場合に、復号前と復号後のデータのランダム性を比較することで、利用者が目視で確認することなく、正しい鍵を選択できるという効果がある。さらに、鍵格納バッファ候補群抽出手続きにおいて、鍵の候補を特定する際に、参照したマシン語命令アドレスが近いかどうかを基準にアドレスをグループ分けすることで、連続したメモリ上に鍵データとは別のデータが並んでいたとしても、鍵データの一部として取り出されることを防ぐ効果がある。さらに、鍵候補を抽出する際に、受信バッファ由来のデータとビット演算算術演算されるデータのアドレスに絞り込んで解析を行うことで、抽出される鍵候補の数を削減することができるという効果がある。実施の形態2.以上の実施の形態1では、復号結果判定手段において、圧縮率の変化を用いるものであるが、本実施の形態では、復号結果後のデータが既知のファイルフォーマットに一致するかを条件として判定する。ファイルフォーマットに関する情報はフォーマット定義蓄積手段119に保存されている。以上のように、復号結果の判定に既知のファイルフォーマットと一致するかという条件を用いることで、復号後のデータが圧縮されていたとしても、復号の成否を正しく判定することができるという効果がある。"