脅威アドバイザリ:mDNS リフレクション DDoS

著者:Wilber Mejia

概要

2015 年第 3 四半期末頃から、Akamai SIRT はマルチキャスト・ドメイン・ネーム・システム(mDNS)対応デバイスを使用した DDoS 攻撃をいくつか目にするようになりました。2015 年 3 月には、mDNS がリフレクション/アンプリフィケーション DDoS 攻撃のベクトルとして使用される可能性があることも発表されました。

このアドバイザリでは、mDNS リフレクション攻撃ベクトルの概念、手法、およびその緩和方法について詳述します。この攻撃ベクトルは、ポート 5353 を使用してインターネット経由で mDNS による名前解決が可能なソースデバイスを利用することで発生します。

2016 年 10 月現在、Akamai は、ゲーム、ソフトウェア、テクノロジー業界を標的とした 7 件の mDNS DDoS 攻撃を検出し、緩和することに成功しています。実際の攻撃の特性を観察した結果、現時点では、この攻撃が今後も存続し続けるかどうかは疑わしいと考えられます。

攻撃のタイムライン

mDNS 攻撃ベクトルが初めて認識されたのは 2015 年 9 月であり、それ以来、散発的に発生しています。下記のタイムラインが示すとおり、最初の攻撃から次の攻撃まで約 5 か月の間隔がありました。これは、攻撃スクリプトの初期テストを実施していたためと考えられます。この攻撃ベクトルが継続的に使用されるようになったのは、2016 年の 3 月下旬から 4 月上旬にかけてのことです。ただし、mDNS を単一のベクトルとして使用した攻撃は、現時点では他のリフレクションベクトルほど強力なものではありません。

mDNS attack timeline

主な攻撃属性

次のセクションでは、2016 年に発生した攻撃を 1 つ取り上げます。これまでに緩和した 7 件の攻撃は、いずれも異なるターゲットを標的とするものでした。

  • ピーク帯域幅:2.9 ギガビット/秒(Gbps)
  • 1 秒あたりのピークパケット数:465,200 パケット/秒
  • 攻撃ベクトル:mDNS
  • ソースポート:5353(mDNS)
  • 宛先ポート:ランダム


17:07:32.071836 IP Z.Z.Z.Z.5353 > X.X.X.X.80: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

17:07:32.071857 IP Z.Z.Z.Z.5353 > X.X.X.X.80: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

17:07:32.071873 IP Z.Z.Z.Z.5353 > X.X.X.X.80: 0*- 4/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local., PTR _http._tcp.local., PTR _rfb._tcp.local.(143)

17:07:32.072187 IP Z.Z.Z.Z.5353 > X.X.X.X.80: 0*- 3/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local., PTR _ipp._tcp.local.(123)

17:07:32.072274 IP Z.Z.Z.Z.5353 > X.X.X.X.80: 0*- 3/0/0 PTR _workstation._tcp.local., PTR _https._tcp.local., PTR _http._tcp.local.(119)

17:07:32.072279 IP Z.Z.Z.Z.5353 > X.X.X.X.80: 0*- 4/0/0 PTR _pdl-datastream._tcp.local., PTR _printer._tcp.local., PTR _ipp._tcp.local., PTR _http._tcp.local.(143)

17:07:32.072295 IP Z.Z.Z.Z.5353 > X.X.X.X.80: 0*- 8/0/0 PTR _workstation._tcp.local., PTR _webdavs._tcp.local., PTR _webdav._tcp.local., PTR _smb._tcp.local., PTR _sftp._tcp.local., PTR _http._tcp.local., PTR _afpovertcp._tcp.local., PTR _device-info._tcp.local.(235)

17:07:32.072361 IP 193.147.161.117.5353 > X.X.X.X.80: 0*- 7/0/0 PTR _workstation._tcp.local., PTR _ftp._tcp.local., PTR _edcp._udp.local., PTR _afpovertcp._tcp.local., PTR _device-info._tcp.local., PTR _smb._tcp.local., PTR _http._tcp.local.(209)

mDNS 攻撃イベントが最後に発生したのは 2016 年 10 月 27 日です。この攻撃はマルチベクトル DDoS 攻撃(SYN フラッド、UDP フラッド、UDP フラグメント、DNS フラッド、mDNS フラッド)で、ピークは 41 Gbps でした。

  • イベント開始時間:2016 年 10 月 27 日 06:01:00 UTC
  • ピーク帯域幅:41 Gbps
  • 1 秒あたりのピークパケット数:6,000,000 パケット/秒
  • 攻撃ベクトル:SYN フラッド、UDP フラッド、UDP フラグメント、DNS フラッド、mDNS フラッド
  • ソースポート:ランダム
  • 宛先ポート:ランダム

 

mDNS フラッド

 

06:05:36.522973 IP X.X.X.X.5353 > X.X.X.X.80: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

06:05:36.522976 IP X.X.X.X.53301 > X.X.X.X.80: Flags [R], seq 194989615, win 0, length 0

06:05:36.523036 IP X.X.X.X.5353 > X.X.X.X.80: 0*- 4/0/0 PTR _workstation._tcp.local., PTR _http._tcp.local., PTR _device-info._tcp.local., PTR _smb._tcp.local.(144)

06:05:36.523040 IP X.X.X.X.5353 > X.X.X.X.80: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _ssh._tcp.local.(97)

06:05:36.523102 IP X.X.X.X.5353 > X.X.X.X.80: 0*- 3/0/0 PTR _workstation._tcp.local., PTR _https._tcp.local., PTR _http._tcp.local.(119)

06:05:36.523114 IP X.X.X.X.5353 > X.X.X.X.80: 0*- 3/0/0 PTR _workstation._tcp.local., PTR _ssh._tcp.local., PTR _sftp-ssh._tcp.local.(121)

06:05:36.523147 IP X.X.X.X.5353 > X.X.X.X.80: 0*- 4/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local., PTR _ssh._tcp.local., PTR _sftp-ssh._tcp.local.(147)

06:05:36.523168 IP X.X.X.X.5353 > X.X.X.X.80: 0*- 3/0/0 PTR _workstation._tcp.local., PTR _https._tcp.local., PTR _http._tcp.local.(119)

06:05:36.523221 IP X.X.X.X.5353 > X.X.X.X.80: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _ssh._tcp.local.(97)

06:05:36.523285 IP X.X.X.X.5353 > X.X.X.X.80: 0*- 3/0/0 PTR _workstation._tcp.local., PTR _ssh._tcp.local., PTR _sftp-ssh._tcp.local.(121)

06:05:36.523313 IP X.X.X.X.5353 > X.X.X.X.80: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _sftp-ssh._tcp.local.(102)

06:05:36.523322 IP X.X.X.X.58727 > X.X.X.X.80: Flags [R.], seq 2670641259, ack 2670641259, win 1400, length 0

 

SYN フラッド

6:01:35.894589 IP X.X.X.X.28970 > X.X.X.X.80: Flags [SEW], seq 4054777856, win 0, length 0

06:01:35.894639 IP X.X.X.X.1028 > X.X.X.X.80: Flags [SEW], seq 1405550592, win 0, length 0

06:01:35.894646 IP X.X.X.X.50021 > X.X.X.X.80: Flags [SEW], seq 3309240320, win 0, length 0

06:01:35.894655 IP X.X.X.X.40602 > X.X.X.X.80: Flags [SEW], seq 2493120512, win 0, length 0

06:01:35.894658 IP X.X.X.X.3847 > X.X.X.X.80: Flags [SEW], seq 1046675456, win 0, length 0

06:01:35.894658 IP X.X.X.X.21163 > X.X.X.X.80: Flags [SEW], seq 2160787456, win 0, length 0

 

UDP フラッド

06:08:36.313095 IP X.X.X.X.42862 > X.X.X.X.80: UDP, length 1

06:08:36.313768 IP X.X.X.X.648 > X.X.X.X.80: UDP, length 11

06:08:36.314002 IP X.X.X.X.60399 > X.X.X.X.80: UDP, length 6

06:08:36.322169 IP X.X.X.X.19246 > X.X.X.X.80: UDP, length 9

06:08:36.327485 IP X.X.X.X.22952 > X.X.X.X.80: UDP, length 11

06:08:36.327764 IP X.X.X.X.55095 > X.X.X.X.80: UDP, length 9

 

UDP フラグメント

06:06:43.088487 IP X.X.X.X > X.X.X.X: udp

06:06:43.088489 IP X.X.X.X > X.X.X.X: udp

06:06:43.088501 IP X.X.X.X > X.X.X.X: udp

06:06:43.088504 IP X.X.X.X > X.X.X.X: udp

06:06:43.088507 IP X.X.X.X > X.X.X.X: udp



DNS リフレクション

06:16:34.508072 IP Z.Z.Z.Z.53 > X.X.X.X.23130: 28397| 20/0/1 MX stagg.cpsc.gov.5, MX hormel.cpsc.gov.5, TXT "v=spf1 ip4:x.x.x.x ip4:x.x.x.x ip4:X.X.X.X mx a:list.cpsc.gov -all", A x.x.x.x, AAAA 2600:803:240::2, DNSKEY, DNSKEY, DNSKEY, DNSKEY, Type51, RRSIG[|domain]

06:16:34.508077 IP Z.Z.Z.Z.53 > X.X.X.X.23130: 28397| 20/0/1 MX hormel.cpsc.gov.5, MX stagg.cpsc.gov.5, TXT "v=spf1 ip4: X.X.X.X ip4:X.X.X.X ip4:X.X.X.X mx a:list.cpsc.gov -all", A x.x.x.x, AAAA 2600:803:240::2, DNSKEY, DNSKEY, DNSKEY, DNSKEY, Type51, RRSIG[|domain]

06:16:34.508409 IP Z.Z.Z.Z.53 > X.X.X.X.10157: 32564 14/2/0 MX stagg.cpsc.gov.5, MX hormel.cpsc.gov.5, DNSKEY, DNSKEY, DNSKEY, DNSKEY, RRSIG,[|domain]

攻撃と mDNS の概要

マルチキャスト DNS(mDNS)は、2013 年に RFC6762 としてリリースされた標準プロトコル案です。小規模ネットワークに最適なこのプロトコルにより、ユーザーの操作を一切またはほとんど必要とすることなく、デバイスやサービスを迅速に検出できるようになります。mDNS はゼロ・コンフィギュレーション・ネットワーキング(zeroconf)にも適したコンポーネントです。mDNS の構造は通常の DNS パケットとほとんど共通しており、それが DDoS 攻撃ベクトルとして使用されるようになった理由だと考えられます。

このプロトコルは、デバイスを接続するだけですぐに使用できるようシンプルに設計されているため、いくつかのリスクが伴います。ローカルネットワーク外からのクエリーへの応答を許可してしまう脆弱性(VU#550620)が Chad Seaman 氏によって発見されました。この応答により、関連デバイスの情報(ソフトウェアやサービスなど)およびその他の機密情報(ホスト名、社内ネットワーク設定、モデル番号など)が公開されてしまう危険性があります。これらの情報により、悪意のある攻撃者は、インターネット接続インタフェース経由でユニキャストクエリーに応答する任意の mDNS ホストを使用して、分散型サービス妨害(DDoS)リフレクション/アンプリフィケーション攻撃を行うことが可能になります。脆弱性に関する詳細については、こちらをご覧ください。

同様の概念を用いて、悪意のある攻撃者が作成した mDNS 攻撃スクリプトは、mDNS デバイスから応答を引き出すための専用のユニキャストクエリーを送信します。RFC6763 で定義されたこのサービス列挙クエリーにより、ネットワーク上に公開されたあらゆるサービスタイプが返されます。次の図が示すとおり、攻撃スクリプトは 46 バイトのペイロードクエリーを生成し、"_services._dns-sd._udp.local" のDNS クエリーを脆弱なホストに送信します。これにより、すべての既知のサービスがリクエスト側デバイスに返されます。公開サービスに対して異なる応答サイズで個別にクエリーを送信することも可能なため、さらなる攻撃機会が発生します。しかし、この方法を用いて、DDoS 攻撃で追加の応答ペイロードを簡単に悪用するには、より高度な攻撃ツールが必要になります。

 

攻撃スクリプトの UDP ペイロードデータ構造

 

0000000: 0000 0000 0001 0000 0000 0000 095f 7365  ............._se

0000010: 7276 6963 6573 075f 646e 732d 7364 045f  rvices._dns-sd._

0000020: 7564 7005 6c6f 6361 6c00 000c 0001       udp.local.....

 

これまでの DDoS 攻撃で観察された mDNS 応答ペイロードのサイズは限定的です。最大のものは 428 バイトのデータであり、これは単一の NTP monlist データ応答パケットより 12 バイト少ない値となっています。ただし、観察した mDNS の一般的な応答サイズはおよそ 100 ~ 200 バイトの範囲内となっています。つまり、リクエストペイロードが 46 バイト、ペイロード応答が 200 バイトであることを考えると、このベクトルの応答の最大増幅率は約 4.35 倍ということになります。

攻撃スクリプトの利用方法とシグネチャーのサンプル

mDNS 用に作成された攻撃スクリプトは、UDP リフレクション/アンプリフィケーション攻撃で利用されている各種スクリプトに修正を加えたものです。利用方法も他のスクリプトと類似しています。標的 IP、標的ポート、インターネット上の mDNS デバイス一覧、スレッド、パケット・スロットル・レート、そして攻撃の実行時間を入力するだけです。これらを入力すると、スクリプトが標的 IP を偽装し、tcpdump を通じて悪意のある 46 バイトのクエリー(次の図を参照)を送信します。

 

18:37:12.565541 IP Z.Z.Z.Z.13763 > X.X.X.X.5353: 0 PTR (QM)? _services._dns-sd._udp.local.(46)

18:37:12.565908 IP Z.Z.Z.Z.13763 > X.X.X.X.188.5353: 0 PTR (QM)? _services._dns-sd._udp.local.(46)

18:37:12.566332 IP Z.Z.Z.Z.13763 > X.X.X.X.188.5353: 0 PTR (QM)? _services._dns-sd._udp.local.(46)

18:37:12.566726 IP Z.Z.Z.Z.13763 > X.X.X.X.188.5353: 0 PTR (QM)? _services._dns-sd._udp.local.(46)

18:37:12.567137 IP Z.Z.Z.Z.13763 > X.X.X.X.188.5353: 0 PTR (QM)? _services._dns-sd._udp.local.(46)

18:37:12.567507 IP Z.Z.Z.Z.13763 > X.X.X.X.5353: 0 PTR (QM)? _services._dns-sd._udp.local.(46)

18:37:12.567895 IP Z.Z.Z.Z.13763 > X.X.X.X.5353: 0 PTR (QM)? _services._dns-sd._udp.local.(46)

18:37:12.568274 IP Z.Z.Z.Z.13763 > X.X.X.X.5353: 0 PTR (QM)? _services._dns-sd._udp.local.(46)

18:37:12.568672 IP Z.Z.Z.Z.13763 > X.X.X.X.5353: 0 PTR (QM)? _services._dns-sd._udp.local.(46)

18:37:12.569069 IP Z.Z.Z.Z.13763 > X.X.X.X.5353: 0 PTR (QM)? _services._dns-sd._udp.local.(46)

当社ラボでのテストでは、mDNS リスナーを搭載した Linux サーバーセットアップにクエリーを送信しました。基本的な応答を次の図に示します。

 

18:38:10.252994 IP Z.Z.Z.Z.5353 > X.X.X.X.47070: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

18:38:10.253256 IP Z.Z.Z.Z.5353 > X.X.X.X.47070: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

18:38:10.253694 IP Z.Z.Z.Z.5353 > X.X.X.X.47070: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

18:38:10.254043 IP Z.Z.Z.Z.5353 > X.X.X.X.47070: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

18:38:10.254394 IP Z.Z.Z.Z.5353 > X.X.X.X.47070: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

18:38:10.254739 IP Z.Z.Z.Z.5353 > X.X.X.X.47070: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

18:38:10.255098 IP Z.Z.Z.Z.5353 > X.X.X.X.47070: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

18:38:10.255458 IP Z.Z.Z.Z.5353 > X.X.X.X.47070: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

18:38:10.255823 IP Z.Z.Z.Z.5353 > X.X.X.X.47070: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

18:38:10.256193 IP Z.Z.Z.Z.5353 > X.X.X.X.47070: 0*- 2/0/0 PTR _workstation._tcp.local., PTR _udisks-ssh._tcp.local.(104)

2016 年 11 月 4 日に The Shadowserver Foundation が実施した mDNS(5353/UDP)スキャンでは、526,245 の固有の IP が mDNS クエリーに応答しました。次の表は、mDNS でアクセス可能な上位 20 の国と ASN を示しています(最新のスキャンに基づく)。

mDNS Source Distribution Countries
mDNS Source Distribution ASNs

緩和

このプロトコルは、ローカルネットワーク内での使用を念頭に設計されています。そのため、いかなる理由があっても、mDNS デバイスをインターネット上で公開すべきではありません。必要な場合は、すべての着信クエリーをフィルタリングして、既知のソースのみを許可することを推奨します。さらに、Snort などの IDS を使用してこれらのクエリーを検出し、デバイスが DDoS 攻撃に利用されるのを緩和できます。Snort 検出ルールのサンプルを以下に示します。

 

alert udp $EXTERNAL_NET !5353 -> $HOME_NET 5353 \

(msg: "mDNS DDoS Abuse request"; \

flow: to_server; \

content: "|00 00 00 00 00 01 00 00 00 00 00 00 09 5f 73 65 72 76 69 63 65 73 07 5f 64 6e 73 2d 73 64 04 5f 75 64 70 05 6c 6f 63 61 6c 00 00 0c 00 01|"; dsize:46<>46; \

classtype:Reflection-Abuse; \

sid: 201600004; rev:1;)

結論

mDNS 攻撃ベクトルの使用頻度は、現時点では限られています。SSDP と同様、このベクトルが利用される可能性が最も高いのは、家庭用ネットワーク内のデバイスにおいてです。初期の攻撃は限られた被害しかもたらしていませんが、当社の緩和プラットフォームでは、mDNS ポート 5353 のスキャンが日常的に観察されています。列挙されるデバイスの数が増えれば、より大規模な攻撃が発生する可能性もあります。SSDP と同様、このプロトコルは広く知られているため、ISP が家庭用ユーザー向けにこのポートのフィルタリングを導入すれば、mDNS は DDoS 攻撃ベクトルとしては生き残らないと考えられます。しかし残念ながら、SSDP はその誕生から数年が経過した現在でも日常的に利用されており、相当の DDoS 攻撃が可能となっています。そのため、有効なプロアクティブフィルタリングが適用される前に、mDNS 攻撃がより強力になる可能性も残されています。

参照