株式会社ジオデータ開発 ロゴ
株式会社ジオデータ開発GEO DATA DEVELOPMENT Inc.
NETWORK SECURITY · EXPLAINED FROM ZERO

NTPリフレクション攻撃とは?IP・UDP・ICMPからパケットの中身まで図解

PC・スイッチ・ルーターの通信経路、MAC・ARP・サブネット・NAPTを操作するラボ、OSI参照モデルとTCP/IPのレイヤ構造、カプセル化とEthernet・IP・UDP・NTPの実バイト構成、IP・UDP・TCP・ICMPの基礎からNTPの時刻同期、IPスプーフィングと反射・増幅、パケット例、計算デモ、直接DoSや時刻改ざんとの違い、BCP 38まで一つの記事で図解します。

THE BIG PICTURE

攻撃者は、標的へ直接大きなデータを送らない

攻撃者は、要求の「差出人」を標的に偽装して別のサーバーへ送ります。要求を受けたサーバーが、差出人だと思い込んだ標的へ大きな返事を送ってしまう。これが反射(Reflection)と増幅(Amplification)の組合せです。

攻撃者

差出人を偽装して小さく送る

NTPサーバー

要求に従い大きく応答

標的

要求していない応答が集中

図は仕組みの概要です。以下ではIPとUDPの役割から順番に説明します。

通信は何層にも分かれる:OSI参照モデルとTCP/IPモデル

プロトコル(通信規約)は、通信する機器同士が守る約束です。ネットワークの仕組みを理解するには、「その約束がどの層の仕事か」を先に押さえるのが近道です。層を分けると、時刻同期を担当するNTP、データを運ぶUDP、宛先へ届けるIPの役割を混同しなくなります。

OSI参照モデルは通信の機能を7層に整理した概念モデルです。一方、TCP/IPモデルは実際のインターネットで使われるプロトコル群を4層程度にまとめた考え方です。両者の区分は完全に1対1ではありませんが、学習するときは次の対応が役立ちます。

OSI参照モデルTCP/IPモデルこの記事で登場する技術と役割

第7層 アプリケーション層

第6層 表現層 / 第5層 セッション層も一般にここへまとめる

アプリケーション層
NTP / DNS / HTTP

時刻を合わせる、名前を解決する、Webのデータをやり取りするなど、アプリケーションの処理を定める。

第4層 トランスポート層トランスポート層
UDP / TCP

ポート番号でアプリケーションを区別。TCPは順序制御や再送などを提供し、UDPは小さな単位でデータを送る。

第3層 ネットワーク層インターネット層
IP / ICMP

IPはアドレスと経路選択を扱う。ICMPはIPのエラー通知・診断を担う。ICMPはTCPやUDPと同じ第4層ではなく、IPと密接な第3層の制御プロトコル。

第2層 データリンク層

第1層 物理層

リンク層
Ethernet / Wi-Fi・電気信号や電波

同じリンク上でフレームを運び、実際の媒体を使ってビットを伝える。MACアドレスは第2層で使う識別子。

※ OSIの第5〜7層はTCP/IPモデルのアプリケーション層にまとめて示しました。また、TCP/IPモデルを5層で説明してリンク層を「データリンク層/物理層」に分ける教材もあります。ICMPをUDP・TCPと同列のトランスポート層として覚えないことが重要です。

実際の通信は、上の層のデータを下の層が包み込む

NTPの要求がPCから送信されるとき、上位のデータに順番にヘッダが付きます。これをカプセル化(encapsulation)といいます。受信側は逆順にヘッダを読み、対応する層の処理へ渡します。

第7層|アプリケーション層

NTPメッセージ

時刻要求:何を問い合わせるか(NTPのデータ)

↓ UDPヘッダを付ける

第4層|トランスポート層

UDPデータグラム

UDPヘッダ + NTPデータ(宛先ポート123など)

↓ IPヘッダを付ける

第3層|ネットワーク層

IPパケット

IPヘッダ + UDPヘッダ + NTPデータ(送信元・宛先IP)

↓ Ethernetなどのヘッダと末尾情報を付ける

第2・1層|リンクと物理媒体

フレーム → 信号

Ethernetヘッダ + IPパケット + FCS(誤り検出)→ ケーブルや電波で伝送

バイト列として見る:本当に入れ子になっているのか

レイヤは機能の分担を説明する論理的な分類であり、パケットの中に「第3層」というラベルが存在するわけではありません。実際には、各プロトコルのヘッダ(制御情報)がデータの前に、Ethernetの場合はFCSが末尾に付加され、連続するバイト列になります。これがカプセル化の実体です。

NTP基本メッセージ48バイトを送る例(IPv4/UDP/Ethernet II)
アプリケーション:NTPメッセージ48 B
NTP 48 B
トランスポート:UDPデータグラム56 B
UDP 8 B
NTP 48 B
インターネット:IPv4パケット76 B
IPv4 20 B
UDP 8 B
NTP 48 B
データリンク:Ethernetフレーム94 B
Ethernet 14 B
IPv4 20 B
UDP 8 B
NTP 48 B
FCS 4 B

この計算は、IPv4オプションなし・VLANタグなし・NTP拡張フィールドなし・標準Ethernet IIフレームを仮定しています。48バイトはNTP基本ヘッダのサイズです。Ethernetのプリアンブル(8 B)やフレーム間ギャップ(12 B)は94 Bに含めません。各色の横幅は説明用で、正確なバイト数比ではありません。

具体的なフィールド:どこに何が書かれる?

場所フィールド例何のためか
EthernetEtherType = 0x0800中身はIPv4パケット
IPv4Source = 203.0.113.20攻撃で偽装される送信元IP
IPv4Protocol = 17ペイロードがUDPであることを示す
UDPDestination port = 123NTPサービスの受信ポート
NTPMode = 3通常のクライアント要求の例

IPv4の Protocol フィールドは、次に解析するプロトコルを表します。17ならUDP、6ならTCP、1ならICMPです。ICMP EchoはIPv4の中にICMPメッセージが直接入り、通常はUDPヘッダを持ちません。

NTPの通信

Ethernet → IPv4 (17) → UDP (123) → NTP

アプリケーションの時刻同期メッセージをUDPで運ぶ。

pingの通信

Ethernet → IPv4 (1) → ICMP Echo

IPの診断メッセージ。UDPポート123を使用しない。

ルーターを通ると、どこまで包み直す?

Ethernetの宛先MACアドレスは、最終目的地ではなくそのリンク上の次の転送先を示します。ルーターは受信フレームのEthernet情報を取り外し、宛先IPで経路を決め、次のリンク用に新しいフレームを作ります。通常、送信元・宛先IPは変えずに転送しますが、IPv4のTTLは減り、ヘッダチェックサムも更新されます。NATなどを使う場合はIPやポートも変更され得ます。

リンクA:PC → ルーター

Ethernet: PC → Router-A
IPv4: PC → NTPサーバー
UDP: クライアント → 123

→

リンクB:ルーター → 次の機器

Ethernet: Router-B → Next-hop
IPv4: PC → NTPサーバー
UDP: クライアント → 123

MACアドレスは区間ごとに変わり得ますが、宛先IPは原則として最終的な通信相手を示します。したがってIPアドレスとMACアドレスを同じ「宛先」として扱わないことが重要です。

この攻撃で偽装されるのは第3層のIPヘッダにある送信元IPアドレスです。大きな応答を生み出すのは第7層のNTPの古い管理機能であり、その応答を運ぶのが第4層のUDPです。攻撃を理解するときも、どの層で何が起きたかを分けて考えます。

ping は NTP とは別の通信

ping が使うICMP Echo Request/Replyは第3層側の制御メッセージです。UDPポート123へ送るNTP要求ではありません。

MACアドレスとIPアドレスの違い

MACアドレスは主に同じリンク内の第2層で使い、IPアドレスはネットワークをまたぐ第3層の通信先を示します。ルーターを通るとEthernetの宛先MACは通常次の区間に合わせて変わります。

公式資料・実物を見るRFC 1122 — TCP/IPの階層とプロトコルインターネット層・トランスポート層などの機能分担を確認できます。
NETWORK FUNDAMENTALS

スマホ・PCからインターネットへ:Wi-Fi・MAC・ルーターを一から理解する

NTPのパケットを解説する前に、そもそも端末が外部サーバーへ通信を届ける仕組みを確認します。「ルーターが送る」「MACが変わる」を暗記する必要はありません。PCの判断とヘッダの変化を順に追えば理由が分かります。

家庭や小規模オフィスの通信経路(模式図)
PC
192.168.10.20/24
送信元端末
L2スイッチ
MACで転送
同じLANの中
ルーター
192.168.10.1
デフォルトゲートウェイ
↓ 外側のネットワークへ(複数のルーターを経由する場合がある)
NTPサーバー
198.51.100.123
最終的な宛先

IPアドレスはRFC 5737で定められた文書用の例。現実のネットワークアドレスとは異なります。家庭用のWi-Fiルーターはアクセスポイント・L2スイッチ・L3ルーター・NAPT・DHCPなどを1台にまとめていることがあります。

WIRELESS LAN FUNDAMENTALS

スマホだけでも分かる:Wi-Fiルーターの中では何が起きる?

LANケーブルを使ったことがなくても大丈夫です。普段スマートフォンでWi-Fiマークを見ているなら、そこがネットワークを理解する入口になります。

家庭用Wi-Fiルーターは、複数の機能が1台に入った機器

📱 スマートフォン

Wi-Fi電波で接続

⇄802.11

📶 家庭用Wi-Fiルーター

AP機能(L2)
無線LANを家庭内LANへ橋渡し
ルーター機能(L3)
IPの経路選択・TTL更新
NAPT・DHCPなど
IP変換や設定の配布
→WAN

🌐 外部サーバー

NTPの時刻情報を提供

APが電波を受けた瞬間に外部インターネットへ直接送るのではありません。LAN内で橋渡しする役割と、外部へIPパケットを転送するルーターの役割を分けて考えると理解できます。

スマホでWi-Fiを選んでからNTPへ通信するまで

01

SSIDを選ぶ

例:HomeLab。SSIDはWi-Fiの名前であって、IPアドレスではありません。

02

APと接続・認証する

APのBSSIDなどを使う無線区間。WPA2/WPA3などの方式で接続を保護します。

03

IP設定を受け取る

DHCPなどにより192.168.10.20/24、ゲートウェイ192.168.10.1などを設定します。

04

NTP要求を送る

宛先198.51.100.123は外部。まずゲートウェイへ802.11フレームで送り、APがLANへ橋渡しします。

Wi-Fiと有線LANでは「入れ物」が違う

Wi-Fiの無線区間:802.11フレーム

802.11のMACヘッダ
受信機・送信機・宛先などのアドレス欄
IP → UDP → NTP

無線区間のヘッダではAPのBSSIDなども関係します。一般的な802.11データフレームはEthernetとアドレス欄の構成が異なります。

有線LANの区間:Ethernetフレーム

Ethernetヘッダ
送信元・宛先MAC
IP → UDP → NTP

リンク層のフレーム形式は違っても、その内側のIPパケット・UDPヘッダ・NTPメッセージは共通して使えます。

ポイント:「Wi-Fiを使うとIPやMACが不要になる」は誤りです。スマートフォンもWi-FiインターフェースのMACアドレスを持ち、IP通信を行います。端末によってはプライバシー保護のためネットワークごとにランダム化したMACを用いる場合があります。

Wi-Fiでよく出てくる用語

無線LAN/Wi-Fi

LANケーブルの代わりに電波を使って端末とアクセスポイントをつなぐ仕組み。Wi-FiはIEEE 802.11系の無線LAN技術を利用します。インターネットそのものとは異なります。

アクセスポイント(AP)

スマートフォンなどの無線端末をLANにつなぐ中継役。家庭用Wi-FiルーターにはAP機能が一体化されていることが多く、APとしての橋渡しとルーターとしてのIP転送は別の仕事です。

SSID

Wi-Fiネットワークを識別する名前。端末の接続画面に表示される「HomeLab」のような文字列。SSIDはMACアドレスでもIPアドレスでもありません。

BSSID

通常のインフラストラクチャ型Wi-Fiで、端末が接続しているAPの無線側の識別子。一般にMACアドレス形式です。同じSSIDを複数のAPが提供する場合でも、BSSIDは区別されます。

2.4GHz/5GHz/6GHz

Wi-Fiで使う周波数帯の例。家の壁による減衰や混雑、利用可能なチャネルが異なります。周波数帯はIPアドレスやポート番号とは無関係です。

WPA2/WPA3

Wi-Fi接続の認証・保護に関係する方式。主に無線リンクを保護します。HTTPS/TLSのアプリケーション間の暗号化や、IPのルーティングとは別の役割です。

DHCP

スマートフォンにIPアドレス・サブネット・デフォルトゲートウェイ・DNS設定などを自動で配る仕組み。Wi-Fiに接続した後、IPの設定が必要になることがあります。

送信前にPCが判断すること

1

宛先は同じネットワークにいる?

PCは 192.168.10.20/24 と宛先 198.51.100.123 を比べます。同じ /24 ではないため、NTPサーバーへ直接送るのではなく、ゲートウェイ 192.168.10.1 に預けます。

2

ルーターのMACアドレスを調べる(ARP)

IPv4の宛先はNTPサーバーのままです。一方、LAN内で送るEthernetフレームの宛先MACはルーターのものにする必要があります。ARPで『192.168.10.1は誰?』と問い合わせ、得られたMACを宛先に書きます。

3

スイッチがEthernetフレームを運ぶ

L2スイッチは宛先MACに対応するポートへ転送します。単純な転送のためにIP宛先を書き換えることはありません。

4

ルーターが次のネットワークへ包み直す

ルーターは宛先IPに基づいて経路を選び、TTLを減らし、次のリンク用のL2ヘッダを作ります。境界でNAPTを使う場合は送信元IPとポートも変わります。

ARPのやりとりをパケット単位で見る

ARP Request (Ethernet broadcast)
Who has 192.168.10.1? Tell 192.168.10.20
↓ ルーターが返答
ARP Reply (unicast)
192.168.10.1 is at 02:00:00:00:10:01

ARP自身はUDPの上で動くわけではありません。EthernetではIPv4とは別のEtherType(ARP: 0x0806)で運ばれます。IPv6では同じ仕組みをそのまま使わず、ICMPv6の近隣探索(NDP)を使います。

INTERACTIVE NODE TOPOLOGY

ARPをノードと矢印で追う:誰に届き、誰が返すのか

ノード図を切り替え、ARP Request・Reply・その後のNTP通信を追跡できます。通信はブラウザー内の模式表現で、実際のパケットは送信しません。

家庭内LAN · 192.168.10.0/24外部ネットワーク📱スマートフォンWi-Fi端末192.168.10.20📶アクセスポイントWi-Fi ⇄ 有線LAN📡ルーターデフォルトGW192.168.10.1🖥️NTPサーバー最終宛先198.51.100.123💻別のPC同じLAN内192.168.10.30次ホップを決定(まだ送信しない)最終宛先MAC 02:00:00:00:10:20MAC 02:00:00:00:10:01実線の色付き矢印 = 選択中の通信 / 灰色の破線 = 物理・論理的な接続

STEP 1 / 4

最終宛先はNTPサーバー。でも最初に渡す相手はルーター

スマホは 198.51.100.123 が自分のLAN(192.168.10.0/24)の外にあると判断します。そこでゲートウェイ 192.168.10.1 のMACアドレスを探します。

IPv4 destination = 198.51.100.123 / next-hop = 192.168.10.1
スマホのARPキャッシュ
IP address → MAC address
(empty)

キャッシュに対応関係があり、有効期限内なら通常ARPを再送せずNTP通信へ進めます。実際の保持時間はOSにより異なります。

ARP Request / Reply

リンク上で運ぶ独立したARPメッセージ。EthernetではEtherType 0x0806。IPやUDPヘッダは付きません。

MAC解決後のNTP

Wi-Fiの802.11フレームでIPv4 → UDP → NTPを運びます。IPの宛先はNTPサーバー、LAN内の次ホップはルーターです。

IPアドレスとMACアドレスは説明用です。Wi-Fiの802.11フレームはEthernetと同じヘッダ形式ではなく、通常インフラストラクチャモードではAPのBSSIDなどを含む複数のアドレス欄が関わります。図の矢印は論理的な転送方向を示し、802.11の各アドレス欄そのものではありません。IPv6ではARPではなくNDPを使います。

頻出するネットワーク用語を、この例で確認する

NIC(ネットワークインターフェース)

L1〜L2

PCを有線LANやWi-Fiにつなぐ通信機能。EthernetならリンクごとにMACアドレスを使ってフレームを送受信します。

MACアドレス

L2

Ethernetなどで使われるリンク上の識別子。通常48ビット(6バイト)で、例は 02:00:00:00:10:20。IPアドレスと違い、次のリンクの転送相手を指定します。

スイッチ(L2スイッチ)

L2

フレームの送信元MACを学習し、宛先MACに対応するポートへ転送する機器。通常、IPの経路選択やTTL減算は行いません。

IPアドレス

L3

異なるネットワークの先にある宛先を表す論理アドレス。IPv4は32ビット。ルーターは主に宛先IPを使って転送先を決めます。

サブネット/CIDR

L3

IPアドレスをネットワークの範囲に区切る考え方。192.168.10.20/24なら、先頭24ビットがネットワーク部で、同一サブネットは通常192.168.10.0〜255です。

デフォルトゲートウェイ

L3

送信先が自分のサブネットにいないとき、最初にIPパケットを預けるルーターのIPアドレス。PCはそのMACをARPで調べます。

ARP

L2/L3の連携

IPv4の次ホップIPに対応するMACアドレスを、同じリンクで問い合わせる仕組み。『192.168.10.1を持つ機器はMACを教えて』とブロードキャストします。

ルーター

L3

宛先IPと経路表から次ホップ・出力インターフェースを選ぶ機器。Ethernetをいったん外し、TTLを減らして次のリンク用に包み直します。

NAT/NAPT

主にL3・L4

境界でIPアドレス、NAPTではさらにTCP/UDPポートなどを変換する仕組み。IPv4の家庭用ルーターで複数の端末が一つの公開IPを共有する際に一般的です。

TTL(Time To Live)

L3

IPv4ヘッダの値。ルーターで転送するたび通常1以上減り、0になると破棄されます。パケットが経路を無限に循環することを防ぎます。

ポート番号

L4

同じIPの中でどの通信・サービスかを識別する番号。UDP/123はNTP、TCP/443はHTTPSで一般的です。

DNS/DHCP

アプリケーション層

DNSは名前からIPなどを調べる仕組み。DHCPはIP・サブネット・ゲートウェイ・DNSサーバーなどの設定を端末へ配布する仕組み。

PACKET JOURNEY · VISUAL LAB

パケットと一緒にネットワークを進もう

上のノード図と下のヘッダが、同じ段階に連動します。ネットワークへの送信は行いません。

① 接続方法
自宅のネットワーク / LAN外部ネットワークPC192.168.10.20● 今ここL2スイッチMACで転送ルーター192.168.10.1NTPサーバー198.51.100.123濃い矢印が、この段階までに進んだ通信経路

② 通信の進行:1 / 4

STEP 1

PCがNTPパケットを作る

まず最終宛先IPを決める

宛先198.51.100.123は家庭内LANの外。PCはデフォルトゲートウェイ192.168.10.1へ渡します。ゲートウェイのMACはARPで取得済みとします。

③ 今、パケットの中身はどうなっている?

L2:次の機器までリンク層のフレーム

Ethernet:送信元=PC、宛先=GW

L3:IPの通信相手IPv4ヘッダ

192.168.10.20 → 198.51.100.123

TTL:64

L4:UDPのサービスUDPヘッダ

53000 → 123

中身:NTP時刻同期要求(アプリケーション層)

見てほしいポイント:L3の最終宛先と、L2の次の転送相手は別物です。

教育用の簡略モデル。IPはRFC 5737の文書用範囲、MACは説明用。実環境のWANリンクはEthernetとは限らず、TTLは通過したルーター数に依存します。

MACは変わる。IPは常に変わらない?

いいえ。通常のIPルーティングでは送信元・宛先IPを維持しますが、NAPTがあると送信元IPやポートが変わります。VPN・トンネルではIPパケットを別のIPパケットで包むこともあります。「MACだけ変わる」は単純なEthernet間ルーティングの説明として覚えてください。

1. まず「通信の荷物」を理解する:IP・UDP・ポート番号

インターネットの通信は、データを小さな単位に分けて運びます。ここでは郵便に例えて理解しましょう。IPアドレスは届け先の住所、ポート番号は届け先のサービス窓口です。IPとUDPは担当する仕事が違います。

IPパケットの中にUDP、さらにNTPのデータが入る

IPヘッダ:どの機器から、どの機器へ?

送信元IPアドレス / 宛先IPアドレス / 上位プロトコル番号など

UDPヘッダ:どのサービスへ?

送信元ポート / 宛先ポート / 長さ / チェックサム(8バイト)

NTPメッセージ:時刻を問い合わせる・返す情報

外側のIPヘッダでコンピューター間の届け先が決まり、その内側のUDPヘッダでサービスの宛先が決まります。NTPの時刻情報はさらに内側です。

IPアドレスとIPスプーフィング

IPアドレスはネットワーク上の通信元・通信先を表します。送信元を示す IP.src と宛先を示す IP.dst があり、宛先IPに基づいてルーターがパケットを転送します。IPスプーフィング(IP spoofing)は、送信元欄を別の機器のアドレスに書き換えることです。

正常な差出人

IP.src = 192.0.2.10
IP.dst = 198.51.100.10

192.0.2.10 の機器が送信したパケット

偽装した差出人

実際の送信者 = 192.0.2.10
IP.src = 203.0.113.20   ← 偽装
IP.dst = 198.51.100.10

サーバーには送信元が203.0.113.20に見える

ただし、偽装したパケットが必ず通るわけではありません。通信事業者やネットワークの出口で送信元検証が行われていれば、不正な送信元アドレスは破棄できます。また、IPアドレスだけでは「誰が本当に送信したか」の認証にはなりません。

UDPは何をする?

UDP(User Datagram Protocol)は、アプリケーションのデータを短いデータグラムとして送る通信方式です。TCPと異なり、通信開始前に3ウェイハンドシェイクを行わず、UDP自身は到達確認・自動再送・順序保証を提供しません。その分、ヘッダが小さく、単発の問い合わせにも使いやすい方式です。

UDPヘッダの構造:全部で8バイト

送信元ポート

16ビット

宛先ポート

16ビット

長さ

16ビット

チェックサム

16ビット

16ビットは2バイトなので、4フィールド合計8バイト。長さにはUDPヘッダとデータが含まれます。チェックサムは転送中の破損検出用で、送信者本人を認証する仕組みではありません。

TCP・UDP・ICMPは同じものではない

↔TCP

Transmission Control Protocol

接続を確立して、確認応答・再送・順序制御を行う。

例:WebのHTTPS通信など

→UDP

User Datagram Protocol

接続確立を前提とせず、データグラムを送る。UDP自身は再送・順序保証をしない。

例:NTP、DNSの一般的な問い合わせなど

!ICMP

Internet Control Message Protocol

IP通信の到達性診断やエラー通知に使う。TCP・UDPのポート番号は使わない。

例:pingのEcho Request/Replyなど

通信開始の見え方

TCP
  1. 1. SYN → 接続要求
  2. 2. ← SYN + ACK
  3. 3. ACK → 接続確立
  4. 4. データの送受信
UDP
  1. 1. データを送信 →
  2. 2. 必要なら相手が応答 ←
  3. ※ UDPには接続確立の3段階がない

TCPでも攻撃は起こります。ここで重要なのは、UDPの単発の要求では、TCPの接続確立のような往復処理なしでサーバーが応答を送れる場合がある、という違いです。

公式資料・実物を見るRFC 768 — UDPの実際の8バイトヘッダ仕様ポート番号・長さ・チェックサムの定義を確認できます。公式資料・実物を見るRFC 792 — ICMPのEchoメッセージEcho RequestはType 8、Echo ReplyはType 0として定義されています。

2. NTPはどうやって時計を合わせるのか

NTP(Network Time Protocol)はコンピューターの時計を時刻源と同期するプロトコルです。多くの環境でUDPのポート123番を使います。ポートとは、コンピューター上のどのプログラム・サービスにデータを渡すかを識別する番号です。

クライアント

時計を合わせたいPCやサーバー

時刻要求 →

← 時刻応答

NTPサーバー

UDP/123で時刻を提供

通常は「自分が問い合わせ、自分に返事が返る」。攻撃との違いを考える際の基準になります。

NTPが使う4つの時刻

ネットワークの遅延を考慮するため、NTPでは時刻を4つ使って計算します。時刻源の時計を単にコピーするわけではありません。

t1

クライアントから要求を送信

クライアント時計で記録

t2

サーバーが要求を受信

サーバー時計で記録

t3

サーバーが応答を送信

サーバー時計で記録

t4

クライアントが応答を受信

クライアント時計で記録

往復遅延 δ = (t4 − t1) − (t3 − t2)
時刻差 θ = [(t2 − t1) + (t3 − t4)] / 2

対称に近い通信遅延などを仮定した基本的な算出式です。実際のNTPにはサンプルの選択・統計処理などもあります。

パケットの中身を見る

正常なNTP通信のイメージ(概念ログ・実測ではない)

# クライアントから時刻問い合わせ
IP:   192.0.2.10        → 198.51.100.10
UDP:  49152             → 123
NTP:  mode=3 (client), transmit_timestamp=t1

# サーバーから返事
IP:   198.51.100.10     → 192.0.2.10
UDP:  123               → 49152
NTP:  mode=4 (server), origin=t1, receive=t2, transmit=t3

ここではクライアント側の一時的な送信元ポートを49152と仮定しました。実際の送信元ポートは環境によって異なります。基本のNTPヘッダは48バイトで、タイムスタンプなどのフィールドを持ちます。

公式資料・実物を見るRFC 5905 — NTPv4の実際のパケット構造ヘッダの図・動作モード・時刻同期の計算方法が載っています。

3. NTPリフレクション攻撃では何が変わる?

攻撃者はNTPサーバーに対し、標的のIPアドレスを送信元と偽装した要求を送ります。NTPサーバーが送信元を信じて応答すると、返事は攻撃者ではなく標的に届きます。第三者のサーバーにトラフィックを反射させる仕組みです。

PACKET WALKTHROUGH

攻撃者 A

192.0.2.10

NTPサーバー N

198.51.100.10

標的 V

203.0.113.20

01

A が N に偽装要求

パケットの差出人欄がVに書き換えられている

IP.src = V   IP.dst = N   UDP.dst = 123
02

N が V に応答

Nから見るとVが要求者なので、返事の宛先もV

IP.src = N   IP.dst = V   UDP.src = 123
03

多くのNがVへ応答

複数のNTPサーバーの応答が標的の回線に集中

N1 → V   N2 → V   N3 → V   …

IPアドレスはRFC 5737の文書用アドレスです。外部サーバーへ送る実行コマンドではありません。

DoS(Denial of Service)はサービスを利用できなくする攻撃の総称で、DDoS(Distributed DoS)は多数の送信元などに分散した攻撃です。反射器を多数利用する形はDRDoS(分散反射型DoS)と呼ばれます。どの言葉も「同じ攻撃の別名」ではなく、着目する特徴が違います。

反射

標的でない第三者のサーバーが標的へ応答すること

増幅

要求よりも大きな応答が返ること

分散

多数の送信元・反射器に通信が分かれていること

4. なぜ小さな要求が大きな攻撃になるのか

古い一部の ntpd(NTPサーバー用ソフトウェア)には、最近通信したクライアントの一覧を返すmonlistという管理機能がありました。少量の管理要求から、多数の記録を含む応答パケットが発生するため、悪用されました。

要求:小さい

少数の要求バイト

応答:大きい

複数のパケットに分かれた一覧

増幅倍率 = 応答の総バイト数 ÷ 要求の総バイト数
例:200 B の要求 → 4,000 B の応答
4,000 ÷ 200 = 20 倍

この数値は計算説明用の仮定値です。実際の倍率は実装・要求・応答の内容・計測単位によって変わります。

REFLECTION · NETWORK TOPOLOGY LAB

3つの機器で反射を追う

左から順にノードをたどり、要求と応答がどこへ向かうかを確認します。通信は一切送信しません。

攻撃者送信元IPを偽装NTPサーバー古い管理機能標的大量の応答を受信要求 →矢印が現在の通信を示します
通信の段階:1 / 4

攻撃者が偽装した要求を作る

送信元IPに標的のIPアドレスを書いた小さな要求が作られます。重要なのは、返信先が攻撃者自身ではないことです。

IPv4 src=標的IP / dst=NTPサーバーIP
UDP dst=123 / 小さな要求

ここに注目:IPヘッダの送信元が偽装されています。

増幅の量を変えてみる

標的へ届く応答の合計(モデル上の値)

2 MB

100 B × 20 倍 × 1,000 件 = 2,000,000 B

このラボは安全な概念シミュレーションです。古いmonlistのような応答が大きい機能を持つ実装を想定しており、現行のすべてのNTPサーバーに該当するものではありません。

現在のNTPサーバーの標準機能だと思わないこと

このmonlistの問題は、歴史的な実装の脆弱性 CVE-2013-5211 に関係します。NTPプロジェクトの告知によると、4.2.7p26以前のntpdに影響があり、修正版で解消されています。「NTPを使う=誰でもmonlistによる増幅ができる」という意味ではありません。

公式資料・実物を見るNTPプロジェクト — monlistの脆弱性と対策影響範囲、REQ_MON_GETLIST、アップグレードと設定による緩和を確認できます。公式資料・実物を見るCloudflare — NTP増幅攻撃の概念図公開されている反射・増幅の解説を図とともに確認できます。

5. 似た攻撃や用語の違いも、通信の流れで理解する

次の3つは、NTPリフレクションと混同しやすい技術です。いずれも「どこが標的か」「どんなプロトコルで何が返るか」を確認すると違いが見えます。

COMPARISON 01

NTPサーバーへの大量問い合わせ

直接的なDoS:攻撃を受けるのはNTPサーバーそのもの

送信元

通信の起点

大量のNTP要求 →→

標的NTPサーバー

通信の受け手

NTPサーバーへ大量の時刻問い合わせを送ると、処理能力や通信帯域を圧迫できます。しかし、これはサーバー自身に要求が集中する攻撃。第三者のサーバーに要求を送り、その返事を別の標的へ向ける反射攻撃とは構造が異なります。

違い:標的に届くのが「要求」なのか、第三者からの「応答」なのか。

COMPARISON 02

NTPの時刻情報の改ざん

可用性ではなく、時計の正確性・信頼性を狙う

偽の時刻情報

通信の起点

不正な時刻を渡す →

時刻同期クライアント

通信の受け手

NTPが返す時刻の信頼性が損なわれると、コンピューターの時計がずれる場合があります。これにより、ログの時系列分析や時刻を利用するセキュリティ機構に影響が出ることがあります。

こちらは時刻という情報の正しさが焦点です。NTPリフレクションでは時刻を改ざんする必要はなく、狙いは応答トラフィックの集中です。

COMPARISON 03

ICMP Echo RequestとIPスプーフィング

送信元を偽装する点は似ていても、使うプロトコルが違う

ping送信元

通信の起点

ICMP Echo Request →

受信ホスト

通信の受け手

pingとは? 通信相手へICMPのEcho Request(Type 8)を送り、Echo Reply(Type 0)が返るか確認する診断機能です。ICMPのEchoにはUDPの123番ポートという概念はありません。

送信元IPを偽装したICMP要求を送ると、別の宛先に返信が向く場合もあります。ただし、ICMP Echo RequestはNTPの管理要求とはまったく別のメッセージです。NTPのmonlistによる大きな応答は引き出せません。

ICMP Echo

IPの診断メッセージ。UDPポートは使わない

NTP問い合わせ

UDPでNTPサービスへ送る時刻・管理メッセージ

6. ログではどのように見える?

標的側がNTPを使っていないのに、UDPの送信元ポート123番から大量のパケットを受け取っていたら、調査の手掛かりになります。ただし、UDP/123だけで攻撃と断定はできません。送信量、宛先、正常な時刻同期との違い、ネットワーク全体の状況を合わせて確認します。

受信フローログ(すべて説明用の架空データ)

time=12:00:01 src=198.51.100.11:123 dst=203.0.113.20:49152 proto=UDP bytes=6000
time=12:00:01 src=198.51.100.12:123 dst=203.0.113.20:49152 proto=UDP bytes=5800
time=12:00:01 src=198.51.100.13:123 dst=203.0.113.20:49152 proto=UDP bytes=6200

この例では、複数の送信元から同じ標的のUDPポートへ通信が集中しています。src は送信元、dst は宛先、bytes は計測対象のバイト数です。パケットの個別長さなのか集計区間の通信量なのかは、実際のログ形式で確認する必要があります。

パケット解析ツールでの観察項目

送信元IP / 宛先IP

どのサーバーから誰に届いたか。複数の送信元IPへの分散に注目

送信元・宛先ポート

NTP由来のUDP/123が関わっているか。役割によって送信元・宛先は変わる

通信量とパケット数

1つの要求に対する応答の総サイズ、大量の応答が短時間に集中していないか

NTPのメッセージ種別

通常の時刻同期と、古い実装の管理メッセージを混同していないか

7. 防ぐにはどこを守ればよい?

1

送信元IPの偽装をネットワーク出口で止める(BCP 38)

BCPはBest Current Practice(推奨される運用上の実践方法)の略です。BCP 38/RFC 2827は、ネットワークから出るパケットの送信元IPが、そのネットワークで正当に使える範囲かを検証する方法を推奨しています。偽装要求が外へ出られなければ、この方式の反射攻撃を大幅に抑えられます。

2

NTPサーバーの古い管理機能を公開しない

脆弱な古いntpdを更新し、不要な問い合わせを拒否します。過去のntpdには disable monitor や noquery といった設定上の緩和策がありますが、適用可否は実装・バージョンで判断してください。

3

被害側はネットワークの上流で緩和する

通信が回線を埋めるほど増えた場合、アプリケーションやサーバーだけで防ぐのは困難です。ISP(インターネット接続事業者)やDDoS緩和サービスと連携し、上流側で不要なトラフィックを制限します。

BCP 38の動作例

ある会社に割り当てられた送信元アドレスが 192.0.2.0/24 だとします(文書用の仮想例)。出口ルーターはこの範囲の送信元なら通し、それ以外の送信元を名乗るパケットを拒否します。/24 はIPv4アドレスの先頭24ビットがネットワーク部であることを示すCIDR表記です。

通過

IP.src = 192.0.2.10

拒否

IP.src = 203.0.113.20
公式資料・実物を見るRFC 2827 / BCP 38 — 送信元IP検証の設計ネットワーク境界での送信元フィルタリングを実際の構成例とともに確認できます。

8. 自分で理解を確認する

Q1. 攻撃者が書き換えるのはIPヘッダのどの項目?答えを見る ↓

送信元IPアドレス(IP.src)です。NTPサーバーが応答する宛先を、攻撃者自身から標的へすり替えます。

Q2. 要求が200 B、応答の合計が10,000 Bなら増幅倍率は?答えを見る ↓

10,000 ÷ 200 = 50倍です。実際の通信量を評価するときは、パケットヘッダなど何をバイト数に含めるかも揃えて比較します。

Q3. ICMP Echo RequestをNTPサーバーへ送ると、NTPのmonlist応答になる?答えを見る ↓

なりません。ICMPのEchoとUDPを利用したNTPの管理要求はプロトコルが違います。

Q4. BCP 38は反射攻撃のどの部分を阻止する?答えを見る ↓

攻撃者側ネットワークから、不正な送信元IPを名乗るパケットが流出する部分です。正規の送信元からのDoSを全て止めるものではありません。

まとめ

IPは相手先、UDPはサービスへの配送、NTPは時刻情報。その役割の違いが攻撃の理解につながる。

NTPリフレクション攻撃は、送信元IPアドレスの偽装、第三者サーバーによる応答の反射、場合によっては大きな応答による増幅が組み合わさった攻撃です。正常な時刻同期・直接的なDoS・時刻改ざん・ICMP Echoとの違いも、通信の宛先とメッセージの種類から区別できます。

技術資料・一次情報

本文中で必要な仕組みは説明しました。以下は仕様や実装の原典を確認したい場合の資料です。