NTP(네트워크 시간 프로토콜)란?

"자동으로 시간 설정" 옵션 뒤에서 일하는 프로토콜입니다. 시각 차이를 계산하는 식, 스트라텀 계층, 실제 증폭 공격 사례와 대응까지 정리했습니다.

한눈에 보기

NTP는 네트워크로 연결된 기기의 시계를 UTC 기준에 맞추는 프로토콜로, UDP 123번 포트를 사용하고 현재 버전은 RFC 5905(2010)의 NTPv4입니다. 클라이언트는 서버와 네 개의 타임스탬프를 주고받아 "내 시계가 얼마나 어긋났는지(오프셋)"와 "왕복에 걸린 시간(지연)"을 계산합니다. 아래 카드는 개념을 설명하고, 그 뒤에서 계산식과 검산한 예시, 공개 NTP 풀, 실제 증폭 공격 사례, 오해를 이어서 다룹니다.

⏱️

NTP(네트워크 시간 프로토콜)란

인터넷에 연결된 여러 기기의 시계를 하나의 기준 시간에 맞춰 동기화하는 프로토콜로, UDP 123번 포트를 사용합니다.

NTP(Network Time Protocol)는 컴퓨터, 서버, 네트워크 장비 등이 저마다 조금씩 어긋나는 내부 시계를 인터넷상의 정확한 시간 서버와 주기적으로 맞춰볼 수 있도록 해주는 표준 프로토콜입니다. 사람이 손목시계를 라디오 시보에 맞추듯, 기기들이 자동으로 시간 서버에 물어보고 그 답을 바탕으로 스스로 시계를 보정합니다.

❗

시간 동기화가 중요한 이유

HTTPS 인증서 검증, 2단계 인증(OTP), 로그 기록 순서 비교 등 시스템 곳곳이 정확한 시간에 의존하고 있어, 시계가 어긋나면 눈에 띄지 않는 오류로 이어질 수 있습니다.

HTTPS 접속 시 브라우저는 인증서의 유효 기간을 내 기기 시계와 비교해 판단하기 때문에, 시계가 크게 어긋나면 정상적인 사이트인데도 인증서 오류가 뜰 수 있습니다. 마찬가지로 일회용 비밀번호(OTP) 인증 앱은 현재 시각을 기준으로 코드를 생성하므로 서버와 기기의 시간 차이가 크면 인증에 계속 실패하게 됩니다. 여러 서버의 로그를 시간 순서대로 비교해 문제를 추적하는 작업 역시 각 서버의 시계가 맞춰져 있어야 의미가 있습니다.

🪜

스트라텀(Stratum) 계층 구조

원자시계나 GPS 수신기 같은 최상위 기준 시각원을 스트라텀 0으로 두고, 여기에 직접 연결된 서버가 스트라텀 1, 그 서버를 참조하는 다음 서버가 스트라텀 2로 이어지는 계층 구조입니다.

스트라텀 0 장비는 그 자체로는 네트워크에 연결되지 않는 원자시계나 GPS 수신 모듈 같은 기준 시각원을 뜻하며, 이 장비에 직접 연결된 시간 서버가 스트라텀 1이 되어 다른 서버들에게 시간을 제공합니다. 이후 스트라텀 1 서버를 참조하는 서버는 스트라텀 2, 그 서버를 참조하는 서버는 스트라텀 3과 같이 계층을 내려가며, 숫자가 작을수록 기준 시각원에 더 가깝습니다. RFC 5905에서는 패킷의 stratum 값 2~15가 2차 서버, 16이 동기화되지 않은 상태를 뜻합니다. 다만 스트라텀이 낮다고 항상 더 정확하거나 신뢰할 수 있는 것은 아닙니다.

📶

NTP가 오차를 보정하는 방식

클라이언트가 여러 시간 서버에 시각을 물어본 뒤 왕복 지연 시간과 오차를 계산해 이상치를 걸러내고, 시계를 갑자기 튀지 않게 서서히 조정하는 방식으로 정확도를 높입니다.

NTP 클라이언트는 요청을 보낸 시각과 응답을 받은 시각을 비교해 네트워크를 오가는 데 걸린 지연 시간을 추정하고, 이를 감안해 서버가 알려준 시각과 내 시계 사이의 오차(오프셋)를 계산합니다. 여러 서버에서 받은 값 중 유난히 튀는 값은 걸러내고, 시계를 맞출 때도 갑자기 시간을 앞뒤로 점프시키기보다는 조금씩 속도를 조절해 서서히 맞춰가는 방식을 씁니다. 위키백과에 따르면 공용 인터넷에서는 보통 수십 밀리초 이내, 이상적인 LAN에서는 1밀리초 이상의 정확도도 가능하지만 경로가 비대칭이거나 혼잡하면 100밀리초 이상 오차가 날 수도 있습니다.

📱

일상 기기에서 만나는 NTP

컴퓨터와 스마트폰의 "자동으로 날짜와 시간 설정" 옵션이 바로 NTP를 이용해 시계를 맞추는 기능으로, 이 옵션을 꺼두면 시간이 서서히 어긋날 수 있습니다.

윈도우, macOS, 안드로이드, iOS 모두 기본적으로 인터넷을 통해 시간을 자동으로 맞추는 기능을 내장하고 있으며, 이 기능이 바로 NTP를 활용합니다. 만약 이 설정을 꺼두거나 방화벽이 NTP 통신(UDP 123번 포트)을 막고 있다면 기기 내부 시계가 조금씩 어긋나기 시작해, 나중에는 로그인 실패나 인증서 오류 같은 예상치 못한 문제로 이어질 수 있습니다.

⚠️

NTP와 관련된 보안 위험

설정이 허술한 공개 NTP 서버는 공격자가 소량의 요청으로 훨씬 큰 응답을 유도하는 증폭 공격(NTP 증폭 DDoS)에 악용될 수 있어, 접근 범위를 제한하고 최신 소프트웨어를 유지하는 관리가 필요합니다.

NTP 증폭 공격은 공격자가 피해자의 IP로 위조된 요청을 여러 공개 NTP 서버에 보내면, 각 서버가 원래 요청보다 훨씬 큰 응답 데이터를 피해자에게 쏟아붓게 만드는 방식의 디도스 공격입니다. 이 때문에 조직에서 NTP 서버를 직접 운영한다면 불특정 다수의 요청에 응답하지 않도록 접근을 제한하고, 알려진 취약점이 패치된 최신 버전의 NTP 소프트웨어를 유지하는 것이 권장됩니다. 2014년 CISA 경보 TA14-013A는 ntpd 4.2.7 이전 버전의 monlist 기능(CVE-2013-5211)이 이런 공격에 악용된다고 설명하며, 4.2.7 이상으로 업그레이드하거나 ntp.conf의 restrict default 줄에 noquery를 추가하라고 안내했습니다.

NTP의 배경

NTP는 델라웨어 대학의 David L. Mills가 설계했고 1985년 이전부터 운영된 것으로 알려진, 지금도 쓰이는 가장 오래된 인터넷 프로토콜 중 하나입니다(위키백과 기준). 현재의 NTPv4는 2010년 RFC 5905로 규정되었고 NTPv3와 하위 호환됩니다. 1992년에는 같은 패킷 형식과 포트를 쓰되 정교한 필터링·보정 알고리즘을 생략한 간이 버전인 SNTP가 정의되었습니다. 정확도가 중요한 곳에서는 SNTP 소스를 시간 원천으로 삼지 말라는 조언이 있습니다.

오프셋과 지연은 어떻게 계산하나

RFC 5905는 한 번의 요청·응답에서 네 개의 시각을 기록합니다. T1은 클라이언트가 요청을 보낸 시각, T2는 서버가 요청을 받은 시각, T3는 서버가 응답을 보낸 시각, T4는 클라이언트가 응답을 받은 시각입니다. 이때 서버 시계와 내 시계의 차이(오프셋)와 왕복 지연은 다음과 같습니다.

오프셋이 음수이면 내 시계가 서버보다 앞서 있다는 뜻입니다. 아래 예시는 모두 가상 예시이며 단위는 밀리초(ms), 값은 node로 검산했습니다.

상황T1, T2, T3, T4계산 결과
시계가 정확하고 가는 길과 오는 길이 같음(각 40ms, 서버 처리 2ms)1000, 1040, 1042, 1082오프셋 0, 지연 80
내 시계가 500ms 앞섬(편도 20ms, 서버 처리 2ms)1000, 520, 522, 1042오프셋 −500, 지연 40
시계는 정확하지만 가는 길 30ms, 오는 길 50ms로 비대칭(서버 처리 2ms)0, 30, 32, 82오프셋 −10(실제 0), 지연 80

세 번째 행이 핵심입니다. 두 방향의 지연이 같다고 가정하고 계산하기 때문에, 경로가 비대칭이면 시계가 정확해도 오프셋에 오차가 생깁니다. 이 오차는 왕복 지연의 절반(여기서는 40ms)을 넘지 않습니다. 위키백과가 "비대칭 경로와 혼잡으로 100ms 이상의 오차가 생길 수 있다"고 한 이유가 이것입니다.

스트라텀 정리

스트라텀의미
0원자시계·GNSS 같은 기준 시계 (패킷 값 0은 RFC에서 "미지정 또는 무효")
1기준 시계에 직접 연결된 1차 서버(RFC 예: GPS 수신기를 갖춘 서버)
2~15NTP로 상위 서버에 동기화한 2차 서버
16동기화되지 않음

스트라텀 n에 동기화된 서버는 n+1이 됩니다. 숫자는 기준 시계까지의 단계 수일 뿐이어서 품질이나 신뢰성을 그대로 보장하지는 않습니다(위키백과 기준).

실제 사례

사례 1. 2014년 약 400Gbps NTP 증폭 공격 (Cloudflare 보고)

2014년 2월 Cloudflare는 특정 대상을 겨냥한 공격이 최대 400Gbps에 육박했다고 기술 블로그에 공개했습니다. 공격에는 1,298개 네트워크의 NTP 서버 4,529대가 동원되었고 서버당 평균 약 87Mbps를 보냈습니다. 핵심은 NTP의 monlist 명령(최근 접속한 클라이언트 최대 600개의 IP를 돌려주는 기능)이었습니다. 목록이 가득 찼을 때 응답이 요청의 약 206배 크기가 될 수 있어, 위조된 출발지 주소로 작은 요청을 보내면 피해자에게 훨씬 큰 응답이 쏟아집니다. Cloudflare는 공격을 완화했지만 트래픽이 자사 모든 데이터센터에 도달했고 유럽 일부에서 네트워크 혼잡이 있었다고 밝혔으며, 관리자에게 monlist를 끄고 BCP38(출발지 주소 위조 차단)을 적용하라고 권고했습니다. 배울 점은 공격자가 NTP 서버를 해킹한 것이 아니라 열려 있는 기능을 이용했다는 것입니다.

사례 2. CISA 경보 TA14-013A (2014)

미국 CISA(당시 US-CERT)는 2014년 1월 경보에서 NTP 증폭 공격을 설명했습니다. 공개된 NTP 서버에 출발지를 피해자로 위조한 monlist 요청을 보내면 서버의 응답이 피해자에게 가며, 응답은 정상 서버에서 온 합법적 데이터라 걸러내기 어렵다는 내용입니다. 경보는 ntpd 4.2.7 이전 버전이 기본적으로 취약하다고 밝히고, 공개 서버를 4.2.7 이상으로 올리거나 불가능하면 ntp.conf의 restrict default 줄에 noquery를 추가하라고 안내했습니다. 증폭 배수 수치는 경보에 명시되지 않았습니다.

사례 3. NTP 풀 프로젝트 (공개 시간 서버)

pool.ntp.org는 자원봉사자가 제공하는 공개 시간 서버 모음입니다. 0~3.pool.ntp.org 이름은 내 위치에서 가까운 서버 집합을 무작위로 돌려주며 약 한 시간마다 바뀝니다. 풀 운영 측은 사업이나 인명이 정확한 시간에 달린 시스템은 공급업체의 신뢰할 수 있는 시간 서비스를 쓰라고 안내하고, 서버는 최대 4대까지만 설정하며 부하를 늘리는 burst 같은 설정은 피하라고 권합니다. ISP나 가까운 시간 서버가 있으면 그것을 쓰는 편이 낫다는 안내도 있습니다.

직접 확인하고 설정해 보기

흔한 오해와 정정

한계와 앞으로의 과제

NTP는 비대칭 경로 같은 네트워크 조건에 따라 정확도가 달라지며, 인터넷에서는 보통 수십 ms 이내, 이상적인 LAN에서는 1ms 이상의 정확도가 가능하다고 알려져 있습니다. 이보다 더 정밀한 동기화가 필요한 분야에는 별도의 방식이 쓰입니다. 또 NTP 타임스탬프는 1900년 1월 1일을 기준으로 32비트 초를 쓰기 때문에 2036년 2월 7일에 첫 번째 롤오버가 일어납니다(위키백과 기준). 윤초를 처리하는 방식도 환경마다 달라, Google·AWS·Facebook은 24시간에 걸쳐 나눠 조정하는 윤초 스미어링을 쓴다고 알려져 있습니다. 이 글은 일반 정보이며 구체적인 서버 설정은 사용하는 소프트웨어의 공식 문서를 확인하세요.

DDoS 공격이 궁금하다면

NTP 증폭 공격을 포함한 여러 디도스 공격 유형이 궁금하다면 DDoS 공격 종류와 방어 방법 완전정복도 확인해보세요.

함께 읽으면 좋은 가이드

정확한 시간이 왜 인증서 검증에 중요한지 더 알고 싶다면 TLS 핸드셰이크로 알아보는 HTTPS 연결 원리도 참고해보세요. NTP가 쓰는 UDP의 특징은 TCP와 UDP 차이 가이드, 123번 포트 차단 같은 설정은 방화벽 기초 가이드에서 이어 읽을 수 있습니다.

자주 묻는 질문

컴퓨터 시간이 안 맞으면 실제로 어떤 문제가 생기나요?

대표적으로 HTTPS 사이트 접속 시 인증서 오류가 발생하거나, 2단계 인증(OTP) 코드가 계속 틀린 것으로 처리되거나, 여러 서버의 로그를 시간순으로 비교하기 어려워지는 등의 문제가 생길 수 있습니다.

스마트폰도 NTP로 시간을 맞추나요?

네, 대부분의 스마트폰은 설정에서 "네트워크 제공 시간 사용" 같은 옵션을 켜두면 통신사 네트워크나 인터넷을 통해 자동으로 시간을 동기화합니다. 이 옵션을 꺼두면 기기 자체 시계에만 의존하게 되어 시간이 서서히 어긋날 수 있습니다.

NTP와 SNTP는 무엇이 다른가요?

SNTP는 NTP와 같은 패킷 형식과 포트를 쓰지만 NTP의 정교한 필터링·보정 알고리즘을 생략한 간이 버전입니다. 정확도가 중요하다면 SNTP 소스에 동기화하는 것은 권장되지 않습니다(위키백과 기준).

NTP 서버를 여러 개 지정하는 이유는 무엇인가요?

여러 서버의 응답을 비교하면 유난히 튀는 값을 걸러낼 수 있기 때문입니다. 다만 풀 운영 측은 서버를 4대 이하로 쓰라고 권고합니다.

방화벽에서 UDP 123번을 막으면 어떻게 되나요?

NTP 응답이 오지 않아 시간 동기화가 실패하고 시계가 서서히 어긋날 수 있습니다. 내부 시간 서버만 허용하는 식으로 필요한 통신만 열어 두는 것이 일반적인 접근입니다.