こんにちは。
Nozomi Networks製品を担当している木村と申します。
本日は Nozomi Networks Guardian (以降 Guardian) をソフトウェアPLCとSCADA/HMIに接続して可視化してみたいと思います。Guardianは多くの産業制御システムで使用されているプロトコルに対応しており、データ部分までを深く可視化することができます。
今回の実験を行うにあたり、こちらの書籍を参考にさせていただいております。
今回は以下のような構成で可視化を行います。
SCADA/HMIには、JoyWatcherSuiteを使用させていただきます。
お試しで1時間動作させることが可能です。
PLCには、CODESYSを使用させていただきます。
お試しで2時間動作させることが可能です。
PLCでフリップフロップ回路を作成します。フリップフロップは一定間隔でONとOFFを繰り返すロジックで、警告灯の点滅などに使用されます。
SCADA/HMIとの接続ではModbus/TCPを使用します。Y0とY1をBit0とBit1にマッピングします。
SCADA/HMIでは、フリップフロップ回路の入力値を取得して表示するように構成します。
サンプリング周期は1000msec、局番は255としています。デバイス種別はBit Read Only (02 Read discrete Inputs)です。
SCADA/HMI とPLCとの間の通信をWiresharkで可視化してみます。無事通信が確立していることが分かります。
それでは、Modbus/TCPがGuardian上ではどのように可視化できているのかを確認していきます。Guardianは産業制御用プロトコルに広く対応しており、Modbus/TCPのデータの中身までチェック、可視化することができます。
https://www.nozominetworks.com/downloads/US/Nozomi-Networks-Protocol-Support-List.pdf
SCADA/HMIでデータの取得設定を行った2つのレジスタ値が表示されています。
RTU(リモートターミナルユニット)には局番255がセットされていることがわかります。
名前にはdi01という値が入っています。これは、Discrete Inputsのレジスタアドレス01を表しています。
FC(ファンクションコード)情報には、コード番号2番、Read Discrete Inputsが表示されています。
設定どおりですね。
2つのうち、1つにフォーカスしてみます。
可視化を始めてからの最小値が0で、最大値が1のデジタルデータであることが分かります。
更新間隔はおおよそ1000msのサイクリック通信として認識されています。
過去の履歴をグラフで確認すると、おおよそ5秒間隔で0と1の間で値が繰り返し変動していることが確認できます。
Guardianはこれらの情報を学習しており、自動でベースラインを作成します。ベースラインから逸脱するような情報を受信した場合に各種アラートを発報し、管理者様へ異常な状態の気づきを与えることも可能です。
自動でベースラインを作成する機能は、お客様からご評価いただいている機能です。実環境では大量のプロセスがあり、手動でベースラインを登録することは難しいからです。
産業制御システムにおいて、有名なマルウェアであるスタックスネットの例では、SCADA/HMIの表示が改ざんされ、異常に気が付くことが遅れてしまいました。もしGuardianのような機能があれば被害を抑制することもできたのかもしれませんね。
今回の実験では、GuardianによってPLCとSCADA/HMIとの間のModbus/TCP通信がどのように可視化されるのか確認することができました。
Guardianを既に触っていただいている方には、プロセスビュー機能とはなんのか、イメージがつかみやすくなったのではないかと思います。
多くのIT技術者にとって、ソフトウェアPLCやSCADA/HMIアプリケーションはほとんど触ったことがない技術だと思います。今回、そのような技術に触れることができて、OTを学習していくことの面白みを再認識できました。