DDoS の増幅攻撃:DNS/NTP リフレクションの原理
なぜ小さな攻撃帯域が巨大な攻撃量に化けるのかが原理から腑に落ちる。送信元偽装と応答増幅率の悪用、DNS/NTP/memcached の増幅係数、BCP38 による緩和まで解説する。
- 1.リフレクション攻撃は送信元 IP を被害者に偽装した小さなクエリをコネクションレスな UDP サーバーに撒き、被害者へ大きな応答を返させて帯域を消費させる。
- 2.増幅係数は応答バイト÷要求バイトで決まり、DNS ANY が数十倍、NTP monlist が数百倍、memcached は1万倍超に達するため少数のクエリで回線が飽和する。
- 3.根治は送信元偽装を許さないこと(BCP38/uRPF の入口フィルタ)と、増幅源となるサービスの公開停止・レート制限・応答縮小である。
なぜ「小さな入力」が「巨大な攻撃」になるのか
分散型サービス妨害(DDoS)の増幅攻撃は、2つの性質を同時に悪用します。1つは 送信元 IP の偽装(spoofing) が容易なこと、もう1つは 要求より応答が大きいサービス(増幅器) が公開されていることです。攻撃者は被害者の IP を送信元に偽装した小さなクエリを増幅器へ大量に撒き、増幅器は「正規の問い合わせに答えただけ」のつもりで、巨大な応答を被害者へ送りつけます。攻撃者自身の上り帯域は小さくてよく、増幅器の数だけ攻撃量が積み上がる——これが少数のリソースで回線を飽和させられる理由です。
リフレクション(reflection)は経路の偽装、アンプリフィケーション(amplification)はサイズの拡大を指します。両者は別概念で、リフレクションは「誰が攻撃しているか」を隠し、アンプリフィケーションは「攻撃量」を増やします。実際の攻撃は両方を組み合わせます。
コネクションレスな UDP だから成立する
この攻撃が UDP 系サービスに集中するのは偶然ではありません。TCP と UDP の違いに根があります。
| 性質 | TCP | UDP |
|---|---|---|
| 接続確立 | 3ウェイハンドシェイクで往復確認 | なし(撃ちっぱなし) |
| 送信元 IP の検証 | SYN-ACK の返信先で実質検証される | されない(応答は偽装先へ飛ぶ) |
| 偽装クエリでの増幅 | ハンドシェイクが成立せず困難 | 1パケットで成立する |
TCP では、偽装した送信元へサーバーが SYN-ACK を返し、その ACK が返ってこない限りデータ転送に進めません。偽装した相手(被害者)は身に覚えのない SYN-ACK を破棄するだけなので、攻撃者は会話を完成できず、大きな応答を引き出せません。対して UDP は握手がなく、サーバーは送信元 IP を一切確かめずにそのアドレスへ応答を返します。だからこそ DNS・NTP・SSDP・memcached といった UDP サービスが標的になります。
増幅係数:応答÷要求で決まる威力
威力の核心は 増幅係数(amplification factor) です。
増幅係数 = 応答のバイト数 / 要求のバイト数
攻撃者から見た実効増幅 = 増幅器へ送ったバイト × 増幅係数 = 被害者が受ける攻撃トラフィック
要求が 60 バイト、応答が 3000 バイトなら係数は約50です。攻撃者が 1Gbps の偽装クエリを撒ければ、被害者には理論上 50Gbps が降り注ぎます。代表的な増幅器の係数は次の通りで、桁が大きく違う点に注目してください。
| プロトコル | 悪用される要求 | おおよその増幅係数 | 効く理由 |
|---|---|---|---|
| DNS | ANY や大きな TXT/DNSSEC 応答 | 約28〜54倍 | 小さな名前への問い合わせに対し応答が肥大 |
| NTP | monlist(モード7の管理コマンド) | 約200〜556倍 | 1要求で直近600クライアントの一覧を返す |
| SSDP | M-SEARCH(UPnP 探索) | 約30倍 | 1探索に多数のデバイス記述で応答 |
| memcached | UDP の stats/get | 約1万〜5万倍 | 巨大な格納値をそのまま返せてしまう |
memcached が桁違いなのは、本来内部ネットワーク用のキャッシュが UDP かつ無認証でインターネットに露出した結果、攻撃者が事前に巨大な値を set で仕込み、小さな get で吐き出させられるためです。2018年に観測された 1.3Tbps 級の攻撃はこの仕組みによります。
かつて DNS ANY クエリは、あるゾーンの全レコード型をまとめて返すため少ない要求で大きな応答を引き出せました。現在は権威サーバー側が ANY に最小応答だけ返す(RFC 8482)運用が広がり、ANY 単体の旨味は減っています。ただし DNSSEC 署名付きゾーンは応答に署名(RRSIG)が乗って正規でも肥大しやすく、依然として増幅源になり得ます。詳しくは DNS の名前解決内部 のレコードとキャッシュ構造が前提になります。
NTP の monlist:1要求で600件を返す古傷
NTP リフレクションが一時猛威を振るったのは、モード7の monlist コマンドが原因でした。これは NTP の動作原理 で扱う時刻同期とは別の、サーバー監視用の管理機能です。
要求: get monlist ← 数十バイトの小さな UDP パケット1個
応答: 直近に問い合わせた最大600クライアントの一覧
→ 100バイト×複数の応答パケットに分割されて返る
→ 合計で要求の数百倍のバイト数
monlist は1つの小さな要求に対し、サーバーが記録している直近クライアント群を最大600件まで返します。応答は複数の UDP パケットに分かれ、合計サイズが要求の200〜500倍を超えます。対策は単純で、noquery などでモード6/7の管理クエリを外部から無効化し、NTP デーモンを最新版にする(monlist 廃止版へ)ことです。
増幅に使われる DNS/NTP/memcached サーバーの管理者は、自分が攻撃に加担していることに気づきにくいです。送信元偽装のため、増幅器のログには被害者の IP が「問い合わせ元」として残り、あたかも被害者が大量問い合わせをしているように見えます。公開リゾルバや開放 NTP を放置すると、自組織のサーバーと帯域が他者攻撃の燃料として消費されます。
緩和:偽装を止める層と増幅を絞る層
対策は 送信元偽装を止める層 と 増幅を絞る層 の2つに分けて考えると整理できます。両方が必要で、片方だけでは穴が残ります。
| 層 | 対策 | 効果と限界 |
|---|---|---|
| 偽装を止める | BCP38 / uRPF による入口フィルタ | 根治。ただし全 AS が実施しないと偽装が残る |
| 増幅源を絞る | 公開停止・認証・レート制限・最小応答 | 増幅係数を下げる。自組織が踏み台化を防ぐ |
| 被害側で耐える | Anycast 分散・スクラビング・上流での破棄 | 回線飽和を吸収。根治ではなく耐久策 |
BCP38:送信元アドレス検証
最も根本的なのは BCP38(RFC 2827)の送信元アドレス検証 です。ネットワークの入口(顧客側に向いたルータのインターフェース)で、そのインターフェースから来るはずのない送信元 IP を持つパケットを破棄します。
入口フィルタの原則(顧客 198.51.100.0/24 を収容するインターフェース):
if パケットの送信元 IP が 198.51.100.0/24 の外:
破棄 # このリンクから出てよい送信元ではない=偽装
else:
転送
実装は uRPF(Unicast Reverse Path Forwarding) が一般的で、「この送信元 IP 宛のパケットを返すとき、いま受け取ったのと同じインターフェースへ戻るか」を経路表で逆引きし、整合しなければ破棄します。これが全 AS で徹底されれば送信元偽装は成立せず、リフレクション攻撃は原理的に不能になります。問題は自分が実施しても他者が実施しなければ偽装パケットは流入する点で、デプロイのインセンティブが偏る「共有地の悲劇」になっています。
- DNS: 権威サーバーは再帰を無効化、リゾルバはアクセス元を限定(オープンリゾルバ化を避ける)。Response Rate Limiting(RRL)で同一宛先への連打を抑制。
- NTP: モード6/7の管理クエリを外部遮断し、monlist 廃止版へ更新。
- memcached: UDP リスナを無効化(既定で無効の版を使う)し、インターネットに晒さない。
- 共通: 出口側でも BCP38 を適用し、自網から偽装送信元パケットを出さない。
まとめと検証
増幅 DDoS は「送信元偽装で経路を偽る(リフレクション)」×「要求より大きい応答を引き出す(アンプリフィケーション)」の積で成立し、被害量は増幅係数と動員した増幅器数に比例します。係数は DNS で数十倍、NTP monlist で数百倍、露出した memcached で1万倍超に達します。根治は BCP38/uRPF による送信元検証ですが全網の協調が要り、現実には増幅源を絞る運用(公開停止・認証・レート制限・最小応答)と被害側の分散・破棄を重ねます。
疑わしい増幅トラフィックの実体は パケットキャプチャ で送信元ポート(53/123/11211 など)と応答サイズを確認し、自網が踏み台化していないかは応答先 IP の偏りで見分けます。回線飽和か到達性かの層別の切り分けは ネットワークの切り分け の手順に乗せてください。
- リフレクション=送信元偽装で経路を偽る、アンプリフィケーション=応答サイズの拡大。両者は別概念。
- UDP が狙われるのは握手がなく送信元 IP を検証しないから。TCP は SYN-ACK の返信で実質検証され成立しにくい。
- 増幅係数 = 応答÷要求。NTP の主犯はモード7の monlist、memcached は1万倍超で過去最大級の攻撃源。
- 根治は BCP38(RFC 2827)/uRPF の送信元アドレス検証。自組織はオープンリゾルバ・開放 NTP・露出 memcached を作らない。
ネットワーク Article
DDoS の増幅攻撃:DNS/NTP リフレクションの原理を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
DDoS
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 5
導入後に効く点
増幅係数は応答バイト÷要求バイトで決まり、DNS ANY が数十倍、NTP monlist が数百倍、memcached は1万倍超に達するため少数のクエリで回線が飽和する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 5
判断チェックリスト
- 自社の用途が「DDoS / セキュリティ」に近いか確認する。
- 強みである「リフレクション攻撃は送信元 IP を被害者に偽装した小さなクエリをコネクションレスな UDP サーバーに撒き、被害者へ大きな応答を返させて帯域を消費させる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。