OTセキュリティブログ

Nozomi Networks Guardianで工場シミュレータGRFICSv2を可視化してみた

作成者: 株式会社テリロジー 技術統括部|Jun 12, 2022 3:00:00 PM

こんにちは。

Nozomi Networks製品を担当している木村と申します。

本日は Nozomi Networks Guardian (以降 Guardian) を工場シミュレータGRFICSv2に接続して可視化してみたいと思います。また、工場へ攻撃を行い、Guardianでどのように検出ができるのかを紹介できればと思います。

今回の実験を行うにあたり、こちらの書籍を参考にさせていただいております。

www.shoeisha.co.jp

GRFICSv2とは

オープンソースで公開されている、産業用制御シミュレータです。仮想の化学プラントをシミュレーションしています。

VirtualBox上で動作する仮想マシンが配布されており、簡単にセットアップすることができます。

仮想マシン上のアプリケーションは設定済みの状態で配布されていますので難しい操作は不要です。

バージョン2ということで以前のバージョンよりもグラフィックスが強化されているようです。

github.com

GRFICSv2のセットアップ

セットアップ方法はGRFICSv2のページで簡潔に説明されています。

以下私の方で少し補足をさせていただければと思います。

  1. VirtualBoxのインストール

GRFICSv2はVirtualBox上で動作する仮想マシンを提供しています。

事前にVirtualBoxを準備しておきます。VirtualBoxのセットアップについてはハマることはありませんでした。(私は、ESX上の仮想マシンにVirtualBoxを入れて動かしたので、VT-x関係でハマりました、、、機会があればどう対処したのかご紹介できればと思います。)

複数の仮想マシンを同時に動作させますので、VirtualBoxを動作させるホストには10GB程度のメモリを割り当てたほうがよろしいかと思います。

  1. GRFICSv2のダウンロード

以下の仮想マシンをダウンロードします。

hmi_vm

pfsense_vm

plc_vm

simulation_vm

WorkStationは今回、ダウンロードしませんでした。

  1. VirtualBoxにNICを追加

VirtualBoxマネージャー画面のファイル>ホストネットワークマネージャーをクリックします。

以下の画面と同じようになるように設定します。

  1. 仮想マシンのインポートとネットワーク設定

手順2でダウンロードした仮想マシンをVirtualBoxにインポートします。

hmi_vm

pfsense_vm

plc_vm

simulation_vm

仮想マシンのネットワークを手順3で準備したネットワークアダプターに適切に割り当てる必要があります。

各仮想マシンの設定は以下になります。

simulation_vm (インポートするとChemicalPlantという名前で表示されます。)

pfsense_vm(インポートするとpfSenceという名前で表示されます。)

plc_vm(インポートするとplc_2という名前で表示されます。)

hmi_vm(インポートするとScadaBRという名前で表示されます。)

  1. 仮想マシンの起動

各仮想マシンを起動します。

GRFICSv2のページではいろいろと操作について説明していますが、私の環境では、仮想マシン上でなにも操作する必要はありませんでした。

攻撃端末のセットアップ

  1. Kali Linuxのインポート

Kali LinuxのサイトからVirtualBox用の仮想マシンをダウンロードして、VirtualBoxにインポートします。

www.kali.org

仮想マシンのネットワーク設定は以下のようにします。

アダプター1はホストを介してインターネットに接続するために使用します。

アダプター2の方で攻撃パケットを送信します。

上記の設定ができたら起動します。

Kali Linuxへのログインアカウントは、ユーザー名kali パスワード kali です。

  1. 攻撃コードの準備

攻撃コードの詳細は、書籍を参照いただければ幸いです。

www.shoeisha.co.jp

内容は圧力バルブの開閉を不正に行い、反応炉を高圧状態にし、破壊するというものです。

1点補足させていただきますと、私の使用したKali Linuxに同梱されていたPythonのバージョンでは、pymodbus3が実行時にエラーを出力して使用できませんでしたので、pymodbusで代用しました。

  1. 攻撃コードの実行

攻撃コードを実行します。入力のバルブが全開、出力のバルブが全閉し、反応炉の圧力がどんどん上がっていき、破壊されます。

Guardianでの可視化

今回の環境をGuardianはどのように可視化できたのかを見ていきます。

こちらは攻撃前のネットワークを図示したものです。アイコンは可視化された機器、矢印は通信を示しています。

こちらは攻撃を実行したあとの図になります。

攻撃端末が追加され、バルブに対して新たな通信を行っていることがわかります。

Guardianは運用上、セキュリティ上のインシデントをアラートとして表示します。

こちらは不正端末が接続されたことを示すものです。

こちらは平時から比べて通信の間隔が短くなったことを検出したものです。攻撃端末の不正な制御通信を検出したものになります。

こちらは平時には検出されなかった監視制御の値が検出されたことを検出したものです。

まとめ

今回の実験では、Guardianの産業制御通信の解析機能と学習機能の組み合わせによって、攻撃による異常を検知できました。

このようなデモ環境を使用すると、監視制御がどのように行われているのか、またGuardianが検出した資産情報やアラート情報が何を示しているのかをイメージしやすかったです。

GRFICSv2をこれから触られる方、Guardianの導入をご検討されている方、産業サイバーセキュリティに携わられる方々に対しまして、すこしでも有用な情報を提供できていれば幸いです。