Overview
PLC(Programmable Logic Controller:プログラマブルロジックコントローラ)とは、製造ラインや産業設備の自動化制御を行うための専用コンピュータです。温度、圧力、流量などのセンサー入力を受け取り、あらかじめプログラムされたロジックに基づいて、モーター、バルブ、ポンプなどのアクチュエータを制御します。高い信頼性と耐環境性を持ち、過酷な産業環境でも安定して動作するよう設計されています。
RTU(Remote Terminal Unit:遠隔端末装置)は、遠隔地の設備監視・制御に特化したデバイスで、SCADAシステムのフィールド側端末として機能します。PLCがファクトリーオートメーションの制御に重点を置くのに対し、RTUは広域に分散した設備(変電所、ポンプステーションなど)のデータ収集と遠隔制御に特化しています。近年では両者の機能が統合され、PLCにRTU機能を搭載した製品も増えています。
PLC/RTUは産業インフラの心臓部であり、そのセキュリティ侵害は設備の異常動作、生産停止、環境汚染、さらには人命に関わる事故を引き起こす可能性があります。しかし、多くのPLC/RTUはセキュリティを考慮せずに設計された時代のものであり、認証機能の欠如、平文通信、ファームウェアの署名検証なしなど、多くの脆弱性を抱えています。近年、PLCを直接標的とするマルウェアの登場により、セキュリティ強化の緊急性が高まっています。
Details
PLCのアーキテクチャと動作原理
PLCは入力モジュール、CPU、出力モジュール、通信モジュールから構成されます。入力モジュールがセンサーからのアナログ/デジタル信号を受け取り、CPUがユーザープログラムに基づいて演算処理を行い、出力モジュールが制御信号をアクチュエータに送信します。このサイクル(スキャンサイクル)は数ミリ秒で繰り返され、リアルタイム制御を実現します。
PLCのCPUには、オペレーティングシステム(ファームウェア)とユーザープログラムが格納されています。ファームウェアはPLCの基本動作を制御し、ユーザープログラムは特定の制御ロジックを実装します。攻撃者がいずれかを改ざんすることで、制御動作を不正に変更できてしまいます。
ラダーロジックとIEC 61131-3
ラダーロジック(ラダーダイアグラム)は、PLCプログラミングで最も広く使用されるプログラミング言語です。リレー回路図を模したグラフィカルな表記法で、電気技術者にとって直感的に理解しやすいのが特徴です。左側に条件(接点)、右側に出力(コイル)を配置し、電流の流れに見立ててロジックを表現します。
IEC 61131-3は、PLCプログラミング言語の国際標準規格です。ラダーダイアグラム(LD)、ファンクションブロックダイアグラム(FBD)、構造化テキスト(ST)、インストラクションリスト(IL)、シーケンシャルファンクションチャート(SFC)の5言語を定義しています。この標準に準拠することで、異なるベンダーのPLC間でのプログラムの移植性と保守性が向上します。
PLC攻撃ベクトル
PLCに対する攻撃ベクトルは多岐にわたります。ネットワーク経由の攻撃では、Modbusや独自プロトコルを通じてPLCに不正なコマンドを送信し、制御ロジックの変更やファームウェアの書き換えを行います。多くのPLCプロトコルには認証機能がないため、ネットワークに到達できれば自由に操作可能です。
エンジニアリングワークステーション経由の攻撃は、PLCのプログラミングに使用するPCを侵害し、不正なプログラムをPLCに転送する手法です。Stuxnetはこの手法を使用しました。また、サプライチェーン攻撃では、PLCのファームウェアやソフトウェアの更新経路を侵害し、マルウェアを含むファームウェアを配布する可能性があります。
PLCルートキットとステルス攻撃
セキュリティ研究者により、PLCに常駐するルートキット(PLC Rootkit)の概念実証が発表されています。PLCルートキットは、PLCのファームウェアレベルに埋め込まれ、エンジニアリングソフトウェアからの読み出し要求に対して正常なプログラムを返しながら、実際には改ざんされたロジックを実行します。
この「ステルス攻撃」は検知が極めて困難で、オペレータがHMI画面で正常な値を確認していても、実際のプロセスは不正に操作されている可能性があります。対策として、PLCの入出力値を独立したセンサーで物理的に検証する方法や、制御フローの異常を検知する外部監視システムの導入が研究されています。
セキュアPLCプログラミング
PLCプログラムのセキュリティを確保するためには、セキュアプログラミングのベストプラクティスに従うことが重要です。入力値の妥当性検証、安全限界値のハードコーディング、ウォッチドッグタイマーの実装、プログラム変更の検知機能などが推奨されています。
2021年にCISAとICS-CERTが公開した「Top 20 Secure PLC Coding Practices」は、PLCプログラマー向けの実践的なセキュリティガイドラインです。モジュール化設計、アクセス制御の実装、診断情報の記録、フェイルセーフ設計など、PLCの安全なプログラミング手法を体系的にまとめています。
Security Measures
- 01PLCアクセス制御と認証の強化:PLCの設定変更やプログラム転送には、パスワード認証やキースイッチによる物理的な保護を必ず設定してください。デフォルトパスワードは即座に変更し、可能であれば多要素認証やロールベースのアクセス制御を導入して、権限の最小化を図りましょう。
- 02ファームウェアの完全性検証と管理:PLCのファームウェアはベンダーの公式チャネルからのみ取得し、ハッシュ値やデジタル署名で完全性を検証してから適用してください。ファームウェアのバージョン管理を徹底し、既知の脆弱性を含むバージョンが使用されていないかを定期的に確認しましょう。
- 03PLCプログラムのバックアップと変更検知:PLCプログラムの正規のバックアップを安全な場所に保管し、定期的にPLC上のプログラムとバックアップを比較して不正な変更がないか検証してください。プログラムの変更管理プロセスを確立し、すべての変更を記録・承認制にしましょう。
- 04ネットワークセグメンテーションとトラフィック制御:PLCをネットワーク上で適切にセグメント化し、必要最小限の通信のみを許可するファイアウォールルールを設定してください。エンジニアリングワークステーションからPLCへのアクセスは、専用のセキュアなネットワーク経由に限定しましょう。
- 05物理セキュリティの確保:PLCが設置されている制御盤やキャビネットに物理的なアクセス制御を施し、権限のない人員がPLCに直接触れることができないようにしてください。USBポートやシリアルポートなどの物理インタフェースも保護し、不正なデバイスの接続を防止しましょう。
- 06セキュアPLCプログラミングの実践:CISAの「Top 20 Secure PLC Coding Practices」に従い、入力値の範囲チェック、安全限界値のハードコーディング、ウォッチドッグタイマーの実装、フェイルセーフ設計を必ず組み込んでください。PLCプログラムのコードレビューを実施し、セキュリティ上の問題がないか確認しましょう。
Incidents
📋 StuxnetによるSiemens製PLC攻撃(2010年)
Stuxnetは、Siemens製のPLC(SIMATIC S7-315/S7-417)を直接標的とした史上初のマルウェアです。Step 7エンジニアリングソフトウェアを介してPLCに感染し、ウラン遠心分離機の周波数変換器(VFD)を制御するラダーロジックを改ざんしました。正常時は遠心分離機を1,064Hzで回転させる設定を、一時的に1,410Hzに加速、または2Hzに減速させる不正なコードを注入しました。
さらにStuxnetは、PLCからHMIへの読み出し応答を傍受し、正常な回転数を表示させるマン・イン・ザ・ミドル攻撃を実行していました。これにより、オペレータは異常に気づくことができず、約1,000台の遠心分離機が数ヶ月にわたって破壊されました。この事件は、PLCの脆弱性が国家安全保障レベルの問題であることを世界に示しました。
📋 INCONTROLLER/PIPEDREAMマルウェアの発見(2022年)
2022年、米国CISAとセキュリティ企業Dragosは、複数のICS/PLCベンダーの機器を標的とする高度なマルウェアフレームワーク「INCONTROLLER」(Dragosではpipedreamと命名)を発見しました。Schneider Electric製PLCやOMRON製サーボドライバ、OPC UAサーバーなど、複数のベンダーの制御機器を操作する機能を持っていました。
INOCONTROLLERは、PLCの設定変更、プログラムの書き換え、機器の無効化などの多彩な攻撃機能を備えており、特定の施設ではなく幅広い産業セクターを標的にできる汎用的なICS攻撃ツールとして設計されていました。実際の攻撃に使用される前に検出されましたが、ICS攻撃ツールの高度化と汎用化の傾向を示す重要な事例です。
📋 Schneider Electric Modicon PLCの脆弱性(2019年)
2019年、セキュリティ研究者がSchneider Electric Modicon M580およびM340 PLCに重大な脆弱性を発見しました。認証バイパスの脆弱性により、攻撃者がネットワーク経由でPLCの制御を完全に奪取できる状態でした。具体的には、UMAS(Unified Messaging Application Services)プロトコルの認証メカニズムを回避し、PLCプログラムのダウンロード、アップロード、実行制御が可能でした。
さらに、PLCのファームウェアを解析した結果、暗号化されていないパスワードがメモリに平文で保存されていることも判明しました。これらの脆弱性は、電力、水処理、製造などの重要インフラで広く使用されている機器に影響があり、Schneider Electricは修正パッチをリリースするとともに、ネットワーク分離などの緩和策を推奨しました。