【入門編】 BACnetプロトコル(ポート47808/UDP)を標的としたビル管理システムへのマルウェア感染拡大 – サイバーセキュリティとプライバシー保護実践ガイド

こんにちは!インフラエンジニアの皆さん、日々のネットワーク運用お疲れ様です。

オフィスの空調がパーフェクトに効き、照明が心地よく調整され、エレベーターがスムーズにやってくる――。私たちが何気なく過ごしている近代的なビルは、実は「BMS(ビル管理システム)」という巨大な頭脳によってコントロールされています。

普段、私たちが向き合うITネットワーク(パソコンや社内サーバーの世界)の隣には、空調やセキュリティゲートといった物理世界を動かす「OT(制御技術)ネットワーク」が広がっています。そして今、このITとOTの境界線が、サイバー攻撃者たちの格好の標的になっているんです。

今回は、ビル管理の心臓部である「BACnetプロトコル」と、そこに潜むネットワークの落とし穴について、身近な例えを交えながら一歩ずつ紐解いていきましょう!

—

1. ビル管理の共通言語「BACnet」ってなんだろう?

まずは、ビル管理の世界で使われている共通言語について知りましょう。
オフィスビルには、メーカーがバラバラの空調機器、照明、火災報知器などがたくさん入っていますよね。「A社のエアコン」と「B社のセンサー」が会話をするために使われているのが、BACnet(Building Automation and Control networks)という通信規格です。

ここで、一つ面白い(そして恐ろしい)特徴があります。BACnetは、ビル内の設備同士が「おーい、今の室温はどう?」と気軽に大声で会話できるように、ネットワーク全体に向かって一斉に呼びかける「ブロードキャスト通信」を基本として設計されているんです。

郵便配達に例えてみましょう

想像してみてください。
ITネットワークが「宛先と切手をしっかり書いた宅急便(ユニキャスト)」の世界だとすれば、初期のBACnetネットワークは、「町内会のスピーカーで『誰かお醤油貸してくださーい!』と叫ぶ」ような世界です。

町内の人全員に声が聞こえますし、返事も誰から返ってくるか分かりません。「はい、私持ってますよ!」と名乗り出た相手とそのまま通信を始めます。この「大声で呼び合えばすぐ繋がる」という便利さが、実はセキュリティの観点からは大きな弱点になってしまうのです。

—

2. ITからOTへの魔の手:ポート47808/UDPの脅威

通常、オフィスのパソコンがあるITネットワークと、空調を動かすOTネットワークの間には、ファイアウォールという頑丈な「門番」が立っています。

しかし、近年のスマートビル化(IoT化)の波に押され、メンテナンスの利便性から、ITとOTのネットワークが社内LAN経由でうっかり繋がってしまっているケースが後を絶ちません。ここにランサムウェアなどのマルウェアが侵入すると、どうなるでしょうか?

攻撃者は、社内の一般PCを踏み台にして、OTネットワークへの侵入を試みます。その際、彼らが真っ先に狙うのが、BACnetが標準で使用する47808/UDP(16進数で BAC0)というポート番号です。

攻撃のシナリオ

1. 侵入: フィッシングメールなどを通じて、総務部のPCがランサムウェアに感染。
2. 偵察(スキャン): マルウェアが社内ネットワークをスキャンし、47808/UDPが開いている機器(ビル管理サーバーやコントローラー)を見つけ出す。
3. 感染拡大: BACnetの「認証機能の甘さ(あるいは未実装)」につけ込み、コマンドを送りつけて機器を乗っ取る。
4. 物理的な脅威: ビル全体の空調を真夏の暖房最大に固定したり、セキュリティロックを解除したりして、人質にとる(ランサムウェアの身代金要求)。

デジタル空間のバグが、現実世界のビルを物理的に麻痺させる――これが、現代のサイバー攻撃の恐ろしさです。

—

3. ネットワークレベルでどう防ぐ?実践的な対策

「うちはビル管理なんて関係ないよ」と思ったそこのあなた、油断は禁物です。テナントビルに入居している企業であっても、社内ネットワークの不備から意図せずOTセグメントにアクセスできてしまう事故は後を絶ちません。

ここからは、ネットワークスペシストとして、今日からできる具体的な防御策をコードや設定を交えて見ていきましょう!

対策①:ファイアウォールでの厳格なセグメンテーション

大原則として、ITネットワークとOTネットワークは、間に次世代ファイアウォール(NGFW)を挟んで完全に隔離(エアギャップ、または厳密なゾーン分割)します。47808/UDPの通信は、正当な保守端末からのみ許可し、社内一般セグメントからのアクセスは一切遮断しましょう。

以下は、Linuxのパケットフィルタリングツール iptables を用いた、不正なBACnetアクセスのブロックおよびログ記録のサンプル設定です。

# ==========================================
# ITネットワークからOTネットワークへの
# 不正なBACnet(ポート47808/UDP)を遮断する設定
# ==========================================

# 1. 許可された正当なBMS管理サーバーのIPアドレスを定義
BMS_SERVER_IP="192.168.100.50"

# 2. 社内一般ネットワーク(例: 192.168.10.0/24)からのBACnetポートへのアクセスを拒否
iptables -A FORWARD -s 192.168.10.0/24 -p udp --dport 47808 -j DROP

# 3. 許可されたBMSサーバーからの通信のみ通過を許可
iptables -A FORWARD -s $BMS_SERVER_IP -p udp --dport 47808 -j ACCEPT

# 4. それ以外の不明なブロードキャスト/スキャンパケットをログに記録して破棄
iptables -A FORWARD -p udp --dport 47808 -j LOG --log-prefix "BACnet-Attack-Attempt: "
iptables -A FORWARD -p udp --dport 47808 -j DROP

対策②:IDS/IPS(侵入検知・防御システム)によるシグネチャ監視

万が一、内部犯行やVPN経由で侵入を許した場合でも、ネットワークの検問所で不審な動きを察知できるようにします。オープンソースのIDSであるSnortなどを使用し、BACnetの異常なトラフィックを検知するルールを導入しましょう。

以下は、Snort用のカスタムルールの例です。社内ネットワークから外部や別セグメントに向けて、不審なBACnetパケットが大量に発報されていないかを監視します。

# ==========================================
# Snort 検出ルール設定例
#BACnetの標準ポート宛ての不審なブロードキャストを検知
# ==========================================

alert udp any any -> 192.168.200.0/24 47808 (
    msg:"[SECURITY] Unauthorized BACnet Traffic Detected from IT Segment!";
    dsize: > 500; 
    classtype:successful-recon-limited; 
    sid:1000001; 
    rev:1;
)

*(※ dsize: > 500; は、通常の制御コマンドより不自然に大きいペイロードを持つパケットを検知するための簡易的なしきい値の例です)*

—

4. おわりに:ITとOTの垣根を越えたセキュリティチームへ

今回は、BACnetプロトコルを切り口に、ITネットワークとOTネットワークの境界防御について解説しました。

私たちが普段扱うパソコンやクラウドの世界と、ビルや工場を動かす制御の世界は、これまで別のエンジニアコミュニティによって支えられてきました。しかし、あらゆるものが繋がるDX(デジタルトランスフォーメーション)の時代において、その境界線はもはや曖昧になっています。

「オフィスのPCを守るセキュリティ」と「ビルの設備を守るセキュリティ」は、もはや別物ではありません。
ネットワークの仕組みを正しく理解し、適切なセグメンテーションと監視を行うこと――それが、私たちの働く安全な空間を守る第一歩になります。

それでは、また次回の技術解説でお会いしましょう!インフラの安全は、日々の地道なパケット監視から!

コメント

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