(57)【要約】【課題】デバイスをより安全な状態にすることができるコンピュータプログラム、デバイス及び判定方法を提供する。【解決手段】コンピュータプログラムは、ノーマル実行環境から仮想的に分離され、ノーマル実行環境よりも安全なセキュア実行環境で所要の処理を実行させるため、コンピュータに、ノーマル実行環境で実行され、ノーマル実行環境内の監視対象を監視する監視モジュールの正常・異常を判定する処理を実行させる。【選択図】図１
2019057167.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、ノーマル実行環境から仮想的に分離され、前記ノーマル実行環境よりも安全なセキュア実行環境で所要の処理を実行させるためのコンピュータプログラムであって、
コンピュータに、
前記ノーマル実行環境で実行され、該ノーマル実行環境内の監視対象を監視する監視モジュールの正常・異常を判定する処理を実行させるコンピュータプログラム。
【請求項２】
コンピュータに、
前記監視モジュールが出力する、認証情報を暗号化した情報を取得する処理と、
取得した情報を所定の秘密鍵で復号して得られた認証情報及び前記セキュア実行環境内のセキュアメモリに展開した認証情報を照合する処理と
を実行させる請求項１に記載のコンピュータプログラム。
【請求項３】
コンピュータに、
前記監視モジュールが繰り返し出力する確認情報を取得する処理と、
取得した確認情報に基づいて、前記監視モジュールの正常・異常を判定する処理と
を実行させる請求項１又は請求項２に記載のコンピュータプログラム。
【請求項４】
コンピュータに、
前記監視モジュールが出力する、所定のセッション鍵を暗号化したセッション鍵情報を取得する処理と、
取得したセッション鍵情報を所定の秘密鍵で復号してセッション鍵を取得する処理と、
前記監視モジュールが出力する、前記所定のセッション鍵で確認情報を暗号化した暗号化確認情報を取得する処理と、
取得した暗号化確認情報を取得したセッション鍵で復号して確認情報を取得する処理と
を実行させる請求項３に記載のコンピュータプログラム。
【請求項５】
コンピュータに、
前記監視モジュールが出力する、出力の都度所定のアルゴリズムで更新される確認情報を前記所定のセッション鍵で暗号化した暗号化確認情報を取得する処理と、
取得した暗号化確認情報を前記取得したセッション鍵で復号して確認情報を取得する処理と、
取得した確認情報が、前記所定のアルゴリズムで更新されているか否かを判定する処理と、
前記所定のアルゴリズムで更新されていない場合、前記監視モジュールが異常であると判定する処理と
を実行させる請求項４に記載のコンピュータプログラム。
【請求項６】
コンピュータに、
前記ノーマル実行環境内のメモリに展開された前記監視モジュールの実行コードを取得する処理と、
取得した実行コードと、前記セキュア実行環境内のセキュアメモリに展開した前記監視モジュールの実行コードとが同一であるか否かを判定する処理と、
実行コード同士が同一でないと判定した場合、前記監視モジュールが異常であると判定する処理と
を実行させる請求項１から請求項５のいずれか一項に記載のコンピュータプログラム。
【請求項７】
コンピュータに、
取得した実行コードのハッシュ値を算出する処理と、
算出したハッシュ値と、前記セキュア実行環境内のセキュアメモリに展開した前記監視モジュールの実行コードのハッシュ値とが同一であるか否かを判定する処理と、
ハッシュ値同士が同一でないと判定した場合、前記監視モジュールが異常であると判定する処理と
を実行させる請求項６に記載のコンピュータプログラム。
【請求項８】
コンピュータに、
前記監視モジュールが異常であると判定した場合、前記ノーマル実行環境で実行されるＯＳを再起動する処理を実行させる請求項１から請求項７のいずれか一項に記載のコンピュータプログラム。
【請求項９】
ノーマル実行環境及び該ノーマル実行環境よりも安全なセキュア実行環境を仮想的に分離して実行環境を提供する仮想化モジュールを備え、請求項１から請求項８のいずれか一項に記載のコンピュータプログラムを前記セキュア実行環境にインストール可能とするデバイス。
【請求項１０】
監視対象を監視する監視モジュールの正常・異常を判定する判定方法であって、
ノーマル実行環境から仮想的に分離され、前記ノーマル実行環境よりも安全なセキュア実行環境で動作するセキュアモジュールは、
前記ノーマル実行環境で実行され、該ノーマル実行環境内の監視対象を監視する監視モジュールの正常・異常を判定する判定方法。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラム、デバイス及び判定方法に関する。
【背景技術】
【０００２】
ＩｏＴ（Internet of Things）では、多種多様なデバイスがネットワークに接続されることで新たな付加価値を生み出している。このようなデバイスに対するセキュリティ上の攻撃には多種多様な手法が存在し、より安全なセキュリティ対策が検討されている。
【０００３】
例えば、特許文献１には、外界からの攻撃を防止するための安全な実行環境を提供する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第６１３０６１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述のようなデバイスは、様々な場所に設置され、人手を介さずに自動的にネットワークに接続され、オンライン環境で使用される。外界からの攻撃を防止するため、例えば、ネットワークの状態、実行環境下で稼働しているプロセスの挙動などを監視する監視モジュールが必要となるが、監視モジュールが攻撃対象となり、監視モジュールの機能停止又は改ざんが行われると異常な動作を引き起こす事態となる。
【０００６】
本発明は、斯かる事情に鑑みてなされたものであり、デバイスをより安全な状態にすることができるコンピュータプログラム、デバイス及び判定方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の実施の形態に係るコンピュータプログラムは、コンピュータに、ノーマル実行環境から仮想的に分離され、前記ノーマル実行環境よりも安全なセキュア実行環境で所要の処理を実行させるためのコンピュータプログラムであって、コンピュータに、前記ノーマル実行環境で実行され、該ノーマル実行環境内の監視対象を監視する監視モジュールの正常・異常を判定する処理を実行させる。
【０００８】
本発明の実施の形態に係るデバイスは、ノーマル実行環境及び該ノーマル実行環境よりも安全なセキュア実行環境を仮想的に分離して実行環境を提供する仮想化モジュールを備え、本発明の実施の形態に係るコンピュータプログラムを前記セキュア実行環境にインストール可能とする。
【０００９】
本発明の実施の形態に係る判定方法は、監視対象を監視する監視モジュールの正常・異常を判定する判定方法であって、ノーマル実行環境から仮想的に分離され、前記ノーマル実行環境よりも安全なセキュア実行環境で動作するセキュアモジュールは、前記ノーマル実行環境で実行され、該ノーマル実行環境内の監視対象を監視する監視モジュールの正常・異常を判定する。
【発明の効果】
【００１０】
本発明によれば、デバイスをより安全な状態にすることができる。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態のデバイスの構成の一例を示すブロック図である。
【図２】本実施の形態の認証モジュールによる起動時の動作の一例を示す説明図である。
【図３】本実施の形態の認証モジュールによる監視モジュールの正常・異常の判定動作の第１実施を示す説明図である。
【図４】本実施の形態の認証モジュールによる監視モジュールの正常・異常の判定動作の第２実施を示す説明図である。
【図５】本実施の形態の認証モジュールによる監視モジュールの正常・異常の判定動作の第３実施を示す説明図である。
【図６】本実施の形態の認証モジュールによる監視モジュールの正常・異常の判定動作の第４実施を示す説明図である。
【図７】本実施の形態の認証モジュールによる監視モジュールの正常・異常の判定動作の第５実施を示す説明図である。
【図８】本実施の形態の認証モジュールによる監視モジュールの正常・異常の判定処理の手順の第１実施を示すフローチャートである。
【図９】本実施の形態の認証モジュールによる監視モジュールの正常・異常の判定処理の手順の第１実施を示すフローチャートである。
【図１０】本実施の形態の認証モジュールによる監視モジュールの正常・異常の判定処理の手順の第２実施を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明の実施の形態を図面に基づいて説明する。図１は本実施の形態のデバイス１００の構成の一例を示すブロック図である。デバイス１００は、「モノのインターネット」（ＩｏＴ）でいうところの「モノ」に該当するデバイス（電子デバイスとも称する）を含む。デバイス１００は、例えば、単一のＳｏＣ（System on a Chip）で構成され、一個の半導体チップ上にシステムの動作に必要な機能の多く、あるいは全ての機能を一体化して実装している。
【００１３】
デバイス１００は、ネットワーク通信部１２を備える。ネットワーク通信部１２は、デバイス１００をネットワークに接続する機能を有し、ネットワーク上のサービスサーバ（不図示）との間で情報の送受信を行うことができる。ネットワーク通信部１２は、不図示のセンサ類で検出した情報をサービスサーバ（不図示）に送信することができる。
【００１４】
デバイス１００では、仮想化技術を実現するハイパーバイザー１０によって、仮想的に分離された複数の実行環境が提供されている。図１では、二つの実行環境が図示されている。一の実行環境は、ノーマル領域２０（ノーマル実行環境、ノーマルドメインとも称する）であり、他の実行環境は、セキュア領域３０（セキュア実行環境、セキュアドメインとも称する）である。すなわち、ハイパーバイザー１０は、ＣＰＵ１１上で動作し、ノーマル領域２０の仮想コンピュータ及びセキュア領域３０の仮想コンピュータをデバイス１００上で構築している。なお、ハイパーバイザー１０の機能の一部をハードウェア化し、プロセッサコアなどに組み込み高速化を図ることができる。この場合、プロセッサコアには、例えば、ＴｒｕｓｔＺｏｎｅ（登録商標）と称される技術を搭載することができる。ノーマル領域２０とセキュア領域３０との間では、メモリ空間、入出力装置などが分離されている。
【００１５】
ノーマル領域２０は、広く一般的に利用されているＯＳの実行環境であり、セキュア領域３０へのアクセスが制限される以外、特段の機能制約がない実行環境である。
【００１６】
セキュア領域３０は、例えば、セキュリティ機能を隔離する目的で、同一のＳｏＣ上でノーマル領域２０とは別に提供される独立した実行環境である。セキュア領域３０は、ノーマル領域２０からのアクセスが制限されている。
【００１７】
上述のように、ノーマル領域２０からセキュア領域３０にはアクセスできないように制限されるので、ノーマル領域２０からセキュア領域３０で実行する処理を呼び出すためには、ハイパーバイザー１０を経由しなければならない。
【００１８】
ノーマル領域２０には、リッチＯＳ２１、揮発性のメモリ２２、不揮発性のストレージ２７、監視モジュール２３、ファイルシステム２４、アプリケーション２５、２６などが存在する。また、セキュア領域３０には、セキュアＯＳ３１、揮発性のセキュアメモリ３２、不揮発性のセキュアストレージ３４、コンピュータプログラムとしての認証モジュール３３などが存在する。なお、アプリケーションの数は二つに限定されない。
【００１９】
ファイルシステム２４は、ストレージ２７に含まれるフォルダ及びパスの構造を解釈し、アクセスするために利用される。
【００２０】
メモリ２２には、ノーマル領域２０のストレージ２７に格納されたデータが展開される。また、メモリ２２には、監視モジュール２３で利用される一時的なデータ（例えば、セッション鍵など）が格納される。メモリ２２の内容は、セキュア領域３０のアプリケーション（例えば、認証モジュール３３など）からも参照することができる。
【００２１】
ストレージ２７には、認証情報、公開鍵α及び監視モジュール２３の実行ファイルなどの情報が格納され、必要に応じて当該情報はメモリ２２に展開される。なお、認証情報、公開鍵αは、ファイルとして保存されていてもよく、監視モジュール２３の実行コード中にハードコードされていてもよい。ファイルとして保存する場合は、アクセス権の設定、データの暗号化などの措置を複合的に講じることが望ましい。また、監視モジュール２３の実行コード中にハードコードする場合は、難読化又は暗号化などアプリケーションの保護を施すことが望ましい。
【００２２】
セキュアメモリ３２は、セキュア領域３０のセキュアストレージ３４に格納されたデータが展開される。また、セキュアメモリ３２には、認証モジュール３３で利用される一時的なデータ（例えば、セッション鍵など）が格納される。セキュアメモリ３２の内容は、ノーマル領域２０のアプリケーションからは参照することができない。
【００２３】
セキュアストレージ３４には、認証情報、秘密鍵β、監視モジュール２３の実行コード又は該実行コードのハッシュ値、認証モジュール３３の実行ファイルなどの情報が格納され、必要に応じて当該情報は、セキュアメモリ３２に展開される。認証情報、秘密鍵β、監視モジュール２３の実行コード又は該実行コードのハッシュ値はファイルとして保存されてもよく、あるいは、認証モジュール３３の実行コード中にハードコードされていてもよい。認証情報は、監視モジュール２３を認証するための情報である。
【００２４】
監視モジュール２３は、ノーマル領域２０内の監視対象を監視する。監視対象は、例えば、ノーマル領域２０で動作するアプリケーション２５、２６、リッチＯＳ２１等から出力されるログファイル（実行履歴、デバッグ情報、アプリケーション間の通信ログなど）、ノーマル領域２０で稼働しているアプリケーション２５、２６の挙動、ファイルシステム２４の変更、セキュリティポリシーの変更、ネットワークの状態及びネットワークを伝送するパケットの中身などを含む。なお、監視対象は、上述のものに限定されない。
【００２５】
認証モジュール３３は、認証情報の照合処理、復号処理、ハッシュ値の算出処理、監視モジュール２３の正常・異常を判定する処理などを行うことができる。
【００２６】
認証モジュール３３が、監視モジュール２３の正常・異常を判定することにより、監視モジュール２３が外部からの攻撃に晒されて正常な動作をすることができない場合、監視モジュール２３の異常を判定することができ、外部からの攻撃を検出することができる。また、認証モジュール３３は、監視モジュール２３が動作するノーマル領域２０から分離されたより安全なセキュア領域３０で動作するので、外部からの攻撃に晒される可能性は極めて低く、ハッキングの難易度を高め、デバイス１００をより安全な状態に保つことができる。
【００２７】
次に、認証モジュール３３の動作について具体的に説明する。
【００２８】
図２は本実施の形態の認証モジュール３３による起動時の動作の一例を示す説明図である。起動時は、例えば、デバイス１００の起動時（リッチＯＳ２１の起動時）、ノーマル領域２０内のアプリケーション２５、２６を立ち上げ時などを含む。以下、ステップＰ１からＰ６について説明する。
【００２９】
ステップＰ１では、監視モジュール２３は、ストレージ２７からメモリ２２に展開された認証情報を公開鍵αで暗号化したデータを送信する。
【００３０】
ステップＰ２では、認証モジュール３３は、受信したデータを秘密鍵βで復号し、復号して得られた認証情報とセキュアメモリ３２に展開した認証情報との照合を行う。
【００３１】
ステップＰ３では、認証モジュール３３は、認証情報が一致している場合、認証完了を送信する。両方の認証情報が一致する場合、監視モジュール２３から取得した認証情報は正当であると判定することができる。また、両方の認証情報が一致しない場合、監視モジュール２３から取得した認証情報は正当でないと判定することができる。これにより、なりすまし等の不正を防止することができる。
【００３２】
ステップＰ４では、監視モジュール２３は、セッション鍵を生成する。
【００３３】
ステップＰ５では、監視モジュール２３は、セッション鍵を公開鍵αで暗号化したデータを送信する。
【００３４】
ステップＰ６では、認証モジュール３３は、受信したデータを秘密鍵βで復号してセッション鍵を取得する。これにより、認証モジュール３３と監視モジュール２３とは、お互いに共通のセッション鍵を有することができ、以後の通信に使用することができる。
【００３５】
図３は本実施の形態の認証モジュール３３による監視モジュール２３の正常・異常の判定動作の第１実施を示す説明図である。以下、ステップＰ１１からＰ１５について説明する。
【００３６】
ステップＰ１１では、監視モジュール２３は、確認情報を送信する。
【００３７】
ステップＰ１２では、認証モジュール３３は、監視モジュール２３から確認情報を受信することができたので、監視モジュール２３は正常であると判定する。
【００３８】
ステップＰ１３では、監視モジュール２３は、確認情報を送信する。ステップＰ１３の時点とステップＰ１１の時点との間の所定時間Ｔは、予め定められており、例えば、１０秒、２０秒、３０秒、１分など、デバイス１００の使用環境、機能等に応じて適宜決定することができる。確認情報の出力のタイミングは、周期的に限定されるものではなく、例えば、デバイス１００のＣＰＵ１１の負荷が増加した場合、あるいは異常の予兆を検知した場合など不定期的でもよい。
【００３９】
ステップＰ１４では、認証モジュール３３は、直近に確認情報を受信した時点から所定時間Ｔが経過する以前に、監視モジュール２３から確認情報を再度受信することができたので、監視モジュール２３は正常であると判定する。
【００４０】
ステップＰ１５では、ステップＰ１３の時点から所定時間Ｔが経過しているにも関わらず、監視モジュール２３は、確認情報を送信することができない。
【００４１】
ステップＰ１６では、認証モジュール３３は、監視モジュール２３から確認情報を再度受信することができないので、監視モジュール２３は異常であると判定する。
【００４２】
上述のように、確認情報が出力されるタイミングを経過しても、監視モジュール２３が確認情報を出力しない場合、監視モジュール２３が異常であると判定することができる。
【００４３】
図４は本実施の形態の認証モジュール３３による監視モジュール２３の正常・異常の判定動作の第２実施を示す説明図である。以下、ステップＰ２１からＰ２５について説明する。
【００４４】
ステップＰ２１では、監視モジュール２３は、変数Ｘに乱数Ａを格納する。変数Ｘは、監視モジュール２３側の確認情報となる。
【００４５】
ステップＰ２２では、監視モジュール２３は、変数Ｘをセッション鍵で暗号化したデータを送信する。
【００４６】
ステップＰ２３では、認証モジュール３３は、受信したデータをセッション鍵で復号して得られた変数Ｘを変数Ｙに格納する。変数Ｙは、認証モジュール３３側の確認情報となる。
【００４７】
ステップＰ２４では、ステップＰ２２の時点から所定時間Ｔだけ経過したので、監視モジュール２３は、変数Ｘをセッション鍵で暗号化したデータを送信する。
【００４８】
ステップＰ２５では、認証モジュール３３は、受信したデータをセッション鍵で復号して変数Ｘを取得する。変数Ｙが格納されているので、認証モジュール３３は、変数Ｘと変数Ｙとが一致するか否かを判定する。変数Ｘと変数Ｙとが一致する場合、監視モジュール２３が正常であると判定することができる。変数Ｘと変数Ｙとが一致しない場合、監視モジュール２３が異常であると判定することができる。
【００４９】
上述のように、確認情報がセッション鍵で保護されるので、認証情報の盗聴又は改ざんを防止することができる。
【００５０】
図５は本実施の形態の認証モジュール３３による監視モジュール２３の正常・異常の判定動作の第３実施を示す説明図である。以下、ステップＰ３１からＰ３６について説明する。
【００５１】
ステップＰ３１では、監視モジュール２３は、変数Ｘに乱数Ａを格納する。変数Ｘは、監視モジュール２３側の確認情報となる。
【００５２】
ステップＰ３２では、監視モジュール２３は、変数Ｘをセッション鍵で暗号化したデータを送信する。
【００５３】
ステップＰ３３では、認証モジュール３３は、受信したデータをセッション鍵で復号して得られた変数Ｘを変数Ｙに格納する。変数Ｙは、認証モジュール３３側の確認情報となる。
【００５４】
ステップＰ３４では、監視モジュール２３は、変数Ｘに（Ｘ＋ｄ）を格納する。ここでは、確認情報を更新する所定のアルゴリズムは、更新の都度、所定値ｄを加算するというアルゴリズムとなる。なお、所定のアルゴリズムは、上述の例に限定されない。
【００５５】
ステップＰ３５では、ステップＰ３２の時点から所定時間Ｔだけ経過したので、監視モジュール２３は、変数Ｘをセッション鍵で暗号化したデータを送信する。
【００５６】
ステップＰ３６では、認証モジュール３３は、受信したデータをセッション鍵で復号して変数Ｘを取得する。変数Ｙが格納されているので、認証モジュール３３は、前述のアルゴリズムと同じアルゴリズムを用いて、変数Ｙを（Ｙ＋ｄ）とする。認証モジュール３３は、変数Ｘと変数（Ｙ＋ｄ）とが一致するか否かを判定する。変数Ｘと変数（Ｙ＋ｄ）とが一致する場合、監視モジュール２３が正常であると判定することができる。監視モジュール２３が正常である場合、認証モジュール３３は、変数Ｙに変数Ｘ（＝Ｙ＋ｄ）を格納する。変数Ｘと変数（Ｙ＋ｄ）とが一致しない場合、監視モジュール２３が異常であると判定することができる。
【００５７】
上述のように、監視モジュール２３が正常であれば、同じアルゴリズムで更新される確認情報は同一となる。確認情報が同一でない場合には、監視モジュール２３が正しく確認情報を更新することができていないので、監視モジュール２３が異常であると判定することができる。また、認証情報を更新することにより、リプレイ攻撃を防止することができる。
【００５８】
上述の例では、監視モジュール２３が正常であるか否かを、監視モジュール２３が送信する確認情報に基づいて判定する構成であったが、監視モジュール２３が正常・異常の判定は、これに限定されない。以下では、監視モジュール２３の実行コード（実行ファイル）を用いる構成について説明する。
【００５９】
図６は本実施の形態の認証モジュール３３による監視モジュール２３の正常・異常の判定動作の第４実施を示す説明図である。
【００６０】
認証モジュール３３は、ノーマル領域２０内のメモリ２２に展開された監視モジュール２３の実行コードを取得する。実行コードは、監視モジュール２３の全部でもよく一部でもよい。
【００６１】
認証モジュール３３は、取得した実行コードと、セキュア領域３０内のセキュアメモリ３２に展開した監視モジュール２３の実行コードとが同一であるか否かを判定する。実行コードが一致する場合、監視モジュールが正常であると判定することができる。実行コードが一致しない場合、監視モジュールが異常であると判定することができる。
【００６２】
これにより、監視モジュール２３の改ざんなどを検出することができる。
【００６３】
図７は本実施の形態の認証モジュール３３による監視モジュール２３の正常・異常の判定動作の第５実施を示す説明図である。
【００６４】
認証モジュール３３は、ノーマル領域２０内のメモリ２２に展開された監視モジュール２３の実行コードを取得する。認証モジュール３３は、取得した実行コードのハッシュ値を算出する。なお、ハッシュ値の算出には、適宜のハッシュ関数を用いることができる。
【００６５】
認証モジュール３３は、算出したハッシュ値と、セキュアメモリ３２に展開した監視モジュール２３の実行コードのハッシュ値とが同一であるか否かを判定する。ハッシュ値が一致する場合、監視モジュールが正常であると判定することができる。ハッシュ値が一致しない場合、監視モジュールが異常であると判定することができる。
【００６６】
これにより、監視モジュール２３の改ざんなどを検出することができる。
【００６７】
認証モジュール３３は、監視モジュールが２３異常であると判定した場合、ノーマル領域２０で実行されるリッチＯＳ２１を再起動する処理を行う。リッチＯＳ２１の再起動を行うことにより、改ざんされたファイルの初期化、不正なファイルの除去などを行うことができ、ノーマル領域２０内の監視モジュール２３を含むアプリケーション２５、２６、リッチＯＳ２１、ファイルシステム２４等の修復することができる。また、ノーマル領域２０内で動作するネットワーク通信部１２なども初期化することができ、ノーマル領域２０の修復を行うことができる。
【００６８】
また、ノーマル領域２０がハッキングなどの攻撃を受けた場合、例えば、ノーマル領域２０内に不正なアプリケーション又は不正なファイル（正常時には存在しないアプリケーション又はファイル）が導入される。このような場合、監視モジュール２３が検知し、認証モジュール３３に通知することにより、認証モジュール３３は、ノーマル領域２０を再起動して修復する（不正なアプリケーション又は不正なファイルを削除する）ことができる。
【００６９】
図８及び図９は本実施の形態の認証モジュール３３による監視モジュール２３の正常・異常の判定処理の手順の第１実施を示すフローチャートである。認証モジュール３３は、監視モジュール２３の認証情報を暗号化したデータを取得し（Ｓ１１）、取得したデータを復号して認証情報を取得する（Ｓ１２）。認証モジュール３３は、認証情報が一致するか否かを判定する（Ｓ１３）。
【００７０】
認証情報が一致しない場合（Ｓ１３でＮＯ）、認証モジュール３３は、後述のステップＳ２３の処理を行う。認証情報が一致する場合（Ｓ１３でＹＥＳ）、認証モジュール３３は、セッション鍵を暗号化したデータを取得し（Ｓ１４）、取得したデータを復号してセッション鍵を取得する（Ｓ１５）。
【００７１】
認証モジュール３３は、確認情報をセッション鍵で暗号化したデータを取得し（Ｓ１６）、取得したデータをセッション鍵で復号して確認情報を取得する（Ｓ１７）。認証モジュール３３は、取得した確認情報をセキュアメモリ３２に格納する（Ｓ１８）。
【００７２】
認証モジュール３３は、確認情報をセッション鍵で暗号化したデータを取得したか否かを判定し（Ｓ１９）、データを取得していない場合（Ｓ１９でＮＯ）、直近のデータ取得時点から所定時間経過しているか否かを判定する（Ｓ２０）。所定時間経過していない場合（Ｓ２０でＮＯ）、認証モジュール３３は、ステップＳ１９の処理を続ける。所定時間経過した場合（Ｓ２０でＹＥＳ）、認証モジュール３３は、後述のステップＳ２３の処理を行う。
【００７３】
データを取得した場合（Ｓ１９でＹＥＳ）、認証モジュール３３は、確認情報が一致するか否かを判定する（Ｓ２１）。確認情報が一致する場合（Ｓ２１でＹＥＳ）、認証モジュール３３は、監視モジュール２３は正常であると判定し（Ｓ２２）、後述のステップＳ２５の処理を行う。
【００７４】
確認情報が一致しない場合（Ｓ２１でＮＯ）、認証モジュール３３は、監視モジュール２３は異常であると判定し（Ｓ２３）、リッチＯＳ２１を再起動し（Ｓ２４）、処理を終了するか否かを判定する（Ｓ２５）。処理を終了しない場合（Ｓ２５でＮＯ）、認証モジュール３３は、ステップＳ１６以降の処理を行う。処理を終了する場合（Ｓ２５でＹＥＳ）、認証モジュール３３は、処理を終了する。
【００７５】
図１０は本実施の形態の認証モジュール３３による監視モジュール２３の正常・異常の判定処理の手順の第２実施を示すフローチャートである。認証モジュール３３は、メモリ２２に展開された監視モジュール２３の実行コードを取得し（Ｓ３１）、取得した実行コードのハッシュ値を算出する（Ｓ３２）。
【００７６】
認証モジュール３３は、算出したハッシュ値と、セキュアメモリ３２に展開していた監視モジュール２３の実行コードのハッシュ値とを比較し（Ｓ３３）、ハッシュ値が一致するか否かを判定する（Ｓ３４）。ハッシュ値が一致する場合（Ｓ３４でＹＥＳ）、認証モジュール３３は、監視モジュール２３は正常であると判定し（Ｓ３５）、処理を終了する。
【００７７】
ハッシュ値が一致しない場合（Ｓ３４でＮＯ）、認証モジュール３３は、監視モジュール２３は異常であると判定し（Ｓ３６）、リッチＯＳ２１を再起動し（Ｓ３７）、処理を終了する。
【００７８】
上述のように、本実施の形態によれば、ハッキングの難易度を高め、デバイスをより安全な状態に保つことができる。
【００７９】
本実施の形態において、監視モジュール２３は、認証情報を保護するため、難読化、動的解析対策などを施すこともできる。これにより、リバースエンジニアリングされた場合、あるいは、監視モジュール２３を動作させた場合に、認証情報の内容が解読されることを防止できる。
【００８０】
本実施の形態において、監視モジュール２３は、監視対象の異常を検知した場合、ログを記録すること、あるいはネットワークを介して外部の端末に異常検知の通知を行うことができる。また、異常検知を認証モジュール３３に通知して、ノーマル領域２０を再起動させることもできる。
【００８１】
本実施の形態に係るコンピュータプログラムは、コンピュータに、ノーマル実行環境から仮想的に分離され、前記ノーマル実行環境よりも安全なセキュア実行環境で所要の処理を実行させるためのコンピュータプログラムであって、コンピュータに、前記ノーマル実行環境で実行され、該ノーマル実行環境内の監視対象を監視する監視モジュールの正常・異常を判定する処理を実行させる。
【００８２】
本実施の形態に係るデバイスは、ノーマル実行環境及び該ノーマル実行環境よりも安全なセキュア実行環境を仮想的に分離して実行環境を提供する仮想化モジュールを備え、本実施の形態に係るコンピュータプログラムを前記セキュア実行環境にインストール可能とする。
【００８３】
本実施の形態に係る判定方法は、監視対象を監視する監視モジュールの正常・異常を判定する判定方法であって、ノーマル実行環境から仮想的に分離され、前記ノーマル実行環境よりも安全なセキュア実行環境で動作するセキュアモジュールは、前記ノーマル実行環境で実行され、該ノーマル実行環境内の監視対象を監視する監視モジュールの正常・異常を判定する。
【００８４】
デバイスには、例えば、ハイパーバイザーなどの仮想化技術を用いたモジュールによって仮想的に分離された複数（例えば、二つ）の実行環境が提供されている。一の実行環境は、ノーマル実行環境（ノーマルドメインとも称する）であり、リッチＯＳ、アプリケーションなどが動作するものである。他の実行環境は、セキュア実行環境（セキュアドメインとも称する）であり、ノーマル実行環境と分離され、セキュリティ上より安全な実行環境である。本実施の形態のコンピュータプログラムは、認証モジュールであり、セキュア実行環境で動作する。監視モジュールは、ノーマル実行環境で動作する。
【００８５】
監視モジュールは、ノーマル実行環境内の監視対象を監視する。監視対象は、例えば、ノーマル実行環境で動作するアプリケーション及びリッチＯＳ等から出力されるログファイル（実行履歴、デバッグ情報、アプリケーション間の通信ログなど）、ノーマル実行環境で稼働しているアプリケーション（プロセス）、ネットワークの状態及びネットワークを伝送するパケットの中身などを含む。
【００８６】
認証モジュールは、監視モジュールの正常・異常を判定する処理を行う。これにより、監視モジュールが外部からの攻撃に晒されて正常な動作をすることができない場合、監視モジュールの異常を判定することができ、外部からの攻撃を検出することができる。また、認証モジュールは、監視モジュールが動作するノーマル実行環境から分離されたより安全なセキュア実行環境で動作するので、外部からの攻撃に晒される可能性は極めて低く、デバイスをより安全な状態に保つことができる。
【００８７】
本実施の形態に係るコンピュータプログラムは、コンピュータに、前記監視モジュールが出力する、認証情報を暗号化した情報を取得する処理と、取得した情報を所定の秘密鍵で復号して得られた認証情報及び前記セキュア実行環境内のセキュアメモリに展開した認証情報を照合する処理とを実行させる。
【００８８】
認証モジュールは、監視モジュールが認証情報を暗号化した情報を出力すると、当該情報を取得する。ノーマル実行環境内のメモリには、予め認証情報、暗号化のための鍵（例えば、公開鍵）が展開されている。監視モジュールは、認証情報を公開鍵で暗号化した情報（データ）を、ハイパーバイザーを介してセキュア実行環境内の認証モジュールに出力する。
【００８９】
認証モジュールは、取得した情報を所定の秘密鍵で復号して認証情報を取得すると、取得した認証情報とセキュア実行環境内のセキュアメモリに展開した認証情報とを照合する。両方の認証情報が一致する場合、監視モジュールから取得した認証情報は正当であると判定することができる。また、両方の認証情報が一致しない場合、監視モジュールから取得した認証情報は正当でないと判定することができる。これにより、なりすまし等の不正を防止することができる。
【００９０】
本実施の形態に係るコンピュータプログラムは、コンピュータに、前記監視モジュールが繰り返し出力する確認情報を取得する処理と、取得した確認情報に基づいて、前記監視モジュールの正常・異常を判定する処理とを実行させる。
【００９１】
認証モジュールは、監視モジュールが繰り返し出力する確認情報を取得する。確認情報の出力は、例えば、１０秒に１回、１分に１回の如く周期的でもよく、デバイスのＣＰＵの負荷が増加した場合、あるいは異常の予兆を検知した場合など不定期的でもよい。
【００９２】
認証モジュールは、取得した確認情報に基づいて、監視モジュールの正常・異常を判定する。例えば、確認情報が出力されるタイミングを経過しても、監視モジュールが確認情報を出力しない場合、監視モジュールが異常であると判定することができる。また、監視モジュールが出力した確認情報が、所定の確認情報と異なる場合、監視モジュールが異常であると判定することができる。
【００９３】
本実施の形態に係るコンピュータプログラムは、コンピュータに、前記監視モジュールが出力する、所定のセッション鍵を暗号化したセッション鍵情報を取得する処理と、取得したセッション鍵情報を所定の秘密鍵で復号してセッション鍵を取得する処理と、前記監視モジュールが出力する、前記所定のセッション鍵で確認情報を暗号化した暗号化確認情報を取得する処理と、取得した暗号化確認情報を取得したセッション鍵で復号して確認情報を取得する処理とを実行させる。
【００９４】
認証モジュールは、監視モジュールが所定のセッション鍵を暗号化したセッション鍵情報を出力すると、当該セッション鍵情報を取得する。セッション鍵の暗号化は、ノーマル実行環境内のメモリに予め展開された鍵（例えば、公開鍵）を用いることができる。
【００９５】
認証モジュールは、取得したセッション鍵情報を所定の秘密鍵で復号してセッション鍵を取得する。これにより、認証モジュールと監視モジュールとは、お互いに共通のセッション鍵を有することができ、以後の通信に使用することができる。
【００９６】
認証モジュールは、監視モジュールが所定のセッション鍵で確認情報を暗号化した暗号化確認情報を出力すると、当該暗号化確認情報を取得する。認証モジュールは、取得した暗号化確認情報を取得したセッション鍵で復号して確認情報を取得する。
【００９７】
これにより、確認情報がセッション鍵で保護されるので、認証情報の盗聴や改ざんを防止することができる。
【００９８】
本実施の形態に係るコンピュータプログラムは、コンピュータに、前記監視モジュールが出力する、出力の都度所定のアルゴリズムで更新される確認情報を前記所定のセッション鍵で暗号化した暗号化確認情報を取得する処理と、取得した暗号化確認情報を前記取得したセッション鍵で復号して確認情報を取得する処理と、取得した確認情報が、前記所定のアルゴリズムで更新されているか否かを判定する処理と、前記所定のアルゴリズムで更新されていない場合、前記監視モジュールが異常であると判定する処理とを実行させる。
【００９９】
認証モジュールは、監視モジュールが出力の都度所定のアルゴリズムで更新される確認情報を所定のセッション鍵で暗号化した暗号化確認情報を出力すると、当該暗号化確認情報を取得する。すなわち、監視モジュールは、暗号化確認情報を出力する場合、その都度、所定のアルゴリズムで確認情報を更新するので、出力の都度、確認情報は更新される。
【０１００】
認証モジュールは、取得した暗号化確認情報を取得したセッション鍵で復号して確認情報を取得する。認証モジュールは、取得した確認情報が、所定のアルゴリズムで更新されているか否かを判定し、所定のアルゴリズムで更新されていない場合、監視モジュールが異常であると判定する。
【０１０１】
監視モジュールが正常であれば、同じアルゴリズムで更新される確認情報は同一となる。確認情報が同一でない場合には、監視モジュールが正しく確認情報を更新することができていないので、監視モジュールが異常であると判定することができる。認証情報の更新を行うことにより、リプレイ攻撃を防止することができる。
【０１０２】
本実施の形態に係るコンピュータプログラムは、コンピュータに、前記ノーマル実行環境内のメモリに展開された前記監視モジュールの実行コードを取得する処理と、取得した実行コードと、前記セキュア実行環境内のセキュアメモリに展開した前記監視モジュールの実行コードとが同一であるか否かを判定する処理と、実行コード同士が同一でないと判定した場合、前記監視モジュールが異常であると判定する処理とを実行させる。
【０１０３】
認証モジュールは、ノーマル実行環境内のメモリに展開された監視モジュールの実行コードを取得する。実行コードは、監視モジュールの全部でもよく一部でもよい。
【０１０４】
認証モジュールは、取得した実行コードと、セキュア実行環境内のセキュアメモリに展開した監視モジュールの実行コードとが同一であるか否かを判定し、実行コード同士が同一でないと判定した場合、監視モジュールが異常であると判定する。
【０１０５】
これにより、監視モジュールの改ざんなどを検出することができる。
【０１０６】
本実施の形態に係るコンピュータプログラムは、コンピュータに、取得した実行コードのハッシュ値を算出する処理と、算出したハッシュ値と、前記セキュア実行環境内のセキュアメモリに展開した前記監視モジュールの実行コードのハッシュ値とが同一であるか否かを判定する処理と、ハッシュ値同士が同一でないと判定した場合、前記監視モジュールが異常であると判定する処理とを実行させる。
【０１０７】
認証モジュールは、取得した実行コードのハッシュ値を算出する。
【０１０８】
認証モジュールは、算出したハッシュ値と、セキュア実行環境内のセキュアメモリに展開した監視モジュールの実行コードのハッシュ値とが同一であるか否かを判定し、ハッシュ値同士が同一でないと判定した場合、監視モジュールが異常であると判定する。
【０１０９】
これにより、監視モジュールの改ざんなどを検出することができる。
【０１１０】
本実施の形態に係るコンピュータプログラムは、コンピュータに、前記監視モジュールが異常であると判定した場合、前記ノーマル実行環境で実行されるＯＳを再起動する処理を実行させる。
【０１１１】
認証モジュールは、監視モジュールが異常であると判定した場合、ノーマル実行環境で実行されるＯＳを再起動する処理を行う。ＯＳの再起動を行うことにより、改ざんされたファイルの初期化、不正なファイルの除去などを行うことができ、ノーマル実行環境内の監視モジュールを含むアプリケーション、ＯＳ等の修復することができる。
【符号の説明】
【０１１２】
１０  ハイパーバイザー
１１  ＣＰＵ
１２  ネットワーク通信部
２０  ノーマル領域
２１  リッチＯＳ
２２  メモリ
２３  監視モジュール
２４  ファイルシステム
２５、２６  アプリケーション
３０  セキュア領域
３１  セキュアＯＳ
３２  セキュアメモリ
３３  認証モジュール
【図１】
2019057167.tif 000003
【図２】
2019057167.tif 000004
【図３】
2019057167.tif 000005
【図４】
2019057167.tif 000006
【図５】
2019057167.tif 000007
【図６】
2019057167.tif 000008
【図７】
2019057167.tif 000009
【図８】
2019057167.tif 000010
【図９】
2019057167.tif 000011
【図１０】
2019057167.tif 000012