# 123/udp - Pentesting NTP {{#include ../banners/hacktricks-training.md}} ## Informations de base Le **Network Time Protocol (NTP)** garantit que les ordinateurs et les dispositifs réseau sur des réseaux à latence variable synchronisent leurs horloges avec précision. C'est vital pour maintenir une chronométrie précise dans les opérations informatiques, la sécurité et la journalisation. Parce que le temps est utilisé dans presque tous les processus d'authentification, de crypto-protocole et d'analyse judiciaire, **un attaquant capable d'influencer NTP peut souvent contourner les contrôles de sécurité ou rendre les attaques plus difficiles à enquêter.** ### Résumé & Conseils de sécurité - **Objectif** : Synchronise les horloges des dispositifs sur les réseaux. - **Importance** : Critique pour la sécurité, la journalisation, les crypto-protocoles et les systèmes distribués. - **Mesures de sécurité** : - Utilisez des sources NTP ou NTS (Network Time Security) de confiance avec authentification. - Restreindre qui peut interroger/commander le démon (``restrict default noquery``, ``kod`` etc.). - Désactiver les requêtes de contrôle Mode-6/7 héritées (``monlist``, ``ntpdc``) ou les limiter en taux. - Surveiller la dérive de synchronisation/l'état des secondes intercalaires pour détection de falsification. - Gardez le démon à jour (voir les CVE récents ci-dessous). **Ports par défaut** ``` 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 ``` --- ## Énumération ### ntpd / ntpq / ntpdc classique ```bash # Information & variables ntpq -c rv ntpq -c readvar ntpq -c peers ntpq -c associations # Legacy mode-7 (often disabled >=4.2.8p9) ntpdc -c monlist ntpdc -c listpeers ntpdc -c sysinfo ``` ### chrony / chronyc (dans la plupart des distributions Linux modernes) Seule une poignée de commandes de surveillance sont acceptées depuis des IP distantes lorsque ``cmdallow`` est activé : ```bash chronyc -a -n tracking -h chronyc -a -n sources -v -h chronyc -a -n sourcestats -h ``` Voir la page de manuel de chronyc pour la signification des indicateurs **M/S** et d'autres champs (stratum, reach, jitter, etc.). ### Nmap ```bash # Safe discovery & vuln detection nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 # Explicit monlist check nmap -sU -p123 --script ntp-monlist ``` ### Scan de masse/Internet ```bash # Check if MONLIST is enabled (zgrab2 module) zgrab2 ntp --monlist --timeout 3 --output-file monlist.json -f "zmap_results.csv" ``` --- ## Examinez les fichiers de configuration - ``/etc/ntp.conf`` (ntpd) - ``/etc/chrony/chrony.conf`` (chrony) - ``/etc/systemd/timesyncd.conf`` (timesyncd – client uniquement) Faites particulièrement attention aux lignes ``restrict``, aux paramètres ``kod`` (Kiss-o'-Death), à ``disable monitor``/``includefile /etc/ntp/crypto`` et à savoir si *NTS* est activé (``nts enable``). --- ## Vulnérabilités récentes (2023-2025) | Année | CVE | Composant | Impact | |------|-----|-----------|--------| | 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Écritures hors limites multiples accessibles via les réponses **ntpq**. Correctif dans **4.2.8p16** 🡒 mise à niveau ou correctifs de rétroport. | | 2023 | **CVE-2023-33192** | **ntpd-rs** (implémentation Rust) | Un cookie **NTS** malformé provoque un **DoS** à distance avant v0.3.3 – affecte le port 123 même lorsque NTS **désactivé**. | | 2024 | mises à jour de distribution | **chrony 4.4 / 4.5** – plusieurs durcissements de sécurité & correctifs NTS-KE (par exemple, SUSE-RU-2024:2022) | | 2024 | DDoS record | Cloudflare signale une attaque de **réflexion UDP de 5,6 Tbps** (NTP parmi les protocoles utilisés). Gardez *monitor* & *monlist* désactivés sur les hôtes exposés à Internet. | > **Kits d'exploitation** : Des charges utiles de preuve de concept pour la série d'écritures OOB ntpq 2023 sont sur GitHub (voir l'article de Meinberg) et peuvent être armées pour le phishing côté client des administrateurs système. --- ## Attaques avancées ### 1. Amplification / Réflexion NTP La requête Mode-7 ``monlist`` renvoie jusqu'à **600 adresses hôtes** et est toujours présente sur des milliers d'hôtes Internet. Comme la réponse (428-468 octets/entrée) est *~ 200×* plus grande que la requête de 8 octets, un attaquant peut atteindre des facteurs d'amplification à trois chiffres. Atténuations : - Mettez à niveau vers ntp 4.2.8p15+ et **ajoutez** ``disable monitor``. - Limitez le débit UDP/123 à la périphérie ou activez *sessions-required* sur les appareils DDoS. - Activez le filtrage de sortie *BCP 38* pour bloquer le spoofing de source. Consultez l'article du centre d'apprentissage de Cloudflare pour un décompte étape par étape. ### 2. Attaques de décalage / retard temporel (recherche Khronos / Chronos) Même avec authentification, un attaquant sur le chemin peut silencieusement **décaler l'horloge du client** en supprimant/délai des paquets. Le **brouillon IETF Khronos (anciennement Chronos)** propose d'interroger un ensemble diversifié de serveurs en arrière-plan et de vérifier la validité du résultat pour détecter un décalage > 𝚡 ms. Le chrony moderne (4.4+) implémente déjà un filtre de validité similaire (``maxdistance`` / ``maxjitter``). ### 3. Abus de NTS & exposition 4460/tcp NTS déplace le lourd cryptage vers un **canal TLS 1.3 séparé sur 4460/tcp** (``ntske/1``). Les mauvaises implémentations (voir CVE-2023-33192) plantent lors de l'analyse des cookies ou permettent des chiffrements faibles. Les pentesters devraient : ```bash # TLS reconnaissance nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert # Grab banner & ALPN openssl s_client -connect :4460 -alpn ntske/1 -tls1_3 -ign_eof ``` Recherchez des certificats auto-signés ou expirés et des suites de chiffrement faibles (non-AEAD). Référence : RFC 8915 §4. --- ## Renforcement / Meilleures Pratiques Actuelles (BCP-233 / RFC 8633) *Les opérateurs DOIVENT :* 1. Utiliser **≥ 4** sources de temps indépendantes et diverses (pools publics, GPS, ponts PTP) pour éviter le empoisonnement par source unique. 2. Activer les restrictions ``kod`` et ``limited``/``nomodify`` afin que les clients abusifs reçoivent des paquets de limitation de taux **Kiss-o'-Death** au lieu de réponses complètes. 3. Surveiller les journaux du démon pour des événements **panic** ou des ajustements de pas > 1000 s. (Signatures d'attaque selon RFC 8633 §5.3.) 4. Envisager **leap-smear** pour éviter les pannes de seconde intercalaire, mais s'assurer que *tous* les clients en aval utilisent la même fenêtre de smear. 5. Garder le polling ≤24 h afin que les indicateurs de seconde intercalaire ne soient pas manqués. Voir RFC 8633 pour une liste de contrôle complète. --- ## Shodan / Censys Dorks ``` port:123 "ntpd" # Version banner udp port:123 monlist:true # Censys tag for vulnerable servers port:4460 "ntske" # NTS-KE ``` --- ## Outils Utiles | Outil | But | Exemple | |-------|-----|---------| | ``ntpwn`` | Wrapper pour script-kiddie pour pulvériser les requêtes monlist & peers | ``python ntpwn.py --monlist targets.txt`` | | **zgrab2 ntp** | Scan de masse / sortie JSON incluant le drapeau monlist | Voir la commande ci-dessus | | ``chronyd`` avec ``allow`` | Exécuter un serveur NTP rogue dans un laboratoire de pentest | ``chronyd -q 'server 127.127.1.0 iburst'`` | | ``BetterCap`` | Injecter des paquets NTP pour un MITM de décalage horaire sur Wi-Fi | ``set arp.spoof.targets ; set ntp.time.delta 30s; arp.spoof on`` | --- ## Commandes Automatiques 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} ``` --- ## Références - RFC 8915 – *Sécurité du temps réseau pour le protocole de temps réseau* (port 4460) - RFC 8633 – *Protocole de temps réseau BCP* - Rapport DDoS de Cloudflare Q4 2024 (5,6 Tbps) - Article de Cloudflare sur l'*attaque d'amplification NTP* - NTP 4.2.8p15 série CVE 2023-04 - Entrées NVD **CVE-2023-26551–55**, **CVE-2023-33192** - Mise à jour de sécurité chrony SUSE 2024 (chrony 4.5) - Projet Khronos/Chronos (atténuation du décalage horaire) - Manuel chronyc/exemples pour la surveillance à distance - Docs du module ntp zgrab2 {{#include /banners/hacktricks-training.md}}