12 KiB
Raw Blame History

123/udp - Pentesting NTP

{{#include ../banners/hacktricks-training.md}}

Основна інформація

Протокол синхронізації часу в мережі (NTP) забезпечує синхронізацію годинників комп'ютерів та мережевих пристроїв через мережі з різною затримкою. Це важливо для підтримки точного обліку часу в ІТ-операціях, безпеці та веденні журналів. Оскільки час використовується практично в кожному процесі аутентифікації, криптопротоколі та судово-медичному розслідуванні, зловмисник, який може впливати на 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

# 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)

Лише кілька команд моніторингу приймаються з віддалених IP-адрес, коли cmdallow увімкнено:

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

Дивіться сторінку man для chronyc для значення прапорців M/S та інших полів (stratum, reach, jitter тощо).

Nmap

# 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>

Масове/Інтернет-сканування

# 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 Компонент Вплив
2023 CVE-2023-26551→26555 ntp 4.2.8p15 (libntp mstolfp, praecis_parse) Багаторазові записи за межами допустимого, доступні через відповіді ntpq. Патч у 4.2.8p16 🡒 оновлення або зворотне портування виправлень.
2023 CVE-2023-33192 ntpd-rs (реалізація на Rust) Неправильно сформований NTS cookie викликає віддалений DoS до v0.3.3 впливає на порт 123 навіть коли NTS вимкнено.
2024 оновлення дистрибутивів chrony 4.4 / 4.5 кілька виправлень безпеки та NTS-KE (наприклад, SUSE-RU-2024:2022)
2024 Запис DDoS Cloudflare повідомляє про 5.6 Tbps UDP-рефлексій атаку (NTP серед використаних протоколів). Тримайте monitor та monlist вимкненими на хостах, що виходять в Інтернет.

Експлойт-кити: Патчі для концептуальних навантажень серії 2023 ntpq OOB-write доступні на GitHub (див. опис Meinberg) і можуть бути використані для фішингу з боку клієнта для системних адміністраторів.


Розширені атаки

1. Посилення / Відображення NTP

Запит старого режиму-7 monlist повертає до 600 адрес хостів і все ще присутній на тисячах Інтернет-хостів. Оскільки відповідь (428-468 байт/запис) є ~ 200× більшою за 8-байтовий запит, зловмисник може досягти тризначних коефіцієнтів посилення. Заходи пом'якшення:

  • Оновіть до ntp 4.2.8p15+ та додайте disable monitor.
  • Обмежте швидкість UDP/123 на краю або увімкніть sessions-required на пристроях DDoS.
  • Увімкніть BCP 38 фільтрацію виходу, щоб заблокувати підробку джерела.

Дивіться статтю навчального центру Cloudflare для покрокового розбору.

2. Атаки на зсув часу / затримку (дослідження Khronos / Chronos)

Навіть з аутентифікацією, зловмисник на шляху може безшумно зсунути годинник клієнта, скидаючи/затримуючи пакети. Проект Khronos (раніше Chronos) IETF пропонує запитувати різноманітний набір серверів у фоновому режимі та перевіряти результати на предмет виявлення зсуву > 𝚡 мс. Сучасний chrony (4.4+) вже реалізує подібний фільтр перевірки (maxdistance / maxjitter).

3. Зловживання NTS та експозиція 4460/tcp

NTS переміщує важку криптографію на окремий TLS 1.3 канал на 4460/tcp (ntske/1). Погані реалізації (див. CVE-2023-33192) аварійно завершуються при парсингу cookie або дозволяють слабкі шифри. Тестувальники повинні:

# 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

Шукайте самопідписані або прострочені сертифікати та слабкі шифри (non-AEAD). Посилання: RFC 8915 §4.


Укріплення / Найкраща поточна практика (BCP-233 / RFC 8633)

Оператори МАЮТЬ:

  1. Використовувати ≥ 4 незалежні, різноманітні джерела часу (публічні пулі, GPS, PTP-містки), щоб уникнути отруєння з одного джерела.
  2. Увімкнути kod та limited/nomodify обмеження, щоб зловмисні клієнти отримували пакети Kiss-o'-Death з обмеженням швидкості замість повних відповідей.
  3. Моніторити журнали демонів на предмет panic подій або коригувань кроку > 1000 с. (Сигнатури атаки згідно з RFC 8633 §5.3.)
  4. Розглянути leap-smear, щоб уникнути простоїв через стрибки секунд, але переконатися, що всі downstream клієнти використовують одне й те саме вікно розмиття.
  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

Корисні інструменти

Інструмент Призначення Приклад
ntpwn Обгортка для скрипт-кідді для спрею запитів monlist & peers python ntpwn.py --monlist targets.txt
zgrab2 ntp Масове сканування / JSON вихід з включеним прапором monlist Див. команду вище
chronyd з allow Запустити зловмисний NTP сервер у лабораторії пентесту chronyd -q 'server 127.127.1.0 iburst'
BetterCap Впровадження NTP пакетів для MITM з зсувом часу на Wi-Fi 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-2655155, CVE-2023-33192
  • Оновлення безпеки SUSE chrony 2024 (chrony 4.5)
  • Чернетка Khronos/Chronos (зменшення зсуву часу)
  • Посібник chronyc/приклади для віддаленого моніторингу
  • Документація модуля zgrab2 ntp {{#include ../banners/hacktricks-training.md}}