SSDPとは、を説明してみる。

とある会合でSSDP(Simple Service Discovery Protocol)に関するプレゼンテーションをしました。SSDPに関する日本語の説明記事は少ないです。Wikipedia日本語版にも記事がないです。かなりの人がイチから調べるところから始めているのでは?と推測し、簡単に分かる紹介を書いてみます。

ひとことでいうと

「どんなプロトコルなのかひとことで説明しろ」という上司への要求には、こんな感じで答えるのがいいと思います。

LANに接続されているデバイスの発見や操作をするためプロトコルであるUPnPの一部に使われています。"NAT越え"にも利用されています。

http://upload.wikimedia.org/wikipedia/it/a/a8/Upnp_logo.jpg

UPnPとは、

SSDPを語るには、UPnPの言及が欠かせません。UPnPについては、Wikipediaに日本語の記事があります。Universal Plug and Playの略です。


UPnPの仕様は、複数のプロトコルを組み合わせて成り立っています。
そのうち、デバイスを取得するためのDiscoveryフェーズにおいてSSDPが用いられています。udp/1900を用います。UPnPのシーケンス図における、「1. M-SEARCH」と「2. NOTIFY」がこれに当たります。そのあとのDescriptionフェーズ以降はtcpによって行われます。

SSDPのパケットのなかみ

1999年に標準化のためのドラフトがIETFへ提出されていますが、策定されないままいまに至っています。RFCもありません。
https://tools.ietf.org/html/draft-cai-ssdp-v1-03
途中まで日本語訳してくださっているサイトがあります。
http://blog.fff.io/2013/10/ssdp-draft.html
テキストベースで、HTTPのヘッダによく似ています。一例ですが、次のように記述します。

1. M-SEARCH (multicast)
 M-SEARCH * HTTP/1.1\r\n
 HOST: 239.255.255.250:1900\r\n
 MAN: "ssdp:discover"\r\n
 MX: 3\r\n
 ST: upnp:rootdevices\r\n
 \r\n
2. NOTIFY (UDP unicast)
HTTP/1.1 200 OK\r\n
CACHE-CONTROL: max-age=1800\r\n
DATE: {WoD}, {DD} {Mon} {YYYY} {HH:MM:SS} GMT\r\n
EXT:\r\n
LOCATION: http://{略}/gatedesc.xml\r\n
Server: OS/0.0 UPnP/1.0 UPnP-Device-Host/1.0\r\n
ST: upnp:rootdevice\r\n
USN: uuid:{略}::upnp:rootdevice\r\n
\r\n

各フィールドが何を意味しているかの説明は、次のURLが日本語では最も充実している印象です。
http://nazuna.sakura.ne.jp/software/upnp/get_device.html

近年のSSDPに関するニュース

UPnPの主要ライブラリに発見された脆弱性
SSDPリフレクション攻撃
  • Rodrigo Montoro, ``Quick Analysis of a DDoS Attack Using SSDP,'' Sept. 2014. LINK
  • 警察庁セキュリティポータルサイト@police, ``UPnPに対応したネットワーク機器を踏み台としたSSDPリフレクター攻撃に対する注意喚起について,'' Oct. 2014. LINK