図1は、実施の形態による車載制御装置の構成の一例を示す図である。図1の一例においては、上位の電子制御装置であるECU1と、下位の電子制御装置であるECU2とが、通信線6を介して接続されていることにより、車両に搭載される車両システムが構成されている。ECU1及びECU2は、通信線6を介して互いに連係して各種制御を実行する。なお、通信線6には、例えば、ワイヤーハーネスが用いられている。
ここで、ECUは、Electronic Control Unitを意味する電子制御装置の総称である。ECU1及びECU2は、車載電装品を制御する。
具体的には、ECU1には、車載電装品として、カメラ3、レーダー4及びディスプレイ5が接続されている。ECU1は、カメラ3及びレーダー4の検知結果に基づいて、ディスプレイ5に各種画像を表示させる。
カメラ3は、例えば、フロントガラスの車室側のうちバックミラーの隣に取り付けられている。カメラ3には、例えば、単眼カメラが用いられている。単眼カメラは、撮像素子を有している。撮像素子は、例えば、CCDイメージセンサ又はCMOSイメージセンサである。CCDは、Charge Coupled Deviceの略称である。CMOSは、Complementary Metal Oxide Semiconductorの略称である。単眼カメラは、撮像素子の撮像方向に対して直交する2次元空間における画素レベルを最小単位として連続的に物体の有無を検出可能である。
レーダー4は、例えば、車両におけるフロントバンパー及びリアバンパーのそれぞれに取り付けられている。レーダー4には、例えば、ミリ波レーダーが用いられている。ミリ波レーダーは、1つの送信アンテナと、複数の受信アンテナとを有している。ミリ波レーダーは、物体との距離及び相対速度を測定可能である。
ディスプレイ5は、例えば、フロントガラスの下部の領域にあるダッシュボードに取り付けられている。ディスプレイ5には、例えば、タッチパネル付き液晶ディスプレイが用いられている。
ECU1は、SoC10、二次記憶装置12及びRAM13を備えている。
SoCは、System−on−a−Chipの略称である。RAMは、Random Access Memoryの略称である。
SoC10は、ECU1において制御部として機能する。SoC10は、入出力インターフェース101、CPU102、メモリインターフェース103、HSM104、ROM105、タイマ106及び通信インターフェース107を備えている。
CPUは、Central Processing Unitの略称である。HSMは、Hardware Security Moduleの略称である。ROMは、Read Only Memoryの略称である。
入出力インターフェース101は、カメラ3及びレーダー4のそれぞれからの入力データをSoC10に入力する入力インターフェースとして機能する。入出力インターフェース101は、カメラ3及びレーダー4に制御信号を出力する。入出力インターフェース101は、カメラ3から入力データとして画像データの入力を受け付ける。入出力インターフェース101は、レーダー4から入力データとして障害物データの入力を受け付ける。
また、入出力インターフェース101は、SoC10からの出力データをディスプレイ5に出力する出力インターフェースとして機能する。入出力インターフェース101は、ディスプレイ5に出力データとして映像データを出力する。これにより、ディスプレイ5は、映像データに基づいた画像を表示することができる。
なお、図示は省略するが、SoC10は、DMAを備えている。DMAは、Direct Memory Accessの略称である。入出力インターフェース101は、DMAの機能を利用することにより、CPU102を介さずに、入力データをRAM13に転送することができる。同様に、入出力インターフェース101は、DMAの機能を利用することにより、CPU102を介さずに、出力データをRAM13から転送することができる。これにより、転送処理を効率化することができる。
CPU102は、コアを有している。CPU102は、コアにより各種演算を実行する。CPU102は、実行した演算結果に基づいて、車載電装品を制御する機能を有している。
具体的には、CPU102は、SoC10に電源が投入された場合、動作を開始する機能を有している。CPU102は、ROM105に書き込まれた各種プログラムの実行を開始する機能を有している。CPU102は、メモリインターフェース103を介して、二次記憶装置12に記憶されているものをRAM13に転送することにより、車載電装品を制御する機能を有している。
なお、CPU102は、シングルコアから構成されているだけでなく、マルチコアから構成されていてもよい。また、CPU102は、通常実行されているプログラムとは別に適宜別のプログラムによる割り込み処理をすることができる。
メモリインターフェース103は、二次記憶装置12とSoC10との間における各種データの送受信と、RAM13とSoC10との間における各種データの送受信とを行うインターフェースである。
具体的には、メモリインターフェース103は、CPU102又はDMAからのデータアクセス要求に応じて、二次記憶装置12及びRAM13のそれぞれに適したコマンドを発行する。これにより、メモリインターフェース103は、二次記憶装置12及びRAM13のそれぞれに記憶されている各種データにアクセス可能である。
HSM104は、セキュリティの強度を高めるために、秘密鍵を外部に漏洩しないように記憶している。HSM104は、データの暗号化及び復号、メッセージ認証コードの生成及び検証、デジタル署名の検証等を行う機能を有している。これらの機能は、CPU102からHSM104にアクセスすることで利用される。
なお、HSM104には、秘密鍵が既に書き込まれている。また、HSM104は、メッセージ認証コードの生成及び検証並びにデジタル署名の検証が可能な状態に設定されている。
ROM105には、SoC10に電源が投入されてからCPU102が動作を開始するときに最初に実行するプログラムが記憶されている。ROM105には、IPLと呼ばれるプログラムが記憶されている。IPLは、Initial Program Loaderの略称である。
タイマ106は、発振回路から出力されるクロック信号をカウントする。発振回路は、例えば、水晶発振器又はセラミック振動子である。タイマ106は、CPU102の要求に応じて、クロック信号に基づいた各種タイミング信号を生成する。
通信インターフェース107は、他の機器と、SoC10との間における通信を実現するインターフェースである。通信インターフェース107は、CAN、CAN FD、FlexRay、Ethernet(登録商標)等の各種通信規格に準拠している。これにより、通信インターフェース107は、通信線6を介して他の機器との通信を実現する。ここで、図1の一例では、通信媒体として有線の通信線6の一例について説明したが、通信媒体は、無線であってもよい。
なお、CANは、Controller Area Networkの略称である。また、CAN FDは、CAN with Flexible Data−Rateの略称である。
二次記憶装置12は、不揮発性の記憶装置である。二次記憶装置12は、例えば、NAND型のフラッシュメモリが用いられている。
二次記憶装置12は、例えば、HDD又はNOR型のフラッシュメモリが用いられてもよい。
なお、HDDは、Hard Disc Driveの略称である。
RAM13は、揮発性の記憶装置である。RAM13は、主記憶装置又はメインメモリとして機能する。
また、ECU2には、車載電装品として、モータ7が接続されている。ECU2は、モータ7に設けられているセンサ8の検知信号に基づいて、モータ7の駆動を制御する。
ECU2は、マイコン20、入力回路22及び駆動回路23を備えている。
マイコンは、マイクロコントローラユニット又はマイクロコンピュータの略称である。マイコン20は、ECU2において制御部として機能する。マイコン20は、CPU201、RAM202、ROM203、入出力インターフェース204、通信インターフェース205及びタイマ206を備えている。
CPU201は、CPU102と同様の機能を有している。従って、その詳細な説明は省略される。
RAM202は、RAM13と同様の機能を有している。従って、その詳細な説明は省略される。
ROM203は、ROM105と同様の機能を有している。従って、その詳細な説明は省略される。
入出力インターフェース204は、入力回路22とマイコン20との間における入力インターフェースとして機能する。例えば、入出力インターフェース204は、アナログ信号をデジタル信号に変換し、変換したデジタル信号をマイコン20に取り込む。
また、入出力インターフェース204は、マイコン20と駆動回路23との間における出力インターフェースとして機能する。例えば、入出力インターフェース204は、デジタル信号をアナログ信号に変換し、変換したアナログ信号を駆動回路23に出力する。
通信インターフェース205は、他の機器と、マイコン20との間における通信を実現するインターフェースである。通信インターフェース205は、通信インターフェース107と同じ通信規格に準拠している。これにより、通信インターフェース205は、通信線6を介して、ECU1とECU2との通信を実現する。
タイマ206は、タイマ106と同様の機能を有している。従って、その詳細な説明は省略される。
入力回路22は、センサ8の検知信号を電圧として読み取る。入力回路22は、読み取った電圧をマイコン20内で処理可能な電圧値に変換する。入力回路22は、変換した電圧値をマイコン20に供給する。
駆動回路23は、マイコン20からの制御指令に基づいて、モータ駆動信号を生成する。駆動回路23は、モータ駆動信号をモータ7に供給する。
なお、駆動回路23の制御対象は、モータ7に限定されない。例えば、駆動回路23の制御対象は、LEDのような光源であってもよい。LEDは、Light Emitting Diodeの略称である。駆動回路23は、マイコン20からの制御指令に基づいて、LEDの照度を制御してもよい。
なお、ECU1は、本開示における車載制御装置に相当する。
また、カメラ3、レーダー4及びディスプレイ5は、本開示における電装品に相当する。
図2は、図1の二次記憶装置12に記憶されている各種プログラムの階層例を示す図である。上位制御プログラム121は、複数のプログラムを含んでいる。各プログラムは、複数の処理を含んでいる。各処理は、複数の処理部分を含んでいる。
上位制御プログラム121は、電装品に関するプログラム、車両制御に関するプログラム、ECU2に関するプログラム、各種プログラムを監視するプログラム等を含んでいる。上位制御プログラム121の下層にはOS122が存在している。
OSは、Operating Systemの略称である。
電装品に関するプログラムは、電装品毎に異なっている。
電装品としてのカメラ3に関するプログラムは、カメラデータ取得プログラム121B、画像変換プログラム121C、画像認識プログラム121D及び画像状況判定プログラム121Eを含む。
カメラデータ取得プログラム121Bは、カメラ3に固有の方式でカメラ3にアクセスし、カメラ3により撮像された画像データを取得するプログラムである。
画像変換プログラム121Cは、カメラデータ取得プログラム121Bにより取得された画像データを適した形式に変換するプログラムである。適した形式への変換は、対象を認識するために実行される。対象は、人、障害物等である。
画像認識プログラム121Dは、画像変換プログラム121Cにより変換したデータから、対象の種類、対象までの距離等を認識するプログラムである。
画像状況判定プログラム121Eは、画像認識プログラム121Dにより認識された対象の種類、対象までの距離等から最も優先すべき対処を判定するプログラムである。
電装品としてのレーダー4に関するプログラムは、レーダーデータ取得プログラム121J、レーダーデータ変換プログラム121K、レーダーデータ認識プログラム121L及びレーダー状況判定プログラム121Mを含む。
レーダーデータ取得プログラム121Jは、レーダー4に固有の方式でレーダー4にアクセスし、レーダー4により検知された検知結果を取得するプログラムである。
レーダーデータ変換プログラム121Kは、レーダーデータ取得プログラム121Jにより取得されたレーダー4の検知結果を適した形式に変換するプログラムである。適した形式への変換は、上記で説明したように、対象を認識するために実行される。
レーダーデータ認識プログラム121Lは、レーダーデータ変換プログラム121Kにより変換されたデータから、対象の種類、対象までの距離等を認識するプログラムである。
レーダー状況判定プログラム121Mは、レーダーデータ認識プログラム121Lにより認識された対象の種類、対象までの距離等から最も優先すべき対処を判定するプログラムである。
電装品としてのディスプレイ5に関するプログラムは、ディスプレイ表示プログラム121Nを含む。ディスプレイ表示プログラム121Nは、電装品に関するプログラム、車両制御に関するプログラム、ECU2に関するプログラム、各種プログラムを監視するプログラム等の実行結果に基づいた画像をディスプレイ5に表示させるプログラムである。
車両制御に関するプログラムは、総合状況判定プログラム121F及び通信プログラム121Hを含む。ここで、通信プログラム121Hは、通信線6を介して、車速、車両位置、車両挙動等を取得するプログラムである。車速は、例えば、車軸の回転数を計測するセンサから取得される。車両位置は、例えば、GPSから取得される。車両挙動は、例えば、操舵角を計測するセンサから取得される。
具体的には、総合状況判定プログラム121Fは、画像状況判定プログラム121Eの判定結果と、レーダー状況判定プログラム121Mの判定結果と、通信プログラム121Hの実行結果と、に基づいて、最も優先すべき対処を判定するプログラムである。
ECU2に関するプログラムは、下位制御指示プログラム121Gを含む。
下位制御指示プログラム121Gは、総合状況判定プログラム121Fの判定結果に基づいて、ECU2を制御するための具体的な下位制御指示値を算出するプログラムである。
各種プログラムを監視するプログラムは、起動監視プログラム121Yを含む。起動監視プログラム121Yは、上位制御プログラム121に含まれる起動プログラムリスト121Zと連動して実行される。
具体的には、起動監視プログラム121Yは、電装品に関するプログラム、車両制御に関するプログラム及びECU2に関するプログラムのそれぞれの実行を開始させるプログラムである。また、起動監視プログラム121Yは、これらのプログラムを必要に応じて監視するプログラムである。
起動プログラムリスト121Zは、記憶場所121ZAと、デジタル署名領域121ZBとを含んでいる。
記憶場所121ZAには、電装品に関するプログラム、車両制御に関するプログラム及びECU2に関するプログラムのそれぞれの二次記憶装置12における記憶領域が設定されている。具体的には、例えば、二次記憶装置12において、電装品に関するプログラムによって占有される記憶領域が設定されている。
なお、電装品としてカメラ3が車両に搭載されていない場合には、カメラデータ取得プログラム121B、画像変換プログラム121C、画像認識プログラム121D及び画像状況判定プログラム121Eの記憶領域は、記憶場所121ZAには設定されていない。
また、電装品としてカメラ3及びレーダー4が複数組車両に搭載されている場合には、その分の記憶領域が記憶場所121ZAに設定されている。
デジタル署名領域121ZBには、起動プログラムリスト121Zが不正に改ざんされたことを検出可能とするためにデジタル署名が付加されている。
OS122は、API1221、カーネル1222及びカーネルモジュール1223を含んでいる。
APIは、Application Programming Interfaceの略称である。
OS122は、オペレーティングシステムである。API1221は、アプリケーションプログラミングインターフェースである。API1221は、システムコール1221A及びライブラリ1221Bを含む。
システムコール1221Aは、プログラムに対し、カーネル1222の機能を提供するインターフェースである。従って、システムコール1221Aは、カーネル1222の機能を呼び出すことができる。システムコール1221Aは、read、write、open、fork等である。このうち、forkは、新しいプロセスを立ち上げる機能を有している。従って、起動監視プログラム121Yがプロセスを起動させるには、forkが使用される。
なお、詳細についての説明は省略するが、ライブラリ1221Bは、よく使われる共通のサブルーチンである。
カーネル1222は、ハードウェア資源を管理する機能を有している。ハードウェア資源は、入出力インターフェース101、CPU102、メモリインターフェース103、HSM104、ROM105、タイマ106及び通信インターフェース107である。従って、ハードウェア資源は、OS122の管理下にある。
例えば、カーネル1222は、入出力インターフェース101を管理する。従って、各種プログラムによりシステムコール1221Aが呼び出されれば、システムコール1221Aを介してカーネル1222の機能を呼び出すことができる。例えば、カメラデータ取得プログラム121Bは、システムコール1221Aを呼び出すように実装されている。これにより、カメラデータ取得プログラム121Bは、入出力インターフェース101を管理できる。この結果、カメラデータ取得プログラム121Bは、カメラ3により撮像された画像データを取得することができる。
カーネルモジュール1223は、カーネル1222の機能を拡張するためのバイナリファイルである。
上位制御プログラム121は、SoC10に電源が投入された後、起動される。
具体的には、二次記憶装置12に記憶されている上位制御プログラム121のうち、OS122が、ROM105に記憶されているIPLによってRAM13に転送される。これにより、OS122の起動が開始される。これにより、RAM13の記憶領域は、OS122に管理される。
OS122が起動された後、電装品に関するプログラム、車両制御に関するプログラム、ECU2に関するプログラム及び各種プログラムを監視するプログラムが二次記憶装置12からOS122が管理するRAM13の記憶領域に転送される。
これにより、OS122の管理下のプロセスとして、電装品に関するプログラム、車両制御に関するプログラム、ECU2に関するプログラム及び各種プログラムを監視するプログラムの実行が開始される。なお、起動プログラムリスト121Zは、起動監視プログラム121Yがプロセスとして実行中にRAM13に読み出される。
即ち、プロセスは、プログラムの実行状態である。具体的には、プロセスとは、プログラムがOS122によってRAM13に読み込まれ、OS122の管理下にあるCPU102の実行単位である。なお、OS122にとっては、プロセスとはRAM13等のようなメモリの管理単位である。
なお、電装品に関するプログラム、車両制御に関するプログラム、ECU2に関するプログラム及び各種プログラムを監視するプログラムの起動の順序は、ECU1に要求される内容によって異なる。従って、車両制御に関するプログラム、ECU2に関するプログラム及び各種プログラムを監視するプログラムの起動の順序は、任意である。
そこで、ここでは、実現の容易さから、OS122の起動後、まず、起動監視プログラム121Yの実行を開始するようにOS122は設定されている。次に、起動監視プログラム121Yの実行可能な状態であるプロセスが、電装品に関するプログラム、車両制御に関するプログラム及びECU2に関するプログラムのそれぞれのプロセスの実行を開始させる。なお、起動監視プログラム121Yの実行可能な状態であるプロセスが、電装品に関するプログラム、車両制御に関するプログラム及びECU2に関するプログラムのそれぞれのプロセスを起動させる順序も任意である。
ここで、OS122の管理下にあるRAM13は、本開示における共有メモリに相当する。
図3は、図2の上位制御プログラム121が上位のECU1に設けられたRAM13に転送されて上位制御プロセス140として存在している状態の一例を示す図である。図3に示すように、上位制御プロセス140は、共通処理141と、特有処理142とを有している。
共通処理141は、起動初期化処理141A、主処理141B、内部監視処理141C、安全確保処理141D、プロセス間通信処理141E及びECU間通信処理141Fを含んでいる。
共通処理141は、上位制御プログラム121に含まれる各プログラムに共通する処理である。
従って、カメラデータ取得プログラム121B、画像変換プログラム121C、画像認識プログラム121D及び画像状況判定プログラム121Eのそれぞれのプロセスは、共通処理141から構成されている。
また、総合状況判定プログラム121F、下位制御指示プログラム121G、ディスプレイ表示プログラム121N及び通信プログラム121Hのそれぞれのプロセスも同様に共通処理141から構成されている。
また、レーダーデータ取得プログラム121J、レーダーデータ変換プログラム121K、レーダーデータ認識プログラム121L及びレーダー状況判定プログラム121Mのそれぞれのプロセスも同様に共通処理141から構成されている。
一方、起動監視プログラム121Yの実行可能な状態であるプロセスは、共通処理141に加え、特有処理142を含んでいる。
特有処理142は、上位制御プログラム121のうち起動監視プログラム121Yに特有の処理である。特有処理142は、システムコールテーブル監視処理142H、システムコール監視処理142I及びシステムコールテーブル書き換え処理142Jを含んでいる。また、特有処理142は、起動処理リスト142K、プロセスID記憶配列142L、旧システムコールテーブル記憶配列142P及びシステムコール回数記憶配列142Rを含んでいる。
即ち、起動監視プログラム121Yの実行可能な状態であるプロセスは、共通処理141と、特有処理142とから構成されている。
なお、電装品に関するプログラム、車両制御に関するプログラム、ECU2に関するプログラム及び各種プログラムを監視するプログラムは、二次記憶装置12からOS122が管理するRAM13の記憶領域に転送される。これにより、上位制御プロセス140としてCPU102による実行が開始される。
起動初期化処理141Aは、電装品に関するプログラム、車両制御に関するプログラム、ECU2に関するプログラム及び各種プログラムを監視するプログラムのそれぞれの起動及び初期化を行うプロセスである。
例えば、カメラデータ取得プログラム121Bの起動及び初期化を行うプロセスは、カメラ3から画像データを取得できるようにカメラ3の設定を行い、カメラ3とSoC10との間において画像データを通信するための設定を行うプロセスである。
主処理141Bは、電装品に関するプログラム、車両制御に関するプログラム、ECU2に関するプログラム及び各種プログラムを監視するプログラムのそれぞれを実行するプロセスである。
内部監視処理141Cは、電装品に関するプログラム、車両制御に関するプログラム及びECU2に関するプログラムのそれぞれが個別に実行することによって、プログラムが仕様通りに実行されているか否かを監視する監視プロセスである。
例えば、内部監視処理141Cは、予め設定された許容周期内において、画像変換プログラム121Cの主処理141Bにおける特定の処理部分の実行を開始させる。この結果、内部監視処理141Cは、予め設定された許容時間内に主処理141Bにおける特定の処理部分の実行が完了したか否かを判定する。また、内部監視処理141Cは、画像変換プログラム121Cの主処理141Bにおける特定の処理部分の実行順序が画像変換プログラム121Cの仕様通りに入れ替わることなく全て実行されたか否かを判定する。また、内部監視処理141Cは、画像変換プログラム121Cの特定の命令群における引数及び戻り値が正常な範囲内か否かを判定する。
即ち、内部監視処理141Cは、予め設定された許容周期内にプログラムに含まれる複数の処理部分が呼び出され、複数の処理部分の実行順序がプログラムの仕様通りであるか否かを判定する。また、内部監視処理141Cは、プロセスのうち複数の処理部分を監視する監視プロセスである。従って、内部監視結果として、監視プロセスの戻り値がエラー値以外である場合には、内部監視結果は正常である。内部監視結果が正常であれば、CPU102によってそのプログラムに悪意がないと判定される。
安全確保処理141Dは、内部監視処理141Cによってプログラムの異常が検出された場合、車両を安全に稼働させるプロセスである。安全確保処理141Dは、許容時間内に実行される。
ここで、プログラムの異常が発生する要因には、あるプログラムの実行を意図的に妨害するプログラムの存在が想定される。あるプログラムの実行を意図的に妨害するプログラムは、本実施の形態においては悪意のあるプログラムと称する。意図的な妨害とは、例えば、RAM13に確保されたバッファをオーバーフローさせ、CPU102が後に実行するプログラムを部分的に書き換え、本来意図した処理と異なる処理を実行させる処理である。ここで、バッファは、スタック、配列等である。本来意図した処理とは異なる処理は、例えば、無限ループである。
具体的には、要求仕様通りに実装されているプログラムには、特定の条件次第では弱点が含まれることになる。例えば、プログラムに含まれる特定の処理が不必要に繰り返される場合、CPU102の負荷が高い場合、又はRAM13のメモリ領域が不足している場合には、プログラムは、要求仕様とは異なる結果を生じさせることがある。
そこで、車両システムの攻撃を検討している攻撃者によって、プログラムに含まれる弱点を見つけ出し、そのプログラムの実行状態であるプロセスに特定のコードを埋め込むことが検討されることがある。
そのような攻撃者によって利用される代表的な処理は、上記で説明したように、RAM13に確保されたスタック、配列等を構成するバッファをオーバーフローさせる処理である。バッファがオーバーフローさせられた場合、本来の処理で参照される変数及び処理の分岐先のアドレス等が確保されているメモリ領域が参照される。従って、本来の処理で参照される変数及び処理の分岐先のアドレス等が異なる値に書き換えられる。
この結果、正常なプログラムの処理が攻撃者の意図した処理に変更される。攻撃者の意図した処理のうち、比較的容易に実現でき、且つ脅威となる処理は、無限ループの処理である。無限ループの処理は、1命令程度の処理を車両システムに侵入させ、実行させることで正常なプログラムの処理の実行を完全に停止させることができる。
攻撃者の意図した処理は、車両システム内における通信を妨害する処理であってもよい。車両システム内における通信を妨害する処理によって正常なプログラムの処理の実行効率は著しく低下させられる。
即ち、RAM13のメモリ領域のうち、通常の範囲から逸脱した領域に特定の値が書き込まれることにより、バッファのオーバーフローが発生する。バッファのオーバーフローが利用されることにより攻撃者は悪意のあるプログラムを車両システムに侵入させる。この結果、プログラムの妨害処理が実行されるので、処理対象のプログラムの実行状態であるプロセスは、本来の処理を実行せずに単に無限ループを実行するだけの状態に陥る。
また、上記で説明したように、車両システム内における通信を妨害する処理であれば、処理対象のプログラムの実行状態であるプロセスは、本来は不要なプロセス間通信を大量に発生させることにより、別のプロセスの処理を滞らせる。
従って、最も深刻な状態であれば、CPU102は、上位制御プログラム121を実行することができない。この結果、内部監視処理141C及び安全確保処理141Dも実行不可能になることが想定される。このため、安全確保処理141Dは、同時に実行されている上位制御プログラム121のうち、異常が発生したプログラム以外のプログラムが実行を代行可能なように作成される。
例えば、安全確保処理141Dは、配置されるアドレスに依存せずに実行可能なPICで作成される。PICは、Place Independent Codeの略称である。アドレスに依存しない安全確保処理141Dは、別プロセスからアクセス可能なようにRAM13の共有メモリ領域に配置される。
なお、CPU102は、異常時に実行する安全確保処理141Dを二次記憶装置12における上位制御プログラム121が記憶されている領域とは異なる領域に実行可能ファイルとして記憶させてもよい。具体的には、安全確保処理141Dには、上位制御プログラム121における安全確保処理141Dの実行可能ファイルの開始アドレスが記憶される。即ち、実体のない安全確保処理141Dから実体のある安全確保処理141Dが呼び出されるようにしてもよい。
このように、安全確保処理141Dは、他のプログラムに相当するプロセスからも参照可能に構成する必要がある。このため、悪意のあるプログラムによって、改ざんされることにより、安全確保処理141D自体が悪意のあるプログラムとして作成され、記憶される可能性がある。
そこで、安全確保処理141Dには、デジタル署名が予め付与される。これにより、CPU102は、安全確保処理141Dの内容が正しい提供元のものであることを確認することができる。
また、安全確保処理141Dの実行中に安全確保処理141Dの内容が変化する場合、CPU102は、安全確保処理141Dの内容を変更したときにHSM104によってメッセージ認証コードを計算し、付与しておく。これにより、CPU102は、安全確保処理141Dの内容が改ざんされたか否かを確認することができる。即ち、CPU102は、安全確保処理141Dの内容が正当なものであるか否かを確認することができる。
プロセス間通信処理141Eは、主処理141Bを実行する上で、他のプロセスと連係をとるために必要な情報を交換するプロセスである。これにより、プロセス間通信処理141Eは、内部監視処理141Cの実行結果を他のプロセスに提供することができる。
ECU間通信処理141Fは、上位制御プログラム121の通信プログラム121Hのプロセスにアクセスするプロセスである。これにより、主処理141Bを実行する上で、ECU2と連係をとるために必要な情報が交換される。この結果、ECU間通信処理141Fは、内部監視処理141Cの実行結果をECU2に提供することができる。
システムコールテーブル監視処理142Hは、システムコール1221Aの開始アドレスが登録されたシステムコールテーブルに不正な変更があるか否かを起動監視プログラム121Yのプロセスによって監視するプロセスである。
システムコール監視処理142Iは、システムコール1221Aの代わりに呼び出され、システムコール1221Aの呼び出し元のプロセス、呼び出し頻度、呼び出し回数等を起動監視プログラム121Yのプロセスによって監視するプロセスである。システムコール監視処理142Iは、監視を行った後、システムコール1221Aの呼び出し元のプロセスがシステムコール1221Aを開始する。
システムコールテーブル書き換え処理142Jは、システムコール1221Aの開始アドレスをシステムコール監視処理142Iの先頭アドレスに変更するプロセスである。これにより、プロセスによってシステムコール1221Aが呼び出される度に、システムコール1221Aが呼び出される代わりに、システムコール監視処理142Iが開始される。この結果、システムコール1221A毎に監視を行うことができる。
起動処理リスト142Kは、二次記憶装置12に記憶されている起動プログラムリスト121Zの内容をRAM13に読み出すための領域である。これにより、起動監視プログラム121YがRAM13に転送され、プロセスとして実行が開始されたとき、上位制御プログラム121が必要な情報を効率良く参照できる。
プロセスID記憶配列142Lは、起動監視プログラム121Yによって起動されたプログラムのプロセスに固有に割り付けられることにより各プロセスを識別するための識別子であるプロセスIDを記憶するための領域である。プロセスID記憶配列142Lには、起動監視プログラム121Yによって上位制御プログラム121に含まれる画像変換プログラム121C等のプログラムが起動される度に、プログラムのプロセスに対応するプロセスIDが逐次記憶される。
旧システムコールテーブル記憶配列142Pは、システムコールテーブル書き換え処理142Jによってシステムコールテーブルが書き換えられる前のシステムコールテーブルを保存するための領域である。
具体的には、システムコールテーブルの各要素には、システムコール1221Aの開始アドレスが記憶されている。従って、旧システムコールテーブル記憶配列142Pには、システムコール1221Aの開始アドレスが記憶される。これにより、システムコール監視処理142Iによる監視終了後、旧システムコールテーブル記憶配列142Pに記憶されているシステムコール1221Aの開始アドレスを呼び出すことができる。この結果、本来のシステムコール1221Aを呼び出すことができる。
システムコール回数記憶配列142Rは、上位制御プログラム121に含まれるプログラム毎に、システムコール1221Aの呼び出し回数を記憶するための領域である。システムコール監視処理142Iが呼び出される度に、呼び出し元のプロセスのプロセスIDが取得される。従って、システムコール回数記憶配列142Rには、プロセスIDと、累積した呼び出し回数とが記憶される。
ここで、プロセスIDによってプロセスは特定される。プロセスが特定されればプログラムも特定される。また、特定したプロセスが呼び出したシステムコール1221Aの累積呼び出し回数は、システムコール回数記憶配列142Rにより参照可能である。悪意のあるプログラムは無限ループを実行しているため、システムコール1221Aの累積呼び出し回数は許容回数の範囲内にない。これにより、プログラムが悪意のあるプログラムであるか否かを判定することができる。
なお、システムコールテーブル監視処理142H、システムコール監視処理142I及びシステムコールテーブル書き換え処理142Jは、システムコールテーブル及びシステムコール1221Aに変更及び追加の処理を行う。旧システムコールテーブル記憶配列142P及びシステムコール回数記憶配列142Rも同様に、システムコールテーブル及びシステムコール1221Aに変更及び追加の処理が伴う。しかし、OS122の管理下で実行される通常の実行権限のプロセスでは、システムコールテーブル及びシステムコール1221Aに変更及び追加の処理を行うことができないことがある。
例えば、システムコールテーブル書き換え処理142Jは、OS122が起動しているとき、システムコールテーブルを初期化した直後にOS122の初期化処理の一部としての実行が必要な場合がある。このような場合が想定される場合には、システムコールテーブル監視処理142H及びシステムコール監視処理142Iは、OS122の拡張機能、即ち、カーネルモジュール1223として実装される。
図4は、図3の上位制御プロセス140に関するプログラム監視状態132の一例を示す図である。RAM13には、異常検知プロセスID記憶配列131及びプログラム監視状態132の領域が確保される。
異常検知プロセスID記憶配列131は、FIFOのキューから構成されている。FIFOは、First−In First−Outの略称である。異常検知プロセスID記憶配列131は、悪意のあるプログラムのプロセスとして異常が検知されたプロセスのプロセスIDが記憶される。なお、上記キューの深さは、起動監視プログラム121Yによって起動処理リスト142Kが参照されることにより求められる。
プログラム監視状態132は、プロセスID毎にプログラムの監視状態が記憶される。なお、プログラム監視状態132の領域は、起動監視プログラム121Yによりプロセスの実行を開始させる前に確保させる。
プログラム監視状態132には、フラグ領域132A、許容回数領域132B、監視周期領域132C、許容周期領域132D及び異常要因対処テーブル132Eが含まれている。また、プログラム監視状態132には、タイムスタンプ領域132P、内部監視結果領域132Q、安全確保代行領域132R、安全確保処理状態132S及び認証領域132Zが含まれている。
フラグ領域132Aは、各プログラムが起動監視プログラム121Yによる監視を必要としているか否かを2値で起動監視プログラム121Yに提供するための領域である。2値としては、例えば、監視が必要な場合にはTRUEが設定され、監視が不要な場合にはFALSEが設定される。
許容回数領域132Bは、プログラムの実行状態であるプロセスが呼び出すシステムコール1221Aの回数における許容回数の範囲を提供するための領域である。システムコール1221Aの回数における許容回数の範囲は、許容下限回数と、許容上限回数との2つの値で定められている。
例えば、システムコール1221Aの回数が許容回数の範囲外であることを起動監視プログラム121Yが検出した場合、CPU102は、そのプロセスに異常が発生したと判定する。これにより、そのプロセスに対応するプログラムには悪意があると判定される。
なお、一度も呼び出されないシステムコール1221Aの許容下限回数及び許容上限回数はゼロに設定される。
監視周期領域132Cは、プログラムの実行状態であるプロセスが呼び出すシステムコール毎に監視周期を起動監視プログラム121Yに提供するための領域である。監視周期領域132Cに監視周期が設定されている場合、起動監視プログラム121Yは時間の計測を開始してから監視周期に到達する度にシステムコール1221Aの呼び出し回数を許容回数領域132Bの許容回数と比較する。これにより、監視周期におけるシステムコール1221Aの呼び出し回数の異常の有無が判定される。
なお、周期的に呼び出されないシステムコール1221Aにおける監視周期は、監視周期領域132Cの対応する要素がゼロに設定される。
許容周期領域132Dは、内部監視処理141Cを実行する周期の許容周期を起動監視プログラム121Yに提供するための領域である。内部監視処理141Cを実行する周期の許容周期は、許容下限周期と、許容上限周期との2つの値で定められている。
例えば、内部監視処理141Cを実行する周期が許容周期外であることを起動初期化処理141Aが検出した場合、CPU102は、そのプロセスに異常が発生したと判定する。これにより、そのプロセスに対応するプログラムには悪意があると判定される。
タイムスタンプ領域132Pは、電装品に関するプログラム、車両制御に関するプログラム及びECU2に関するプログラムのそれぞれによる内部監視処理141Cが完了した時刻を起動監視プログラム121Yに提供するための領域である。
内部監視結果領域132Qは、電装品に関するプログラム、車両制御に関するプログラム及びECU2に関するプログラムのそれぞれによる内部監視処理141Cの結果を起動監視プログラム121Yに提供するための領域である。
認証領域132Zは、プログラム監視状態132を更新したプロセスが正当なものであることを確認可能なように、プログラム監視状態132の内容が更新される度にそのメッセージ認証コードを算出し、保存するための領域である。
異常要因対処テーブル132Eは、プログラムの異常要因に応じた対処を起動監視プログラム121Yに提供するための領域である。プログラムの異常要因として、ここでは以下の5つが想定される。
第1の異常要因は、メッセージ認証コードの検証異常である。第2の異常要因は、システムコールテーブルの異常である。第3の異常要因は、システムコール1221Aの呼び出し回数が許容回数の範囲外となる異常である。第4の異常要因は、内部監視タイムスタンプの時刻の差が許容周期の範囲外となる異常である。第5の異常要因は、内部監視結果の異常である。
異常要因対処テーブル132Eには、上記異常要因に対応する対処の参照先となるアドレスが記憶されている。
例えば、第1の異常要因として、メッセージ認証コードの検証異常である場合には、該当するプロセスの実行を終了させる対処の参照先となるアドレスが記憶されている。第3の異常要因として、システムコール1221Aの呼び出し回数が許容回数の範囲外となる異常である場合には、該当するプロセスを再起動させる対処の参照先となるアドレスが記憶されている。第4の異常要因として、内部監視タイムスタンプの時刻の差が許容周期の範囲外となる異常である場合には、該当するプロセスにおける安全確保処理141Dを実行させる対処の参照先となるアドレスが記憶されている。第5の異常要因として、内部監視結果の異常である場合には、全プロセスにおける安全確保処理141Dを実行させる対処の参照先となるアドレスが記憶されている。
なお、上記異常要因のいずれであっても、他のプロセスから受信したデータに異常があることにより、一時的に自身のプロセスを実行できない場合には、実行できない期間だけ何もしない旨の対処が記憶されている。即ち、プロセスは継続される。
安全確保代行領域132Rは、電装品に関するプログラム、車両制御に関するプログラム及びECU2に関するプログラムのそれぞれから生成された安全確保処理141Dを記憶するための領域である。
電装品に関するプログラム、車両制御に関するプログラム及びECU2に関するプログラムのいずれかが異常となり、自身のプログラムから安全確保処理141Dを生成できない場合がある。このような場合であっても、他の異常でないプログラムから生成した安全確保処理141Dに代行させるために、各安全確保処理141Dは参照可能に構成される。
安全確保処理状態132Sは、電装品に関するプログラム、車両制御に関するプログラム及びECU2に関するプログラムのそれぞれから生成された安全確保処理141Dの代行状態を記憶するための領域である。
これにより、CPU102は、各安全確保処理141Dの代行状態として、代行開始及び代行完了のいずれかを示す値を安全確保処理状態132Sに設定することができる。従って、安全確保処理141Dの代行が複数回実施されることを防ぐことができる。また、安全確保処理141Dの代行が正常に完了したか否かを判定することができる。
なお、各プログラムが異常検知プロセスID記憶配列131及びプログラム監視状態132を同時に参照し、異常検知プロセスID記憶配列131及びプログラム監視状態132の少なくとも一方の変更を要求する可能性がある。そこで、OS122が提供するMUTEX等の仕組みを利用することにより、ハードウェア資源への排他的アクセスを実現させる。
MUTEXは、MUTual Exclusionの略称である。
例えば、レーダーデータ取得プログラム121JのプロセスがRAM13のプログラム監視状態132にアクセスしているとき、カメラデータ取得プログラム121BのプロセスがRAM13の異常検知プロセスID記憶配列131にアクセスするのを防ぐ。
図5は、図1のマイコン20に設けられたROM203に存在している下位制御プログラム150の一例を示す図である。下位制御プログラム150は、起動初期化処理151A、センサデータ取得処理151B、上位制御値取得処理151C、下位制御値算出処理151D及び制御指示処理151Eを含んでいる。また、下位制御プログラム150は、内部監視処理151F、安全確保処理151G及び通信処理151Hを含んでいる。
起動初期化処理151Aは、ECU2に接続されたセンサ8のデータをマイコン20が取得可能となるように入出力インターフェース204を設定する処理である。起動初期化処理151Aは、マイコン20から駆動回路23へ制御値を出力可能となるように入出力インターフェース204を設定する処理である。
起動初期化処理151Aは、下位制御処理に必要な制御処理周期を通知するようにタイマ206を設定する処理である。
起動初期化処理151Aは、ECU1からECU2へ送信されるデータを受信可能なように通信インターフェース205を設定する処理である。
センサデータ取得処理151Bは、制御処理の各周期において、センサ8のデータを取得する処理である。
上位制御値取得処理151Cは、制御処理の各周期において、ECU1の下位制御指示プログラム121Gが算出した下位制御指示値を通信インターフェース205から取得する処理である。
下位制御値算出処理151Dは、制御処理の各周期において、センサデータ取得処理151Bにより取得されたセンサ8のデータ及び上位制御値取得処理151Cにより取得された下位制御指示値に基づいて、下位制御値を算出する処理である。
制御指示処理151Eは、下位制御値算出処理151Dにより算出された下位制御値を駆動回路23へ出力する処理である。
内部監視処理151Fは、センサデータ取得処理151B、上位制御値取得処理151C、下位制御値算出処理151D及び制御指示処理151Eを監視する処理である。
安全確保処理151Gは、内部監視処理151Fが異常を検出した場合、内部監視処理151Fから呼び出され、駆動回路23へ安全な制御値を出力する処理である。
通信処理151Hは、通信インターフェース205及び通信線6を介して、ECU1と必要な情報を交換する処理である。
図6は、図3の起動初期化処理141Aのうち起動に関する処理を説明するフローチャートである。
ステップS11において、CPU102は、起動プログラムリスト121Zを起動処理リスト142Kに読み出す。次に、ステップS11の処理は、ステップS12の処理に進む。
ステップS12において、CPU102は、デジタル署名の検証に成功したか否かを判定する。CPU102によってデジタル署名の検証に成功していないと判定される場合、ステップS12の処理は、ステップS13の処理に進む。
ステップS13において、CPU102は、起動失敗時の処理を実行する。次に、ステップS13の処理は、終了する。
一方、ステップS12において、CPU102によってデジタル署名の検証に成功したと判定される場合、ステップS12の処理は、ステップS14の処理に進む。
ステップS14において、CPU102は、監視する処理の分だけ記憶領域をRAM13に確保する。次に、ステップS14の処理は、ステップS15の処理に進む。
ステップS15において、CPU102は、システムコールテーブル書き換え処理142Jを実行する。システムコールテーブル書き換え処理142Jの詳細な処理手順は、後述される図7に示される。次に、ステップS15の処理は、ステップS16の処理に進む。
ステップS16において、CPU102は、プログラム監視状態132の自身の要素を初期化する。次に、ステップS16の処理は、ステップS17の処理に進む。
ステップS17において、CPU102は、INDEXを0に設定する。INDEXは、起動処理リスト142Kの各要素を参照するときに利用されるパラメータである。次に、ステップS17の処理は、ステップS18の処理に進む。
ステップS18において、CPU102は、起動処理リスト142KのINDEX番目の処理を起動する。次に、ステップS18の処理は、ステップS19の処理に進む。
ステップS19において、CPU102は、INDEXを+1だけ歩進する。即ち、CPU102は、INDEXを+1だけインクリメントする。次に、ステップS19の処理は、ステップS20の処理に進む。
ステップS20において、CPU102は、起動する処理数にINDEXが到達したか否かを判定する。CPU102によって起動する処理数にINDEXが到達したと判定される場合、ステップS20の処理は、終了する。一方、CPU102によって起動する処理数にINDEXが到達していないと判定される場合、ステップS20の処理は、ステップS18の処理に戻る。
図7は、図6のステップS15におけるシステムコールテーブル書き換え処理142Jを説明するフローチャートである。
ステップS31において、CPU102は、INDEXを0に設定する。INDEXは、システムコールテーブル及び旧システムコールテーブル記憶配列142Pのそれぞれの各要素を参照するときに利用されるパラメータである。次に、ステップS31の処理は、ステップS32の処理に進む。
ステップS32において、CPU102は、旧システムコールテーブル記憶配列142PのINDEX番目の要素にシステムコールテーブルのINDEX番目の要素の開始アドレスを記憶させる。次に、ステップS32の処理は、ステップS33の処理に進む。
ステップS33において、CPU102は、システムコールテーブルのINDEX番目の要素にシステムコール監視処理142Iの先頭アドレスを書き込む。次に、ステップS33の処理は、ステップS34の処理に進む。
ステップS34において、CPU102は、INDEXを+1だけインクリメントする。次に、ステップS34の処理は、ステップS35の処理に進む。
ステップS35において、CPU102は、システムコールテーブルの要素数にINDEXが到達したか否かを判定する。CPU102によってシステムコールテーブルの要素数にINDEXが到達したと判定される場合、ステップS35の処理は、終了する。一方、CPU102によってシステムコールテーブルの要素数にINDEXが到達していないと判定される場合、ステップS35の処理は、ステップS32の処理に戻る。
図8は、図3の主処理141Bを説明するフローチャートである。
ステップS41において、CPU102は、異常通知があるか否かを判定する。CPU102によって異常通知があると判定される場合、ステップS41の処理は、ステップS42の処理に進む。
ステップS42において、CPU102は、異常検知プロセスID記憶配列131からINDEXを求める。次に、ステップS42の処理は、ステップS43の処理に移行する。
ステップS43において、CPU102は、異常要因判定処理を実行する。異常要因判定処理の詳細な処理手順は、後述される図10に示される。次に、ステップS43の処理は、ステップS41の処理に戻る。
なお、プロセス間における異常の通知は、OS122によって提供されるプロセス間通信が用いられる。例えば、POSIX仕様で定義されているシグナル若しくはメッセージキュー又は同等の機能が用いられる。POSIXは、Portable Operating System Interfaceの略称である。POSIXは、IEEEが策定したAPI規格である。IEEEは、Institute of Electrical and Electronics Engineersの略称である。
一方、ステップS41において、CPU102によって異常通知がないと判定される場合、ステップS41の処理は、ステップS44の処理に進む。
ステップS44において、CPU102は、システムコール1221Aの監視周期になったか否かを判定する。CPU102によってシステムコール1221Aの監視周期になっていないと判定される場合、ステップS44の処理は、ステップS45の処理に進む。
ステップS45において、CPU102は、スリープする。次に、ステップS45の処理は、ステップS41の処理に戻る。
なお、スリープは、プログラムのプロセスから異常が通知されるまで、CPU102の実行時間を消費することなく待機する振る舞いである。スリープは、例えば、POSIX仕様で定義されているsleep又はusleepの機能を用いて実施される。スリープする時間は、プログラムの異常を検出してから安全確保処理141Dを完了するまでの時間が許容時間となるように十分に短い時間とする。
一方、ステップS44において、CPU102によってシステムコール1221Aの監視周期になったと判定される場合、ステップS44の処理は、ステップS46の処理に進む。
ステップS46において、CPU102は、システムコールテーブル監視処理142Hを実行する。システムコールテーブル監視処理142Hの詳細な処理手順は、後述される図13に示される。次に、ステップS46の処理は、ステップS47の処理に進む。
ステップS47において、CPU102は、INDEXを0に設定する。INDEXは、プロセスID毎にプログラム監視状態132の各要素を参照するときに利用されるパラメータである。次に、ステップS47の処理は、ステップS48の処理に進む。
ステップS48において、CPU102は、異常要因判定処理を実行する。異常要因判定処理の詳細な処理手順は、後述される図10に示される。次に、ステップS48の処理は、ステップS49の処理に進む。
ステップS49において、CPU102は、INDEXを+1だけインクリメントする。次に、ステップS49の処理は、ステップS50の処理に進む。
ステップS50において、CPU102は、起動する処理数にINDEXが到達したか否かを判定する。CPU102によって起動する処理数にINDEXが到達したと判定される場合、ステップS50の処理は、ステップS51の処理に進む。一方、CPU102によって起動する処理数にINDEXが到達していないと判定される場合、ステップS50の処理は、ステップS48の処理に戻る。
ステップS51において、CPU102は、タイムスタンプ領域132Pに記憶されている内部監視タイムスタンプを更新する。次に、ステップS51の処理は、ステップS52の処理に進む。
ステップS52において、CPU102は、認証領域132Zに記憶されているメッセージ認証コードを更新する。次に、ステップS52の処理は、ステップS41の処理に戻る。このようにステップS41の処理に戻ることで、起動監視プログラム121Yの主処理141Bとして処理の実行が継続される。
図9は、図3の起動初期化処理141Aのうち初期化に関する処理を説明するフローチャートである。ステップS61〜ステップS72の処理が実行されている間は、上記で説明したようにプログラム監視状態132にアクセスする処理であるため、排他制御が実行される。
ステップS61において、CPU102は、フラグ領域132AをFALSEに初期化する。次に、ステップS61の処理は、ステップS62の処理に進む。
ステップS62において、CPU102は、プログラム毎に異なる初期化を行う。次に、ステップS62の処理は、ステップS63の処理に進む。
ステップS63において、CPU102は、許容回数領域132Bを初期化する。次に、ステップS63の処理は、ステップS64の処理に進む。
ステップS64において、CPU102は、監視周期領域132Cを初期化する。次に、ステップS64の処理は、ステップS65の処理に進む。
ステップS65において、CPU102は、許容周期領域132Dを初期化する。次に、ステップS65の処理は、ステップS66の処理に進む。
ステップS66において、CPU102は、タイムスタンプ領域132Pを初期化する。次に、ステップS66の処理は、ステップS67の処理に進む。
ステップS67において、CPU102は、内部監視結果領域132Qを初期化する。次に、ステップS67の処理は、ステップS68の処理に進む。
ステップS68において、CPU102は、安全確保代行領域132Rに安全確保処理141Dを書き込む。次に、ステップS68の処理は、ステップS69の処理に進む。
ステップS69において、CPU102は、安全確保処理状態132Sを初期化する。次に、ステップS69の処理は、ステップS70の処理に進む。
ステップS70において、CPU102は、フラグ領域132AをTRUEに変更する。次に、ステップS70の処理は、ステップS71の処理に進む。
ステップS71において、CPU102は、メッセージ認証コードを計算する。次に、ステップS71の処理は、ステップS72の処理に進む。
ステップS72において、CPU102は、認証領域132Zのメッセージ認証コードを更新する。次に、ステップS72の処理は、終了する。
図10は、図8のステップS43及びステップS48における異常要因判定処理を説明するフローチャートである。異常要因判定処理は、プログラム監視状態132のINDEX番目の要素を確認する。
ステップS81において、CPU102は、メッセージ認証コードが正常であるか否かを判定する。CPU102によってメッセージ認証コードが正常でないと判定される場合、ステップS81の処理は、ステップS82の処理に進む。
ステップS82において、CPU102は、異常要因対処処理を実行する。異常要因対処処理の詳細な処理手順は、後述される図11に示される。次に、ステップS82の処理は、終了する。
なお、メッセージ認証コードが正常でない場合には、プログラムの完全性は満たされていない。プログラムの完全性が満たされていない場合には、プログラムは改ざんされている可能性がある。改ざんされているプログラムは、悪意のあるプログラムである可能性がある。悪意のあるプログラムであれば、上記で説明したように、無限ループを実行する等の妨害を行う可能性がある。そこで、このような場合に該当するプロセスは、異常要因対処処理によって強制終了させる。
一方、ステップS81において、CPU102によってメッセージ認証コードが正常であると判定される場合、ステップS81の処理は、ステップS83の処理に進む。
ステップS83において、CPU102は、監視必要フラグがTRUEであるか否かを判定する。CPU102によって監視必要フラグがTRUEでないと判定される場合、ステップS83の処理は、終了する。一方、CPU102によって監視必要フラグがTRUEであると判定される場合、ステップS83の処理は、ステップS84の処理に進む。
なお、図8のステップS43から異常要因判定処理が呼び出された場合には、プロセス間通信により異常が通知された状態となっている。従って、明らかに監視必要フラグにTRUEが設定されている状態と等価であるため、ステップS83の処理は省略され、ステップS81の処理は、ステップS84に進む。
ステップS84において、CPU102は、システムコール回数記憶配列142Rの各要素が許容回数の範囲内であるか否かを判定する。CPU102によってシステムコール回数記憶配列142Rの各要素が許容回数の範囲内でないと判定された場合、ステップS84の処理は、ステップS82の処理に進む。
なお、システムコール1221Aの呼び出し回数が許容回数の範囲内でなければ、プロセス間通信が無限ループ内で実行されることにより、本来のプロセスの実行が妨害される状態となる。従って、プロセス間通信の実行を回避するために、起動中のプロセスを再起動させる必要がある。そこで、このような場合に該当するプロセスは、異常要因対処処理によって再起動させる。
一方、ステップS84において、CPU102によってシステムコール回数記憶配列142Rの各要素が許容回数の範囲内であると判定された場合、ステップS84の処理は、ステップS85の処理に進む。
ステップS85において、CPU102は、内部監視タイムスタンプが許容周期の範囲内であるか否かを判定する。CPU102によって内部監視タイムスタンプが許容周期の範囲内でないと判定された場合、ステップS85の処理は、ステップS82の処理に進む。
なお、内部監視タイムスタンプが許容周期の範囲内でなければ、悪意のあるプログラムが車両システムに侵入し、無限ループ等の妨害を実行した可能性がある。そこで、このような場合に該当するプロセスは、異常要因対処処理によって安全確保処理141Dを実行させる。
一方、ステップS85において、CPU102によって内部監視タイムスタンプが許容周期の範囲内であると判定された場合、ステップS85の処理は、ステップS86の処理に進む。
ステップS86において、CPU102は、内部監視結果が正常であるか否かを判定する。CPU102によって内部監視結果が正常でないと判定された場合、ステップS86の処理は、ステップS82の処理に進む。
なお、内部監視結果が正常でなければ、悪意のあるプログラムが車両システムに侵入し、妨害を実行したために、車両の安全に関わる処理が正しく完了しなかった可能性がある。そこで、このような場合に該当する各プロセスは、異常要因対処処理によって安全確保処理141Dをプロセス毎に実行させる。
一方、ステップS86において、CPU102によって内部監視結果が正常であると判定された場合、ステップS86の処理は、ステップS87の処理に進む。
ステップS87において、CPU102は、システムコール回数記憶配列142Rの要素をゼロに再設定する。次に、ステップS87の処理は、ステップS88の処理に進む。
ステップS88において、CPU102は、メッセージ認証コードを更新する。次に、ステップS88の処理は、終了する。
図11は、図10のステップS82における異常要因対処処理を説明するフローチャートである。
ステップS101において、CPU102は、異常要因対処テーブル132Eを参照する。次に、ステップS101の処理は、ステップS102の処理に進む。
ステップS102において、CPU102は、対処の値を判定する。ここで、異常要因対処テーブル132Eには、対処の値としてVALが設定されている。VALは、対処の値が入力されたパラメータである。
具体的には、ステップS81の処理からステップS82の処理を経て異常要因対処処理が呼び出された場合には、CPU102は、プロセスを強制終了させる対処の値としてVALが1に設定されている処理を選択する。従って、ステップS102の処理は、ステップS103の処理に進む。
ステップS103において、CPU102は、該当するプロセスIDのプロセスを強制終了する。次に、ステップS103の処理は、終了する。なお、CPU102は、強制終了する前に、該当するプロセスIDのプロセスに対し、終了を要求し、この要求に一定時間以内に応じない場合に強制終了するようにしてもよい。
また、ステップS84の処理からステップS82の処理を経て異常要因対処処理が呼び出された場合には、CPU102は、プロセスを再起動させる対処の値としてVALが2に設定されている処理を選択する。従って、ステップS102の処理は、ステップS104の処理に進む。
ステップS104において、CPU102は、該当するプロセスIDのプロセスを強制終了する。次に、ステップS104の処理は、ステップS105の処理に進む。
ステップS105において、CPU102は、該当するプロセスIDのプロセスを起動する。次に、ステップS105の処理は、ステップS106の処理に進む。
ステップS106において、CPU102は、プロセスID記憶配列142Lを更新する。具体的には、該当するプロセスIDのプロセスを強制終了後に起動させた場合、同じプログラムに対応するプロセスが起動するが、プロセスIDはOS122により新たに付与される。そこで、新たに付与されたプロセスIDをプロセスID記憶配列142Lに記憶させることにより、CPU102は、プロセスID記憶配列142Lを更新する。
次に、ステップS106の処理は、終了する。
また、ステップS85の処理からステップS82の処理へ経て異常要因対処処理が呼び出された場合には、以下の処理が実行される。即ち、CPU102は、プログラムの一部の実行状態に該当するプロセスによって安全確保処理141Dを実行させる対処の値としてVALが3に設定されている処理を選択する。従って、ステップS102の処理は、ステップS107の処理に進む。
ステップS107において、CPU102は、安全確保処理141Dを実行する。安全確保処理141Dの詳細な処理手順は、後述される図12に示される。
次に、ステップS107の処理は、終了する。
また、ステップS86の処理からステップS82の処理へ経て異常要因対処処理が呼び出された場合には、以下の処理が実行される。即ち、CPU102は、プログラムに含まれる各命令群の実行状態に該当する各プロセスによって安全確保処理141Dをプロセス毎に実行させる対処の値としてVALが4に設定されている処理を選択する。従って、ステップS102の処理は、ステップS108の処理に進む。
ステップS108において、CPU102は、INDEXを0に設定する。INDEXは、プロセスID記憶配列142Lの各要素を参照するときに利用されるパラメータである。次に、ステップS108の処理は、ステップS109の処理に進む。
ステップS109において、CPU102は、プロセスID記憶配列142LのINDEX番目の要素のプロセスIDを取得する。次に、ステップS109の処理は、ステップS110の処理に進む。
ステップS110において、CPU102は、安全確保処理141Dを実行する。次に、ステップS110の処理は、ステップS111の処理に進む。
ステップS111において、CPU102は、INDEXを+1だけインクリメントする。次に、ステップS111の処理は、ステップS112の処理に進む。
ステップS112において、CPU102は、プロセスID記憶配列142Lの要素数にINDEXが到達したか否かを判定する。CPU102によってプロセスID記憶配列142Lの要素数にINDEXが到達したと判定される場合、ステップS112の処理は、終了する。一方、CPU102によってプロセスID記憶配列142Lの要素数にINDEXが到達していないと判定される場合、ステップS112の処理は、ステップS109の処理に戻る。
なお、CPU102は、ステップS102において対処の値を選ぶとき、他のプロセスから受信したデータに異常があり、一時的に自身のプロセスを実行できない状態になっていることがある。この場合には、ステップS102の処理は、終了する。
図12は、図11のステップS107及びステップS110における図3の安全確保処理141Dを説明するフローチャートである。
ステップS121において、CPU102は、プロセスID記憶配列142Lから異常と判定されたプロセスIDのINDEXを求める。次に、ステップS121の処理は、ステップS122の処理に進む。
ステップS122において、CPU102は、時間がタイムアウト時間に到達したか否かを判定する。タイムアウト時間は、異常が検知されてから安全確保処理141Dを完了するまでの許容時間である。
ステップS122において、CPU102によって時間がタイムアウト時間に到達したと判定される場合、ステップS122の処理は、ステップS123の処理に進む。
ステップS123において、CPU102は、異常停止する。次に、ステップS123の処理は、終了する。
一方、ステップS122において、CPU102によって時間がタイムアウト時間に到達していないと判定される場合には、ステップS122の処理は、ステップS124の処理に進む。
ステップS124において、CPU102は、安全確保処理状態132SのINDEX番目の要素が未実施の値であるか否かを判定する。CPU102によって安全確保処理状態132SのINDEX番目の要素が未実施の値であると判定される場合、ステップS124の処理は、ステップS125の処理に進む。
ステップS125において、CPU102は、プロセスID記憶配列142Lの全要素のプロセスIDに安全確保代行要求を通知する。通知は、OS122が提供するプロセス間通信を利用する。次に、ステップS125の処理は、ステップS122の処理に戻る。
一方、ステップS124において、CPU102によって安全確保処理状態132SのINDEX番目の要素が未実施の値でないと判定される場合、ステップS124の処理は、ステップS126の処理に進む。
ステップS126において、CPU102は、安全確保処理状態132SのINDEX番目の要素が実施完了の値であるか否かを判定する。CPU102によって安全確保処理状態132SのINDEX番目の要素が実施完了の値であると判定される場合、ステップS126の処理は、終了する。
一方、ステップS126において、CPU102によって安全確保処理状態132SのINDEX番目の要素が実施完了の値でないと判定される場合、ステップS126の処理は、ステップS122の処理に戻る。
なお、図11のステップS107又は図11のステップS110から安全確保処理141Dが呼び出された場合には、一つの異常の対処を終えてから次の異常の対処を行う手順となる。従って、後に行われる異常の対処の開始が遅くなる可能性がある。この遅れを小さくするためには、発生する異常毎に、起動監視プログラム121YがOS122の機能を利用してスレッドを新たに作成する。これにより、そのスレッドに安全確保処理141Dが割り当てられる。
換言すれば、プロセスは、プログラムの実行状態であって、プログラムの実行単位であるが、スレッドは、CPU102の割り当て実行単位であるため、スレッドを利用することによりハードウェア資源をさらに効率良く利用することができる。
図13は、図8のステップS46における図3のシステムコールテーブル監視処理142Hを説明するフローチャートである。
ステップS141において、CPU102は、INDEXを0に設定する。次に、ステップS141の処理は、ステップS142の処理に進む。
ステップS142において、CPU102は、システムコールテーブルのINDEX番目の要素がシステムコール監視処理142Iの開始アドレスを記憶しているか否かを判定する。CPU102によってシステムコールテーブルのINDEX番目の要素がシステムコール監視処理142Iの開始アドレスを記憶していないと判定される場合、ステップS142の処理は、ステップS143の処理に進む。
ステップS143において、CPU102は、異常要因対処処理を実行する。次に、ステップS143の処理は、終了する。
一方、ステップS142において、CPU102によってシステムコールテーブルのINDEX番目の要素がシステムコール監視処理142Iの開始アドレスを記憶していると判定される場合、ステップS142の処理は、ステップS144の処理に進む。
ステップS144において、CPU102は、INDEXを+1だけインクリメントする。次に、ステップS144の処理は、ステップS145の処理に進む。
ステップS145において、CPU102は、システムコールテーブルの要素数にINDEXが到達したか否かを判定する。CPU102によってシステムコールテーブルの要素数にINDEXが到達したと判定される場合、ステップS145の処理は、終了する。一方、CPU102によってシステムコールテーブルの要素数にINDEXが到達していないと判定される場合、ステップS145の処理は、ステップS142の処理に戻る。
なお、システムコールテーブルの各要素にシステムコール監視処理142Iの開始アドレスが記憶されていない場合には、悪意のあるプログラムが侵入したことが隠蔽されている可能性がある。悪意のあるプログラムが侵入したことを隠蔽するために、特定のシステムコール1221Aの実行結果を偽るプロセスのアドレスがシステムコールテーブルに書き込まれる場合がある。この場合には、異常要因対処処理が呼び出され、該当するプロセスIDのプロセスが強制終了される。
図14は、図3のシステムコール監視処理142Iを説明するフローチャートである。ここで、各システムコール1221Aは、システムコール番号が順に関連付けられている。システムコール番号は、例えば、自然数が昇順に割り当てられている。システムコール番号は、OS122の実装によって異なっている。従って、OS122が同一であれば、システムコール番号により任意のシステムコール1221Aを特定することができる。
ステップS161において、CPU102は、システムコール番号をSYSCNに設定する。SYSCNは、旧システムコールテーブル記憶配列142P及びシステムコール回数記憶配列142Rのそれぞれにおいてシステムコール番号により任意のシステムコール1221Aを参照するためのパラメータである。次に、ステップS161の処理は、ステップS162の処理に進む。
ステップS162において、CPU102は、システムコール1221Aの呼び出し元のプロセスのプロセスIDを取得する。次に、ステップS162の処理は、ステップS163の処理に進む。
ステップS163において、CPU102は、プロセスIDに対応するシステムコール回数記憶配列142Rを選択する。次に、ステップS163の処理は、ステップS164の処理に進む。
ステップS164において、CPU102は、システムコール回数記憶配列142RのSYSCN番目の呼び出し回数を+1だけインクリメントする。次に、ステップS164の処理は、ステップS165の処理に進む。
ステップS165において、CPU102は、プロセスIDに対応する許容回数領域132Bを選択する。次に、ステップS165の処理は、ステップS166の処理に進む。
ステップS166において、CPU102は、許容回数領域132Bの許容回数を選択する。次に、ステップS166の処理は、ステップS167の処理に進む。
ステップS167において、CPU102は、SYSCN番目の呼び出し回数が許容回数の範囲内であるか否かを判定する。CPU102によってSYSCN番目の呼び出し回数が許容回数の範囲内でないと判定される場合、ステップS167の処理は、ステップS168の処理に進む。
ステップS168において、CPU102は、異常要因対処処理を実行する。次に、ステップS168の処理は、終了する。
一方、ステップS167において、CPU102によってSYSCN番目の呼び出し回数が許容回数の範囲内であると判定される場合、ステップS167の処理は、ステップS169の処理に進む。
ステップS169において、CPU102は、プロセスIDに対応する旧システムコールテーブル記憶配列142Pを選択する。次に、ステップS169の処理は、ステップS170の処理に進む。
ステップS170において、CPU102は、旧システムコールテーブル記憶配列142PのSYSCN番目に記憶されている開始アドレスを取得する。次に、ステップS170の処理は、ステップS171の処理に進む。
ステップS171において、CPU102は、PCに開始アドレスを設定する。PCは、Program Counterの略称である。次に、ステップS171の処理は、終了する。これにより、CPU102は、PCを参照してシステムコール1221Aを呼び出すことができる。
なお、システムコール監視処理142Iは、システムコール番号をOS122から取得できることを前提としているが、OS122の実装によってはシステムコール番号の取得ができないことがある。この場合には、CPU102は、システムコール監視処理142Iが呼び出される前の呼び出し元のプロセスのプロセスIDと、OS122の管理情報又はハードウェア資源のコンピュータアーキテクチャから取得可能な情報を参照して特定する。なお、OS122の管理情報又はハードウェア資源のコンピュータアーキテクチャから取得可能な情報は、例えば、システムコール監視処理142Iが呼び出される前の呼び出し元のプロセスを管理するスタックポインタ又はシステムコールの開始番地である。
図15は、図3の主処理141Bから呼び出される各種処理を説明するフローチャートである。
ステップS181において、CPU102は、内部監視処理141Cを呼び出す。次に、ステップS181の処理は、ステップS182の処理に進む。
ステップS182において、CPU102は、内部監視結果に異常が有るか否かを判定する。CPU102によって内部監視結果に異常が有ると判定される場合、ステップS182の処理は、ステップS183の処理に進む。
ステップS183において、CPU102は、内部監視結果を異常値に更新する。次に、ステップS183の処理は、ステップS184の処理に進む。
ステップS184において、CPU102は、安全確保処理状態132Sの要素を実施開始に変更する。次に、ステップS184の処理は、ステップS185の処理に進む。
ステップS185において、CPU102は、安全確保処理141Dを実行する。次に、ステップS185の処理は、ステップS186の処理に進む。
ステップS186において、CPU102は、安全確保処理状態132Sの要素を実施完了に変更する。次に、ステップS186の処理は、ステップS187の処理に進む。
ステップS187において、CPU102は、監視必要フラグをFALSEに変更する。次に、ステップS187の処理は、ステップS188の処理に進む。
ステップS188において、CPU102は、処理を終了する。次に、ステップS188の処理は、ステップS189の処理に進む。
ステップS189において、CPU102は、起動初期化処理141Aを呼び出す。次に、ステップS189の処理は、終了する。
一方、ステップS182において、CPU102によって内部監視結果に異常が無いと判定される場合、ステップS182の処理は、ステップS190の処理に進む。
ステップS190において、CPU102は、内部監視タイムスタンプが許容周期の範囲内であるか否かを判定する。CPU102によって内部監視タイムスタンプが許容周期の範囲内でないと判定される場合、ステップS190の処理は、ステップS191の処理に進む。
ステップS191において、CPU102は、安全確保処理141Dを呼び出す。次に、ステップS191の処理は、ステップS192の処理に進む。
ステップS192において、CPU102は、スリープする。次に、ステップS192の処理は、ステップS191に戻る。ここで、スリープは、図8のステップS45のスリープと同様に実行される。
一方、ステップS190において、CPU102によって内部監視タイムスタンプが許容周期の範囲内であると判定される場合、ステップS190の処理は、ステップS193の処理に進む。
ステップS193において、CPU102は、内部監視タイムスタンプを更新する。次に、ステップS193の処理は、終了する。
図16は、図5の下位制御プログラム150に含まれる起動初期化処理151Aを説明するフローチャートである。なお、マイコン20にはOS122と同等のオペレーティングシステムは搭載しないため、図2のシステムコール1221Aに関する処理は実行されない。また、ECU2に接続されているモータ7の電源の遮断をECU1から実行できるように配線がされている場合には、安全確保処理141Dにより一部の動作を代行することができる。
ステップS201〜ステップS208の処理は、ハードウェア資源が異なる以外、図9のステップS61、ステップS62、ステップS65〜ステップS67、ステップS70〜ステップS72の処理と同様である。よって、その詳細な説明は省略される。
一般的に、OS122は、プロセスが呼び出したシステムコール1221A等のAPI1221の機能を提供する場合、プロセスからAPI1221に渡されたパラメータに異常がないか否かをチェックする。この結果、OS122は、パラメータに異常があることを検出した場合、API1221の本来の機能を実行せずに、API1221を呼び出したプロセスに対してパラメータに異常がある旨を伝える。
しかし、例えば、バッファのオーバーフローを発生させるような悪意のあるプログラムは、OS122によるパラメータのチェックでは検出されない。この結果、バッファのオーバーフローが発生すれば、無限ループ等のように本来の処理とは異なる処理が実行される。これにより、CPUリソースがなくなるため、CPU102は、各種プログラムを実行することができない。このため、ECU1は、各種プログラムに基づいて車両を適切に制御することできないため、車両は想定通りに動作しなくなる。
また、例えば、不要なデータを他のECUに絶え間なく送信するような悪意のあるプログラムも、OS122によるパラメータのチェックでは検出されない。この結果、他のECUは車両の制御に必要な通信データを受信できない。これにより、複数のECUによって連係して車両を適切に制御することができなくなる。このため、車両の制御処理が実質的に無効化される。
このように、悪意のあるプログラムは、システムコール1221Aの呼び出し状況を通常想定される状況と異なる状況に陥れる。不要なデータを他のECUに絶え間なく送信するような悪意のあるプログラムも同様である。
そこで、CPU102は、プログラムの実行状態であるプロセスにより想定されるシステムコール1221Aの呼び出し状況に基づいて、プログラムに悪意があるか否かを判定する。従って、悪意のあるプログラムの実行を事前に回避することができる。これにより、悪意のあるプログラムによって車両システムが妨害された状態でも車両の稼働を継続させることができる。
また、CPU102は、プログラムの実行状態であるプロセスにより想定される処理結果に基づいて、プロセスの継続、プロセスの終了及びプロセスの再起動のいずれか1つを実行する。従って、プロセス毎に適した処理が実行される。これにより、プログラムに悪意があると判定される場合に一律に同じ処理をするよりも適した処理を実行することができる。
また、CPU102は、複数のプロセスが生成されている場合、各プロセスのうち、悪意があるプロセスを終了する。CPU102は、複数のプロセスが生成されている場合、各プロセスのうち、悪意がないプロセスを継続する。従って、プログラムにある悪意に応じてプロセスの終了及び継続のいずれか一方を選択することができる。これにより、安全を確保しつつ、車両の運転を継続させることができる。
また、CPU102は、複数の電装品が入出力インターフェース101に接続されている場合、各電装品に対応するプログラム毎に悪意があるか否かを判定する。従って、各電装品の機能に応じて悪意の有無を判定することができる。これにより、複数のプログラムのうち、悪意のあるプログラムを特定することが容易となるため、強制終了させるべきプログラムを細かく特定することができる。
また、CPU102は、予め設定された許容周期内にシステムコール1221Aが呼び出され、システムコール1221Aの呼び出し回数がプロセスの想定通りであって、監視プロセスの戻り値がエラー値以外である場合、プログラムに悪意がないと判定する。従って、プログラムのアルゴリズムが仕様に照らして正しいか否かに基づいて、プログラムに悪意があるか否かが判定される。これにより、プログラムの実行状態であるプロセスが停止することを担保することができる。
また、CPU102は、システムコール1221Aの開始アドレスが正しく設定されている場合、プログラムに悪意がないと判定する。従って、CPU102は、システムコール1221Aの開始アドレスが正しく設定されていない場合、プログラムに悪意があると判定する。これにより、悪意のあるプログラムによって書き換えられたシステムコール1221Aの開始アドレスの参照先におけるプロセスの呼び出しを防ぐことができる。
また、CPU102は、システムコール1221Aの呼び出し回数が予め設定された許容回数の範囲内である場合、プログラムに悪意がないと判定する。従って、CPU102は、システムコール1221Aの呼び出し回数が予め設定された許容回数の範囲外である場合、プログラムに悪意があると判定する。これにより、プロセス間通信が無限ループで実行されることによりシステムコール1221Aの呼び出し回数が異常に増加した場合、プログラムに悪意があると判定して次の処理を進めることができる。
また、CPU102は、プロセス毎に想定される呼び出し回数を計測してからシステムコール1221Aを呼び出す。従って、CPU102は、プロセス毎に想定される呼び出し回数を計測するまではシステムコール1221Aを実際に呼び出さない。これにより、悪意のあるプログラムの実行状態であるプロセスの実行を回避させることができる。
また、CPU102は、プログラムに悪意がないと判定する場合、メッセージ認証コードを生成する。従って、ECU1とECU2との間で各種信号を通信する際、通信される各種信号の改ざん及びなりすましを防止することができる。これにより、通信の安全性を担保することができる。
また、CPU102は、プロセスIDにメッセージ認証コードを関連付けた状態で、プロセスIDとメッセージ認証コードとを共有メモリに記憶させる。従って、プロセスIDに対応するプロセスが改ざん及びなりすましが行われていないことを証明することができる。これにより、悪意のないプログラムの実行状態であるプロセスを実行することができる。
なお、安全確保処理141D及びプログラム監視状態132を更新及び参照する本来のプロセスではない、第三者のプロセスによるなりすましに対応する必要がある場合は、安全確保処理141D及びプログラム監視状態132の改ざんの検出にメッセージ認証を使用する代わりにデジタル署名を使用してもよく、デジタル署名の公開鍵に危殆化の恐れがある場合は、鍵を定期的に更新しても良い。また、鍵の更新の際に公開鍵証明書及び公開鍵基盤(Public Key Infrastructure)又はこれに準じた仕組みを利用しても良い。
また、各実施の形態について、車載制御装置を実行するための処理回路が備えられている。処理回路は、専用のハードウェアであっても、メモリに格納されるプログラムを実行するCPU(Central Processing Unit、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサ、DSPともいう)であってもよい。
図17は、ハードウェア構成例を説明する図である。図17においては、処理回路401がバス402に接続されている。処理回路401が専用のハードウェアである場合、処理回路401は、例えば、単一回路、複合回路、プログラム化したプロセッサ、ASIC、FPGA又はこれらを組み合わせたものが該当する。車載制御装置の各部の機能のそれぞれは、処理回路401で実現されてもよいし、各部の機能はまとめて処理回路401で実現されてもよい。
図18は、他のハードウェア構成例を説明する図である。図18においては、プロセッサ403及びメモリ404がバス402に接続されている。処理回路がCPUの場合、車載制御装置の各部の機能は、ソフトウェア、ファームウェア又はソフトウェアとファームウェアとの組み合わせにより実現される。ソフトウェア又はファームウェアはプログラムとして記述され、メモリ404に格納される。処理回路は、メモリ404に記憶されたプログラムを読み出して実行することにより、各部の機能を実現する。すなわち、車載制御装置は、処理回路により実行されるときに、ステップが結果的に実行されることになるプログラムを格納するためのメモリ404を備えている。また、これらのプログラムは、実行する手順又は方法をコンピュータに実行させるものであるといえる。ここで、メモリ404とは、RAM、ROM、フラッシュメモリ、EPROM、EEPROM等の、不揮発性若しくは揮発性の半導体メモリ又は、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、DVD等が該当する。
なお、車載制御装置の各部の機能は、一部が専用のハードウェアで実現され、他の一部がソフトウェア又はファームウェアで実現されるようにしてもよい。例えば、専用のハードウェアとしての処理回路で各機能を実現させることができる。また、処理回路がメモリ404に格納されたプログラムを読み出して実行することによって各機能を実現させることが可能である。
このように、処理回路は、ハードウェア、ソフトウェア、ファームウェア又はこれらの組み合わせによって、上記の各機能を実現することができる。
実施の形態においては、ECU1がECU2のみに接続されている一例について説明したが、特にこれに限定されるものではない。例えば、ECU1が2つ以上の他のECUに接続されていてもよい。従って、実施の形態と同様にプログラムに悪意があるか否かを判定することによって、車両の稼働を継続させることができる。
本開示に係る車載制御装置は、入出力インターフェースを管理するカーネルと前記カーネルの機能を呼び出すシステムコールとを含むオペレーティングシステムと、前記システムコールを呼び出すことにより前記入出力インターフェースに接続されている電装品を制御するプログラムと、を記憶する二次記憶装置と、前記プログラムの実行状態であるプロセスにより想定される前記システムコールの呼び出し状況に基づいて、前記プログラムに悪意があるか否かを判定するCPUと、を備え、前記CPUは、予め設定された許容周期内に前記プログラムに含まれる複数の処理部分が呼び出され、前記複数の処理部分の実行順序が前記プログラムの仕様通りであって、前記プロセスのうち前記複数の処理部分を監視する監視プロセスの戻り値がエラー値以外である場合、前記プログラムに悪意がないと判定する。