こんにちは!OT(制御システム)やIoTの世界へようこそ。
突然ですが、皆さんのご自宅の玄関の鍵を想像してみてください。普通の鍵なら、ギザギザの形が合えばドアが開きますよね。でも、もしその鍵が「リビングに入るのはいいけれど、寝室に入るのはダメ」「金庫を開けるのは特定の曜日だけ許す」といった、家の中の動きまで細かく見張ってくれたら、すごく安心だと思いませんか?
実は、工場やプラントで使われる産業用制御システム(SCADA)のネットワークでも、これとまったく同じ、いや、それ以上にスマートで強力な「門番」が必要なんです。それが今回お話しする産業用ファイアウォールによるディープパケットインスペクション(DPI)です。
小難しいセキュリティ用語が出てきても大丈夫。一歩ずつ、身近な例えを交えながら優しく解説していきますので、一緒にリラックスして学んでいきましょう!
—
1. なぜ「普通のファイアウォール」では工場を守れないのか?
オフィスワークで使う一般的なITネットワークのファイアウォールは、いわば「オフィスの受付係」のようなものです。「このIPアドレスからの通信は通してOK」「この怪しい国の通信はシャットアウト!」といったように、通信の宛先やポート番号(宛先の部屋番号のようなもの)を見て判断しています。
しかし、工場やインフラ施設を動かすOTの世界では、この「受付係」だけだと大きな穴が空いてしまいます。
制御プロトコルの特殊な事情
産業用機器が喋る言葉(プロトコル)である Modbus や S7Comm といった通信は、実はセキュリティ対策がほとんど考慮されていなかった時代に作られました。これらの通信は、基本的に普通のインターネットと同じ通り道(TCP/IPなど)を通って流れてきます。
そのため、普通のファイアウォールで「工場向けの通信だから、このポート(例えばModbusなら 502 番)は全部通そう!」と設定してしまうと、どうなるでしょうか?
悪意を持った攻撃者が、その 502 番ポートめがけて「すべての機械の電源を切れ!」という危険な命令を送り込んできたとき、普通のファイアウォールは「おっ、指定されたポート宛てだから通していいよ!」と、まんまと通してしまうのです。これでは泥棒に「勝手にどうぞ」と合鍵を渡しているようなものですよね。
—
2. DPI(ディープパケットインスペクション)ってなに?
ここで登場するのが、今回の主役である DPI(Deep Packet Inspection / ディープ・パケット・インスペクション) です。日本語に訳すと「深層パケット検査」となります。なんだかSF映画に出てきそうな名前ですが、やっていることはとてもシンプルです。
先ほどの「受付係」の例えで言うと、DPIは「手荷物検査官」です。
ただ「何号室宛てですか?」と封筒の表側を見るだけでなく、封筒をペリッと開けて、中に入っている手紙の文章(ペイロード)までしっかり読んで、「この内容は本当に安全か?」を確認するのがDPIの仕事です。
Modbusの例で見てみよう
例えば、工場の温度計のデータを読み取るだけの健全な通信(Modbus の関数コード 0x03: 保持レジスタの読み取り)であれば、「よし、通しなさい」とパスします。
しかし、そこに「モーターを最高速で逆回転させろ!」というような、危険な書き込み命令(関数コード 0x06: 単一レジスタの書き込み など)が混ざっていたらどうでしょう?
DPI搭載の産業用ファイアウォールは、「おっと、この部屋でその命令を出すのはルール違反だ!」と見抜いて、通信をバッサリと遮断(ドロップ)してくれます。これが、私たちが目指すホワイトリスト型フィルタリングの仕組みです。
—
3. 実践!産業用ファイアウォール(DPI)の設定イメージ
それでは、実際に産業用ファイアウォールでどのようにホワイトリストを設定するのか、具体的なイメージを見てみましょう。ここでは、代表的な産業用プロトコルである Modbus TCP を例に取ります。
現場のエンジニアが設定ファイルや管理画面(GUI/CLI)に書き込むルールのイメージは、次のような感じです。
# 産業用ファイアウォール DPI ホワイトリスト設定例 (Modbus TCP)
rule_name: "Allow_Temperature_Sensor_Read_Only"
action: "ALLOW" # 基本方針は許可だが、中身を厳しくチェックする
source:
ip: "192.168.10.50" # 監視サーバー(オペレーター端末)からの通信のみ許可
destination:
ip: "192.168.20.10" # 現場のPLC(温度制御デバイス)
protocol: "Modbus-TCP"
port: 502
# 【ここがDPIの真骨頂!】許可するModbusの「関数コード」を限定する
dpi_parameters:
allowed_function_codes:
- 0x03 # Read Holding Registers (データの読み取りは許可)
- 0x04 # Read Input Registers (入力値の読み取りも許可)
# 以下の書き込み系コードは一切許可しない(自動的にブロックされる)
# - 0x06 (Write Single Register)
- 0x10 (Write Multiple Registers)
この設定がもたらす安心感
この設定を施しておけば、万が一オフィスのPCがマルウェア(ランサムウェアなど)に感染し、そこから工場ネットワークへ侵入されたとしても安心です。
攻撃者がPLCに対して「設定を書き換えて暴走させよう」と書き込み命令(0x10など)を送っても、ファイアウォールが「おい、お前が持っているその手紙は書き込み用だろ!このエリアでは禁止だ!」と見破り、通信を止めてくれます。
—
4. 現場でインシデント(トラブル)が起きたときのハンドリング
「DPIを導入したら、なんだか急に機械が動かなくなったぞ……?」
新しいセキュリティ対策を導入した現場で、よくあるパニックの瞬間です。セキュリティリサーチャーやインフラ担当者として、こうした現場の泥臭いトラブルシューティングに直面したとき、どう動くべきでしょうか。
焦らずログを確認するステップ
1. ファイアウォールのドロップログを見る
まず、産業用ファイアウォールの管理画面を開き、どの通信がブロックされているかを確認します。「あ、新しいセンサーを追加したときに、新しい関数コードをホワイトリストに入れ忘れていたな」といった原因がすぐに特定できます。
2. 監査モード(Alert Mode)から始める
きついルールをいきなり本番環境に適用(Enforce Mode)するのは、心臓に悪いですよね。最初は「ブロックはせずに、違反があったらアラートだけ飛ばす(監査モード)」で数日間様子を観察し、正当な業務通信がどれだけ流れているかを把握してからホワイトリストを確定させるのが、現場に優しいプロの技です。
—
まとめ:一歩ずつ、確実な要塞へ
今回は、産業用ファイアウォールによるDPIとホワイトリストフィルタリングについて解説しました。
- 普通のファイアウォールは「宛先の部屋番号」しか見ないが、DPIは「手紙の中身(関数コード)」までしっかりチェックする。
- 「読み取りはOK、書き込みはNG」といったホワイトリスト運用をすることで、OT環境の致命的な暴走を防ぐことができる。
セキュリティの対策に「これで完璧」というゴールはありませんが、こうした地道なDPIの導入によって、サイバー攻撃者にとって「攻略するのにコストがかかりすぎる、おいしくない標的」に作り変えていくことができます。
難しい言葉に怯えず、一歩ずつ自分の管理するネットワークの「門番」を賢く育てていきましょう!それではまた次回の解説でお会いしましょう。
コメント