【入門編】 OT環境における資産管理と脆弱性スキャン(Passive Scanning) – IoT・OT(制御システム) & ブロックチェーンセキュリティ防御ガイド

こんにちは!ITインフラやセキュリティの道に足を踏み入れたばかりの頃って、専門用語の嵐だし、「間違った操作をしてシステムを止めたらどうしよう…」って、ビクビクしちゃいますよね。

特に、工場やビル空調などを裏で支える「OT(制御システム)やIoTデバイス」の世界は、普段私たちが触れているWebサービスやスマホアプリとは全く空気が違います。今回は、そんな現場で絶対に欠かせない「パッシブスキャンによる資産管理と脆弱性対策」について、身近な防犯の例えを交えながら、一歩ずつ優しく紐解いていきたいと思います。

気負わずに、リラックスして読んでいってくださいね!

—

1. 家の鍵とドロボウに例える「アクティブスキャン」と「パッシブスキャン」

皆さんが暮らしている「お家」を想像してみてください。夜中に突然、怪しいセールスマンがやってきて、玄関のドアをドンドンと叩き、「この鍵、本当に頑丈ですか?ちょっとハンマーで叩いて試させてください!」って言ってきたら、どう思いますか?「危ないから帰ってくれ!」って怒りますよね。

実は、これと全く同じことがネットワークの世界でも起きます。

01. アクティブスキャン = 家のドアを力づくで叩くやり方

従来のITセキュリティでは、ネットワークにつながっている機器(サーバーやPCなど)に対して、「おーい、生きてるか?」「お前の持ってる弱点は何だ?」と、こちらから積極的に話しかけまくる(プローブパケットを送りつける)スキャンが主流でした。これを「アクティブスキャン」と呼びます。

ITのサーバーなら、多少しつこく話しかけてもビクともしません。しかし、これが工場で24時間365日休まずラインを動かしている産業用ロボットや、古いPLC(プログラマブルロジックコントローラ)だったらどうでしょう?
急に大量の質問攻めにあった制御機器は、「処理しきれない!」とパニックを起こし、システムが突然フリーズ(ブルースクリーンやプチ停止)してしまうことがあるんです。工場が止まれば、数千万円単位の損害になることも珍しくありません。現場のエンジニアが「スキャンなんて絶対禁止!」と怒るのも納得ですよね。

02. パッシブスキャン = 廊下に隠しカメラを置いて、住人の会話を聞くやり方

そこで登場するのが、今回の主役である「パッシブスキャン(受動的スキャン)」です。

これは、家の中でドロボウのようにドアを叩くのではなく、廊下の天井の隅に静かに「聞き耳を立てるマイク(監視用ポート)」を置き、機器同士が勝手に喋っている通信の「おしゃべり」をそっと聞き取る方法になります。

自分からは一切話しかけません。機器が「やあ、今から温度データを送るよ」「了解!」とやり取りしている通信(トラフィック)のパケットを、そっとキャッチして、「あ、あそこの部屋にはエアコン(機器)があって、こういうメーカーの部品を使っているんだな」とノートにメモしていくわけです。

これなら、稼働中の制御機器に一切負荷をかけません。工場やインフラを止めることなく、そこにどんな「お宝(資産)」があるのかを安全に丸裸にできるというわけです。

—

2. ネットワークの「盗聴(ミラーリング)」でパッシブスキャンを始める

では、実際にどうやって通信を「聞き耳」立てて盗み見するのでしょうか?

会社のネットワークには、スイッチングハブという「通信の交通整理をする機械」があります。このハブの機能を使って、特定のポート(例えば、工場内の重要なPLCが集まるエリア)の通信を、まるっとコピーして、セキュリティ監視用のPC(パッシブスキャナー)に横流しする設定を行います。これをネットワーク業界では「ポートミラーリング(SPANポート)」と呼びます。

言葉だけだと難しそうなので、実際のネットワーク機器(Ciscoスイッチを想定)の設定例を覗いてみましょう。

# 【Ciscoスイッチでのポートミラーリング設定例】
# ※現場の環境に合わせて番号は読み替えてくださいね。

configure terminal
  ! 1. 監視対象のポート(工場ラインのPLCがつながっているポート)を指定します
  interface GigabitEthernet0/1
    description [OT] 1号ライン溶接ロボットPLC
    exit

  ! 2. コピーした通信を送り出す先(パッシブスキャン用PCをつなぐポート)を指定します
  interface GigabitEthernet0/24
    description [SEC] パッシブスキャナー用センサー
    exit

  ! 3. 監視元(Source)の通信を、監視先(Destination)にコピーするルールを作ります
  monitor session 1 source interface GigabitEthernet0/1 both
  monitor session 1 destination interface GigabitEthernet0/24

end
# 設定を保存します
write memory

このように設定すると、Gi0/1を流れる通信のコピーが、自動的にGi0/24につながれたパッシブスキャナーに届くようになります。PLC本体には何の負荷もかからないため、安心して安全な資産可視化がスタートできます。

—

3. 見つけた資産とCVE(脆弱性)を照らし合わせる

パッシブスキャンによって、「お、このIPアドレスの機器は、〇〇社の〇〇というモデルのPLCだな」という情報(資産台帳)が自動で集まってきます。

次に行うのが、「見つかった機器に、どんな弱点(脆弱性)が潜んでいるか」のチェックです。ここで登場するのが世界共通の脆弱性データベースである「CVE(Common Vulnerabilities and Exposures)」になります。

例えば、スキャナーが以下のような情報をキャッチしたとします。

  • 機器名:Legacy-PLC-X200
  • ファームウェアバージョン:v1.0.2

セキュリティ担当者は、この情報を元に、公開されているCVEのデータベースと照らし合わせます。「おや、v1.0.2には、遠隔から悪意あるコードを送り込まれて勝手に再起動させられる脆弱性(例: CVE-202X-XXXX)が放置されているぞ」といったことが分かってくるわけです。

ここで、Pythonなどのスクリプトを使って、簡易的にCVEの情報を突合するイメージを見てみましょう。実務では専用のOSS(OpenVASやSecurity Onionなど)を使いますが、裏側の仕組みはこんな風になっています。

# -*- coding: utf-8 -*-
import json

# パッシブスキャンで自動検出されたOTデバイスのモックデータ
detected_device = {
    "ip_address": "192.168.10.50",
    "vendor": "Acme Industrial",
    "model": "Legacy-PLC-X200",
    "firmware": "v1.0.2"
}

# 社内の脆弱性データベース(CVE)のマスターデータ
cve_database = [
    {
        "cve_id": "CVE-2024-9999",
        "vendor": "Acme Industrial",
        "model": "Legacy-PLC-X200",
        "vulnerable_versions": ["v1.0.0", "v1.0.1", "v1.0.2"],
        "severity": "CRITICAL",
        "description": "認証なしでリモートからコード実行が可能な脆弱性"
    }
]

def check_vulnerabilities(device, vulnerabilities):
    print(f"[*] 端末スキャン中: {device['ip_address']} ({device['vendor']} {device['model']} {device['firmware']})")
    
    found_vulns = []
    for vuln in vulnerabilities:
        # ベンダー、モデル、バージョンが一致するかチェック
        if (vuln["vendor"] == device["vendor"] and
            vuln["model"] == device["model"] and
            device["firmware"] in vuln["vulnerable_versions"]):
            found_vulns.append(vuln)
            
    return found_vulns

# 脆弱性チェックの実行
matched_cves = check_vulnerabilities(detected_device, cve_database)

# 結果の出力
if matched_cves:
    print("\n[!] 警告: 脆弱性が検出されました!対策を検討してください。")
    for cv in matched_cves:
        print(f" - 危険度: {cv['severity']}")
        print(f" - CVE ID: {cv['cve_id']}")
        print(f" - 内容: {cv['description']}")
else:
    print("\n[-] 該当する既知の脆弱性はありませんでした。")

このようにして、「何がどこにあるか(資産管理)」と「そこにどんな弱点があるか(CVE管理)」を紐付けていくことで、現場を止めずにセキュリティの弱点を可視化できるんです。

—

4. 現場を守るためのインシデントハンドリングの心構え

さて、パッシブスキャンとCVE照合によって、「我が社の工場には、こんなに古い脆弱なPLCがゴロゴロ眠っていたぞ…!」と分かったとします。

ここで新人のIT担当者がやりがちな失敗が、「大変だ!今すぐ全部の機器をアップデート(パッチ適用)して塞ごう!」と意気込んでしまうことです。ちょっと待ってくださいね、ここがOTセキュリティの最大の罠なんです。

ITの世界なら、サーバーのOSアップデートは日常茶飯事ですが、OT・制御システムの世界では、安易なパッチ適用は厳禁です。

  • メーカーがそのパッチの動作保証をしていない場合がある
  • ファームウェアの書き換え中にフリーズしたら、工場ラインが数日間ストップする
  • 下手に触ると、保証(ベンダーサポート)が切れてしまう

じゃあ、脆弱性が見つかっても指をくわえて見ているしかないの?いいえ、そんなことはありません。現場では次のような「泥臭い代替防御( compensating controls )」を組み合わせて守りを固めます。

1. ネットワークの隔離(マイクロセグメンテーション):
脆弱なPLCがつながっているエリアは、社内ニッチやインターネットから完全に隔離された「閉じたネットワーク」にし、ファイアウォールで厳重に門番を置く。
2. 不正通信の検知(IDS/IPSの導入):
パッシブスキャンの技術をさらに進め、怪しいコマンドが飛んできた瞬間にアラートを鳴らす(あるいは遮断する)仕組みを導入する。
3. 物理的なアクセスの制限:
そもそも制御盤の鍵をしっかりかけ、USBメモリなどを勝手に挿されないように運用ルールを徹底する。

—

まとめ

今回は、OT環境におけるパッシブスキャンを用いた資産管理と、CVEを活用した脆弱性管理についてお話ししました。

  • アクティブスキャン(ドアを叩く): 制御機器が止まるリスクがあるため、OT環境では基本ご法度。
  • パッシブスキャン(廊下の聞き耳): 通信をそっと盗み見(ミラーリング)するので、工場を止めずに安全に資産がわかる。
  • CVE管理と現実的な対策: 見つかった弱点をすぐに直せないOTの現場では、ネットワークの隔離や代替防御を組み合わせて守る。

セキュリティの世界は奥が深くて最初は難しく感じるかもしれませんが、「どうすれば現場の安全と止まらない業務を守れるか?」という視点を持てば、ぐっと面白くなってきますよ。

一歩ずつ、焦らず確実に知識と経験を積み上げていきましょうね!応援しています!

コメント

タイトルとURLをコピーしました