前に書いた。
Modbusは安全です。これは新しい発見ではありません。Modiconが1979年にこのプロトコルを設計したとき、インターネットでさえ普及しておらず、PLCが4 Gモジュールを介してパブリックネットワークに直接公開される日は想像できませんでした。当時の脅威モデルは“ケーブルがネズミに噛まれるかどうか”であり、“ポート502で中間者攻撃をしている人はいないか”ではなかった。
Modbusが使えないわけではない。プロトコルの問題とエンジニアリングの現場の問題は別物です。キャビネット内、隔離された制御ネットワーク内、および物理的に接続された1対1のRS-485バス上では、Modbus平文の欠点はほとんど脅威ではありません。問題はいつですか。そのRS-485ケーブルを4 G DTUに接続し、DTUにパブリックIPを接続し、デフォルトパスワードは変更されていません。
この記事では、セキュリティ理論ではなく、あなたと私が遭遇するかもしれない9つの状況について説明します。“もし”ではなく、“すでに起こった”。次に、機器を交換したり、既存のアーキテクチャを変更したりすることなく、リスクを許容可能なレベルまで低減する方法について議論します。
Modbusに欠けているもの
Modbusに欠けているものを見つけてください。“不安”は3つの言葉では要約できません。
** 認定制度はありません ** Modbus TCPのMBAPヘッダには1バイトのユニットIDフィールドがある。これはデバイスのアドレスであり、ID情報ではない。ポート502へのTCP接続を確立できる人は誰でも、関数コード0 x 0 3を読み取りホールドレジスタに、関数コード0 x 0 6を単一レジスタに書き込むことができます。试试看:telnet 过去发 `x00x01x00x00x00x06x01x03x00x00x00x01` --只要设备在线,它就会返回寄存器数据。パスワードもトークンも必要ありません認証も必要ありません
関数コード0 x 0 5を個々のコイルに書く。このフレームはわずか12バイトです。
| TX ID | Proto | Len | UID | FC | Coil Addr | Value |
|---------|-------|------|-----|-----|-----------|----------|
| 00 01 | 00 00 | 00 06| 01 | 05 | 00 01 | FF 00 |このフレームは、デバイス01のコイルアドレス0001をONにすることを意味します。正規のSCADAクライアントであれば、これは問題ありません。これは、ポート502に接続された見知らぬ人の場合にも有効です。機器は区別されない。
** 暗号化はありません。TCPペイロードのすべてのバイトはプレーンテキストです。Wiresharkは`modbus`フィルタでトランザクションID,機能コード,レジスタアドレス,データ値を直接見ることができる. Modbus TCPトラフィックのパケットを取得することは、レジスタマッピングテーブル全体を取得することです。あなたの工場のModbusトラフィックを5分間見ている人は、すべてのデバイスのレジスタマップを描くことができます。
**CRCは変更できません。** Modbus RTUのCRC-16とModbus TCPに依存するTCPチェックサムは、物理トランスポート層のビットエラー(ケーブルノイズや電磁干渉によるデータ反転)を検出するように設計されている。これらは暗号ハッシュではなく、改ざんに耐性があります。攻撃者はフレームを傍受し、レジスタ値を変更し、CRCを再計算して転送し、スレーブはフレームが変更されたかどうかを区別できません。
攻撃の流れを見る:
元のフレームマスター →スレーブ01 06 00 01 17 70D8 0B书き込みホールドレジスタアドレス0001=6000、50Hzに対応
インターセプト→ポストフレームの改ざん 01 06 00 01 02 58 C 9 C 3 600に変更5Hzに対応CRCは変わりましたが、攻撃者も数えています。駅から受け取った後も同様に実行。周波数コンバータの上限周波数は50Hzから5Hzに変更されました。モータは燃えていませんが、ポンプは水を出しません。
** リプレイ防止はありません。* Modbusにはタイムスタンプやシリアル番号保護はありません(MBAPのトランザクションIDはリクエストとレスポンスを一致させるだけで、セキュリティシーケンス番号ではありません)。同じフレームを無限に再生できます。先月、あなたがブロワーに停止命令を送り、攻撃者がそれを録音し、来月も同じことをしました。デコードはまったく同じで、デバイスはStopしました。
9つのリスクシナリオ
理論的な抜け穴ではなく、以下のことがさまざまな場所で起こっています。私自身が出会ったものもあれば、同僚が話したものもあれば、公開報告書にもあります。
シナリオ1:Modbus TCPダイレクトパブリックネットワーク-Shodanでポート502が公開されている
Shodan 上Search `port 502`,結果数はずっと上がっていた。2、3年前には6,000人ほどのデータが公開されましたが、今は1000人です。これらのデバイスには、PLC、RTU、ゲートウェイ、スマートメーターが含まれ、データセンターで実行されるものもあれば、水道SCADAのバックボーンネットワークにハングアップされます。Shodanはまた、デバイスから返されたModbusレスポンスを取得し、デバイスのモデルとファームウェアバージョンを直接表示します。
何も割れない。デバイスのIPをパブリックアドレスに割り当て、ポート502にACLはありません。これは、ワークショップのドアを開いたまま、デバイスのOperationパネルを道路に向けるようなものです。
nmapはより直感的です:
nmap -p 502 --script modbus-discover <target_ip>このNSEスクリプトはデバイス情報を読み込もうとします。デバイスが0 x 11(スレーブIDを報告)または0 x 2 B(デバイスIDを報告)に応答した場合、製造元、製品コード、ファームウェアバージョンが直接表示されます。しきい値はゼロ。
シナリオ2:水道·変電所Modbus RTUが4 G DTU経由でクラウドに透過的に伝送
フィールドではRS-485がModbus RTUを実行し、数十台のメーターがバスにぶら下がっています。リモート監視のために、4 G DTUが追加され、透過的な伝送モードに設定されています。DTUはシリアルデータをTCPパケットにパッケージ化し、クラウドサーバーに送信します。パブリックIPポート8899(502ではないが、それほど変わらない)。
問題は、DTUとクラウドサーバー間のリンクはプレーンテキストTCPです。このリンク上でMITM(中間者)として行動できる人は誰でも(必ずしも国家レベルの攻撃者ではなく、通信事業者のインサイダー、4 G信号ハイジャックデバイス、またはLTEネットワークの脆弱性を悪用する基地局の下の他のデバイスなど)、次のことができます。
1.すべてのModbus RTUトラフィックをリッスンし、完全なレジスタマップとリアルタイムデータを取得 2.偽の書き込みCommand(関数コード0 x 0 6または0 x 10)を注入し、デバイスパラメータを変更する。 3.バス上のすべてのデバイスを制御しながら、スレーブにブロードキャストコマンド(アドレス0 x 0 0)を送信することもできます。
昨年、攻撃者がパブリッククラウドプラットフォームIPを介してDTUのバックグラウンド管理ポート(デフォルトパスワードadmin/admin)に接続し、ポンプステーションの制御インターフェイス全体を直接見ることができたというケースがありました。幸いにも、動作しません。
シナリオ3:ModbusからMQTTゲートウェイへ-MQTTサイドヌード
Modbus RTUデバイス→プロトコル変換を行うゲートウェイ→ MQTT Broker(クラウドまたはオンプレミス)→上位アプリケーションの消費
ゲートウェイはレジスタデータをMQTTトピックにマップします。例えば、`/plant1/pump1/pressure` →レジスタ40001の値を保持します。MQTTのパブリッシュ/サブスクライブモデルはModbusポーリングよりもクラウドシナリオに適しています。
問題はMQTT側にあります。多くのデプロイメントはTLSをオンにしておらず、Brokerはクライアント証明書認証を必要とせず、TopicはACLを持っていません。攻撃者はBrokerアドレスとポート(通常は1883、平文MQTTデフォルトポート)を知っていれば、`mosquitto_sub`を使用してすべてのトピックを購読できます。
mosquitto_sub -h <broker_ip> -p 1883 -t "#" -v`#`はMQTTのマルチレベルワイルドカードで、すべてのトピックを購読します。数秒後、プラント全体のtemperature、圧力、メーターの測定値、および機器の状態がすべて手に入ります。Brokerがパブリッシュも許可している場合(ゲートウェイの双方向制御機能の多くはこれに依存しています)、攻撃者は制御トピックに直接コマンドを送信できます。
mosquitto_pub -h <broker_ip> -p 1883 -t "/plant1/pump1/control" -m "STOP"シナリオ4:工場内のイントラネットWi-Fi 上のModbus TCPのスニフィング
多くの工場では、Modbus TCP機器とSCADAサーバを同じWi-Fiネットワークに接続しています。Wi-Fiパスワードはデバイスのラベルに書かれ、キャビネットの外に貼り付けられています。
社内従業員(または訪問者、保守担当者、退職者が残したデバイス)がWi-Fiに接続すると、Modbus TCPトラフィックはブロードキャストドメイン内の平文になります。Wiresharkパッケージの場合:
フィルタmodt. port == 50210分で、すべてのデバイスのレジスタマップが描画されます。攻撃者がさらに進みたい場合、ARPスプーフィングはSCADAサーバのトラフィックを自分のマシンに誘導し、中間者として転送します。デバイス側のModbus Communicationは中断されず、SCADAインタフェースはすべて正常であり、バックグラウンドのデータはリアルタイムで盗まれています。
シナリオ5:ビル自動制御BACnet-Modbusゲートウェイ設定ページにパスワードが設定されていない
ビルの自動制御システムでは、BACnetとModbusはしばしば単一のゲートウェイに混在しています。Delta ControlsやSiemens Desigoのゲートウェイ製品の一部は、Modbus RTUインタフェースとBACnet/IPインタフェースの両方を備えています。
これらのゲートウェイは通常、Web設定ページを提供します。デフォルトでは、多くのインテグレーターはIPアドレスを変更し、レジスタマップを設定し、パスワードは工場出荷時のデフォルト、またはパスワードをまったく設定しません。Webページには、完全なレジスタマッピングテーブル、デバイスアドレス、ファンクションコード設定、さらにはオンラインデバッグ機能が公開され、Modbusの読み書きコマンドが直接発行されます。
Shodanは'BACnetゲートウェイ'または特定のゲートウェイモデルの製品ページを検索すると、そのようなエントリをたくさん見つけることができます。データを見るだけでなく、HVACバルブの開閉を直接変更し、空調温度設定値を設定し、冷凍機を起動·Stopすることができます。
シナリオ6:風力発電所SCADAのModbus制御コマンドを再生
風力発電所のSCADAシステムは通常Modbus TCPとタービンPLCでCommunicationする。制御命令には、スタートストップ、パドル角度調整、ヨー制御、電力制限などが含まれます。
2015 yearのウクライナの電力網攻撃の後、OTセキュリティに注目が集まり始めました。多くの風力発電所は遠隔地に建設されており、遠隔操作はVPNや専用線に依存しており、運用スタッフの流動性は高く、VPNアカウント管理はしばしば追いついていません。
“緊急停止”Modbusコマンド(関数コード0 x 0 5、特定のコイルに書き込む)が送信中に悪者によって傍受された場合(VPNクライアントが告発されたり、運用ノートブックがトロイの木馬に埋め込まれたり、内部ネットワークが横に移動したりなど)、フレームを保存することができます。攻撃者はModbusプロトコルの詳細を理解する必要もなく、レジスタマップを知る必要もなく、数ヶ月後に夜間にフレームを再生するだけです。送風機が受信されると、Stopが実行されます。
“≪時間| Time | emdw ≫”および“≪ターゲット| Target | emdw ≫”をリプレイします。一度録音し、100回。Modbusプロトコルにはこれを防ぐメカニズムはありません。
シナリオ7:OEMデバイスのデフォルト設定が悪用される
出荷効率を向上させるために、すべてのPLC/RTUは統一スレーブアドレス(アドレス01など)、統一機能コードサポートリスト、さらには統一レジスタマップを使用しています。さらに悪いことに、一部のベンダーはファームウェアにCommunicationパラメータを書き込み、変更できません。
これは、機器の試運転段階で便利です。しかし、実際に展開すると、セキュリティの悪夢になります。
分散型太陽光発電プロジェクトでは、すべてのデバイスのスレーブアドレスが01で、レジスタマップがまったく同じであると仮定します(40001=電力、40003=電圧、40005=動作状態、40101=スイッチ制御)。攻撃者がこれらのデバイスの1つまたは中間ネットワークノードに侵入すると、すべてのデバイスの制御青写真を取得します。他のデバイスは再検出する必要はありません。レジスタマップは同じです。
シナリオ8:レジスタ書き込み攻撃-デバイスパラメータの変更
このシーンが最も危険です。Modbusの保持レジスタは測定データだけでなく、デバイスパラメータも保持します。インバータの上限周波数、PIDパラメータ、アラームスレッショルド、キャリブレーション係数-すべてレジスタにあります。レジスタに書き込むことができる人は、デバイスの物理的動作を変更できます。
具体例:
| 設備は | レジスター·アドレス | パラメータ | 正常値です。 | 悪意のある値 | 結果は |
|---|---|---|---|---|---|
| 周波数変換器 | 40018 | 上限周波数は | 5000 (=50Hz) | 500 (=5Hz) | ポンプ水不足、生産ラインのStop |
| サーモスタット | 40005 | ターゲットtemperature | 250 (=25.0℃) | 800 (=80.0℃) | 過熱保護トリップ、または逆に凍結を引き起こす低下。 |
| 電気メーター | 40045 | 電流の変化比 | 100 | 1 | 電力データは百倍偏差、エネルギー消費計算は崩壊 |
| PLC | 40001 | 実行モード | 1の実行 | 0 SnapViewをStop | PLCの実行をStopする。 |
複雑な攻撃は不要です。nmapのmodbus-discoverスクリプトはレジスタマップをスキャンし、modbus-cliまたはpymodbusに直接書き込みます:
from pymodbus.client import modbusTcpClient
client = ModbusTcpClient(192.16 8.1.100)
client.write_register 18,500 #周波数コンバータの上限を5Hzに変更する4行のコード。許可は必要ない。周波数変換器が実装されます。
シナリオ9:RS-485バス物理アクセス-ワークショップドアがロックされていない
RS-485バスの物理的安全性はほぼゼロです。バス上のすべてのデバイスは差動信号ライン(A+/B-)のペアを共有しており、バス上の任意の場所でUSB-RS 485コンバータを接続すると、誰でも次のことができます。
1. ** パッシブリスニング:すべてのRS-485トラフィックを記録し、オフラインで分析します。 2. ** アクティブインジェクション **:マスターまたはスレーブになりすます。 3. ** バス干渉 **:継続的に送信されるデータがバス競合を引き起こし、ネットワーク全体をDDoSする
USB-RS 485コンバータTaobao $10。夜間検査中に機知に富んだ攻撃者は、人々が注意を払わない間にコンバータをワイヤスロットに隠し、リモートアクセスのためのマイクロ4 Gモジュールを追加します。誰が見つけられる?誰もRS-485バスの電気的特性を定期的にチェックしません。
鍵となるのは、RS-485バス設計自体がマルチステーション共有メディアであり、スイッチやポートアクセス許可を必要としないことです。物理的にはネットワークの一員です。Modbus RTUのスレーブアドレスは1-247であり、攻撃者はすべてのアドレスを列挙してデバイスタイプを検出することができます。
階層的防御:物理層から監視層までの完全なシナリオ
9つのシナリオの後、Modbusのセキュリティ問題は単一の方法では解決できないというのが自然な結論です。その問題はプロトコルスタックの各レイヤーに分散され、保護も分割されます。
これらのシナリオは理論的なものではなく、それぞれに対応する製品、オープンソースツール、または設定方法があります。自分の場所の条件に応じて。
ネットワーク層:Modbusをケージに入れる
** 最初の鉄の法則:Modbus 502ポートは決して公衆に直接公開しないでください。この言葉は強調しすぎてはいけない。機器のサプライヤーが“IPを直接パブリックに接続すると、リモート保守が容易になります”と言った場合は、サプライヤーを変更します。
具体的なOperation:
** ファイアウォールACLホワイトリスト。**ブラックリストではなく、ホワイトリスト。ポート502は、指定されたIP(SCADAサーバ、データ収集ゲートウェイ)のみを許可します。Linux iptablesは2行です。
iptables -A INPUT -p tcp --dport 502 -s 192.168.10.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 502 -j DROPデバイスのCPUがiptablesを実行できない場合は、ハードウェアファイアウォール(数百個の小さな産業用ファイアウォール)を使用するか、少なくともルーター/レイヤ3スイッチでACLを実行します。
**VLANの分離。** Modbusデバイスは、オフィスネットワーク、Wi-Fiネットワーク、ゲストネットワークから完全に分離された別のVLANに配置されます。VLAN間ルーティングは、SCADAサーバからポート502へのトラフィックのみを解放し、それ以外はルーティングされません。スイッチポートにMACバインドを行い、誰かがデバイスを抜いてノートブックを交換しないようにします。
**VPN/IPsecトンネル。**リモートアクセスが必要なシナリオでは、ポートをパブリックネットワークに接続する代わりにVPNを使用します。IPsecまたはWireGuardのどちらも可能です。Open VPNの設定は複雑ではない。
トンネル経由でポート502トラフィックのみを許可します。
push route 192.168.10.0 255.255.255.0"これにより、Modbusトラフィックは常に暗号化トンネルを通過します。攻撃者がVPNリンクを傍受した場合でも、TLS/AES暗号化により平文が得られなくなります。
トランスポート層:Modbus + TLS方式
Modbus + TLSといえば、まず現状を説明しましょう。**Modbus Organizationは2018 year 10 月にModbus/TCP Security仕様をリリースしました **。主な変更点:デフォルトポートが502から802に変更され、TLS 1.2で強制され、X.50 9 v 3証明書が認証され、ロールベースのアクセス制御が導入されました。
仕様では、次の4つの役割が定義されています。
| ロールID | 役割の名前 | アクセス権 |
|---|---|---|
| 0Administrator | フル機能コード、フルレジスタ、デバイス管理 | |
| 1 | Operator | すべてのレジスタを読み書き、変更できない。 |
| 2 | Engineer | デバッグ診断権限 |
| 3 | Observer | 読み取り専用データ、書き込み不可 |
これにより、Modbusの無認証の問題が完全に解決されます。クライアントはTLS接続を確立するために有効な証明書を保持しなければならず、証明書のロールフィールドによって実行できる関数コードが決まります。
しかし現実には、802ポートをサポートするデバイスは非常に少ないです。ほとんどのデバイスは502クリアテキストしかサポートしません。デバイスを変更せずにTLSを追加する方法?
**stunnelプログラム。** stunnelは、任意のTCPコネクションをTLSトンネルにカプセル化する軽量TLSプロキシです。展開の枠組み:
SCADAクライアント→ stunnel(ローカル127.0.0.1(1502)→ TLS → stunnel(リモート)→デバイス(502)stunnel設定が短い:
#クライアントstunnel.conf
[modbus-クライアント]
クライアント=はい。
accept = 127.0.0.1:1502
= 192.168.10.1:802
VerifyChain =はい
CAfile = /etc/stel/ca.pem
cert = /etc/stunnel/client.pem
key = /etc/stunnel/client.key
#サーバstunnel.conf
[modbus-server]
クライアント=なし
accept = 80 2
= 127.0.0.1:502
cert = /etc/stel/server.pem
key = /etc/stunnel/server.key
CAfile = /etc/stel/ca.pem
VerifyChain =はい直接接続されたデバイスの502ではなく、クライアントソフトウェア接続`127.0.0.1 1502`。中間TLS暗号化は上位層には完全に透過的です。stunnel自体はわずか数百KBで、組み込みLinuxゲートウェイ、Raspberry Pi、さらにはOpenWrtルーターでも動作します。
** 注:** stunnelはトランスポート暗号化の問題を解決し、アプリケーション層認証の問題を解決しません。トランスポートリンクが盗聴や改ざんから保護されていることを保証しますが、TLSトンネルが確立されると、Modbusフレーム自体は平文のままです。平文は暗号化されたトンネルと保護されたイントラネットの間でのみ送信されます。攻撃者がイントラネットにアクセスしてデバイスの502に直接アクセスできる場合、stunnelは保護されません。
アプリケーション層:Modbusセキュリティエージェント/ゲートウェイ
すべてのデバイスにstunnelを展開できない場合、またはより細かい制御が必要な場合は、Modbusバスと上位アプリケーションの間にセキュリティエージェント/ゲートウェイを追加することが、最も費用対効果の高いソリューションです。
Moxa MGateシリーズ、Hilscher netTAP、Advantech ADAM-45 70などの産業用ゲートウェイはすべてアクセス制御リストをサポートしています。ゲートウェイで設定できます。
- どのIPがどのスレーブアドレスにアクセスできるか - 許可されるコード - レジスタレベルの読み書き制御-アドレス40001-40050は読み取り専用で、4005 1 -40100は読み取り専用です。 - 接続レートの制限(ブルート対応ポーリング/DoS)
すべてのModbusゲートウェイがセキュリティポリシーをサポートしているわけではない。多くの安価なゲートウェイは透過的な伝送を行うだけで、ACL機能は選択表に`Access Control`或いは`Security Policy`フィールドを探す。
オープンソースプログラムもありません。pymodbusでプロキシを書くには数百行のコードが必要です:
Modbusセキュリティプロキシロジックの簡略化
ALLOWED_FUNCTION_CODES = {0 x 03 0 x 04 0 x 06 0 x 10} #これらの関数コードのみが許可されます。
READ_ONLY_REGISTERS = range(40001,40051)#このアドレスセクションは読み取り専用です。
def proxy_handler request
if request.function_code not in ALLOWED_FUNCTION_CO
return exception_response request.function_code 0x01 #不正な機能コード
if request.function_code in {0x06 0x10}
for addr in request.addresses
if addr in READ_ONLY_REGISTERS
return exception_response request.function_code 0x02 #不正なデータアドレス
#実際の機器への転送
return forward_to_requestこれらの行は、シナリオ8のほとんどのレジスタ書き込み攻撃をブロックします。
物理層:RS-485バスの物理セキュリティ
物理セキュリティは“低レベル”に聞こえますが、9つのシナリオのうち少なくとも3つは物理アクセスに関連しています。
最小限のコストでできることがいくつかあります。
1. ** クローゼットは施錠されています。単純なキーロックではなく、電子アクセスを使用して、誰がどのキャビネットをいつ開いたかを記録します。異常な時間(午前2時、3時)のキャビネットのドアが開く=物理的なセキュリティインシデント。 2. **RS-485バス用のシールド付きツイストペアトレーススロット。**ワイヤースロットシール、取り外しマーク。攻撃者に証拠を残させないでください。 3. **USBポートは無効です。***工場内の産業用コンピュータ/HMIはUSBドライブを接続する必要はありません。BIOSはUSBを無効にし、Windowsのグループポリシーはリムーバブルストレージを無効にします。誰かがUSB-RS 485コンバータを挿入し、システムが認識しません。 4. ** バス終端抵抗と取り外し防止センサー。** RS-485バスの両端には120Ωの終端抵抗があります。抵抗が取り除かれると(誰かがライン上のリスニングデバイスを間接的に使用してインピーダンスが変化する)、バスの電気特性が変化し、バスアナライザで検出できます。
費用はかかりませんが、物理アクセス攻撃の90%をブロックするのに十分です。
監視層:Modbusトラフィック異常検出
前のステップは“彼を入れない”ことでした。しかし、“すでに入っている”または“正当なユーザーが違法なことをした”場合には、検出機能も必要です。
Modbusトラフィックの異常特性は明確です。プロトコルがシンプルであるため、異常を識別しやすくなります。
** 周期的な変異 ** SCADAシステムは通常、固定周期(毎秒など)でデバイスをポーリングします。あるスレーブからのリクエスト頻度が突然1回/秒から100回/秒になった場合、大確率はSCADAの動作ではない。誰かがレジスターをブルートフォースでスキャンしたかもしれない。
**非標準関数コードが表示されます。** 0 x 0 3(読み取り保持レジスタ)と0 x 0 6(単一レジスタへの書き込み)のみを使用したシステムでは、0 x 0 8(診断)または0 x 2 B(デバイス識別)要求が突然発生します。
** 営業時間外の流れ ***工場出荷時(午後11時から午前6時など)には、Modbusバスに多くの読み書きコマンドがあるべきではありません。もしそうなら警察を呼ぶ。
** 異常機能コードの組み合わせ。**短時間で、0 x 0 5(単一のコイルに書き込む)、0 x 0 6(単一のレジスタに書き込む)、0 x 10(複数のレジスタに書き込む)の密な組み合わせが発生し、宛先アドレスが複数の隣接していない領域にまたがることは、ほぼ確実に悪意のあるOperationです。
オープンソースツール:
Zeek(旧Bro)にはModbusプロトコルパーサがある
#Zeekのポリシーディレクトリに検出スクリプトを書くWireshark + Modbusプラグインは、オフライントラフィック監査に使用できます。1日のバストラフィックをとり,Wiresharkの`Statistics` → `Protocol Hierarchy` → `Modbus`を用いて関数コード分布を見る.関数コード0 x 0 8と0 x 2 Bは赤旗です。
nmapの`modbus-discover` NSEスクリプトは、独自のSCADAサーバから定期的に実行し、新しいModbusデバイスがネットワーク上に出現しないかどうかをチェックします。
nmap -p 502 --script modbus-discover 192.168.10.0/24自分のものではないデバイスを発見すると、深刻な問題になります。
コンプライアンス·リファレンス
規制については触れず、Modbusの展開に直接影響を与えるいくつかの条項だけを述べます。
IEC 624 4 3 -3-3は、産業オートメーションおよび制御システムの7つの基本要件(FR1 ~ FR7)を定義しています。FR2(使用制御)は産業用通信の認証と認可を必要とし、FR3(システムインテグリティ)はCommunicationデータのインテグリティを必要とします。Modbus平文はFR2とFR3に直接準拠しない。stunnel/VPNは暗号レベルの要件を満たすことができます。
**NERC CIP北米電力信頼性規格 ** のCIP-005では、電力系統の電子安全境界ESPへのアクセス制御が要求されています。つまり、米国の電力業界でModbus Transmission Controlコマンドを使用する場合、ポート502はESP内またはESPの暗号化されたトンネルを通過する必要があり、裸ではありません。CIP-0 0 7はまた、Modbusデバイスのファームウェア管理に直接関係するシステムパッチとポートの最小化を必要とします。
** China EqualLogic 2.0(GB/T 222 3 9 -2019)** 産業制御システムの特別な拡張要件があります。主に、制御ネットワークと非制御ネットワーク間の境界保護と技術的分離の実装、制御命令伝送のための広域ネットワークの使用、産業用制御システム内のセキュリティ領域と分離の実装に応じて。Modbus機器を使用する場合、セキュリティレベル3以上のシステムでは、基本的なネットワーク分離、通信暗号化、アクセス制御が必須であり、オプションの余地はありません。
これらのコンプライアンス要件は設定ではありません。監査では、ネットワークアーキテクチャ図、ファイアウォールルール、パケットキャプチャ検証が行われます。Modbus TCPクリアテキストは、コンプライアンス監査を通過しません。
最小コスト保護リスト
中小規模の工場で、予算が限られており、機器が古くて交換できず、専任の安全エンジニアがいない場合は、以下の5つのことがあります。**これらの5つのステップは、追加の機器を購入することなく、攻撃の90%をブロックします。
1. ** すべてのポート502がパブリックネットワークからアクセス可能かどうかを確認してください。https://www.shodan.ioであなたのパブリックIPセグメントを検索するか、外部ネットワークで`nmap-p 502パブリックIP`をスキャンします。露出した場合は、ポートマップをオフにするか、ACを追加します。 2. **Modbus Gateway/DTUがデフォルトパスワードに変更。ゲートウェイのWeb 管理ページだけでなく、DTUのATコマンド設定パスワード(サポートされている場合)、MQTT Brokerの認証、VPNの事前共有鍵などを確認します。 3. ** Modbusデバイスを独立したVLANに配置し、ホワイトリストACLを設定します。**スイッチがVLANをサポートしていない場合は、少なくとも1つの独立したIPサブネットを割り当て、ルータにACLを適用し、SCADAサーバのみIPアクセス502を許可します。 4. ** SCADAサーバ上でWiresharkパケットキャプチャ監査を実行します。** 1時間のバストラフィックを記録し、異常機能コード(0 x 0 8,0 x 2 B)と不適切なデバイスアドレスがないかどうかを確認します。 5. ** Modbusネットワークをnmapで定期的にスキャンする ** cronを週に1回実行する`nmap-p 502--script modbus-discoverサブネット`を書いて、出力をdiffします。新しいデバイスの出現=誰かが何かを拾ってきた。
上記の5つを実装し、専用のOTセキュリティプラットフォームを使用するかどうか、SIEM統合を行うかどうかについて話します。ほとんどの小さな工場は最初のものをしません。
OPC UAのセキュリティモデルとの比較
ModbusセキュリティはOPC UAをバイパスできません。誰が誰を置き換えるかではなく、2つのセキュリティモデルのギャップを把握し、選択時にとんでもない決定を避けることです。
| ディメンションDimension | Modbus TCPネイティブ | OPC UA |
|---|---|---|
| 認定証 | なしなし。 | X.50 9証明書、ユーザ名/パスワード、Kerberos |
| トランスポート暗号化 | なしなし。 | TLS 1.2/1.3 UA-TCPまたはHTTPS UA-HTTPS |
| データ署名 | なしなし。 | 各メッセージはに署名可能(UA-Conversation) |
| アクセス制御 | なしなし。 | セッションレベル+ノードレベルACL |
| 監査ログ | 依存アプリケーション層 | 組み込み監査イベントタイプ |
| プロトコルの複雑性 | ミニマル、12バイトフレーム | バイナリ符号化、完全なOOオブジェクトモデル |
OPC UAはプロトコルスタックにセキュリティを組み込み、トランスポート層からアプリケーション層まで対応するセキュリティメカニズムを備えています。Modbusは実装者にすべてを投げた。OPC UAがModbusよりも“優れている”わけではなく、2つの全く異なる設計哲学です。OPC UAのセキュリティの複雑さは代償でもあります。TLSハンドシェイク、証明書管理、トラストチェーン、CRL/OCSP失効チェック-これらは組み込みModbusデバイスでは不可能です。Modbus RTUを実行するSTM 32はUARTと2,300行のCコードのみを必要とし、OPC UAを実行するにはTLSライブラリ、XMLパーサ、少なくとも数十KBのRAMが必要である。
“誰もがOPC UAを使う”とは言いません。はい:すでにModbusを使用している場合は、安全でないからといってシステム全体をOPC UAに置き換えないでください。stunnel、ファイアウォールACL、セキュリティプロキシを追加すると、プロトコルを変更するよりもはるかに安価になります。新しいシステム、選択段階、設備リソースが豊富で、IT/OT指向の統合アーキテクチャが必要な場合、OPC UAの自然なセキュリティ機能は、コンプライアンスと運用の後の段階で多くの節約につながります。
裏に書いた。
Modbusのセキュリティ問題は、技術的な問題ではなく、エンジニアリング管理の問題です。プロトコル自体にはセキュリティ機能はありませんが、デプロイされたアーキテクチャで保護された環境に置くことができます。ファイアウォールのないサーバーをパブリックネットワークに直接接続しないように、Modbusデバイスを信頼できないネットワークに直接接続してはいけません。
結局のところ、最も危険なのはプロトコルの抜け穴ではなく、“我々のような小さな工場は誰も攻撃していない”という感覚です。攻撃者は大規模な工場を選びません。自動スキャンツールは同じで、ポート502は開いたままです。
質問があったり、Wiresharkで自分でパケットをチェックしたりすると、驚く可能性があります。
Leave a Reply