(57)【要約】【課題】システムへの外部攻撃の迅速な検出。【解決手段】制御対象を制御する論理制御装置 を監視制御する、監視制御装置であって、前記論理制御装置から前記制御対象へ順次発行される制御指示からなる制御指示パタンを事前学習する学習部と、前記学習部が事前学習した前記制御指示パタンを保持するデータベースと、前記論理制御装置から前記制御対象への制御指示と前記データベース内の制御指示とを比較して、前記論理制御装置の異常を検知する比較部と、を含む。【選択図】図２
2018022296.tif 000002
【特許請求の範囲】
【請求項１】
制御対象を制御する論理制御装置を監視制御する、監視制御装置であって、
前記論理制御装置から前記制御対象へ順次発行される制御指示からなる制御指示パタンを事前学習する学習部と、
前記学習部が事前学習した前記制御指示パタンを保持するデータベースと、
前記論理制御装置から前記制御対象への制御指示と前記データベース内の制御指示とを比較して、前記論理制御装置の異常を検知する比較部と、を含む監視制御装置。
【請求項２】
請求項１に記載の監視制御装置であって、
前記論理制御装置の異常が検知された場合に、前記論理制御装置から前記制御対象への制御指示を遮断するセレクタ、を含む監視制御装置。
【請求項３】
請求項２に記載の監視制御装置であって、
前記セレクタは、前記制御指示を遮断した後、代替制御指示シーケンスを前記制御対象に向けて発行する、監視制御装置。
【請求項４】
請求項２又は３に記載の監視制御装置であって、
前記比較部は、
前記制御対象への制御指示が遮断された後、前記論理制御装置から前記制御対象への制御指示と前記データベース内の制御指示とを比較し、
前記論理制御装置の復旧後の正常制御指示を再受信したと判定すると、前記セレクタに、前記論理制御装置から前記制御対象への制御指示の遮断を解除することを指示する、監視制御装置。
【請求項５】
請求項３に記載の監視制御装置であって、
前記セレクタは、予め定められた設定に従って、前記データベース内の制御指示シーケンスから前記代替制御指示シーケンスを生成する、又は、前記データベース内の制御指示パタンとは別に予め登録されている制御指示シーケンスを前記代替制御指示シーケンスとして発行する、監視制御装置。
【請求項６】
請求項３に記載の監視制御装置であって、
前記セレクタは、遮断した前記制御指示に連続する前記代替制御指示シーケンスを前記制御対象に向けて発行する、監視制御装置。
【請求項７】
請求項１に記載の監視制御装置であって、
前記論理制御装置の復旧処理を行う復旧機能部を含む、監視制御装置。
【請求項８】
請求項７に記載の監視制御装置であって、
前記復旧機能部は、前記論理制御装置に対する復旧処理と共に、前記比較部の初期化を行う、監視制御装置。
【請求項９】
請求項７に記載の監視制御装置であって、
前記復旧機能部は、前記論理制御装置に対する復旧処理後、所定時間経過した後に、前記比較部の比較結果を参照して、前記論理制御装置が復旧しているか判定する、監視制御装置。
【請求項１０】
請求項１に記載の監視制御装置であって、
前記論理制御装置の異常が検知されたことを前記論理制御装置の管理制御装置に通知する異常通知部を含む、監視制御装置。
【請求項１１】
請求項１０に記載の監視制御装置であって、
前記異常通知部は、前記管理制御装置に対する異常通知において、異常レベルを示す監視制御装置。
【請求項１２】
請求項１に記載の監視制御装置であって、
前記学習部は、前記論理制御装置からの制御開始信号に応答して、前記制御指示の事前学習を開始する、監視制御装置。
【請求項１３】
請求項１に記載の監視制御装置であって、
前記比較部は、前記比較の結果が示す差分が予め設定された誤差範囲内である場合、前記論理制御装置の異常が発生していないと判定する、監視制御装置。
【請求項１４】
請求項１３に記載の監視制御装置であって、
複数の制御対象毎に、前記比較部の比較結果と予め定められた誤差判定との比較の有無を管理する、管理情報を保持する、監視制御装置。
【請求項１５】
制御対象を制御する論理制御装置を監視制御する方法であって 、
前記論理制御装置から前記制御対象へ順次発行される制御指示からなる制御指示パタンを事前学習し、
事前学習した前記制御指示パタンをデータベースに格納し、
前記論理制御装置から前記制御対象への制御指示と前記データベース内の制御指示とを比較して、前記論理制御装置の異常を検知する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理制御装置の監視制御に関する。
【背景技術】
【０００２】
ＩｏＴ（Ｉｎｔｅｒｎｅｔ  ｏｆ  Ｔｈｉｎｇｓ：モノのインターネット）の普及に伴い、外部ネットワークを経由した不正アクセスによるサイバ攻撃へのセキュリティ需要が高まっている。
【０００３】
特に、ＦＡ（Ｆａｃｔｏｒｙ  Ａｕｔｏｍａｔｉｏｎ）、ＰＡ（Ｐｒｏｃｅｓｓ  Ａｕｔｏｍａｔｉｏｎ）等の産業制御システムにおいて、従来外部から完全に切り離され工場内で閉じていたネットワークが、近年クラウドサービスや分析ツール等の外部情報システムと接続され、産業制御システム内で収集した設計、開発、生産に関するあらゆるデータの利活用によって生産効率を向上させる動きが活発化している。
【０００４】
その反面、産業制御システムのネットワークが外部ネットワークと接続されることにより、外部ネットワークを経由したサイバ攻撃の脅威に晒される頻度が増加し、２０１０年のＳｔｕｘｎｅｔの例のようにシステムを制御する管理制御装置（ＳＣＡＤＡ：  Ｓｕｐｅｒｖｉｓｏｒｙ  Ｃｏｎｔｒｏｌ  Ａｎｄ  Ｄａｔａ  Ａｃｑｕｉｓｉｔｉｏｎ）や論理制御装置（ＰＬＣ：  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）の異常作動を誘発させる脅威への対策が急務となっている。
【０００５】
産業制御システムにおいては、各工場で生産される製品製造のためのロボットアーム等の大型アクチュエータ、薬品濃度や炉の圧力等を管理する計装装置等の制御対象が論理制御装置に予め書き込まれる制御プログラムによってシーケンス制御されている。
【０００６】
また、これら論理制御装置を統括管理する管理制御装置は、論理制御装置の内蔵メモリデバイスに制御プログラムを書き込み、また論理制御装置の運用状態をＨＭＩ（Ｈｕｍａｎ  Ｍａｃｈｉｎｅ  Ｉｎｔｅｒｆａｃｅ）を通じて保守者に可視化し、システム全体の管理を可能にしている。
【０００７】
これら管理制御装置、論理制御装置がサイバ攻撃の脅威に晒されることで制御対象が異常動作し、工場内の設備、生産計画等に甚大な損害をもたらす可能性がある。
【０００８】
このような攻撃の対策として、特許文献１に示される技術がある。特許文献１の技術は、制御対象を制御する制御装置の動作状態を監視する制御装置の監視方法で、制御装置は、自身とは別の制御装置から、別の制御装置で実行されているプログラムが出力した制御情報を取得し、取得した制御情報を基に、動作検証用のデータを作成することを特徴とする。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１３−１４３０７７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
特許文献１におけるシステムにおいて、１台の論理制御装置がマスタであり、その他の論理制御装置はスレーブである。マスタ装置のみが、制御対象へ制御コマンドを発行できる。マスタ装置がウイルス感染した場合の制御コマンド比較シーケンスと、スレーブ装置がウイルス感染した場合の制御コマンド比較シーケンスが異なり、かつマスタ装置がウイルス感染した場合は、現マスタ装置と切替後マスタ装置との間で、制御シーケンスの同期処理が必要となる。
【００１１】
そのため、制御対象を停止する等の処置が実行されるまでに時間を要し、その間の動作の信頼性、可用性が担保されず、生産設備や作業員に重大な損害を与える恐れがある。
【課題を解決するための手段】
【００１２】
本発明の一態様は、制御対象を制御する論理制御装置 を監視制御する、監視制御装置であって、前記論理制御装置から前記制御対象へ順次発行される制御指示からなる制御指示パタンを事前学習する学習部と、前記学習部が事前学習した前記制御指示パタンを保持するデータベースと、前記論理制御装置から前記制御対象への制御指示と前記データベース内の制御指示とを比較して、前記論理制御装置の異常を検知する比較部と、を含む。
【発明の効果】
【００１３】
本発明の代表的な実施形態によれば、システムへの外部攻撃の迅速な検出が可能となる。前述した以外の課題、構成、及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１４】
【図１】実施例１に係るネットワーク全体図である。
【図２】実施例１に係るＧＷの部品構成を示した図である。
【図３】実施例１に係るＧＷの機能部構成を示した図である。
【図４】実施例１に係る各装置起動から運用中の主要動作シーケンスである。
【図５】実施例１に係る制御装置起動、ＤＢ書込み、学習動作シーケンスである。
【図６Ａ】実施例１に係る機器情報ＤＢの構成図である。
【図６Ｂ】実施例１に係る許容量ＤＢの構成図である。
【図７】実施例１に係る安全制御パタンＤＢ、制御パタンＤＢの構成図である。
【図８】実施例１に係る制御コマンドのフレーム構成図である。
【図９】実施例１に係る解析比較処理フロー（その１）である。
【図１０】実施例１に係る解析比較処理フロー（その２）である。
【図１１】実施例１に係る解析比較処理フロー（その３）である。
【図１２】実施例１に係る安全制御パタンを用いる場合の制御フローである。
【図１３】実施例１に係る事前学習制御パタンを用いる場合の制御フローである。
【図１４】実施例１に係る復旧、及び通知処理フローである。
【図１５】実施例２に係るネットワーク全体図である。
【図１６】実施例２に係るＧＷの構成を示した図である。
【図１７】実施例２に係る各装置起動から運用中の主要動作シーケンスである。
【図１８】実施例２に係る制御装置起動、ＤＢ書込み、学習動作シーケンスである。
【図１９】実施例２に係る許容量ＤＢの構成図である。
【図２０】実施例２に係る安全制御パタンＤＢ、制御パタンＤＢの構成図である。
【図２１】実施例２に係る制御パタンＤＢの学習例である。
【図２２】実施例２に係る解析比較処理フローである。
【図２３】実施例２に係る安全制御パタンを用いる場合の制御フローである。
【図２４】実施例２係る事前学習制御パタンを用いる場合の制御フローである。
【発明を実施するための形態】
【００１５】
本発明の実施形態を以下に実施例として図面を用いて詳細に記載する。実施例に記載する装置構成、テーブル構成、保持値、及びデータベース（ＤＢ）への書込み順序等は一例であり、本発明が適用されるシステムの構成や動作を制限するものではない。
【００１６】
以下に説明する実施例は、少なくとも１つの論理制御装置から構成される制御システムにおいて、論理制御装置から切り離された単独のゲートウェイ（ＧＷ）を論理制御装置と制御対象を接続する伝送線路上に配置する。ＧＷは、制御指示学習機能で予め学習した制御指示シーケンスと、論理制御装置から制御対象宛に発行される制御指示シーケンスを解析。比較する。これにより、ＧＷは、論理制御装置に対する攻撃を検出し、被攻撃対象からの悪意指示を遮断する。
【００１７】
ＧＷは、悪意指示を検出した時点で、論理制御装置に代わり予め学習した制御指示シーケンス又は保守者に予め登録された制御指示シーケンスを、制御対象に対して即時送信する。これにより、制御対象の稼働停止時間を短縮し、可用性を高める。
【００１８】
ＧＷは、保守者の処理を介さない自律的な復旧処理を以て論理制御装置の復旧を試みる。復旧後の論理制御装置が発行する制御対象への制御指示の正常性を再確認した時点で、ＧＷは、論理制御装置からの制御指示の遮断を解除する。
【実施例１】
【００１９】
図１は、本実施例に係る制御システムの構成装置、及びネットワーク全体を示す図である。制御システムは、管理制御装置１００、並びにその配下に、論理制御装置１０２制御及び入出力装置１０３を含む。各装置間の情報伝達は、ケーブルや無線装置等の物理的な伝送媒体を介して行われる。
【００２０】
管理制御装置１００は、ネットワーク、構成装置、装置毎の運用状態等を統合管理する。論理制御装置１０２は、制御対象１０１をシーケンス制御するためのプログラムを保持する。制御入出力装置１０３は、論理制御装置１０２からの制御コマンドを受信、解釈し、制御対象１０１をパルス等の電気信号（制御信号）を用いて制御する。制御コマンド及び制御信号は、それぞれ、制御対象１０１への制御指示である。
【００２１】
制御対象１０１としては、ロボットアーム等の大型アクチュエータや計装装置、リニアアクチュエータ、モータ等が例として挙げられるが、実施例１において制御対象の機構を限定しない。
【００２２】
論理制御装置１０２、制御入出力装置１０３、制御対象１０１は、製造製品種別、処理の差異毎に、個別の制御系１０４として、管理制御装置１００に管理される。各制御系１０４の稼働状況、異常発生状況等は、各制御系１０４と管理制御装置１００を接続するフィールドネットワーク１０５を介して、管理制御装置１００に通知される。管理制御装置１００は、制御対象１０１をシーケンス制御するためのプログラムを、フィールドネットワーク１０５を介して、論理制御装置１０２に送信する。
【００２３】
ここで、フィールドネットワーク１０５は外部サイトに設置されるクラウドサービス等の情報システム、及び拠点間を接続するオープンな外部ネットワークと接続され、外部拠点からの遠隔操作、及び外部拠点への情報送信が可能であるとする。
【００２４】
外部ネットワークからのセキュリティ攻撃に対応するため、実施例１においては、論理制御装置１０２と制御入出力装置１０３の伝送媒体上にゲートウェイ（ＧＷ）１０６が配置される。
【００２５】
ＧＷ１０６は、管理制御装置１００と伝送路１０７を介して接続し、論理制御装置１０２１と伝送路０８を介して接続する。ＧＷ１０６は、ＧＷ１０６上で実行する処理に必要な情報を、管理制御装置１００、及び論理制御装置１０２から取得できる。ＧＷ１０６は、論理制御装置１０２から逐次発行される制御コマンドを解析及び比較することで、論理制御装置１０２へのサイバ攻撃を検知する。本機能の詳細は後述する。
【００２６】
図２は、管理制御装置１００、論理制御装置１０２、ＧＷ１０６、制御入出力装置１０３、制御対象１０１間の接続、及びＧＷ１０６の物理構成を示した図である。図中の矢印は、始点から終点に対する情報伝達を表しており、実線は制御コマンド、破線はデータベース（ＤＢ）の保持内容書込みや読み出し、及び内部処理指示信号を表す。
【００２７】
ＧＷ１０６は、論理制御装置１０２が発行する制御コマンドを、インタフェース２００を介してＧＷ内部に取り込み、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）２０１等のハードウェア部品上に予め設計した論理回路２０２上で処理する。ここでいう処理は、後述する制御コマンドの解析比較処理に代表される、本実施例の効果を奏するための処理である。
【００２８】
ＧＷ１０６が具備するＤＢは、ＧＷ１０６上の主記憶装置２０３、もしくはＦＰＧＡ２０１が内部に具備する記憶領域２０４に構成される。ＣＰＵ２０５は、データや信号発行トリガ条件を解釈することで、ＧＷ１０６の初期設定やＤＢ書込み、外部装置への指示信号発行を実行する。
【００２９】
ＦＰＧＡ２０１を用いた構成は一例であり、ＦＰＧＡ２０１上に構成する内部論理回路を、ＣＰＵ２０５が実行するプログラムに置き換え、本実施例の効果を奏する処理の一部、または全部をソフトウェアによって実行してもよい。
【００３０】
図３は、ＧＷ内部の機能ブロック構成を示した図である。ＧＷ１０６は、論理制御装置１０２が内部メモリ３００に格納されたプログラムに基づいて順次発行する制御コマンドを、運用開始時点で予め学習部３０１に複製して取り込み、制御コマンドの順序や処理内容などをＤＢに格納する。
【００３１】
本来の信号線路上から枝分かれした機能ブロックに制御コマンドを複製して取り込むことで、本来の制御コマンド伝送を妨げることなく学習処理を実施することができる。本学習処理は、論理制御装置１０２が送信する制御コマンドシーケンスが、制御対象１０１を一定周期で繰り返し制御することを前提とし、学習部３０１で制御コマンドが一巡したことを検知した時点で処理を終了する。順次発行（順次実行）される制御コマンド群を、制御コマンドシーケンスと呼ぶ。論理制御装置１０２は、１サイクルの制御コマンドシーケンスを繰り返し発行する。
【００３２】
ここで、ＧＷ１０６は安全制御パタンＤＢ３０２、許容量ＤＢ３０３、制御パタンＤＢ３０４、機器情報ＤＢ３０５の４種のＤＢを有する。学習部３０１が学習した制御コマンド情報（制御コマンドシーケンス）は、制御パタンＤＢ３０４で保持される。制御パタンＤＢ３０４は、論理制御装置１０２と制御対象１０１の一つのペアに対して、少なくとも１サイクルの制御コマンドシーケンスを格納する。その他ＤＢに関する詳細は、後述するＤＢ使用用途に係る記述にて明らかにされる。
【００３３】
制御パタンＤＢ３０４で保持される制御コマンド情報は、解析比較部３０６によって参照される。解析比較部３０６は、論理制御装置１０２から発行される制御コマンドと、制御パタンＤＢ３０４に格納されている制御コマンドの順序、制御内容を比較する。
【００３４】
これにより、解析比較部３０６は、制御コマンドが通常運用時のパタンから逸脱していることを検知し、制御対象１０１の異常制御を誘発する悪意コマンドを検出する。本解析比較処理のため、前述した学習処理と同様に、ＧＷ１０６は、論理制御装置１０２から発行される制御コマンドを複製して解析比較部３０６に取り込む。
【００３５】
実施例１において悪意コマンドを検出した際のＧＷ１０６の挙動は、保守者によって予め定められるＧＷ１０６の代替モード設定に応じて変化する。
【００３６】
代替モードは、ＧＷ１０６が悪意コマンドを検出した時、論理制御装置１０２からの制御コマンドを遮断し、論理制御装置１０２に代わりＧＷ１０６が制御対象１０１へ代替の制御コマンドを発行する際の動作を、規定する。実施例１において、代替モードとして、事前学習した制御パタンを用いて論理制御装置１０２の代替を行う学習制御モード、及び保守者が事前登録した安全制御パタンを用いて論理制御装置１０２の代替を行う安全制御モードが存在する。
【００３７】
安全制御パタンとして、正常運用時の制御や事前学習した制御とは異なり、制御対象１０１の破壊や、作業員の人命保護を最優先に考慮し、これら保護対象への影響を最小限に抑えることを目的とした制御パタンが登録されることを、想定する。
【００３８】
学習制御モードにおいて、ＧＷ１０６は、悪意コマンド検出時に、制御パタンＤＢ３０４を参照し、事前学習したコマンドの順序、制御内容に従って代替コマンドを生成し、論理制御装置１０２に代わって制御コマンドを発行する。
【００３９】
安全制御モード運用に関して、保守者は悪意コマンド検出時の代替コマンド構成を予め決定し、ＧＷ１０６が安全制御パタンＤＢ３０２に格納する。ＧＷ１０６は悪意コマンド検出時に安全制御パタンＤＢ３０２を参照し、保持されている順序、制御内容に従って代替コマンドを生成し、論理制御装置１０２に代わって制御コマンドを発行する。
【００４０】
代替モード設定は、適用するシステムの重要性、生産計画、作業員、制御対象、製造製品への影響を考慮して保守者が予め決定する。ＧＷ１０６は、代替モードの設定情報を保持する。ＧＷ１０６は、代替モード設定に応じたＤＢの参照、代替制御コマンド生成と送信、復旧後コマンドへの切り戻しを、セレクタ３０７によって自律的に実施する。
【００４１】
ここで、システムが、事前学習した制御パタンからの僅かな誤差を許容する場合について考える。厳密性を重視する産業制御システムの例は、自動車工場や化学薬品プラントにおけるシステムである。これらシステムにおいて、制御対象の僅かな制御の誤差が、製造製品、生産設備破壊、混合薬品の過剰な化学反応を誘発し、企業に対し重大な損失を与える事態に直結する。したがって、予め設定した制御パタンからの順序、制御の誤差は許容されない。
【００４２】
しかし、食品工場における充填工程、梱包工程等、予め設定した処理タイミングや充填量の制御に多少の誤差が生じても重大な損失に直結しないような産業制御システムが存在する。このようなシステムにおいては、事前学習パタンと制御コマンドの厳密な比較や制御コマンドの即時遮断は、システム稼働の許容範囲を必要以上に制限してしまう恐れがある。
【００４３】
そこで、ＧＷ１０６は、事前学習した制御コマンドと論理制御装置１０２から発行される制御コマンドの間で許容される制御量誤差を保持できるＤＢを含む。ＧＷ１０６は、保守者によって予め設定された制御量誤差を、許容量ＤＢ３０３に格納する。
【００４４】
解析比較部２０６は、コマンドを比較する際に、許容量ＤＢ３０３を参照する。解析比較部２０６は、学習した制御コマンドの制御量と論理制御装置１０２が発行する制御コマンドの間の制御量誤差を演算する。許容量範囲内に誤差が抑えられていれば、ＧＷ１０６は、論理制御装置１０２からの制御コマンドを遮断せず、正常運用を継続する。
【００４５】
これにより、保守者が許容する制御量誤差範囲内においては制御システムを停止することなく継続的に稼働するシステムを構築できる。
【００４６】
復旧機能部２０８は、解析比較部３０６において悪意コマンドが検出された際、悪意コマンド発行の原因となっている管理制御装置１００や論理制御装置１０２への外部攻撃に対して、復旧処理を実施する。
【００４７】
実施例１においては、論理制御装置１０２への初期化指示、及び論理制御装置１０２に保持される制御プログラムの再書き込み指示発行が、例として挙げられる。装置復旧が困難な場合、復旧機能部２０８は、論理制御装置１０２の外部電源モジュール３０９に対して電源遮断を指示する信号を発行する。
【００４８】
復旧処理を実施する際、発生している異常レベルが、異常通知部３１０より管理制御装置１００に通知される。これにより保守者は発生している異常の緊急度を管理制御装置１００またはＨＭＩ端末上で把握することができる。
【００４９】
なお、実施例１における復旧手順、及び通知手順は一例であり、本発明が適用されるシステムや装置の復旧、通知手段を限定するものではない。
【００５０】
図４は、制御システム内の装置の起動から、制御対象１０１による制御、論理制御装置１０２が外部から攻撃を受けた場合の代替コマンド送信、そして復旧処理までの、代表的な処理フローを示したシーケンス図である。
【００５１】
まず、管理制御装置１００は、論理制御装置１０２内のメモリ３００に対し、制御対象１０１の制御シーケンスを記述した制御プログラムを書き込む（Ｓ４００）。
【００５２】
プログラムを内部メモリ３００に保持した論理制御装置１０２は、プログラムを有効化し（Ｓ４０１）、ＧＷ１０６に対して制御コマンド送信を開始する（Ｓ４０２）。ＧＷ１０６は論理制御装置１０２から制御コマンドを受信する毎に、コマンド事前学習機能によりコマンドの順序や制御内容等をＤＢに格納する（Ｓ４０３）。
【００５３】
ＧＷ１０６は、コマンド学習が終了した時点で、論理制御装置１０２から発行される制御コマンドの監視を開始し、受信する制御コマンドの内容を、逐一、解析かつＤＢ保持しているコマンド情報と比較する（Ｓ４０４）。論理制御装置１０２のプログラム改竄によって論理制御装置１０２から悪意コマンドが送信された場合（Ｓ４０５）、解析比較機能により攻撃を検知することができる。
【００５４】
攻撃検知後は、ＧＷ１０６の解析比較部３０６は、セレクタ３０７に対して論理制御装置１０２からの制御コマンドの遮断を指示する（Ｓ４０６）。セレクタ３０７は、予め保守者が設定した代替モードに対応したＤＢを参照し、代替コマンド（代替コマンドシーケンス）を生成して制御入出力装置１０３に対して送信する（Ｓ４０７）。代替コマンドシーケンスは、遮断された制御コマンドシーケンスに連続する（同期する）ように、最初の代替制御コマンドが選択される。
【００５５】
ＧＷ１０６は、論理制御装置１０２に初期化指示を発行し（Ｓ４０８）、管理制御装置１００にプログラム書換え指示を発行する（Ｓ４０９）。論理制御装置１０２の初期化（Ｓ４１０）、及び論理制御装置１０２が保持するプログラムの書き換え（Ｓ４１１）が実施される。これにより、論理制御装置１０２が復旧した場合、本来の正常制御コマンドが再度論理制御装置１０２からＧＷ１０６に向けて送信される（Ｓ４１２）。
【００５６】
ＧＷ１０６は、代替コマンド（代替コマンドシーケンス）を送信、及び復旧処理中も、制御コマンドの監視を継続している。解析比較部３０６は、復旧後の正常制御コマンドを再受信したと判定すると、セレクタ３０７に対してコマンド遮断解除の指示を発行する（Ｓ４１３）。正常制御コマンドが、制御対象１０１に対して再度送信される（Ｓ４１４）。
【００５７】
なお、ここでは論理制御装置１０２が復旧機能部３０８の処理により正常に復旧完了した場合のシーケンスを示した。復旧処理を実施したにも関わらず復旧完了せず、論理制御装置１０２から悪意コマンドが発行され続けた場合、ＧＷ１０６は、論理制御装置１０２の外部電源モジュール３０９を遮断し、制御を中断する。この際、ＧＷ１０６は、電源遮断に対応する異常レベルを管理制御装置１００に通知する。
【００５８】
図５は、実施例１に係る制御システムの運用開始から、ＧＷ１０６で制御コマンド学習が完了するまでのシーケンス図である。論理制御装置１０２への制御プログラム書込みが完了すると（Ｓ４００）、論理制御装置１０２は、管理制御装置１００に対し書込み正常完了通知を送信する（Ｓ５００）。
【００５９】
本完了通知をトリガに、管理制御装置１００は、ＧＷ１０６に対し、論理制御装置１０２及び制御入出力装置１０３が含む物理インタフェースの固有情報を送信する。ＧＷ１０６は、本情報を機器情報ＤＢ３０５に格納する（Ｓ５０１）。
【００６０】
機器情報ＤＢ３０５内の物理インタフェースの固有情報は、ＧＷ１０６の解析比較部３０６により、コマンド比較する際に参照される。当該情報は、制御コマンドの送信元及び宛先が、それぞれ事前に保守者によって登録された論理制御装置１０２及び制御入出力装置１０３であることを確認するために用いられる。
【００６１】
ＧＷ１０６は、機器情報ＤＢ３０５に全ての情報を格納すると、管理制御装置１００に正常書込み完了通知を送信する（Ｓ５０２）。次に、保守者は、前述した代替モードを選択し、管理制御装置１００からＧＷ１０６に設定する（Ｓ５０３）。
【００６２】
設定完了後、安全制御モードを利用する場合、保守者は、管理制御装置１００からＧＷ１０６の安全制御パタンＤＢ３０２に対し、安全制御モードで制御対象１０１を制御するための制御コマンドを登録する（Ｓ５０４）。
【００６３】
ＧＷ１０６は、全ての安全制御パタン書込みが正常終了した時点で、書込み完了通知を管理制御装置１００に対し発行する（Ｓ５０５）。ここで、代替モードとして学習制御モードが使用される場合、安全制御パタンＤＢ３０２へのパタン書込みは省略される。
【００６４】
悪意コマンド検出時、悪意コマンドが保持する制御量と、事前学習した制御コマンドが保持する制御量との間で誤差を許容する場合、保守者は、管理制御装置１００からＧＷ１０６の許容量ＤＢ３０３に対し、許容する制御量誤差値を格納する（Ｓ５０６）。
【００６５】
ＧＷ１０６は、全ての許容誤差書込みが正常終了した時点で、書込み完了通知を管理制御装置１００に対し発行する（Ｓ５０７）。保守者が制御システムの性質を鑑みて、制御量誤差を許容しないと判断した場合、許容量ＤＢ３０３への許容誤差書込みは省略される。
【００６６】
管理制御装置１００がＧＷ１０６から全てのＤＢに関する書込み完了通知を受信すると、保守者は、システム運用を開始するため、管理配下の論理制御装置１０２に対し、制御プログラムの有効化指示信号を発行する（Ｓ５０８）。
【００６７】
論理制御装置１０２は、本指示信号を受信すると、内部メモリ３００に格納されている制御プログラムを有効化し、制御開始信号を送信し、さらに、制御コマンドの送信を開始する（Ｓ５０９）。ＧＷ１０６は、論理制御装置１０２からの制御コマンド受信をトリガに、制御コマンドの事前学習を開始し、制御パタンＤＢ３０４に制御コマンドの順序、制御量を格納する（Ｓ５１０）。
【００６８】
実施例１における制御コマンドは、制御対象１０１に対してある一定周期で繰り返し処理を実施させることを前提としている。学習処理の際、ＧＷ１０６は、制御コマンドに記載されている情報を解析し、繰り返し処理の最終制御に該当する制御コマンドを受信したと判定した時点で、制御パタンＤＢ３０４への制御コマンドの書込みを終了する（Ｓ５１１）。
【００６９】
ＧＷ１０６は、例えば、制御コマンド内部に格納された制御シーケンスの最終処理を示す情報を読み取って繰り返し処理の終了を検知すると、学習を終了する。または、ＧＷ１０６は、制御コマンド情報を所定期間監視し、監視区間内の繰り返しシーケンスを検知するとことで繰り返し処理の終了を検知すると、学習を終了する。
【００７０】
本シーケンスで説明した機器情報ＤＢ３０５、安全制御パタンＤＢ３０２、許容量ＤＢ３０３の書込み順序は一例であり、各ＤＢへの書込みシーケンスを限定するものではない。但し、制御パタンＤＢ３０４以外の全てのＤＢに対する書込みが終了し、論理制御装置１０２が制御対象１０１に対して制御コマンド送信を開始した時点で、ＧＷ１０６は、コマンドを学習する際に制御パタンＤＢ３０４に書込む。
【００７１】
図６Ａは、機器情報ＤＢ３０５の構成図である。機器情報ＤＢ３０５は、ＧＷ１０６に接続する論理制御装置１０２及び制御入出力装置１０３の物理インタフェースの固有情報を保持する。
【００７２】
実施例１において、制御コマンドは、Ｅｔｈｅｒｎｅｔ（登録商標）等のＬ２（Ｌａｙｅｒ  ２）ネットワークで定義されるフレーム形式を用いて装置間伝送されることを前提とする。機器情報ＤＢ３０５が保持する情報は、Ｌ２ネットワークにおける装置アドレスを示すＭＡＣアドレスと、フレーム種別を示すタイプ値を含む。
【００７３】
機器情報ＤＢ３０５は、送信元アドレス（ＳＡ：Ｓｏｕｒｃｅ  Ａｄｄｒｅｓｓ）６００、宛先アドレス（ＤＡ：Ｄｅｓｔｉｎａｔｉｏｎ  Ａｄｄｒｅｓｓ）６０１を保持する。実施例１において、ＭＡＣ  ＳＡは、論理制御装置１０２のＭＡＣアドレス、ＭＡＣ  ＤＡは制御入出力装置１０３のＭＡＣアドレスに該当する。これは、制御コマンドが保守者の意図する正しい論理制御装置１０２から送信され、正しい制御入出力装置１０３で受信される設定であることを、ＧＷ１０６の解析比較部３０６が判定するためである。タイプ値６０２は、制御コマンドの機能定義を表す。
【００７４】
図６Ｂは許容量ＤＢ３０３の構成図である。許容量ＤＢ３０３は、論理制御装置番号６０３、制御入出力装置番号６０４、制御対象番号６０５、許容量有効ビット６０６、コマンド間隔許容量６０７、制御量許容量６０８の情報を保持する。
【００７５】
各装置番号は、制御システムを構築する際に保守者から与えられる各装置を一意に特定するためのシステム上の固有番号である。
【００７６】
許容量有効ビット６０６は、各装置に属する許容量を運用上で有効化するか否かを保守者が設定するための情報であり、’０’は無効、’１’は有効を表す。本ビット情報により、制御システム内で制御誤差を許容する装置と、許容しない装置を混在させることが可能となり、より柔軟性の高いシステムを構築することができる。
【００７７】
制御誤差の許容量として、コマンド間隔６０７及び制御量６０８が保持されている。コマンド間隔６０７は、コマンド間のＧＷ１０６への到達時間間隔に対する誤差の許容量を保持し、制御量６０８は各制御対象の駆動量に対する誤差の許容量を保持する。
【００７８】
図７は、安全制御パタンＤＢ３０２及び制御パタンＤＢ３０４に共通の構成図である。両ＤＢ３０２、３０４は、コマンド順序や制御内容を保持し、テーブルを構成する要素に違いがないため、同一のテーブル構成を有する。
【００７９】
テーブルを構成する要素は、コマンド番号７００、最終ビット７０１、コマンド間隔７０２、論理制御装置番号７０３、制御入出力装置番号７０４、制御対象番号７０５、制御量７０６である。装置番号は、図６Ｂと同様である。
【００８０】
コマンド番号７００は、制御コマンドのシーケンスを表す番号であり、制御コマンドに対して管理制御装置１００及び論理制御装置１０２が付与する。コマンド学習の際、ＧＷ１０６は、コマンド内に格納されるコマンド番号を抽出し、ＤＢに格納する。
【００８１】
最終ビット７０１は、制御コマンドが制御対象１０１に対し一定周期で繰り返し処理を実施する場合に制御シーケンスの最終コマンドであることを表すビットである。例えば、コマンド学習において、ＧＷ１０６は、コマンド周期を検出してＤＢに格納する。または、論理制御装置１０２が、生成する制御コマンド内部に最終ビット情報を付与し、ＧＷ１０６がそれを制御コマンドから抽出しＤＢに格納する。
【００８２】
コマンド間隔７０２は、直前の制御コマンドとの受信間隔を示す。ＧＷ１０６は、学習処理において、時間計測機能（例えばタイマ）を用いてコマンド間隔を測定し、ＤＢに格納する。安全制御モードにおいては、ＧＷ１０６は、保守者から指定されたコマンド間隔を、ＤＢに格納する。
【００８３】
制御量７０６は、制御対象１０１の駆動量を指定する。保守者は、制御対象１０１に求める稼働範囲や役割に基づき、制御量を決定する。コマンド学習において、ＧＷ１０６は、コマンド内部に格納される制御量の値を抽出し、ＤＢに格納する。
【００８４】
図８は、論理制御装置１０２、及びＧＷ１０６が制御対象１０１を制御するために発行する制御コマンドのフレームフォーマットである。本コマンドは、前述したように、Ｌ２ネットワークにて用いられるフレーム構成に基づいている。本コマンドは、ＭＡＣアドレス、タイプ値の他に、機能ヘッダ領域８００、データ領域８０１、フレームの誤り検出に用いられるＦＣＳ（Ｆｒａｍｅ  Ｃｈｅｃｋ  Ｓｅｑｕｅｎｃｅ）領域８０２を含む。
【００８５】
図８において括弧内に記載される数字は、各領域のオクテット数を表する。例外として、データ領域８０１に示される括弧内の文字’Ｎ’は、データ領域８０１に格納されるデータの種別や数に応じて本領域のオクテット数が変化する可能性があることを表している。
【００８６】
実施例１において、データ領域８０１は、コマンド制御に係るコマンド番号７００から制御量７０６まで、ＤＢに保持すべき内容と同等の情報を格納する。本コマンドフレームフォーマットは、コマンド学習、正常運用、代替コマンド発行、復旧等、全期間において共通である。
【００８７】
図９〜図１１は、ＧＷ１０６の解析比較部３０６により処理の詳細を示すフローチャートである。解析比較部３０６は、制御コマンドの事前学習が終了し、制御内容が制御パタンＤＢ３０４に格納完了していることを前提として処理を開始する。
【００８８】
図９に示すように、解析比較部３０６は、論理制御装置１０２からの制御コマンド受信をトリガとして処理を開始する（Ｓ９００）。解析比較部３０６は、ＧＷ１０６内のタイマ値を取得する（Ｓ９０１）。タイマ値は、直前コマンドからのコマンド間隔を示す。タイマ値を取得した後、解析比較部３０６は、タイマをリセットする（Ｓ９０２）。タイマは、次コマンド受信時に再びコマンド間隔を取得する為に、カウントを継続する。
【００８９】
その後、解析比較部３０６は、ＧＷ１０６内部のコマンド受信カウンタの値を取得する。本カウンタは、ＧＷ１０６が受信したコマンド数の保持を目的とする。解析比較部３０６は、本カウンタ値と、受信した制御コマンド内のフレーム番号を比較して、期待するシーケンスでコマンドを受信しているかを判定する（Ｓ９０３）。
【００９０】
解析比較部３０６は、受信した制御コマンドからコマンド番号を取得し、コマンド受信カウンタの値とコマンド番号とが一致するか、判定する（Ｓ９０４）。値が一致しない場合（Ｓ９０４：Ｎｏ）、解析比較部３０６は、期待外のシーケンスでコマンドを取得した、すなわち制御プログラムが改竄され悪意あるシーケンスで制御対象を制御される恐れがあると判定する。
【００９１】
解析比較部３０６は、コマンド番号として受信カウンタから取得した値を設定する（Ｓ９０５）。解析比較部３０６は、セレクタ３０７に当該コマンド番号を通知し、さらに、制御信号の電圧レベルを”Ｈｉｇｈ”に設定し（Ｓ９０６）、フローを終了する。
【００９２】
ここで制御信号は、セレクタ３０７、復旧機能部３０８、異常通知部３１０に対して悪意コマンド検出を通知するための電気信号である。解析比較部３０６は、悪意コマンド未検出中信号の電圧レベルを”Ｌｏｗ”に設定し、悪意コマンド検出中信号の電圧レベルを”Ｈｉｇｈ”に設定する。本信号の電圧レベル初期値は”Ｌｏｗ”である。
【００９３】
Ｓ９０４において値が一致した場合、解析比較部３０６は、以後の処理で用いるコマンド番号として受信コマンドから取得したコマンド番号を設定し、コマンド番号を用いて制御パタンＤＢ３０４を検索することで最終ビット値を取得する（Ｓ９０７）。
【００９４】
解析比較部３０６は、取得した最終ビット値を評価する（Ｓ９０８）。値が’１’（最終制御）の場合、解析比較部３０６は、受信カウンタ値をリセットし（Ｓ９０９）、値が’０’（最終制御以外）の場合、解析比較部３０６は、受信カウンタ値をインクリメントする（Ｓ９１０）。Ｓ９０９、Ｓ９１０は、制御のループ性を考慮して実行されるものであり、最終制御に該当する制御コマンドを受信した後に論理制御装置１０２から発行される次の制御コマンドは、制御ループの最初の制御に該当する制御コマンドであることが想定されている。
【００９５】
次に、図１０に示すように、解析比較部３０６は、制御コマンドから取得する情報と、制御パタンＤＢ３０４、機器情報ＤＢ３０５から取得する情報を比較し、受信した制御コマンドが悪意コマンドか否かを判定する。
【００９６】
まず、解析比較部３０６は、制御コマンドから、ＭＡＣ  ＳＡ６００、ＭＡＣ  ＤＡ６０１、タイプ６０３、コマンド間隔７０２、論理制御装置番号６０３、制御入出力装置番号６０４、制御対象番号６０５、制御量７０６を取得する（Ｓ１０００）。
【００９７】
次に、解析比較部３０６は、コマンド番号７００を用いて制御パタンＤＢ３０４を検索し、コマンド間隔７０２、論理制御装置番号６０３、制御入出力装置番号６０４、制御対象番号６０５、制御量７０６を取得する（Ｓ１００１）。さらに、解析比較部３０６は、機器情報ＤＢ３０５を検索して、ＭＡＣ  ＳＡ６００、ＭＡＣ  ＤＡ６０１、タイプ６０３を取得する（Ｓ１００２）。
【００９８】
解析比較部３０６は、Ｓ１０００で取得した制御コマンド情報と、Ｓ１００１、Ｓ１００２で取得したＤＢ情報を以下フローに従い順に比較する。まず、解析比較部３０６は、ＭＡＣ  ＳＡ６００、ＭＡＣ  ＤＡ６０１、タイプ６０３を比較する（Ｓ１００３）。値が一致しない場合（Ｓ１００３：Ｎｏ）、解析比較部３０６は、コマンド番号として受信した制御コマンドから取得したコマンド番号を格納し（Ｓ１００４）、Ｓ９０６と同様の処理を実施してフロー終了する。
【００９９】
値が一致した場合（Ｓ１００３：Ｙｅｓ）、図１１に示すように、解析比較部３０６は、論理制御装置番号６０３、制御入出力装置番号６０４、制御対象番号６０５を比較する（Ｓ１１００）。いずれかの値が一つでも一致しない場合（Ｓ１１００：Ｎｏ）、解析比較部３０６は、Ｓ１００４、Ｓ９０６と同様の処理を実施して、フローを終了する。
【０１００】
全ての値が一致した場合（Ｓ１１００：Ｙｅｓ）、解析比較部３０６は、コマンド間隔７０２と制御量７０６を比較する（Ｓ１１０１）。二つの値が一致した場合（Ｓ１１０１：Ｙｅｓ）、解析比較部３０６は、制御信号の電圧レベルを”Ｌｏｗ”に設定し（Ｓ１１０２）、フローを終了する。
【０１０１】
いずれか一つの値でも一致しない場合（Ｓ１１０１：Ｎｏ）、解析比較部３０６は、コマンド間隔７０２、及び制御量７０６について制御誤差を許容するか否かを評価する。解析比較部３０６は、Ｓ１０００で取得した制御コマンド内部の論理制御装置番号６０３、制御入出力装置番号６０４、制御対象番号６０５を用いて許容量ＤＢ３０３を検索し、対応する許容量有効ビット６０６、コマンド間隔許容量６０７、制御量許容量６０８を取得する（Ｓ１１０３）。
【０１０２】
解析比較部３０６は、許容量有効ビット６０６の値を評価する（Ｓ１１０４）。値が’０’（誤差を許容しない）の場合（Ｓ１１０４：Ｙｅｓ）、解析比較部３０６は、Ｓ１００４、Ｓ９０６と同様の処理を実施してフローを終了する。値が’１’（誤差を許容する）の場合（Ｓ１１０４：Ｎｏ）、解析比較部３０６は、受信した制御コマンドから取得したコマンド間隔７０２、制御量７０６と、制御パタンＤＢ３０４から取得したコマンド間隔７０２、制御量７０６間の値の差分をそれぞれ演算し（Ｓ１１０５）、演算結果を評価する（Ｓ１１０６）。
【０１０３】
演算した差分が、コマンド間隔許容量６０７、制御量許容量６０８範囲未満である場合（Ｓ１１０６：Ｙｅｓ）、解析比較部３０６は、はＳ１１０２と同様の処理を実施してフローを終了する。許容量範囲以上の場合（Ｓ１１０６：Ｎｏ）、解析比較部３０６は、Ｓ１００４、Ｓ９０６と同様の処理を実施してフローを終了する。
【０１０４】
図１２は、代替モードの一つである安全制御モードにおいて実施されるセレクタ３０７による処理の詳細を示すフローチャートである。セレクタ３０７における制御は、解析比較部３０６から通知される制御信号のレベル”Ｈｉｇｈ”検出をトリガに処理を開始し、悪意コマンドを遮断するために処理開始と同時に論理制御装置１０２からの制御コマンド伝送ラインを閉塞する（Ｓ１２００）。
【０１０５】
安全制御モードでは、制御コマンドは保守者に設定された順序に従い先頭コマンドから発行することを前提とするため、セレクタ３０７は、コマンド番号の初期値は’０’として、処理を開始する（Ｓ１２０１）。
【０１０６】
セレクタ３０７は、悪意コマンドを遮断後、代替コマンドの伝送に必要な情報を得るため、機器情報ＤＢ３０５から論理制御装置１０２、制御入出力装置１０３のＭＡＣアドレス、及びタイプを取得する（Ｓ１２０２）。ここで代替コマンドの送信元ＭＡＣアドレスは、ＧＷ１０６ではなく論理制御装置１０２のアドレスとする。
【０１０７】
本来制御コマンドは、論理制御装置１０２から制御入出力装置１０３に対して発行されるものであり、制御入出力装置１０３にはコマンドの送信元として論理制御装置１０２のＭＡＣアドレスが登録されることを想定する。そのため、ＧＷ１０６の代替コマンド発行時、ＧＷ１０６のＭＡＣアドレスを制御コマンドに設定することで、制御入出力装置１０３がＭＡＣアドレス不正を検出する可能性がある。これを回避するため、代替コマンドの送信元ＭＡＣアドレスに論理制御装置１０２のＭＡＣアドレスを設定する。
【０１０８】
次に、セレクタ３０７は、コマンド番号を用いて安全制御パタンＤＢ３０２を検索し、コマンド間隔７０２、論理制御装置番号６０３、制御入出力装置番号６０４、制御対象番号６０５、制御量７０６、最終ビット７０１を取得する（Ｓ１２０３）。Ｓ１２０３で取得された情報は、セレクタ３０７にて生成される代替コマンド内部の所定領域に格納され、制御入出力装置１０３に対して送信される（Ｓ１２０４）。
【０１０９】
また代替コマンドの発行間隔について、セレクタ３０７はＧＷ内部で保持しているタイマの値を参照し、コマンドに格納したコマンド間隔７０２に一致する時タイミングまで代替コマンドの発行を待ち合わせる。
【０１１０】
セレクタ３０７は、代替コマンド発行後、制御信号状態を確認する（Ｓ１２０５）。これは、セレクタ３０７の代替コマンド発行処理と並行して実施される復旧機能部３０８の処理により論理制御装置１０２の復旧が成功した場合、論理制御装置１０２から発行される制御コマンドを再度制御入出力装置１０３に対して送信する必要があるためである。
【０１１１】
制御信号の電圧レベル”Ｌｏｗ”が確認された場合（Ｓ１２０５：Ｙｅｓ）、セレクタ３０７は、制御コマンド伝送ラインの閉塞を解除して処理を終了する（Ｓ１２０６）。制御信号の電圧レベルが”Ｈｉｇｈ”の場合（Ｓ１２０５：Ｎｏ）、セレクタ３０７は、閉塞を継続し、取得した最終ビットの値を参照して発行した代替コマンドが制御シーケンスの最終コマンドであるか否かを判定する（Ｓ１２０７）。最終コマンドの場合（Ｓ１２０７：Ｙｅｓ）、セレクタ３０７は、コマンド番号を初期化する（Ｓ１２０１）。最終コマンドでない場合（Ｓ１２０７：Ｎｏ）、セレクタ３０７は、コマンド番号をインクリメントして（Ｓ１２０８）、次の制御コマンド生成処理に移行する。
【０１１２】
図１３は、代替モードの一つである学習制御モードにおいて実施されるセレクタ３０７の制御処理の詳細を示すフローチャートである。安全制御モードとの差分は、コマンド番号の初期値が’０’ではない場合がある点、参照するＤＢが異なる点であり、その他の処理は安全制御モードと同一である。したがって、学習制御モードの一部処理の説明を簡略化もしくは省略する。
【０１１３】
まず、セレクタ３０７は、コマンド番号の初期値を決定する。学習制御モードにおいて、解析比較部３０６が悪意コマンドと判定したコマンドと同一のコマンド番号を、取得する必要がある。これは、悪意コマンドとして遮断されたコマンドと同一のパラメータを有するコマンドを発行するためであり、これにより攻撃検出時点から制御対象１０１の制御をシームレスに再開できる。
【０１１４】
セレクタ３０７は、解析比較部３０６より通知されたコマンド番号を取得し（Ｓ１３００）、取得したコマンド番号を用いて制御パタンＤＢを検索する（Ｓ１３０１）。セレクタ３０７は、Ｓ１３０１で取得した値を用いて代替コマンドを生成し制御入出力装置１０３に送信する。代替コマンド送信処理、制御信号の電圧レベル確認処理、コマンド番号変更処理は、前述した安全制御モードにおける処理の中で説明した内容と同等である。
【０１１５】
図１４は、復旧機能部３０８及び異常通知部３１０の処理の詳細を示すフローチャートである。復旧及び異常通知の一連の処理は、解析比較部３０６から通知される制御信号のレベル”Ｈｉｇｈ”の検出をトリガに開始される（Ｓ１４００）。ここで、”異常”は、解析比較部３０６の機能により悪意コマンドが検出されたことを意味する。
【０１１６】
異常通知部３１０は、管理制御装置１００に、異常及び異常レベル’ｎ’を通知し（Ｓ１４０１）、その後、復旧機能部３０８は、論理制御装置１０２に対して異常レベル’ｎ’に対応する復旧処理を実施する（Ｓ１４０２）。ここで異常レベル’ｎ’は、悪意コマンド検出時の論理制御装置１０２への復旧処理に応じて決定される異常のレベルを段階的に示す数値である。
【０１１７】
上述のように、復旧機能部３０８は、例えば、論理制御装置１０２へ初期化指示を発行する、又は、論理制御装置１０２に制御プログラムの再書き込み指示を発行する。本構成により、異常レベルに応じた適切な復旧処理を実行できる。
【０１１８】
復旧処理実施後、復旧機能部３０８は、解析比較部３０６に対し初期化指示を発行する（Ｓ１４０３）。これは、論理制御装置１０２への復旧処理（例えば論理制御装置１０２の初期化）が実施された場合、論理制御装置１０２から発行される制御コマンドが初期状態となる可能性が高いためである。
【０１１９】
復旧機能部３０８は、解析比較部３０６から通知される制御信号の電圧レベルを確認する（Ｓ１４０４）。”Ｌｏｗ”である場合（Ｓ１４０４：Ｙｅｓ）、復旧機能部３０８は、管理制御装置１００に異常からの復旧を通知し、処理を終了する（Ｓ１４０５）。電圧レベルが”Ｈｉｇｈ”である場合（Ｓ１４０４：Ｎｏ）、復旧機能部３０８は、異常レベルをインクリメントする（Ｓ１４０６）。
【０１２０】
ここで、解析比較部３０６から通知される制御信号の電圧レベル変化を確認するためには、復旧処理後の論理制御装置１０２が制御コマンド発行を再開し、ＧＷ１０６の解析比較部３０６で制御コマンドを再受信するまでの時間差が考慮されなければならない。本時間差を鑑み、Ｓ１４０４の処理は、実行時間に時間幅を設けることを前提としている。例えば、実施例１における復旧処理の一例として、論理制御装置１０２の初期化、論理制御装置１０２の制御プログラム再書換えが挙げられる。
【０１２１】
前者には、論理制御装置初期化完了後、論理制御装置１０２が再び制御コマンドを発行し、ＧＷ１０６が制御コマンドを受信するまでの時間に依存した、Ｓ１４０４に示す処理の実行時間幅が与えるべきである。
【０１２２】
後者には、管理制御装置１００に対しプログラム再書換え指示発行、論理制御装置１０２が書換えプログラムを有効化し制御コマンドを再発行、ＧＷ１０６が制御コマンドを受信するまでの時間に依存した、Ｓ１４０４に示す処理の実行時間幅が与えるべきである。
【０１２３】
この時間幅は、各制御装置の装置仕様に依存し、また前述した例以外に実施する復旧処理に対応して各々の時間幅を変更し、設定する必要がある。故に実施例１では具体的な値を規定しない。本時間幅は、ＧＷ１０６が論理制御装置１０２に対し実行する各復旧処理の時間を元に算出され、運用開始時に予め保守者が決定し、ＧＷ１０６が値を格納し復旧機能部３０８が参照するものとする。
【０１２４】
異常通知部３１０は、Ｓ１４０６におけるインクリメント後の異常レベルを評価する（Ｓ１４０７）。異常レベルが保守者によって設定された異常レベル最大値Ｎに達する場合、異常通知部３１０は、保守者が設定する復旧処理によって論理制御装置１０２が復旧不可であったと判定し、管理制御装置１００に異常レベル’Ｎ’を通知する（Ｓ１４０８）。さらに、異常通知部３１０は、論理制御装置１０２の外部電源モジュール３０９に電源遮断指示を発行して処理を終了する（Ｓ１４０９）。
【０１２５】
保守者は、異常レベル最大値’Ｎ’の通知を受信した場合、ＧＷ１０６の復旧処理でシステムが復旧不可であったことを認識し、外部攻撃標的装置の装置入替等を実施する必要がある。
【０１２６】
Ｓ１４０７において異常レベルが最大値’Ｎ’未満である場合（Ｓ１４０７：Ｎｏ）、異常通知部３１０は、更新した異常レベルを管理制御装置１００に通知し（Ｓ１４０１）、復旧機能部３０８は、対応した復旧処理を実行する。
【０１２７】
以上のように、実施例１によれば、制御コマンドシーケンスを事前学習することで、論理制御装置に対する攻撃を確実に検出することができる。制御対象を制御する制御コマンドを監視／解析することで、センサデータの解析／評価による間接的な異常検知に比べ、高速かつ誤りなく攻撃を検知し、システムを保護することができる。
【実施例２】
【０１２８】
実施例１では、論理制御装置１０２と制御入出力装置１０３間の物理伝送路上にＧＷ１０６が配置されている。実施例２では、制御入出力装置１０３と制御対象１０１間の物理伝送路上にＧＷ１０６が配置される。実施例２おいては、実施例１と異なる部分を中心に説明し、特に記載がないところは実施例１と同様である。
【０１２９】
図１５は、実施例１における図１に対応する図である。実施例２において、制御入出力装置１０３に属する複数の制御対象１０１との接続に対応するため、ＧＷ１０６は複数の物理インタフェースを有する。物理インタフェースの配備数は、具体的な値を規定しない。
【０１３０】
図１６は、実施例１における図３に対応する図である。ＧＷ１０６は、制御入出力装置１０３に接続する複数の物理インタフェース１６００、及び内部伝送線路１６０１を有し、接続先の制御対象１０１毎に独立して制御内容の監視及び代替制御を実施する。そのため、ＧＷ１０６は、物理インタフェース１６００の数に対応した、安全制御パタンＤＢ１６０２、許容量ＤＢ１６０３、制御パタンＤＢ１６０４、学習部１６０５、解析比較部１６０６を有する。
【０１３１】
制御入出力装置１０３と制御対象１０１との間の信号は、実施例１で示すＬ２レイヤのネットワークに基づいた形態とは異なる方法で伝送され、物理的なパルス波形やレベル信号に基づいて制御される。
【０１３２】
以降、上記のような物理的な電圧レベルの変化を用いて制御対象１０１に発行する制御指示を制御信号と呼ぶ。制御入出力装置１０３は、論理制御装置１０２からの制御コマンドに従って、制御対象１０１への制御信号を生成する。したがって、論理制御装置１０２から制御入出力装置１０３への制御コマンド、及び、制御入出力装置１０３から制御対象１０１への制御信号は、論理制御装置１０２から制御対象１０１への制御指示である。
【０１３３】
ここで、実施例２における制御信号は、一般的な産業制御システムで用いられる制御入出力装置１０３と制御対象１０１との間の制御方法に即した一例であり、制御信号がこれに限定されるものではない。
【０１３４】
また、制御信号の伝達に際し、混線や干渉等を抑止するため、制御入出力装置１０３のインタフェースと制御対象１０１は、独立した制御ラインで接続され、接続関係は一意に定められる。従ってＭＡＣアドレス等のアドレス情報を必要とせず、実施例２において、ＧＷ１０６は機器情報ＤＢを保持しない。
【０１３５】
また、ＧＷ１０６は、各制御対象１０１が有するセンサ１６０７からのフィードバックを取り込み、セレクタ１６０８において制御対象１０１に対する制御を調整する。ここで、実施例２において制御入出力装置１０３が複数の制御対象１０１と接続可能なインタフェースを有する構成は、一般的な産業制御システムで用いられる装置構成に基づいた一例である。制御入出力装置１０３が唯一つの接続インタフェースを有する場合にも、実施例２の概念を適用できる。
【０１３６】
図１７は、実施例１における図４に対応する図である。ＧＷ１０６は制御入出力装置１０３から送信される制御信号の順序や内容を学習し、ＤＢに格納する（Ｓ１７００）。学習後は制御信号の監視を開始し、受信した制御信号と、学習した制御信号の順序や内容を逐一比較する（Ｓ１７０１）。
【０１３７】
論理制御装置１０２のプログラム改竄で悪意コマンドが発行された場合、制御入出力装置１０３が送信する制御信号も悪意のある制御指示に改竄される（Ｓ１７０２）。ＧＷ１０６は、Ｓ１７０１の比較処理によりこの悪意制御信号（悪意制御コマンド）を検知し、遮断する（Ｓ１７０３）。論理制御装置１０２の復旧後、ＧＷ１０６は、Ｓ１７０１の比較処理により復旧を検知し、制御入出力装置１０３からの制御信号遮断を解除し（Ｓ１７０４）、通常制御を再開する（Ｓ１７０５）。
【０１３８】
図１８は、実施例１における図５に対応する図である。安全制御パタンＤＢ１６０２、許容量ＤＢ１６０３、制御パタンＤＢ１６０４は、ＧＷ１０６の複数の物理インタフェース１６００に各々予め関連付けられる。ＧＷ１０６は、物理インタフェース各々のデータを、対応するＤＢに書き込む。
【０１３９】
ＧＷ１０６は、制御入出力装置１０３からの制御開始信号の受信をトリガに、制御信号の事前学習を開始し、受信した制御信号内容を制御パタンＤＢ１６０４に格納する（Ｓ１８００）。制御開始信号に応答して事前学習を開始することで、確実に制御コマンドシーケンスの開始から事前学習できる。
【０１４０】
実施例１と異なり、制御信号には最終処理を示す情報が付与されていないため、ＧＷ１０６は、最初の制御信号の受信（Ｓ１８０１）と最終制御信号の受信（Ｓ１８０２）を検知し、制御の繰り返しの始点と終点を特定する機能を有する。
【０１４１】
図１９は、実施例１における図６Ｂに対応する図である。許容量ＤＢ１６０３は、制御信号が制御対象１０１に印加される制御時間の許容量を保持する目的で具備される。許容量ＤＢ１６０３は、テーブルを構成する要素として、制御番号１９００、制御入出力装置番号６０４、制御対象番号６０５、制御量有効ビット６０６、許容制御時間１９０１を保持する。
【０１４２】
ＧＷ１０６の物理インタフェース数に応じて複数の許容量ＤＢ１６０３が具備され、各々対応する物理インタフェースに関する許容量を格納する。具体的には、接続対象番号’０’に接続する物理インタフェースに対応した許容量ＤＢ１６０３は、テーブル１９０２を有する。接続対象番号’１’に接続する物理インタフェースに対応した許容量ＤＢ１６０３は、テーブル１９０３を有する。接続対象番号’２’に接続する物理インタフェースに対応した許容量ＤＢ１６０３はテーブル１９０４を有する。ここで記載するテーブル数は一例であり、ＧＷ１０６に具備できる許容量ＤＢ１６０３の数に制限を与えるものではない。
【０１４３】
制御番号１９００は、制御入出力装置１０３から発行される制御信号のシーケンスを表し、実施例１におけるコマンド番号７００と同等の役割を果たす。許容制御時間１９０１は、ある一定の制御値を制御対象に印加する時間幅の許容誤差を示す。
【０１４４】
図２０は、実施例１における図７に対応する図である。安全制御パタンＤＢ１６０２及び制御パタンＤＢ１６０４は、それぞれ、安全制御パタン及び学習制御パタンを保持する。安全制御パタンＤＢ１６０２及び制御パタンＤＢ１６０４のＤＢ構造は、制御番号１９００、最終ビット２０００、制御時間２００１、制御入出力装置番号６０４、制御対象番号６０５、制御値２００２を有する。
【０１４５】
許容量ＤＢ１６０３と同様に、複数の安全制御パタンＤＢ１６０２及び制御パタンＤＢ１６０４が、ＧＷ１０６の物理インタフェース数に応じて具備され、各々対応する物理インタフェースに関する制御パタンを格納する。本例では、制御対象番号’０’〜’２’に対応するテーブル２００３〜２００５を図示しているが、ＧＷ１０６に具備できる安全制御パタンＤＢ１６０２及び制御パタンＤＢ１６０４の数に制限を与えるものではない。
【０１４６】
最終ビット２０００は、ある一定の繰り返し周期で実行される制御の最終処理であることを表す。学習制御パタンにおいて、ＧＷ１０６は事前学習する際に制御の繰り返しを検知して、最終ビットをＤＢに設定する。安全制御パタンにおいては、ＧＷ１０６は、保守者に指定された処理に最終ビットを設定する。
【０１４７】
制御時間２００１は、ある制御値が制御対象１０１に印加される時間幅である。ＧＷ１０６は、保守者が事前に決定した値をＤＢに格納する、又は、学習期間中に内部タイマを用いて印加時間を計測し、その値をＤＢに格納する。
【０１４８】
制御値２００２は、’０’か’１’の二値を取る制御対象１０１への電気制御信号を表す。これは、前述したように、制御入出力装置１０３から発行される制御信号がパルス波形やレベル信号に基づいているためである。制御値２００２は必ずしも１ビット情報である必要はない。例えば、制御値２００２は、ビット列が示す複数のビットパターンを、制御対象１０１の複数の動作パタンをそれぞれに対応させてもよい。異なる制御番号の制御信号の間には、それを示す信号が挿入されてもよい。
【０１４９】
図２１は、レベル信号に基づいた制御対象１０１への制御指示を、ＧＷ１０６が学習し、制御パタンＤＢ１６０４に格納する動作の一例を示した図である。本処理は、ＧＷ１０６が具備する複数の物理インタフェース１６００間で共通なため、代表インタフェースの例を示す。
【０１５０】
横軸を時間、縦軸を振幅とした制御信号の時間変化を示すグラフ２１００において、ＧＷ１０６は、一定の振幅レベルを保持する制御に対し制御番号１９００を与える。図の例において、ＧＷ１０６は、制御入出力装置１０３が制御対象１０１に対し制御値’１’を３０ｍｓ出力する制御を、制御番号’０’に対応した処理２１０１として、制御パタンＤＢ１６０４に格納する。ＧＷ１０６は、制御入出力装置１０３が制御対象１０１に対し制御値’０’を６０ｍｓ出力する制御を、制御番号’１’に対応した処理２１０２として、制御パタンＤＢ１６０４に格納する。
【０１５１】
図２２は、解析比較部１６０６の処理の詳細を示したフローチャートである。本処理は、ＧＷ１０６が具備する複数の物理インタフェース１６００間で共通であるため、代表インタフェースの例を示す。
【０１５２】
解析比較部１６０６は、制御入出力装置１０３がＧＷ１０６に対して送信する制御開始信号の受信をトリガとして処理を開始する（Ｓ２２００）。受信前にＧＷ１０６が監視する制御信号値が’０’である場合、受信時の初期値が’０’となる制御信号に関しては信号受信後も制御値’０’が継続し、信号受信自体を検知できない。そのため、解析比較部１６０６は、制御入出力装置１０３からの制御開始信号の受信を処理開始トリガしている。
【０１５３】
まず、解析比較部１６０６は、ＧＷ１０６が保持するカウンタの値を取得し（Ｓ２２０１）、取得値を制御番号として制御パタンＤＢ１６０４を検索する。これにより、解析比較部１６０６は、最終ビット２０００、制御時間２００１、制御入出力装置番号６０４、制御対象番号６０５、制御値２００２を取得する（Ｓ２２０２）。
【０１５４】
解析比較部１６０６は、最終ビット２０００の値により、繰り返し処理の最終制御に該当する信号であるかを評価する（Ｓ２２０３）。最終制御である場合（Ｓ２２０３：Ｙｅｓ）、解析比較部１６０６は、カウンタ値を初期化する（Ｓ２２０４）。
【０１５５】
解析比較部１６０６は、Ｓ２２０２で取得した制御入出力装置番号６０４、制御対象番号６０５を確認し、物理インタフェース毎に予め関連付けられている制御入出力装置番号、制御対象番号であるか判定する（Ｓ２２０５）。
【０１５６】
関連付けされた番号以外である場合（Ｓ２２０５：Ｎｏ）、解析比較部１６０６は、ＧＷ１０６が物理インタフェース毎に有するタイマ機能を用いて計測したタイマ値を取得する（Ｓ２２０６）。本タイマは、制御入出力装置１０３から制御開始信号を受信した際に動作を開始する。
【０１５７】
その後、解析比較部１６０６は、制御信号の電圧レベルを”Ｈｉｇｈ”にし（Ｓ２２０７）、制御番号、Ｓ２２０６で取得したタイマ値、制御対象番号を、セレクタ１６０８に通知する（Ｓ２２０８）。制御番号は、Ｓ２２０１で取得したカウンタ値とする。
【０１５８】
Ｓ２２０５において制御入出力装置番号６０４、制御対象番号６０５が関連付けられた値と一致する場合（Ｓ２２０５：Ｙｅｓ）、解析比較部１６０６は、ＧＷ１０６が物理インタフェース毎に有するタイマ機能を用いて計測したタイマ値を取得する（Ｓ２２０９）。ここで取得したタイマ値を、制御時間とする。
【０１５９】
解析比較部１６０６は、入力制御信号波形から読み取った制御値と、ＤＢ検索により取得した制御値２００２を比較し（Ｓ２２１０）、値が一致するか否かを判定する（Ｓ２２１１）。
【０１６０】
一致しない場合（Ｓ２２１１：Ｎｏ）、解析比較部１６０６は、制御時間の許容量評価を開始する。値が一致する場合（Ｓ２２１１：Ｙｅｓ）、解析比較部１６０６は、タイマから取得した制御時間値がＤＢから取得した制御時間２００１に達しているかを確認する（Ｓ２２１２）。一致している場合（Ｓ２２１２：Ｙｅｓ）、解析比較部１６０６は、ＤＢから取得した制御番号１９００に対応する処理が終了したと判定し、カウンタの値をインクリメントし、タイマを初期化し（Ｓ２２１３）、再度制御信号比較処理を実施する（Ｓ２２１４）。
【０１６１】
Ｓ２２１２でタイマから取得した制御時間がＤＢから取得した制御時間２００１に未達の場合（Ｓ２２１２：Ｎｏ）、解析比較部１６０６は、再度タイマ値を取得し、Ｓ２２１０、Ｓ２２１１、Ｓ２２１２を実行する。
【０１６２】
解析比較部１６０６は、許容量評価として、制御番号１９００を用いて許容量ＤＢ１６０３に格納されている許容量有効ビット６０６及び許容制御時間１９０１を取得する（Ｓ２２１５）。解析比較部１６０６は、取得した制御番号１９００に対応する許容量有効ビット６０６の値を評価する（Ｓ２２１６）。
【０１６３】
値が’０’（誤差を許容しない）である場合（Ｓ２２１６：Ｙｅｓ）、解析比較部１６０６は、Ｓ２２０７、Ｓ２２０８の処理を実施する。値が’１’（誤差を許容する）である場合（Ｓ２２１６：Ｎｏ）、解析比較部１６０６は、制御パタンＤＢ１６０４から取得した制御時間２００１に、許容量ＤＢ１６０３から取得した許容制御時間１９０１を加算する（Ｓ２２１７）。
【０１６４】
その後、解析比較部１６０６は、タイマから取得した制御時間が、Ｓ２２１７で演算した値を超過するか判定する（Ｓ２２１８）。超えていない場合（Ｓ２２１８：Ｙｅｓ）、解析比較部１６０６は、Ｓ２２１１で判定した制御値の不一致を異常と判定せず、制御信号の電圧レベルを”Ｌｏｗ”とし（Ｓ２２１９）、再度タイマ値を取得し、Ｓ２２１０、Ｓ２２１１、Ｓ２２１２を実行する。
【０１６５】
Ｓ２２１８で値が超過している場合（Ｓ２２１８：Ｎｏ）、解析比較部１６０６は、許容外の制御時間において誤った制御値を制御対象１０１に印加し続けていると判定し、Ｓ２２０７、Ｓ２２０８を実行する。
【０１６６】
図２３は、実施例１における図１２に対応する図である。安全制御モード時、セレクタ１６０８は、図１２のコマンド番号７００を制御番号１９００に置き換えた処理を実施し（Ｓ２３００、Ｓ２３０１、Ｓ２３０３、Ｓ２３０４）、ＤＢから取得した情報を元に制御信号を生成する（Ｓ２３０２）。
【０１６７】
図２４は、実施例１における図１３に対応する図である。学習制御モード時、セレクタ１６０８は、解析比較部１６０６から制御番号、タイマ値、制御対象番号を取得し（Ｓ２４００）、制御番号を用いて制御パタンＤＢ１６０４を検索する（Ｓ２４０１）。
【０１６８】
次に、セレクタ１６０８は、ＤＢから取得した情報に基づき制御信号を生成する（Ｓ２４０２）。セレクタ１６０８は、解析比較部１６０６から取得したタイマ値を用いて、生成する代替制御信号の制御時間を、ＤＢから取得した制御時間２００１から調整する。
【０１６９】
本処理は、制御信号の異常を検出した時点からセレクタ１６０８がシームレスに処理を代替するための処理である。具体的には、セレクタ１６０８は、ＤＢより取得した制御時間２００１からタイマ値が示す時間を減算する。但し、本制御時間の調整処理は、異常検出後の最初の代替制御信号を生成する時点でのみ実施され、その後の繰り返し代替処理においては実施されない。制御信号を生成した後、セレクタ１６０８は、図１３においてコマンド番号７００を制御番号１９００に置き換えた処理Ｓ２４０３、Ｓ２４０４、Ｓ２４０５を実施する。
【０１７０】
以上のように、本実施例によれば、制御入出力装置１０３から制御対象に発行される制御信号を監視して、システムへの攻撃（論理制御装置の異常）を検知することができる。
【０１７１】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１７２】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０１７３】
１００  管理制御装置
１０１  制御対象
１０２  論理制御装置
１０３  制御入出力装置
３０１  学習部
３０２  安全制御パタンＤＢ
３０３  許容量ＤＢ
３０４  制御パタンＤＢ
３０６  解析比較部
３０８  復旧機能部
３１０  異常通知部
【図１】
2018022296.tif 000003
【図２】
2018022296.tif 000004
【図３】
2018022296.tif 000005
【図４】
2018022296.tif 000006
【図５】
2018022296.tif 000007
【図６Ａ】
2018022296.tif 000008
【図６Ｂ】
2018022296.tif 000009
【図７】
2018022296.tif 000010
【図８】
2018022296.tif 000011
【図９】
2018022296.tif 000012
【図１０】
2018022296.tif 000013
【図１１】
2018022296.tif 000014
【図１２】
2018022296.tif 000015
【図１３】
2018022296.tif 000016
【図１４】
2018022296.tif 000017
【図１５】
2018022296.tif 000018
【図１６】
2018022296.tif 000019
【図１７】
2018022296.tif 000020
【図１８】
2018022296.tif 000021
【図１９】
2018022296.tif 000022
【図２０】
2018022296.tif 000023
【図２１】
2018022296.tif 000024
【図２２】
2018022296.tif 000025
【図２３】
2018022296.tif 000026
【図２４】
2018022296.tif 000027