もし、自由に使える制御システムがあったら、あなたは何をしたいですか?それは、壊しても怒られず、すぐに戻せる制御システムです。身近な機器を遠隔制御したり、サイバー攻撃の検証をしたり。本稿では、リアル感ある制御システムが思いのほか手軽に作れて勉強になった話をお伝えします。制御システムってどんなものだろうと思う方は読んでみてください。そして興味を持った方はぜひ作ってみてください。自ら作ってみると、制御システムが身近に感じていただけると思います。
はじめに
サイバーディフェンス研究所の安井です。長年制御システムを開発してきた経験から制御システムセキュリティ向上に取り組んでいます。
重要インフラをはじめとする制御システムの重要性が言われて久しいですが、制御システム全体を触った事がある人は少ないのでは無いでしょうか?サイバーセキュリティの学習において、目で見て触って体験できると理解が深まるため、弊社では、トレーニングや検証を目的とした様々な制御システムを構築しています。
例えば本気で制御システムを学ぶのであれば、以下に示したような現実社会で使われているPLC製品やSCADAパッケージ製品を使って学べるのが理想とは思います。
しかし、予算の関係でこのような環境で学べる方は多くは無いと思います。以下に示すような仮想的な制御システム1であれば、実質0円でリアル感あるものが作れる上、これを触る事で設計にまで踏み込んだ技術概要を理解できるようになります。
PCだけあれば、あとは構築に関するノウハウを知れば、このような制御システムが実質無料で構築できるのです。
PLC、SCADAって何?という方へ工場制御システムを例に簡単に説明2すると、仮想工場にある制御盤の中にPLCがあり、ベルトコンベアやアームにつけられたセンサーが検出した情報を数十msecの周期でPLCに入力し、PLCにて様々な計算を行い、PLCからベルトコンベアやアームに制御命令を出力しています。SCADAはPLCとは離れた遠隔地に設置されており、数秒周期でPLCの内部状態の一部を監視したり書き換えたりする事ができます。仮想工場建屋は無人で、遠隔地の監視室からSCADAを使って工場の状態を監視しているようなイメージです。
できるようになる事
仮想マシンによるリアル感ある模擬制御システムが作れるようになります。
メリット
セキュリティ分野で考えてみます。
- 壊してもすぐ直せる為、サイバー攻撃・検知・防御を気楽に実験・訓練できる。
- 動く物があると周りの人たちの理解が早く、教育に活用できる。
- 経営層へサイバー攻撃と対策をデモすることでセキュリティへの理解が進む。
対象者
制御システムの全体像ってどんなだろうと興味ある方。
学習用に制御システムを欲しいと思っているが予算に困っている方。
英語は苦手で情報収集が苦手な方。
公開の意図
本日公開するのは、一般公開されている情報を実際に比較し検証した内容であり、制御システムを欲しいという方達の手助けになればと思い公開させていただくものです。本稿を参考にすることで基礎的な制御システムが作れるようになり、更に応用することで冒頭に紹介したような工場システムも作れるようになります。
構築に必要なもの
- 最低1台のPC
- VirtualBoxへ仮想マシンイメージをインポートする知識(ググって見つかる程度の知識)
お伝えする内容
- 構築のノウハウ
- 検討経緯
構築ノウハウについては、手順を詳細に解説するものではなく、各情報源を紹介しています。その上で、試す前に知っておくといいと思う情報を記載しています。構築のノウハウだけでなく、検討経緯をお伝えする意図は、自作しカスタマイズしようという方は、なぜその結論に至ったかを知りたいだろう思うためです。
構築のノウハウと検討経緯
弊社ではサイバーセキュリティの学習や検証用として、購入品や自社開発品をあわせいくつかの制御システムを保有しています。2018年ごろから制御システムの導入検討を始め、当初は、手ごろに制御システムを構築できる手段を探し回ったり、制御システムを勉強される方がよく行うようなRaspberry Piを使った制御実験もしていました。様々な経緯を経て、現在まで冒頭で示したような制御システムを構築して来たのですが、今回、これらシステムを構築してきた経験から得たノウハウの中から基礎的な制御システムを構築するノウハウを公開させていただきます。
余談ですが、冒頭の鉄道制御システムはプロの制御屋さんにお声がけして弊社と共同で今年完成した物です。世間で実際に使われている機器を使った本格的な制御システムを作ろうとなると、自ら企画し専門家の手を借りて制作するのが良いという結論に至り制作した物です。こちらについてはまた機会があれば紹介したいと思います。
とはいえ、物理的な制御対象を要するものは構築費用が高くなってしまうため、本稿では、仮想的な制御システム3に絞って紹介します。制御システムを導入しようと検討されている方は、まずは容易に構築できる仮想的な制御システムを構築してみる事をお勧めします。その上で必要に応じて本格的なものを導入していくと無駄が少ないように思います。
以降では、制御システムの構築のノウハウと検討経緯をお伝えしますが、制御対象、PLC、SCADAの3つの要素に分けて説明します。
制御対象の選定
制御対象としては、簡単に見つかるGRFICSと頑張れば見つかるFactory I/Oを紹介します。
GRFICS
「制御システム」「シミュレータ」「セキュリティ」などで検索すると、まずは国家規模のプロジェクトや大手ベンダの模擬制御システムの情報が出てくる中、仮想環境で構築できるものも見つかります。それがGRFICSでありググれば日本語で構築手順まで含めた記事も見つかると思います。現在は改善されたGRFICSv2が最新版であり、サイトの手順どおりに構築すれば半日もあれば動かすことができると思うので、とにかく無償のものが欲しく、手軽に試したいという方はGRFICSv2を構築してみる事をお勧めします。
サイバー攻撃事例も以下の公式youtubeが公開されており、英語が聞き取れずとも理解できるくらい優しい解説がされています。
Factory I/O
更に英語圏に手を広げて探すと、「Virtual Industrial Cybersecurity Lab」の記事に辿りつけます。ここを見つけられたあなたはラッキーです。
今回、記事を書こうと思ったのもここまで詳しく丁寧に解説してくれている記事がある事を多くの方に知っていただきたいと思った事が大きな理由です。「Virtual Industrial Cybersecurity Lab」を読めば、リアル感ある制御対象、PLC、SCADAが無料で構築できます。英語のサイトですがgoogle翻訳やDeepLを使えば日本語でも理解できるくらい優しく解説してくれています5。SCADA,PLCについては後で触れるとして、ここではFactory I/Oに絞って記載します。
まずFactory I/Oの公式youtubeサイトはこちらです。
Factory I/Oを実際に触ってみて優れていると感じたのは、上記の動画を見てもわかるのですが制御対象である工場を容易にカスタマイズして作成できる点です。もう1つ使ってみて分かった非常に優れていると感じたところは、現実世界と同じように人が物を触るところをシミュレートしており外乱が発生する点です。工場の制御盤のボタンを操作できるのみならず、ダンボールを手で移動したりロボットアームによりダンボールが微妙にずれた位置におかれたりと現実世界のアナログ的な要素までシミュレートされています。以下はダンボールを手で移動しているところと、センサーを故障状態にしてダンボールが転がっているところです。
リアル感が伝わるでしょうか?触っていてリアル感がありとても面白いです。
なお、Factory I/Oはリーズナブルとはいえライセンス費用が発生する製品ですが30日の無償使用期間があるので、まずは無償でお試しすることが可能です。
制御対象をカスタマイズしたい、PLCの中で行われている事も覗きたいと思われる方にはFactory I/Oを使って制御システムを構築することをお勧めします。ただし、制御対象のカスタマイズ方法は公式マニュアルを読んで学ぶ必要がありますし、動かすには後述するPLCが必要で、PLCのプログラムであるラダープログラムの基礎を学ぶ必要があるので記事の内容を全て理解して動かせるようになるには1週間程度はかかるのではないかと思います。しかしこれを理解できれば複雑な工場も作る事ができますし、ラダープログラムの基礎を理解できるとPLCへの攻撃や防御の勘所が掴めるため興味ある方はぜひトライしていただきたいです。
GRFICSとFactory I/Oを試すお勧め順について
まずは、GRFICSを解説どおりに触り一通り動かして試して制御システムの全体イメージを理解してから、Factory I/Oを使って制御対象のカスタマイズやPLCの内部のプログラムまで踏み込んで試してみるのがストレスすくなく理解も早いと思います。
PLCの選定
無償で使えるPLCを探すと、OpenPLCとCODESYSが見つかるはずです。
OpenPLC
IEC 61131-3に準拠したオープンソースのソフトウェアPLCです。開発環境、実行環境共に無償で使えます。上述したGRFICSv2はOpenPLC version2を使用しています。また、Factory I/OもOpenPLCと接続することが可能であり、「Virtual Industrial Cybersecurity Lab」の記事でもFactory I/OとOpenPLC version3を接続して実装しています。
なお、記事内でも言及しているとおり、「ライン制御機能が動く事を確認したプログラム」であり、ベストプラクティスに従ったコーディングでは無いことは注意してください。とはいえ、ラダープログラムを知らない方がPLCがどのような仕組みで制御しているのかを理解するには、このぐらいのシンプルな例が分かりやすいと思います。
PLCのプログラム設計に関わった事が無い人は、"ラダー"と聞くと未知の世界でハードルが高いと感じる方もいると思いますが、初学者にはJavaやPythonなどのソフトウェア言語を学ぶよりも直感的で分かりやすいかも知れないです。上記のラダープログラムの内容を見てもわかるように電子部品を組み合わせて工作している感覚でプログラムできるので、工作に興味ある人には面白いと思います。PLCについてゼロから学ぶ方は、大学の先生が公開していただいているこちらのyoutubeが分かりやすくお勧めです。
Factory I/Oの記事で紹介しているOpenPLCのプログラム程度であれば当該チャンネルのVol.1から4本程度の動画をみれば、1時間程度で大体内容を理解できるようになると思います。
CODESYS
IEC 61131-3に準拠したソフトウェアPLCです。開発環境は無償で使え実行環境も連続2時間までは無償で使えます。上述したFactory I/Oの公式サイトではCODESYSのチュートリアルとサンプルが記載されています。今回の目的としてはOpenPLCで十分であったためCODESYSは試しませんでした。
SCADAの選定
ここでいうSCADAの選定とは、SCADAを構築するための開発環境の選定という意味です。サイバーセキュリティの基本学習を目的とするのであれば、作成するSCADAのアプリケーションはPLC内の情報を表示・設定する程度のシンプルなものとした方が理解がしやすいと思います。ちなみに一言でSCADAといっても今回紹介するようなシンプルなものから、多量の情報をもとに複雑な計算や処理を行う機能を要するものや、サーバを多重化したり記録機能用のサーバや認証用のサーバを持つ大規模なものまで様々です。ここでは、無償で使えるScadaBRとFernhill SCADAを紹介した上で、有償の市販品についても少し言及します。
ScadaBR
OpenPLCの公式ページで紹介されているopen-sourceのSCADAです。GRFICSの記事やFactory I/Oの記事でも採用されており導入は容易だと思います。次にあげるFernhill SCADAよりは、解説資料が世に出回っており導入はしやすくGUIの作成も容易ですし表画面なども簡単に作成できるので、手軽にSCADAの基本機能を理解するという意味では非常に優れていてお勧めです。
なお、GRFICSの記事およびFactory I/Oの記事にはScadaBRのインストール方法は記載されていますが、ScadaBRを用いたSCADAの作成カスタマイズ方法については記載されていません。例えば、Factory I/OとModbus/TCPプロトコルで接続するSCADAをScadaBRで作成する場合は、以下の2つの動画にModbus/TCPのプロトコルを用いてPLCの情報をScadaBRを使って表示設定するSCADAの実装方法が書いてあるのでいずれかを見ると参考となると思います。こちらも英語ですが一つ一つの手順を操作をしながら解説しているので字幕を見ながら見るだけでも理解できると思います。
ただし、ScadaBRには残念なところがあり、GUI画面からPLCへ送信する数値を設定する部分のインタフェースが直感的ではなく使いづらく6、ここが残念だと感じ弊社のプロジェクトへの採用は見送りました。
Fernhill SCADA
商用ですが25点までであれば無償利用可能なSCADAです。いくつかある無償で利用できるSCADAの中からこちらを試してみた理由は、ScadaBRのようなGUIの数値入力部の違和感はないことと、各社のPLCと接続可能という情報を見つけた為です。低コストでSCADAを開発したい方向けをコンセプトとしているのか費用は開発ライセンスだけであり、作成したSCADAを動かすことは無料です。基本的なサンプルがついていて、それを調べながらオリジナルのSCADAを作る事ができましたが、とにかく公開されたマニュアルが少なく、ほぼ試行錯誤での実装を余儀なくされましたので、時間のない方には辛いかもしれません7。
Modbus/TCPプロトコルに対応していたため、弊社では工場制御システムに適用してみました。なお、期待していた冒頭の鉄道システムで採用したPLCとの接続は、残念ながら通信プロトコルが対応しておらず接続できませんでした。こういうところが公開情報だけからは読み取れず実際に試してみないとわからないところです。
市販品の汎用パッケージSCADA
ScadaBRとFernhill SCADAを検証した後に、数十万円の某日本製のSCADA製品を使ってみたのですが、断然使いやすかったです。画面作成するためのGUI部品が充実しており、国内外のPLC製品の各社固有のプロトコルだけでなくModbus/TCPを初めとする汎用的なプロトコルにも対応しており、どんなPLCでも簡単につながるのだろうと思える充実度でした。当然ながら、日本語マニュアルも充実しています。この結果から、多少の予算が出せるのであれば、学習コストを考えれば、市販品の汎用SCADAを購入した方が効率的に見栄えも良いものができそうだという結論に達しました。試してみたい方はSCADA MAGAZINEの比較記事が参考になると思います。
利用時間限定などで無償で試せる製品もあるので、試してみるとより便利さがわかると思います。弊社では鉄道制御システムに市販品のパッケージSCADAを採用しております。
コラム なにが勉強になったか(感想的な内容なので興味ある方以外、読み飛ばしてください。)
タイトルで「勉強になった話」としてあり、なにが勉強になったかというと「なんとなく分かった気になっているし、試すのはハードル高そうで放置していた事でも、一歩踏み出して実際試して見たら、思ったよりもハードルは高くなく得られることは多かった。」という事です。
筆者はネットワーク、サーバ構築やプログラミングの経験は長かったのですが、数年前までPLC設計についてはラダーを使っている事を知っている程度の理解でした。大きなシステムの場合、分業制も進んでおり直接の業務に関わらない部分は、机上知識だけという事も多いと思います。PLCの設計に触れてみて、PLCと制御対象であるセンサー・アクチュエータ8との通信頻度や、PLCとSCADAの間で具体的にどのようなデータがやりとりされるのか等、作る事で非常に理解が深まりました。また、自分が慣れ親しんだサーバ・ソフトウェア等のデジタルな世界と、アナログな外乱が発生する物理事象をリアルタイムで制御するPLCの世界との違い等も実感できました。今回OpenPLCや様々なSCADAを試したことで、冒頭で書いた身近な機器の遠隔制御システムなども発想さえあれば比較的安価で容易に実装できるのだろう9等と視野が広がりました。と、、、いくら文字で書いても伝わりにくいと思いますので是非試していただきたいところです。
ところで、サイバーセキュリティの世界においても、扱う範囲が膨大すぎて理解しきれないということもあるのか、セキュリティ対策を導入する上で、評判や信頼関係を大きな判断基準としている場面を見かける事もあるのではないでしょうか。それを否定するものではありませんし、妥当な場合も多いのだろうと思います。ただ、少しでも興味がある方は実際に手を動かして試してみると視野が広がり自分で見極める力がつくように思います。現在は情報源さえ発見できれば、大金をかけなくても予想外に容易に体験できることは沢山あるように思いますし、実体験をもとにした判断ができた方が楽しいし大きな失敗も少ないのではないでしょうか。「そんなことは技術者が集まっていて実験する時間をとれるような恵まれた環境だからできることであり、業務に多忙な中でそんな時間はとれない。」という方も多いとは思います。そんな方は、弊社のようなところに声をかけて相談するのも手かもしれません。弊社も本格的な制御システム製作はプロの制御屋さんの力を借りて大変勉強になりました。なんにせよ、理解して判断できるようになると強いと思います。
こんなことを今回の記事を作成していて思いました。私自身、今後も実際に試すことでの知見を深めていきたいと思っております。
まとめ
まず手始めに手軽に制御システムを作成してみたい方はGRFICSを作ってみることをお勧めします。その上で、リアル感ある制御システムを作成してみたい方はFactory I/Oを使った制御システムを作ってみる事をお勧めします。
自ら作って触ってみると、今後制御システムの記事を読んだ時の理解が一段と深まるようになると思います。無料でできるのでぜひ試してみてください。この記事を見て、制御システムを構築してみようと思う方が増えていただければ幸いです。
おわりに
ここまで読んでいただきありがとうございます。本文中で具体的な企業・団体名はあえて未記載としました。これは個別組織に対する批評や比較をする意図は無いためです。
なお、残念ながら自作するほどの手間はかけられないという方や、冒頭で紹介したようなもっと本格的な模擬制御システム10がほしいという方、あるいわ、作成のみでなく環境を使ったサイバー攻撃・防御についてまでも勉強されたいという方は、弊社へご相談ください。
-
本稿の記事を読むことで、このシステムを簡略化したようなものが作れるようになります。ただし、このシステムそのものが作れるわけではありませんのでご注意ねがいます。 ↩︎
-
あくまで、ここで示したような基礎的なシステムの例です。システムによりここに記載していない複雑な事をするシステムは世の中に沢山あります。 ↩︎
-
ここで紹介する仮想的な制御システムは、SCADAとPLC間、PLCと制御対象間ともにModbus/TCPプロトコルで通信を行うシステムです。一般社会で使われている実際の制御システムはSCADAとPLC間、およびPLCと制御対象間の通信は様々なプロトコルで実装されています。 ↩︎
-
詳しくは記載しませんが、OpenPLCv2はPLCの内部アドレス情報を表示しないのでPLC内部状態を視覚的に把握しにくい点と、PLC内のファンクションブロック(FB)で記載されたプログラムはラダー(LD)で記載されたプログラムと比べるとPLC内で何が行われているかの理解はプログラム経験の無い初学者には容易ではないと思える点がPLCの内部の状態が見えにくいと感じた点です。 ↩︎
-
Factory I/Oについては、日本語の解説記事は見つけれませんでした。 ↩︎
-
各種記事を参考に検証した程度であり機能の全てを調べ尽くしたものではありませんので、そんな事ないという情報あれば指摘ください。 ↩︎
-
辛いかも知れないというのは、開発会社へは問い合わせせず、あくまでググって得られる情報をもとに思考錯誤した上での感想です。 ↩︎
-
アクチュエータは制御信号を機械的な動作に変換する駆動装置です。 ↩︎
-
ググればOpenPLCでRaspberry Piを使って制御する記事も沢山あります。何かいいテーマがあれば作ってみたいと思っています。 ↩︎
-
やはり、仮想的な制御システムだけでなく、世間で実際に広く使われているPLC機種やSCADAを使うことで分かる事も当然沢山あります。PLCにせよSCADAにせよ、いろいろな機種を触る事で同じ点や相違点なども見えてきます。一例をあげると、現実世界ではセンサーやアクチュエータをIP通信で制御する例は少ないですが仮想環境ではModbus/TCPというIP通信で制御しています。 ↩︎