(57)【要約】      （修正有）【課題】深層機械学習を用い、オーバーヘッドが少ない挙動判別方法を提供する。【解決手段】挙動判別方法は、検査対象となるプログラムを仮想化環境上で動作させるステップＳ２００と、前記プログラムが前記仮想化環境上で動作している間に、少なくとも、当該プログラムが仮想アドレス空間の各アドレスを読みだしたか否かを示す第１フラグの情報、及び、当該仮想アドレス空間の各アドレスに書き込みをしたか否かを示す第２フラグの情報の何れか１つに基づいて、前記プログラムの挙動の判別に必要となるメモリのアクセス情報を生成するステップＳ２０２と、前記アクセス情報に基づいて前記プログラムの挙動が正常であるか異常であるかを推定するステップＳ２０６と、を備える。【選択図】図４
2019133470.tif 000002
【特許請求の範囲】
【請求項１】
検査対象となるプログラムを仮想化環境上で動作させるステップと、
前記プログラムが前記仮想化環境上で動作している間に、少なくとも、当該プログラムが仮想アドレス空間の各アドレスを読みだしたか否かを示す第１フラグの情報、及び、当該仮想アドレス空間の各アドレスに書き込みをしたか否かを示す第２フラグの情報の何れか１つに基づいて、前記プログラムの挙動の判別に必要となるメモリのアクセス情報を生成するステップと、
前記アクセス情報に基づいて前記プログラムの挙動が正常であるか異常であるかを推定するステップと、を備える挙動判別方法。
【請求項２】
前記アクセス情報を生成するステップは、メモリにおける所定の単位であるページ単位で前記第１フラグ又は前記第２フラグの状態を取得し、ページ単位におけるメモリの使用状況を所定のページ数分含むデータを前記アクセス情報として生成するステップ、
を備える、請求項１に記載の挙動判別方法。
【請求項３】
前記アクセス情報を生成するステップは、前記第１フラグ又は前記第２フラグの状態を所定時間ごとに取得し、所定期間の時系列データとして前記アクセス情報を生成するステップ、
を備える、請求項１又は請求項２に記載の挙動判別方法。
【請求項４】
前記アクセス情報を生成するステップの後に、
前記アクセス情報が入力されると、前記プログラムの挙動が異常である度合いを示す異常度を出力するステップ、
をさらに備え、
前記推定するステップは、前記プログラムの前記異常度に基づいて、当該プログラムの挙動が正常であるか、異常であるかを推定する、
請求項１乃至請求項３のいずれかに記載の挙動判別方法。
【請求項５】
前記プログラムの前記異常度を出力するステップは、前記アクセス情報が入力されると、前記プログラムの挙動が正常であるか、異常であるかを判別する挙動判別モデルにしたがい、前記プログラムの挙動の異常度を出力するステップ、を備え、
前記推定するステップは、前記プログラムの前記異常度に基づいて、前記プログラムの挙動が正常であるか異常であるかを推定するステップ、を備える、
請求項４に記載の挙動判別方法。
【請求項６】
前記挙動判別モデルは、前記アクセス情報が入力されると、前記プログラムの挙動が正常クラスに属する確率、又は、異常クラスに属する確率を出力する分類器である、請求項５に記載の挙動判別方法。
【請求項７】
前記プログラムの前記異常度を出力するステップは、正常な挙動である場合の前記アクセス情報が入力されると、当該アクセス情報、又は、将来のメモリの状態が出力される、恒等写像ではないアクセス情報推定モデルにしたがい、当該プログラムの前記異常度を出力するステップ、を備え
前記推定するステップは、前記プログラムの前記異常度に基づいて、前記プログラムの挙動が正常であるか異常であるかを推定する、
請求項４に記載の挙動判別方法。
【請求項８】
前記アクセス情報推定モデルは、正常な挙動であるプログラムが実行されている場合の前記アクセス情報が入力されると、当該アクセス情報が出力されるオートエンコーダにより生成されたモデルであり、
前記異常度を出力するステップは、検査対象となる前記プログラムの前記アクセス情報と、前記アクセス情報推定モデルに当該アクセス情報を入力して出力される情報と、の誤差に基づいて、前記異常度を出力する、
請求項７に記載の挙動判別方法。
【請求項９】
前記アクセス情報推定モデルは、正常挙動であるプログラムが実行されている場合の前記アクセス情報が入力されると、所定時間後の前記第１フラグ及び前記第２フラグのうち少なくとも１つの状態を出力するように生成されるモデルであり、
前記異常度を出力するステップは、検査対象となる前記プログラムの前記アクセス情報を取得した所定時間後の前記第１フラグ及び前記第２フラグのうち少なくとも１つの状態と、前記アクセス情報推定モデルに当該アクセス情報を入力すると出力される情報と、の誤差に基づいて、前記異常度を出力する
請求項７に記載の挙動判別方法。
【請求項１０】
前記異常度を算出するステップにおいて用いられるモデルをあらかじめ学習しておくステップをさらに備える、請求項５乃至請求項９のいずれかに記載の挙動判別方法。
【請求項１１】
前記プログラムの挙動が異常である確率が第１しきい値よりも高い場合に、警告を発するステップと、
前記プログラムの挙動が異常である確率が前記第１しきい値よりも高い値を有する第２しきい値よりも高い場合に、前記仮想化環境上で動作している当該プログラムの動作を停止するステップと、
をさらに備える、請求項４乃至請求項１０のいずれかに記載の挙動判別方法。
【請求項１２】
前記アクセス情報を取得するステップは、前記プログラムが動作する前記仮想化環境を動作させることが可能であり、かつ、前記プログラムが動作している状態において、前記第１フラグ及び前記第２フラグのうち少なくとも１つを取得することが可能なプロセッサ上を用いている場合に、前記プロセッサが制御するメモリの状態に基づいて、前記アクセス情報を取得するステップである、
請求項１乃至請求項１１のいずれかに記載の挙動判別方法。
【請求項１３】
検査対象となるプログラムを仮想化環境上で動作させる、処理部と、
前記プログラムが前記仮想化環境上で動作している間に、少なくとも、当該プログラムが仮想アドレス空間の各アドレスを読み出したか否かを示す第１フラグの情報、及び、当該仮想アドレス空間の各アドレスに書き込みをしたか否かを示す第２フラグの情報の何れか１つに基づいて、前記プログラムの挙動の判別に必要となるメモリのアクセス情報を生成する、アクセス情報生成部と、
前記アクセス情報に基づいて前記プログラムの挙動が正常であるか異常であるかを推定する、プログラム保護部と、
を備える挙動判別装置。
【請求項１４】
コンピュータに、
検査対象となるプログラムを仮想化環境上で動作させる、処理手段、
前記プログラムが前記仮想化環境上で動作している間に、少なくとも、当該プログラムが仮想アドレス空間の各アドレスを読み出したか否かを示す第１フラグの情報、及び、当該仮想アドレス空間の各アドレスに書き込みをしたか否かを示す第２フラグの情報の何れか１つに基づいて、前記プログラムの挙動の判別に必要となるメモリのアクセス情報を生成する、アクセス情報生成手段、
前記アクセス情報に基づいて前記プログラムの挙動が正常であるか異常であるかを推定する、プログラム保護手段、
として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、挙動判別方法、挙動判別装置及びプログラムに関する。
【背景技術】
【０００２】
プログラムが正常な挙動を行うか、マルウェア等のように異常なルーチンが挿入されているかを判別するために、シミュレータ、エミュレータ上でプログラムを実行し、実行中の挙動を機械学習により判別する手法が研究されている。しかしながら、マルウェアによっては、シミュレータ等において実行されると当該プログラムがシミュレータ等で実行されていることを検知し、マルウェアとしての挙動を停止するものがあるため、正常ではない挙動の検知が困難である場合がある。
【０００３】
別の手法として、メモリアクセスを利用し挙動が不正なプログラムの検知するものがある。この手法では、一例として、全メモリアクセスを取得してヒストグラムを生成して挙動を判別するが、計算機の負荷が大きいものとなる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第８８０００５２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
そこで、本発明の実施形態は、深層機械学習を用いたオーバーヘッドが少ない挙動判別方法、挙動判別装置及びプログラムを提案する。
【課題を解決するための手段】
【０００６】
一実施形態に係る挙動判別方法は、検査対象となるプログラムを仮想化環境上で動作させるステップと、前記プログラムが前記仮想化環境上で動作している間に、少なくとも、当該プログラムが仮想アドレス空間の各アドレスを読みだしたか否かを示す第１フラグの情報、及び、当該仮想アドレス空間の各アドレスに書き込みをしたか否かを示す第２フラグの情報の何れか１つに基づいて、前記プログラムの挙動の判別に必要となるメモリのアクセス情報を生成するステップと、前記アクセス情報に基づいて前記プログラムの挙動が正常であるか異常であるかを推定するステップと、を備える。
【発明の効果】
【０００７】
一実施形態によれば、深層機械学習を用い、オーバーヘッドが少ない方法で、不正プログラムの挙動を判定することができる。
【図面の簡単な説明】
【０００８】
【図１】一実施形態に係る挙動判別装置の機能を示すブロック図。
【図２】一実施形態に係る挙動判別装置のハードウェア構成の一例を示す図。
【図３】一実施形態に係る学習の処理の流れを示すフローチャート。
【図４】一実施形態に係る推定の処理の流れを示すフローチャート。
【図５】アクセス情報の一例を示す図。
【図６】一実施形態に係る挙動判別装置の機能を示すブロック図。
【図７】アクセス情報の推定の一例を示す図。
【発明を実施するための形態】
【０００９】
（第１実施形態）
図１は、本実施形態に係る挙動判別装置の機能を示すブロック図である。挙動判別装置１は、入力部１００と、処理部１０２と、記憶部１０４と、アクセス情報生成部１０６と、モデル生成部１０８と、挙動判別部１１０と、プログラム保護部１１２と、出力部１１４と、を備える。挙動判別装置１は、検査対象となるプログラム（以下、検査対象プログラムと記載する。）を仮想化環境において動作させることにより、当該検査対象プログラムの挙動を判別する装置である。
【００１０】
入力部１００は、検査対象プログラムの入力を受け付けるインタフェースである。さらに、入力部１００は、当該プログラムのユーザや検査を行う管理者等からの指示等を受け付けるユーザインタフェース（ＵＩ）、例えば、キーボード、マウス等のハードウェア、及び、ディスプレイに表示された入力用のグラフィカルユーザインタフェース（ＧＵＩ）を備えていてもよい。検査対象プログラムが入力された場合、入力部１００は、検査対象プログラムを処理部１０２へと出力する。
【００１１】
処理部１０２は、検査対象プログラムを仮想化環境（ＶＭＭ：Virtual Machine Manager）において動作させる。処理部１０２は、例えば、ＣＰＵ（Central Processing Unit）を備え、種々の動作を制御し、処理を実行する。あるいは、ＣＰＵ上において実行されるプログラムにより処理部１０２が実装されていてもよい。処理部１０２は、検査対象プログラムを動作させ、当該検査対象プログラムが記憶部１０４における仮想アドレス上のいずれの箇所にアクセスしたか、又は、いずれの箇所に書き込みを行ったかを、例えば、ＣＰＵのクロックに基づいたタイミングにおいて記憶させる。
【００１２】
記憶部１０４は、揮発性又は不揮発性の記憶装置を備え、種々のデータを格納する。例えば、記憶部１０４は、ＲＡＭ（Random Access Memory）のような揮発性の一次記憶デバイスを備え、処理部１０２に構築されている仮想化環境において検査対象プログラムが動作している場合に、仮想アドレス空間と物理アドレス空間とのマッピング状況を示すページテーブルを格納する。
【００１３】
アクセス情報生成部１０６は、記憶部１０４に格納されているメモリの状態を取得し、検査に必要となるメモリのアクセス状態に関する情報であるアクセス情報を生成する。例えば、所定の時間間隔で、記憶部１０４に格納されているページテーブルを取得し、当該ページテーブルに記憶されているデータの抽出、変換等を行い、検査に用いるアクセス情報を生成する。
【００１４】
より具体的には、各ページテーブルに格納されている、仮想アドレス空間内の所定のアドレス範囲（ページ）にアクセス（読み込み、或いは、読み込み及び／又は書き込み）をしたか否かを示すフラグ（以下、第１フラグと記載する。）、及び、あるアドレス範囲に書き込みをしたかを示すフラグ（以下、第２フラグと記載する。）を取得する。このように、アクセス情報は、アクセスしたか否かだけではなく、書き込みまで行ったかのみに基づいて取得するものであってもよい。
【００１５】
例えば、ＣＰＵに搭載されているＭＭＵ（Memory Management Unit）がこれらのフラグ情報をアクセス状態に基づいて書き換える。アクセス情報生成部１０６は、ＭＭＵに書き換えられたページテーブルを参照して、アクセス情報を生成する。このように、メモリ領域をページ単位、例えば、４ＫｉＢの単位として、アクセス情報を取得する。
【００１６】
このアクセス情報生成部１０６は、処理部１０２が備えられているＣＰＵ上に備えられたプログラムにより実装されていてもよい。アクセス情報生成部１０６は、取得したアクセス情報をモデル生成部１０８又は挙動判別部１１０へと出力する。
【００１７】
モデル生成部１０８は、アクセス情報生成部１０６が生成したアクセス情報に基づいて、ＶＭＭ上のプログラムの挙動が正常であるか、異常であるかを判別する挙動判別モデルを学習により生成する。生成された挙動判別モデルは、挙動判別部１１０へと出力される。なお、モデル生成部１０８は、必ずしも挙動判別装置１内に備えられている必要は無く、外部にあるモデル生成部により生成されたモデルが挙動判別部１１０により取得されるものであってもよい。
【００１８】
挙動判別部１１０は、アクセス情報生成部１０６が生成したアクセス情報に基づいて、仮想化環境において動作している検査対象プログラムの仮想アドレス空間におけるアクセスパターンを解析し、検査対象プログラムの挙動のクラスタリングを行う。すなわち、検査対象プログラムの挙動が、正常でクラスに属するか、異常であるクラスに属するかの確率を算出し、検査対象プログラムの挙動を判別する。挙動判別部１１０は、あらかじめモデル生成部１０８により生成された挙動判別モデルを備えていてもよく、挙動判別モデルにアクセス情報生成部１０６が生成した時系列に沿ったアクセス情報を入力することにより、挙動を判別してもよい。
【００１９】
プログラム保護部１１２は、挙動判別部１１０が判別した挙動に関する情報を取得し、検査対象プログラムの挙動が正常であるか異常であるかを推定し、必要である場合には、警告を発生させたり、プログラムの動作を停止させたりして、プログラムの保護をする。異常状態であると推定した場合には、出力部１１４を介してユーザに警告を表示するようにしてもよいし、仮想化環境内におけるプログラムの動作を停止するような命令を処理部１０２へと出力してもよい。
【００２０】
出力部１１４は、プログラム保護部１１２が推定した検査対象プログラムの挙動を出力する。この出力部１１４は、例えば、ディスプレイを備えており、ディスプレイを介してユーザへ検査対象プログラムの挙動を出力する。また、別の例としては、音声で出力するスピーカ、振動で知らせるバイブレータ、光で知らせるインジケータ、又は、プリントアウトするプリンタ等、他のデバイスを備えていてもよい。ディスプレイである場合には、上述した入力部１００のＧＵＩを表示するディスプレイと同じものであってもよい。
【００２１】
次に、ハードウェアの構成の一例について説明する。図２は、本実施形態に係る挙動判別装置１のハードウェア構成の一例を示す図である。
【００２２】
挙動判別装置１は、図２に示すように、プロセッサ２００と、主記憶装置２０２と、補助記憶装置２０４と、ネットワークインタフェース２０６と、デバイスインタフェース２０８と、を備える。これらの各モジュールは、バス２１０を介して相互に接続されている。
【００２３】
プロセッサ２００は、ＣＰＵを備えている。このＣＰＵが処理部１０２であってもよく、ＣＰＵ上で、アクセス情報生成部１０６、挙動判別部１１０、プログラム保護部１１２がプログラムにより実装されていてもよい。仮想化環境は、このＣＰＵ上に構築される。そして、ＣＰＵ上に構築された仮想化環境において、検査対象プログラムが実行される。
【００２４】
プロセッサ２００は、ＣＰＵとは別にＧＰＵ（Graphical Processing Unit）等のアクセラレータとして機能するプロセッサを備えていてもよい。学習によるモデルの生成等のコストが高い処理は、アクセラレータ上で並列処理されるようにしてもよい。
【００２５】
主記憶装置２０２は、ＲＯＭ（Read Only Memory）を備えている。このＲＯＭ内には、挙動判別装置１を起動させるためのオペレーティングシステム（ＯＳ：Operating System）を実行するプログラム、また、上述した各部を実装しているプログラムが記憶されている。プロセッサ２００は、主記憶装置２０２に記憶されているプログラムにしたがい、挙動判別装置１の動作を実行するようにしてもよい。
【００２６】
補助記憶装置２０４は、ＲＡＭを備えている。記憶部１０４の少なくとも一部は、このＲＡＭであってもよい。プロセッサ２００の仮想化環境の仮想アドレス空間は、このＲＡＭに格納されるものであってもよい。この場合、仮想アドレスと物理アドレスをマッピングするページテーブルも、ＲＡＭに格納されていてもよい。
【００２７】
ネットワークインタフェース２０６は、外部のネットワーク３００と接続され、種々のデータ、制御命令等が入出力される。デバイスインタフェース２０８は、外部装置４００と接続され、外部装置４００からのデータ、制御命令等が入出力される。
【００２８】
入力部１００及び出力部１１４の少なくとも１つは、このネットワークインタフェース２０６及びデバイスインタフェース２０８を介して接続されていてもよい。例えば、上記で入力部１００、出力部１１４の一例として記載したディスプレイは、デバイスインタフェース２０８を介して接続される外部装置４００である。別の例として、外部装置４００は、ネットワーク３００を介してネットワークインタフェース２０６と接続されるものであってもよい。
【００２９】
次に、本実施形態に係る挙動判別装置１の動作について説明する。図３は、挙動判別装置１の挙動判別部１１０において判別処理に用いるモデルを生成する処理の流れを示すフローチャートである。モデルを生成する処理については、図１における破線で示すようにデータが処理される。
【００３０】
まず、入力部１００を介して正常動作するプログラム、及び、異常動作するプログラムが入力され、当該プログラムを処理部１０２においてＶＭＭ上で動作させる（Ｓ１００）。
【００３１】
次に、アクセス情報生成部１０６は、ＶＭＭ上で動作しているプログラムについて、記憶部１０４上の仮想アドレス空間におけるアクセス情報等を含むメモリの使用情報から、アクセス情報を生成する（Ｓ１０２）。コンピュータ上でプロセスを走らせる場合、使用するメモリは、プロセスごとに独立したアドレス空間（仮想アドレス空間）を用いて管理される。この管理情報は、ページテーブルに格納されている。
【００３２】
ＯＳがプログラムを動作させる場合、正常動作をするプログラムと、異常動作をするプログラムとでは、仮想アドレス空間におけるアクセスするアドレスが異なる傾向となる。例えば、異常動作をするプログラムは、特定のディレクトリに他のプロセスがアクセスできないような挙動をしたり、正常動作をするプログラムではアクセスしないシステム領域にアクセスするような挙動をしたりする。
【００３３】
そこで、アクセス情報生成部１０６は、ＶＭＭ上でプログラムが起動及び動作する場合に、仮想アドレス空間上のどの箇所にアクセス又は書き込みしているかを示すアクセス情報を生成する。
【００３４】
具体的には、最初に、ページテーブルに格納されている第１フラグのデータを取得することにより、プログラムがいずれのページにアクセスしたかを取得する。続いて、各ページへのアクセス状況を学習に適したテンソル、例えば、ベクトルへと変換する。この処理は、必ずしも全てのページについてのアクセス状況を取得する必要は無く、例えば、無用であるアドレスを削除したり、複数のアドレスを統合したりしてデータをシュリンクしてもよい。
【００３５】
一例として、アクセス情報生成部１０６は、所定時間ごと、例えば、１００ミリ秒ごとに、上記の第１フラグのデータをベクトルとして取得し、所定期間、例えば、２秒間のデータをまとめて１つのアクセス情報として、すなわち、時系列の情報を含むデータをアクセス情報として生成してもよい。アクセス情報生成部１０６が生成するアクセス情報は、正常動作するプログラムと異常動作するプログラムの双方のアクセス情報を取得してもよいし、正常動作するプログラムのみのアクセス情報を取得するようにしてもよい。所定時間及び所定期間は、一例として挙げたものであり、これらの数値には限られない。
【００３６】
さらに、取得するデータは、第１フラグではなく、第２フラグのデータであってもよいし、第１フラグ及び第２フラグの双方のデータであってもよい。アクセス情報生成部１０６は、取得したアクセス情報に対して、正常動作プログラムか異常動作プログラムかをラベリングし、訓練データとして当該アクセス情報を格納する。
【００３７】
双方のデータを用いる場合には、第１フラグと第２フラグとの情報を別チャネルのデータとして生成してもよいし、線形又は非線形な関数により、第１フラグと第２フラグの情報を混合して１チャネルのデータとして生成してもよい。さらに、１チャネルのデータとして、結合し、要素数が着目しているページ数の２倍であるベクトルとして生成するようにしてもよい。
【００３８】
アクセス情報の格納は、図示しない挙動判別装置１内にある記憶部に格納してもよいし、ネットワークインタフェース２０６を介して外部にあるファイルサーバ等に格納するようにしてもよい。
【００３９】
アクセス情報生成部１０６は、様々な正常動作プログラム及び／又は異常動作プログラムについて、ＶＭＭ上で起動、動作させた場合のアクセス情報を取得する。このように生成された複数のアクセス情報を、訓練データとする。
【００４０】
アクセス情報を取得し、ベクトル化した後、必要に応じて、第１フラグ又は第２フラグをクリアするようにしてもよい。例えば、第１フラグをクリアすることにより、次のアクセス情報を取得するまでの間におけるプログラムがアクセスしたことを検出することが可能となる。また、ＣＰＵ等によりクリアされるタイミングまで、クリアをしないようにしてもよい。
【００４１】
次に、モデル生成部１０８は、アクセス情報生成部１０６が生成したアクセス情報を訓練データとし、学習を行うことにより、挙動判別モデルを生成する（Ｓ１０４）。
【００４２】
例えば、アクセス情報生成部１０６が生成した、アドレス情報の所定数の時系列データを入力とし、入力されたアドレスの状態が正常挙動を示しているか異常挙動を示しているかを判別するモデルを、畳み込みニューラルネットワークを用いた深層学習による分類器として生成する。出力されるのは、分類器として、正常クラス、異常クラスに２分するもので無くともよく、正常クラスに属する確率又は異常クラスに属する確率が出力されるモデルであってもよい。
【００４３】
モデル生成部１０８は、ランダムフォレスト、ＳＶＭ（サポートベクタマシン：Support Vector Machine）のような機械学習手法を用いてモデルを生成してもよいし、ニューラルネットワークを用いてモデルを生成してもよい。さらに、訓練データ数に応じて、適宜ミニバッチ等の手法を用いてもよい。
【００４４】
次に、モデル生成部１０８は、生成したモデルを挙動判別部１１０へと出力し、挙動判別部１１０は、当該モデルを格納する（Ｓ１０６）。別の例として、挙動判別部１１０とは別の場所に格納しておき、必要となる場合に、挙動判別部１１０がモデルを使用できるようにしておいてもよい。
【００４５】
このように、挙動を判別するために用いるモデルを学習により生成する。このモデルを用いて、検査対象プログラムの挙動が正常であるか異常であるかの推定を行う。図４は、推定を行う処理の流れを示すフローチャートである。
【００４６】
まず、処理部１０２は、ＶＭＭ上で検査対象プログラムを起動させ、動作させる（Ｓ２００）。続いて、検査対象プログラムが動作している状態におけるアクセス情報を生成する（Ｓ２０２）。このＳ２００及びＳ２０２については、上述した図３におけるＳ１００及びＳ１０２と同様の処理を行う。
【００４７】
次に、モデル生成部１０８が生成したモデルに、アクセス情報生成部１０６が生成した検査対象プログラムのアクセス情報を入力し、その出力結果から検査対象プログラムの挙動が異常である度合いである異常度を算出する（Ｓ２０４）。この際、モデルに入力するデータの要素数や構造等は、モデル生成部１０８がモデルを生成する際に用いた入力データと同等のものとする。本実施形態において、挙動判別部１１０は、例えば、分類器である挙動判別モデルを用いて検査対象プログラムの異常度を算出する。
【００４８】
この分類器は、上述したように、明確に挙動が正常クラスに属するか、異常クラスに属するかを判別する分類器であってもよいし、どの程度正常クラスに属するか、どの程度以上クラスに蔵するかを示す確率を出力する分類器であってもよい。
【００４９】
挙動判別部１１０は、例えば、明確に分類する分類器である場合、正常クラスに属している場合、異常である確率は０％とし、異常クラスに属している場合、異常である確率は１００％であると算出し、当該異常である確率を異常度として出力する。挙動判別部１１０は、別の例として、正常クラスに属する確率、異常クラスに属する確率を出力する分類器である場合、異常クラスに属する確率を、異常である確率としてそのまま異常度として出力するようにしてもよいし、正常クラス、異常クラスに属する確率から所定の変換をすることにより、異常度を算出して出力するようにしてもよい。
【００５０】
さらにまた、正常クラスと異常クラスはそれぞれ内部の状態に分割されていてもよい。このような分割や確率の算出は、モデル生成部１０８がモデルを生成するフェーズにおける教師データのラベルにより分割される。このような場合、異常確率の合計を合算して出力するようにしてもよいし、出力を各クラスの確率のベクトルとして出力するようにしてもよい。
【００５１】
時系列に沿って所定時間ごとにバッチ化されたアクセス情報を用いてモデルを用いた判別を行うようにしてもよい。この場合、複数のアクセス情報から得られた複数の異常である確率に基づいて、各バッチ化されたアクセス情報に対する異常度を算出してもよい。
【００５２】
次に、プログラム保護部１１２は、挙動判別部１１０が算出した検査対象プログラムの異常度と、第１しきい値とを比較することにより、検査対象プログラムの挙動が正常であるか異常であるかを判断する（Ｓ２０６）。異常度は、例えば、完全に正常であると判断される場合には、０、完全に異常であると判断される場合には、１とするような指標で表される。第１しきい値は、学習により算出された値、経験により定められた値、又は、異常検出をしたい精度により変更される値であってもよい。例えば、厳密に正常動作をしない場合に異常と判断する場合には、第１しきい値は、０としてもよい。
【００５３】
しかしながら、学習モデルを用いている以上、１００％の確率で正常、異常を判断可能となる訳ではない。そこで、図３に示す学習フェーズにおいてモデルを生成する際に、学習に用いていない正常な挙動のプログラム及び異常な挙動のプログラムをモデルに入力してバリデーションによるテストを行い、当該テストにより正解が得られた確率に基づいて、第１しきい値を設定してもよい。この場合、モデル生成部１０８は、このテスト結果をプログラム保護部１１２へと出力しておく。第１しきい値は、必ずしも上記のように定められる必要は無く、モデルの出力に対して適切に正常挙動と異常挙動である可能性が高い挙動とを判別できるものであればよい。
【００５４】
異常度が第１しきい値以下である場合（Ｓ２０６：ＹＥＳ）、プログラム保護部１１２は、検査対象プログラムが正常なプログラムであると推定し（Ｓ２０８）、処理を終了する。このタイミングにおいて、出力部１１４を介し、検査対象プログラムが正常なプログラムであることを出力してもよい。また、一時的な判断ではなく、引き続き検査を続けるようにしてもよい。この場合、Ｓ２０８の後に、Ｓ２０２へと戻るようなルーチンであってもよい。
【００５５】
一方、異常度が第１しきい値よりも大きい場合（Ｓ２０６：ＮＯ）、プログラム保護部１１２は、検査対象プログラムの挙動が、異常挙動である可能性が高いと推定する（Ｓ２１０）。正常挙動であると推定された場合と同様にこのＳ２１０の後にＳ２０２へと処理を移行し、継続的に検査対象プログラムの監視を行うようにしてもよい。
【００５６】
別の例として、時系列に沿って異常度の算出がバッチ化されたアクセス情報から複数得られている場合は、算出された異常度に基づいて、それぞれのアクセス情報から得られた挙動が異常であるか正常であるかを判定し、この時系列に沿った判定結果に基づいてその後のプログラム保護部１１２の動作を決定するようにしてもよい。例えば、１００ステップ分の判定結果が得られた場合に、５０ステップ分の判定結果が異常であれば、検査対象プログラム自体の挙動が異常であると判断してもよい。この場合に、警告を発し、さらに７５ステップ分の判定結果が異常であれば、検査対象プログラムを停止するようにしてもよい。
【００５７】
なお、この推定の処理までが本実施形態における特徴的な処理であり、以下の処理は任意で行うようにしてもよい。すなわち、Ｓ２１２乃至Ｓ２１６の処理は、必須のステップではなく、検査対象プログラムが異常な挙動を示すプログラムであることに基づいて何らかの別の処理を行ってもよい。
【００５８】
例えば、検査対象プログラムを異常な挙動を示すプログラムであると推定した後、プログラム保護部１１２は、検査対象プログラムが異常挙動である可能性が高い旨、出力部１１４を介して警告する（Ｓ２１２）。
【００５９】
さらに、異常度と、第１しきい値よりも大きな値である第２しきい値と、を比較し、危険度を判断してもよい（Ｓ２１４）。例えば、検査対象プログラムの動作を即時停止した方がよい危険度を示す異常度をあらかじめ設定しておき、当該異常度の値を第２しきい値として設定する。
【００６０】
異常度が第２しきい値以下である場合（Ｓ２１４：ＹＥＳ）、処理を終了してもよいし、継続して検査対象プログラムの挙動を監視しておいてもよい。さらに、挙動が異常なプログラムである可能性が高いので、異常な挙動を示すプログラムのアクセス情報として、将来的な訓練データとして用いるために格納してもよいし、監視と並行して強化学習又は上記に記載した学習を行い、挙動判別モデルを更新するようにしてもよい。
【００６１】
一方、異常度が第２しきい値よりも大きい場合（Ｓ２１４：ＮＯ）、プログラム保護部１１２は、処理部１０２へと制御命令を出力し、検査対象プログラムの処理を停止するようにしてもよい（Ｓ２１６）。検査対象プログラムの処理を停止する場合には、警告を発しないで、すなわち、Ｓ２１２を経由しないでプログラムを停止するようにしてもよい。
【００６２】
その後、停止された検査対象プログラムをユーザによるＶＭＭの操作により再開させることも可能である。また、事前に安全な状態であることが確認されている状態からリスタートしてもよい。
【００６３】
図５は、生成されたアクセス情報の例を示す図である。これらの図は、横軸をページ、縦軸を時間とした、時系列に沿ったアクセス情報の集合を示すものである。この図５は、一例として第１フラグを取得し、生成したものであり、第１フラグを取得したタイミングにおいて、第１フラグをクリアしている。図において、ページ数Ｎを約１３５０とし、Ｎページ分にシュリンクされたデータであり、横に並んでいる一列は、同一タイミングにおける各ページのアクセス状況を示す。
【００６４】
黒で表されたページは、前回のリセット時間から当該時間までにアクセスされたページを示し、白で表されたページは、前回のリセット時間から当該時間までにアクセスされていないページを示す。アクセスされたページとは、例えば、第１フラグが１となっているページであり、逆にアクセスされていないページとは、第１フラグが０となっているページである。フラグは、０と１の示す意味が逆の場合もありうる。
【００６５】
図５（ａ）は、正常な挙動のプログラムにおけるページのアクセス状況を示す例であり、図５（ｂ）は、異常な挙動のプログラムにおけるページのアクセス状況を示す例である。
【００６６】
アクセス情報は、あるタイミングにおけるページの状況、すなわち、これらの図における横一列（要素数Ｎ）の情報としてもよいし、所定期間Ｔのページ状況を集約したもの、すなわち、横一列の情報を所定数の行だけまとめた情報（要素数Ｎ×Ｔ）としてもよい。所定数の行をまとめる場合、１次元のベクトルとしてアクセス情報を取得してもよいし、２次元のマトリクス、すなわち、ページ数×所定期間の要素数を有するマトリクスとして取得してもよい。取得されたアクセス情報に基づいて、上述したモデルの生成及び挙動の判別の処理を行う。
【００６７】
モデルによる推定の際には、例えば、Ｎ×Ｔ要素のアクセス情報を取得した後、所定時間待ってさらにアクセス情報を取得し、このように取得された複数のアクセス情報を用いて入力データをバッチ化して推定をしてもよい。
【００６８】
本実施形態における挙動判別部１１０が用いる挙動判別モデルは、図５（ａ）に示すような情報のうち一部又は全部の情報であるアクセス情報を入力すると、正常である確率が高く、異常である確率が低く出力されるモデルである。同様に、図５（ｂ）に示すような情報のうち一部又は全部の情報であるアクセス情報を入力すると、正常である確率が低く、異常である確率が高く出力されるモデルである。
【００６９】
以上のように、本実施形態によれば、仮想化環境において検査対象プログラムを動作させ、当該仮想化環境における仮想アドレス空間の状態をアクセス情報として取得することにより、検査対象プログラムのメモリのアクセス情報に基づいて、正常動作を行っているプログラムであるか、異常動作を行っているプログラムであるかの推定のオーバーヘッドを削減することが可能である。
【００７０】
仮想化環境におけるメモリの状況を読み取ることにより、エミュレータ等であることを検知するマルウェアや、サンドバッグ等を検知するマルウェアであっても、その挙動を監視することが可能となる。さらに、必要とする情報は、仮想アドレス空間におけるメモリの読み込み、書き込み状態であるので、デバッガを起動させたり、関数のフック等をしたりして解析する必要が無く、すなわち、余分な動作を行うことなく低コストかつオーバーヘッドの少ない状態でプログラムの挙動を判別することが可能となる。
【００７１】
なお、学習データとなるアクセス情報の取得及び検査対象プログラムのアクセス情報の取得において、上記では、動作中に取得するものとしたが、これには限られない。例えば、各プログラムを起動させる前の状態から、起動させ、動作が始まったあとのアクセス情報を取得するようにしてもよい。このようにアクセス情報の取得をプログラムの起動前とすることにより、プログラム起動タイミングにおけるアクセス情報を取得するようにしてもよい。
【００７２】
例えば、Ｉｎｔｅｌ製の上述したＣＰＵであれば、ＭＭＵの機能を用いて、ハードウェアの機能を用いて得られた情報を元に挙動を判別することが可能であり、高速、かつ、低消費電力の実装をすることができる。また、エミュレータ等で検査対象プログラムを動作させるわけではないので、マルウェア等から検知されにくいという利点もある。
【００７３】
（第２実施形態）
前述した実施形態においては、プログラムの挙動が正常であるか異常であるかを判別する判別モデルを用いたが、本実施形態では、判別するモデルではなく、正常な挙動におけるアクセス情報を入力すると、正常な挙動をしている場合のアクセス情報を推定して出力するアクセス情報推定モデルを用いて、検査対象プログラムの挙動を判別しようとするものである。
【００７４】
図６は、本実施形態における挙動判別装置１の機能を示すブロック図である。図１に示す挙動判別部１１０の代わりに、異常検知部１１６を備える。モデルを生成する処理、挙動を判別する処理についての処理の流れは、それぞれ図３、図４と同様である。
【００７５】
モデル生成部１０８は、Ｓ１０４において、分類器として機能する挙動判別モデルを生成するのではなく、時系列に沿ったアクセス情報を入力すると、次のタイミングのアクセス情報又は当該時系列に沿ったアクセス情報を出力するアクセス情報推定モデルを生成する。具体的には、所定期間におけるアクセス情報を入力すると、将来のアクセス情報を出力するアクセス情報推定モデルを、一般的なニューラルネットワークモデルとして生成する。
【００７６】
モデルの生成は、例えば、１００単位時間あたりのアクセス情報を入力層から入力すると、２０単位時間あたりの任意に設定可能な将来の時間におけるアクセス情報が出力されるような教師付学習により生成される。これには限られず、入出力の要素数が同一であるようなモデルを生成してもよいし、複数単位時間あたりのアクセス情報を入力し、次の単位時間後の１単位時間あたりのアクセス情報が出力されるモデルを生成してもよい。
【００７７】
この学習においては、正常な挙動を示すプログラムについてのアクセス情報を教師データと用いればよいので、異常な挙動を示すプログラムについてのデータ収集のコストを削減することが可能である。
【００７８】
挙動を判別するフェーズのＳ２０４において、異常検知部１１６は、アクセス情報生成部１０６が生成したアクセス情報を、モデル生成部１０８が生成したアクセス情報推定モデルへと入力する。図７は、アクセス情報をアクセス情報推定モデルへと入力した結果を示す図である。図７においては、例えば、１００単位時間あたりのアクセス情報を入力すると、２０単位時間あたりのアクセス情報を推定して出力するモデルを示している。
【００７９】
上記のように生成されたアクセス情報推定モデルにおいては、正常な挙動の状態におけるアクセス情報を入力すると、正常な挙動の状態におけるアクセス情報が出力される。図７の上図に示されるように、正常挙動におけるアクセス情報が入力されると、実際にその後のタイミングにおいて取得されたアクセス情報に誤差の小さいアクセス情報が出力される。
【００８０】
一方、図７の下図に示されるように、異常挙動におけるアクセス情報が入力された場合、このアクセス情報推定モデルは、そのような入力に対する学習が為されていないので、実際に将来的に取得されるアクセス情報とは異なるアクセス情報、言い換えると、誤差の大きいアクセス情報を出力される。
【００８１】
このように、正常な挙動である場合と、異常な挙動である場合とにおけるアクセス情報の入力に対して、有意な差を発生させることが可能となる。この誤差は、ＮＬＬ（Negative Log Likelihood：負の対数尤度）として出力されてもよい。すなわち、モデル生成時におけるロス関数と同等ものを評価関数として誤差を算出してもよい。ＮＬＬが出力される場合、アクセス情報推定モデルから具体的なアクセス情報が出力される必要はなく、当該ＮＬＬのみを出力するようにしてもよい。別の例として、実際のアクセス情報と、推定されたアクセス情報との相関値等を出力するものであってもよい。
【００８２】
異常検知部１１６は、このように得られた誤差、すなわち、ＮＬＬ、相関値等の値から、異常度を算出する。もっとも、ＮＬＬである場合、そのまま異常度として出力してもよい。相関値の場合、正常であるほど高い値となるので、逆数をとったり、正規化した後に１から当該正規化された相関値を減算したりして異常度としてもよい。
【００８３】
このような場合、プログラム保護部１１２が、異常度に基づいて異常であるか正常であるかを判断する第１しきい値、及び、その後のプログラム保護部１１２の挙動を決定する第２しきい値は、前述の第１実施形態と同じものであるとは限られず、別の値を用いるようにしてもよい。
【００８４】
以上のように、本実施形態によっても、検査対象となるプログラムが正常な挙動であるか、異常な挙動であるかを、仮想アドレスのアクセス情報を用いて判別することが可能となる。
【００８５】
（第２実施形態の変形例）
別の例としては、オートエンコーダにより、所定単位時間数あたりの正常挙動におけるアクセス情報を入力すると、当該所定単位時間数あたりの正常挙動におけるアクセス情報を出力するアクセス情報推定モデルを生成してもよい。
【００８６】
Ｓ１０４においてオートエンコーダによりアクセス情報推定モデルを生成することにより、入力層よりも小さい次元数を有する中間層において、正常な挙動を行う場合のアクセス情報の特徴が自己符号化される。このことにより、正常な挙動を行う場合のアクセス情報が入力されると、当該特徴を有するため、入力との誤差が小さいアクセス情報が出力される。一方で、異常な挙動を行う場合のアクセス情報が入力された場合には、当該特徴を有しないため、入力との誤差が小さいアクセス情報が出力されるわけではない。
【００８７】
そこで、Ｓ２０４において、異常検知部１１６は、アクセス情報推定モデルに入力されたアクセス情報と、当該モデルから出力された推定アクセス情報とを比較することにより異常度を算出する。本変形例においても、前述した第２実施形態と同様に、具体的に推定されたアクセス情報が出力される必要は無く、ＮＬＬといった学習中に用いたロス関数の値を異常度として算出するようにしてもよい。異常度は、前述と同様に、相互相関等の他の手法により算出されるものであってもよい。
【００８８】
上記に記載した各実施形態における第１フラグ及び第２フラグは、挙動判別装置１におけるプロセッサ、特にＣＰＵの仕様により決定されているものであってもよい。例えば、Ｉｎｔｅｌ（登録商標）社の６４又はＩＡ−３２といったプロセッサにおいては、第１フラグは、Ａｃｃｅｓｓｅｄ  Ｆｌａｇ、第２フラグは、Ｄｉｒｔｙ  Ｆｌａｇとして定義されているものである。他のＣＰＵにおいても、それぞれ定義されているものを用いてもよい。
【００８９】
また、第１フラグ及び第２フラグの状況を取得する場合に、直接的にメモリの状態をダンプできない場合は、ＣＰＵ及びメモリの状態を適切にダンプできる状態にして、仮想アドレスの状態を取得するようにする。例えば、外部からメモリの状況を読み取れない場合、スナップショットを用いてメモリの状況を把握したり、ＶＭＭ上のＯＳをサスペンドしてメモリの状況を把握したりしてもよい。例えば、ページフォルトを故意に発生させ、割り込みハンドラ上でソフトウェア的に第１フラグ及び／又は第２フラグの状態を取得してもよい。
【００９０】
このように、ＣＰＵによって仮想アドレス空間の使用方法が異なっていたとしても、挙動判別モデルを生成する際に用いるＣＰＵと、プログラムの挙動を判別する際に用いるＣＰＵとの仮想アドレス空間の使用方法が同等のものであれば、本実施形態により検査対象プログラムの挙動を判別することが可能となる。
【００９１】
図１、図６に示すような各実施形態における挙動判別装置１において、処理部１０２、アクセス情報生成部１０６、モデル生成部１０８、挙動判別部１１０、プログラム保護部１１２のそれぞれの制御は、図示しない制御部がその全て又は一部を、一括に又は個別に行うようにしてもよい。この制御部は、アナログ、デジタル、或いは、ＦＰＧＡ（Field Programmable Gate Array）等により実装された制御回路であってもよい。
【００９２】
上記の全ての記載において、挙動判別装置１の少なくとも一部はハードウェアで構成されていてもよいし、ソフトウェアで構成され、ソフトウェアの情報処理によりＣＰＵ等が実施をしてもよい。ソフトウェアで構成される場合には、挙動判別装置１及びその少なくとも一部の機能を実現するプログラムをフレキシブルディスクやＣＤ−ＲＯＭ等の記憶媒体に収納し、コンピュータに読み込ませて実行させるものであってもよい。記憶媒体は、磁気ディスクや光ディスク等の着脱可能なものに限定されず、ハードディスク装置やメモリなどの固定型の記憶媒体であってもよい。すなわち、ソフトウェアによる情報処理がハードウェア資源を用いて具体的に実装されるものであってもよい。さらに、ソフトウェアによる処理は、ＦＰＧＡ等の回路に実装され、ハードウェアが実行するものであってもよい。モデルの生成や、モデルに入力をした後の処理は、例えば、ＧＰＵ等のアクセラレータを使用して行ってもよい。
【００９３】
また、本実施形態に係る挙動判別モデルは、人工知能ソフトウェアの一部であるプログラムモジュールとして利用することが可能である。すなわち、コンピュータのＣＰＵが格納部に格納されているモデルに基づいて、演算を行い、結果を出力するように動作する。
【００９４】
上記の全ての記載に基づいて、本発明の追加、効果又は種々の変形を当業者であれば想到できるかもしれないが、本発明の態様は、上記した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲において種々の追加、変更及び部分的削除が可能である。例えば、前述した全ての実施形態において、説明に用いた数値は、一例として示したものであり、これらに限られるものではない。
【符号の説明】
【００９５】
１：挙動判別装置、１００：入力部、１０２：処理部、１０４：記憶部、１０６：アクセス情報生成部、１０８：モデル生成部、１１０：挙動判別部、１１２：プログラム保護部、１１４：出力部、１１６：異常検知部、２００：プロセッサ、２０２：主記憶装置、２０４：補助記憶装置、２０６：ネットワークインタフェース、２０８：デバイスインタフェース、３００：ネットワーク、４００：外部装置
【図１】
2019133470.tif 000003
【図２】
2019133470.tif 000004
【図３】
2019133470.tif 000005
【図４】
2019133470.tif 000006
【図５】
2019133470.tif 000007
【図６】
2019133470.tif 000008
【図７】
2019133470.tif 000009