UPnPの用途とセキュリティ - ホームネットワークで必要か
UPnP (Universal Plug and Play) の仕組み、用途、セキュリティリスクを整理し、ホームネットワークで有効にすべきかを検討する。
UPnP とは
LAN 内のデバイスがルーターに対して 自動的にポートフォワーディングを要求 できるプロトコル。手動でルーターの管理画面からポート転送設定をしなくても、アプリやデバイスが必要なポートを自動で開放する。
インターネット → [ルーター:8080] → [LAN内デバイス:80]
↑ UPnP で自動設定
ポートスキャンとの違い
ネットワーク監視ツールで行うポートスキャンとは視点が異なる。
| 手法 | 視点 | わかること |
|---|---|---|
| ポートスキャン | LAN 内部 → デバイス | そのデバイスで何のポートが開いているか |
| UPnP マッピング確認 | インターネット → ルーター | 外部からどのポートが LAN 内に転送されているか |
ポートスキャンで「LAN 内で SSH が動いている」とわかっても、それがインターネットに露出しているかはわからない。UPnP マッピングを確認して初めて、外部からの攻撃対象面がわかる。
UPnP を使うユースケース
| 用途 | 具体例 | 必要性 |
|---|---|---|
| オンラインゲーム | PS5/Switch の NAT タイプ改善 | ゲーム機を使う場合は有効 |
| P2P ファイル共有 | BitTorrent クライアント | ほぼ不要 |
| メディアサーバー | Plex の外部ストリーミング | Plex を外部公開する場合のみ |
| ビデオ通話 | 旧世代の VoIP | 現在は不要(後述) |
| IoT デバイス | カメラの外部直接アクセス | クラウド経由なら不要(後述) |
現代では不要なケースが多い
多くのサービスは STUN/TURN/ICE(WebRTC 系の NAT 越え技術)やクラウド中継に移行しており、UPnP なしで動作する。
クラウド中継型(UPnP 不要)
Eufy カメラのようなクラウド経由のデバイスは、カメラ側からクラウドへアウトバウンド接続を張る。LAN 内から外への通信は NAT を越えられるため、ルーター側のポート開放は不要。
[スマホ] → [クラウドサーバー] ← [カメラ(LAN内)]
アウトバウンド接続
NAT 越え技術(UPnP 不要)
Zoom、Google Meet、Discord などは STUN/TURN で NAT を越える。UPnP に依存しない。
セキュリティリスク
UPnP を有効にすると以下のリスクがある。
- マルウェアによるポート開放: 感染したデバイスが UPnP 経由で外部ポートを開放し、C2 サーバーとの通信経路を確保する
- 意図しないサービス露出: アプリが勝手にポートを開放し、ユーザーが気づかないまま内部サービスが外部に露出する
- UPnP 実装自体の脆弱性: 過去に miniupnpd 等で複数の CVE が報告されている
OpenWrt での確認方法
# UPnP デーモンの設定確認
uci show upnpd
# 主要な設定値
# upnpd.config.enabled='0' ← デーモン有効/無効
# upnpd.config.enable_upnp='1' ← UPnP プロトコル有効/無効
# upnpd.config.secure_mode='1' ← セキュアモード
# 現在のポートマッピング確認
cat /var/run/miniupnpd.leases
enabled='0' ならデーモン自体が起動しておらず、enable_upnp の値に関わらず UPnP は動作しない。
結論
ゲーム機の NAT 改善など明確な用途がなければ、UPnP は無効のままが最も安全。現代のサービスはクラウド中継や STUN/TURN で NAT を越えるため、UPnP に頼る必要性は低下している。