diff --git a/src/network-services-pentesting/pentesting-ntp.md b/src/network-services-pentesting/pentesting-ntp.md index 00195e614..3739b3b43 100644 --- a/src/network-services-pentesting/pentesting-ntp.md +++ b/src/network-services-pentesting/pentesting-ntp.md @@ -4,59 +4,154 @@ ## 기본 정보 -**네트워크 시간 프로토콜 (NTP)**는 다양한 지연 네트워크에서 컴퓨터와 네트워크 장치가 시계를 정확하게 동기화하도록 보장합니다. IT 운영, 보안 및 로깅에서 정확한 시간 유지에 필수적입니다. NTP의 정확성은 중요하지만, 적절하게 관리되지 않으면 보안 위험을 초래할 수 있습니다. +**네트워크 시간 프로토콜 (NTP)**는 가변 대기 시간 네트워크에서 컴퓨터와 네트워크 장치가 시계를 정확하게 동기화하도록 보장합니다. IT 운영, 보안 및 로깅에서 정확한 시간 유지에 필수적입니다. 시간은 거의 모든 인증, 암호 프로토콜 및 포렌식 프로세스에 사용되기 때문에, **NTP에 영향을 미칠 수 있는 공격자는 종종 보안 통제를 우회하거나 공격을 조사하기 어렵게 만들 수 있습니다.** -### 요약 및 보안 팁: +### 요약 및 보안 팁 - **목적**: 네트워크를 통해 장치 시계를 동기화합니다. -- **중요성**: 보안, 로깅 및 운영에 중요합니다. +- **중요성**: 보안, 로깅, 암호 프로토콜 및 분산 시스템에 중요합니다. - **보안 조치**: -- 인증이 있는 신뢰할 수 있는 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 +``` -**기본 포트:** 123/udp ``` PORT STATE SERVICE REASON 123/udp open ntp udp-response ``` +--- ## 열거 -```bash -ntpq -c readlist -ntpq -c readvar -ntpq -c peers -ntpq -c associations -ntpdc -c monlist -ntpdc -c listpeers -ntpdc -c sysinfo -``` +### 고전 ntpd / ntpq / ntpdc ```bash -nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 +# 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 (대부분의 최신 Linux 배포판에서) + +``cmdallow``가 활성화되면 원격 IP에서 허용되는 모니터링 명령은 극히 일부입니다: +```bash +chronyc -a -n tracking -h +chronyc -a -n sources -v -h +chronyc -a -n sourcestats -h +``` +**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 + +# Explicit monlist check +nmap -sU -p123 --script ntp-monlist +``` +### 대량/인터넷 스캐닝 +```bash +# Check if MONLIST is enabled (zgrab2 module) +zgrab2 ntp --monlist --timeout 3 --output-file monlist.json -f "zmap_results.csv" +``` +--- ## 구성 파일 검사 -- ntp.conf +- ``/etc/ntp.conf`` (ntpd) +- ``/etc/chrony/chrony.conf`` (chrony) +- ``/etc/systemd/timesyncd.conf`` (timesyncd – 클라이언트 전용) -## NTP 증폭 공격 +``restrict`` 라인, ``kod`` (Kiss-o'-Death) 설정, ``disable monitor``/``includefile /etc/ntp/crypto`` 및 *NTS*가 활성화되어 있는지 (``nts enable``) 특별히 주의하십시오. -[**NTP DDoS 공격 작동 방식**](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref) +--- +## 최근 취약점 (2023-2025) -**NTP 프로토콜**은 UDP를 사용하여 TCP와 달리 핸드셰이크 절차 없이 작동할 수 있습니다. 이 특성은 **NTP DDoS 증폭 공격**에서 악용됩니다. 여기서 공격자는 가짜 소스 IP로 패킷을 생성하여 공격 요청이 피해자로부터 오는 것처럼 보이게 합니다. 이러한 패킷은 처음에는 작지만, NTP 서버가 훨씬 더 큰 데이터 양으로 응답하도록 하여 공격을 증폭시킵니다. +| 연도 | CVE | 구성 요소 | 영향 | +|------|-----|-----------|--------| +| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | **ntpq** 응답을 통해 접근 가능한 여러 개의 경계 초과 쓰기. **4.2.8p16**에서 패치 🡒 업그레이드 또는 백포트 수정. citeturn1search1turn1search2turn1search0| +| 2023 | **CVE-2023-33192** | **ntpd-rs** (Rust 구현) | 잘못된 **NTS** 쿠키로 인해 v0.3.3 이전에 원격 **DoS** 발생 – NTS가 **비활성화**된 경우에도 포트 123에 영향을 미침. citeturn4view0| +| 2024 | 배포판 업데이트 | **chrony 4.4 / 4.5** – 여러 보안 강화 및 NTS-KE 수정 (예: SUSE-RU-2024:2022) citeturn2search2| +| 2024 | 기록 DDoS | Cloudflare는 **5.6 Tbps UDP 반사** 공격을 보고 (NTP가 사용된 프로토콜 중 하나). 인터넷에 노출된 호스트에서 *monitor* 및 *monlist*를 비활성화하십시오. citeturn5search0| -_**MONLIST**_ 명령은 드물게 사용되지만, NTP 서비스에 연결된 마지막 600명의 클라이언트를 보고할 수 있습니다. 명령 자체는 간단하지만, 이러한 공격에서의 오용은 중요한 보안 취약점을 강조합니다. +> **익스플로잇 키트**: 2023 ntpq OOB-write 시리즈에 대한 개념 증명 페이로드가 GitHub에 있으며 (Meinberg 작성 참조) 시스템 관리자에 대한 클라이언트 측 피싱을 위해 무기화될 수 있습니다. citeturn1search4 + +--- +## 고급 공격 + +### 1. NTP 증폭 / 반사 + +구식 Mode-7 ``monlist`` 쿼리는 최대 **600개의 호스트 주소**를 반환하며 여전히 수천 개의 인터넷 호스트에 존재합니다. 응답 (428-468 바이트/항목)이 8바이트 요청보다 *~ 200×* 더 크기 때문에 공격자는 세 자리 증폭 계수를 달성할 수 있습니다. 완화 조치: + +- ntp 4.2.8p15+로 업그레이드하고 ``disable monitor``를 **추가**하십시오. +- 엣지에서 UDP/123의 속도를 제한하거나 DDoS 장치에서 *sessions-required*를 활성화하십시오. +- 출처 스푸핑을 차단하기 위해 *BCP 38* 이탈 필터링을 활성화하십시오. + +Cloudflare의 학습 센터 기사를 참조하여 단계별 분석을 확인하십시오. citeturn5search1 + +### 2. 시간 이동 / 지연 공격 (Khronos / Chronos 연구) + +인증이 있더라도, 경로상의 공격자는 패킷을 드롭하거나 지연시켜 클라이언트 시계를 조용히 **이동**시킬 수 있습니다. IETF **Khronos (이전 Chronos) 초안**은 백그라운드에서 다양한 서버를 쿼리하고 결과를 정상 확인하여 𝚡 ms를 초과하는 이동을 감지할 것을 제안합니다. 최신 chrony (4.4+)는 이미 유사한 정상 필터 (``maxdistance`` / ``maxjitter``)를 구현하고 있습니다. citeturn9search1 + +### 3. NTS 남용 및 4460/tcp 노출 + +NTS는 무거운 암호화를 별도의 **TLS 1.3 채널에서 4460/tcp** (``ntske/1``)로 이동합니다. 잘못된 구현 (CVE-2023-33192 참조)은 쿠키를 파싱할 때 충돌하거나 약한 암호를 허용합니다. 펜테스터는: ```bash -ntpdc -n -c monlist +# 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 ``` -## Shodan +자체 서명된 인증서나 만료된 인증서 및 약한 암호화 스위트(비 AEAD)를 찾으십시오. 참조: RFC 8915 §4. citeturn11search0 -- `ntp` +--- +## 강화 / 최선의 현재 관행 (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**를 고려하되, *모든* 하류 클라이언트가 동일한 스미어 윈도우를 사용하도록 하십시오. +5. 도약 초 플래그가 누락되지 않도록 폴링을 ≤24시간으로 유지하십시오. + +포괄적인 체크리스트는 RFC 8633을 참조하십시오. citeturn8search0turn8search1 + +--- +## 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** | 대량 스캔 / monlist 플래그를 포함한 JSON 출력 | 위의 명령 참조 | +| ``chronyd`` with ``allow`` | 펜테스트 실험실에서 악성 NTP 서버 실행 | ``chronyd -q 'server 127.127.1.0 iburst'`` | +| ``BetterCap`` | Wi-Fi에서 시간 이동 MITM을 위한 NTP 패킷 주입 | ``set arp.spoof.targets ; set ntp.time.delta 30s; arp.spoof on`` | + +--- ## HackTricks 자동 명령 ``` -Protocol_Name: NTP #Protocol Abbreviation if there is one. -Port_Number: 123 #Comma separated if there is more than one. -Protocol_Description: Network Time Protocol #Protocol Abbreviation Spelled out +Protocol_Name: NTP +Port_Number: 123 +Protocol_Description: Network Time Protocol Entry_1: Name: Notes @@ -71,4 +166,17 @@ Name: Nmap Description: Enumerate NTP Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 {IP} ``` -{{#include ../banners/hacktricks-training.md}} +--- +## References + +- RFC 8915 – *Network Time Security for the Network Time Protocol* (port 4460) citeturn11search0 +- RFC 8633 – *Network Time Protocol BCP* citeturn8search0 +- Cloudflare DDoS report 2024 Q4 (5.6 Tbps) citeturn5search0 +- Cloudflare *NTP Amplification Attack* article citeturn5search1 +- NTP 4.2.8p15 CVE series 2023-04 citeturn1search4 +- NVD entries **CVE-2023-26551–55**, **CVE-2023-33192** citeturn1search1turn1search2turn1search0turn4view0 +- SUSE chrony security update 2024 (chrony 4.5) citeturn2search2 +- Khronos/Chronos draft (time-shift mitigation) citeturn9search1 +- chronyc manual/examples for remote monitoring citeturn3search0turn10search1 +- zgrab2 ntp module docs citeturn7search0 +{{#include /banners/hacktricks-training.md}}