(57)【要約】【課題】マルウェアによる攻撃を確実かつ有効に阻止することができるプログラム、情報処理装置、及び情報処理方法を提供する。【解決手段】マルウェアが使用するミューテックス値をオペレーティングシステムに登録し、ミューテックス値を利用するプロセスを常駐させる。オペレーティングシステムの解析ツールと同じプロセス名のプロセスを起動し、そのプロセス名のプロセスを常駐させる。【選択図】図５
2017134805.tif 000002
【特許請求の範囲】
【請求項１】
コンピューターを、
マルウェアが使用するミューテックス値をオペレーティングシステムに登録する登録部と、
前記ミューテックス値を利用するプロセスを常駐させる常駐部と、
して機能させるためのプログラム。
【請求項２】
請求項１記載のプログラムにおいて、
前記登録部は、ソフトウェアがミューテックス値を作成する関数の実行をフックして、前記関数が作成しようとする前記ミューテックス値を前記オペレーティングシステムに登録する、
プログラム。
【請求項３】
請求項２記載のプログラムにおいて、
前記コンピューターを、起動しようとするソフトウェアがマルウェアであるか否かを判断する判断部として更に機能させ、
前記登録部は、前記判断部によりマルウェアであると判断されたソフトウェアのミューテックス値を前記オペレーティングシステムに登録する
プログラム。
【請求項４】
コンピューターを、
オペレーティングシステムの解析ツールと同じプロセス名のプロセスを起動する起動部と、
前記プロセス名のプロセスを常駐させる常駐部と、
して機能させるためのプログラム。
【請求項５】
請求項４記載のプログラムにおいて、
前記起動部は、前記プロセスのコピーを他のプロセス名に変更して起動することにより前記他のプロセス名のプロセスを起動する
プログラム。
【請求項６】
マルウェアが使用するミューテックス値をオペレーティングシステムに登録する登録部と、
前記ミューテックス値を利用するプロセスを常駐させる常駐部と、
を有する情報処理装置。
【請求項７】
オペレーティングシステムの解析ツールと同じプロセス名のプロセスを起動する起動部と、
前記プロセス名のプロセスを常駐させる常駐部と、
を有する情報処理装置。
【請求項８】
マルウェアが使用するミューテックス値をオペレーティングシステムに登録し、
前記ミューテックス値を利用するプロセスを常駐させる
情報処理方法。
【請求項９】
オペレーティングシステムの解析ツールと同じプロセス名のプロセスを起動し、
前記プロセス名のプロセスを常駐させる
情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報処理装置、及び情報処理方法に関する。
【背景技術】
【０００２】
近年、不正なプログラムコードがコンピューターを始めとする各種情報処理装置において実行されることにより個人情報や機密情報が流出する事件が後をたたず、社会問題となっている。このような不正、有害な動作を行うための悪意あるソフトウェアは、マルウェア（不正ソフトウェア、不正プログラム）とも呼ばれる。
【０００３】
マルウェアによる不正アクセスの検出精度を高める方法として、所定の関数の呼び出しを検出し、関数の検出が行われた際に、スタック領域に格納されているリターンアドレスを取得し、検出された関数が、メモリー上の指定されたアドレス範囲の領域に実行可能属性を付与する関数であり、リターンアドレスの指し示す先の１つ前の命令が関数の呼び出し命令でない場合に、当該アドレス範囲をアドレス範囲記憶部に記憶し、検出された関数のリターンアドレスがアドレス範囲記憶部に記憶されているアドレス範囲内である場合に、不正アクセスが行われていると判定する方法が知られている（特許文献１参照）
モバイル向けオペレーティングシステムであるAndroid（登録商標）において、簡易な手法でマルウェアの検出を可能とするプログラムとして、情報処理装置を、ＡＰＫファイルが持ち、当該ＡＰＫファイルに関する情報をオペレーションシステムへ提供するためのマニフェストファイルを読み込むマニフェスト解析部と、マニフェストファイルに記載された各機能の使用許可情報に基づき、ＡＰＫファイルのマルウェアらしさを解析するパラメータ解析エンジンとして機能させるプログラムが知られている（特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４９２７２３１号公報
【特許文献２】特開２０１３−２２２４２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の方法ではマルウェアによる攻撃を有効に阻止することが困難であった。
【０００６】
本発明の目的は、マルウェアによる攻撃を有効に阻止することができるプログラム、情報処理装置、及び情報処理方法を提供することにある。
【課題を解決するための手段】
【０００７】
本発明の一態様によるプログラムは、コンピューターを、マルウェアが使用するミューテックス値をオペレーティングシステムに登録する登録部と、前記ミューテックス値を利用するプロセスを常駐させる常駐部と、して機能させることを特徴とする。
【０００８】
上述したプログラムにおいて、前記登録部は、ソフトウェアがミューテックス値を作成する関数の実行をフックして、前記関数が作成しようとする前記ミューテックス値を前記オペレーティングシステムに登録する、ようにしてもよい。
【０００９】
上述したプログラムにおいて、前記コンピューターを、起動しようとするソフトウェアがマルウェアであるか否かを判断する判断部として更に機能させ、前記登録部は、前記判断部によりマルウェアであると判断されたソフトウェアのミューテックス値を前記オペレーティングシステムに登録する、ようにしてもよい。
【００１０】
本発明の一態様によるプログラムは、コンピューターを、オペレーティングシステムの解析ツールと同じプロセス名のプロセスを起動する起動部と、前記プロセス名のプロセスを常駐させる常駐部と、して機能させることを特徴とする。
【００１１】
上述したプログラムにおいて、前記起動部は、前記プロセスのコピーを他のプロセス名に変更して起動することにより前記他のプロセス名のプロセスを起動する、ようにしてもよい。
【００１２】
本発明の一態様による情報処理装置は、マルウェアが使用するミューテックス値をオペレーティングシステムに登録する登録部と、前記ミューテックス値を利用するプロセスを常駐させる常駐部と、を有することを特徴とする。
【００１３】
本発明の一態様による情報処理装置は、オペレーティングシステムの解析ツールと同じプロセス名のプロセスを起動する起動部と、前記プロセス名のプロセスを常駐させる常駐部と、を有することを特徴とする。
【００１４】
本発明の一態様による情報処理方法は、マルウェアが使用するミューテックス値をオペレーティングシステムに登録し、前記ミューテックス値を利用するプロセスを常駐させる、ことを特徴とする。
【００１５】
本発明の一態様による情報処理方法は、オペレーティングシステムの解析ツールと同じプロセス名のプロセスを起動し、前記プロセス名のプロセスを常駐させる、ことを特徴とする。
【発明の効果】
【００１６】
以上の通り、本発明によれば、コンピューターを、マルウェアが使用するミューテックス値をオペレーティングシステムに登録する登録部と、前記ミューテックス値を利用するプロセスを常駐させる常駐部と、して機能させるようにしたので、マルウェアによる攻撃を有効に阻止することができる。
【図面の簡単な説明】
【００１７】
【図１】一般的な情報処理装置を示すブロック図である。
【図２】コンピュータープログラムの動作をコンピューターのハードウェアとの関連で示す説明図（その１）である。
【図３】コンピュータープログラムの動作をコンピューターのハードウェアとの関連で示す説明図（その２）である。
【図４】ミューテックスの原理を示す説明図である。
【図５】ミューテックスの機能を利用した本発明の原理を示す説明図である。
【図６】解析環境検知の原理を示す説明図である。
【図７】解析環境検知の機能を利用した本発明の原理を示す説明図である。
【図８】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１）である。
【図９】本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２）である。
【図１０】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１）である。
【図１１】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２）である。
【図１２】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その３）である。
【図１３】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その４）である。
【図１４】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その５）である。
【図１５】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その６）である。
【図１６】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その７）である。
【図１７】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その８）である。
【図１８】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その９）である。
【図１９】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１０）である。
【図２０】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１１）である。
【図２１】本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１２）である。
【図２２】本発明の第３実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その１）である。
【図２３】本発明の第３実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その２）である。
【図２４】本発明の第３実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その３）である。
【図２５】本発明の第３実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その４）である。
【図２６】本発明の第３実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その５）である。
【図２７】本発明の第３実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その６）である。
【図２８】本発明の第３実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その７）である。
【図２９】本発明の第３実施形態によるプログラム、情報処理装置及び情報処理方法を説明する説明図（その８）である。
【発明を実施するための形態】
【００１８】
［情報処理装置］
本発明が適用される一般的な情報処理装置及びその動作について図１乃至図３を用いて説明する。
【００１９】
図１は一般的な情報処理装置を示すブロック図である。
【００２０】
標準的なスタンドアロン環境における情報処理装置１０は、コンピューター（ＰＣ）２０と、外部周辺装置３０とから構成されている。
【００２１】
コンピューター（ＰＣ）２０は、命令を実行するＣＰＵ２１と、データおよびプログラムを格納するハードディスク２２と、データやプログラムをＣＰＵ２１が読み込むためのメモリー２３と、ユーザーの操作を受け付けるマウスやキーボードのような入出力装置２４と、操作内容や処理結果等を表示するディスプレイ２５等から構成されている。
【００２２】
外部周辺装置３０は、処理結果等を印刷するためのプリンター３１や、ＵＳＢメモリー等の外部記憶装置３２等から構成されている。
【００２３】
次に、図２及び図３を用いて、コンピュータープログラム、すなわち、コンピューターに行わせる処理の手順を決められた形式（プログラム言語）に従って書き表したものを実行させる場合の一連の動作について、コンピューター２０におけるＣＰＵ２１、ハードディスク２２、メモリー２３等のハードウェアとの関連で説明する。
【００２４】
コンピューター２０が起動する前は、オペレーションソフトウェア（ＯＳ）のプログラムやデータを含むＯＳデータと、コンピューター２０で実行させるプログラムと、文書、図面等のユーザーデータ等がファイルとしてハードディスク２２に格納されている（図２（ａ））。メモリー２３にはプログラムやデータ等は展開されていない。
【００２５】
コンピューター２０が起動して、ＣＰＵ２１が、ハードディスク２２に格納されたＯＳデータをメモリー２３にロードする命令を実行すると、ＯＳデータがメモリー２３上にプロセスとして展開される（図２（ｂ））。
【００２６】
次に、ＣＰＵ２１がメモリー２３上のＯＳデータのプロセスを実行して、ハードディスク２２に格納されたプログラムにアクセスして、そのプログラムを読み込む（図２（ｃ））。ハードディスク２２に格納されたプログラムはメモリー２３にロードされ、メモリー２３上にプロセスとして展開される（図３（ａ））。
【００２７】
次に、ＣＰＵ２１がメモリー２３上のプログラムのプロセスを実行して、ハードディスク２２に格納されたユーザーデータにアクセスして、ハードディスク２２へのデータの読み書きを行う（図３（ｂ））。
【００２８】
このように、オペレーションソフトウエアやプログラムにより、ＣＰＵ２１、ハードディスク２２、メモリー２３との間での動作が行われる。
【００２９】
［発明の原理］
本発明の原理について説明する。
【００３０】
近年、マルウェアを利用する攻撃者の目的は大多数が金銭や機密情報の搾取であり、これらの攻撃では組織的に開発されたマルウェア作成ツールが利用されている場合が多い。
【００３１】
本願発明者等は、こういったツールで作成されたマルウェアの多くは、マルウェアの多重起動による処理の競合や予期せぬ動作停止等を予防するため、多重起動状態を認識して自身の動作を停止する機能や、自身が解析環境上で動作していることを検知した場合、動作を停止しマルウェア解析側に対して素性を隠すような動作を持つという機能を有していることに気がついた。
【００３２】
プログラムが多重起動状態を認識するために、マイクロソフトのオペレーティングシステムであるマイクロソフトウィンドウズ（Microsoft Windows：登録商標）にはミューテックス（Mutex）と呼ばれる機能が用意されている。ＯＳのシステムには起動したプログラムの名前であるミューテックス値が登録される。
【００３３】
ミューテックスの原理について図４の概念図を用いて説明する。
【００３４】
図４（ａ）の場合には、オペレーティングシステムに、Mutex001、Mutex002、Mutex003というミューテックス値が既に登録されている。
【００３５】
この状態で、ミューテックス機能を使用するマルウェアＡが起動すると、図４（ａ）に示すように、Mutex004というミューテックス値を作成してオペレーティングシステムに登録しようとする。オペレーティングシステムにはMutex004というミューテックス値は登録されていないので、図４（ｂ）に示すように、Mutex004を登録に成功し、マルウェアＡの動作が継続される。
【００３６】
この状態で、ミューテックス機能を使用するマルウェアＡが二重起動すると、図４（ｃ）に示すように、Mutex004というミューテックス値を作成してオペレーティングシステムに登録しようとする。オペレーティングシステムにはMutex004というミューテックス値は既に登録されているので、図４（ｃ）に示すように、Mutex004の登録に失敗し、マルウェアＡの二重起動が阻止される。
【００３７】
本発明ではこの機能を利用してマルウェアの動作を阻止する。本発明の原理について図５の概念図を用いて説明する。
【００３８】
図５（ａ）の場合には、オペレーティングシステムに、Mutex001、Mutex002、Mutex003というミューテックス値が既に登録されている。
【００３９】
この状態で、本発明のプログラムを起動させ、図５（ａ）に示すように、Mutex004というミューテックス値を作成してオペレーティングシステムに登録しようとする。オペレーティングシステムにはMutex004というミューテックス値は登録されていないので、図５（ｂ）に示すように、Mutex004を登録に成功し、本発明のプログラムはそのまま待機状態となる。
【００４０】
この状態で、ミューテックス機能を使用するマルウェアＡが起動しようとして、図５（ｃ）に示すように、Mutex004というミューテックス値を作成してオペレーティングシステムに登録しようとする。オペレーティングシステムにはMutex004というミューテックス値は既に登録されているので、図５（ｃ）に示すように、Mutex004の登録に失敗し、マルウェアＡの起動が阻止される。
【００４１】
なお、ミューテックスとは一般的にプロセスやスレッドが同時に一つしかリソースへアクセスできないようにするコンピューターにおける排他的制御の仕組みの一つであり、マルウェアではない通常のプログラムにおいても同様に多重起動を防止する用途等で利用されることがある。ただし、それら通常のウィンドウズのプログラムにおいては自身の複数起動を許可しているものも少なくなく、多重起動することで目的の不正動作を遂行しづらくなるマルウェアの方がよりこのミューテックスによる排他制御を多用する傾向にある。
【００４２】
また、本願発明者等は、マルウェアには、オペレーティングシステムが解析環境上で動作しているかを検知し、解析環境上で動作している場合には、マルウェア自身の動作を停止させる機能を有するものがあることに気がついた。
【００４３】
オペレーティングシステムが解析環境上で動作している状況の検知には、広く知られる解析ツールのプロセス名のリストをあらかじめマルウェアが保持しており、動作時にこのリストの内容と、システムで動作しているプロセス名を比較し、合致するものがあるかどうかを確認する。合致した場合にはマルウェアは動作を停止する。
【００４４】
解析環境検知の原理について図６を用いて説明する。
【００４５】
オペレーティングシステムには動作中のプロセス名が登録されている。図６では、notepad.exe、calc.exe、analyzer.exe、…が登録されている。このオペレーティングシステムでは、解析プログラムのプロセス名であるanalyzer.exeが登録されており、解析環境上にあることがわかる。
【００４６】
この状態で、マルウェアＢが起動すると、自身の動作環境が解析環境上にあるかを予め検知する。マルウェアＢは、よく使われる調査ツールのプロセス名のリストを有している。図６では、debugger.exe、analyzer.exe、monitor.exe、…等のプロセス名のリストを有している。マルウェアＢは、自分が有しているリストと、現在オペレーティングシステムで動作中のプロセス名と順次照合し、合致する場合には解析環境上にあると判断し、自分の動作を停止させる。図６では、リスト中のanalyzer.exeのプロセス名がシステムに登録されたプロセス名と合致したので、その段階で自分の動作を停止させている。
【００４７】
本発明ではこの機能を利用してマルウェアの動作を阻止する。本発明の原理について図７の概念図を用いて説明する。
【００４８】
本発明のプログラムを起動し、予めよく使われる調査ツールのプロセス名をオペレーティングシステムに登録しておく。図７では、debugger.exe、monitor.exe、analyzer.exe、…等のプロセス名のリストを登録する。
【００４９】
この状態で、マルウェアＢが起動すると、自身の動作環境が解析環境上にあるかを予め検知する。マルウェアＢは、よく使われる調査ツールのプロセス名のリストを有している。図７では、debugger.exe、analyzer.exe、monitor.exe、…等のプロセス名のリストを有している。マルウェアＢは、自分が有しているリストと、現在オペレーティングシステムで動作中のプロセス名と順次照合し、合致する場合には解析環境上にあると判断し、自分の動作を停止させる。図７では、リスト中のdebugger.exeのプロセス名がシステムに登録されたプロセス名と合致したので、その段階で自分の動作を停止させる。このようにしてマルウェアＢの動作を停止させることができる。
【００５０】
［第１実施形態］
本発明の第１実施形態によるプログラム、情報処理装置及び情報処理方法について図８及び図９を用いて説明する。
【００５１】
本実施形態は、マルウェアに使用される既知のミューテックス値を使用するプログラムを常駐させておき、マルウェアの実行を阻止しようとするものである。
【００５２】
本実施形態によるプログラム（本発明プログラム）は、マルウェアに使用される既知のミューテックス値をメモリー２３内のミューテックス値リストに登録する命令CreateMutexを含んでいる。
【００５３】
本発明プログラムは、図２及び図３におけるプログラムと同様に、ハードディスク２２に格納されており、ＣＰＵ２１からの命令によりメモリー２３に展開され、ＣＰＵ２１からの命令により実行される。
【００５４】
本発明プログラムは、マルウェアが導入される危険性のある状態となる前であればいつ実行させてもよいが、スタートアッププログラムとして、コンピューター２０の起動時に起動させておくことが望ましい。それによりコンピューター２０を、起動直後から常にマルウェアから保護することができる。
【００５５】
本発明プログラムにより登録するミューテックス値について説明する。
【００５６】
既知のマルウェアに使用されるミューテックス値の多くは、インターネット上で公開されているマルウェアの解析情報の一部として掲載されている。例えば、オンラインバンキングマルウェアで使用されるZBOTと呼ばれるマルウェアは第一世代が「_AVIRA_2108」「_AVIRA_2109」「__SYSTEM__64AD0625__」のいずれかのミューテックス値を固定値で使用している。また、新種のマルウェアであってもマルウェア解析が実施された場合は、ほとんどのケースでミューテックス情報も各マルウェア対策ベンダー等から解析情報と併せて公開される。
【００５７】
本発明プログラムでは、例えば、次に示すミューテックス値の全て又は任意のいずれかを登録する。
【００５８】
25cbfc4f-Mutex、470a1245-Mutex、894133bf-Mutex、aMD6qt7lWb1N3TNBSe4N、b845ef76-Mutex、bcd8f464-Mutex、beta100-Mutex、bfbd401b-Mutex、DC_MUTEX-B2FTUQZ、e26f5077-Mutex、e621ca05-Mutex、e621ca05Mutex、e621ca05_0、f4448e25-Mutex、f5399233-Mutex、faebec4a-Mutex、fuckareyoulookin、IrcPeru-Mutex、KyUffThOkYwRRtg、lyhrsugiwwnvnn、Microsoft-Windows-LDAP32-Client、Prowin32Mutex、Rapid Antivirus_AppManager_server_mutex、s5rBKCUVfOF8JLVi、SPYNET、System1230123、t2f-Mutex、Windows Update System Verifier、wuqntwklyxwhac、xXxXxXXxXxxxxx02。
【００５９】
セキュリティ対策として一般的に用いられるパターンファイルやハッシュ値に依存したマルウェア防御方法ではマルウェアのバイナリが少しでも変化すると対応できなくなる場合が多いが、ミューテックス値の場合は、複数の亜種（同一種類のマルウェア群）ではミューテックス値が同一である場合が多く、ひとつミューテックス値に対する処置で複数の未知のマルウェアに対する防御を行うことが可能となる。
【００６０】
一般的なマルウェアを生成する際、最初から開発するケースはまれであり、流出したマルウェアのソースコードの改変や、マルウェアを自動生成するツールであるビルダー等を利用して作成されることが多い。そうした流出したソースコードや自動生成するツールではミューテックスが意図的に変更されるケースはあまり多くない。結果として、固定のミューテックス値を持つ複数のマルウェア、すなわち亜種のマルウェアが作り出されることになる。
【００６１】
なお、ハッシュ値や一般的なパターンファイルがとらえるバイナリの特徴点は、バイナリが生成されるタイミングで必然的に変化してしまうため、一つの情報で複数を捉える事は困難となってしまう背景がある。
【００６２】
これらの情報をあらかじめ収集して、既知のマルウェアのミューテックス値リストのデータベースを作成しておく。本発明プログラムでは、データベース化された既知のマルウェアのミューテックス値を生成して登録する。
【００６３】
マルウェアのミューテックス値リストのデータベースは常に更新しておき本発明プログラムを起動したときに、データベースに登録された全てのミューテックス値を生成して登録することが望ましい。
【００６４】
次に、本発明プログラムが実行された状態でマルウェアの実行が阻止される仕組みについて説明する。
【００６５】
図８に示すように、メモリー２３のオペレーティングシステムのデータ内の所定位置にミューテックス値リストの領域が設けられている。図８では、ミューテックス値リストの領域に、AAAAA、BBBBB、CCCCC、…というミューテックス値が登録されている。登録されたミューテックス値は、データベース化された既知のマルウェアのミューテックス値である。
【００６６】
この状態でマルウェアを実行しようとする場合の処理の一連の流れについて図９を用いて説明する。
【００６７】
まず、マルウェアの実行ファイルを起動すると、メモリー２３上に実行ファイルのイメージデータが配置される（図９（ａ））。
【００６８】
次に、マルウェアが"EEEEEEEE"というミューテックス値をシステムに登録しようとした場合、メモリー２３上にあるオペレーティングシステムのCreateMutex関数が"EEEEEEEE"という引数でＣＰＵ２１を介してマルウェアから呼び出される（図９（ｂ））。
【００６９】
次に、オペレーティングシステムは、CreateMutex関数が呼び出されると、メモリー２３上に存在するミューテックスリストにアクセスし、引数として渡された"EEEEEEEE"というミューテックス値がミューテックスリスト中に存在するか否か確認する（図９（ｃ））。
【００７０】
ミューテックスリスト中に"EEEEEEEE"というミューテックス値が存在する場合、オペレーティングシステムはCreateMutex関数の戻り値として、null値をマルウェアへ返答する（図９（ｄ））。
【００７１】
マルウェアは、関数の戻り値がnull値であることを確認することで、CreateMutex関数によるミューテックス登録が失敗したこと、すなわち、自分と同じマルウェアのプロセスや、自分の複製のプロセスがオペレーティングシステム上で起動していることを認識する。そのことを認識すると、マルウェアはその後の処理を自ら停止する。それにより、マルウェアの不正な動作を阻止することができる。
【００７２】
ミューテックスリスト中に"EEEEEEEE"というミューテックス値が存在しない場合には、オペレーティングシステムは渡された"EEEEEEEE"という値をミューテックスリストに追加したのち、CreateMutex関数の戻り値としてnull値以外の値をマルウェアへ返答する（図９（ｅ））。
【００７３】
マルウェアは、関数の戻り値がnull値ではないことを確認することで、CreateMutex関数によるミューテックス登録が成功したこと、すなわち、自分と同じマルウェアのプロセスや、自分の複製のプロセスがオペレーティングシステム上で起動してないことを認識する。そのことが認識できると、その後のマルウェアの処理を継続する。この場合にはマルウェアの実行を阻止できない。
【００７４】
［第２実施形態］
本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法について図１０乃至図２１を用いて説明する。
【００７５】
本実施形態は、マルウェアが使用するミューテックス値が不明であっても、マルウェアがミューテックス値を作成しようする関数の実行をフックして横取りして、事前にミューテックス値リストに登録しておくことで、マルウェアの実行を阻止しようとするものである。
【００７６】
本発明プログラムは、マルウェアが導入される危険性のある状態となる前であればいつ実行させてもよいが、スタートアッププログラムとして、コンピューター２０の起動時に起動させておくことが望ましい。それにより、起動直後から常に、コンピューター２０をマルウェアから保護することができる。
【００７７】
図１０に、コンピューター２０が起動した直後のメモリー２３の状態を示す。メモリー２３には、オペレーティングシステムと共に本発明プログラムや他のスタートアッププログラムが展開され配置されている。
【００７８】
本発明プログラムは、まず、自身が起動した後に起動する全てのプロセスの情報を確認し、不審なプログラムのプロセスでないかを判断する。なお、以降の説明では、そのような不審なプログラムのことを便宜上「マルウェア」又は「不審プログラム」と称して説明する。
【００７９】
マルウェアが起動すると、図１１に示すように、メモリー２３上に、オペレーティングシステム、本発明プログラム、他のスタートアッププログラムと共に、マルウェアが展開されてマルウェアのプロセス動作が開始される。
【００８０】
次に、本発明プログラムは、図１２に示すように、メモリー２３上に展開されたマルウェアのプロセスの情報を取得し、ハードディスク２２に格納されたマルウェアの実行ファイルを確認し、不審なプログラムであるか否かを判断する。
【００８１】
そのような判断基準の具体例として例えば次のようなものがある。
（ａ）正常なデジタル署名が付与されているか否かを判断する。
（ｂ）開発元などのプロパティ情報が存在するか否かを判断する。
（ｃ）ユーザーにより設定された除外リストに適合しているか否かを判断する。
（ｄ）プロセスの実行ファイルがアイコン偽装を行っているか否かを判断する。
（ｅ）拡張子が偽装されているか否かを判断する。
（ｆ）既知の不正な情報をファイル内部に保有しているか否かを判断する。
（ｇ）ユーザーの一時領域から実行されているか否かを判断する。
（ｈ）ＯＳの自動起動エントリーに登録されているか否かを判断する。
（ｉ）既知の不正および不正ではないハッシュ値に属しているか否かを判断する。
【００８２】
このような判断基準で不審であると認定されると、そのプログラムがミューテックス値を作成しようする関数の実行をフックして横取りして、事前にミューテックス値リストに登録しておくことで、そのプログラムの実行を阻止する。
【００８３】
ウインドウズプログラムは起動するとそれぞれのプロセス空間（メモリ空間）と呼ばれる仮想メモリー上に配置される。それぞれのプロセス空間にはＩＡＴ（ImportAddressTable）という項目があり、ＩＡＴにはプログラムが使用する関数の一覧とそれに応じたメモリアドレスが記録されている。これは、プログラムが動作する際にどういった関数がどのアドレスに読み込まれているかをオペレーティングシステムが把握するための情報である。
【００８４】
図１３は、メモリー２３上に展開されたマルウェアのプロセス空間のメモリー番地45000000にCreateMutexという関数が配置されている状態を示している。
【００８５】
この状態においてフック制御を行う方法の詳細について説明する。
【００８６】
まず、マルウェアのプロセス空間に偽のCreateMutex関数、例えば、FakeCreateMutex関数を埋め込む。
【００８７】
自分以外の他のプロセス空間にコードを注入するためには、そのプロセスのメモリー空間において、VirtualAllocEx関数というWindowsAPIを利用し、まだ使用されていない領域に一定サイズのメモリー領域を確保する（図１４参照）。
【００８８】
次に、確保したメモリー領域にWriteProcessMemoryというWindowsAPIを利用し、実行させたいコード、すなわち、FakeCreateMutex関数本体と、そのFakeCreateMutex関数をマルウェアのＩＡＴへ組み込むための関数Ａとを書き込む（図１５参照）。なお、確保したメモリー領域の具体的なアドレスはVirtualAllocExの戻り値を確認することで取得することができる。
【００８９】
次に、書き込んだコード（関数Ａ）を実行させるためにCreateRemoteThreadというWindowsAPIを呼び出すことにより、その任意のコードをマルウェアのプロセス空間上で実行させる（図１６参照）。ここで、不審プログラムのプロセス空間のみに注目すると、図１７のようになる。
【００９０】
次に、CreateRemoteThreadにより、関数Ａが実行されると、不審プログラムのプロセス空間のＩＡＴにおける、正規のCreateMutex関数のアドレス、例えば45000000番地を、偽のFakeCreateMutex関数のアドレス、例えば、48500000番地へと書き換える（図１８（ａ）、（ｂ）参照）。これでフックの事前処理が行えたこととなる。
【００９１】
なお、どの関数がどのアドレスに展開されているか、すなわち、ＩＡＴにあるその関数に対応するアドレスを知るには、GetProcAddressというWindowsAPIの引数に関数名を渡すことで、指定した関数がプロセス空間のどのアドレスに対応づけられているのか知ることができる。
【００９２】
次に、不審プログラムが、例えば"MAL123"というミューテックス名をシステムに登録しようとしたとする。その場合、CreateMutex関数が呼び出されると、システムはマルウェアのＩＡＴを参照した結果、正規のCreateMutex関数ではなく、予め用意しておいた偽のFakeCreateMutex関数に"MAL123"というパラメータを渡すことになる（図１９参照）。
【００９３】
次に、FakeCreateMutex関数の内部では、本発明プログラムへ、「不審プログラムが"MAL123"という名前のミューテックスを作成しようとしている」という情報を渡す処理を行う。その情報を受け取った本発明プログラムは、不審プログラムよりも先にミューテックスを登録することが可能となる（図２０参照）。
【００９４】
この時点で、まだ、不審プログラムは常駐してはいないが、不審プログラムが常駐する際に登録されるミューテックスはシステムに登録されている、という状態になる。
【００９５】
また、不審プログラムのCreateMutex関数の呼び出し元に対しては、呼び出した結果、関数が失敗した、つまり、すでに"MAL123"というミューテックスがシステムに登録されていたという結果を返すことで、不審プログラムに偽りの情報を渡すことが可能となり、結果として、その後の動作継続を妨げることが可能となる（図２０参照）。
【００９６】
なお、図２０に示す処理は、結果的に、次の図２１に示す処理と同等となり、本発明プログラムは常に失敗という値を返すこととなる。
【００９７】
このようにして、本実施形態は、マルウェアが使用するミューテックス値が不明であっても、マルウェアがミューテックス値を作成しようする関数の実行をフックして横取りして、事前にミューテックス値リストに登録しておくことで、マルウェアの実行を阻止することができる。
【００９８】
［第３実施形態］
本発明の第２実施形態によるプログラム、情報処理装置及び情報処理方法について図２２乃至図２９を用いて説明する。
【００９９】
本実施形態は、よく使われる調査ツールのプロセス名をオペレーティングシステムに予め登録しておき、マルウェアが解析環境上にあると判断すると自分の動作を停止させるという機能を利用して、マルウェアの実行を阻止しようとするものである。
【０１００】
解析環境上で動作している状況の実現のためには、広く知られる解析ツールのプロセス名を持つプロセスをあらかじめコンピューター２０上で動作させておくことで解決する。このプロセスは実際の解析ツールのプロセスである必要はなく、プロセス名が解析ツールと同一であれば実態はなんでもよく、コンピューター２０への負荷の少ないプロセスであることが望ましい。
【０１０１】
マルウェアが解析環境であることを検知するために存在確認を行う解析ツールのプロセス名としては、例えば、ネットワーク調査ツールであるWireShark（プロセス名：Wireshark.exe）、動的解析ツールであるOllyDbg（プロセス名：ollydbg.exe）、プロセス監視ツールであるProcess Monitor（プロセス名：procmon.exe）、静的解析ツールであるIDA Pro（プロセス名：idaq.exe）、プロセス管理ツールであるProcess Explorer（プロセス名：procexp.exe）等がある。
【０１０２】
本実施形態では、例えば、次に示すプロセス名の全て又は任意のいずれかを動作させておく。
【０１０３】
360Tray.exe、ashWebSv.exe、avcenter.exe、avguard.exe、avp.exe、ccSvcHst.exe、ekrn.exe、idag.exe、idaq.exe、idaq64.exe、ImmunityDebugger.exe、InstallRite.exe、kissvc.exe、Mcshield.exe、NTRTSCAN.exe、ollydbg.exe、outpost.exe、ProccessHacker.exe、Regshot.exe、SbieCtrl.exe、Smc.exe、tcpdump.exe、tcpview.exe、tmproxy.exe、VBoxService.exe、VBoxTray.exe、vmtoolsd.exe、VPTray.exe、windbg.exe、wireshark.exe。
【０１０４】
なお、本発明プログラムの実行により正常なプログラムへの影響はほとんどないと想定される。例外的に、一部ＰＣゲーム等解析を検知すると動作しないものも考えられるが、その場合は、予め、除外リストへ検知から除外したいファイルやフォルダを設定しておくことで、そうした正常なＰＣ操作上の不都合を回避することが可能である。
【０１０５】
マルウェアの中には、リストと合致した場合、自身の動作を停止するのではなく、合致した解析ツールのプロセスを停止させるものがある。このようなマルウェアに対しては、あらかじめマルウェアのコードが配置されたメモリー２３内の、プロセスを停止させる関数、TerminateProcess等をフックしておき、解析ツールを終了しようとする場合には自身の動作を停止させるように変更する。すなわち、マルウェアが呼び出したTerminateProcessの引数が開発ツールのプロセスを示していた場合、その引数をマルウェア自身のプロセス情報に変更する。
【０１０６】
プロセスを停止させる関数をフックする処理については、第２実施形態におけるCreateMutex関数のフックと同様に行えばよい。
【０１０７】
本実施形態では、次のようにして、任意のプロセス名を持つプロセスを起動する。
【０１０８】
例えば、"OllyDbg.exe"という名前のプロセスを起動したい場合、本発明プログラム"MyProgram.exe"は一時領域に自身の実行ファイルのコピーを"OllyDbg.exe"というファイル名で作成し、その実行ファイルを起動させる。
【０１０９】
これにより、オペレーティングシステム上には、本発明プログラムのプロセス"MyProgram.exe"という親プロセスと"OllyDbg.exe"（"MyProgram.exe"のコピー）という子プロセスが２つ起動していることになる。起動しているプロセスの親子関係をあまり意識しないタスクマネージャーなどの他のプロセスから見ると、システムのプロセスリストにはそれぞれのプロセスが独立して起動しているように見える（図２２参照）。
【０１１０】
この動作、すなわち、自身のコピーを任意のファイル名に変更して起動させる動作を繰り返すことにより、複数の任意のプロセスを一斉に起動することとなる（図２３参照）。そのときのウインドウズシステムの状態は図２４に示すようになる。
【０１１１】
繰り返しコピーを作成しそれを利用して複数のプロセスを起動する上記の操作を行った際、一時領域フォルダ内に各プロセス名と同一の実行ファイル、すなわち、実行ファイル"MyProgram.exe"のコピー、が起動したプロセスの数だけ複数存在している状態となる。この状態でプロセス"MyProgram.exe"のみが終了してしまうと、残りのプロセスが孤立して起動することなり、作成した複数の実行ファイル、すなわち、実行ファイル"MyProgram.exe"のコピーがハードディスク２２上に残留してしまうことになり、ウインドウズシステムへの負荷を残すこととなる。
【０１１２】
本発明プログラムでは、そうした事態を避けるため、プロセス"MyProgram.exe"が終了した場合、作成した複数の実行ファイル、すなわち、実行ファイル"MyProgram.exe"のコピーおよびそのプロセスは不必要となるため、次のようにして全ての関連子プロセスも併せて終了し、実行ファイルも削除されるようにしている。その動作の詳細について説明する。
【０１１３】
作成された子プロセス、すなわち"OllyDbg.exs"、"Wireshark.exe"等は常時自身の親プロセスが起動しているかどうかを監視する（図２５参照）。
【０１１４】
子プロセスが親プロセスを監視する具体的な方法として次のようなものがある。
【０１１５】
まず、親プロセスが自身のコピーである子プロセスを起動させる際、自身（親）のプロセスＩＤを実行引数として渡した状態で子プロセスを呼び出す。次に、呼び出された側のプロセスは自身がプロセスＩＤを実行引数に付与された状態で起動したと判断すると、自身が「子」であり、引数のプロセスＩＤを持つプロセスが「親」であるというプロセスの親子関係を把握することができる。
【０１１６】
プロセスＩＤがわかれば、WindowsAPIであるCreateToolhelp32SnapShot 関数、Process32First関数、Process32Next関数を組み合わせることで、指定したプロセスＩＤを持つプロセスが現在起動しているかどうかを判断することができる。
【０１１７】
親プロセスが終了していると判断した場合、子プロセスは自身を終了して削除する動作を行う。
【０１１８】
プロセスが起動している最中は、そのプロセスの実体となる実行ファイルを削除することはオペレーティングシステムにおいて基本的に不可能である。つまり、実体である実行ファイルを削除するにはそのプロセスを終了させなければならない。このため、自分自身の実行ファイルを削除してプロセスを終了する動作、またはその逆の動作は、プログラム単体で実現することは不可能である。
【０１１９】
そのため、次のようにして、実質的に、自分自身のプロセス終了およびその実体である実行ファイルの削除を行う。
【０１２０】
例えば、実行ファイル名およびそのプロセスが"AAAAA.exe"であると仮定すると、プロセスAAAAA.exeは、一時的に削除用のバッチファイル（Batch File）を作成する。そのバッチファイルには、AAAAA.exeというプロセスがいなくなるまでスリープを繰り返し、AAAAA.exeというプロセスがいなくなったら、実行ファイルAAAAA.exeを削除する、という命令コードを記載する。
【０１２１】
バッチファイルを呼び出したプロセスAAAAA.exeは、その後自身のプロセスを終了させる。すると、AAAAA.exeのプロセスが存在しなくなった状態を確認したバッチファイルが、プロセスAAAAA.exeの実体である実行ファイルAAAAA.exeを削除する（図２６参照）。
【０１２２】
次に、バッチファイルは、自分自身であるバッチファイルを削除するために、DELコマンドで自身を削除するコマンドをコマンドプロンプトに渡して実行させバッチファイル自身を終了させる。その後、コマンドプロンプトはバッチファイルをDELコマンドで削除した後、終了する（図２７参照）。コマンドプロンプトは渡された処理が全て終了すると自身（コマンドプロンプト自身のプロセス）を終了する動作があるため、それを利用する。
【０１２３】
以上が、プログラムが自分自身を終了＆削除する方法となるが、この方法を起動した全ての子プロセスが同時に行う。
【０１２４】
このようにして"MyProgram.exe"が終了すると、そのコピーである各プロセスおよびその実体であるファイルが削除され、"MyProgram.exe"が起動する前の環境状態にすることができる。
【０１２５】
また、本発明プログラムでは、マルウェアの攻撃検知機能も機能のひとつとして搭載している。
【０１２６】
一般的にマルウェアは、解析ツールやマルウェア対策製品のプロセスが起動していると判断した場合、その多くが自身を終了する動作を行う。その一方で、自身を終了するのではなく、相手側を終了させようと試みるタイプのマルウェアも存在する。何か解析ツールのプロセスが起動していた場合は、その解析ツールを終了させることでユーザーの操作を妨害し、自分が解析されることを妨害するものがある。
【０１２７】
本発明プログラムでは、自身の子プロセスが終了されていないかどうかを親プロセスが監視することで、その攻撃を検知する（図２８参照）。
【０１２８】
マルウェアが、例えば、"WireShark.exe"を強制終了した場合、本発明プログラムは自身の子プロセスがひとつ存在しなくなったため、マルウェアによって強制終了されたと判断する（図２９（ａ）〜（ｃ）参照）。
【０１２９】
プログラムがプロセスの強制終了を行う場合は、通常TerminateProcessというWindowsAPIを呼び出すことで実現している。ウィンドウズに標準搭載されているタスクマネージャーというプログラムでプロセスを強制終了させた場合も"TerminateProcess"が呼び出される。
【０１３０】
ユーザーが誤ってタスクマネージャーからユーザー操作で子プロセスを終了した場合、マルウェアの攻撃により子プロセスを終了されたと誤検知する可能性がある。そのため、本発明プログラムはその誤検知が起こらないようにしている。
【０１３１】
一般的なプロセスが、TerminateProcess関数により他のプロセスの強制終了を行う場合には、以下の手順となる。
【０１３２】
OpenProcessというWindowsAPIの関数に対し、強制終了させたいプロセスのプロセスＩＤを第三引数に、第一引数に「PROCESS_TERMINATE」というアクセス権を割り当てた状態で開く。この引数を渡した状態でOpenProcess関数の呼び出しに成功すると、それは与えられたアクセス権、ここではPROCESS_TERMINATE、つまり強制終了の権限でプロセスを扱う権利を得たという意味になる。
【０１３３】
次に、上記のOpenProcessが成功すると、戻り値でプロセスハンドル（プロセスを取り扱うオブジェクト）が応答されるため、そのプロセスハンドルをTerminateProcessの引数として渡すことで、該当のプロセスを強制終了させることが可能となる。
【０１３４】
つまり、OpenProcess関数により「PROCESS_TERMINATE」というアクセス権で自身のプロセスが開かれる事を失敗させることができれば、他のプログラムからの強制終了（TerminateProcessの呼び出し）を結果的に失敗させることが可能となる。
【０１３５】
指定したアクセス権によるOpenProcessを失敗させるには、TerminateProcessからの強制終了から守りたいプロセスを作成する際、具体的にはCreateProcessを用いてプロセスを作成する際に、そのプロセスに付与するセキュリティ情報、すなわち、CreateProcessを呼出す際の第三引数のセキュリティ記述子から「PROCESS_TERMINATE」というアクセス権、すなわち、他のプロセスからの強制終了を許可するというアクセス権を取り除くことで、他の一般的なプロセスから強制終了を許可しないアクセス権を持ったプロセスを作成することができる。
【０１３６】
本発明プログラムでは、この手法により、親プロセスおよび子プロセスが一般的な強制終了、つまり、タスクマネージャーなどからのユーザー操作による強制終了をブロックすることが可能となり、誤検知を防ぐことができる。
【０１３７】
また、併せて、ユーザー操作レベルで強制終了させようとする種類のマルウェアの挙動をブロックすることが可能となり、結果的にそうしたマルウェアの動作継続を妨害することもできる。
【０１３８】
一方で、マルウェアの中には、TerminateProcessの呼び出しが上記の手法でブロックされていても、対象を強制終了させることができるタイプのものが存在する。具体的にはSeDebugPrivilege関数を利用して自身をデバッガと同じ特権状態に上げることで、相手が設定したアクセス権を無視して強制的に操作し、さらに強力に強制終了させることが可能となる。
【０１３９】
本発明プログラムの強制終了検知は、こうしたタイプのマルウェアが強制的に子プロセスを終了させたことを検知することができ、そうしたマルウェアがそのコンピューター内に存在すると検出することができることとなる。
【０１４０】
［変形実施形態］
本発明は上記実施形態に限らず種々の変形が可能である。
【０１４１】
例えば、上記実施形態では、マイクロソフトのオペレーティングシステムであるマイクロソフトウィンドウズ（Microsoft Windows）に本発明を適用したが、Android、BSD、iOS、Linux、OS X、Windows Phone、IBM z/OS（全て登録商標）等の他のオペレーティングシステムに本発明を適用してもよい。各オペレーティングシステムに対するマルウェアによる攻撃を確実かつ有効に阻止することができる。
【符号の説明】
【０１４２】
１０…情報処理装置
２０…コンピューター（ＰＣ）
３０…外部周辺装置
２１…ＣＰＵ
２２…ハードディスク
２３…メモリー
２４…入出力装置
２５…ディスプレイ
３１…プリンター
３２…外部記憶装置
【図１】
2017134805.tif 000003
【図２】
2017134805.tif 000004
【図３】
2017134805.tif 000005
【図４】
2017134805.tif 000006
【図５】
2017134805.tif 000007
【図６】
2017134805.tif 000008
【図７】
2017134805.tif 000009
【図８】
2017134805.tif 000010
【図９】
2017134805.tif 000011
【図１０】
2017134805.tif 000012
【図１１】
2017134805.tif 000013
【図１２】
2017134805.tif 000014
【図１３】
2017134805.tif 000015
【図１４】
2017134805.tif 000016
【図１５】
2017134805.tif 000017
【図１６】
2017134805.tif 000018
【図１７】
2017134805.tif 000019
【図１８】
2017134805.tif 000020
【図１９】
2017134805.tif 000021
【図２０】
2017134805.tif 000022
【図２１】
2017134805.tif 000023
【図２２】
2017134805.tif 000024
【図２３】
2017134805.tif 000025
【図２４】
2017134805.tif 000026
【図２５】
2017134805.tif 000027
【図２６】
2017134805.tif 000028
【図２７】
2017134805.tif 000029
【図２８】
2017134805.tif 000030
【図２９】
2017134805.tif 000031