(57)【特許請求の範囲】
【請求項１】
解析対象のマルウェアが動作するゲストＯＳ上のスレッドのうち、監視対象のスレッドの動作を監視する監視部と、
前記監視対象のスレッドが実行されている場合に、前記スレッド上のメモリ空間のデータをＶＭＭが書き換えることで前記スレッドに所定の情報を収集する処理を実行させ、前記メモリ空間のデータを書き換える際に、該メモリ空間のデータのバックアップデータを前記ＶＭＭ内の退避領域に退避させた後、該メモリ空間のデータの書き換えを行うインジェクション部と、
前記インジェクション部によって書き換えられたメモリ空間のデータに対する読み出しがあった場合には、仮想的なメモリ空間を提供し、前記バックアップデータをメモリ参照結果として返信するように制御するアクセス制御部と
を有することを特徴とする解析装置。
【請求項２】
解析対象のマルウェアが動作するゲストＯＳ上のスレッドのうち、監視対象のスレッドの動作を監視する監視部と、
前記監視対象のスレッドが実行されている場合に、前記スレッド上のメモリ空間のデータをＶＭＭが書き換えることで前記スレッドに所定の情報を収集する処理を実行させるとともに、所定の処理の実行に用いるＡＰＩがフックされている場合には、前記メモリ空間のデータの書き換えを中止するインジェクション部と
を有することを特徴とする解析装置。
【請求項３】
解析装置で実行される解析方法であって、
解析対象のマルウェアが動作するゲストＯＳ上のスレッドのうち、監視対象のスレッドの動作を監視する監視工程と、
前記監視対象のスレッドが実行されている場合に、前記スレッド上のメモリ空間のデータをＶＭＭが書き換えることで前記スレッドに所定の情報を収集する処理を実行させ、前記メモリ空間のデータを書き換える際に、該メモリ空間のデータのバックアップデータを前記ＶＭＭ内の退避領域に退避させた後、該メモリ空間のデータの書き換えを行うインジェクション工程と、
前記インジェクション工程によって書き換えられたメモリ空間のデータに対する読み出しがあった場合には、仮想的なメモリ空間を提供し、前記バックアップデータをメモリ参照結果として返信するように制御するアクセス制御工程と
を含んだことを特徴とする解析方法。
【請求項４】
解析装置で実行される解析方法であって、
解析対象のマルウェアが動作するゲストＯＳ上のスレッドのうち、監視対象のスレッドの動作を監視する監視工程と、
前記監視対象のスレッドが実行されている場合に、前記スレッド上のメモリ空間のデータをＶＭＭが書き換えることで前記スレッドに所定の情報を収集する処理を実行させるとともに、所定の処理の実行に用いるＡＰＩがフックされている場合には、前記メモリ空間のデータの書き換えを中止するインジェクション工程と
を含んだことを特徴とする解析方法。
【請求項５】
解析対象のマルウェアが動作するゲストＯＳ上のスレッドのうち、監視対象のスレッドの動作を監視する監視ステップと、
前記監視対象のスレッドが実行されている場合に、前記スレッド上のメモリ空間のデータをＶＭＭが書き換えることで前記スレッドに所定の情報を収集する処理を実行させ、前記メモリ空間のデータを書き換える際に、該メモリ空間のデータのバックアップデータを前記ＶＭＭ内の退避領域に退避させた後、該メモリ空間のデータの書き換えを行うインジェクションステップと
前記インジェクションステップによって書き換えられたメモリ空間のデータに対する読み出しがあった場合には、仮想的なメモリ空間を提供し、前記バックアップデータをメモリ参照結果として返信するように制御するアクセス制御ステップと
をコンピュータに実行させるための解析プログラム。
【請求項６】
解析対象のマルウェアが動作するゲストＯＳ上のスレッドのうち、監視対象のスレッドの動作を監視する監視ステップと、
前記監視対象のスレッドが実行されている場合に、前記スレッド上のメモリ空間のデータをＶＭＭが書き換えることで前記スレッドに所定の情報を収集する処理を実行させるとともに、所定の処理の実行に用いるＡＰＩがフックされている場合には、前記メモリ空間のデータの書き換えを中止するインジェクションステップと
をコンピュータに実行させるための解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、解析装置、解析方法および解析プログラムに関する。
【背景技術】
【０００２】
近年、情報漏えいなどの被害をもたらす悪性なソフトウェア（マルウェア）が猛威を振るっている。マルウェアへの対策を講じるためには、マルウェアが具備する機能や通信先を把握するマルウェア解析が有効となるが、依然としてマルウェア解析は手動での詳細解析を必要とする部分が大きく、解析自動化への期待が高まっている。
【０００３】
これまでに、実行時のマルウェアの動作を監視することで解析を自動化するサンドボックスが数多く開発されてきた。サンドボックスによる動的解析は外部サーバとの通信によって発生する潜在的な脅威も明らかにできるため、非常に有効な解析手段である。その反面、マルウェアのプログラムコードを実行しているため、マルウェアによってサンドボックスを検知され、解析を回避されてしまう危険性がある。マルウェアと解析モジュールが常に同じ環境に共存している技術（例えば、非特許文献１や非特許文献２参照）では特にこの危険性が高い。
【０００４】
そのため、ＯＳの外側にあたるＶＭＭ（Virtual  Machine  Monitor）からマルウェアを監視する仕組みが検討されている（例えば、非特許文献３参照）。ＶＭＭはマルウェアが動作するＯＳから隔離されているためＯＳ上の特徴から解析システムであると検知される危険性が無い。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Claudio  Guarnieri,  Jurriaan  Bremer,  Alessandro  Tanasi,  “Cuckoo  Sandbox,”  BlackHat  USA  ,  2013,  Available:  https://media.blackhat.com/us-13/US-13-Bremer-Mo-Malware-Mo-Problems-Cuckoo-Sandbox-Slides.pdf
【非特許文献２】Dawn  Song,  David  Brumley,  Heng  Yin,  Juan  Caballero,  Ivan  Jager,  Min  Gyung  Kang,  Zhenkai  Liang,  James  Newsome,  Pongsin  Poosankam,  and  Prateek  Saxena,  “Keynote  Invited  Paper  A  high-level  overview  covering  Vine,  TEMU,  and  Rudder,”  In  Proceedings  of  the  4th  International  Conference  on  Information  Systems  Security,  December  2008.
【非特許文献３】Andrew  Henderson,  Aravind  Prakash,  Lok  Kwong  Yan,  Xunchao  Hu,  Xujiewen  Wang,  Rundong  Zhou,  and  Heng  Yin,  “Make  It  Work,  Make  It  Right,  Make  It  Fast:  Building  a  Platform-Neutral  Whole-System  Dynamic  Binary  Analysis  Platform,”  In  the  International  Symposium  on  Software  Testing  and  Analysis  (ISSTA'14),  July  2014.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記の従来技術では、ＯＳとＶＭＭの間のセマンティックギャップが原因で、ＯＳが管理する情報を適切に収集することができない場合があるという課題がある。つまり、マルウェアを動的解析する場合、マルウェアによって解析環境を検知されることなく、マルウェアの詳細な情報を収集できることが望ましい。しかし、マルウェアが動作する環境と解析システムが動作する環境を隔離する従来の手法では、解析環境の検知は回避できるが、ＯＳとＶＭＭの間のセマンティックギャップが原因でＯＳに依存する情報を解析中に得ることが困難という問題がある。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本発明の解析装置は、解析対象のマルウェアが動作するゲストＯＳ上のスレッドのうち、監視対象のスレッドの動作を監視する監視部と、前記監視対象のスレッドが実行されている場合に、前記スレッド上のメモリ空間のデータをＶＭＭが書き換えることで前記スレッドに所定の情報を収集する処理を実行させるインジェクション部とを有することを特徴とする。
【０００８】
また、本発明の解析方法は、解析装置で実行される解析方法であって、解析対象のマルウェアが動作するゲストＯＳ上のスレッドのうち、監視対象のスレッドの動作を監視する監視工程と、前記監視対象のスレッドが実行されている場合に、前記スレッド上のメモリ空間のデータをＶＭＭが書き換えることで前記スレッドに所定の情報を収集する処理を実行させるインジェクション工程とを含んだことを特徴とする。
【０００９】
また、本発明の解析プログラムは、解析対象のマルウェアが動作するゲストＯＳ上のスレッドのうち、監視対象のスレッドの動作を監視する監視ステップと、前記監視対象のスレッドが実行されている場合に、前記スレッド上のメモリ空間のデータをＶＭＭが書き換えることで前記スレッドに所定の情報を収集する処理を実行させるインジェクションステップとをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、マルウェアに解析環境を検知されずに、ＯＳが管理する情報を適切に収集することができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、本実施形態に係るマルウェア解析装置の概要を示す構成図である。
【図２】図２は、メモリ内容の改ざんによってどのようにスレッドに所定の処理を実施させるかを説明する図である。
【図３】図３は、メモリ内容の改ざんによってどのようにスレッドに所定の処理を実施させるかを説明する図である。
【図４】図４は、メモリ内容の改ざんによってどのようにスレッドに所定の処理を実施させるかを説明する図である。
【図５】図５は、本実施形態に係るマルウェア解析装置におけるスレッド監視部がインジェクション部に改ざんを依頼するまでの処理の流れを示すフローチャートである。
【図６】図６は、改ざん依頼を受けたインジェクション部の処理の流れを示すフローチャートである。
【図７】図７は、改ざんを実施した後のインジェクション部の処理の流れを示すフローチャートである。
【図８】図８は、情報収集などの所定の処理をスレッドに実行させている最中のメモリアクセス制御部の処理の流れを示すフローチャートである。
【図９】図９は、解析プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願に係る解析装置、解析方法および解析プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態により本願に係る解析装置、解析方法および解析プログラムが限定されるものではない。
【００１３】
［実施形態］
以下の実施形態では、実施形態に係るマルウェア解析装置の構成及び処理の流れを順に説明し、その後、最後に実施形態による効果を説明する。
【００１４】
［マルウェア解析装置の構成］
まず、図１を用いて、マルウェア解析装置１０の構成を説明する。図１は、本実施形態に係るマルウェア解析装置の概要を示す構成図である。図１に示すように、マルウェア解析装置１０は、仮想的なハードウェアを提供するＶＭＭ３０とゲストＯＳ２０によって構成される。
【００１５】
ゲストＯＳ２０上では解析対象となるマルウェア２１と、ＯＳに一般的に常駐している標準プロセス２２が動作し、各プロセス内では１つ以上のスレッドが動作する。また、ＶＭＭ３０内ではスレッドの動作を監視するスレッド監視部３１と、ゲストＯＳ２０上のスレッドのメモリ空間２３を書き換えるインジェクション部３２と、メモリアクセスを制御して仮想的なメモリ空間２３を提供するメモリアクセス制御部３３とが動作する。
【００１６】
スレッド監視部３１は、解析対象のマルウェア２１が動作するゲストＯＳ２０上のスレッドのうち、監視対象のスレッドの動作を監視する。具体的には、スレッド監視部３１では、ＡＰＩ（Application  Programming  Interface）呼び出しを監視し、特定のＡＰＩが呼び出された場合など、所定の動作が観測された場合には、インジェクション部３２にメモリ内容の改ざんを依頼する役割を担う。
【００１７】
例えば、スレッド監視部３１は、ｃａｌｌ命令、ｊｍｐ命令、ｒｅｔ命令に対してＤＢＩ（Dynamic  Binary  Instrumentation）を施すことによりＡＰＩ呼び出しおよびＡＰＩからの戻りの監視を行う。ＡＰＩ呼び出しの監視では、スレッド監視部３１は、ｃａｌｌ命令やｊｍｐ命令の遷移先がＡＰＩのプロローグコードのアドレスであるか否かを確認する。例えばＷｉｎｄｏｗｓ（登録商標）  ＯＳではＡＰＩプロローグコードの位置は、ＤＬＬ（Dynamic  Link  Library）のIMAGE_EXPORT_DIRECTORYから取得したＡＰＩのオフセット値と、ＤＬＬがロードされたベースアドレスを加算することで特定できる。
【００１８】
そして、スレッド監視部３１は、ＡＰＩ呼び出しであることが確認できた場合には、戻りアドレスと引数をスタックから取得して記録する。また、スレッド監視部３１は、ＡＰＩを呼び出したスレッドのＴＩＤ（Thread  ID）をＴＩＢ（Thread  Information  Block）から取得する。ＴＩＢは、スレッドに関する情報を保持する構造体であり、ＴＩＤはシステム上でスレッドを一意に特定するためにスレッドに割当てられているＩＤである。
【００１９】
また、ＡＰＩからの戻りの監視では、スレッド監視部３１は、当該スレッドが戻りアドレスに遷移するタイミングを監視する。そして、スレッド監視部３１は、スレッドが戻りアドレスに遷移する際には、ＡＰＩからの返り値を収集した後、当該戻りアドレスの監視を解除する。
【００２０】
インジェクション部３２は、監視対象のスレッドが実行されている場合に、スレッド上のメモリ空間２３のデータをＶＭＭ３０が書き換えることでスレッドに所定の情報を収集する処理を実行させる。また、インジェクション部３２は、メモリ空間２３のデータを書き換える際に、該メモリ空間２３のデータのバックアップデータをＶＭＭ３０内の退避領域に退避させた後、該メモリ空間２３のデータの書き換えを行う。また、インジェクション部３２は、所定の情報を収集する処理が終了した後、メモリ空間２３のデータを書き換えられる前の状態に復元する。
【００２１】
メモリアクセス制御部３３は、インジェクション部３２によって書き換えられたメモリ空間２３のデータに対する読み出しがあった場合には、仮想的なメモリ空間を提供し、バックアップデータをメモリ参照結果として返信するように制御する。つまり、例えば、メモリアクセス制御部３３では、スレッドに所定の処理をさせている間、書き換えたスタックへのアクセスを制御し、他のスレッドからのアクセスの場合には仮想的なメモリ空間を見せてスタックを保護する役割を担う。
【００２２】
ここで、図２〜図４を用いてメモリ内容の改ざんによってどのようにスレッドに所定の処理を実施させるかを説明する。図２の例は、インジェクション前のスタックおよびＥＩＰ、ＥＳＰ、ＥＢＰレジスタの様子を表している。これらのレジスタは、ＣＰＵアーキテクチャｘ８６に用意されているレジスタであり、ＥＩＰレジスタは実行中の命令のアドレスを格納するレジスタ、ＥＳＰレジスタはスタックトップを示すレジスタ、ＥＢＰレジスタはスタックの基準点を示すレジスタである。
【００２３】
図２の例は、２つの引数を伴うＡＰＩ−Ａを呼び出した後、呼び出し元に戻るためのｒｅｔ命令を実行している最中の様子である。ＥＩＰレジスタは既に戻りアドレスＡに書き換わっており、スタックも巻き戻されている。次に、図３では、図２の状態に対して、１つの引数を伴うＡＰＩ−Ｂを実行させるためのインジェクションを行った場合のスタック、ＥＩＰ、ＥＳＰ、ＥＢＰレジスタの様子を表している。ＶＭＭ３０内の退避領域にバックアップを取得した後、元々ＡＰＩ−Ａ用の引数１、引数２が書き込まれていたメモリ領域にＡＰＩ−Ｂ用の引数１とダミーの戻りアドレスを設定する。ダミーの戻りアドレスへの遷移を監視しておくことで、ＡＰＩ−Ｂからの戻りをフックする。
【００２４】
図４は、ＡＰＩ−Ｂから戻りのフックから通常処理に遷移する際のスタックおよびＥＩＰ、ＥＳＰ、ＥＢＰレジスタの様子を表している。ＡＰＩ−Ｂから戻る際には、ＥＩＰレジスタを戻りアドレスＡに設定し、ＶＭＭ３０内に保存しておいたバックアップを用いて、インジェクションを行う前の状態に復元する。これにより、アクセス可能な範囲にあるインジェクションの痕跡を削除する。
【００２５】
［マルウェア解析装置の処理の一例］
図５は、本実施形態に係るマルウェア解析装置におけるスレッド監視部がインジェクション部に改ざんを依頼するまでの処理の流れを示すフローチャートである。図５に示すように、スレッド監視部３１は、現在実行されているスレッドについて、ＴＩＢからＴＩＤを取得する（ステップＳ１０１）。
【００２６】
そして、スレッド監視部３１は、現在実行されているスレッドが書き換えの対象となる監視対象のスレッドであるか否かを判定する（ステップＳ１０２）。この結果、現在実行されているスレッドが書き換えの対象となる監視対象のスレッドでなかった場合には（ステップＳ１０２否定）、本フローチャートの処理を終了する。
【００２７】
また、現在実行されているスレッドが書き換えの対象となる監視対象のスレッドであった場合（ステップＳ１０２肯定）、スレッド監視部３１は、実行される命令を取得し（ステップＳ１０３）、実行される命令がｒｅｔ命令であるか否かを判定する（ステップＳ１０４）。この結果、実行される命令がｒｅｔ命令でない場合には（ステップＳ１０４否定）、本フローチャートの処理を終了する。
【００２８】
また、実行される命令がｒｅｔ命令である場合には（ステップＳ１０４肯定）、スレッド監視部３１は、戻りアドレスを取得する（ステップＳ１０５）。そして、スレッド監視部３１は、この戻りアドレスが所定のＡＰＩ呼び出し時に記録されたアドレスと同じであるか否かを判定する（ステップＳ１０６）。この結果、戻りアドレスが所定のＡＰＩ呼び出し時に記録されたアドレスと同じでない場合には（ステップＳ１０６否定）、本フローチャートの処理を終了する。
【００２９】
また、スレッド監視部３１は、戻りアドレスが所定のＡＰＩ呼び出し時に記録されたアドレスと同じである場合には（ステップＳ１０６肯定）、ＡＰＩに対する所定の改ざんをインジェクション部３２に依頼する。つまり、スレッド監視部３１は、当該スレッドに情報収集処理を実施させるように、インジェクション部３２に対して改ざんを依頼する（ステップＳ１０７）。
【００３０】
図６は、改ざん依頼を受けたインジェクション部の処理の流れを示すフローチャートである。図６に示すように、最初に、インジェクション部３２は、スレッドのＥＩＰ、ＥＳＰレジスタの値を取得する（ステップＳ２０１）。続いて、インジェクション部３２は、改ざんする範囲のメモリ空間２３のバックアップを取得する（ステップＳ２０２）。
【００３１】
次に、インジェクション部３２は、ＥＳＰレジスタが指しているアドレス低位のメモリ空間２３に引数とダミーの戻りアドレスを設定し（ステップＳ２０３）、改ざんを行う。そして、インジェクション部３２は、ダミーの戻りアドレスが設定されたアドレスをＥＳＰレジスタに設定し（ステップＳ２０４）、所定の処理を行うための命令（プログラムコード）が格納されたアドレスを取得し、ＥＩＰレジスタに設定する（ステップＳ２０５）。
【００３２】
さらに、メモリアクセス制御部３３にＴＩＤとＰＩＤ、アドレスレンジを通知し、当該スレッドに関する仮想メモリ空間提供の開始を要求する（ステップＳ２０６）。以上の処理が行われた後、改ざんを受けたスレッドは所定の処理を行う。最後に、インジェクション部３２は所定の処理の実行結果を受け取るため、ダミーの戻りアドレスへの遷移を監視する処理を開始する（ステップＳ２０７）。
【００３３】
図７は、改ざんを実施した後のインジェクション部の処理の流れを示すフローチャートである。図７に示すように、インジェクション部３２は、最初にＴＩＢからＴＩＤを取得し（ステップＳ３０１）、現在実行されているスレッドが書き換えの対象となり得る監視対象のスレッドであるか否かを判定する（ステップＳ３０２）。この結果、現在実行されているスレッドが書き換えの対象となり得る監視対象のスレッドでない場合には（ステップＳ３０２否定）、本フローチャートの処理を終了する。
【００３４】
また、インジェクション部３２は、現在実行されているスレッドが書き換えの対象となり得る監視対象のスレッドである場合には（ステップＳ３０２肯定）、実行される命令を取得し（ステップＳ３０３）、実行される命令がｒｅｔ命令であるか否かを判定する（ステップＳ３０４）。そして、実行される命令がｒｅｔ命令でない場合には（ステップＳ３０４否定）、本フローチャートの処理を終了する。また、実行される命令がｒｅｔ命令である場合には（ステップＳ３０４肯定）、インジェクション部３２は、戻りアドレスを取得する（ステップＳ３０５）。
【００３５】
そして、インジェクション部３２は、この戻りアドレスがダミーのアドレスであるか否かを判定する（ステップＳ３０６）。この結果、インジェクション部３２は、この戻りアドレスがダミーのアドレスでない場合には（ステップＳ３０６否定）、本フローチャートの処理を終了する。
【００３６】
また、戻りアドレスがダミーのアドレスである場合には（ステップＳ３０６肯定）、インジェクション部３２は、実施させた処理のログを回収し、バックアップを用いて改ざんしたメモリ内容を復元する（ステップＳ３０７）。さらに、インジェクション部３２は、メモリアクセス制御部３３にＴＩＤを通知して、当該ＴＩＤに対応するスレッドに関する仮想メモリ空間の提供の停止を要求する（ステップＳ３０８）。
【００３７】
図８は、情報収集などの所定の処理をスレッドに実行させている最中のメモリアクセス制御部の処理の流れを示すフローチャートである。図８に示すように、メモリアクセス制御部３３は、スレッド監視部３１からアクセス元ＴＩＤとアクセス先アドレスレンジ、当該アドレスレンジを管理するＰＩＤもしくは制御レジスタであるＣＲ３レジスタの値を受け取った後、プロセスＩＤが仮想メモリ空間提供対象として登録されているか否かを判定する（ステップＳ４０１）。
【００３８】
ＣＲ３レジスタは、ＣＰＵアーキテクチャｘ８６などに備わっている制御レジスタであり、Ｗｉｎｄｏｗｓ（登録商標）やＬｉｎｕｘ（登録商標）はページディレクトリの物理アドレスを管理するために当該レジスタを利用している。ページディレクトリは、プロセスごとに作成されるため、ＰＩＤ（Process  ID）と同様にこの物理アドレスから現在動作しているプロセスを一意に特定できる。
【００３９】
そして、メモリアクセス制御部３３は、プロセスＩＤが仮想メモリ空間提供対象として登録されていない場合には（ステップＳ４０１否定）、本フローチャートの処理を終了する。また、メモリアクセス制御部３３は、プロセスＩＤが仮想メモリ空間提供対象として登録されている場合には（ステップＳ４０１肯定）、アクセス先アドレスレンジが仮想メモリ空間提供対象として登録されているか否かを判定する（ステップＳ４０２）。
【００４０】
この結果、メモリアクセス制御部３３は、アクセス先アドレスレンジが仮想メモリ空間提供対象として登録されていない場合には（ステップＳ４０２否定）、本フローチャートの処理を終了する。また、メモリアクセス制御部３３は、アクセス先アドレスレンジが仮想メモリ空間提供対象として登録されている場合には（ステップＳ４０２肯定）、アクセス元ＴＩＤと仮想メモリ空間提供対象のＴＩＤが異なる場合には、アクセスの目的がメモリ読み込みであるか否かを判定する（ステップＳ４０３）。なお、アクセス元ＴＩＤと仮想メモリ空間提供対象のＴＩＤとが同じである場合には、通常通り、そのままアクセスを許可する。
【００４１】
そして、メモリアクセス制御部３３は、アクセスの目的がメモリ読み込みでない場合には（ステップＳ４０３否定）、つまり、アクセスの目的がメモリ更新等である場合には、バックアップデータの値を更新し（ステップＳ４０６）、本フローチャートの処理を終了する。一方、アクセスの目的がメモリ読み込みである場合には（ステップＳ４０３肯定）、バックアップデータを取得し（ステップＳ４０４）、該バックアップデータに基づいて仮想メモリ空間を提供し、バックアップデータの値をメモリ参照結果として返す（ステップＳ４０５）。これにより、書き換えたアドレス空間が他のスレッドによって検査され、解析環境が検知されることを回避することができる。
【００４２】
以上の仕組みを用いることで、例えば、ＮｔＣｒｅａｔｅＰｒｏｃｅｓｓ関数で得られるハンドラに対応するＰＩＤをＧｅｔＰｒｏｃｅｓｓＩｄ関数で調べることが可能となる。また、ＲＯＰ（Return  oriented  Programming）のように複数の処理をつなげることで、ＯＳの視点からファイルシステムやメモリから任意の情報を収集することができる。特に、マルウェアのメモリダンプ取得の場合、ＶＭＭから行うよりもＯＳから実施した方が、ＯＳのページング機構を利用できるためメモリ情報の取得が実施しやすいという利点がある。
【００４３】
［実施形態の効果］
このように、マルウェア解析装置１０は、解析対象のマルウェア２１が動作するゲストＯＳ２０上のスレッドのうち、監視対象のスレッドの動作を監視するスレッド監視部３１と、監視対象のスレッドが実行されている場合に、スレッド上のメモリ空間２３のデータをＶＭＭ３０が書き換えることでスレッドに所定の情報を収集する処理を実行させるインジェクション部３２とを有する。このため、マルウェア解析装置１０では、マルウェアに解析環境を検知されずに、ＯＳが管理する情報を適切に収集することが可能である。つまり、マルウェア解析装置１０は、マルウェア２１による検知を避けながら、ＯＳの視点から情報収集することが可能である。このため、サンドボックスなどのマルウェア２１を動作させながら解析するシステムでの利用に適している。
【００４４】
また、マルウェア解析装置１０は、所定の情報を収集する処理が終了した後、メモリ空間２３のデータを書き換えられる前の状態に復元することで、書き換えた痕跡を削除することが可能である。
【００４５】
また、マルウェア解析装置１０は、書き換えられたメモリ空間２３のデータに対する読み出しがあった場合には、仮想的なメモリ空間を提供し、バックアップデータをメモリ参照結果として返信するように制御することで、メモリ参照結果を偽装し、所定の情報収集処理を実行しているスレッドのタスクを保護することが可能である。
【００４６】
［経過時間の改ざん］
なお、上述した実施形態では、メモリ空間２３のデータを書き換える場合について説明したが、メモリ空間２３のデータとともに、所定の処理を開始してから経過した時間を示すデータを書き換えるようにしてもよい。情報収集中にゲストＯＳ２０側での時間は経過してしまうため、経過時間に基づいて解析システムが間接的に発見される可能性がある。このため、マルウェア解析装置１０のインジェクション部３２は、メモリ空間２３のデータとともに、所定の処理を開始してから経過した時間を示すデータを書き換える。例えば、インジェクション部３２は、ｒｄｔｓｃ命令などの時刻を取得する命令の返り値を改ざんする。これにより、経過時間を改ざんすることができ、解析システムが間接的に発見されることを回避することが可能である。
【００４７】
［ＡＰＩフックの検知］
また、所定の処理の実行に用いるＡＰＩがフックされている場合には、メモリ空間２３のデータの書き換えを中止するようにしてもよい。所定の処理の実行に用いるＡＰＩがフックされている場合には、コールスタックの検査によって解析システムを検知される可能性がある。このため、マルウェア解析装置１０のインジェクション部３２は、所定の処理の実行に用いるＡＰＩがフックされている場合には、メモリ空間２３のデータの書き換えを中止する。例えば、所定の処理の実行に用いるＡＰＩがフックされているか否かを検査する処理をインジェクション部３２で実施し、ＡＰＩがフックされている場合には改ざんを止めたり、他のスレッドの改ざんに切り換えたり、ＡＰＩフックを回避する手法を組み合わせたりしてもよい。
【００４８】
［監視対象のスレッド］
上述した実施形態では、スレッド監視部３１において、ＡＰＩを呼び出したスレッドを監視対象のスレッドとする場合を説明したが、これに限られるものではなく、例えば、システムコールを監視対象にしてもよい。また、上述した実施形態では、主に、ｒｅｔ命令が呼び出されるタイミングで書き換えを行う場合を説明したが、ｒｅｔ命令でなくともｃａｌｌ命令やｊｍｐ命令が呼び出されるタイミングで制御フローを書き換えてもよい。
【００４９】
［システム構成等］
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。例えば、スレッド監視部３１とインジェクション部３２とを統合してもよい。
【００５０】
また、本実施形態において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００５１】
［プログラム］
また、上記実施形態において説明したマルウェア解析装置１０が実行する処理について、コンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、実施形態に係るマルウェア解析装置１０が実行する処理について、コンピュータが実行可能な言語で記述した解析プログラムを作成することもできる。この場合、コンピュータが解析プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる解析プログラムをコンピュータが読み取り可能な記録媒体に記録して、この記録媒体に記録された解析プログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、図１に示したマルウェア解析装置１０と同様の機能を実現する解析プログラムを実行するコンピュータの一例を説明する。
【００５２】
図９は、解析プログラムを実行するコンピュータ１０００を示す図である。図９に例示するように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有し、これらの各部はバス１０８０によって接続される。
【００５３】
メモリ１０１０は、図９に例示するように、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、図９に例示するように、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、図９に例示するように、ディスクドライブ１０４１に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１０４１に挿入される。シリアルポートインタフェース１０５０は、図９に例示するように、例えばマウス１１１０、キーボード１１２０に接続される。ビデオアダプタ１０６０は、図９に例示するように、例えばディスプレイ１１３０に接続される。
【００５４】
ここで、図９に例示するように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、上記の解析プログラムは、コンピュータ１０００によって実行される指令が記述されたプログラムモジュール１０９３として、例えばハードディスクドライブ１０９０に記憶される。
【００５５】
また、上記実施形態で説明した各種データは、プログラムデータ１０９４として、例えばメモリ１０１０やハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出し、実行する。
【００５６】
なお、解析プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ１０４１等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、解析プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００５７】
１０  マルウェア解析装置
２０  ゲストＯＳ
２１  マルウェア
２２  標準プロセス
２３  メモリ空間
３０  ＶＭＭ
３１  スレッド監視部
３２  インジェクション部
３３  メモリアクセス制御部
【図１】
0006430922.tif 000002
【図２】
0006430922.tif 000003
【図３】
0006430922.tif 000004
【図４】
0006430922.tif 000005
【図５】
0006430922.tif 000006
【図６】
0006430922.tif 000007
【図７】
0006430922.tif 000008
【図８】
0006430922.tif 000009
【図９】
0006430922.tif 000010