(57)【特許請求の範囲】
【請求項１】
少なくとも１つのダミー処理を含むプログラムを記憶した記憶部と、
メモリと、
前記記憶部から前記メモリにロードされた前記プログラムに含まれる前記ダミー処理のそれぞれを、実行可能となるように有効化または実行不可能となるように無効化する有効／無効処理部と、
前記プログラムの実行状態を監視し、実行された前記ダミー処理の内容および実行順序が、前記プログラムに含まれる前記ダミー処理のうち有効化されたダミー処理の内容および実行順序と一致するか否かを判定することにより、前記プログラムの改ざんを検出する検出部と
を備え、
前記有効／無効処理部は、前記メモリにロードされた前記プログラムに含まれる前記ダミー処理をＮＯＰ命令に書き換えることで、該ダミー処理を無効化する、
制御装置。
【請求項２】
前記有効／無効処理部は、前記記憶部から前記メモリにロードされた前記プログラムの実行開始前に、前記プログラムに含まれる前記ダミー処理のそれぞれを有効化または無効化する、
請求項１記載の制御装置。
【請求項３】
前記有効／無効処理部は、前記記憶部から前記メモリにロードされた前記プログラムの実行中に、前記プログラムに含まれる前記ダミー処理のそれぞれを有効化または無効化する、
請求項１記載の制御装置。
【請求項４】
コンピューターに、
メモリにロードされた制御プログラムに含まれる少なくとも一つのダミー処理のそれぞれを、実行可能となるように有効化または実行不可能となるように無効化させ、
前記制御プログラムの実行状態を監視させ、実行された前記ダミー処理の内容および実行順序が、前記制御プログラムに含まれる前記ダミー処理のうち有効化されたダミー処理の内容および実行順序と一致するか否かを判定させることにより、前記制御プログラムの改ざんを検出させるプログラムであって、
前記メモリにロードされた前記制御プログラムに含まれる前記ダミー処理をＮＯＰ命令に書き換えることで、該ダミー処理を無効化させる、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、制御装置およびプログラムに関する。
【背景技術】
【０００２】
不正アクセスなどのセキュリティ攻撃を検知する方法として、シグネチャベースの検知方法が知られている。このシグネチャベースの検知方法は、周知の攻撃パターンをシグネチャとして予め定義し（ブラックリストを定義し）、監視対象の装置の動作と、このシグネチャとを比較することで、セキュリティ攻撃の有無を検知する。しかしながら、このシグネチャベースの検知方法は、攻撃パターンを一般化することができないため、新たな攻撃を受けた場合、または、周知の攻撃が変更され、予め定義されたシグネチャと一致しなくなった場合には、攻撃を検知することができない場合があった。
【０００３】
また、監視対象の装置の動作と、期待される正常動作（ホワイトリスト）とを比較することで不正アクセスを検知する方法も知られている。しかしながら、攻撃者がこの装置の正常動作の内容を把握できた場合には、この装置の正常動作の内容を模倣することで、攻撃を検知することができない場合があった。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−２５７１５０号公報
【特許文献２】特開２０１１−２５８０１９号公報
【特許文献３】特開２００７−２８６６５６号公報
【特許文献４】特開２００７−１４８８１８号公報
【特許文献５】特開２００５−２３４８４９号公報
【非特許文献】
【０００５】
【非特許文献１】H. Feng et al.,“Anomaly Detection Using Call Stack Information”, Proceedings of the IEEE Symposium on Security and Privacy, 2003, 62頁
【非特許文献２】H. Xu, W. Du, and S. J. Chapin. “Context sensitive anomaly monitoring of process control flow to detect mimicry attacks and impossible paths”, Proceedings of the International Symposium on Recent Advances in Intrusion Detection RAID, Springer, 2004, 21-38頁
【非特許文献３】Danilo Bruschi et al., “An Efficient Technique for Preventing Mimicry and Impossible Paths Execution Attacks”, Proceedings of the performance, computing, and communications conference (IPCCC), 2007, 418-425頁
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、セキュリティ攻撃に対する保護機能を高めることができる制御装置およびプログラムを提供することである。
【課題を解決するための手段】
【０００７】
実施形態の制御装置は、記憶部と、メモリと、有効／無効処理部と、検出部とを持つ。記憶部は、少なくとも１つのダミー処理を含むプログラムを記憶する。有効／無効処理部は、記憶部からメモリにロードされたプログラムに含まれるダミー処理のそれぞれを有効化または無効化する。検出部は、プログラムの実行状態を監視し、有効／無効処理部によりダミー処理が有効化または無効化された結果と一致するか否かを判定することにより、プログラムの改ざんを検出する。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態における、制御システムの一例を示す図。
【図２】第１の実施形態における、制御装置の機能ブロック図。
【図３】第１の実施形態における、制御プログラムの一例を示す図。
【図４】第１の実施形態における、制御プログラム内に含まれるフェイクコールの内容および位置を示す設定ファイルの一例を示す図。
【図５】第１の実施形態における、制御装置の処理の流れの一例を示すフローチャート。
【図６】第１の実施形態における、制御プログラム内に含まれるフェイクコールが有効化または無効化される状況の一例を示す図。
【図７】第２の実施形態における、制御装置の処理の流れの一例を示すフローチャート。
【図８】第２の実施形態における、制御プログラム内に含まれるフェイクコールが有効化または無効化される状況の一例を示す図。
【発明を実施するための形態】
【０００９】
以下、実施形態の制御装置およびプログラムを、図面を参照して説明する。
【００１０】
（第１の実施形態）
図１は、第１の実施形態における、制御システムの一例を示す図である。制御システム１は、制御装置３と、制御対象機器５とを含んでよいが、これに限定されない。例えば、制御システム１は、鉄道の駅における入出場を管理する自動改札制御システム、工場におけるボイラー機器等の各種機器の機器制御システム、銀行における紙葉類処理制御システム、乗用車における運転処理制御システムなどに適用することができる。また、制御システム１は、上記の他、リアルタイム制御などを目的とした任意の制御システムに適用することができる。
【００１１】
制御装置３は、制御対象機器５の動作を制御する。制御装置３は、プロセッサ１０と、通信Ｉ／Ｆ１２と、二次記憶装置（記憶部）１４と、メモリ１６と、ＲＯＭ（Read Only Memory）１８とを含んでよいが、これに限定されない。また、制御装置３は、外部装置（不図示）から各種データを受け取り、この各種データに基づいて、制御対象機器５の制御内容を決定してもよい。
【００１２】
プロセッサ１０は、例えばＣＰＵ（Central Processing Unit）である。プロセッサ１０は、ブートプログラムによって初期動作を開始し、二次記憶装置１４に格納されたプログラムを、メモリ１６に展開（ロード）して実行する。
【００１３】
通信部Ｉ／Ｆ１２は、制御対象機器５の動作を制御する制御信号等を、制御対象機器５に送信するインターフェース装置である。
【００１４】
二次記憶装置１４は、ＨＤＤ（Hard Disk Drive）、ＳＳＤ（Solid State Drive）などのフラッシュメモリ、ＥＥＰＲＯＭ（Electrically Erasable Programmable ROM）などである。二次記憶装置１４は、制御装置３のＯＳ（Operating System）、アプリケーションプログラム、設定ファイル、データなどを格納する。例えば、ＯＳは、有効／無効処理プログラムＰＧ１、異常検出プログラムＰＧ２などを含んでよいが、これに限定されない。また、例えば、アプリケーションプログラムは、制御対象機器５を制御するための制御プログラムＰＧ３などを含んでよいが、これに限定されない。
【００１５】
メモリ１６は、例えば、ＳＲＡＭ（Static Random Access Memory）などの揮発性メモリである。メモリ１６は、二次記憶装置１４に記憶されたＯＳおよびアプリケーションプログラムが図示しないＤＭＡ（Direct Memory Access）コントローラによってロードされる他、プロセッサ１０によってワーキングエリアとして使用される。
【００１６】
ＲＯＭ１８は、前述したブートプログラム、プロセッサ１０の初期設定値などを格納する。
【００１７】
制御対象機器５は、制御装置３の制御下において、各種処理を実行する。例えば、制御システム１が、鉄道の駅における入出場を管理する自動改札制御システムである場合、制御対象機器５は、自動改札機のアクチュエータ、表示装置などである。また、制御システム１が、工場におけるボイラー機器等の各種機器の機器制御システムである場合、制御対象機器５は、ボイラー機器等の各種機器である。
【００１８】
図２は、第１の実施形態における、制御装置３の機能ブロック図である。制御装置３は、ＯＳ実行部２０と、アプリケーション実行部３０とを含んでよいが、これに限定されない。ＯＳ実行部２０は、例えば、二次記憶装置１４に格納されたＯＳ（有効／無効処理プログラムＰＧ１、異常検出プログラムＰＧ２など）が、メモリ１６にロードされ、プロセッサ１０によって実行されることにより実現される。また、アプリケーション実行部３０は、例えば、二次記憶装置１４に格納された制御プログラムＰＧ３などが、メモリ１６にロードされ、プロセッサ１０によって実行されることにより実現される。
【００１９】
ＯＳ実行部２０は、有効／無効処理部２２と、異常検出部（検出部）２４とを含んでよいが、これに限定されない。
【００２０】
有効／無効処理部２２は、二次記憶装置１４からメモリ１６にロードされた制御プログラムＰＧ３に含まれるフェイクコールと呼ばれるダミー処理のそれぞれを有効化または無効化する。また、異常検出部２４は、二次記憶装置１４からメモリ１６にロードされた制御プログラムＰＧ３の実行状態を監視し、有効／無効処理部２２によりフェイクコールが有効化または無効化された結果と一致するか否かを判定することにより、制御プログラムＰＧ３の改ざんを検出する。これらの機能部の動作については後述する。
【００２１】
アプリケーション実行部３０は、制御対象機器５を制御するための種々の処理を実行する。
【００２２】
［制御プログラム］
本実施形態における制御プログラムＰＧ３には、二次記憶装置１４に格納された段階で、フェイクコールが予め組み込まれている。このフェイクコールとは、ＯＳに対して各種サービスを要求するシステムコール、または各種処理を実行するファンクションコールであって、制御プログラムＰＧ３の本来の制御処理に影響を及ぼさない処理を行うものである。例えば、このフェイクコールは、存在しないファイルを指定したオープンコールや、既に存在するファイルを、同じファイルで上書きする処理などであってよい。
【００２３】
図３は、第１の実施形態における、制御プログラムＰＧ３の一例を示す図である。この制御プログラムＰＧ３には、制御処理を実現するためのコードに加えて、１以上のフェイクコールが任意の位置に組み込まれている。図３の例では、３つのフェイクコール（図中、fake_call）が組み込まれている。例えば、この制御プログラムＰＧ３には、１．コール（Ａ）の呼び出しを行い（図中、call(A)）、２．コード１の処理を実行し（図中、code1）、３．第１のフェイクコール（Ｒ１）の呼び出しを行い（図中、fake_call(R1)）、４．コール（Ｂ）の呼び出しを行い（図中、call(B)）、５．コード２の処理を実行し（図中、code2）、６．第２のフェイクコール（Ｒ２）の呼び出しを行い（図中、fake_call(R2)）、７．第３のフェイクコール（Ｒ３）の呼び出しを行い（図中、fake_call(R3)）、８．コール（Ｃ）の呼び出しを行う（図中、call(C)）という順でコードが記載されている。尚、制御プログラムＰＧ３に組み込まれるフェイクコールの数および位置はこれに限定されない。
コール（Ａ）、コール（Ｂ）、およびコール（Ｃ）の各々は、ＯＳに対して各種サービスを要求するシステムコール、または各種処理を実行するファンクションコールである。例えば、コール（Ａ）、コール（Ｂ）、およびコール（Ｃ）の各々は、ファイルオープンを行う“open()”、入力の読み込みを行う“read()”、ユーザーＩＤの設定を行う“setreuid()”、ファイルをメモリにマッピングする“mmap()”などに対応する。
【００２４】
図４は、第１の実施形態における、制御プログラムＰＧ３内に含まれるフェイクコールの内容（図中、「Fake call」欄）および位置（図中、「Address」欄）を示す設定ファイルＣ１の一例を示す図である。この設定ファイルＣ１は、図３に示す制御プログラムＰＧ３とともに、二次記憶装置１４に格納されている。設定ファイルＣ１は、独立したファイルとして二次記憶装置１４に格納されていてもよいし、ＯＳの一部として埋め込まれていてもよい。図４に例示した設定ファイルＣ１は、制御プログラムＰＧ３内において、フェイクコールＲ１、Ｒ２、およびＲ３の各々が、アドレス３、６、および７に存在していることを示している。
【００２５】
（制御装置の動作）
図５および図６を参照して、第１の実施形態の制御装置３の動作について説明する。図５は、第１の実施形態における、制御装置３の処理の流れの一例を示すフローチャートである。図６は、第１の実施形態における、制御プログラム内に含まれるフェイクコールが有効化または無効化される状況の一例を示す図である。
【００２６】
まず、二次記憶装置１４に記憶された制御プログラムＰＧ３、有効／無効処理プログラムＰＧ１、異常検出プログラムＰＧ２、および設定ファイルＣ１が、メモリ１６にロードされる（ステップＳ１０１）。図６に示すように、例えば、制御プログラムＰＧ３が、メモリ１６内のアプリケーション領域Ａ１にロードされ、有効／無効処理プログラムＰＧ１、異常検出プログラムＰＧ２、および設定ファイルＣ１が、メモリ１６内のＯＳ領域Ａ２にロードされる。
【００２７】
次に、有効／無効処理部２２は、制御プログラムＰＧ３の実行開始前に、メモリ１６内のアプリケーション領域Ａ１にロードされた制御プログラムＰＧ３に含まれるフェイクコールのそれぞれを有効化（図６中、ＯＮ）または無効化（図６中、ＯＦＦ）する（ステップＳ１０３）。
【００２８】
図６に示す例では、有効／無効処理部２２は、ＯＳ領域Ａ２にロードされた設定ファイルＣ１に基づいて、制御プログラムＰＧ３内に記載された３つのフェイクコールの中で、アドレス３のフェイクコール（Ｒ１）およびアドレス６のフェイクコール（Ｒ２）を有効化し（ＯＮフラグを設定し）、アドレス７のフェイクコール（Ｒ３）を無効化する（ＯＦＦフラグを設定する）。
【００２９】
この際、有効／無効処理部２２は、どのフェイクコールを有効化または無効化したかを示すフラグを、設定ファイルＣ１内に書き込む（ステップＳ１０５）。図６の例では、有効／無効処理部２２は、「Flag」欄にＯＮまたはＯＦＦを示す情報を書き込む。尚、有効／無効処理部２２は、どのフェイクコールが有効化または無効化したかを示す情報を設定ファイルＣ１以外の設定ファイルに記憶させてもよい。
【００３０】
有効／無効処理部２２は、例えば、少なくとも１つのフェイクコールを有効化する。どのフェイクコールを有効化または無効化するかについてはランダムに決定してよい。また、有効／無効処理部２２は、全てのフェイクコールを無効化しても構わない。
【００３１】
また、全てのフェイクコールが有効化された制御プログラムＰＧ３を二次記憶装置１４に格納しておき、有効／無効処理部２２が、メモリ１６内のアプリケーション領域Ａ１にロードされた制御プログラムＰＧ３に含まれるフェイクコールの中で、無効化するフェイクコールを設定するようにしてもよい。また、フェイクコールのそれぞれを有効化または無効化する場合に、ＯＮフラグおよびＯＦＦフラグを制御プログラムＰＧ３に設定するのではなく、無効化するフェイクコール自体を、処理を実行しないコール（ＮＯＰ命令）に書き換える処理を行ってもよい。
【００３２】
次に、有効／無効処理部２２は、メモリ１６内のアプリケーション領域Ａ１にロードされ、フェイクコールのそれぞれの有効化または無効化が行われた制御プログラムＰＧ３の実行を開始する（ステップＳ１０７）。
【００３３】
次に、異常検出部２４は、制御プログラムＰＧ３の実行状態が適切か否かを判定する（ステップＳ１０９）。例えば、異常検出部２４は、制御プログラムＰＧ３に含まれるフェイクコールの中で有効化されたフェイクコールの内容および実行順序が、設定ファイルＣ１に定義された内容および実行順序と一致するか否かを判定する。有効化されたフェイクコールの内容および実行順序が設定ファイルＣ１に定義された内容および実行順序と一致する場合、異常検出部２４は、有効化されたフェイクコールが順序通りに実行されているため、制御プログラムＰＧ３の実行状態が適切であると判定する。制御プログラムの実行状態が適切であると判定した場合、異常検出部２４は、制御プログラムＰＧ３に改ざんが無いと判定する（ステップＳ１１１）。この場合、アプリケーション実行部３０による制御対象機器５の制御が継続されるとともに、異常検出部２４は、制御プログラムＰＧ３の実行状態が適切か否かの判定（ステップＳ１０９）を再度実施する。また、異常検出部２４は、制御プログラムＰＧ３に記載されたフェイクコールの中で無効化されたフェイクコールが実行されていないことをステップＳ１０９の判定条件に加えてもよい。
【００３４】
一方、制御プログラムの実行状態が適切でないと判定した場合、異常検出部２４は、制御プログラムＰＧ３の改ざんが行われたと判定する（ステップＳ１１３）。例えば、異常検出部２４は、アドレス３のフェイクコール（Ｒ１）が実行された後に、アドレス６のフェイクコール（Ｒ２）が実行されなかった場合、アドレス３のフェイクコール（Ｒ１）が実行されることなく、アドレス６のフェイクコール（Ｒ２）が実行された場合などにおいて、制御プログラムＰＧ３の改ざんが行われたと判定する。
【００３５】
この場合、異常検出部２４は、外部の監視端末に異常を通知する等のエラー処理を行い（ステップＳ１１５）、本フローチャートの処理を終了する。尚、この場合、異常検出部２４は、アプリ実行プログラムＰＧ３の実行を停止してもよい。
【００３６】
また、異常検出部２４は、制御プログラムＰＧ３に含まれるフェイクコールの実行状態に加え、制御プログラムＰＧ３に含まれる通常処理を行うためのコール（コール（Ａ）、コール（Ｂ）、コール（Ｃ））の実行状態を合わせて監視するようにしてもよい。また、異常検出部２４は、制御プログラムＰＧ３に含まれるフェイクコールが処理される際に利用されるパラメータの内容（例えば、ＯＳに引き渡すパラメータの内容）を合わせて監視するようにしてもよい。
【００３７】
以上説明した第１の実施形態の制御装置３によれば、少なくとも１つのダミー処理を含むプログラムを記憶した二次記憶装置１４と、メモリ１６と、二次記憶装置１４からメモリ１６にロードされたプログラムＰＧ３に含まれるダミー処理のそれぞれを有効化または無効化する有効／無効処理部２２と、プログラムＰＧ３の実行状態を監視し、有効／無効処理部２２によりダミー処理が有効化または無効化された結果と一致するか否かを判定することにより、プログラムＰＧ３の改ざんを検出する異常検出部２４とを備えることで、セキュリティ攻撃に対する保護機能を高めることができる。
【００３８】
第１の実施形態の制御装置３では、制御プログラムＰＧ３の実行開始前に、制御プログラムＰＧ３に含まれるフェイクコールがランダムに有効化または無効化されるため、制御プログラムＰＧ３に含まれる有効化されたフェイクコールの内容、数、および順序は制御プログラムＰＧ３の実行毎に異なる。このため、例えば、攻撃者が攻撃対象の装置の制御処理に関する通常動作の内容（制御プログラムのコードの内容）を把握できたとしても、実行毎に異なるフェイクコールの内容を把握することは出来ない。また、フェイクコールの内容や実行順序を解析したとしても、次の回の実行場面ではフェイクコールの内容や実行順序が変化することになるため、攻撃を失敗することが期待できる。このように、第１の実施形態の制御装置３によれば、ランダムに有効化されたフェイクコールの実行状態を監視することで、プログラムの改ざんを検知することができる。尚、毎回（メモリ１６への制御プログラムＰＧ３のロードの度に）フェイクコールの有効化または無効化の設定をランダムに行うのではなく、複数回に１回の頻度で行ってもよいし、制御プログラムＰＧ３のロードの度に行うよりも高頻度に行ってもよい。
【００３９】
（第２の実施形態）
以下、第２の実施形態について説明する。第２の実施形態に係る制御システム１は、制御プログラムＰＧ３の実行が開始された後、任意のタイミングでフェイクコールの内容を動的に変更する点で、第１の実施形態と異なる。以下の説明において、上記の第１の実施形態と同様の部分には同じ参照番号を付与し、その説明を省略あるいは簡略化する。
【００４０】
［制御装置の動作］
図７および図８を参照して、第２の実施形態の制御装置３の動作について説明する。図７は、第２の実施形態における、制御装置３の処理の流れの一例を示すフローチャートである。図８は、第２の実施形態における、制御プログラム内に含まれるフェイクコールが有効化または無効化される状況の一例を示す図である。
【００４１】
まず、二次記憶装置１４に記憶された制御プログラムＰＧ３、有効／無効処理プログラムＰＧ１、異常検出プログラムＰＧ２、および設定ファイルＣ１が、メモリ１６にロードされる（ステップＳ２０１）。
【００４２】
次に、有効／無効処理部２２は、メモリ１６内のアプリケーション領域Ａ１にロードされた制御プログラムＰＧ３の実行を開始する（ステップＳ２０３）。ここで、例えば、制御プログラムＰＧ３に含まれるフェイクコールは、いずれも有効化されている。
【００４３】
次に、有効／無効処理部２２は、制御プログラムＰＧ３に含まれるフェイクコールの実行条件を変更するフェイクコール変更トリガが発生したか否かを判定する（ステップＳ２０５）。このフェイクコール変更トリガは、例えば、図示しない他のプロセスによってランダムに発生される割り込み信号に基づくものである。
【００４４】
フェイクコール変更トリガが発生したと判定した場合、有効／無効処理部２２は、実行中の制御プログラムＰＧ３に含まれるフェイクコールのそれぞれを有効化または無効化する（ステップＳ２０７）。
【００４５】
図８に示す例では、有効／無効処理部２２は、ＯＳ領域Ａ２にロードされた設定ファイルＣ１に基づいて、制御プログラムＰＧ３内に記載された３つのフェイクコールの中で、アドレス７のフェイクコール（Ｒ３）を無効化する。例えば、有効／無効処理部２２は、アドレス７のフェイクコール（Ｒ３）を、処理を実行しないコール（ＮＯＰ命令）に書き換える処理を行う。有効／無効処理部２２は、どのフェイクコールを有効化または無効化するかについてはランダムに決定してよい。
【００４６】
この際、有効／無効処理部２２は、どのフェイクコールを無効化したかを示すフラグを、設定ファイルＣ１内に書き込む（図中、「Flag」欄にＯＦＦを示す情報を書き込む）（ステップＳ２０９）。
【００４７】
尚、有効／無効処理部２２は、アドレス７のフェイクコール（Ｒ３）を、処理を実行しないコール（ＮＯＰ命令）に書き換える処理に代えて、第１の実施形態のように、制御プログラムＰＧ３内に有効化または無効化を示すフラグを設定してもよい。また、有効／無効処理部２２は、どのフェイクコールが有効化または無効化されたかを示す情報を設定ファイルＣ１以外の設定ファイルに記憶させてもよい。
【００４８】
フェイクコール変更トリガが発生していないと判定した場合、有効／無効処理部２２は、上記のフェイクコールの実行条件の変更処理（ステップＳ２０７）および設定ファイルＣ１の書き換え処理（ステップＳ２０９）を行わない。
【００４９】
次に、異常検出部２４は、制御プログラムＰＧ３の実行状態が適切か否かを判定する（ステップ２１１）。例えば、異常検出部２４は、制御プログラムＰＧ３に記載されたフェイクコールの中で有効化されたフェイクコールの内容および実行順序が、設定ファイルＣ１に定義された内容および実行順序と一致するか否かを判定する。有効化されたフェイクコールの内容および実行順序が設定ファイルＣ１に定義された内容および実行順序と一致する場合、異常検出部２４は、有効化されたフェイクコールが順序通りに実行されているため、制御プログラムＰＧ３の実行状態が適切であると判定する。制御プログラムの実行状態が適切であると判定した場合、異常検出部２４は、制御プログラムＰＧ３に改ざんが無いと判定する（ステップＳ２１３）。この場合、アプリケーション実行部３０による制御対象機器５の制御が継続されるとともに、異常検出部２４は、フェイクコール変更トリガが発生したか否かを判定する処理（ステップＳ２０５）を再度実施する。
【００５０】
一方、制御プログラムの実行状態が適切でないと判定した場合、異常検出部２４は、制御プログラムＰＧ３の改ざんが行われたと判定する（ステップＳ２１５）。例えば、異常検出部２４は、アドレス３のフェイクコール（Ｒ１）が実行された後に、アドレス６のフェイクコール（Ｒ２）が実行されなかった場合、アドレス３のフェイクコール（Ｒ１）が実行されることなく、アドレス６のフェイクコール（Ｒ２）が実行された場合などにおいて、制御プログラムＰＧ３の改ざんが行われたと判定する。
【００５１】
この場合、異常検出部２４は、外部の監視端末に異常を通知する等のエラー処理を行い（ステップＳ２１７）、本フローチャートの処理を終了する。
【００５２】
以上説明した第２の実施形態の制御装置３によれば、制御プログラムＰＧ３の実行中に、制御プログラムＰＧ３に含まれるフェイクコールがランダムに有効化または無効化されるため、制御プログラムＰＧ３に含まれる有効化されたフェイクの内容、数、および順序を制御プログラムＰＧ３の実行中に変化させることができる。このため、例えば、攻撃者が攻撃対象の装置の制御処理に関する動作の内容（フェイクコールの実行条件を含む制御プログラムＰＧ３のコードの内容）を把握できたとしても、制御プログラムＰＧ３の改ざんを検知することができる。
【００５３】
以上説明した第２の実施形態の制御装置３では、制御プログラムＰＧ３の実行中に、制御プログラムＰＧ３に含まれるフェイクコールをランダムに有効化または無効化する例を説明した。しかしながら、制御プログラムＰＧ３の実行中に加え、上記の第１の実施形態の制御装置３のように、制御プログラムＰＧ３の実行開始前にフェイクコールを有効化または無効化する処理を行ってもよい。
【００５４】
以上説明した少なくとも一つの実施形態によれば、少なくとも１つのダミー処理を含むプログラムを記憶した二次記憶装置１４と、メモリ１６と、二次記憶装置１４からメモリ１６にロードされたプログラムＰＧ３に含まれるダミー処理のそれぞれを有効化または無効化する有効／無効処理部２２と、プログラムＰＧ３の実行状態を監視し、有効／無効処理部２２によりダミー処理が有効化または無効化された結果と一致するか否かを判定することにより、プログラムＰＧ３の改ざんを検出する異常検出部２４とを備えることで、セキュリティ攻撃に対する制御装置の保護機能を高めることができる。
【００５５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００５６】
１…制御システム、３…制御装置、５…制御対象機器、１０…プロセッサ、１２…通信Ｉ／Ｆ、１４…二次記憶装置、１６…メモリ、１８…ＲＯＭ、２０…ＯＳ実行部、２２…有効／無効処理部、２４…異常検出部、３０…アプリケーション実行部、Ａ１…アプリケーション領域、Ａ２…ＯＳ領域、Ｃ１…設定ファイル、ＰＧ１…有効／無効処理プログラム、ＰＧ２…異常検出プログラム、ＰＧ３…制御プログラム
【図１】
0006594213.tif 000002
【図２】
0006594213.tif 000003
【図３】
0006594213.tif 000004
【図４】
0006594213.tif 000005
【図５】
0006594213.tif 000006
【図６】
0006594213.tif 000007
【図７】
0006594213.tif 000008
【図８】
0006594213.tif 000009