(本開示の基礎となった知見)
上記特許文献1の監視装置では、監視用の仮想マシンが乗っ取られない限り、他の仮想マシンの異常を検知できるが、定期的な検証であるため、検証のインターバル期間における不正なファイル操作またはネットワーク通信に対応することが難しく、検知の漏れが生じる。
このような課題を解決するために、本開示の一態様に係る監視装置は、2以上の仮想マシンを動作させる仮想化プラットフォームにおける監視装置であって、前記監視装置は、前記2以上の仮想マシンのうち、プロセスが送信または受信するコマンドを監視する1以上の監視プログラムが動作する第1仮想マシンにて動作し、前記監視装置は、前記第1仮想マシンと異なる第2仮想マシンにて動作するプロセスが送信または受信するコマンドを受信するコマンド受信部と、前記第2仮想マシンの構成情報を取得する構成情報取得部と、前記コマンドに含まれる識別子から前記コマンドの特性を参照し、前記構成情報及び前記コマンドの特性に応じて前記1以上の監視プログラムの実行方法を決定する監視プログラム制御部と、前記監視プログラムの監視結果を取得して、前記監視結果に異常が含まれる場合に前記異常を通知する異常対応部と、を備える。
これによれば、第2仮想マシンの構成情報及びコマンドの特性に応じて1以上の監視プログラムの実行方法を決定するため、第2仮想マシンの特性及びコマンドの特性に応じた適切な監視処理を実行することができる。これにより、監視処理の処理負荷を調整でき、また、コマンドのリアルタイム性が考慮された監視処理を実現することができ、コマンドへの監視処理を効率よく効果的に実行することができる。
また、さらに、前記第2仮想マシンのシステム状態を取得するシステム状態取得部を備え、前記監視プログラム制御部は、さらに前記システム状態に応じて、前記1以上の監視プログラムの実行方法を決定してもよい。
これによれば、さらに、第2仮想マシンのシステム状態に応じて1以上の監視プログラムの実行方法を決定するため、第2仮想マシンの状態に応じた適切な監視処理を実行することができる。これにより、監視処理の処理負荷を調整でき、また、コマンドのリアルタイム性が考慮された監視処理を実現することができ、コマンドへの監視処理を効率よく効果的に実行することができる。
また、前記コマンドの特性は、前記コマンドの送信元または送信先の仮想マシン、前記コマンドの送信元または送信先の電子制御装置、前記コマンドの送信方向、前記コマンドに含まれるファイル操作のアクセス先、前記コマンドに含まれるファイル操作の種類、前記送信元または前記送信先の仮想マシンのOS(Operating System)種別、前記送信元または前記送信先の仮想マシンの外部接続機能の有無、前記コマンドのASIL、及び、前記コマンドの車両制御への影響の少なくとも1つであってもよい。
このため、第2仮想マシンの特性及びコマンドの特性に応じた適切な監視処理を実行することができる。
また、前記システム状態は、前記監視装置を備える車両の走行状態、前記車両の走行モード、前記仮想マシンのシステム負荷、前記コマンドの処理におけるシステム負荷、前記仮想マシンのネットワーク接続状態、前記仮想マシン内のセキュリティ異常の有無、及び、仮想コマンドのセキュリティ異常の有無の少なくとも1つである。
また、前記監視プログラムの実行方法は、前記監視プログラムが有効であるか否か、前記監視プログラムの呼び出し方法、前記監視プログラムに設定されているタイムアウト時間、及び、前記監視プログラムの実行順序の少なくとも1つであってもよい。
これにより、監視処理の処理負荷を調整でき、また、コマンドのリアルタイム性が考慮された監視処理を実現することができる。
また、前記異常対応部は、さらに、前記コマンドの特性に応じて前記コマンドの異常を示すログを集約または集計してもよい。
このため、集約または集計した異常を分析に利用することができる。
また、前記監視プログラム制御部は、前記1以上の監視プログラムのうちの簡易監視プログラムの監視結果に応じて、前記簡易監視プログラムよりも処理負荷が高い詳細監視プログラムを呼び出してもよい。
また、さらに、2以上の前記監視プログラム制御部を備え、前記コマンドに対する前記1以上の監視プログラムは、前記コマンドの送信先が前記仮想化プラットフォーム上の仮想マシンであると判定された場合に、前記2以上の監視プログラム制御部のうち、前記コマンドに含まれる識別子及び前記構成情報に基づいて決定された1以上の監視プログラム制御部によって実行方法が決定されてもよい。
このため、コマンドに含まれる識別子及び構成情報に基づいて、監視処理を2以上の監視プログラム制御部で分担することができる。よって、遅延を抑えることができる。
また、前記2以上の前記監視プログラム制御部は、前記第2仮想マシンのシステム状態に応じて前記1以上の監視プログラムの実行方法を決定してもよい。
また、前記2以上の前記監視プログラム制御部のうち、第1監視プログラム制御部は、前記コマンドに第1識別子を付与し、第2監視プログラム制御部は、前記コマンドに第1識別子が付与されているか否かに応じて、前記1以上の監視プログラムの実行方法を決定してもよい。
本開示の一態様に係る監視方法は、2以上の仮想マシンを動作させる仮想化プラットフォームにおける監視装置による監視方法であって、前記監視装置は、前記2以上の仮想マシンのうち、プロセスが送信または受信するコマンドを監視する1以上の監視プログラムが動作する一の仮想マシンにて動作し、前記監視方法は、前記一の仮想マシンと異なる仮想マシンにて動作するプロセスが送信または受信するコマンドを取得し、前記仮想マシンの構成情報を取得し、前記コマンドに含まれる識別子から前記コマンドの特性を参照し、前記1以上の監視プログラムの実行方法を決定し、前記監視プログラムの監視結果を取得して、異常を通知する。
これによれば、第2仮想マシンの構成情報及びコマンドの特性に応じて1以上の監視プログラムの実行方法を決定するため、第2仮想マシンの特性及びコマンドの特性に応じた適切な監視処理を実行することができる。これにより、監視処理の処理負荷を調整でき、また、コマンドのリアルタイム性が考慮された監視処理を実現することができ、コマンドへの監視処理を効率よく効果的に実行することができる。
以下、実施の形態について、図面を参照しながら具体的に説明する。
なお、以下で説明する実施の形態は、いずれも包括的または具体的な例を示すものである。以下の実施の形態で示される数値、形状、材料、構成要素、構成要素の配置位置および接続形態、ステップ、ステップの順序などは、一例であり、本開示を限定する主旨ではない。また、以下の実施の形態における構成要素のうち、最上位概念を示す独立請求項に記載されていない構成要素については、任意の構成要素として説明される。
また、各図は、模式図であり、必ずしも厳密に図示されたものではない。また、各図において、同じ構成部材については同じ符号を付している。
(実施の形態)
[監視システムの全体構成図]
図1は、実施の形態における監視システムの全体構成図である。
監視システムは、監視サーバー10と、車載システム20とを備える。監視サーバー10と車載システム20とは、外部ネットワーク30を介して接続される。
外部ネットワーク30は、例えば、インターネットである。外部ネットワーク30の通信方法は、有線であっても無線であってもよい。また、無線通信方式は既存技術であるWi-Fi(登録商標)や、3G/LTE(Long Term Evolution)やBluetooth(登録商標)、V2X通信方式であってもよい。
監視サーバー10は、車載システム20から車載システム20のセキュリティ状態に関する情報である監視結果を取得して、グラフィカルユーザーインターフェースを用いて監視結果を表示する装置である。監視サーバー10は、例えば、セキュリティオペレーションセンターにて、セキュリティ分析官が監視結果を確認して、車載システム20において異常が発生した場合にソフトウェア更新などの対策を検討する際に利用される。
車載システム20は、通信の制御、車両の制御、及び、映像の出力などを実施し、車載システム20のセキュリティ状態を監視し、監視サーバー10へセキュリティ状態の監視結果を通知する装置である。図1では、車載システム20は1台のみ記載しているが、1以上の車載システム20それぞれが、監視サーバー10へセキュリティ状態の監視結果を送信する。車載システム20の詳細は後述する。
[車載システム20の全体構成図]
図2は、実施の形態における車載システムの構成図を示す図である。
車載システム20は、統合ECU200と、ゲートウェイECU300と、ステアリングECU400aと、ブレーキECU400bと、ZoneECU500と、フロントカメラECU600aと、リアカメラECU600bとを備える。
統合ECU200と、ゲートウェイECU300とは、ネットワークプロトコルの一種のCAN(Control Area Network)であるCAN40を介して接続される。ここで利用されるネットワークプロトコルは、CANに限らずに、CAN-FDや、FlexRayプロトコルなどの車載システムで利用されるネットワークプロトコルであってもよい。
また、ゲートウェイECU300と、ステアリングECU400aと、ブレーキECU400bとは、CAN41を介して接続される。
また、統合ECU200と、ZoneECU500とは、ネットワークプロトコルの一種のEthernet(商標登録)のプロトコルであるイーサネット50を介して接続される。イーサネット50は、例えば、SOME/IP(Scalable Service-Oriented MiddlewarE over IP)プロトコルである。ここで利用されるネットワークプロトコルは、SOME/IPでなくとも、SOME/IP-SDや、CAN-XLなど車載システムで利用されるネットワークプロトコルであってもよい。
また、ZoneECU500と、フロントカメラECU600aと、リアカメラECU600bとは、イーサネット51を介して接続される。イーサネット51は、イーサネット50と同じネットワークプロトコルであってもよいし、異なるネットワークプロトコルであってもよい。
また、統合ECU200と、監視サーバー10とは、外部ネットワーク30を介して接続される。
統合ECU200は、外部ネットワーク30、CAN40及びイーサネット50を介してメッセージを送受信する通信制御と、CAN40及びイーサネット50を介してゲートウェイECU300及びZoneECU500へ車両の制御を指示する車両制御と、インフォテイメントシステムやインストルメントパネルへの映像出力とを実施するECUである。また、統合ECU200は、統合ECU200のセキュリティ状態を監視し、監視サーバー10へ監視結果を通知するECUである。なお、本実施の形態における統合ECU200は、監視装置の一例であって、その詳細は後述する。
ゲートウェイECU300は、統合ECU200と、ステアリングECU400a及びブレーキECU400bとの間で送受信されるメッセージを仲介するECUである。
ステアリングECU400aは、車両に搭載されるステアリングによる操舵を制御するECUである。
ブレーキECU400bは、車両に搭載されるブレーキを制御するECUである。
車載システム20は、ステアリングECU400a及びブレーキECU400bの他に、車両のエンジンやボディを制御するECUを用いて車両の走る、曲がる、止まるといった制御を実現する。
ZoneECU500は、統合ECU200と、フロントカメラECU600a及びリアカメラECU600bとの間で送受信されるメッセージを仲介するECUである。
フロントカメラECU600aは、車両の前方に搭載され、車両の前方を撮影するカメラの映像を取得するECUである。
リアカメラECU600bは、車両の後方に搭載され、車両の後方を撮影するカメラの映像を取得するECUである。
図2では、フロントカメラECUとリアカメラECUのみが記載されているが、GPSなどの各種センサー情報を収集するECUを用いて、自動運転やアダプティブクルーズコントロール、自動駐車などの先進運転支援機能を実現してもよい。
[統合ECUの構成図]
図3は、実施の形態における統合ECU200の構成図である。統合ECU200は、外部アプリA100と、制御アプリA200と、映像アプリA300と、外部仮想マシンVM100と、制御仮想マシンVM200と、映像仮想マシンVM300と、仮想化プラットフォームVP100と、監視アプリA400と、監視仮想マシンVM400とを備える。なお、以下では、外部アプリA100と、制御アプリA200と、映像アプリA300を総称してアプリケーションと呼ぶことがある。また、外部仮想マシンVM100と、制御仮想マシンVM200と、映像仮想マシンVM300と、監視仮想マシンVM400とを総称して仮想マシンと呼ぶことがある。
仮想化プラットフォームVP100は、ハイパーバイザ等の仮想ソフトウェア基盤であり、1以上の仮想マシンを実行及び管理するソフトウェアである。一般に、ハイパーバイザは、タイプ1と呼ばれるベアメタル型ハイパーバイザと、タイプ2と呼ばれるホスト型とに区別される。組み込みシステムでは、一般に、ハイパーバイザによる処理のオーバーヘッドを考慮して、タイプ1が用いられる。タイプ1のハイパーバイザは、コードサイズが小さいため、脆弱性を含む可能性が低く、アプリケーションや仮想マシンと比較して信頼できると想定できる。
実施の形態では、仮想化システムがタイプ1のハイパーバイザにより実現される例について説明するが、仮想化システムは、タイプ2のハイパーバイザにより実現されてもよい。
外部仮想マシンVM100は、外部アプリA100を動作させるオペレーティングシステムである。外部アプリA100は、外部ネットワーク30を介して監視サーバー10と通信するアプリケーションソフトウェアプログラムである。
制御仮想マシンVM200は、制御アプリA200を動作させるオペレーティングシステムである。制御アプリA200は、CAN40を介してゲートウェイECU300と通信し、車載システム20を備える車両の走行に関する動作を制御するアプリケーションソフトウェアプログラムである。
映像仮想マシンVM300は、映像アプリA300を動作させるオペレーティングシステムである。映像アプリA300は、イーサネット50を介してZoneECU500と通信し、カメラの映像などを取得し、インフォテイメントシステムやインストルメントパネル、ヘッドアップディスプレイに映像を出力するアプリケーションソフトウェアプログラムである。また、カメラ映像は自動運転などの先進運転支援機能を実現するための情報としても利用される。
監視仮想マシンVM400は、仮想ドライバを用いて監視アプリA400を動作させるオペレーティングシステムである。監視アプリA400は、例えば、監視仮想マシンVM400以外の仮想マシン、仮想化プラットフォーム100などを監視するアプリケーションソフトウェアプログラムである。
なお、本実施の形態における統合ECU200では、例えば、準仮想化技術(virtio)が用いられている。この準仮想化技術は、仮想化プラットフォーム100上の仮想マシンへ標準的なインタフェースを提供する技術であり、仮想化プラットフォーム100が接続する物理デバイス(ストレージ、ネットワークデバイスなど)と高速な通信を可能にする。
なお、図3では記載が省略されているが、燃料や給電状態、給油状態を管理する機能、事故などシステム異常が発生した場合に緊急アラートを発呼する機能、車両診断を制御する機能、外部デバイス接続を監視する機能が統合ECU200に搭載されてもよい。
なお、外部仮想マシンVM100はサードパーティアプリのダウンロードや、Wi-FiやBluetoothなど外部ネットワークとの接続があるため、攻撃者に乗っ取られる可能性が比較的高い。制御仮想マシンVM200は自動車の走る、止まる、曲がるなど走行に関する制御をおこなうコマンドを送受信するため、コマンドのリアルタイム性が必要とされる。映像仮想マシンVM300は、ディスプレイを制御するため、カメラや車速の表示など一定のリアルタイム性が必要であり、外部ネットワークとの接続がないため、乗っ取られる可能性は比較的低い。このため、映像仮想マシンVM300については、送信時のコマンドよりも受信時コマンドの監視が必要とされる。これらから、外部仮想マシンが送信元である通信は詳細な監視が必要であり、制御仮想マシンが送信元または送信先である場合は、リアルタイム性を達成するために、簡易な監視が望ましい。
[統合ECUの構成図の詳細]
図4は、実施の形態における統合ECU200の一部の構成を詳細に示すブロック図である。
外部仮想マシンVM100は、コマンドの送受信を実行するコマンド送受信部VM101を備える。コマンド送受信部VM101は、外部仮想マシンVM100以外の仮想マシン、外部ECU、外部デバイスなどへコマンドを送信する。また、コマンド送受信部VM101は、外部仮想マシンVM100以外の仮想マシン、外部ECU、外部デバイスなどからコマンドを受信する。
制御仮想マシンVM200は、コマンドの送受信を実行するコマンド送受信部VM201を備える。コマンド送受信部VM201は、制御仮想マシンVM200以外の仮想マシン、外部ECU、外部デバイスなどへコマンドを送信する。また、コマンド送受信部VM201は、外部仮想マシンVM100以外の仮想マシン、外部ECU、外部デバイスなどからコマンドを受信する。
映像仮想マシンVM300は、コマンドの送受信を実行するコマンド送受信部VM301を備える。コマンド送受信部VM301は、外部仮想マシンVM100以外の仮想マシン、外部ECU、外部デバイスなどへコマンドを送信する。また、コマンド送受信部VM301は、外部仮想マシンVM100以外の仮想マシン、外部ECU、外部デバイスなどからコマンドを受信する。
監視仮想マシンVM400の監視アプリA400は、コマンド受信部VM411、監視プログラム制御部VM412、簡易監視プログラムVM413、詳細監視プログラムVM414、異常対応部VM415、コマンド送信部VM416、システム状態取得部VM417、及び、システム構成取得部VM418を備える。
コマンド受信部VM411は、監視仮想マシンVM400以外の仮想マシン、外部ECU、外部デバイスなどからコマンドを受信する。コマンド受信部VM411は、監視仮想マシンVM400以外の仮想マシン、つまり、外部仮想マシンVM100、制御仮想マシンVM200、及び、映像仮想マシンVM300のうちの少なくとも1つの対象仮想マシン(第2仮想マシン)において動作するプロセスが送信または受信するコマンドを取得する。
監視プログラム制御部VM412は、コマンド受信部VM411により取得されたコマンドに含まれる識別子からコマンドの特性を参照して、コマンドの特性を特定する。そして、監視プログラム制御部VM412は、システム構成取得部VM418により取得された対象仮想マシンの構成を示す構成情報、及び、コマンドの特性に応じて、1以上の監視プログラムの実行方法を決定する。監視プログラム制御部VM412は、さらに、システム状態取得部VM417により取得された、対象仮想マシンのシステム状態に応じて、1以上の監視プログラムの実行方法を決定してもよい。なお、1以上の監視プログラムの実行方法の詳細については後述する。
簡易監視プログラムVM413は、コマンド受信部VM411により取得されたコマンドの簡易的な監視を行うプログラムの一例である。簡易監視プログラムVM413は、例えば、パケットのヘッダフィールドをチェックし、許可リストでフィルタリングするFirewallを行うプログラムであってもよいし、パケットの統計情報のみを取得して、通信ペアごとの通信量から異常を判定するフロー検知を行うプログラムであってもよい。つまり、簡易的な監視は、例えば、Firewall、フロー検知などである。
詳細監視プログラムVM414は、コマンド受信部VM411により取得されたコマンドの詳細な監視を行うプログラムの一例である。詳細監視プログラムVM414は、例えば、コマンドのペイロードに異常が含まれているか否かを判定するDeep packet inspectionを行うプログラムであってもよい。つまり、詳細な監視は、例えば、Deep packet inspectionなどである。
なお、監視アプリA400は、簡易監視プログラムVM413及び詳細監視プログラムVM414を備えるとしたが、これに限らずに、種類が異なる複数の監視プログラムを備えていればよい。例えば、監視アプリA400は、ファイルアクセス監視プログラム及びネットワーク監視プログラムを備えてもよい。ファイルアクセス監視プログラムは、ファイルアクセスに関するコマンドを監視するプログラムである。ファイルアクセス監視プログラムは、例えば、特定の仮想マシンが読み書き可能なファイルパスを許可リストとして保持して、許可リストに保持されているファイルパス以外の読み出し及び書き込みを異常と判定する処理を行うプログラムであってもよい。この場合、ファイルアクセス監視プログラムとしては、コマンドの種別に応じて、具体的な検知ルールを用いた監視プログラムが利用できる。ネットワーク監視プログラムは、ネットワークを介して授受するデータに関するコマンドを監視するプログラムである。
また、簡易監視プログラムVM413と詳細監視プログラムVM414は、保持するルールが異なる同一の監視プログラムであってもよい。
異常対応部VM415は、監視プログラムの監視結果を取得して、監視結果に異常が含まれる場合に異常を通知する。
コマンド送信部VM416は、コマンドの監視結果に応じて、当該コマンドを監視仮想マシンVM400以外の仮想マシン、外部ECU、外部デバイスなどへ送信する。コマンド送信部VM416は、コマンドの監視結果に異常が含まれていれば当該コマンドを当該コマンドの宛先へ送信せず、コマンドの監視結果に異常が含まれていなければ当該コマンドを当該コマンドの宛先へ送信する。
システム状態取得部VM417は、対象仮想マシンのシステム状態を取得する。システム状態の詳細は後述する。
システム構成取得部VM418は、対象仮想マシンの構成情報を取得する。システム構成取得部VM418は、構成情報取得部の一例である。構成情報の詳細は後述する。
仮想化プラットフォームVP100は、物理インタフェースVP101を備える。物理インタフェースVP101は、監視サーバー10と、外部仮想マシンVM100、制御仮想マシンVM200、映像仮想マシンVM300、及び、監視仮想マシンVM400との間の通信を制御する。
[仮想コマンド]
図5は、実施の形態における仮想コマンドの一例を示す図である。
仮想コマンドは、例えば図5に示すように、シーケンス番号などの番号と、コマンド種別用のヘッダと、ヘッダh1、ヘッダh2、およびペイロードとを含む。コマンド種別用のヘッダは、コマンド種別として例えばファイル操作、パケット送信、パケット受信などを示す。ヘッダh1は、仮想コマンドの送信先を示す。ヘッダh2は、仮想コマンドの送信元を示す。送信先または送信元は、ストレージデバイスであってもよく、外部ECUであってもよい。ペイロードには、ファイルパス、データ、ステアリング制御のデータ、制御値、アップデート内容、バイナリデータなどが含まれる。なお、ファイル操作には、データの読み取り要求または書き込み要求の2種類があり、ファイル操作の種類を識別するための情報がヘッダh1に格納されてもよい。
[仮想マシンの構成情報]
図6は、実施の形態における仮想マシンの構成情報の一例を示す図である。構成情報は、コマンドに含まれる識別子毎に、関連するシステムの構成情報を取得するためのテーブルである。
仮想マシンの構成情報は、例えば図6に示すように、仮想マシンを識別する識別子と、仮想マシンのOS(Operating System)種別と、ASIL(Automotive Safety Integrity Level)と、外部接続機能と、タイムアウト時間と、呼び出し方と、ディスプレイ表示機能とを含む。ASILは、自動車の安全レベルを示す。外部接続機能は、仮想マシンが外部デバイスとの間で通信接続可能か否かを示す。タイムアウト時間は、監視プログラムの処理に設定されるタイムアウト時間を示す。呼び出し方は、監視プログラムをコマンドの送受信処理に対して直列で処理するか、並列で処理するかを示す。つまり、直列で処理する場合、監視プログラムがコマンドに対して実行された後に、コマンドの送受信処理が実行される。並列で処理する場合、コマンドに対する監視プログラムの実行と、コマンド送受信処理とが並列で処理される。ディスプレイ表示機能は、仮想マシンが表示機能を有するか否かを示す。
構成情報のうち、OS種別及び外部接続機能は、攻撃者の乗っ取られやすさの判断に用いられてもよい。ASILは、リアルタイム性の判断に用いられてもよい。ASILは、D、C、B、A、QMの順に高いレベルに設定され、高いほどリアルタイム性が必要と判断されてもよい。タイムアウト時間は、監視プログラムのタイムアウト時間の設定に用いられる。呼び出し方は、監視プログラムの呼び出し方の決定に用いられる。タイムアウト時間及び呼び出し方は、識別子ごとではなくリアルタイム性に基づいて決定されてもよい。ディスプレイ表示機能は、異常検知時に表示するために用いられてもよい。異常発生が疑われ、かつ、表示機能を有する仮想マシンは、異常を表示する処理を実行してもよい。システムの更新にともなって、仮想マシンの構成情報には、追加、削除、及び、変更のいずれかが行われる可能性がある。この場合であっても、監視プログラム制御部は、更新された構成情報を示すテーブルを参照すればよい。
[仮想マシンのシステム状態]
図7は、実施の形態における仮想マシンのシステム状態の一例を示す図である。仮想マシンのシステム状態は、仮想マシン毎のシステム状態を取得して保持するデータベースである。システム状態は、各仮想マシンに問い合わせることで得られてもよいし、仮想化プラットフォームVP100に問い合わせることで得られてもよい。システム状態は、問い合わせて得られた情報に基づいて更新されてもよい。
仮想マシンのシステム状態は、例えば、図7に示すように、仮想マシンを識別する識別子と、仮想マシンの起動状態と、システム負荷と、仮想コマンド負荷と、ネットワーク状態と、走行状態と、走行モードと、セキュリティ異常とを含む。仮想マシンの起動状態は、仮想マシンが起動済み(つまり起動中)であるか、仮想マシンが停止中であるかを示す。起動状態は、異常対応部VM415で仮想マシンを再起動した場合に、再起動完了したか確認するために用いられてもよい。仮想マシンのシステム状態は、監視装置を備える車両の走行状態、車両の走行モード、仮想マシンのシステム負荷、コマンドの処理におけるシステム負荷、仮想マシンのネットワーク接続状態、仮想マシン内のセキュリティ異常の有無、及び、仮想コマンドのセキュリティ異常の有無の少なくとも1つである。
システム負荷は、CPU及びメモリの少なくとも一方の使用率である。システム負荷は、低い場合に詳細な監視プログラムをONにし、高い場合にOFFにする判断で用いられてもよい。システム負荷は、例えば、低、中、及び、高のいずれかであるかを示す。中は、低よりも負荷が高いことを示し、高は、中よりも負荷が高いことを示す。システム負荷は、上記の3段階の場合に限らずに、低、高の2段階で示されてもよい。この場合、高は、低よりも負荷が高いことを示す。
仮想コマンド負荷は、仮想コマンドに関する処理の負荷である。仮想コマンド負荷が高いことは、監視プログラムを並列で呼び出す、または、複数の監視プログラムで処理を分担するという判断に用いられてもよい。また、仮想コマンド負荷が低いことは、監視プログラムを直列で呼び出しても、詳細監視プログラムを呼び出しても仮想コマンドの遅延等の影響が小さいと判断されてもよい。仮想コマンド負荷は、例えば、低、中、及び、高の何れであるかを示す。中は、低よりも負荷が高いことを示し、高は、中よりも負荷が高いことを示す。仮想コマンド負荷は、上記の3段階の場合に限らずに、低、高の2段階で示されてもよい。この場合、高は、低よりも負荷が高いことを示す。
ネットワーク状態は、外部機器への通信接続が、接続済み(つまり接続中)であるか未接続であるかを示す。ネットワーク状態は、外部機器への通信機能を有する仮想マシンのみで示される。ネットワーク状態は、接続済みの場合に、乗っ取られやすいと判断して詳細な監視プログラムをONにするための判断で用いられてもよい。
走行状態は、車両が走行中であるか、停止中であるかを示す。走行状態が走行中を示す場合、制御仮想マシンVM200への通信は安全影響があるため、監視プログラムは、リアルタイム性に影響を与えないように並列で呼び出されてもよい。走行状態が停止中を示す場合、安全影響がないので監視プログラムは呼び出されなくてもよい。一方で、走行状態が停止中を示す場合はシステム負荷が低いため、全ての監視プログラムが呼び出されてもよい。
走行モードは、車両が自動運転中であるか手動運転中であるかを示す。走行モードが自動車運転中を示す場合、制御仮想マシンVM200への通信は安全影響があるため、監視プログラムは、リアルタイム性に影響を与えないように並列で呼び出されてもよい。走行モードが手動運転中を示す場合、安全影響がないので監視プログラムは呼び出されなくてもよい。
セキュリティ異常は、セキュリティに関する異常が発生しているか、異常が発生していないか(つまり、正常か)を示す。セキュリティ異常は、簡易プログラムで異常であると判定された場合に、異常対応部VM415が該当仮想マシンを異常状態に設定し、異常状態の場合に詳細な監視プログラムを実行するために用いられてもよい。なお、仮想マシンごとのセキュリティ異常は、簡易プログラムの異常判定結果でなく、他のプログラムによる異常判定結果に基づいて設定されてもよい。例えば、仮想マシン内のSELinux(Security-Enhanced Linux)などのアクセスコントロール機構によって特定の処理が拒否された場合に該当仮想マシンがセキュリティ異常状態に設定されてもよい。
[監視仮想マシンの処理シーケンス]
図8は、実施の形態における監視仮想マシンの処理シーケンスの一例を示す図である。
図8に示すように、コマンド受信部VM411は、監視仮想マシンVM400以外の仮想マシン、外部ECU、外部デバイスなどからコマンドを受信し、受信したコマンドを識別する(S101)。これにより、システム構成取得部VM418は、コマンドに含まれる識別子に基づいて、コマンドを送信した仮想マシン、または、コマンドを受信した仮想マシンの構成情報を取得する。また、システム状態取得部VM417は、コマンドに含まれる識別子に基づいて、コマンドを送信した仮想マシン、または、コマンドを受信した仮想マシンのシステム状態を取得してもよい。ステップS101により得られた、コマンドの識別子、仮想マシンの構成情報、及び、仮想マシンのシステム状態は、監視プログラム制御部VM412へ通知される。
次に、監視プログラム制御部VM412は、コマンドの識別子からコマンドの特性を参照し、通知された構成情報及びシステム状態と、コマンドの特性とに応じて、当該コマンドに対して実行すべき1以上の監視プログラムを決定する(S102)。具体的には、監視プログラム制御部VM412は、受信したコマンドに対して実行すべき1以上の監視プログラムのそれぞれについて実行するか否か(つまり、各監視プログラムのON/OFF)を決定してもよい。監視プログラム制御部VM412は、例えば、外部接続する外部仮想マシンVM100に対するコマンドであれば全ての監視プログラムを実行すると決定してもよい。また、監視プログラム制御部VM412は、例えば、外部接続しない映像仮想マシンVM300に対するコマンドであれば一部の監視プログラムのみを実行し、必須でない処理を削減してもよい。また、監視プログラム制御部VM412は、例えば、受信時ならFirewallのみの簡易監視プログラムを実行し、送信時は簡易監視プログラム及び詳細監視プログラム(つまりFirewall+ペイロード監視)を実行すると決定してもよい。つまり、仮想マシン単位ではなく通信単位で監視プログラムを変更してもよい。例えば、監視プログラム制御部VM412は、車両の制御に影響するコマンドに対してのみ監視プログラムを実行し、制御に影響しないコマンドに対しては監視プログラムを実行しなくてもよい。また、監視プログラム制御部VM412は、コマンドの種別がファイル操作である場合は、システム影響が小さい読み取り要求やシステム影響が大きい書き込み要求などのファイル操作の種類に応じて監視プログラムを変更してもよい。このように、脅威の大きさに応じて処理を削減できる。なお、ステップS102の具体例は、後述する。ここで、コマンドの特性は、コマンドの送信元または送信先の仮想マシン、コマンドの送信先または送信先の電子制御装置、コマンドの送信方向、コマンドに含まれるファイル操作のアクセス先、送信元または送信先の仮想マシンのOS(Operating System)種別、送信元または送信先の仮想マシンの外部接続機能の有無、コマンドのASIL、及び、コマンドの車両制御への影響の少なくとも1つである。コマンドの特性は、監視装置を備える車両の走行状態、車両の走行モード、及び、システム状態の少なくとも1つを含んでいてもよい。
次に、監視プログラム制御部VM412は、監視プログラムの呼び出し方法(つまり、呼び出し方)を決定する(S103)。監視プログラム制御部VM412は、例えば、受信したコマンドが、制御仮想マシンVM200に対するコマンドであれば監視プログラムを並列で呼び出すと決定し、外部仮想マシンVM100に対するコマンドであれば監視プログラムを直列で呼び出すと決定してもよい。これにより、遅延影響がない通信の異常に即時対応できる。なお、ステップS103の具体例は、後述する。
次に、監視プログラム制御部VM412は、監視プログラムのタイムアウト時間を決定する(S104)。監視プログラム制御部VM412は、例えば、受信したコマンドが、制御仮想マシンVM200に対するコマンドであればタイムアウト時間を短時間に設定し、外部仮想マシンVM100に対するコマンドであればタイムアウト時間を長時間に設定してもよい。これにより、通信遅延を保証できる。なお、ステップS104の具体例は、後述する。
次に、監視プログラム制御部VM412は、1以上の監視プログラムの実行の順序を決定する(S105)。監視プログラム制御部VM412は、例えば、簡易監視プログラム(Firewall)で異常と判定された場合のみ、詳細監視プログラム(ペイロード監視)の実行を決定してもよいし、詳細監視プログラムの実行のスキップを決定してもよい。これにより、処理負荷の高い監視の処理回数を削減できる。なお、ステップS105の具体例は後述する。
次に、監視プログラム制御部VM412は、1以上の監視プログラムのうち実行すると決定された簡易監視プログラムVM413の呼び出しを行う(S106)。そして、簡易監視プログラムVM413による監視処理が実行される(S107)。
次に、監視プログラム制御部VM412は、1以上の監視プログラムのうち実行すると決定された詳細監視プログラムVM414の呼び出しを行う(S108)。そして、詳細監視プログラムVM414による監視処理が実行される(S109)。
次に、監視プログラム制御部VM412は、対応アプリの呼び出しを行う(S110)。これにより、異常対応部VM415は、異常対応処理を実行する(S111)。異常対応処理では、監視処理の監視結果に応じて、コマンドのロギング、コマンドのドロップ、仮想マシンの再起動、システムの再起動などが実行される。なお、ステップS111の詳細は後述する。
次に、監視プログラム制御部VM412は、受信したコマンドを指定の宛先の仮想マシン、外部ECU、外部デバイスなどに送信するために、コマンド送信部VM416へ送信する(S112)。監視プログラム制御部VM412は、例えば、監視処理において正常と判定されたコマンドを指定の宛先の仮想マシン、外部ECU、外部デバイスなどに送信するために、コマンド送信部VM416へ送信する。監視プログラム制御部VM412は、例えば、監視処理において以上と判定されたコマンドを指定の宛先の仮想マシン、外部ECU、外部デバイスなどに送信するために、コマンド送信部VM416へ送信しなくてもよい。そして、コマンド送信部VM416は、監視プログラム制御部VM412から受信したコマンドを指定の宛先の仮想マシン、外部ECU、外部デバイスなどに送信する(S113)。
[監視プログラムの決定]
図9は、実施の形態における監視プログラムの決定処理(S102)のフローチャートの一例を示す図である。監視プログラムの決定処理では、対象の仮想マシンが外部仮想マシンVM100である場合、外部と通信可能であり外部から乗っ取られる可能性が高いため、外部仮想マシンVM100からの通信の詳細をチェックするように監視プログラムが決定されてもよい。また、監視プログラムの決定処理では、対象の仮想マシンが制御仮想マシンVM200である場合、制御仮想マシンVM200にはリアルタイム性が要求されるため、監視プログラムによる監視処理がスキップされてもよい。また、監視プログラムの決定処理では、対象の仮想マシンが映像仮想マシンVM300である場合、映像仮想マシンVM300は直接乗っ取られる可能性は低いので、受信するコマンドに対して詳細監視プログラムが実行されてもよい。
図9に示すように、監視プログラム制御部VM412は、コマンド受信部VM411からコマンドを取得する(S121)。
次に、監視プログラム制御部VM412は、取得したコマンドの送信元または送信先の仮想マシンのOS種別を判定する(S122)。
監視プログラム制御部VM412は、コマンドの送信元または送信先の仮想マシンのOS種別がAndroidである場合(S122でAndroid)、ステップS123を実行し、当該OS種別がLinux(登録商標)である場合(S122でLinux)、ステップS127を実行し、当該OS種別がRTOSである場合(S122でRTOS)、ステップS131を実行する。
ステップS123において、監視プログラム制御部VM412は、簡易監視プログラムをONに設定する。つまり、簡易監視プログラムを実行することが設定される。
次に、監視プログラム制御部VM412は、コマンドが送信されたコマンドであるか受信されたコマンドであるかを判定する(S124)。
監視プログラム制御部VM412は、コマンドが送信されたコマンドである場合(S124で送信)、ステップS125を実行し、コマンドが受信されたコマンドである場合(S124で受信)、ステップS126を実行する。
ステップS125において、監視プログラム制御部VM412は、詳細監視プログラムをONに設定する。つまり、詳細監視プログラムを実行することが設定される。
ステップS126において、監視プログラム制御部VM412は、詳細監視プログラムをOFFに設定する。つまり、詳細監視プログラムを実行しないことが設定される。
ステップS127において、監視プログラム制御部VM412は、簡易監視プログラムをONに設定する。つまり、簡易監視プログラムを実行することが設定される。
次に、監視プログラム制御部VM412は、コマンドが送信されたコマンドであるか受信されたコマンドであるかを判定する(S128)。
監視プログラム制御部VM412は、コマンドが送信されたコマンドである場合(S128で送信)、ステップS129を実行し、コマンドが受信されたコマンドである場合(S128で受信)、ステップS130を実行する。
ステップS129において、監視プログラム制御部VM412は、詳細監視プログラムをOFFに設定する。つまり、詳細監視プログラムを実行しないことが設定される。
ステップS126において、監視プログラム制御部VM412は、詳細監視プログラムをONに設定する。つまり、詳細監視プログラムを実行することが設定される。
ステップS131において、監視プログラム制御部VM412は、簡易監視プログラムをOFFに設定する。つまり、簡易監視プログラムを実行しないことが設定される。
次に、監視プログラム制御部VM412は、詳細監視プログラムをOFFに設定する(S132)。つまり、詳細監視プログラムを実行しないことが設定される。
このようにして、取得したコマンドに対する仮想マシンのOS種別と、コマンドが送信されたか受信されたかを示す、コマンドの送受信状態とに応じて、コマンドに対して、簡易監視プログラムを実行するか否か、及び、詳細監視プログラムを実行するか否かが決定されてもよい。
なお、外部のネットワークへの接続状態、走行状態、及び、走行モードの少なくとも1つに応じて簡易監視プログラムのON/OFF及び詳細監視プログラムのON/OFFが判断されてもよい。例えば、外部のネットワークへ接続中であれば、外部仮想マシンVM100からのコマンドは疑わしいので、詳細監視プログラムがONに設定されてもよい。また、走行中または自動運転中であれば、映像仮想マシンからのコマンドは安全に影響がある可能性があるため、詳細監視プログラムがONに設定されてもよい。
[監視プログラムの呼び出し]
図10は、実施の形態における監視プログラムの呼び出し処理(S103)のフローチャートの一例を示す図である。監視プログラムの呼び出し処理では、対象の仮想マシンが外部仮想マシンVM100である場合、外部と通信可能であり外部から乗っ取られる可能性が高いため、外部仮想マシンVM100からの通信の詳細をチェックするように監視プログラムが決定されてもよい。また、監視プログラムの決定処理では、対象の仮想マシンが制御仮想マシンVM200である場合、制御仮想マシンVM200は直接乗っ取られる可能性が低いため、外部仮想マシンVM100、外部ECU、外部デバイスなどから受信したコマンドの詳細をチェックするように監視プログラムが決定されてもよい。
図10に示すように、監視プログラム制御部VM412は、コマンドを取得する(S141)。なお、ステップS141は、ステップS121と同じ処理であるため、省略されてもよい。
次に、監視プログラム制御部VM412は、取得したコマンドの送信元または送信先の仮想マシンのOS種別を判定する(S142)。なお、ステップS142は、ステップS122と同じ処理であるため、省略されてもよい。
監視プログラム制御部VM412は、コマンドの送信元または送信先の仮想マシンのOS種別がAndroidである場合(S142でAndroid)、ステップS143を実行し、当該OS種別がLinuxである場合(S142でLinux)、ステップS146を実行し、当該OS種別がRTOSである場合(S142でRTOS)、ステップS149を実行する。
ステップS143において、監視プログラム制御部VM412は、コマンドが送信されたコマンドであるか受信されたコマンドであるかを判定する。
監視プログラム制御部VM412は、コマンドが送信されたコマンドである場合(S143で送信)、ステップS144を実行し、コマンドが受信されたコマンドである場合(S143で受信)、ステップS145を実行する。
ステップS144において、監視プログラム制御部VM412は、1以上の監視プログラムの呼び出し方を並列に設定する。
ステップS145において、監視プログラム制御部VM412は、1以上の監視プログラムの呼び出し方を直列に設定する。
ステップS146において、監視プログラム制御部VM412は、コマンドが送信されたコマンドであるか受信されたコマンドであるかを判定する。
監視プログラム制御部VM412は、コマンドが送信されたコマンドである場合(S146で送信)、ステップS147を実行し、コマンドが受信されたコマンドである場合(S146で受信)、ステップS148を実行する。
ステップS147において、監視プログラム制御部VM412は、1以上の監視プログラムの呼び出し方を並列に設定する。
ステップS148において、監視プログラム制御部VM412は、1以上の監視プログラムの呼び出し方を直列に設定する。
ステップS149において、監視プログラム制御部VM412は、1以上の監視プログラムの呼び出し方を並列に設定する。
監視プログラムの呼び出し方が直列に設定される場合、コマンドを送信先に送信する前に監視処理を実行するため、異常検知した場合に即座にコマンドを停止できる。つまり、直列で監視プログラムを呼び出す場合、監視処理が終了するまでコマンドの送信が停止してしまう。一方で、監視プログラムの呼び出し方が並列に設定される場合、コマンドの監視処理を待たずにコマンドを送信先に送信することができる。
[監視プログラムのタイムアウト時間の決定]
図11は、実施の形態における監視プログラムのタイムアウト時間の決定処理(S104)のフローチャートの一例を示す図である。監視プログラムのタイムアウト時間の決定処理では、監視対象の仮想マシンが制御仮想マシンVM200である場合、制御仮想マシンVM200にはリアルタイム性が要求されるため、監視プログラムによる監視処理のタイムアウト時間が短時間に設定されてもよい。
図11に示すように、監視プログラム制御部VM412は、コマンドを取得する(S151)。なお、ステップS151は、ステップS121、ステップS141と同じ処理であるため、省略されてもよい。
次に、監視プログラム制御部VM412は、取得したコマンドの送信元または送信先の仮想マシンのOS種別を判定する(S152)。なお、ステップS152は、ステップS122及びステップS142と同じ処理であるため、省略されてもよい。
監視プログラム制御部VM412は、コマンドの送信元または送信先の仮想マシンのOS種別がAndroidである場合(S152でAndroid)、ステップS153を実行し、当該OS種別がLinuxである場合(S152でLinux)、ステップS154を実行し、当該OS種別がRTOSである場合(S152でRTOS)、ステップS155を実行する。
ステップS153において、監視プログラム制御部VM412は、監視処理のタイムアウト時間を長時間に設定する。
ステップS154において、監視プログラム制御部VM412は、監視処理のタイムアウト時間を長時間に設定する。
ステップS155において、監視プログラム制御部VM412は、監視処理のタイムアウト時間を短時間に設定する。
タイムアウト時間は、短時間に設定されることで、最大遅延を短くできるため低遅延を保証できるが、監視処理が終わらない可能性もある。一方で、タイムアウト時間は、長時間に設定されることで、監視処理に時間を多く使えるが、コマンド送信に時間がかかるため遅延が大きくなる可能性がある。
[監視プログラムの決定(別の例)]
図12は、実施の形態における監視プログラムの決定処理(S102)のフローチャートの他の一例を示す図である。
図12に示すように、監視プログラム制御部VM412は、コマンド受信部VM411からコマンドを取得する(S161)。
次に、監視プログラム制御部VM412は、取得したコマンドの送信元の仮想マシンのセキュリティ異常があるか否かを判定する(S162)。
監視プログラム制御部VM412は、取得したコマンドの送信元の仮想マシンのセキュリティ異常があると判定した場合(S162でYes)、ステップS163を実行し、取得したコマンドの送信元の仮想マシンのセキュリティ異常がないと判定した場合(S162でNo)、ステップS165を実行する。
ステップS163において、監視プログラム制御部VM412は、簡易監視プログラムをONに設定する。つまり、簡易監視プログラムを実行することが設定される。
次に、監視プログラム制御部VM412は、詳細監視プログラムをONに設定する(S164)。つまり、詳細監視プログラムを実行することが設定される。
ステップS165において、監視プログラム制御部VM412は、取得したコマンドの送信元の仮想マシンのシステム処理負荷が高いか低いかを判定する。
監視プログラム制御部VM412は、取得したコマンドの送信元の仮想マシンのシステム処理負荷が低いと判定した場合(S165で低)、ステップS166を実行し、取得したコマンドの送信元の仮想マシンのシステム処理負荷が高いと判定した場合(S165で高)、ステップS168を実行する。
ステップS166において、監視プログラム制御部VM412は、簡易監視プログラムをONに設定する。つまり、簡易監視プログラムを実行することが設定される。
次に、監視プログラム制御部VM412は、詳細監視プログラムをONに設定する(S167)。つまり、詳細監視プログラムを実行することが設定される。
ステップS168において、監視プログラム制御部VM412は、簡易監視プログラムをOFFに設定する。つまり、簡易監視プログラムを実行しないことが設定される。
次に、監視プログラム制御部VM412は、取得したコマンドの送信元の仮想マシンが外部ネットワークに接続済みであるか否かを判定する(S169)。
監視プログラム制御部VM412は、取得したコマンドの送信元の仮想マシンが外部ネットワークに接続済みでないと判定した場合(S169でNo)、ステップS170を実行し、取得したコマンドの送信元の仮想マシンが外部ネットワークに接続済みであると判定した場合(S169でYes)、ステップS171を実行する。
ステップS170において、監視プログラム制御部VM412は、詳細監視プログラムをOFFに設定する。つまり、詳細監視プログラムを実行しないことが設定される。
ステップS171において、監視プログラム制御部VM412は、詳細監視プログラムをONに設定する。つまり、詳細監視プログラムを実行することが設定される。
ステップS170またはステップS171が終了すると、監視プログラム制御部VM412は、取得したコマンドの送信元の仮想マシンまたは送信先の仮想マシンのOS種別がRTOSか否かを判定する(S172)。
監視プログラム制御部VM412は、取得したコマンドの送信元の仮想マシンまたは送信先の仮想マシンのOS種別がRTOSである場合(S172でYes)、ステップS173を実行し、取得したコマンドの送信元の仮想マシンまたは送信先の仮想マシンのOS種別がRTOSでない場合(S172でNo)、監視プログラムの決定処理を終了する。
ステップS173において、監視プログラム制御部VM412は、車両の走行状態が走行中であるか停止中であるかを判定する。
監視プログラム制御部VM412は、車両の走行状態が走行中であると判定した場合(S173で走行中)、ステップS174を実行し、車両の走行状態が停止中であると判定した場合(S173で停止中)、ステップS176を実行する。
ステップS174において、監視プログラム制御部VM412は、簡易監視プログラム及び詳細監視プログラムをONに設定する。つまり、簡易監視プログラム及び詳細監視プログラムを実行することが設定される。
次に、監視プログラム制御部VM412は、監視プログラムの呼び出し方を並列に決定する(S175)。ステップS175が終了するとステップS176が実行される。
ステップS176において、監視プログラム制御部VM412は、車両の走行モードが自動運転であるか手動運転であるかを判定する。
監視プログラム制御部VM412は、車両の走行モードが自動運転であると判定した場合(S176で自動運転)、ステップS177を実行し、車両の走行モードが手動運転であると判定した場合(S176で手動運転)、監視プログラムの決定処理を終了する。
ステップS177において、監視プログラム制御部VM412は、簡易監視プログラム及び詳細監視プログラムをONに設定する。つまり、簡易監視プログラム及び詳細監視プログラムを実行することが設定される。
次に、監視プログラム制御部VM412は、監視プログラムの呼び出し方を並列に決定する(S178)。ステップS178が終了すると監視プログラムの決定処理を終了する。
[監視プログラムの順序の決定]
図13は、実施の形態における監視プログラムの順序の決定及び監視プログラムの実行処理(S105~S109)のフローチャートの一例を示す図である。
図13に示すように、監視プログラム制御部VM412は、コマンド受信部VM411からコマンドを取得する(S181)。なお、ステップS181は、ステップS121、ステップS141、及び、ステップS151と同じ処理であるため、省略されてもよい。
次に、監視プログラム制御部VM412は、複数の監視プログラムが直列で呼び出されるか否かを判定する(S182)。
監視プログラム制御部VM412は、複数の監視プログラムが直列で呼び出されないと判定した場合(S182でNo)、ステップS183を実行し、複数の監視プログラムが直列で呼び出されると判定した場合(S182でYes)、ステップS184を実行する。なお、複数の監視プログラムが直列で呼び出されない場合とは、1つの監視プログラムが呼び出される場合と、複数の監視プログラムが並列で呼び出される場合とを含む。
ステップS183において、監視プログラム制御部VM412は、ONに設定された監視プログラム(簡易監視プログラム及び詳細監視プログラムの少なくとも一方)を実行する。
ステップS184において、監視プログラム制御部VM412は、簡易監視プログラムを実行する。
次に、監視プログラム制御部VM412は、簡易監視プログラムによる監視処理の監視結果が異常であるか否かを判定する(S185)。
監視プログラム制御部VM412は、簡易監視プログラムによる監視処理の監視結果が異常であると判定した場合(S185でYes)、ステップS186を実行し、簡易監視プログラムによる監視処理の監視結果が異常でない(つまり正常である)と判定した場合(S185でNo)、監視プログラムの順序の決定処理を終了する。
ステップS186において、監視プログラム制御部VM412は、詳細監視プログラムを実行する。
このように、監視プログラムの順序の決定処理を実行することで、例えば、簡易監視プログラムによる監視結果が異常の場合のみ詳細監視プログラムを実行するため、より詳細な異常を検出することができる。
なお、簡易監視プログラムによる監視結果が異常の場合には異常を確定させることで、詳細監視プログラムの実行をスキップしてもよい。これにより、異常が発生したことを通知するまでに要する時間を削減することができる。
[異常対応処理]
図14は、実施の形態における異常対応処理(S111)のフローチャートの一例を示す図である。
図14に示すように、異常対応部VM415は、監視処理における監視結果を取得する(S191)。
次に、異常対応部VM415は、監視結果が1以上異常であるか否かを判定する(S192)。
異常対応部VM415は、監視結果が1以上異常であると判定した場合(S192でYes)、ステップS193を実行し、監視結果が1以上異常でない、つまり、異常がなかった場合(S192でNo)、異常対応処理を終了する。なお、異常応答処理の要否はこのように閾値(1以上)によって判断してもよいし、多数決で判断してもよいし、統計処理アルゴリズムによって判断をしてもよい。さらに、仮想マシンのシステム状態に含まれる、仮想マシンの起動状態と、システム負荷と、仮想コマンド負荷と、ネットワーク状態と、走行状態と、走行モードと、セキュリティ異常のうち少なくとも1つを考慮して判断してもよい。これにより、信頼性と確実性の高い異常対応処理を実現できる。
ステップS193において、異常対応部VM415は、異常を含む監視結果のログをグルーピングして記憶する。つまり、グルーピングログを記憶する。グルーピングログの詳細は後述する。
次に、異常対応部VM415は、監視結果による異常が詳細監視プログラムの監視処理により検出された異常であるか否かを判定する(S194)。
異常対応部VM415は、監視結果による異常が詳細監視プログラムの監視処理により検出された異常であると判定した場合(S194でYes)、ステップS195を実行し、監視結果による異常が詳細監視プログラムの監視処理により検出された異常でない(つまり簡易監視プログラムの監視処理により検出された異常である)と判定した場合(S194でNo)、異常対応処理を終了する。
ステップS195において、異常対応部VM415は、取得したコマンドをドロップさせる(つまり、コマンドを利用しないように処理する)。例えば、コマンドを破棄してもよいし、コマンドが利用できないことを示す情報(フラグ)を付与してもよい。コマンドが利用できないことを示す情報(フラグ)が付与されたコマンドは、仮想マシン、他の機器などに利用されない。
次に、異常対応部VM415は、異常を通知して、例えば、表示機能を有する仮想マシン(映像仮想マシンVM300)に発生した異常を含むUIを表示させる(S196)。
なお、異常対応部VM415は、簡易監視及び詳細監視の両方において異常であり、確実に異常と判定できた場合のみコマンドをドロップしてもよい。
また、異常対応部VM415は、監視プログラムのフィルタリングルールを変更してもよい。これにより、次回から異常を検出されたコマンドをドロップできる。
また、異常対応部VM415は、異常なコマンドの送信元である仮想マシンを再起動または停止してもよい。これにより、攻撃プロセスを止めることができる。
また、異常対応部VM415は、異常な仮想マシンが一定数以上ある場合、システム全体を再起動してもよい。これにより、セキュアブートによりセーフティ起動が可能になる。
また、異常対応部VM415は、異常を通知して表示してもよい。異常対応部VM415は、仮想マシンが担当する車内のディスプレイに異常を表示させてもよいし、または、監視サーバー10へ通知して監視サーバーにて異常を表示させてもよい。
また、異常対応部VM415は、前回の監視結果に基づいて、監視プログラムのON/OFFを決定してもよい。この場合、仮想マシンのシステム状態をセキュリティ状態が異常であると設定し、システム状態に応じて、監視プログラムのON/OFFを設定してもよい。
[グルーピングログ]
図15及び図16は、実施の形態におけるグルーピングログの一例を示す図である。
グルーピングログは、仮想マシン毎に当該仮想マシンに対するコマンドに異常があったことを記録したログである。図15及び図16に示すように、グルーピングログは、異常IDと、異常名と、異常識別子と、仮想マシン識別子と、回数と、最終時刻とを含む。異常IDは、異常名及び監視対象の仮想マシンが同じ異常であることを示す。異常名は、異常の種類の名称である。異常識別子は、異常を識別する情報である。仮想マシン識別子は、仮想マシンを識別する情報である。回数は、同じ異常識別子の異常が発生した回数を示す。最終時刻は、最後に該当する異常が発生した時刻を示す。
このように、グルーピングログによって、監視プログラム制御部VM412が検出した異常に関連するログ情報を抽出できるため、異常対応部VM415が監視サーバー10へグルーピングログを送信し、監視サーバー10のグラフィカルユーザーインターフェース上にグルーピングログを表示することで、分析官の分析を効率的に実現できる。
また、グルーピングログは監視プログラムで利用されてもよく、例えば、監視プログラムがグルーピングログを定期的に取得し、特定の仮想マシンの異常の発生回数が閾値を超えた場合に異常であると判定してもよい。
図15は、仮想マシン識別子が1である仮想マシンにおいて発生した異常のグルーピングログの一例である。図16は、仮想マシン識別子が2である仮想マシンにおいて発生した異常のグルーピングログの一例である。
[監視サーバーにおける異常の表示例]
図17は、実施の形態における監視結果表示の一例を示す図である。
監視結果表示は、セキュリティ分析官へ監視情報を伝達するために利用されてもよい。監視結果表示は、監視サーバー10が車載システム20から監視結果を受信することで監視サーバーにより生成されてもよい。監視結果表示は、監視結果がグラフィカルユーザーインターフェースにおいて表現された表示である。
監視結果は、コマンドが正常であった場合には、コマンドに対応する仮想マシンを特定する識別子と、当該仮想マシンに対応するアプリの識別子と、正常判定した時刻とを含む。監視結果は、コマンドが異常であった場合には、コマンドに対応する仮想マシンを特定する識別子と、当該仮想マシンに対応するアプリの識別子と、異常判定した時刻とを含む。
なお、図17において、太枠のブロックは異常であると判定された監視対象のソフトウェアを示し、細枠のブロックは正常であると判定された監視対象のソフトウェアを示す。
図17において、統合ECU200の抽象化されたシステムアーキテクチャが表示されており、異常及び正常の一方(ここでは異常)の構成要素が強調されて区別できるように表現されており、構成要素の下部に対応する監視結果が表示されている。これにより、セキュリティ分析官は直感的に異常が発生した構成要素を理解することができるため、セキュリティ異常の解析を迅速に実施できる。
図17に示される車両識別子は車両ごとに付与されるユニークな識別子である。ECU識別子はECUごとに付与される識別子である。この場合、異常が検出された車両の車両識別子と、仮想化プラットフォームが搭載されたECUの識別子とが表示される。異常なコマンドの送信元は、システムアーキテクチャが表示された画面の上に強調表示されてもよい。また、異常検出時刻と検出した監視プログラムの名称が表示されてもよい。異常検知時刻は、異常通知のログに含まれ、監視プログラムの名称は、異常通知のログに含まれる識別子から参照される。これにより、監視サーバーのGUIを用いて異常を分析するセキュリティ分析官が、異常が発生している箇所の特定と異常の内容を容易に把握できる。
[統合ECUにおける異常の表示例]
図18は、実施の形態における監視結果表示の一例を示す図である。
図18に示されるように、車両内のディスプレイ上に、異常な通信の送信元が制御するディスプレイの枠が強調表示されてもよい。これにより、ドライバが容易に異常と危険性を判断でき、車両を路肩に停止することができる。例えば、映像仮想マシンが異常な場合に、映像仮想マシンが制御するクラスターディスプレイと電子ミラーディスプレイとの外枠に赤枠を表示することで異常を通知してもよい。
[効果など]
本実施の形態に係る監視装置(統合ECU200)は、2以上の仮想マシンを動作させる仮想化プラットフォームにおける監視装置であって、監視装置は、2以上の仮想マシンのうち、プロセスが送信または受信するコマンドを監視する1以上の監視プログラムが動作する第1仮想マシンにて動作し、監視装置は、第1仮想マシンと異なる第2仮想マシンにて動作するプロセスが送信または受信するコマンドを受信するコマンド受信部VM411と、第2仮想マシンの構成情報を取得するシステム構成取得部VM418と、コマンドに含まれる識別子からコマンドの特性を参照し、構成情報及びコマンドの特性に応じて1以上の監視プログラムの実行方法を決定する監視プログラム制御部VM412と、監視プログラムの監視結果を取得して、監視結果に異常が含まれる場合に異常を通知する異常対応部VM415と、を備える。
これによれば、第2仮想マシンの構成情報及びコマンドの特性に応じて1以上の監視プログラムの実行方法を決定するため、第2仮想マシンの特性及びコマンドの特性に応じた適切な監視処理を実行することができる。これにより、監視処理の処理負荷を調整でき、また、コマンドのリアルタイム性が考慮された監視処理を実現することができ、コマンドへの監視処理を効率よく効果的に実行することができる。
通常、コマンドには送受信のL2 物理アドレスしか記載がないため、監視プログラム制御部では、アドレスの他の情報の取得はできない。統合ECU200において実現される複数の仮想マシンを監視する監視仮想マシンVM400は、仮想化環境上の監視プログラムであるため、監視対象の仮想マシンの構成情報とシステム状態とを取得できる。これらの情報によって、コマンドの送受信のアドレスから、どの仮想マシン(どのOS)からの通信であるかを判定できる。さらに、仮想マシンの状態に応じて、処理を切り替えることができる。
従来技術では、監視結果のログを全て蓄積するが、どの仮想マシンからのログであるか識別ができないため、インシデントレスポンスの際の分析に時間を要する。本実施の形態にかかる異常対応部VM415は、仮想マシンの構成情報を用いることで、異常ログを仮想マシンごとに蓄積することができる。このため、インシデントレスポンスの際の分析に要する時間を削減することができる。また、異常なコマンドの送信元からどの仮想マシンが異常かわかるため、該当仮想マシンでの異常表示、再起動、停止などの異常に対処するための処理を実行できる。
例えば、監視装置(統合ECU200)は、さらに、第2仮想マシンのシステム状態を取得するシステム状態取得部VM417を備える。監視プログラム制御部VM412は、さらにシステム状態に応じて、1以上の監視プログラムの実行方法を決定する。
これによれば、さらに、第2仮想マシンのシステム状態に応じて1以上の監視プログラムの実行方法を決定するため、第2仮想マシンの状態に応じた適切な監視処理を実行することができる。これにより、監視処理の処理負荷を調整でき、また、コマンドのリアルタイム性が考慮された監視処理を実現することができ、コマンドへの監視処理を効率よく効果的に実行することができる。
例えば、コマンドの特性は、コマンドの送信元の仮想マシン、コマンドの送信先の仮想マシン、コマンドの送信方向、ファイルアクセス、送信元または送信先の仮想マシンのOS(Operating System)種別、コマンドのASIL、監視装置を備える車両の走行状態、車両の走行モード、及び、システム状態の少なくとも1つである。このため、第2仮想マシンの特性及びコマンドの特性に応じた適切な監視処理を実行することができる。
また、監視プログラムの実行方法は、監視プログラムが有効であるか否か、監視プログラムの呼び出し方法、監視プログラムに設定されているタイムアウト時間、及び、監視プログラムの実行順序の少なくとも1つである。これにより、監視処理の処理負荷を調整でき、また、コマンドのリアルタイム性が考慮された監視処理を実現することができる。
また、異常対応部VM415は、さらに、コマンドの種別に応じてコマンドの異常を示すログを集約または集計することでグルーピングログを生成する。このため、集約または集計した異常を分析に利用することができる。
また、監視プログラム制御部VM412は、1以上の監視プログラムのうちの簡易監視プログラムの監視結果に応じて、簡易監視プログラムよりも処理負荷が高い詳細監視プログラムを呼び出す。例えば、簡易監視プログラムで異常が検知された場合に詳細監視プログラムを実行することで、異常についてより詳細な結果が得られるように処理されてもよいし、簡易監視プログラムで異常が検知された場合に詳細監視プログラムの実行をスキップすることで処理負荷を低減し、異常の通知までに要する時間を削減してもよい。
(変形例)
[統合ECUの構成の詳細]
図19は、変形例における統合ECU200の一部の構成を詳細に示すブロック図である。
実施の形態と比較して監視仮想マシンVM500の構成が異なるため、監視仮想マシンVM500について説明する。
監視仮想マシンVM500は、第1コマンド受信部VM501、第1監視プログラム制御部VM502、第1コマンド送信部VM503、第2コマンド受信部VM511、第2監視プログラム制御部VM512、第2コマンド送信部VM513、簡易監視プログラムVM413、詳細監視プログラムVM414、異常対応部VM415、システム状態取得部VM417、及び、システム構成取得部VM418を備える。簡易監視プログラムVM413、詳細監視プログラムVM414、異常対応部VM415、システム状態取得部VM417、及び、システム構成取得部VM418の構成は、実施の形態の監視仮想マシンVM400が備える構成と同様であるため、同じ符号を付し説明を省略する。
監視仮想マシンVM500は、2つのコマンド受信部と、2つの監視プログラム制御部と、2つのコマンド送信部とを有する点が実施の形態の監視仮想マシンVM400と異なる。つまり、監視仮想マシンVM500は、コマンド受信部、監視プログラム制御部、及び、コマンド送信部を2組有する点が監視仮想マシンVM400と異なる。コマンド受信部、監視プログラム制御部、及び、コマンド送信部を2組有するため、2組に監視処理の役割分担をさせることでコマンドが遅延することを抑制できる。
第1コマンド受信部VM501、第1監視プログラム制御部VM502、及び、第1コマンド送信部VM503は、映像仮想マシンVM300用の処理を実行する。つまり、第1コマンド受信部VM501、第1監視プログラム制御部VM502、及び、第1コマンド送信部VM503は、映像仮想マシンVM300のプロセスで送信または受信されるコマンドに対する処理を実行する。第1コマンド受信部VM501、第1監視プログラム制御部VM502、及び、第1コマンド送信部VM503は、それぞれ、実施の形態のコマンド受信部VM411、監視プログラム制御部VM412、及び、コマンド送信部VM416と同様の機能を有する。
第2コマンド受信部VM511、第2監視プログラム制御部VM512、及び、第2コマンド送信部VM513は、外部仮想マシンVM100用の処理を実行する。つまり、第2コマンド受信部VM511、第2監視プログラム制御部VM512、及び、第2コマンド送信部VM513は、外部仮想マシンVM100のプロセスで送信または受信されるコマンドに対する処理を実行する。第2コマンド受信部VM511、第2監視プログラム制御部VM512、及び、第2コマンド送信部VM513は、それぞれ、実施の形態のコマンド受信部VM411、監視プログラム制御部VM412、及び、コマンド送信部VM416と同様の機能を有する。
映像仮想マシンVM300から外部仮想マシンVM100への仮想マシン間の内部通信である場合に、映像仮想マシンVM300からの送信時の監視プログラムの設定に基づいて、第1監視プログラム制御部VM502によって簡易監視プログラムと詳細監視プログラムが実行されてもよい。また、外部仮想マシンVM100の受信時の監視プログラム設定に基づいて、第1監視プログラム制御部VM502によって簡易監視プログラムと詳細監視プログラムが実行されてもよい。
この場合、同じコマンドに対して、同じ監視プログラムを実行することは非効率であるため、第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512のうちの一方の監視プログラム制御部で監視処理を実行したり、第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512の両方で処理を分担したりする。処理の分担は分担テーブルを用いて決定され、簡易監視プログラムはコマンドの送信側の仮想マシンに対応する監視プログラム制御部において実行され、詳細監視プログラムはコマンドの受信側の仮想マシンに対応する監視プログラム制御部において実行されるように分担処理することで、遅延を抑えられる。
[監視仮想マシンの処理シーケンス]
図20は、変形例における監視仮想マシンの処理シーケンスの一例を示す図である。
図20に示すように、第1コマンド受信部VM501または第2コマンド受信部VM511は、監視仮想マシンVM500以外の仮想マシン、外部ECU、外部デバイスなどからコマンドを受信し、受信したコマンドを識別する(S101)。これにより、システム構成取得部VM418は、コマンドに含まれる識別子に基づいて、コマンドを送信した仮想マシン、または、コマンドを受信した仮想マシンの構成情報を取得する。また、システム状態取得部VM417は、コマンドに含まれる識別子に基づいて、コマンドを送信した仮想マシン、または、コマンドを受信した仮想マシンのシステム状態を取得してもよい。ステップS101により得られた、コマンドの識別子、仮想マシンの構成情報、及び、仮想マシンのシステム状態は、第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512へ通知される。
次に、第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512は、コマンドの識別子からコマンドの特性を参照し、通知された構成情報及びシステム状態と、コマンドの特性とに応じて、監視プログラムの分担を決定する(S211)。第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512は、例えば、システム負荷の低いインタフェース側で、監視処理を実行するように監視処理を分担することで、負荷を軽減できる。
次に、第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512は、1以上の監視プログラムのうち実行すると決定された簡易監視プログラムVM413の呼び出しを行う(S106)。そして、簡易監視プログラムVM413による監視処理が実行される(S107)。
次に、第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512は、1以上の監視プログラムのうち実行すると決定された詳細監視プログラムVM414の呼び出しを行う(S108)。そして、詳細監視プログラムVM414による監視処理が実行される(S109)。
次に、第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512は、対応アプリの呼び出しを行う(S110)。これにより、異常対応部VM415は、異常対応処理を実行する(S111)。異常対応処理では、監視処理の監視結果に応じて、コマンドのロギング、コマンドのドロップ、仮想マシンの再起動、システムの再起動などが実行される。なお、ステップS111の詳細は後述する。
次に、第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512は、受信したコマンドを指定の宛先の仮想マシン、外部ECU、外部デバイスなどに送信するために、第1コマンド送信部VM503または第2コマンド送信部VM513へ送信する(S112)。第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512は、例えば、監視処理において正常と判定されたコマンドを指定の宛先の仮想マシン、外部ECU、外部デバイスなどに送信するために、送信先に対応するコマンド送信部へ送信する。第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512は、例えば、監視処理において以上と判定されたコマンドを指定の宛先の仮想マシン、外部ECU、外部デバイスなどに送信するために、送信先に対応するコマンド送信部へ送信しなくてもよい。そして、送信先に対応するコマンド送信部は、第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512から受信したコマンドを指定の宛先の仮想マシン、外部ECU、外部デバイスなどに送信する(S113)。
なお、上記では、第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512がステップS211、S106、S108、S110、及びS112の処理を行うとしたが、第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512の少なくとも一方においてこれらの処理が行われればよい。
[監視プログラムの分担]
図21は、変形例における監視プログラムの分担処理(S211)のフローチャートの一例を示す図である。
図21に示すように、第1監視プログラム制御部VM502または第2監視プログラム制御部VM512は、第1コマンド受信部VM501または第2コマンド受信部VM511において受信されたコマンドを取得する(S221)。
次に、第1監視プログラム制御部VM502または第2監視プログラム制御部VM512は、取得したコマンドに基づいて、仮想マシン間の内部通信であるか否かを判定する(S222)。つまり第1監視プログラム制御部VM502または第2監視プログラム制御部VM512は、取得したコマンドの送信元及び送信先の両方が仮想マシンであるか否かを判定する。
第1監視プログラム制御部VM502または第2監視プログラム制御部VM512は、仮想マシン間の内部通信であると判定した場合(S222でYes)、ステップS223を実行し、仮想マシン間の内部通信でないと判定した場合(S222でNo)、監視プログラムの分担処理を終了する。
ステップS223において、第1監視プログラム制御部VM502または第2監視プログラム制御部VM512は、仮想コマンドの負荷に応じて分担の決定テーブルを参照し、分担識別子を付与する。
次に、第1監視プログラム制御部VM502または第2監視プログラム制御部VM512は、分担識別子に従って決定した監視プログラムを実行する(S224)。
[分担の決定テーブル]
図22は、変形例における分担の決定テーブルの一例を示す図である。
図22に示すように、分担の決定テーブルは、分担識別子と、条件と、簡易監視プログラムを実行する監視プログラム制御部と、詳細監視プログラムを実行する監視プログラム制御部と、異常対応部とを含む。分担識別子は、4つの分担方法を特定する識別子である。条件は、仮想コマンド負荷に基づいて4つの分担方法のうちの1つを決定するための条件である。例えば、送信側の仮想コマンド負荷が閾値1より低い場合、簡易監視プログラムは第1監視プログラム制御部VM502により実行され、詳細監視プログラムは第1監視プログラム制御部VM502により実行され、異常対応処理は第1監視プログラム制御部VM502により実行される。また、例えば、送信側の仮想コマンド負荷が閾値1以上閾値2より低い場合、簡易監視プログラムは第1監視プログラム制御部VM502により実行され、詳細監視プログラムは第1監視プログラム制御部VM502により実行され、異常対応処理は第2監視プログラム制御部VM512により実行される。また、例えば、送信側の仮想コマンド負荷が閾値2以上閾値3より低い場合、簡易監視プログラムは第1監視プログラム制御部VM502により実行され、詳細監視プログラムは第2監視プログラム制御部VM512により実行され、異常対応処理は第2監視プログラム制御部VM512により実行される。また、例えば、送信側の仮想コマンド負荷が閾値3以上である場合、簡易監視プログラムは第2監視プログラム制御部VM512により実行され、詳細監視プログラムは第2監視プログラム制御部VM512により実行され、異常対応処理は第2監視プログラム制御部VM512により実行される。
なお、図22では仮想コマンド負荷に応じて分担方法を特定する方法を示したが、仮想コマンドの通信方向または送信先、送信元に応じて分担方法を特定してもよい。例えば、仮想コマンドを受信する第1監視プログラム制御部VM502にて簡易監視プログラムと詳細監視プログラムを実行し、仮想コマンドを送信する第2監視プログラム制御部VM512にて、異常対応処理を実行する。この場合、仮想コマンド負荷を参照することなく分担方法を決定できる。
また、第1監視プログラム制御部VM502にて仮想コマンドに分担識別子を付与することで、第2監視プログラム制御部VM512が仮想コマンドに付与された分担識別子を参照して分担方法を特定してもよい。この場合、第1監視プログラム制御部VM502が分担方法を任意に決定できる。なお、仮想コマンドに分担識別子を付与する方法以外にも第1監視プログラム制御部VM502と第2監視プログラム制御部VM512との間のデータ通信やデータ共有によって監視プログラムの分担方法を特定してもよく、監視プログラム間のデータ通信やデータ共有によって監視プログラムの分担方法を特定してもよい。この場合、仮想コマンドの特性と監視プログラムの特性とに応じて動的に分担方法を決定できる。
また、監視プログラムが複数の監視ルールを保持する場合、第1監視プログラム制御部VM502が実行する監視プログラムに第1のルールを適用し、第2監視プログラム制御部VM512が実行する監視プログラムが第2のルールを適用するという分担を実施してもよい。この場合、監視プログラムが一つであっても処理を分担できる。
[効果など]
変形例に係る監視装置(統合ECU200)は、2以上の監視プログラム制御部(例えば、第1監視プログラム制御部VM502及び第2監視プログラム制御部VM512)を備え、コマンドに対する1以上の監視プログラムは、コマンドの送信先が仮想化プラットフォーム上の仮想マシンであると判定された場合に、2以上の監視プログラム制御部のうち、コマンドに含まれる識別子及び構成情報に基づいて決定された1以上の監視プログラム制御部によって実行方法が決定される。
例えば、2以上の監視プログラム制御部は、システム状態に応じて1以上の監視プログラムの実行方法を決定する。
例えば、2以上の監視プログラム制御部のうち、第1監視プログラム制御部は、コマンドに第1識別子を付与し、第2監視プログラム制御部は、コマンドに第1識別子が付与されているか否かに応じて、1以上の監視プログラムの実行方法を決定する。
このため、コマンドに含まれる識別子及び構成情報に基づいて、監視処理を2以上の監視プログラム制御部で分担することができる。よって、遅延を抑えることができる。
以上、本開示の監視装置について、上記実施の形態およびその変形例に基づいて説明したが、本開示は、その実施の形態および変形例に限定されるものではない。本開示の趣旨を逸脱しない限り、当業者が思いつく各種変形を上記実施の形態および変形例に施したものも本開示に含まれてもよい。
なお、上記実施の形態において、各構成要素は、専用のハードウェアで構成されるか、各構成要素に適したソフトウェアプログラムを実行することによって実現されてもよい。各構成要素は、CPU(Central Processing Unit)またはプロセッサなどのプログラム実行部が、ハードディスクまたは半導体メモリなどの記録媒体に記録されたソフトウェアプログラムを読み出して実行することによって実現されてもよい。ここで、上記各実施の形態の監視装置などを実現するソフトウェアは、図8~図14、図20及び図21のそれぞれに示すフローチャートまたはシーケンス図の各ステップをコンピュータに実行させるコンピュータプログラムである。
なお、以下のような場合も本開示に含まれる。
(1)上記の少なくとも1つの装置は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。そのRAMまたはハードディスクユニットには、コンピュータプログラムが記憶されている。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、上記の少なくとも1つの装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
(2)上記の少なくとも1つの装置を構成する構成要素の一部または全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されているとしてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。前記RAMには、コンピュータプログラムが記憶されている。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、システムLSIは、その機能を達成する。
(3)上記の少なくとも1つの装置を構成する構成要素の一部または全部は、その装置に脱着可能なICカードまたは単体のモジュールから構成されているとしてもよい。ICカードまたはモジュールは、マイクロプロセッサ、ROM、RAMなどから構成されるコンピュータシステムである。ICカードまたはモジュールは、上記の超多機能LSIを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、ICカードまたはモジュールは、その機能を達成する。このICカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
(4)本開示は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本開示は、コンピュータプログラムまたはデジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD(Compact Disc)-ROM、DVD、DVD-ROM、DVD-RAM、BD(Blu-ray(登録商標) Disc)、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されているデジタル信号であるとしてもよい。
また、本開示は、コンピュータプログラムまたはデジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、プログラムまたはデジタル信号を記録媒体に記録して移送することにより、またはプログラムまたはデジタル信号を、ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。