123/udp - Pentesting NTP

Reading time: 11 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

ネットワーク時間プロトコル (NTP) は、可変遅延ネットワーク上のコンピュータやネットワークデバイスが正確に時計を同期させることを保証します。これは、IT運用、セキュリティ、ログ記録において正確な時間管理を維持するために重要です。時間はほぼすべての認証、暗号プロトコル、法医学プロセスで使用されるため、NTPに影響を与えることができる攻撃者は、しばしばセキュリティ制御を回避したり、攻撃の調査を困難にすることができます。

概要とセキュリティのヒント

  • 目的: ネットワーク上でデバイスの時計を同期させる。
  • 重要性: セキュリティ、ログ記録、暗号プロトコル、分散システムにとって重要。
  • セキュリティ対策:
  • 認証付きの信頼できるNTPまたはNTS(ネットワーク時間セキュリティ)ソースを使用する。
  • デーモンにクエリ/コマンドを送信できるユーザーを制限する(restrict default noquery, kod など)。
  • レガシーのモード6/7制御クエリ(monlist, ntpdc)を無効にするか、レート制限をかける。
  • 同期のドリフト/リープセカンド状態を監視して改ざんを検出する。
  • デーモンを最新の状態に保つ(下記の最近のCVEを参照)。

デフォルトポート

123/udp   NTP            (data + legacy control)
4460/tcp  NTS-KE (RFC 8915) – TLS key-establishment for NTP
PORT    STATE SERVICE REASON
123/udp open  ntp     udp-response

列挙

クラシック ntpd / ntpq / ntpdc

bash
# Information & variables
ntpq -c rv <IP>
ntpq -c readvar <IP>
ntpq -c peers <IP>
ntpq -c associations <IP>

# Legacy mode-7 (often disabled >=4.2.8p9)
ntpdc -c monlist <IP>
ntpdc -c listpeers <IP>
ntpdc -c sysinfo  <IP>

chrony / chronyc (ほとんどの最新のLinuxディストリビューションで)

cmdallow が有効な場合、リモートIPから受け入れられる監視コマンドはわずかです:

bash
chronyc -a -n tracking   -h <IP>
chronyc -a -n sources -v -h <IP>
chronyc -a -n sourcestats -h <IP>

M/S フラグや他のフィールド(ストラタム、リーチ、ジッターなど)の意味については、chronycのマニュアルページを参照してください。

Nmap

bash
# Safe discovery & vuln detection
nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 <IP>

# Explicit monlist check
nmap -sU -p123 --script ntp-monlist <IP>

大規模/インターネットスキャン

bash
# Check if MONLIST is enabled (zgrab2 module)
zgrab2 ntp --monlist --timeout 3 --output-file monlist.json -f "zmap_results.csv"

設定ファイルの確認

  • /etc/ntp.conf (ntpd)
  • /etc/chrony/chrony.conf (chrony)
  • /etc/systemd/timesyncd.conf (timesyncd – クライアントのみ)

restrict 行、kod (Kiss-o'-Death) 設定、disable monitor/includefile /etc/ntp/crypto、および NTS が有効かどうか (nts enable) に特に注意してください。


最近の脆弱性 (2023-2025)

CVEコンポーネント影響
2023CVE-2023-26551→26555ntp 4.2.8p15 (libntp mstolfp, praecis_parse)ntpq 応答を介して到達可能な複数のバッファオーバーフロー書き込み。4.2.8p16 でパッチ 🡒 アップグレードまたはバックポート修正。
2023CVE-2023-33192ntpd-rs (Rust 実装)形式が不正な NTS クッキーがリモート DoS を引き起こす v0.3.3 より前 – NTS 無効 の場合でもポート 123 に影響。
2024ディストリビューションの更新chrony 4.4 / 4.5 – 複数のセキュリティ強化 & NTS-KE 修正 (例: SUSE-RU-2024:2022)
2024記録的 DDoSCloudflare が 5.6 Tbps UDP リフレクション 攻撃を報告 (使用されたプロトコルの中に NTP が含まれる)。インターネットに面したホストでは monitor & monlist を無効にしておく。

エクスプロイトキット: 2023 ntpq OOB 書き込みシリーズの概念実証ペイロードは GitHub にあり (Meinberg の記事を参照)、システム管理者のクライアントサイドフィッシングに武器化可能。


高度な攻撃

1. NTP 増幅 / リフレクション

レガシーの Mode-7 monlist クエリは最大 600 ホストアドレス を返し、数千のインターネットホストにまだ存在します。応答 (428-468 バイト/エントリ) は 8 バイトのリクエストの ~ 200× 大きいため、攻撃者は三桁の増幅係数に達することができます。緩和策:

  • ntp 4.2.8p15+ にアップグレードし、disable monitor追加 する。
  • エッジで UDP/123 のレート制限を行うか、DDoS アプライアンスで sessions-required を有効にする。
  • ソーススプーフィングをブロックするために BCP 38 出口フィルタリングを有効にする。

Cloudflare の学習センターの記事を参照して、ステップバイステップの内訳を確認してください。

2. 時間シフト / 遅延攻撃 (Khronos / Chronos 研究)

認証があっても、経路上の攻撃者はパケットをドロップまたは遅延させることでクライアントの時計を静かに シフト させることができます。IETF Khronos (以前の Chronos) ドラフト は、バックグラウンドで多様なサーバーにクエリを行い、シフト > 𝚡 ms を検出するために結果をサニティチェックすることを提案しています。最新の chrony (4.4+) はすでに類似のサニティフィルター (maxdistance / maxjitter) を実装しています。

3. NTS 悪用 & 4460/tcp 露出

NTS は重い暗号処理を別の TLS 1.3 チャンネル 4460/tcp (ntske/1) に移動します。実装が不十分な場合 (CVE-2023-33192 を参照) は、クッキーの解析時にクラッシュするか、弱い暗号を許可します。ペンテスターは:

bash
# TLS reconnaissance
nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>

# Grab banner & ALPN
openssl s_client -connect <IP>:4460 -alpn ntske/1 -tls1_3 -ign_eof

自己署名または期限切れの証明書と弱い暗号スイート(非AEAD)を探します。参照: RFC 8915 §4。


ハードニング / ベスト・カレント・プラクティス (BCP-233 / RFC 8633)

オペレーターは次のことを推奨します:

  1. ≥ 4 の独立した多様な時間ソース(公共プール、GPS、PTPブリッジ)を使用して、単一ソースの汚染を避ける。
  2. 悪用するクライアントが完全な応答の代わりにKiss-o'-Deathレート制限パケットを受け取るように、kodおよびlimited/nomodify制限を有効にする。
  3. panicイベントやステップ調整 > 1000 s のためにデーモンログを監視する。(RFC 8633 §5.3による攻撃の兆候。)
  4. リープ秒の停止を避けるためにleap-smearを検討するが、すべての下流クライアントが同じスミアウィンドウを使用することを確認する。
  5. リープ秒フラグを見逃さないように、ポーリングを≤24時間に保つ。

包括的なチェックリストについてはRFC 8633を参照してください。


Shodan / Censys Dorks

port:123 "ntpd"          # Version banner
udp port:123 monlist:true # Censys tag for vulnerable servers
port:4460 "ntske"         # NTS-KE

有用なツール

ツール目的
ntpwnmonlist & peers クエリをスプレーするためのスクリプトキディラッパーpython ntpwn.py --monlist targets.txt
zgrab2 ntp大規模スキャン / monlist フラグを含む JSON 出力上記のコマンドを参照
chronyd with allowペンテストラボでの悪意のある NTP サーバーの実行chronyd -q 'server 127.127.1.0 iburst'
BetterCapWi-Fi 上での時間シフト MITM のために NTP パケットを注入set arp.spoof.targets <victim>; set ntp.time.delta 30s; arp.spoof on

HackTricks 自動コマンド

Protocol_Name: NTP
Port_Number: 123
Protocol_Description: Network Time Protocol

Entry_1:
Name: Notes
Description: Notes for NTP
Note: |
The Network Time Protocol (NTP) ensures computers and network devices across variable-latency networks sync their clocks accurately. It's vital for maintaining precise timekeeping in IT operations, security, and logging. NTP's accuracy is essential, but it also poses security risks if not properly managed.

https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-ntp.html

Entry_2:
Name: Nmap
Description: Enumerate NTP
Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 {IP}

参考文献

  • RFC 8915 – ネットワーク時間プロトコルのためのネットワーク時間セキュリティ (ポート 4460)
  • RFC 8633 – ネットワーク時間プロトコル BCP
  • Cloudflare DDoS レポート 2024 Q4 (5.6 Tbps)
  • Cloudflare NTP 増幅攻撃 記事
  • NTP 4.2.8p15 CVE シリーズ 2023-04
  • NVD エントリ CVE-2023-26551–55, CVE-2023-33192
  • SUSE chrony セキュリティアップデート 2024 (chrony 4.5)
  • Khronos/Chronos 草案 (時間シフト緩和)
  • chronyc マニュアル/リモートモニタリング用の例
  • zgrab2 ntp モジュールドキュメント

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする