(57)【特許請求の範囲】
【請求項１】
コンピューターを、
所定のプロセスから呼び出されるファイル書込関数がデータを書き込むファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル書込関数が、前記ファイルパスのファイルのヘッダを書き換えるという第２の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する判断部
として機能させるためのプログラム。
【請求項２】
請求項１記載のプログラムにおいて、
前記判断部は、
前記第１の条件及び前記第２の条件に加えて、前記ファイルパスのファイルがヘッダを有しないテキストファイルであるという第３の条件とを満足する場合には、前記所定のプロセスをランサムウェアとして処理するか否かの処理の選択肢をユーザーに提示する
ことを特徴とするプログラム。
【請求項３】
請求項１又は２記載のプログラムにおいて、
前記判断部は、
前記第１の条件及び前記第２の条件に加えて、前記所定のプロセスから、前記ファイル書込関数の呼び出しの前に、前記ファイルパスに含まれるパスと同一のパスにおける他のファイルを検索するファイル検索関数が呼びだされているという第４の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する
ことを特徴とするプログラム。
【請求項４】
請求項１乃至３のいずれか１項に記載のプログラムにおいて、
前記判断部は、
前記第１の条件及び前記第２の条件に加えて、前記所定のプロセスから、前記ファイル書込関数の呼び出しの後に、前記ファイルパスに含まれるパスと同一のパスを移動元のパスとし、前記ファイルパスに含まれるパスと同一のパスを移動元のパスとするファイル移動関数が呼びだされているという第５の条件を満足する場合に、前記所定のプロセスをランサムウェアと判断する
ことを特徴とするプログラム。
【請求項５】
コンピューターを、
所定のプロセスから呼び出されるファイル削除関数が削除するファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記所定のプロセスから呼び出される前記ファイル削除関数が削除する前記ファイルパスと同一のファイルパスを移動先とする第１のファイル移動関数が既に呼び出されているという第２の条件と、前記所定のプロセスから呼び出される第２のファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第３の条件と、前記第１のファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル削除関数が削除する前記ファイルパスのファイルのヘッダとが相違しているという第４の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する判断部
として機能させるためのプログラム。
【請求項６】
コンピューターを、
所定のプロセスから呼び出されるファイル移動関数の移動先のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第２の条件と、前記ファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル移動関数の移動先のファイルパスのファイルのヘッダとが相違しているという第３の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する判断部
として機能させるためのプログラム。
【請求項７】
コンピューターに、
所定のプロセスから呼び出されるファイル書込関数がデータを書き込むファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル書込関数が、前記ファイルパスのファイルのヘッダを書き換えるという第２の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する手順
を実行させるためのプログラム。
【請求項８】
コンピューターに、
所定のプロセスから呼び出されるファイル削除関数が削除するファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記所定のプロセスから呼び出される前記ファイル削除関数が削除する前記ファイルパスと同一のファイルパスを移動先とする第１のファイル移動関数が既に呼び出されているという第２の条件と、前記所定のプロセスから呼び出される第２のファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第３の条件と、前記第１のファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル削除関数が削除する前記ファイルパスのファイルのヘッダとが相違しているという第４の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する手順
を実行させるためのプログラム。
【請求項９】
コンピューターに、
所定のプロセスから呼び出されるファイル移動関数の移動先のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第２の条件と、前記ファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル移動関数の移動先のファイルパスのファイルのヘッダとが相違しているという第３の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する手順
を実行させるためのプログラム。
【請求項１０】
請求項１乃至９のいずれか１項に記載のプログラムを記録したコンピューター読み取り可能な記録媒体。
【請求項１１】
所定のプロセスから呼び出されるファイル書込関数がデータを書き込むファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル書込関数が、前記ファイルパスのファイルのヘッダを書き換えるという第２の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する判断部
を有することを特徴とする情報処理装置。
【請求項１２】
所定のプロセスから呼び出されるファイル削除関数が削除するファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記所定のプロセスから呼び出される前記ファイル削除関数が削除する前記ファイルパスと同一のファイルパスを移動先とする第１のファイル移動関数が既に呼び出されているという第２の条件と、前記所定のプロセスから呼び出される第２のファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第３の条件と、前記第１のファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル削除関数が削除する前記ファイルパスのファイルのヘッダとが相違しているという第４の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する判断部
を有することを特徴とする情報処理装置。
【請求項１３】
所定のプロセスから呼び出されるファイル移動関数の移動先のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第２の条件と、前記ファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル移動関数の移動先のファイルパスのファイルのヘッダとが相違しているという第３の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する判断部
を有することを特徴とする情報処理装置。
【請求項１４】
所定のプロセスから呼び出されるファイル書込関数がデータを書き込むファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル書込関数が、前記ファイルパスのファイルのヘッダを書き換えるという第２の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する
ことを特徴とする情報処理方法。
【請求項１５】
所定のプロセスから呼び出されるファイル削除関数が削除するファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記所定のプロセスから呼び出される前記ファイル削除関数が削除する前記ファイルパスと同一のファイルパスを移動先とする第１のファイル移動関数が既に呼び出されているという第２の条件と、前記所定のプロセスから呼び出される第２のファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第３の条件と、前記第１のファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル削除関数が削除する前記ファイルパスのファイルのヘッダとが相違しているという第４の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する
ことを特徴とする情報処理方法。
【請求項１６】
所定のプロセスから呼び出されるファイル移動関数の移動先のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第２の条件と、前記ファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル移動関数の移動先のファイルパスのファイルのヘッダとが相違しているという第３の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する
ことを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報処理装置、及び情報処理方法に関する。
【背景技術】
【０００２】
近年、ランサムウェアと呼ばれる種類のマルウェアが世界的に流行している。
【０００３】
ランサムウェアは、他の一般的なマルウェアと同じくインターネットやメール経由で端末に感染する。
【０００４】
ランサムウェアは一度感染すると、端末上の一部のファイルまたは全体を暗号化（ロック）し、ファイルの使用または端末の使用を不可能にした上で、身代金（ランサム：ransom）を支払うよう要求する。暗号化されたファイルを復元することの見返りに金銭を要求する脅迫型のマルウェアである。
【０００５】
ランサムウェアの場合、感染すると直ちにファイルの暗号化が開始される。このため、そのランサムウェアがセキュリティ製品にとって未知の検体である場合、パターンファイルによる検知等の通常の検知では間に合わず、ファイルの暗号化を阻止することは困難である。仮にランサムウェアの感染に早期に気付き、直ちに端末の電源を切る等の処置をとったとしても、ランサムウェアによりいくらかのファイルが暗号化されることは免れず、被害を完全に阻止することは非常に困難である。
【０００６】
ランサムウェアを検出するための方法として、ランサムウェアがユーザーによる操作や入力状態に関係なく、突然ウィンドウを表示する等の特徴的動作をすることを利用して、キーボード、マウス等の入力インターフェースの操作状態と、ディスプレイデバイスの変更状態とを監視してランサムウェアを検出する方法が知られている（特許文献１参照）
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許出願公開第２０１４／０１８１９７１号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従来の方法ではランサムウェアのようなマルウェアによるファイルの暗号化等の攻撃を有効に阻止することが困難であった。
【０００９】
本発明の目的は、マルウェアによる攻撃を有効に阻止することができるプログラム、情報処理装置、及び情報処理方法を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の一態様によるプログラムは、コンピューターを、所定のプロセスから呼び出されるファイル書込関数がデータを書き込むファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル書込関数が、前記ファイルパスのファイルのヘッダを書き換えるという第２の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する判断部として機能させることを特徴とする。
【００１１】
上述したプログラムにおいて、前記判断部は、前記第１の条件及び前記第２の条件に加えて、前記ファイルパスのファイルがヘッダを有しないテキストファイルであるという第３の条件とを満足する場合には、前記所定のプロセスをランサムウェアとして処理するか否かの処理の選択肢をユーザーに提示するようにしてもよい。
【００１２】
上述したプログラムにおいて、前記判断部は、前記第１の条件及び前記第２の条件に加えて、前記所定のプロセスから、前記ファイル書込関数の呼び出しの前に、前記ファイルパスに含まれるパスと同一のパスにおける他のファイルを検索するファイル検索関数が呼びだされているという第４の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断するようにしてもよい。
【００１３】
上述したプログラムにおいて、前記判断部は、前記第１の条件及び前記第２の条件に加えて、前記所定のプロセスから、前記ファイル書込関数の呼び出しの後に、前記ファイルパスに含まれるパスと同一のパスを移動元のパスとし、前記ファイルパスに含まれるパスと同一のパスを移動元のパスとするファイル移動関数が呼びだされているという第５の条件を満足する場合に、前記所定のプロセスをランサムウェアと判断するようにしてもよい。
【００１４】
本発明の一態様によるプログラムは、コンピューターを、所定のプロセスから呼び出されるファイル削除関数が削除するファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記所定のプロセスから呼び出される前記ファイル削除関数が削除する前記ファイルパスと同一のファイルパスを移動先とする第１のファイル移動関数が既に呼び出されているという第２の条件と、前記所定のプロセスから呼び出される第２のファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第３の条件と、前記第１のファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル削除関数が削除する前記ファイルパスのファイルのヘッダとが相違しているという第４の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する判断部として機能させることを特徴とする。
【００１５】
本発明の一態様によるプログラムは、コンピューターを、所定のプロセスから呼び出されるファイル移動関数の移動先のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第２の条件と、前記ファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル移動関数の移動先のファイルパスのファイルのヘッダとが相違しているという第３の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する判断部として機能させることを特徴とする。
【００１６】
本発明の一態様によるプログラムは、コンピューターに、所定のプロセスから呼び出されるファイル書込関数がデータを書き込むファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル書込関数が、前記ファイルパスのファイルのヘッダを書き換えるという第２の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する手順を実行させることを特徴とする。
【００１７】
本発明の一態様によるプログラムは、コンピューターに、所定のプロセスから呼び出されるファイル削除関数が削除するファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記所定のプロセスから呼び出される前記ファイル削除関数が削除する前記ファイルパスと同一のファイルパスを移動先とする第１のファイル移動関数が既に呼び出されているという第２の条件と、前記所定のプロセスから呼び出される第２のファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第３の条件と、前記第１のファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル削除関数が削除する前記ファイルパスのファイルのヘッダとが相違しているという第４の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する手順を実行させることを特徴とする。
【００１８】
本発明の一態様によるプログラムは、コンピューターに、所定のプロセスから呼び出されるファイル移動関数の移動先のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第２の条件と、前記ファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル移動関数の移動先のファイルパスのファイルのヘッダとが相違しているという第３の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する手順を実行させることを特徴とする。
【００１９】
本発明の一態様による情報処理装置は、所定のプロセスから呼び出されるファイル書込関数がデータを書き込むファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル書込関数が、前記ファイルパスのファイルのヘッダを書き換えるという第２の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する判断部を有することを特徴とする。
【００２０】
本発明の一態様による情報処理装置は、所定のプロセスから呼び出されるファイル削除関数が削除するファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記所定のプロセスから呼び出される前記ファイル削除関数が削除する前記ファイルパスと同一のファイルパスを移動先とする第１のファイル移動関数が既に呼び出されているという第２の条件と、前記所定のプロセスから呼び出される第２のファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第３の条件と、前記第１のファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル削除関数が削除する前記ファイルパスのファイルのヘッダとが相違しているという第４の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する判断部を有することを特徴とする。
【００２１】
本発明の一態様による情報処理装置は、所定のプロセスから呼び出されるファイル移動関数の移動先のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第２の条件と、前記ファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル移動関数の移動先のファイルパスのファイルのヘッダとが相違しているという第３の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断する判断部を有することを特徴とする。
【００２２】
本発明の一態様による情報処理方法は、所定のプロセスから呼び出されるファイル書込関数がデータを書き込むファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル書込関数が、前記ファイルパスのファイルのヘッダを書き換えるという第２の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断することを特徴とする。
【００２３】
本発明の一態様による情報処理方法は、所定のプロセスから呼び出されるファイル削除関数が削除するファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記所定のプロセスから呼び出される前記ファイル削除関数が削除する前記ファイルパスと同一のファイルパスを移動先とする第１のファイル移動関数が既に呼び出されているという第２の条件と、前記所定のプロセスから呼び出される第２のファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第３の条件と、前記第１のファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル削除関数が削除する前記ファイルパスのファイルのヘッダとが相違しているという第４の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断することを特徴とする。
【００２４】
本発明の一態様による情報処理方法は、所定のプロセスから呼び出されるファイル移動関数の移動先のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、前記ファイル移動関数の移動元のファイルパスと同一のファイルパスに対して、前記所定のプロセスからファイル書込関数が既に呼び出されているという第２の条件と、前記ファイル移動関数の移動元のファイルパスのファイルのヘッダと、前記ファイル移動関数の移動先のファイルパスのファイルのヘッダとが相違しているという第３の条件とを満足する場合に、前記所定のプロセスをランサムウェアと判断することを特徴とする。
【発明の効果】
【００２５】
以上の通り、本発明によれば、所定のプロセスから呼び出されるファイル書込関数がデータを書き込むファイルパスと同一のファイルパスに対して、所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、ファイル書込関数が、ファイルパスのファイルのヘッダを書き換えるという第２の条件とを満足する場合に、所定のプロセスをランサムウェアと判断するようにしたので、マルウェアによる攻撃を有効に阻止することができる。
【図面の簡単な説明】
【００２６】
【図１】一般的な情報処理装置を示すブロック図である。
【図２】コンピュータープログラムの動作をコンピューターのハードウェアとの関連で示す説明図（その１）である。
【図３】コンピュータープログラムの動作をコンピューターのハードウェアとの関連で示す説明図（その２）である。
【図４】ランサムウェアCryptoLockerによるファイル暗号化の説明図（その１）である。
【図５】ランサムウェアCryptoLockerによるファイル暗号化の説明図（その２）である。
【図６】ランサムウェアCryptoLockerによるファイル暗号化の説明図（その３）である。
【図７】ランサムウェアCryptoLockerによるファイル暗号化の説明図（その４）である。
【図８】ランサムウェアCryptoWallによるファイル暗号化の説明図（その１）である。
【図９】ランサムウェアCryptoWallによるファイル暗号化の説明図（その２）である。
【図１０】ランサムウェアCryptoWallによるファイル暗号化の説明図（その３）である。
【図１１】ランサムウェアCryptoWallによるファイル暗号化の説明図（その４）である。
【図１２】ランサムウェアCryptoWallによるファイル暗号化の説明図（その５）である。
【図１３】ランサムウェアCryptoWallによるファイル暗号化の説明図（その６）である。
【図１４】ランサムウェアCERBERによるファイル暗号化の説明図である。
【図１５】ランサムウェアTeslaCryptによるファイル暗号化の説明図（その１）である。
【図１６】ランサムウェアTeslaCryptによるファイル暗号化の説明図（その２）である。
【図１７】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１）である。
【図１８】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２）である。
【図１９】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その３）である。
【図２０】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その４）である。
【図２１】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その５）である。
【図２２】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その６）である。
【図２３】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その７）である。
【図２４】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その８）である。
【図２５】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その９）である。
【図２６】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１０）である。
【図２７】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１１）である。
【図２８】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１２）である。
【図２９】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１３）である。
【図３０】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１４）である。
【図３１】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１５）である。
【図３２】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１６）である。
【図３３】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１７）である。
【図３４】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１８）である。
【図３５】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１９）である。
【図３６】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２０）である。
【図３７】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２１）である。
【図３８】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２２）である。
【図３９】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２３）である。
【図４０】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２４）である。
【図４１】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２５）である。
【図４２】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２６）である。
【図４３】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２７）である。
【図４４】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１）である。
【図４５】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２）である。
【図４６】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その３）である。
【図４７】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その４）である。
【図４８】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その５）である。
【図４９】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その６）である。
【図５０】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その７）である。
【図５１】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その８）である。
【発明を実施するための形態】
【００２７】
［情報処理装置］
本発明が適用される一般的な情報処理装置及びその動作について図１乃至図３を用いて説明する。
【００２８】
図１は一般的な情報処理装置を示すブロック図である。
【００２９】
標準的なスタンドアロン環境における情報処理装置１０は、コンピューター（ＰＣ）２０と、外部周辺装置３０とから構成されている。
【００３０】
コンピューター（ＰＣ）２０は、命令を実行するＣＰＵ２１と、データおよびプログラムを格納するハードディスク２２と、データやプログラムをＣＰＵ２１が読み込むためのメモリ２３と、ユーザーの操作を受け付けるマウスやキーボードのような入出力装置２４と、操作内容や処理結果等を表示するディスプレイ２５等から構成されている。
【００３１】
外部周辺装置３０は、処理結果等を印刷するためのプリンター３１や、ＵＳＢメモリ等の外部記憶装置３２等から構成されている。
【００３２】
次に、図２及び図３を用いて、コンピュータープログラム、すなわち、コンピューターに行わせる処理の手順を決められた形式（プログラム言語）に従って書き表したものを実行させる場合の一連の動作について、コンピューター２０におけるＣＰＵ２１、ハードディスク２２、メモリ２３等のハードウェアとの関連で説明する。
【００３３】
コンピューター２０が起動する前は、オペレーションソフトウェア（ＯＳ）のプログラムやデータを含むＯＳデータと、コンピューター２０で実行させるプログラムと、文書、図面等のユーザーデータ等がファイルとしてハードディスク２２に格納されている（図２（ａ））。メモリ２３にはプログラムやデータ等は展開されていない。
【００３４】
コンピューター２０が起動して、ＣＰＵ２１が、ハードディスク２２に格納されたＯＳデータをメモリ２３にロードする命令を実行すると、ＯＳデータがメモリ２３上にプロセスとして展開される（図２（ｂ））。
【００３５】
次に、ＣＰＵ２１がメモリ２３上のＯＳデータのプロセスを実行して、ハードディスク２２に格納されたプログラムにアクセスして、そのプログラムを読み込む（図２（ｃ））。ハードディスク２２に格納されたプログラムはメモリ２３にロードされ、メモリ２３上にプロセスとして展開される（図３（ａ））。
【００３６】
次に、ＣＰＵ２１がメモリ２３上のプログラムのプロセスを実行して、ハードディスク２２に格納されたユーザーデータにアクセスして、ハードディスク２２へのデータの読み書きを行う（図３（ｂ））。
【００３７】
このように、オペレーションソフトウエアやプログラムにより、ＣＰＵ２１、ハードディスク２２、メモリ２３との間での動作が行われる。
【００３８】
なお、本明細書において「プロセス」とは「メモリ２３上に展開されたプログラム」のことであり、「プログラム」とは「ハードディスク等に格納されたプログラム（ファイル）」のことである。理解しやすさのため「プロセス」である「メモリ２３上に展開されたプログラム」のことを単に「プログラム」と記載することもある。
【００３９】
また、本明細書において、Windows API関数の文字列末尾に付与されている"W"や"Ex"は、付与されていないものと同じ意味合いとする。例えば、"FindFirstFileW"は"FindFirstFile"と同義であり、"MoveFileEx"は"MoveFile"と同義である。
【００４０】
［発明の原理］
本発明の原理について図４乃至図１６を用いて説明する。
【００４１】
（ランサムウェアの分析）
本願発明者等は、まず、国内外で被害が報告されている主なランサムウェア複数種について、ファイルの暗号化を行う際のファイル操作に関わる挙動について解析した。具体的には、４種類のランサムウェア、CryptoLocker、CryptWall、CERBER、TeslaCryptのファイル操作の挙動について解析した。
（ａ）ランサムウェアCryptoLockerの分析
ＡＰＩモニター（API Monitor）という解析ツールを用いてランサムウェアCryptoLockerの動作を分析した。ＡＰＩモニターは、アプリケーションから呼ばれるWindows API（Application Programming Interface）コールの引数、戻り値を、アプリケーションを変更することなくモニターすることができるプログラムである。Windowsは登録商標である。
【００４２】
図４にランサムウェアCryptoLockerのファイル暗号化時に呼び出されたＡＰＩのログ（log）を示す。ランサムウェアCryptoLockerにより、フォルダ"C:\Python27\Lib\compiler"内のファイルが順次暗号化される場合のログである。
【００４３】
１行目のFindNextFileは、次のファイルを検索するというWindows API関数である。
【００４４】
２行目のCreateFileWは、引数"C:\Python27\Lib\compiler\consts.py"のファイルを開くというWindows API関数である。
【００４５】
３−４行目のReadFileは、CreateFileWで開いたファイル"C:\Python27\Lib\compiler\consts.py"を読み出すというWindows API関数である。
【００４６】
５−７行目のWriteFileは、CreateFileWで開いたファイル"C:\Python27\Lib\compiler\consts.py"にデータを書き込むというWindows API関数である。
【００４７】
１−７行目のログは次のことを示している。
【００４８】
１行目のFindNextFileにより次のファイルを検索し、２行目のCreateFileWにより引数"C:\Python27\Lib\compiler\consts.py"のファイルを開き、３−４行目のReadFileと５−７行目のWriteFileにより、ファイル"C:\Python27\Lib\compiler\consts.py"の暗号化が実行される。
【００４９】
８行目のFindNextFileは、次のファイルを検索するというWindows API関数である。
【００５０】
９行目のCreateFileWは、引数"C:\Python27\Lib\compiler\future.py"のファイルを開くというWindows API関数である。
【００５１】
１０−１１行目のReadFileは、CreateFileWで開いたファイル"C:\Python27\Lib\compiler\future.py"を読み出すというWindows API関数である。
【００５２】
１２−１５行目のWriteFileは、CreateFileWで開いたファイル"C:\Python27\Lib\compiler\future.py"にデータを書き込むというWindows API関数である。
【００５３】
８−１５行目のログは次のことを示している。
【００５４】
８行目のFindNextFileにより次のファイルを検索し、９行目のCreateFileWにより引数"C:\Python27\Lib\compiler\future.py"のファイルを開き、１０−１１行目のReadFileと１２−１５行目のWriteFileにより、ファイル"C:\Python27\Lib\compiler\future.py"の暗号化が実行される。
【００５５】
１６行目のFindNextFileは、次のファイルを検索するというWindows API関数である。
【００５６】
１７行目のCreateFileWは、引数"C:\Python27\Lib\compiler\misc.py"のファイルを開くというWindows API関数である。
【００５７】
１８−１９行目のReadFileは、CreateFileWで開いたファイル"C:\Python27\Lib\compiler\misic.py"を読み出すというWindows API関数である。
【００５８】
２０−２２行目のWriteFileは、CreateFileWで開いたファイル"C:\Python27\Lib\compiler\misic.py"にデータを書き込むというWindows API関数である。
【００５９】
１６−２２行目のログは次のことを示している。
【００６０】
１６行目のFindNextFileにより次のファイルを検索し、１７行目のCreateFileWにより引数"C:\Python27\Lib\compiler\misic.py"のファイルを開き、１８−１９行目のReadFileと２０−２２行目のWriteFileにより、ファイル"C:\Python27\Lib\compiler\misic.py"の暗号化が実行される。
【００６１】
以下同様にして、フォルダ"C:\Python27\Lib\compiler\"内のファイルが順次暗号化される。
【００６２】
このログから、ランサムウェアCryptoLockerは、次のようにしてファイルを暗号化していることがわかる。
（１）FindFirstFile、FindNextFileによりファイルを検索する。FindFirstFile、  FindNextFileは、セットで使用される検索用のWindows API関数である。
（２）CreateFileにより暗号化対象のファイルを開く。
（３）開いたファイルに対し、ReadFile、WriteFileでファイルを書き換えて暗号化する。すなわち、ReadFileにより、暗号化対象ファイルのファイル内容を読み込み、読み込んだ暗号化対象ファイル内容をマルウェアが暗号化し、暗号化された後のデータをWriteFileにより元の暗号化対象ファイルに書き込む。
【００６３】
図５にランサムウェアCryptoLockerのファイル暗号化時に呼び出されたＡＰＩのログを示す。ランサムウェアCryptoLockerにより、フォルダ"C:\User\Public\Videos"下にあるファイル"Wildlife.wmv"が検索され暗号化される場合のログである。
【００６４】
３行目のFindFirstFileは、引数"C:\Users\Public\Videos\*.*"の最初のファイルを検索するというWindows API関数である。
【００６５】
４−９行目のFindNextFileは、次のファイルを検索するというWindows API関数である。
【００６６】
１０行目のFindFirstFileは、引数"C:\Users\Public\Videos\Sample Videos\*.*"の最初のファイルを検索するというWindows API関数である。
【００６７】
１１−１３行目のFindNextFileは、次のファイルを検索するというWindows API関数である。
【００６８】
１４行目のCreateFileWは、引数"C:\Users\Public\Videos\Sample Videos\Wildlife.wmv"のファイルを開くというWindows API関数である。
【００６９】
１５−１６行目のReadFileは、CreateFileWで開いたファイル"C:\Users\Public\Videos\Sample Videos\Wildlife.wmv"を読み出すというWindows API関数である。
【００７０】
１７−１９行目のWriteFileは、CreateFileWで開いたファイル"C:\Users\Public\Videos\Sample Videos\Wildlife.wmv"にデータを書き込むというWindows API関数である。
【００７１】
２０行目のFindNextFileは、次のファイルを検索するというWindows API関数である。
【００７２】
３−９行目のログは次のことを示している。
【００７３】
３行目のFindFirstFileと４−９行目のFindNextFileにより、フォルダ"C:\Users\Public\Videos\*.*"内のファイルを検索したが、ファイルが見つからない。
【００７４】
１０−１４行目のログは次のことを示している。
【００７５】
１０行目のFindFirstFileにより、フォルダ"C:\Users\Public\Videos\*.*"より下層のフォルダ"C:\Users\Public\Videos\Sample Videos\*.*"に移行し、１１−１３行目のFindNextFileにより、フォルダ"C:\Users\Public\Videos\Sample Videos\*.*"内を検索し、ファイル"C:\Users\Public\Videos\Sample Videos\Wildlife.wmv"を見つけたので、１４行目のCreateFileWにより開く。
【００７６】
１５−２０行目のログは次のことを示している。
【００７７】
CreateFileWにより開いたファイル"C:\Users\Public\Videos\Sample Videos\Wildlife.wmv"を、１５−１６行目のReadFileと１７−１９行目のWriteFileにより、暗号化する。
【００７８】
そして、２０行目のFindNextFileにより、フォルダ"C:\Users\Public\Videos\Sample Videos\*.*"内の次のファイルを検索する。
【００７９】
図５のように、あるフォルダ下にあるファイルが検索され暗号化される場合も、図４と同様に、FindFirstFile、FindNextFile、CreateFile、ReadFile、WriteFileにより、ファイルを検索し、検索されたファイルを書き換えて暗号化する。
【００８０】
図６は、ランサムウェアCryptoLockerによりアクセスされる前と後のファイル"Wildlife.wmv"の状態を示す。図６（ａ）が、ランサムウェアCryptoLockerによりアクセスされる前の状態であり、図６（ｂ）が、ランサムウェアCryptoLockerによりアクセスされた後の状態である。
【００８１】
図６に示すように、ランサムウェアCryptoLockerによりアクセスされた後には、暗号化されたファイル"Wildlife.wmv"のヘッダが書き換えられている。
【００８２】
図７は、ランサムウェアCryptoLockerにより暗号化される前と後のファイル"Wildlife.wmv"のヘッダを示す。図７（ａ）が、ランサムウェアCryptoLockerにより暗号化される前のヘッダであり、図７（ｂ）が、ランサムウェアCryptoLockerにより暗号化された後のヘッダである。
【００８３】
図７に示すように、ファイル"Wildlife.wmv"の先頭から末尾までの全てのバイトの部分が書き換えられている。少なくとも、バイナリファイルであれば、ファイルの種類や、サイズ、ファイルの種類に応じた各種情報の情報を表す「ヘッダ」と呼ばれる部分（通常、先頭から数バイトから数十バイト）が書き換えられている。
【００８４】
以上のことから、ランサムウェアCryptoLockerの暗号化時のファイル操作に関する挙動は、次の通りであることがわかった。
（１）ファイル検索のWindows API関数であるFindFirstFile、FindNextFileが呼び出される。
（２）ファイルを開くWindows API関数であるCreateFileが呼び出される。
（３）CreateFileの対象ファイルに、ファイルを読み出すWindows API関数であるReadFileと、ファイルにデータを書き込むWindows API関数であるWriteFileが呼び出される。
（４）CreateFileの対象ファイルのヘッダが、ランサムウェアCryptoLockerのアクセス前後で相違している。
（ｂ）ランサムウェアCryptoWallの分析
プログラムのデバッグを支援するプログラムであるデバッガ（Debugger）を用いてランサムウェアCryptoWallの動作を分析した。
【００８５】
ランサムウェアCryptoWallは、まずファイルを検索するWindows API関数であるFindFirstFileWにより、ルートドライブから端末内のファイルを検索する。
【００８６】
図８は、ランサムウェアCryptoWallがファイル検索を開始する際の様子を示すデバッガの画面のキャプチャである。
【００８７】
最初の図８（ａ）のキャプチャは、FindFirstFileWに、ドライブのルートである"C:\*"が引数として渡されていることを示している。
【００８８】
次の図８（ｂ）のキャプチャは、FindFirstFileWに、ドライブのルート"C:\*"より下層のフォルダである"C:\Users\*"が引数として渡されていることを示している。
【００８９】
その次の図８（ｃ）のキャプチャは、FindFirstFileWに、フォルダ"C:\Users\*"より下層のフォルダである"C:\Users\Publice\*"が引数として渡されていることを示している。
【００９０】
更にその次の図８（ｄ）のキャプチャは、FindFirstFileWに、フォルダ"C:\Users\Public\*"より下層のフォルダである"C:\Users\Publice\Videos\*"が引数として渡されていることを示している。
【００９１】
Windows API関数であるFindFirstFileWによる、ルートドライブから端末内の更なるファイル検索の結果、最初に"C:\Users\Public\Videos\Sample Videos\Wildlife.wmv"が検索され、ランサムウェアCryptoWallにより暗号化される。
【００９２】
図９は、ランサムウェアCryptoWallがファイル"C:\Users\Public\Videos\Sample Videos\Wildlife.wmv"を暗号化する際の様子を示すデバッガの画面のキャプチャである。
【００９３】
最初の図９（ａ）のキャプチャは、Windows API関数であるCreateFileWにより、ファイル"C:\Users\Public\Videos\Sample Videos\Wildlife.wmv"が開かれていることを示している。
【００９４】
次の図９（ｂ）のキャプチャは、Windows API関数であるReadFileと、Windows API関数であるWriteFileが交互に呼び出され、ファイル"C:\Users\Public\Videos\Sample Videos\Wildlife.wmv"が所定のサイズ分ずつ書き換えられて暗号化されていることを示している。
【００９５】
その次の図９（ｃ）のキャプチャは、Windows API関数であるMoveFileが呼び出され、元のファイル"C:\Users\Public\Videos\Sample Videos\Wildlife.wmv"のファイル名を暗号化後の別のファイル名に変更されていることを示している。
【００９６】
図１０は、ランサムウェアCryptoWallによりアクセスされる前と後のファイル"Wildlife.wmv"の状態を示す。図６（ａ）が、ランサムウェアCryptoWallによりアクセスされる前の状態であり、図６（ｂ）が、ランサムウェアCryptoWallによりアクセスされた後の状態である。
【００９７】
図１０に示すように、ランサムウェアCryptoWallによりアクセスされた後には、フォルダ"C:\Users\Public\Videos\Sample Videos\*.*"内に元のファイル名"野生動物.wmv(Wildlif.wmv)"とは別のファイル名に変更され、ファイルのヘッダが書き換えられている。
【００９８】
図１１は、ランサムウェアCryptoWallにより暗号化される前と後のファイル"Wildlife.wmv"のヘッダを示す。図１１（ａ）が、ランサムウェアCryptoLockerにより暗号化される前のヘッダであり、図１１（ｂ）が、ランサムウェアCryptoLockerにより暗号化された後のヘッダである。暗号化されたファイルはファイル名が変更されている。
【００９９】
図１１に示すように、ファイル"Wildlife.wmv"の先頭から末尾までの全てのバイトの部分が書き換えられている。少なくとも、バイナリファイルであれば、ファイルの種類や、サイズ、ファイルの種類に応じた各種情報の情報を表す「ヘッダ」と呼ばれる部分（通常、先頭から数バイトから数十バイト）が書き換えられている。
【０１００】
次に、別のファイルを暗号化する際の様子について説明する。
【０１０１】
図１２及び図１３は、ランサムウェアCryptoWallがファイル"C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg"を暗号化する際の様子を示すデバッガの画面のキャプチャである。
【０１０２】
最初の図１２（ａ）のキャプチャは、Windows API関数であるCreateFileにより、ファイル"C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg"が開かれていることを示している。
【０１０３】
次の図１２（ｂ）のキャプチャは、Windows API関数であるReadFileと、Windows API関数であるWriteFileが繰り返し呼び出されることを示している。
【０１０４】
その次の図１３のキャプチャは、ファイル"C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg"が暗号化により破損され、サムネイルで表示できなくなっていることを示している。更に、Windows API関数であるMoveFileEXが呼び出され、元のファイル"C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg"が暗号化後の別のファイル名"C:\Users\Public\Pictures\Sample Pictures\p3EiSzLkWhfU5pgrD5SX9PdYPyP5ICa5iXzySi34oaY=.E08A29776586FC717E27.breaking_bad"に変更されていることを示している。
【０１０５】
以上のことから、ランサムウェアCryptoWallの暗号化時のファイル操作に関する挙動は、次の通りであることがわかった。
（１）ファイル検索のWindows API関数であるFindFirstFile、FindNextFileが呼び出される。
（２）ファイルを開くWindows API関数であるCreateFileが呼び出される。
（３）CreateFileの対象ファイルに、ファイルを読み出すWindows API関数であるReadFileと、ファイルにデータを書き込むWindows API関数であるWriteFileが呼び出される。
（４）CreateFileの対象ファイルのヘッダが、ランサムウェアCryptoWallのアクセス前後で相違している。
（５）ファイルを移動するWindows API関数であるMoveFileExが呼び出され、移動元の移動先が同じでファイル名が変更される。
（ｃ）ランサムウェアCERBERの分析
プログラムのデバッグを支援するプログラムであるデバッガ（Debugger）を用いてランサムウェアCERBERの動作を分析した。
【０１０６】
ランサムウェアCERBERは、まずファイルを検索するWindows API関数であるFindFirstFile、FindNextFileにより、端末内のファイルを検索し、特定の拡張子を持つファイルを暗号化対象ファイルとして、そのリストをあらかじめ作成する。
【０１０７】
次に、リスト化した暗号化対象ファイルを、Windows API関数であるCreateFileWにより順に開いたのち、Windows API関数であるReadFileによりファイルを一度読み出し、その後、Windows API関数であるWriteFileによりファイルにデータを書き込むことにより暗号化を行う。更に、WriteFileによるデータの書き込みにより暗号化が終了すると、Windows API関数であるMoveFileWにより、同一フォルダにファイルを移動、すなわちファイル名の変更が行われる。
【０１０８】
図１４は、ランサムウェアCERBERがファイルを暗号化する際の様子を示すデバッガの画面のキャプチャである。
【０１０９】
最初の図１４（ａ）のキャプチャは、Windows API関数であるCreateFileWにより、ファイル"C:\Python27\Lib\unittest\test\test_assertions.py"が開かれていることを示している。
【０１１０】
次の図１４（ｂ）のキャプチャは、Windows API関数であるReadFileにより、CreatFileWで開いたファイルを読み込むことを示している。
【０１１１】
更に次の図１４（ｃ）のキャプチャは、Windows API関数であるWriteFileにより、CreatFileWが開いたファイルにデータを書き込むことを示している。
【０１１２】
更に次の図１４（ｄ）のキャプチャは、Windows API関数であるMoveFileWが呼び出され、CreatFileWが開いたファイルのファイル名を変更されたことを示している。
【０１１３】
以上のことから、ランサムウェアCERBERの暗号化時のファイル操作に関する挙動は、次の通りであることがわかった。
（１）ファイル検索のWindows API関数であるCreateFileが呼び出される。
（２）CreateFileの対象ファイルに、ファイルを読み出すWindows API関数であるReadFileと、ファイルにデータを書き込むWindows API関数であるWriteFileが呼び出される。
（３）CreateFileの対象ファイルのヘッダが、ランサムウェアCERBERのアクセス前後で相違している。
（４）ファイルを移動するWindows API関数であるMoveFileExが呼び出され、移動元の移動先が同じでファイル名が変更される。
（ｄ）ランサムウェアTeslaCryptの分析
プログラムのデバッグを支援するプログラムであるデバッガ（Debugger）を用いてランサムウェアTeslaCryptの動作を分析した。
【０１１４】
ランサムウェアTeslaCryptは、まずファイルを検索するWindows API関数であるFindFirstFile、FindNextFileにより、Ｃドライブ直下から端末内のファイルを検索する。暗号化対象ファイルである特定の拡張子を持つファイルが存在した場合、Windows API関数であるCreateFileWにより開いたのち、Windows API関数であるReadFileを複数回実行してメモリ上にファイルを読み出し、そのメモリ上のファイルを暗号化し、その後、Windows API関数であるWriteFileを複数回実行して、暗号化対象ファイルを上書きする。
【０１１５】
図１５は、ランサムウェアTeslaCryptがファイルを暗号化する際の様子を示すデバッガの画面のキャプチャである。
【０１１６】
最初の図１５（ａ）のキャプチャは、Windows API関数であるFindFirstFile、FindNextFileにより、Ｃドライブ直下から端末内のファイルを検索していくことを示している。
【０１１７】
次の図１５（ｂ）のキャプチャは、Windows API関数であるCreateFileWにより、ファイル"C:\Users\test\Desktop\おとり.png"が開かれていることを示している。
【０１１８】
更に次の図１５（ｃ）のキャプチャは、Windows API関数であるReadFileにより、CreatFileWが開いたファイルを複数回にわけて読み出すことを示している。
【０１１９】
更に次の図１５（ｄ）のキャプチャは、Windows API関数であるWriteFileにより、CreatFileWが開いたファイルにデータを複数回にわけて書き込むことを示している。
【０１２０】
図１６は、ランサムウェアTeslaCryptにより暗号化される前と後のファイル"C:\Users\test\Desktop\おとり.png"のヘッダを示す。図１６（ａ）が、ランサムウェアTeslaCryptoにより暗号化される前のヘッダであり、図１６（ｂ）が、ランサムウェアTeslaCryptoにより暗号化された後のヘッダである。
【０１２１】
図１６に示すように、ファイル"おとり.png"の先頭から末尾までの全てのバイトの部分が書き換えられている。少なくとも、バイナリファイルであれば、ファイルの種類や、サイズ、ファイルの種類に応じた各種情報の情報を表す「ヘッダ」と呼ばれる部分（通常、先頭から数バイトから数十バイト）が書き換えられている。
【０１２２】
以上のことから、ランサムウェアTeslaCryptの暗号化時のファイル操作に関する挙動は、次の通りであることがわかった。
（１）ファイル検索のWindows API関数であるFindFirstFile、FindNextFileが呼び出される。
（２）ファイル検索のWindows API関数であるCreateFileが呼び出される。
（３）CreateFileの対象ファイルに、ファイルを読み出すWindows API関数であるReadFileと、ファイルにデータを書き込むWindows API関数であるWriteFileが呼び出される。
（４）CreateFileの対象ファイルのヘッダが、ランサムウェアTeslaCryptのアクセス前後で相違している。
【０１２３】
（本発明の原理）
本願発明者等は、これら４種類のランサムウェアの分析結果から、ファイルを暗号化する際のファイル操作の挙動に、次のような共通する挙動があることに気がついた。
（１）ファイルを開くWindows API関数であるCreateFileが呼び出される。
（２）CreateFileの対象ファイルに、Windows API関数であるReadFile、WriteFileが１回以上呼び出される。
（３）CreateFileの対象ファイルのヘッダが変化している。
【０１２４】
一般のアプリケーションで、このような挙動をするものは想定しにくく、ランサムウェア特有の挙動である。
【０１２５】
そこで、本願発明者等は、このような挙動を検出することにより、ファイルを暗号化しようとする未知のランサムウェアを確実に検出し、未知のランサムウェアによる攻撃を有効に阻止することができると考え、本発明を着想するに至った。
【０１２６】
［第１実施形態］
本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法について図１７乃至図４３を用いて説明する。
【０１２７】
（本実施形態の概要）
本実施形態の概要について図１７及び図１８を用いて説明する。
【０１２８】
本実施形態では、ハードディスク２２に保存されたユーザーデータへアクセスするという挙動を有するプログラムの全ての挙動が検出対象である。
【０１２９】
ＣＰＵ２１がメモリ２３上のＯＳデータのプロセスを実行して、ハードディスク２２に格納されたプログラムにアクセスして、そのプログラムを読み込み（図２（ｃ））、ハードディスク２２に格納されたプログラムがメモリ２３にロードされ、メモリ２３上にプロセスとして展開される（図３（ａ））前に、メモリ２３に本発明プログラムのプロセスを常駐させておく（図１７（ａ））。
【０１３０】
本発明プログラムは、ランサムウェアが導入される危険性のある状態となる前であればいつ実行してメモリ２３上にプロセスとして常駐させてもよい。
【０１３１】
例えば、スタートアッププログラムとして、コンピューターの起動時に起動させておく。Windows OSには、ＰＣの起動と共に実行されるプログラムとして「スタートアッププログラム」が登録できる仕組みがある。本実施形態では、その仕組みを利用し本発明プログラムをスタートアッププログラムとして登録しておく。これにより、本発明プログラムがＰＣの起動直後からメモリ２３上に配置している状態にする。
【０１３２】
また、ＰＣの起動時にプログラムを起動する方法としては、レジストリやサービスの仕組みを使用する方法もあるが、いずれの方法を用いてもよい。
【０１３３】
これにより、ＰＣの起動直後から常にコンピューターをランサムウェアから保護することができる。
【０１３４】
本発明プログラムは、図１７（ａ）に示すように、ハードディスク２２に格納されたプログラムがメモリ２３にロードするという動作と、ＣＰＵ２１がプログラムを実行するという動作との間に割り込む。ＣＰＵ２１によるプログラムに基づく動作をフックすることにより、プログラムが実行される直前で、そのプログラムの挙動を本発明プログラムの監視下に置く。
【０１３５】
これにより、これ以降、監視対象プログラムの全ての挙動は、本発明プログラムが実行直前に把握することができる。必要に応じて、監視対象プログラムの処理に機能を加えたり、変更したりすることができる。
【０１３６】
本発明プログラムにより、監視対象プログラムの挙動が、ランサムウェア特有の挙動であると判断された場合には、図１７（ｂ）に示すように、本発明プログラムは、監視対象プログラムがハードディスク２２内のファイルにアクセスを行おうとする直前に、そのアクセスをブロックする。このようにして、未知のランサムウェアによる攻撃をブロックしてファイルの暗号化を阻止する。
【０１３７】
本発明プログラムは３つの機能を有する。本発明プログラムの３つの機能について図１８を用いて説明する。
【０１３８】
第１の機能は、現在動作中のプログラムや、後ほど起動するプログラムである監視対象プログラムが使用するWindows APIをフックする機能である。図１８に示すように、本発明プログラムから、現在起動中のプロセス、すなわち、notepad.exe、WINWORD.exe、calc.exe、Ramsomware.exe、cmd.exe、…のプロセスが使用するWindows APIをフックする。
【０１３９】
第２の機能は、フックしたWindows APIにより、監視対象プログラムの挙動を本発明プログラムに通知、問い合わせをして、その結果に基づいて監視対象プログラムがランサムウェアであるか判断する機能である。
【０１４０】
第３の機能は、フックしたWindows APIからの通知の受領、記録、問い合わせに応答する機能である。
【０１４１】
第１の機能と第３の機能は、常駐している本発明プログラムの機能であり、第２の機能は、監視対象プログラム内に組み込まれる本発明プログラムの機能である。
【０１４２】
（フック対象のWindows API関数）
本発明プログラムは、監視対象プロセスにおいて、ランサムウェアの分析結果から得られた共通の挙動であるWindows API関数をフックすることにより、ランサムウェアの検知および防御を実現する。
【０１４３】
ランサムウェアの共通の挙動であるWindows API関数とは、本発明の原理で指摘したように、CreateFile（ファイル作成関数（ファイルハンドル取得関数））、（ファイル生成関数）、ReadFile（ファイル読出関数）、WriteFile（ファイル書込関数）である。
【０１４４】
本実施形態では、共通のWindows API関数である、ファイルを開きファイルハンドルを取得するためのCreateFile（ファイル生成関数）はフック対象とせず、ReadFile（ファイル読出関数）、WriteFile（ファイル書込関数）のみをフック対象としている。それは次のような理由からである。
【０１４５】
まず、共通のWindows API関数である、ReadFile（ファイル読出関数）、WriteFile（ファイル書込関数）を実行するためには、ファイルのハンドルを取得することは事前に必須の処理であるので、ReadFile（ファイル読出関数）、WriteFile（ファイル書込関数）をフック対象とするだけで、ファイルのハンドルを取得することを検出できる。
【０１４６】
また、ファイルのハンドルを取得するためには、CreateFile（ファイル生成関数）以外のWindows API関数、例えば、OpenFile（ファイルオープン関数）でも実現可能であるので、CreateFile（ファイル生成関数）はファイルのハンドルを取得するために必須のWindows API関数とは言えない。
【０１４７】
（HookReadFile）
HookReadFileは、ReadFile（ファイル読出関数）をフックするWindows API関数である。
【０１４８】
HookReadFileは、通常のReadFileの動作に加えて、本発明プログラムに対して、次の情報（ａ）〜（ｃ）を通知する機能を付加したWindows API関数である。
【０１４９】
通知手段としては、プロセス間通信等、プロセスの動作に大きな遅延を発生させない程度の高速な手法が望ましい。ソケット通信やファイルによる受け渡し等でも、高速に実現できる環境であれば、いかなる方法でもよい。
（ａ）通知元ＡＰＩ名。フックするWindows API関数の名前であるReadFileである。
（ｂ）自身のプロセスＩＤ。フックするReadFileを呼び出す監視対象プロセスのプロセスＩＤである。
（ｃ）ReadFileの対象ファイルパス。通知元ＡＰＩであるReadFileのパラメータに指定されたファイルハンドルを示すファイルパスである。
【０１５０】
ここで「ファイルパス」とは、その「ファイル」を保存している「フォルダ」に辿り着くまでに階層を重ねたフォルダの「経路（path）」を含めたものである。例えば、ハードディスクの「Ｃドライブ」上のフォルダ「Users」内のフォルダ「user」内のフォルダ「Desktop」内にあるファイル「note.doc」の「ファイルパス」は次の通りである。
【０１５１】
C:\Users\user\desktop\note.doc
また、ファイルパス（C:\Users\user\desktop\note.doc）からファイル名（note.doc）を除いたファイルパス（C:\Users\user\desktop\）のことを「フォルダパス」と言う。
【０１５２】
HookReadFile（ReadFileのフック関数）から通知を受けた本発明プログラムは、通知された内容、すなわち、ＡＰＩ名、プロセスＩＤ、ファイルパスを、順次、通知記録データとしてメモリ２３に保存する。この通知記録データは、後述するHookWriteFile（WriteFileのフック関数）において使用される。
【０１５３】
なお、オペレーティングシステムではプロセスＩＤを再利用する機能があるので、長時間継続していると、異なるプロセスに対して偶発的に同じプロセスＩＤが割り当てられる可能性がある。このような偶発的なプロセスＩＤの一致によるランサムウェアの誤検知を防止するため、通知記録データを定期的にクリアすることが望ましい。
【０１５４】
通議記録データの定期的クリアの間隔は任意であるが、長くともオペレーティングシステムの終了時または再起動時にはクリアすることが望ましい。クリア間隔をユーザーが設定できるようにしてもよい。
【０１５５】
図１９に上述したHookReadFileによる動作のイメージを示す。図１９左部に監視対象プログラムのプロセスを示し、図１９右部に本発明プログラムのプロセスを示す。
【０１５６】
図１９左側の監視対象プログラムのプロセスには、本発明プログラムのフック機能であるHookReadFileが組み込まれている。組み込まれたHookReadFileは、通常のReadFileの動作に加えて、（ａ）通知元ＡＰＩ名、（ｂ）自身のプロセスＩＤ、（ｃ）ReadFile対象ファイルパスを、図１９右側の本発明プロセスに通知する。
【０１５７】
図１９右側の本発明プログラムのプロセスは、HookReadFileからの通知への対応を行う。図１９左側のHookReadFileからの通知を受け取り、通知記録データとして順次記録する。
【０１５８】
図１９では、HookReadFileは、（ａ）通知元ＡＰＩ名、（ｂ）自身のプロセスＩＤ、（ｃ）ReadFile対象ファイルパスとして、（ａ）[ReadFile]と（ｂ）pid:3421と（ｃ）filename:c:\Users\user\Desktop\note.docの組；（ａ）[ReadFile]と（ｂ）pid:1568と（ｃ）filename:c:\Users\user\Documents\schedule.xlsの組；（ａ）[ReadFile]と（ｂ）pid:1568と（ｃ）filename:c:\Users\user\Documents\schedule.xlsの組；・・・・を順次通知し、本発明プログラムは順次通知されたものを通知記録データとして記録している。
【０１５９】
（HookWriteFile）
HookWriteFileは、WriteFile（ファイル書込関数）をフックするWindows API関数である。
【０１６０】
HookWriteFileは、通常のWriteFileの動作に加えて、次の機能を付加したWindows API関数である。
【０１６１】
WriteFileに指定されたパラメータ及びパラメータから取得できる情報が、後述する「ランサムウェアによるファイル暗号化操作であることの判断基準」に合致した場合、ランサムウェアによるファイル暗号化操作であると判断し、WriteFileによるデータ書き込みを行わずにプロセスを終了させる機能。
【０１６２】
上記の「ランサムウェアによるファイル暗号化操作であることの判断基準」とは、次の条件（Ａ）〜（Ｃ）を満足することである。
【０１６３】
条件（Ａ）：WriteFileの書き込み対象に指定されたファイルハンドルのファイルポインタの現在位置を取得し、その現在位置が先頭またはヘッダ範囲内であること。ファイルポインタの現在位置はSetFilePointer関数を使用する等で取得可能である。
【０１６４】
条件（Ｂ）：WriteFileの呼び出しにより書き換え前後でデータが変化すること。
【０１６５】
条件（Ｃ）：本発明プログラムに問い合わせた結果、WriteFileが呼び出し時に指定されたファイルに対して、既に自身のプロセスから ReadFileが呼び出されていること。
【０１６６】
条件（Ａ）と条件（Ｂ）により、ファイルの先頭またはヘッダ範囲内情報が変化しているかを判断する。
【０１６７】
条件（Ｃ）を含めたのは次の理由である。
【０１６８】
一般的なファイルの暗号化手順では、プログラムの実装方法として、ReadFileで読み取った内容を暗号化した後、WriteFileで別のファイルに直接書き込む手法がとられる。しかし、今回分析したランサムウェアにおいては、そのような手法をとらず、あえて ReadFileで読み込んだファイルをWriteFileで書き換え、その後にリネームするといった動作を行っていた。これは、フォレンジック技術によるファイルの復元を防止するためと考えられる。ReadFileで読み込んだファイルをあえてWriteFileで上書きすることで、ディスク上のデータを上書きするため、フォレンジック技術を用いた方法でも、ファイルの復元ができなくなる可能性が高い。ランサムウェアの作者はあえてその状況を狙っているものと考えられる。本発明プログラムでは、この挙動を検知条件のひとつとしているため、このようなランサムウェアの特性に非常に効果的である。
【０１６９】
この付加した機能により、HookWriteFile（WriteFileのフック関数）内で、呼び出し元プロセスがランサムウェアかどうかを判断し、ランサムウェアである場合、ファイル暗号化の防止、ランサムウェア検知の通知、ランサムウェアのプロセスの強制終了を行うことができる。
【０１７０】
条件（Ａ）のイメージを図２０に示す。
【０１７１】
図２０（ａ）（ｂ）左部はメモリ２３上の監視対象プログラムのプロセスを示し、図２０（ａ）（ｂ）右部はハードディスク２２上の書き込み対象ファイルを示す。
【０１７２】
メモリ２３上の監視対象プロセスに組み込まれたHookWriteFileから、ハードディスク２２上の書き込み対象ファイルへの書き込み開始位置が指定される。
【０１７３】
図２０（ａ）の場合、ハードディスク２２上の上側の書き込み対象ファイルに対する書き込み開始位置"0x00000020"はファイルの先頭ではなく、下側の書き込み対象ファイルに対する書き込み開始位置"0x00000000"はファイルの先頭である。書き込み開始位置がファイルの先頭である下側の書き込み対象ファイルへの書き込みが条件（Ａ）を満足し、ランサムウェアによる書き込みの可能性があると判断する。
【０１７４】
図２０（ｂ）の場合、ハードディスク２２上の上側の書き込み対象ファイルに対する書き込み開始位置"0x00000024"はファイルのヘッダの範囲内でなく、下側の書き込み対象ファイルに対する書き込み開始位置"0x00000004"はファイルの先頭ではないがヘッダの範囲内である。書き込み開始位置がファイルのヘッダの範囲内である下側の書き込み対象ファイルへの書き込みが条件（Ａ）を満足し、ランサムウェアによる書き込みの可能性があると判断する。
【０１７５】
なお、ヘッダの範囲内であるかを判断するためには、ファイルの各拡張子に対するヘッダのサイズが予め分かっている必要がある。各拡張子に対応するヘッダのサイズは予めHookWriteFile（WriteFileのフック関数）内に保持しておく。例えば、拡張子が"pdf"であるＰＤＦファイルでは先頭から５バイトがヘッダである。
【０１７６】
条件（Ｂ）のイメージを図２１に示す。
【０１７７】
図２１左部はメモリ２３上の監視対象プログラムのプロセスを示し、図２１右部はハードディスク２２上の書き込み対象ファイルを示す。
【０１７８】
メモリ２３上の監視対象プロセスに組み込まれたHookWriteFileが書き込もうとする書き込み予定データと、ハードディスク２２上の書き込み対象ファイルの書き込み前の状態のデータとを比較する。
【０１７９】
図２１の場合、HookWriteFileが書き込もうとする書き込み予定データ"00 AA 00 BB 00 CC 00 DD 00 EE 00 FF 00 00 08 00"と、ハードディスク２２上の書き込み対象ファイルの書き込み前の状態のデータ"50 4B 03 04 14 00 06 00 08 00 00 00 21 00 A3 EF"とは相違するので、条件（Ｂ）を満足し、ランサムウェアによる書き込みの可能性があると判断する。
【０１８０】
条件（Ｃ）のイメージを図２２に示す。
【０１８１】
図２２（ａ）左部にメモリ２３上の監視対象プログラムのプロセスを示し、図２２（ａ）右部にメモリ２３上の本発明プログラムのプロセスを示す。
【０１８２】
図２２（ａ）左部の監視対象プロセスに組み込まれたHookWriteFileは、自身（監視対象プロセス）のプロセスＩＤと、WriteFileの対象ファイルパスに基づいて、図２２（ａ）右部の本発明プログラムのプロセスに対して、ReadFileの通知記録データ中に、同一プロセスＩＤ、同一対象ファイルパスのReadFileの記録があるか否かを問い合わせる。図２２右側の本発明プログラムは、同一プロセスＩＤ、同一対象ファイルパスのReadFileの記録があるか否かをHookWriteFileに応答する。
【０１８３】
図２２（ａ）の場合、監視対象プロセスに組み込まれたHookWriteFileからプロセスＩＤ"pid:1568"とファイルパス"C:\Users\user\Documents\schedule.xls"に基づいて、ReadFileの通知記録データに対して問い合わせる。
【０１８４】
図２２（ｂ）にReadFileの通知記録データを示す。
【０１８５】
ReadFileの通知記録データの第４〜６行、第７〜９行、第１３〜１５行に、HookWriteFileのプロセスＩＤ"pid:1568"、ファイルパス"C:\Users\user\Documents\schedule.xls"と同一である、プロセスＩＤ"pid:1568"、ファイルパス"C:\Users\user\Documents\schedule.xls"のReadFileの記録があるので、条件（Ｃ）を満足し、ランサムウェアによる書き込みの可能性があると判断する。
【０１８６】
その結果、図２２（ａ）右側の本発明プログラムは、同一プロセスＩＤ、同一対象ファイルパスのReadFileの記録があった旨をHookWriteFileに応答する。
【０１８７】
（除外リスト）
本発明プログラムを、システム上において動作する全てのプロセスから呼び出される全てのReadFile、WriteFileをフックし、そのプロセスがランサムウェアである否かを判断することは、システムに新たな負荷を加えることになる。
【０１８８】
そこで、本実施形態では、明らかにランサムウェアではないプログラムを予め登録した「除外リスト」を作成しておき、除外リストに登録されたプログラムに対しては、本発明プログラムを実行しないようにする。
【０１８９】
図２３に除外リストの具体例を示す。
【０１９０】
除外リストには正規のプログラムを登録する。例えば、システムにインストールされている「プログラム名」「プログラムファイル」「ファイルのフルパス」「ファイルサイズ」「ハッシュ値」「デジタル著名」等を必要に応じて登録する。
【０１９１】
図２３では、正規のプログラムとして、「インターネットエクスプローラー」「ＭＳワード」「ＭＳエクセル」を登録している。
【０１９２】
除外リストは、システムへのプログラムをインストールするたびに更新し、ハードディスク２２上に格納しておく。本発明プログラムの起動時に除外リストの内容を読み込むようにする。
【０１９３】
本発明プログラムの動作後、読み込んだ除外リストの情報はメモリ２３上にマッピングされる。突然のマシントラブルでメモリ情報が揮発しても内容を失わないよう、ハードディスク２２上のファイルに対して常に更新しておくことがよい。
【０１９４】
また、除外リストのファイルは、マルウェアやランサムウェアによる編集を避けるため、暗号化しておくことが望ましい。
【０１９５】
（ユーザーによる除外リストへの追加）
「ランサムウェアによるファイル暗号化操作であることの判断基準」の条件（Ａ）は、HookWriteFileからの書き込み対象ファイルへの書き込み開始位置が先頭又はヘッダ範囲内であることである。この条件（Ａ）は、監視対象プログラムがファイルのヘッダを書き換えるものであるかを判断するための条件である。監視対象プログラムがファイルのヘッダを書き換える場合には、監視対象プログラムがランサムウェアの可能性があると判断する。監視対象プログラムがファイルのヘッダ以外の部分を書き換える場合には、通常の書き換え処理でありランサムウェアの可能性がないと判断する。
【０１９６】
一般的に、コンピューターが扱うファイルは「テキストファイル（テキスト形式）」と「バイナリファイル（バイナリ形式）」の２種類に分類される。
【０１９７】
バイナリファイル、例えば、拡張子が"doc"、"ppt"、"exe"、"pdf"、"jpg"、"bmp"等のファイルは、通常、ファイル種別に応じたヘッダ情報を有している。バイナリファイルの内容を編集して変更し上書き保存した場合でも、通常、ヘッダ情報となるファイルの先頭部分は変更されず、データ部分が変更される。バイナリファイルのヘッダが書き換えられると、そのファイルは適切に開けなくなり、通常のアプリケーションではそのようなことは行われない。したがって、ファイルのヘッダを書き換えるプログラムはランサムウェアの可能性がある。
【０１９８】
ファイルの先頭部分のヘッダを書き換えるような処理を行うアプリケーションも存在するが、その場合には、ヘッダの書き換えに応じて、ファイルの拡張子も変更されてファイル種別が変更される。拡張子を含むファイル名が変わらないままで、ヘッダを書き換えることは通常のアプリケーションでは行われない。したがって、ファイル名が変わらないままで、ファイルのヘッダを書き換えるプログラムはランサムウェアの可能性がある。
【０１９９】
一方、テキストファイル、例えば、拡張子が"txt"、"csv"等のファイルは、通常、ファイル種別に応じたヘッダ情報を有していない。テキストファイルの場合、ファイルの先頭部分もデータ部分である。したがって、テキストファイルが先頭部分から書き換えられていても、それがランサムウェアによる暗号化か、通常のアプリケーションにより書き換えかを判断することは困難である。
【０２００】
本発明プログラムでは、ファイルの拡張子に基づいて、テキスト形式のファイルであると判断された場合は、その対応をユーザーの判断にゆだねるようにする。
【０２０１】
図２４は、テキスト形式のファイルの書き換えを検出した場合の警告画面である。
【０２０２】
警告画面では「以下のプロセスがテキストファイルの改変挙動を行っています。どう処理しますか。」と尋ね、「プロセス名：AAATextEditor.exe」、「該当挙動：ファイル内容の改変」、「対象ファイル：C:\Users\test\Desktop\議事録.txt」、「書き込み内容："[議事録]\n 出席者：佐藤・・・"」を示す。
【０２０３】
更に「※現在の操作に心当たりのないプロセスおよびファイルである場合、ランサムウェアによるファイルの暗号化処理の可能性があります。」と警告し、その対応処理の選択ボタン「プロセスを終了」、「この警告を放置」、「プロセスを除外に追加」を示す。
【０２０４】
ユーザーが「プロセスを終了」を選択した場合には、プロセス"AAATextEditor.exe"を直ちに終了させる。ユーザーが、そのプロセスをランサムウェアであると判断した場合である。
【０２０５】
ユーザーが「この警告を放置」を選択した場合には、プロセス"AAATextEditor.exe"を終了させることなく、そのまま処理を続行する。ユーザーが、そのプロセスをランサムウェアであるか否か判断できない又は判断を保留する場合である。
【０２０６】
ユーザーが「プロセスを除外に追加」を選択した場合には、プロセス"AAATextEditor.exe"を、図２５に示すように、「除外リスト」に追加し、同じプロセスに対する警告を再度行わないようにする。ユーザーが、そのプロセスはランサムウェアでないと判断した場合である。
【０２０７】
なお、監視対象プログラムからの除外リスト（ホワイトリスト）の参照および追加は、直接ハードディスク２２上のファイルへアクセスするよう実装してもよいし、一度常駐プログラムを経由してアクセスするように実装してもよい。
【０２０８】
（対処行動）
本発明プログラムが、監視対象プログラムをランサムウェアであると判断した場合の対処行動について説明する。
【０２０９】
監視対象のプログラムをランサムウェアであると判断した場合には、WriteFileによるファイルへの書き込みは行わず、監視対象プログラムによるプロセスを強制終了する。
【０２１０】
プロセスの強制終了は、WriteFileをフックしているHookWriteFile関数内で行う。一般的には、ExitProcess関数や、Exit関数等を用いることで実現できるが、プロセスを終了可能な命令であればいかなるものを使用してもよい。
【０２１１】
プロセスの強制終了により、ランサムウェアによるファイルの暗号化を防ぐことができる。プロセスの強制終了では、当該ファイルは暗号化されないため、事前のファイルのバックアップ等も不要である。
【０２１２】
なお、直ちにプロセスを終了させることにより不都合が生じる可能性のある環境においては、例えば、ユーザーに強制終了予定であることを事前に通知し、強制終了するか否かの判断を仰ぐようにしてもよい。また、後述する「付加機能による検出精度のコントロール」の機能を用いて対応するようにしてもよい。
【０２１３】
（HookReadFileとHookWriteFile）
図２６に、本発明プログラムによるHookReadFileによる動作とHookWriteFileによる動作のイメージをまとめて示す。
【０２１４】
図２６左部に監視対象プログラムのプロセスを示し、図２６右部に本発明プログラムのプロセスを示す。
【０２１５】
図２６左側の監視対象プログラムのプロセスには、本発明プログラムのフック機能であるHookReadFileとHookWriteFileが組み込まれている。
【０２１６】
組み込まれたHookReadFileは、通常のReadFileの動作に加えて、（ａ）通知元ＡＰＩ名、（ｂ）自身のプロセスＩＤ、（ｃ）ReadFile対象ファイルパスを、図１９右側の本発明プロセスに通知する。
【０２１７】
図２６右側の本発明プログラムのプロセスは、図２６左側のHookReadFileからの通知を受け取り、通知記録データとして順次記録する。
【０２１８】
組み込まれたHookWriteFileは、自身（監視対象プロセス）のプロセスＩＤと、WriteFileの対象ファイルパスに基づいて、図２６右部の本発明プログラムのプロセスに対して、ReadFileの通知記録データ中に、同一プロセスＩＤ、同一対象ファイルパスのReadFileの記録があるか否かを問い合わせる。図２６右側の本発明プログラムは、同一プロセスＩＤ、同一対象ファイルパスのReadFileの記録があるか否かをHookWriteFileに応答する。
【０２１９】
組み込まれたHookWriteFileは、更に、書き換え対象ファイルがテキストファイルの場合にユーザーに通知し、その対処方法の選択肢をユーザーに示す。
【０２２０】
ユーザーにより監視対象プロセスの除外リストへの追加が選択された場合には、除外リストに当該プロセスを追加する。
【０２２１】
ユーザーにより監視対象プロセスの終了が選択された場合には、監視対象プロセスを強制終了する。
【０２２２】
（Windows APIのフック方法）
本発明プログラムが、Windows APIをフックする具体的な方法について、図２７乃至図３４を用いて説明する。
【０２２３】
すべてのWindowsプログラムは、起動するとそれぞれのプロセス空間（メモリ空間）と呼ばれる仮想メモリ上に配置される仕組みとなっている。
【０２２４】
それぞれのプロセス空間には、マルウェアのプロセス空間の状態を拡大して表示した図２７に示すように、Import Address Table（ＩＡＴ）という項目があり、ＩＡＴ にはプログラムが使用する関数（ＡＰＩ）の一覧とそれに応じたメモリアドレス（番地）が記録されている。これはプログラムが動作する際に、どういった関数がどこのメモリに読み込まれているかを把握するための一般的な仕組みである。
【０２２５】
この前提のもとフック制御を行う方法について記述する。
【０２２６】
まず、図２８に示すように、監視対象プログラムのプロセス空間に、フック用の WriteFile関数（HookWriteFile関数）を埋め込む。自分以外の他のプロセスにコードを注入する、すなわち、コードをインジェクションするには、そのプロセスのメモリ空間において、VirtualAllocEx関数というWindows APIを利用し、まだ使用されていない領域に一定サイズのメモリ領域を確保する。図２８右部の網掛け部分がそのメモリ領域である。
【０２２７】
次に、図２９に示すように、WriteProcessMemoryというWindows APIを利用し、確保したメモリ領域に実行させたいコード、ここではHookWriteFile関数本体、および、その HookWriteFile関数を監視対象プログラムのプロセス空間内のＩＡＴへ組み込むための関数Ａを書き込む。この動作を図２９の太線矢印で示す。なお、確保したメモリ領域の具体的なアドレスはVirtualAllocExの戻り値を確認することで取得することができる。
【０２２８】
次に、図３０に示すように、書き込んだコード（関数Ａ）を実行させるために CreateRemoteThreadというWindows APIを呼び出すことにより、その任意のコードをマルウェアのプロセス空間上で実行することができる。この動作を図３０の太線矢印で示す。
【０２２９】
ここで、監視対象プログラムのプロセス空間のみに注目すると、図３１に示すようになる。
【０２３０】
次に、図３２に示すように、CreateRemoteThreadにより、関数Ａが実行されると、関数 Ａは、監視対象プログラムのプロセス空間のＩＡＴにおける、正規のWriteFile関数のアドレス（図３２ではアドレス"0x46700000"番地）を、HookWriteFile関数のアドレス（図３２ではアドレス"0x49000000"番地）へ書き換える。これでフックの事前処理が完了する。
【０２３１】
なお、どの関数がどのアドレスに展開されているか、すなわち、ＩＡＴにあるその関数に対応するアドレス、を知るには、GetProcAddressというWindows APIの引数に関数名を渡すことで、指定した関数がプロセス空間のどのアドレスに対応づけられているのか、具体的なアドレスを知ることができる。
【０２３２】
次に、図３３及び図３４に示すように、監視対象プログラムが、例えば"0x3C0"というファイルハンドルの指すファイル内容を書き換えようとしたと仮定する。その場合、WriteFile関数が呼び出されると、監視対象プログラムは自身のプロセス空間内のＩＡＴを参照した結果、正規の WriteFile関数ではなく、HookWriteFile関数に"0x3C0"というパラメータを渡すことになる。
【０２３３】
HookWriteFile関数の内部では、任意の処理を行うことが可能である。具体的には、本来WriteFileを使用して書き込むデータの内容を事前にチェックする、変更する等である。本発明プログラムにおけるHookWriteFile関数の内容は、前述のとおりである。
【０２３４】
（付加機能による検出精度のコントロール）
本発明プログラムが監視対象プログラムをランサムウェアであると判断した場合には、ランサムウェアによるファイルの暗号化を防ぐため、監視対象プログラムによるプロセスを強制終了する。
【０２３５】
しかしながら、環境によっては、直ちにプロセスを強制終了させることにより不都合が生じる場合がある。そこで、本発明プログラムに付加機能を設けて、ランサムウェアの検出精度をコントロールするようにする。
【０２３６】
（HookFindNextFileによるコントロール）
HookFindNextFileは、FindNextFile（ファイル検索関数）をフックするWindows API関数である。
【０２３７】
ReadFile（ファイル読出関数）をフックするHookReadFile、WriteFile（ファイル書込関数）をフックするHookWriteFileに加えて、HookFindNextFileによりFindNextFile（ファイル検索関数）をフックするようにして、ランサムウェアの検出精度を向上させる。
【０２３８】
FindFirstFileとFindNextFileは、ファイルの検索や列挙に使用するWindows API関数であり、通常、セットで使用される。
【０２３９】
図３５に、FindFirstFileとFindNextFileによる動作を示す。
【０２４０】
まず、場所を指定してFindFirstFileを呼び出すと、その場所の最初のファイルの情報がシステムから応答され、最初のファイルの情報（AAA.txt）が取得できる。
【０２４１】
次に、FindNextFileを呼び出すと、FindFirstFileにより取得したファイルハンドルから、その場所の次のファイルの情報（BBB.pdf）が取得できる。
【０２４２】
以降、FindNextFileを呼び出すことにより、その場所の更に次のファイルの情報（CCC.txt、DDD.exe、…）を順次取得できる。
【０２４３】
したがって、HookReadFile、HookWriteFileによる上述したランサムウェアの検知時に、FindFirstFileやFindNextFileが常に呼び出されている場合には、ランサムウェアが連続してファイルの暗号化を行っていると判断することができる。
【０２４４】
図３６に示すように、まず、FindFirstFileを呼び出し、ある場所の最初のファイルの情報を取得する。続いて、ReadFileとWriteFileを呼び出し、そのファイルの暗号化処理を行う。次に、FindNextFileを呼び出し、その場所の次のファイルの情報を取得する。続いて、ReadFileとWriteFileを呼び出し、そのファイルの暗号化処理を行う。次に、同様に、FindNextFileを呼び出し、その場所の次のファイルの情報を取得する。続いて、ReadFileとWriteFileを呼び出し、そのファイルの暗号化処理を行う。以降、同様な処理を繰り返して、その場所のファイルを連続して暗号化する。
【０２４５】
このようなファイルの連続した暗号化処理を検出するためには、FindNextFileのみをフックして監視すればよい。FindFirstFileは必ずしもフックして監視しなくともよい。
【０２４６】
FindNextFileをフックするHookFindNextFileは、呼び出されると通常のFindNextFileの動作に加えて、本発明プログラムに対して次の情報（ａ）〜（ｃ）を通知する。
【０２４７】
通知手段としては、プロセス間通信等、プロセスの動作に大きな遅延を発生させない程度の高速な手法が望ましい。ソケット通信やファイルによる受け渡し等でも、高速に実現できる環境であれば、いかなる方法でもよい。
（ａ）通知元ＡＰＩ名。フックするWindows API関数の名前であるFindNextFileである。
（ｂ）自身のプロセスＩＤ。フックするFindNextFileを呼び出す監視対象プロセスのプロセスＩＤである。
（ｃ）通知元ＡＰＩであるFindNextFileのパラメータで指定されたデータバッファから取得できるファイル名。データバッファには次のファイルの情報が格納されている。
【０２４８】
したがって、HookReadFile、HookWriteFileによりランサムウェアが検知されたことを条件として、その暗号化処理の前に、FindNextFileが呼び出され、かつ、取得された次のファイル名がReadFileおよびWriteFileの対象ファイルと合致するかどうかを確認することにより、暗号化処理が複数のファイルに対して連続して行われていることを判断することができる。
【０２４９】
上記を判断するためには、例えば、HookReadFile、HookWriteFile、HookNextFileが、それぞれ、本発明プログラムに対して通知する（ａ）通知元ＡＰＩ名、（ｂ）プロセスＩＤ、（ｃ）ファイルパスを、通知記録データに記録しておき、その通知記録データに基づいて判断する。
【０２５０】
図３７に通知記録データの具体例を示す。
【０２５１】
図３７の通知記録データには、第４〜６行に、FindNextFileのプロセスＩＤ"pid:1568"、ファイルパス"C:\Users\user\Documents\schedule.xls"の記録があり、第７〜９行、第１３〜１５行に、ReadFileのプロセスＩＤ"pid:1568"、ファイルパス"C:\Users\user\Documents\schedule.xls"の記録があり、第１０〜１２行、第１６〜１１８行に、WriteFileのプロセスＩＤ"pid:1568"、ファイルパス"C:\Users\user\Documents\schedule.xls"の記録がある。
【０２５２】
FindNextFileのプロセスＩＤとファイルパスは、ReadFileとWriteFileのプロセスＩＤとファイルパスと同一である。WriteFileにより、ファイル"schedule.xls"のヘッダが変更されたことが検出された場合には、暗号化処理が複数のファイルに対して連続して行われていると判断する。
【０２５３】
図３７の通知記録データには、更に、第２２〜３６行に、同じフォルダ
"C:\Users\user\Documents\"内のファイル"description.doc"に対して同様な処理を行っていることが記録されている。WriteFileにより、ファイル"description.doc"のヘッダが変更されたことが検出された場合には、暗号化処理が同一フォルダ内の複数のファイルに対して連続して行われていると判断する。
【０２５４】
暗号化処理が複数のファイルに対して連続して行われているかの判断を有効にするか設定することにより、ランサムウェアによる暗号化処理に対する検知挙動の精度をコントロールすることができる。
【０２５５】
図３８は、複数ファイルに対する暗号化処理を有効にするかの設定画面である。図３８の設定画面の表現方法は一例であり、他の表現方法でもよい
設定画面では、チェックボタンの後に「複数のファイルに対する暗号化処理を検知条件の入れる」を表示すると共に、「チェックを入れない場合は単一ファイルに対する暗号化処理も検知対象に含まれます」との注意書きを表示する。ユーザーがチェックボタンをチェックすることに検知条件を変更することができる。
【０２５６】
例えば、単一のファイルに対する暗号化処理を行う可能性のあるユーザー環境では、この検知条件がないと、正当な暗号化処理をランサムウェアによる処理と誤検知することとなる。このような誤検知、誤検知による過検知を発生させないようにすることができる。
【０２５７】
（HookMoveFileによるコントロール）
HookMoveFileは、MoveFile（MoveFileA、MoveFileW、MoveFileExA、MoveFileExW）（ファイル移動関数）をフックするWindows API関数である。
【０２５８】
ReadFile（ファイル読出関数）をフックするHookReadFile、WriteFile（ファイル書込関数）をフックするHookWriteFileに加えて、HookMoveFileによりMoveFile（ファイル移動関数）をフックするようにして、ランサムウェアの検出精度を向上させる。
【０２５９】
MoveFileは、ファイルの移動及びファイル名の変更を行うためのWindows API関数である。図３９に示すように、MoveFileの第一引数は移動元のファイルパス（ファイル名）であり、第二引数は移動先のファイルパス（ファイル名）である。
【０２６０】
MoveFileの第一引数と第二引数のファイル名を除くファイルパスが異なる場合は、「ファイルの移動」の処理になる。MoveFileの第一引数と第二引数のファイル名を除くファイルパスが同じ場合は、実質的に「ファイル名の変更」の処理となる。
【０２６１】
ランサムウェアには、暗号化対象のファイル名を暗号化後に変更するものがある。これは、暗号化ファイルの元ファイル名を判断不能にするためであり、ファイルの中身だけではなくファイル名も同時に暗号化処理を行う。
【０２６２】
そのようなランサムウェアは、図４０に示すように、ファイルの暗号化処理が行われた直後にMoveFileを呼び出すことで、ファイル名の暗号化も併せて行う。その流れを検知することで、ランサムウェアによるファイル名の暗号化挙動を本発明プログラムが把握することを可能にする。
【０２６３】
図４０に示すように、FindNextFileを呼び出し、その場所の次のファイルの情報を取得する。続いて、CreateFile、ReadFile、WriteFileを呼び出し、そのファイルの暗号化処理を行う。続いて、MoveFileを呼び出し、そのファイルのファイル名を暗号化している。図４０では、MoveFileにより、暗号化されたファイル"ABS.pdf"のファイル名が"g1d4fr.vvv"に変更されている。
【０２６４】
このようなファイル名の暗号化処理を検出するために、MoveFileをフックして監視する。MoveFileをフックするHookMoveFileは、呼び出されると通常のMoveFileの動作に加えて、本発明プログラムに対して次の情報（ａ）〜（ｃ）を通知する。
【０２６５】
通知手段としては、プロセス間通信等、プロセスの動作に大きな遅延を発生させない程度の高速な手法が望ましい。ソケット通信やファイルによる受け渡し等でも、高速に実現できる環境であれば、いかなる方法でもよい。
（ａ）通知元ＡＰＩ名。フックするWindows API関数の名前であるMoveFileである。
（ｂ）自身のプロセスＩＤ。フックするMoveFileを呼び出す監視対象プロセスのプロセスＩＤである。
（ｃ）通知元ＡＰＩであるMoveFileの第一引数と第二引数で指定されたファイルパス。
【０２６６】
したがって、HookReadFile、HookWriteFileによりランサムウェアが検知されたことを条件として、その暗号化処理の後に、MoveFileが呼び出され、かつ、MoveFileの第一引数と第二引数のパス（ファイルパスからファイル名を除いたファイルパス）が同一であるかどうかを確認することにより、ファイル名に対する暗号化処理が行われていることを判断することができる。
【０２６７】
上記を判断するためには、例えば、HookReadFile、HookWriteFileが、それぞれ、本発明プログラムに対して通知する（ａ）通知元ＡＰＩ名、（ｂ）プロセスＩＤ、（ｃ）ファイルパス、MoveFileが、それぞれ、本発明プログラムに対して通知する（ａ）通知元ＡＰＩ名、（ｂ）プロセスＩＤ、（ｃ）第一引数のファイルパス、（ｄ）第二引数のファイルパスを、通知記録データに記録しておき、その通知記録データに基づいて判断する。
【０２６８】
図４１に通知記録データの具体例を示す。
【０２６９】
図４１の通知記録データには、第４〜６行、第１０〜１２行に、ReadFileのプロセスＩＤ"pid:1568"、ファイルパス"C:\Users\user\Documents\schedule.xls"の記録があり、第７〜９行、第１３〜１５行に、WriteFileのプロセスＩＤ"pid:1568"、ファイルパス"C:\Users\user\Documents\schedule.xls"の記録があり、第１６〜１９行に、MoveFileのプロセスＩＤ"pid:1568"、第一引数ファイルパス"C:\Users\user\Documents\schedule.xls"、第二引数ファイルパス"C:\Users\user\Documents\g1d4fr6ps.vvv"の記録がある。
【０２７０】
MoveFileのプロセスＩＤは、ReadFileとWriteFileのプロセスＩＤと同一であり、MoveFileの第一引数のファイルパスは、ReadFileとWriteFileのファイルパスと同一であり、MoveFileの第１引数のパスと第２引数のパスは同一である。WriteFileによりファイル"schedule.xls"のヘッダが変更されたことが検出された場合には、"schedule.xls"が暗号化処理され、かつ、"schedule.xls"のファイル名も"g1d4fr6ps.vvv"に暗号化処理されていると判断する。
【０２７１】
図４１の通知記録データには、更に、第２２〜３７行に、同じフォルダ
"C:\Users\user\Documents\"内のファイル"description.doc"に対して同様な処理を行っていることが記録されている。WriteFileによりファイル"description.doc"のヘッダが変更されたことが検出された場合には、"description.doc"が暗号化処理され、かつ、"description.doc"のファイル名も"p6dfg7p4.vvv"暗号化処理されていると判断する。
【０２７２】
ファイルに対する暗号化処理を検知した上で、ファイル名の変更が行われていることを検知した場合、本発明プログラムは、その情報をユーザーに示して、ランサムウェアによる暗号化処理に対する検知挙動の精度をコントロールすることができる。
【０２７３】
図４２は、ファイル名の変化を検知した場合に警告するか否かの設定画面である。図４２の設定画面の表現方法は一例であり、他の表現方法でもよい
設定画面では、チェックボタンの後に「「ファイル名の変化」を検知条件に入れる」を表示すると共に、「チェックを入れない場合はファイル名が変化しない暗号化処理も検知対象に含まれます」「チェックを入れた場合はファイル名の変化に関する情報が検知時に表示され、対処を選択可能となります」との注意書きを表示する。ユーザーがチェックボタンをチェックすることで警告するか否かを設定することができる。
【０２７４】
図４３は、ファイル内容が改変され、かつ、ファイル名が改変された場合の警告画面である。慎重なユーザーはこの情報を元にどう対処するかを選択できユーザビリティが向上するとともに、誤検知、誤検知による過検知のコントロールも可能となる。
【０２７５】
警告画面では「以下のプロセスがテキストファイルの改変挙動を行っています。どう処理しますか。」と尋ね、「プロセス：AAAA.exe」、「該当挙動：ファイル内容の改変、ファイル名の改変、「d1g2r.vvv」に変更しようとしています」、「「対象ファイル：C:\Users\test\Document\BBB.pdf」を示す。
【０２７６】
更に、その対応処理の選択ボタン「プロセスを終了」、「この警告を放置」、「プロセスを除外に追加」を示す。
【０２７７】
ユーザーが「プロセスを終了」を選択した場合には、プロセス"AAAA.exe"を直ちに終了させる。ユーザーが、そのプロセスをランサムウェアであると判断した場合である。
【０２７８】
ユーザーが「この警告を放置」を選択した場合には、プロセス"AAAA.exe"を終了させることなく、そのまま処理を続行する。ユーザーが、そのプロセスをランサムウェアであるか否か判断できない又は判断を保留する場合である。
【０２７９】
ユーザーが「プロセスを除外に追加」を選択した場合には、プロセス"AAAA.exe"を、前述した「除外リスト」に追加し、同じプロセスに対する警告を再度行わないようにする。ユーザーが、そのプロセスはランサムウェアでないと判断した場合である。
【０２８０】
［第２実施形態］
本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法について図４４乃至図５１を用いて説明する。
【０２８１】
本発明の第１実施形態は、主なランサムウェアの挙動を分析して共通部分を洗い出し、そこから確実に不正であると判断できる挙動を検知・防御するものである。しかしながら、分析したランサムウェアによる手法でなくても、ファイルの暗号化処理は可能である。
【０２８２】
そこで、本願発明者等は、分析したランサムウェア以外の想定しうる挙動を検出することにより、未知のランサムウェアを確実に検出し、ランサムウェアによる攻撃を有効に阻止することができると考え、本実施形態を着想するに至った。
【０２８３】
本願発明者等が想定した暗号化手法について説明する。図４４に本願発明者等が想定した暗号化手法を示す。
【０２８４】
あるファイルＡを暗号化対象とした場合、本発明の第１実施形態では、暗号化されたファイルは元のファイルに直接上書き処理している。しかしながら、直接上書き処理しなくても、暗号化されたファイルを元のファイルが存在したフォルダに存在する状態にすることができる。
【０２８５】
図４４の暗号化方法について、ステップの番号順に説明する。
（ステップ１）：ReadFileにより、ファイルＡを読み込みメモリ２３上で暗号化する。
（ステップ２）：メモリ２３上のファイルＡの暗号化されたデータを、WriteFileにより、任意の場所にファイルＢとして作成する。
（ステップ３−Ａ）：暗号化されたファイルＢを、MoveFileにより、ファイル名をファイルＣに変更する。
（ステップ３−Ｂ）：暗号化されたファイルＢを、MoveFileにより、ファイル名をファイルＡに変更し、ファイルＡが存在したフォルダに移動することでファイルＡを上書きする。
（ステップ４）：MoveFileにより、ファイルＣをファイルＡが存在したフォルダに移動する。
（ステップ５）：DeleteFileにより、ファイルＡを削除する。
【０２８６】
ステップ５の後は、ファイルＡが存在したフォルダに、暗号化されたファイルＡのファイル名がファイルＣに変更された「状態１」となる。
【０２８７】
ステップ３−Ｂの後は、ファイルＡが存在したフォルダに、暗号化されたファイルＡが存在する「状態２」となる。
【０２８８】
図４５に暗号化方法の複数のケースを示す。
【０２８９】
暗号化方法のケース１は、ステップ１、ステップ２、ステップ３−Ａ、ステップ４、ステップ５の順番に進行し、状態１となるケースである。
【０２９０】
暗号化方法のケース１は、ステップ１、ステップ２、ステップ３−Ｂの順番に進行し、状態２となるケースである。
【０２９１】
本実施形態では、例えば、ケース１、ケース２を検知することにより、分析したランサムウェア以外の想定しうる挙動を検出するようにする。
【０２９２】
なお、「状態１」「状態２」となるための挙動はケース１、ケース２に限らないが、そのような別のケースについても、後述する検知方法と同様の方法により検知することが可能である。
【０２９３】
本実施形態においても、第１実施形態におけるHookReadFile、HookWriteFileによる暗号化処理を検知する。本実施形態では、それに加えて、MoveFile（MoveFileA、MoveFileW、MoveFileExA、MoveFileExW）（ファイル移動関数）をフックするHookMoveFileや、DeleteFile（ファイル削除関数）をフックするHookDeleteFileを用いる。
【０２９４】
そして、HookReadFile、HookWriteFile、HookDeleteFileが、それぞれ、本発明プログラムに対して（ａ）通知元ＡＰＩ名、（ｂ）プロセスＩＤ、（ｃ）ファイルパスを通知し、HookMoveFileが、本発明プログラムに対して（ａ）通知元ＡＰＩ名、（ｂ）プロセスＩＤ、（ｃ）第一引数のファイルパス、（ｄ）第二引数のファイルパスを通知する。本発明プログラムに通知された、これらデータは、適宜、所定のリストに記録する。
【０２９５】
（ケース１の検知）
図４８に、ケース１の検知の事前処理を示す。
【０２９６】
本発明プログラムに対して、HookReadFileから通知される、（ａ）通知元ＡＰＩ名、（ｂ）プロセスＩＤ、（ｃ）ファイルパスを、リストＡとして記録する。
【０２９７】
本発明プログラムに対して、HookWriteFileから通知される、（ａ）通知元ＡＰＩ名、（ｂ）プロセスＩＤ、（ｃ）ファイルパスを、リストＢとして記録する。
【０２９８】
本発明プログラムに対して、HookMoveFileから通知される、（ａ）通知元ＡＰＩ名、（ｂ）プロセスＩＤ、（ｃ）第一引数のファイルパス、（ｄ）第二引数のファイルパスを、リストＣとして記録する。
【０２９９】
ケース１の検知条件を次に示す。
【０３００】
条件１：あるプロセスにより、DeleteFileが呼び出され、引数のファイルパス（削除対象のファイル）がリストＡに含まれている。すなわち、HookDeleteFileから通知されるプロセスＩＤが、HookReadFileから通知されるプロセスＩＤと同一であり、かつ、HookDeleteFileから通知されるファイルパスがリストＡに含まれている。
【０３０１】
条件１の具体例を図４７に示す。図４７に示すように、あるプロセスにより、DeleteFileが呼び出され、引数のファイルパス"C:\DDD\CC.doc"がリストＡに含まれている。
【０３０２】
この条件１は、あるプロセスが過去にReadFileで読み込んだことがあるファイルをDeleteFileにより削除しようとしていることを意味する。
【０３０３】
条件２：DeleteFileの引数（削除対象ファイルの）のフォルダパスが、リストＣの第二引数のフォルダパスと等しい。すなわち、HookDeleteFileから通知されるプロセスＩＤが、HookMoveFileから通知されるプロセスＩＤと同一であり、かつ、HookDeleteFileから通知されるファイルパスからファイル名を除いたパスが、リストＣの第二引数からファイル名を除いたパスと同一である。
【０３０４】
条件２の具体例を図４８に示す。図４８に示すように、DeleteFileの引数のフォルダパス"C:\DDD\"が、リストＣの第二引数のフォルダパス"C:\DDD\"と等しい。
【０３０５】
この条件２は、あるプロセスが削除しようとしているファイルの場所が、過去にそのプロセスが何らかのファイルを移動先として指定した記録があるということを意味する。
【０３０６】
条件３：MoveFileの第一引数のファイルが、リストＢに含まれている。すなわち、HookWriteFileから通知されるプロセスＩＤが、HookMoveFileから通知されるプロセスＩＤと同一であり、かつ、HookMoveFileから通知される第一引数のファイルパスと同一である。
【０３０７】
条件３の具体例を図４９に示す。図４９に示すように、MoveFileの第一引数のファイル"C:\XXX\VV.doc"が、リストＢに含まれている。
【０３０８】
この条件３は、あるプロセスが過去にWriteFileで書き込んだファイルを、MoveFileで移動させようとしていることを意味する。
【０３０９】
条件４：上記の条件２を満足したMoveFileの第一引数のファイルのヘッダが、第１の条件を満足したDeleteFileの引数のファイルのヘッダと異なる。
【０３１０】
条件４の具体例を図５０に示す。図５０に示すように、MoveFileの第一引数のファイル"C:\DDD\CC.doc"のヘッダが、第１の条件を満足したDeleteFileの引数のファイル"C:\XXX\VV.doc"のヘッダと異なる。
【０３１１】
この条件４は、第１実施形態におけるファイルのヘッダの相違の判断条件と同じである。
【０３１２】
（ケース２の検知）
図５１に、ケース２の検知の事前処理を示す。
【０３１３】
本発明プログラムに対して、HookReadFileから通知される、（ａ）通知元ＡＰＩ名、（ｂ）プロセスＩＤ、（ｃ）ファイルパスを、リストＡとして記録する。
【０３１４】
本発明プログラムに対して、HookWriteFileから通知される、（ａ）通知元ＡＰＩ名、（ｂ）プロセスＩＤ、（ｃ）ファイルパスを、リストＢとして記録する。
【０３１５】
ケース２の検知条件を次に示す。
【０３１６】
条件１：あるプロセスにより、MoveFileが呼び出され、第二引数のファイルパスがリストＡに含まれている。すなわち、HookMoveFileから通知されるプロセスＩＤが、HookReadFileから通知されるプロセスＩＤと同一であり、かつ、HookMoveFileから通知される第二引数のファイルパスがリストＡに含まれている。
【０３１７】
この条件１は、このプロセスが過去にReadFileで読み込んだ事があるファイルを何らかのファイルで上書きしようとしていることを意味する。
【０３１８】
条件２：その際、MoveFileの第一引数のファイルパスが、リストＢに含まれている。すなわち、HookMoveFileから通知されるプロセスＩＤが、HookWriteFileから通知されるプロセスＩＤと同一であり、かつ、HookMoveFileから通知される第一引数のファイルパスがリストＢに含まれている。
【０３１９】
この条件２は、このプロセスが過去にWriteFileで書き込んだことがあるファイルを、移動させようとしていることを意味する。
【０３２０】
条件３：MoveFileの第一引数のファイルのヘッダが、第二引数のファイルのヘッダと異なる。
【０３２１】
この条件３は、第１実施形態におけるファイルのヘッダの相違の判断条件と同じである。
【０３２２】
［変形実施形態］
本発明は上記実施形態に限らず種々の変形が可能である。
【０３２３】
例えば、上記実施形態では、マイクロソフトのオペレーティングシステムであるマイクロソフトウィンドウズ（Microsoft Windows）に本発明を適用したが、Android、BSD、iOS、Linux、OS X、Windows Phone、IBM z/OS（全て登録商標）等の他のオペレーティングシステムに本発明を適用してもよい。各オペレーティングシステムに対するランサムウェアによる攻撃を確実かつ有効に阻止することができる。
【符号の説明】
【０３２４】
１０…情報処理装置
２０…コンピューター（ＰＣ）
３０…外部周辺装置
２１…ＣＰＵ
２２…ハードディスク
２３…メモリ
２４…入出力装置
２５…ディスプレイ
３１…プリンター
３２…外部記憶装置
【要約】
【課題】マルウェアによる攻撃を有効に阻止することができるプログラム、情報処理装置、及び情報処理方法を提供する。
【解決手段】所定のプロセスから呼び出されるファイル書込関数がデータを書き込むファイルパスと同一のファイルパスに対して、所定のプロセスからファイル読出関数が既に呼び出されているという第１の条件と、ファイル書込関数が、ファイルパスのファイルのヘッダを書き換えるという第２の条件とを満足する場合に、所定のプロセスをマルウェアと判断する。
【選択図】図２６【図１】
0005996145.tif 000002
【図２】
0005996145.tif 000003
【図３】
0005996145.tif 000004
【図４】
0005996145.tif 000005
【図５】
0005996145.tif 000006
【図６】
0005996145.tif 000007
【図７】
0005996145.tif 000008
【図８】
0005996145.tif 000009
【図９】
0005996145.tif 000010
【図１０】
0005996145.tif 000011
【図１１】
0005996145.tif 000012
【図１２】
0005996145.tif 000013
【図１３】
0005996145.tif 000014
【図１４】
0005996145.tif 000015
【図１５】
0005996145.tif 000016
【図１６】
0005996145.tif 000017
【図１７】
0005996145.tif 000018
【図１８】
0005996145.tif 000019
【図１９】
0005996145.tif 000020
【図２０】
0005996145.tif 000021
【図２１】
0005996145.tif 000022
【図２２】
0005996145.tif 000023
【図２３】
0005996145.tif 000024
【図２４】
0005996145.tif 000025
【図２５】
0005996145.tif 000026
【図２６】
0005996145.tif 000027
【図２７】
0005996145.tif 000028
【図２８】
0005996145.tif 000029
【図２９】
0005996145.tif 000030
【図３０】
0005996145.tif 000031
【図３１】
0005996145.tif 000032
【図３２】
0005996145.tif 000033
【図３３】
0005996145.tif 000034
【図３４】
0005996145.tif 000035
【図３５】
0005996145.tif 000036
【図３６】
0005996145.tif 000037
【図３７】
0005996145.tif 000038
【図３８】
0005996145.tif 000039
【図３９】
0005996145.tif 000040
【図４０】
0005996145.tif 000041
【図４１】
0005996145.tif 000042
【図４２】
0005996145.tif 000043
【図４３】
0005996145.tif 000044
【図４４】
0005996145.tif 000045
【図４５】
0005996145.tif 000046
【図４６】
0005996145.tif 000047
【図４７】
0005996145.tif 000048
【図４８】
0005996145.tif 000049
【図４９】
0005996145.tif 000050
【図５０】
0005996145.tif 000051
【図５１】
0005996145.tif 000052