(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-13
(45)【発行日】2024-11-21
(54)【発明の名称】情報処理装置および情報処理方法
(51)【国際特許分類】
G06F 21/55 20130101AFI20241114BHJP
G06F 9/455 20180101ALI20241114BHJP
【FI】
G06F21/55
G06F9/455 150
(21)【出願番号】P 2023502106
(86)(22)【出願日】2021-12-22
(86)【国際出願番号】 JP2021047509
(87)【国際公開番号】W WO2022181020
(87)【国際公開日】2022-09-01
【審査請求日】2024-05-22
(31)【優先権主張番号】P 2021029959
(32)【優先日】2021-02-26
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】322003857
【氏名又は名称】パナソニックオートモーティブシステムズ株式会社
(74)【代理人】
【識別番号】100123102
【氏名又は名称】宗田 悟志
(72)【発明者】
【氏名】今本 吉治
(72)【発明者】
【氏名】安齋 潤
(72)【発明者】
【氏名】中野 稔久
【審査官】上島 拓也
(56)【参考文献】
【文献】特開2005-284686(JP,A)
【文献】特開平10-214208(JP,A)
【文献】特開2015-088014(JP,A)
【文献】特開2015-176168(JP,A)
【文献】特表2018-522340(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/55
G06F 9/455
(57)【特許請求の範囲】
【請求項1】
HV(HyperVisor)上で第1のVM(Virtual Machine)と第2のVMとが動作する情報処理装置であって、
前記第1のVMは、
前記第1のVMにおける処理の異常を検知する検知部と、
前記検知部により異常が検知された場合、その異常に関する情報を、前記HVを介して前記第2のVMへ通知する通知部と、を備え、
前記第2のVMは、
前記第1のVMから通知された異常に関する情報をもとに、その異常に応じた対応処理を実行する対応部を備
え、
前記対応部は、前記第1のVMから通知された異常に関する情報をもとに異常の度合を導出し、前記異常の度合が所定の閾値以上であれば対応処理を実行し、
前記検知部は、異常検知の方法が互いに異なる第1検知部と第2検知部とを含み、
前記第2検知部は、前記第1検知部による異常検知処理の後に異常検知処理を実行し、
前記対応部は、前記第2検知部により異常が検知されたが、前記第1検知部により異常が未検知の場合、異常の度合を大きくする、
情報処理装置。
【請求項2】
前記対応部は
、前記異常の度合が所定の閾値以上であれば、前記異常に関するデータを外部装置へ送信し、前記異常の度合が前記閾値未満であれば、前記異常に関するデータを外部装置へ送信しない、
請求項
1に記載の情報処理装置。
【請求項3】
前記検知部と前記通知部は、前記第1のVMで動作するOS(Operating System)に設けられ、
前記検知部は、前記OSの処理の異常を検知し、
前記対応部は、前記第1のVMから取得した、前記OSの処理の異常に関する情報をもとに、その異常に応じた対応処理を実行する、
請求項1
または2に記載の情報処理装置。
【請求項4】
前記対応部は、前記OSの処理の異常に関する情報をもとに異常の度合を導出し、前記異常の度合が所定の閾値未満であれば、前記OSの処理を要求したアプリケーションのプロセスを再起動させ、前記異常の度合が所定の閾値以上であれば、アプリケーションのプロセスを停止させる、
請求項
3に記載の情報処理装置。
【請求項5】
セキュアモニタ上でHVとセキュアOSとが動作し、前記HV上で1つ以上のVMが動作する情報処理装置であって、
前記HVは、
前記HVにおける処理の異常を検知する検知部と、
前記検知部により異常が検知された場合、その異常に関する情報を、前記セキュアモニタを介して前記セキュアOSへ通知する通知部と、を備え、
前記セキュアOSは、
前記HVから通知された異常に関する情報をもとに、その異常に応じた対応処理を実行する対応部を備える、
情報処理装置。
【請求項6】
HV上で第1のVMと第2のVMとが動作するコンピュータが実行する情報処理方法であって、
前記第1のVMが、前記第1のVMにおける処理の異常を検知し、異常を検知した場合、その異常に関する情報を、前記HVを介して前記第2のVMへ通知し、
前記第2のVMが、前記第1のVMから通知された異常に関する情報をもとに、その異常に応じた対応処理を実行
し、
前記第2のVMが、前記第1のVMから通知された異常に関する情報をもとに異常の度合を導出し、前記異常の度合が所定の閾値以上であれば対応処理を実行し、
前記第1のVMは、異常検知の方法が互いに異なる第1検知部と第2検知部とを含み、
前記第2検知部は、前記第1検知部による異常検知処理の後に異常検知処理を実行し、
前記第2のVMが、前記第2検知部により異常が検知されたが、前記第1検知部により異常が未検知の場合、異常の度合を大きくする、
情報処理方法。
【請求項7】
セキュアモニタ上でHVとセキュアOSとが動作し、前記HV上で1つ以上のVMが動作するコンピュータが実行する情報処理方法であって、
前記HVが、前記HVにおける処理の異常を検知し、異常を検知した場合、その異常に関する情報を、前記セキュアモニタを介して前記セキュアOSへ通知し、
前記セキュアOSが、前記HVから通知された異常に関する情報をもとに、その異常に応じた対応処理を実行する、
情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示はデータ処理技術に関し、特に情報処理装置および情報処理方法に関する。
【背景技術】
【0002】
ソフトウェアの脆弱性を突いた攻撃によりシステムの権限が不正に奪取されてしまう等のリスクに対処するための様々なメモリ保護技術が提案されている。このような保護技術として、例えば、StackCanary、CFI(Control Flow Integrity)、DEP(Data Execution Prevention)がある。以下の特許文献1では、関数のリターン時のアドレスをホワイトリスト型で検査し、予め定義されていないアドレスへ遷移することを防止する技術が提案されている。
【先行技術文献】
【特許文献】
【0003】
【文献】米国特許出願公開第2018/0349598号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1の技術では、異常な関数遷移を防止できるが、OS(Operating System)等の特権レイヤで動作するプログラムに適用すると、異常に対応する機能も同様に攻撃対象となり得るため、安定した異常対応処理を保証できないという課題があった。
【0005】
本開示はこうした課題に鑑みてなされたものであり、1つの目的は、システムで生じた異常に対する安定した異常対応処理を実現する技術を提供することにある。
【課題を解決するための手段】
【0006】
上記課題を解決するために、本開示のある態様の情報処理装置は、HV(HyperVisor)上で第1のVM(Virtual Machine)と第2のVMとが動作する情報処理装置であって、第1のVMは、第1のVMにおける処理の異常を検知する検知部と、検知部により異常が検知された場合、その異常に関する情報を、HVを介して第2のVMへ通知する通知部と、を備える。第2のVMは、第1のVMから通知された異常に関する情報をもとに、その異常に応じた対応処理を実行する対応部を備える。
【0007】
本開示の別の態様も、情報処理装置である。この装置は、セキュアモニタ上でHVとセキュアOSとが動作し、HV上で1つ以上のVMが動作する情報処理装置であって、HVは、VMにおける処理の異常を検知する検知部と、検知部により異常が検知された場合、その異常に関する情報を、セキュアモニタを介してセキュアOSへ通知する通知部と、を備える。セキュアOSは、HVから通知された異常に関する情報をもとに、その異常に応じた対応処理を実行する対応部を備える。
【0008】
本開示のさらに別の態様は、情報処理方法である。この方法は、HV上で第1のVMと第2のVMとが動作するコンピュータが実行する情報処理方法であって、第1のVMが、第1のVMにおける処理の異常を検知し、異常を検知した場合、その異常に関する情報を、HVを介して第2のVMへ通知し、第2のVMが、第1のVMから通知された異常に関する情報をもとに、その異常に応じた対応処理を実行する。
【0009】
本開示のさらに別の態様もまた、情報処理方法である。この方法は、セキュアモニタ上でHVとセキュアOSとが動作し、HV上で1つ以上のVMが動作するコンピュータが実行する情報処理方法であって、HVが、HVにおける処理の異常を検知し、異常を検知した場合、その異常に関する情報を、セキュアモニタを介してセキュアOSへ通知し、セキュアOSが、HVから通知された異常に関する情報をもとに、その異常に応じた対応処理を実行する。
【0010】
なお、以上の構成要素の任意の組合せ、本開示の表現を、システム、コンピュータプログラム、コンピュータプログラムを記録した記録媒体、情報処理装置を搭載した車両などの間で変換したものもまた、本開示の態様として有効である。
【発明の効果】
【0011】
本開示の技術によれば、システムで生じた異常に対する安定した異常対応処理を実現することができる。
【図面の簡単な説明】
【0012】
【
図1】実施例のECUが備える機能ブロックを示すブロック図である。
【
図2】
図2(a)は、OSプログラムのソースコードの例を示す図であり、
図2(b)は、チェックコードが追加されたOSプログラムのソースコードの例を示す図である。
【
図3】実施例のECU(VM16)の動作を示すフローチャートである。
【
図4】実施例のECU(VM18)の動作を示すフローチャートである。
【
図5】異常スコアごとの対応処理の内容を示す図である。
【
図6】第1変形例のECUが備える機能ブロックを示すブロック図である。
【発明を実施するための形態】
【0013】
本開示における装置または方法の主体は、コンピュータを備えている。このコンピュータがプログラムを実行することによって、本開示における装置または方法の主体の機能が実現される。コンピュータは、プログラムにしたがって動作するプロセッサを主なハードウェア構成として備える。プロセッサは、プログラムを実行することによって機能を実現することができれば、その種類は問わない。プロセッサは、半導体集積回路(Integrated Circuit)(IC)、またはLSI(Large Scale Integration)を含む1つまたは複数の電子回路で構成される。ここではICあるいはLSIと呼んでいるが、集積の度合いによって呼び方が変わり、システムLSI、VLSI(Very Large Scale Integration)もしくはUSLI(Ultra Large Scale Integration)と呼ばれるものであってもよい。LSIの製造後にプログラムされる、フィールド・プログラマブル・ゲート・アレイ(Field Programmable Gate Array)(FPGA)、またはLSI内部の接合関係の再構成またはLSI内部の回路区画のセットアップができる再構成可能な論理デバイスも同じ目的で使うことができる。複数の電子回路は、1つのチップに集積されてもよいし、複数のチップに設けられてもよい。複数のチップは1つの装置に集約されていてもよいし、複数の装置に備えられていてもよい。プログラムは、コンピュータが読み取り可能なROM(Read Only Memory)、光ディスク、ハードディスクドライブなどの非一時的記録媒体に記録される。プログラムは、記録媒体に予め格納されていてもよいし、インターネット等を含む広域通信網を介して記録媒体に供給されてもよい。
【0014】
実施例の概要を説明する。
従来、ソフトウェアの脆弱性を突く攻撃からソフトウェアを保護する技術(例えば異常な関数遷移を防止するメモリ保護技術)が提案されている。しかし、このような従来技術をOS等の特権レイヤで動作するプログラムに適用すると、異常に対応する機能も同様に攻撃対象となり得るため、安定した異常対応処理を保証できないという課題があった。実施例の情報処理装置(後述のECU12)では、異常対応処理を実行する主体を異常を検知する主体から分離し、また、メモリ保護技術の検知結果を保護対象のプログラムから分離することにより、システムで生じた異常に対する安定した異常対応処理を実現する。
【0015】
また、ソフトウェアの脆弱性を修正するためには、異常に関連する様々なデータ(以下「異常情報」とも呼ぶ。)を収集し、解析のため外部へ提供する必要がある。OS等のシステムソフトウェアでは管理データのサイズが大きいため、異常情報の収集と提供を効率的に行う必要がある。実施例の情報処理装置(後述のECU12)は、異常検知時にその異常の度合をスコアリングすることで、異常情報の収集と提供の効率化を実現する。
【0016】
実施例の詳細を説明する。
図1は、実施例のECU(Electronic Control Unit)12が備える機能ブロックを示すブロック図である。ECU12は、車両10に搭載されるマイクロコントローラである。ECU12は、例えば、TCU(Telematics Communication Unit)の機能(例えば車両10外部の機器との通信機能)と、ADAS(Advanced Driver-Assistance System)の機能(例えば衝突被害軽減ブレーキやクルーズコントロール)を提供する統合ECUであってもよい。
【0017】
本開示のブロック図において示される各ブロックは、ハードウェア的には、コンピュータのCPU・メモリをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
【0018】
例えば、
図1に示すECU12の複数の機能ブロックのうち少なくとも一部の機能ブロックに対応するモジュールを含むコンピュータプログラムが、ECU12のROMに記憶されてもよい。ECU12のCPUは、このコンピュータプログラムをRAMに読み出して実行することにより、
図1に示す各機能ブロックの機能を発揮してもよい。
【0019】
ECU12は、ハイパーバイザ(HV14)と、HV14上で動作する複数の仮想マシン(VM16およびVM18)とを備える。HV14は、ECU12が備える各種ハードウェアリソースをVM16およびVM18に割り当てる処理等を実行する。VM16は、例えばTCUの機能を提供するVMであり、実施例では、攻撃対象となる第1のVMである。VM18は、例えばADASの機能を提供するVMであり、実施例では、攻撃により生じた異常に対する分析と対応を行う第2のVMである。また、VM16とVM18は、メモリを共有する。
【0020】
VM16は、ゲストOS20と、ゲストOS20上で動作する複数のアプリケーションのプロセス(実施例ではAppプロセス22とAppプロセス24)を備える。言い換えれば、VM16では、ゲストOS20のプログラム(以下「OSプログラム」とも呼ぶ。)が実行され、ゲストOS20の管理下で複数のアプリケーションのプログラムが実行される。
【0021】
Appプロセス22は、特権処理要求部26を備える。特権処理要求部26は、アプリケーションの処理で生じた特権処理要求をゲストOS20へ送信する。特権処理要求は、システムコールとも言え、ゲストOS20のAPI(Application Programming Interface)を呼び出すことによりゲストOS20の処理(例えばファイルオープン等)を要求するものであってもよい。
【0022】
ゲストOS20は、要求受信部28、カーネル処理部30、異常通知部32、異常情報蓄積部34を備える。要求受信部28は、Appプロセス22(特権処理要求部26)から送信された特権処理要求を受け付ける。カーネル処理部30は、要求受信部28により受け付けられた特権処理要求に応じて、カーネルの処理(例えばファイルオープン)を実行する。カーネル処理部30は、第1検知部36、第2検知部38、統計情報取得部40を含む。
【0023】
第1検知部36と第2検知部38は、VM16における処理の異常を検知する。具体的には、第1検知部36と第2検知部38は、VM16のゲストOS20における処理(特権モードの処理とも言える)の異常を検知する。第1検知部36と第2検知部38は、異常検知の方法が互いに異なる。実施例では、第1検知部36は、StackCanaryの仕組みによりゲストOS20における処理の異常を検知する。第2検知部38は、CFIの仕組みによりゲストOS20における処理の異常を検知する。
【0024】
図2(a)は、OSプログラムのソースコードの例を示し、
図2(b)は、チェックコードが追加されたOSプログラムのソースコードの例を示す。チェックコード60は、StackCanary機能を呼び出すコードであり、チェックコード60が実行されることにより、第1検知部36による異常検知処理が実行される。チェックコード62は、CFI機能を呼び出すコードであり、チェックコード62が実行されることにより、第2検知部38による異常検知処理が実行される。
図2(b)に示すように、実施例では、第1検知部36による異常検知処理(StackCanary)が先に実行され、第2検知部38による異常検知処理(CFI)が後に実行される。
【0025】
図1に戻り、統計情報取得部40は、Appプロセス22からの特権処理要求に基づいて検知された異常に関する統計情報を取得する。統計情報取得部40は、取得した統計情報を異常情報蓄積部34に格納する。統計情報は、要求受信部28が特権処理要求を受信した回数や頻度、言い換えれば、Appプロセス22から特権処理が呼び出された回数や頻度を含んでもよい。また、統計情報は、特権処理要求に伴い発生したエラーの回数や頻度を含んでもよい。このエラーは、特権処理要求の引数の個数や型、値範囲等に関する形式エラーを含んでもよい。
【0026】
異常通知部32は、第1検知部36と第2検知部38の少なくとも一方で異常が検知された場合、その異常に関連する様々なデータ(異常情報)をカーネル処理部30から取得して、異常情報蓄積部34に格納する。異常情報は、異常が検知されたOSプログラムのプロセスIDとプロセス名、異常を検知した検知部の種類(実施例では第1検知部36または第2検知部38)、レジスタ情報、異常が検知されたOSプログラムの位置とデータ、スタックトレースデータ、異常が検知されたOSプログラムを呼び出したAppプロセスの情報を含む。異常情報蓄積部34は、検知された異常に関する統計情報と異常情報を記憶する。
【0027】
また、異常通知部32は、第1検知部36と第2検知部38の少なくとも一方で異常が検知された場合、その異常に関する情報(以下「通知情報」とも呼ぶ。)を、HV14を介してVM18へ通知する。実施例では、異常通知部32は、HV14の所定のAPIを呼び出すことにより、通知情報をHV14へ渡す。実施例の通知情報は、異常情報蓄積部34に記憶された異常情報を取得するために必要なデータを含む。例えば、通知情報は、異常情報蓄積部34における異常情報の記憶位置を示すアドレスデータを含んでもよい。
【0028】
HV14は、転送部42を備える。転送部42は、VM16(ゲストOS20)から出力された通知情報を受け付け、その通知情報をVM18(ゲストOS44)へ転送する。
【0029】
VM18は、ゲストOS44と、ゲストOS44上で動作する1つ以上のアプリケーションのプロセス(実施例ではAppプロセス46)を備える。
【0030】
ゲストOS44は、要求受信部48、カーネル処理部50、割込み受信部52を備える。要求受信部48とカーネル処理部50は、ゲストOS20の要求受信部28とカーネル処理部30に対応する。割込み受信部52は、HV14から割込みにより渡された通知情報を受信して、その通知情報をAppプロセス46に渡す。
【0031】
Appプロセス46は、対応部として、VM16から通知された異常に関する情報(実施例では通知情報)をもとに、その異常に応じた対応処理を実行する。実施例では、Appプロセス46は、VM16から取得した、ゲストOS20の処理の異常に関する情報をもとに、その異常に応じた対応処理を実行する。Appプロセス46は、異常分析部54と異常対応部56を含む。
【0032】
異常分析部54は、VM16のゲストOS20から出力され、HV14(転送部42)およびゲストOS44(割込み受信部52)により転送された、ゲストOS20の異常に関する通知情報を受け付ける。異常分析部54は、通知情報が示すアドレスデータをもとに、VM16(異常情報蓄積部34)から当該異常に関する異常情報と統計情報とを読み出す。異常分析部54は、VM16(異常情報蓄積部34)から読み出した異常情報と統計情報とをもとに、異常の度合いを導出する。
【0033】
異常対応部56は、異常分析部54により導出された異常の度合いが所定の閾値未満であれば、ゲストOS20の処理を要求したアプリケーションのプロセス(実施例ではAppプロセス22)を再起動させる。一方、異常分析部54により導出された異常の度合いが上記閾値以上であれば、異常対応部56は、上記アプリケーションのプロセスを停止させる。
【0034】
また、異常対応部56は、異常分析部54により導出された異常の度合いが所定の閾値以上であれば、異常に関するデータを外部装置へ送信する。一方、異常分析部54により導出された異常の度合いが上記閾値未満であれば、異常対応部56は、異常に関するデータを外部装置へ送信せず、言い換えれば、外部装置への送信を抑制する。外部装置は、ECU12の外部の装置であってもよく、車両10の外部の装置であってもよく、ECU12の異常情報を蓄積し、解析する装置であってもよい。
【0035】
以上の構成による実施例のECU12の動作を説明する。
図3は、実施例のECU12(VM16)の動作を示すフローチャートである。Appプロセス22の特権処理要求部26は、アプリケーションの処理で生じた特権処理要求をゲストOS20へ送信する(S10)。ゲストOS20の要求受信部28は、特権処理要求を受信し、カーネル処理部30は、要求された特権モードでの処理(ファイルオープン等)を開始する(S11)。
【0036】
カーネル処理部30における特権モードでの処理中に、第1検知部36は、StackCanaryの仕組みにより異常の有無を検査する(S12)。第1検知部36が異常を未検知の場合(S13のN)、第2検知部38は、CFIの仕組みにより異常の有無を検査する(S14)。第2検知部38が異常を未検知の場合(S15のN)、カーネル処理部30は、特権モードでの処理の結果を要求元のAppプロセス22に返す(S16)。
【0037】
第1検知部36が異常を検知した場合(S13のY)、または、第2検知部38が異常を検知した場合(S15のY)、カーネル処理部30は、それまで実行した特権モードでの処理に関するアボート処理を実行する(S17)。異常通知部32は、検知された異常に関する異常情報を異常情報蓄積部34に格納する(S18)。異常通知部32は、検知された異常に関する通知情報を、HV14を介してVM18(すなわち異常対応処理を実行する他のVM)へ送信する(S19)。
【0038】
図3には不図示だが、ゲストOS20の要求受信部28は、Appプロセス22から受信した特権処理要求に関する情報を統計情報取得部40へ提供する。統計情報取得部40は、Appプロセス22からの特権処理要求に基づく統計情報(例えば要求回数や要求頻度、エラー情報、エラー頻度等)を異常情報蓄積部34に格納する。
【0039】
図4は、実施例のECU12(VM18)の動作を示すフローチャートである。VM18で実行中のAppプロセス46の異常分析部54は、VM16から出力され、HV14およびゲストOS44により転送された通知情報を受信する(S20)。異常分析部54は、通知情報に基づいて、VM16の異常情報蓄積部34から異常情報を読み出す(S21)。また、異常分析部54は、VM16の異常情報蓄積部34から、異常情報が示す、異常が検知されたOSプログラムを呼び出したAppプロセス(実施例ではAppプロセス22)に関する統計情報をさらに読み出す。
【0040】
異常分析部54は、第2検知部38が異常を検知したことを異常情報が示す場合、すなわち第1検知部36が異常を未検知であって第2検知部38が異常を検知した場合(S22のY)、異常スコアを加算する(実施例では+1する)(S23)。異常スコアは、VM16(ゲストOS20)の異常の度合いを示す指標値である。第1検知部36が異常を検知したことを異常情報が示す場合(S22のN)、S23の処理をスキップする。このように、第1検知部36による異常検知を回避する攻撃を受けた場合に異常の度合を大きくすることで、攻撃の種類に応じた適切な対応処理を実行する。
【0041】
異常分析部54は、異常情報と統計情報を分析し、OSプログラムの呼び出し元であるAppプロセス22の動作として通常とは異なる異常な動作が記録されているか否かを判定する(S24)。例えば、統計情報が示す、Appプロセス22からの特権処理要求の回数または頻度が所定の閾値より大きい場合や、Appプロセス22からの特権処理要求が形式チェックでエラーとなった回数または頻度が所定の閾値より大きい場合、異常分析部54は、異常な動作が記録されていると判定してもよい。Appプロセス22の異常な動作が記録されている場合(S25のY)、異常分析部54は、異常スコアを加算する(実施例では+1する)(S26)。Appプロセス22の異常な動作が記録されていなければ(S25のN)、S26の処理をスキップする。
【0042】
S26までの処理の結果、異常スコアは、異常の度合いが低い場合「0」、異常の度合いが中程度の場合「1」、異常の度合いが高い場合「2」となる。異常対応部56は、異常スコアに応じて、異常に対する対応処理を実行する(S27)。
【0043】
図5は、異常スコアごとの対応処理の内容を示す。異常スコアが第1閾値(実施例では「1」)未満の場合、すなわち異常スコアが「0」の場合、異常対応部56は、異常が検知されたOSプログラムを呼び出したVM16のAppプロセス22を再起動させる。例えば、VM18は、Appプロセス22を再起動させる内容を含む予め作成されたコマンドファイルを記憶し、異常対応部56は、そのコマンドファイルを実行してもよい。異常スコアが第1閾値の場合、異常対応部56は、VM16のゲストOS20で異常が発生したことを示すセキュリティインシデントデータを外部装置へ送信しない。
【0044】
異常スコアが第1閾値以上かつ第2閾値(実施例では「2」)未満の場合、すなわち異常スコアが「1」の場合、異常対応部56は、異常が検知されたOSプログラムを呼び出したVM16のAppプロセス22を再起動させる。それとともに、異常対応部56は、VM16から取得された異常情報を所定の記憶領域(例えばVM18用のメモリ領域)に保存し、また、異常情報を含むセキュリティインシデントデータを外部装置へ送信する。
【0045】
異常スコアが第2閾値以上の場合、すなわち異常スコアが「2」の場合、異常対応部56は、異常が検知されたOSプログラムを呼び出したVM16のAppプロセス22を停止させ、VM16を縮退運転させる。例えば、VM18は、Appプロセス22を強制停止させる内容を含む予め作成されたコマンドファイルを記憶し、異常対応部56は、そのコマンドファイルを実行してもよい。それとともに、異常対応部56は、VM16から取得された異常情報を所定の記憶領域(例えばVM18用のメモリ領域)に保存し、また、異常情報を含むセキュリティインシデントデータを外部装置へ送信する。
【0046】
実施例のECU12では、異常を検知するVMと、その異常への対応処理を実行するVMとを分離する(実施例では前者がVM16、後者がVM18)。これにより、異常への対応処理を実行する機能が攻撃対象となることを回避し、異常への対応処理を安定して実行できる。例えば、ECU12では、VM16のゲストOS20が攻撃された場合に、ゲストOS20の処理の異常への対応処理を安定して実行できる。また、ECU12では、異常検知時に異常の度合いをスコアリングすることで、異常の度合いに応じて、外部装置への異常通知の要否を選別でき、例えば、外部装置への異常通知の頻度やデータ量を抑制することができる。
【0047】
以上、本開示を実施例をもとに説明した。この実施例は例示であり、実施例の各構成要素あるいは各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本開示の範囲にあることは当業者に理解されるところである。
【0048】
第1変形例を説明する。
図6は、第1変形例のECU12が備える機能ブロックを示すブロック図である。第1変形例のECU12が備える機能ブロックのうち実施例のECU12が備える機能ブロックと同一の機能ブロックには、適宜、実施例と同一の符号を付している。以下、実施例で説明済みの内容は再度の説明を省略し、主に実施例と異なる点を説明する。
【0049】
第1変形例のECU12は、セキュアモニタ70と、セキュアモニタ70上で動作するHV14とセキュアOS72とを備える。また、第1変形例のECU12は、実施例と同様に、HV14上で動作するVM16とVM18とを備える。
【0050】
セキュアモニタ70とセキュアOS72は、「セキュアワールド部」と総称される。セキュアワールド部は、典型的には、認証等、セキュリティ関連の処理を実行する。HV14、VM16、VM18の実行環境は、ノーマルワールドとも呼ばれ、ノーマルワールドのプロセスは、セキュアワールド部において予め定められたAPIを呼び出すことでのみセキュアワールド部のプロセスにアクセスできる。セキュアワールド部(セキュアモニタ70とセキュアOS72)は、HV14、VM16、VM18よりも信頼度が高い実行環境である。
【0051】
セキュアモニタ70は、転送部88を備える。転送部88は、実施例のHV14の転送部42に対応する。
【0052】
HV14は、要求受信部74、HV処理部76、異常通知部78、異常情報蓄積部80を備える。HV処理部76は、VMの管理に関する各種処理を実行する。HV処理部76は、第1検知部82、第2検知部84、統計情報取得部86を含む。要求受信部74、異常通知部78、異常情報蓄積部80、第1検知部82、第2検知部84、統計情報取得部86は、実施例のゲストOS20が備える要求受信部28、異常通知部32、異常情報蓄積部34、第1検知部36、第2検知部38、統計情報取得部40に対応する。
【0053】
セキュアOS72は、割込み受信部90と対応部92とを備える。割込み受信部90は、実施例のVM18が備える割込み受信部52に対応する。対応部92は、実施例のVM18が備えるAppプロセス46に対応する。対応部92は、異常分析部94と異常対応部96を含む。異常分析部94、異常対応部96は、実施例のAppプロセス46が備える異常分析部54、異常対応部56に対応する。
【0054】
図6に示すように、実施例ではVM16のゲストOS20が備えた異常検知に関する機能ブロックが、第1変形例ではHV14に設けられる。
図2(b)に示したチェックコードは、第1変形例ではHV14のプログラム(以下「HVプログラム」とも呼ぶ。)に設定される。また、実施例ではVM18が備えた異常対処に関する機能ブロックが、第1変形例ではセキュアOS72に設けられる。第1変形例は、HV14の異常(言い換えればHVプログラムの処理の異常)に対処するものであり、HV14の異常が検知された場合、HV14の管理下のVM18がHV14の異常に対処するのではなく、HV14に非依存のセキュアOS72がHV14の異常に対処する。
【0055】
例えば、HV14の第1検知部82と第2検知部84は、HV14における処理の異常を検知する。HV14の異常通知部78は、第1検知部82または第2検知部84により異常が検知された場合、その異常に関する情報を、セキュアモニタ70を介してセキュアOS72へ通知する。セキュアOS72の対応部92は、HV14から通知された異常に関する情報をもとに、その異常に応じた対応処理を実行する。
【0056】
以上の構成による第1変形例のECU12の動作を説明する。
Appプロセス22の特権処理要求部26は、アプリケーションの処理で生じた特権処理要求をゲストOS20へ送信する。ゲストOS20は、Appプロセス22からの特権処理要求に基づく特権モードでの処理を実行し、その実行中にハイパーバイザ処理の要求(「ハイパーコール」とも呼ぶ。)をHV14へ送信する。HV14の要求受信部74は、ハイパーコールを受信し、HV処理部76は、ハイパーコールに基づいてハイパーバイザ処理を開始する。
【0057】
HV処理部76におけるハイパーバイザ処理中に、第1検知部82は、StackCanaryの仕組みにより異常の有無を検査する。第1検知部82が異常を未検知の場合、第2検知部84は、CFIの仕組みにより異常の有無を検査する。第2検知部84が異常を未検知の場合、HV処理部76は、ハイパーバイザ処理の結果を要求元のゲストOS20に返し、ゲストOS20は、特権モードでの処理の結果を要求元のAppプロセス22に返す。
【0058】
第1検知部82が異常を検知した場合、または、第2検知部84が異常を検知した場合、HV処理部76は、それまで実行したハイパーバイザ処理に関するアボート処理を実行する。異常通知部78は、検知された異常に関する異常情報を異常情報蓄積部80に格納する。ここでの異常情報は、異常が検知されたHVプログラムを直接呼び出したゲストOS20のプロセスに関する情報に加えて、そのHVプログラムを間接的に呼び出したAppプロセス22に関する情報を含む。異常通知部78は、検知された異常に関する通知情報を、セキュアモニタ70を介してセキュアOS72へ送信する。
【0059】
HV14の要求受信部74は、ゲストOS20から受信したハイパーコールに関する情報を統計情報取得部86へ提供する。統計情報取得部86は、ゲストOS20からのハイパーコールに関する統計情報(例えば要求回数や要求頻度、エラー情報、エラー頻度等)を異常情報蓄積部80に格納する。
【0060】
セキュアOS72で実行中の対応部92の異常分析部94は、HV14から出力され、セキュアモニタ70および割込み受信部90により転送された通知情報を受信する。異常分析部94は、通知情報に基づいて、HV14の異常情報蓄積部80から異常情報を読み出す。また、異常分析部94は、HV14の異常情報蓄積部80から、異常情報が示す、異常が検知されたHVプログラムを呼び出したゲストOS20のプロセスまたはAppプロセス22に関する統計情報をさらに読み出す。
【0061】
異常分析部94は、第2検知部84が異常を検知したことを異常情報が示す場合であり、すなわち、第1検知部82が異常を未検知であって第2検知部84が異常を検知した場合、HV14の異常の度合いを示す指標値である異常スコアを加算(+1)する。第1検知部82が異常を検知したことを異常情報が示す場合、異常スコアの加算処理をスキップする。
【0062】
異常分析部94は、異常情報と統計情報とを分析し、HVプログラムの呼び出し元であるゲストOS20のプロセスまたはAppプロセス22の動作として通常とは異なる異常な動作が記録されているか否かを判定する。ゲストOS20のプロセスまたはAppプロセス22の異常な動作が記録されている場合、異常分析部94は、異常スコアを加算(+1)する。ゲストOS20のプロセスまたはAppプロセス22の異常な動作が記録されていなければ、異常スコアの加算処理をスキップする。
【0063】
異常対応部96は、異常スコアに応じて、異常に対する対応処理を実行する。異常スコアが第1閾値(ここでは「1」)未満の場合、すなわち異常スコアが「0」の場合、異常対応部96は、異常が検知されたHVプログラムを間接的に呼び出したVM16のAppプロセス22を再起動させる。変形例として、異常対応部96は、異常が検知されたHVプログラムを直接呼び出したゲストOS20のプロセスを含むVM16を再起動させてもよい。異常対応部56は、セキュリティインシデントデータを外部装置へ送信しない。
【0064】
異常スコアが第1閾値以上かつ第2閾値(ここでは「2」)未満の場合、すなわち異常スコアが「1」の場合、異常対応部96は、異常が検知されたHVプログラムを間接的に呼び出したVM16のAppプロセス22を再起動させる。変形例として、異常対応部96は、異常が検知されたHVプログラムを直接呼び出したゲストOS20のプロセスを含むVM16を再起動させてもよい。また、異常対応部96は、HV14から取得された異常情報を所定の記憶領域(例えばセキュアOS72用のメモリ領域)に保存し、また、その異常情報を含むセキュリティインシデントデータを外部装置へ送信する。
【0065】
異常スコアが第2閾値以上の場合、すなわち異常スコアが「2」の場合、異常対応部96は、異常が検知されたHVプログラムを呼び出したVM16のAppプロセス22を停止させ、VM16を縮退運転させる。変形例として、異常対応部96は、異常が検知されたHVプログラムを直接呼び出したゲストOS20のプロセスを含むVM16を停止させてもよい。さらに、異常対応部96は、HV14から取得された異常情報を所定の記憶領域(例えばセキュアOS72用のメモリ領域)に保存し、また、その異常情報を含むセキュリティインシデントデータを外部装置へ送信する。
【0066】
第1変形例のECU12では、ノーマルワールドで異常を検知した場合に、ノーマルワールドから分離されたセキュアワールド部(セキュアOS72)がその異常への対応処理を実行する。これにより、異常への対応処理を実行する機能が攻撃対象となることを回避し、異常への対応処理を安定して実行できる。例えば、ECU12では、HV14が攻撃された場合に、HV14の処理の異常への対応処理を安定して実行できる。また、ECU12では、異常検知時に異常の度合いをスコアリングすることで、異常の度合いに応じて、外部装置への異常通知の要否を選別でき、例えば、外部装置への異常通知の頻度やデータ量を抑制することができる。
【0067】
第2変形例を説明する。
第2変形例のECU12は、
図1に示す実施例のECU12の構成と、
図6に示す第1変形例のECU12の構成を組み合わせたものである。すなわち、第2実施例のECU12の構成は、
図1に示す実施例のECU12の構成に、
図6に示すHV14の構成と、セキュアモニタ70の構成と、セキュアOS72の構成を追加したものとなる。
【0068】
第2変形例のECU12では、VM16のゲストOS20がゲストOS20の異常を検知し、VM18のAppプロセス46(対応部)がゲストOS20の異常に対処する。言い換えれば、或るVM上のOSの異常に、別VMが対処する。また、第2変形例のECU12では、HV14がHV14の異常を検知し、セキュアOS72がHV14の異常に対処する。
【0069】
第2変形例では、VM18の異常対応部56は、VM16の異常情報蓄積部34から取得された、ゲストOS20の異常に関する異常情報と統計情報を、セキュアモニタ70(転送部88)を介してセキュアOS72(異常分析部94)へ送信する。セキュアOS72の異常分析部94は、VM18の異常対応部56から送信された、ゲストOS20の異常に関する異常情報と統計情報を所定の記憶領域(例えばセキュアOS72用の記憶領域)に格納する。
【0070】
セキュアOS72の異常分析部94は、HV14の異常情報蓄積部80から取得した、HV14の異常に関する異常情報と統計情報に加えて、VM18の異常対応部56から送信された、ゲストOS20の異常に関する異常情報と統計情報に基づいて、HV14の異常に関する異常スコアを導出する。例えば、異常分析部94は、第1変形例に記載したように、HV14の異常に関する異常情報と統計情報に基づいて異常スコアを増加させるとともに、実施例に記載したように、ゲストOS20の異常に関する異常情報と統計情報に基づいて異常スコアを増加させてもよい。異常対応部96は、異常スコアが高くなるほど、ECU12の安全性をより高めるよう異常対応処理を実行してもよい。
【0071】
第2変形例のECU12によると、実施例のECU12が奏する効果と、第1変形例のECU12が奏する効果の両方を奏する。また、第2変形例によると、VM16のゲストOS20に対する攻撃(ゲストOS20の異常)と、HV14に対する攻撃(HV14の異常)の両方に対処可能なECU12を実現できる。
【0072】
第3変形例を説明する。
上記実施例では、VM16の異常通知部32は、異常情報の記憶位置を示す通知情報をVM18へ送信し、VM18の異常分析部54は、通知情報が示す記憶位置に基づいて、VM16から異常情報を読み出した。変形例として、VM16の異常通知部32は、通知情報に代えて異常情報そのものをVM18へ送信してもよい。なお、第1変形例と組み合わせる場合、HV14の異常通知部78は、通知情報に代えて異常情報そのものをセキュアOS72へ送信してもよい。
【0073】
第4変形例を説明する。
異常情報は、異常が検知されたゲストOS20のOSプログラムのデータ(例えば実行形式ファイル)を含んでもよい。また、VM18(異常分析部54)は、予め生成されたゲストOS20の正規のOSプログラムのハッシュ値を記憶してもよい。VM18の異常分析部54は、異常情報に含まれるOSプログラムのデータのハッシュ値を生成し、予め記憶された正規のOSプログラムのハッシュ値と照合してもよい。VM18の異常対応部56は、ハッシュ値の照合結果(一致または不一致を示すデータ)を含むセキュリティインシデントデータを外部装置へ送信してもよい。これにより、ゲストOS20のOSプログラムが攻撃により書き換えられた場合にそのことを検出でき、また、そのことを外部装置へ通知できる。なお、第1変形例と組み合わせる場合、セキュアOS72の異常分析部94、異常対応部96がこれらの処理を実行してもよい。
【0074】
第5変形例を説明する。
異常対応部56は、外部装置へ送信するセキュリティインシデントデータに、Appプロセス46(対応部)に関連する秘密情報による電子署名を付加してもよい。これにより、第三者によるなりすましや、セキュリティインシデントデータの改ざんを防止することができる。Appプロセス46(対応部)に関連する秘密情報は、Appプロセス46、異常分析部54、または異常対応部56に予め割り当てられた秘密鍵であってもよい。
【0075】
第6変形例を説明する。
異常対応部56は、VM16のゲストOS20の異常への対応処理として、HV14と連携してVM16を停止させてもよく、すなわち、Appプロセス22、Appプロセス24、およびゲストOS20を停止させてもよい。異常対応部56は、異常スコアが高い場合、すなわち、深刻な異常である場合、VM16を停止させてもよい。例えば、異常スコアが第1閾値未満の場合、Appプロセス22を再起動+通知なし、異常スコアが第1閾値以上かつ第2閾値未満の場合、Appプロセス22を停止+通知有り、異常スコアが第2閾値以上の場合、VM16を停止+通知有り、であってもよい。また、異常対応部56は、第4変形例に記載したように、ハッシュ値の不一致によりゲストOS20のOSプログラムが書き換えられたことが検出された場合、深刻な異常として、異常スコアにかかわらず、VM16を停止させてもよい。
【0076】
なお、第1変形例との組み合わせる場合、異常対応部96は、HV14の異常への対応処理として、HV14を停止させてもよい。例えば、異常対応部96は、異常スコアが低い場合にAppプロセス22の再起動させ、異常スコアが中程度の場合にAppプロセス22を停止させ、異常スコアが高い場合にVM16を停止させ、異常スコアが極めて高い場合にHV14を停止させてもよい。
【0077】
上述した実施例および変形例の任意の組み合わせもまた本開示の実施の形態として有用である。組み合わせによって生じる新たな実施の形態は、組み合わされる実施例および変形例それぞれの効果をあわせもつ。また、請求項に記載の各構成要件が果たすべき機能は、実施例および変形例において示された各構成要素の単体もしくはそれらの連携によって実現されることも当業者には理解されるところである。
【0078】
実施例および変形例に記載の技術は、以下の項目によって特定されてもよい。
[項目1]
HV(HyperVisor)上で第1のVM(Virtual Machine)と第2のVMとが動作する情報処理装置であって、
前記第1のVMは、
前記第1のVMにおける処理の異常を検知する検知部と、
前記検知部により異常が検知された場合、その異常に関する情報を、前記HVを介して前記第2のVMへ通知する通知部と、を備え、
前記第2のVMは、
前記第1のVMから通知された異常に関する情報をもとに、その異常に応じた対応処理を実行する対応部を備える、
情報処理装置。
この情報処理装置によると、異常を検知するVMと、その異常への対応処理を実行するVMとを分離することにより、異常への対応処理を実行する機能が攻撃対象となることを回避し、異常への対応処理を安定して実行することができる。
[項目2]
前記検知部と前記通知部は、前記第1のVMで動作するOS(Operating System)に設けられ、
前記検知部は、前記OSの処理の異常を検知し、
前記対応部は、前記第1のVMから取得した、前記OSの処理の異常に関する情報をもとに、その異常に応じた対応処理を実行する、
項目1に記載の情報処理装置。
この情報処理装置によると、第1のVM上のOSが攻撃された場合に、そのOSの処理の異常への対応処理を安定して実行することができる。
[項目3]
前記対応部は、前記OSの処理の異常に関する情報をもとに異常の度合を導出し、前記異常の度合が所定の閾値未満であれば、前記OSの処理を要求したアプリケーションのプロセスを再起動させ、前記異常の度合が所定の閾値以上であれば、アプリケーションのプロセスを停止させる、
項目2に記載の情報処理装置。
この情報処理装置によると、異常の度合いに応じて、自装置の安全性を確保することができる。
[項目4]
前記対応部は、前記第1のVMから通知された異常に関する情報をもとに異常の度合を導出し、前記異常の度合が所定の閾値以上であれば、前記異常に関するデータを外部装置へ送信し、前記異常の度合が前記閾値未満であれば、前記異常に関するデータを外部装置へ送信しない、
項目1から3のいずれかに記載の情報処理装置。
この情報処理装置によると、外部装置へ送信するデータ量を削減し、言い換えれば、外部装置への過度なデータ送信を抑制することができる。
[項目5]
前記検知部は、異常検知の方法が互いに異なる第1検知部と第2検知部とを含み、
前記第2検知部は、前記第1検知部による異常検知処理の後に異常検知処理を実行し、
前記対応部は、前記第2検知部により異常が検知されたが、前記第1検知部により異常が未検知の場合、異常の度合を大きくする、
項目3または4に記載の情報処理装置。
この情報処理装置によると、第1検知部による異常検知を回避する攻撃を受けた場合に異常の度合を大きくすることで、攻撃の種類に応じた適切な対応処理を実行することができる。
[項目6]
セキュアモニタ上でHVとセキュアOSとが動作し、前記HV上で1つ以上のVMが動作する情報処理装置であって、
前記HVは、
前記HVにおける処理の異常を検知する検知部と、
前記検知部により異常が検知された場合、その異常に関する情報を、前記セキュアモニタを介して前記セキュアOSへ通知する通知部と、を備え、
前記セキュアOSは、
前記HVから通知された異常に関する情報をもとに、その異常に応じた対応処理を実行する対応部を備える、
情報処理装置。
この情報処理装置によると、異常を検知する主体と、その異常への対応処理を実行する主体とを分離する(前者はHV、後者はセキュアOS)ことにより、異常への対応処理を実行する機能が攻撃対象となることを回避し、異常への対応処理を安定して実行することができる。
[項目7]
HV上で第1のVMと第2のVMとが動作するコンピュータが実行する情報処理方法であって、
前記第1のVMが、前記第1のVMにおける処理の異常を検知し、異常を検知した場合、その異常に関する情報を、前記HVを介して前記第2のVMへ通知し、
前記第2のVMが、前記第1のVMから通知された異常に関する情報をもとに、その異常に応じた対応処理を実行する、
情報処理方法。
この情報処理方法によると、異常を検知するVMと、その異常への対応処理を実行するVMとを分離することにより、異常への対応処理を実行する機能が攻撃対象となることを回避し、異常への対応処理を安定して実行することができる。
[項目8]
セキュアモニタ上でHVとセキュアOSとが動作し、前記HV上で1つ以上のVMが動作するコンピュータが実行する情報処理方法であって、
前記HVが、前記HVにおける処理の異常を検知し、異常を検知した場合、その異常に関する情報を、前記セキュアモニタを介して前記セキュアOSへ通知し、
前記セキュアOSが、前記HVから通知された異常に関する情報をもとに、その異常に応じた対応処理を実行する、
情報処理方法。
この情報処理方法によると、異常を検知する主体と、その異常への対応処理を実行する主体とを分離する(前者はHV、後者はセキュアOS)ことにより、異常への対応処理を実行する機能が攻撃対象となることを回避し、異常への対応処理を安定して実行することができる。
【産業上の利用可能性】
【0079】
本開示の技術は、情報処理装置に適用することができる。
【符号の説明】
【0080】
10 車両、 12 ECU、 14 HV、 16 VM、 18 VM、 32 異常通知部、 36 第1検知部、 38 第2検知部、 54 異常分析部、 56 異常対応部、 70 セキュアモニタ、 72 セキュアOS、 82 第1検知部、 84 第2検知部、 94 異常分析部、 96 異常対応部。