유명 CDN 업체인 클라우드플레어에서 1.1.1.1 DNS 서비스에 이어 시간 서버 서비스도 개시하였습니다. 이 서비스에서는 NTP뿐만이 아니라 최근에 나온 몇몇 다른 시간 프로토콜 또한 지원합니다.
컴퓨터에서 시간을 자동으로 동기화할 때는 보통 NTP(Network Time Protocol)를 사용합니다. 이 프로토콜은 1985년에 미국 델라웨어대학교의 데이비드 밀스 교수가 처음 개발한 것인데, 당시에는 네트워크의 보안 문제가 지금처럼 중요하게 다뤄지지 않았지요. 이 프로토콜의 설계 목표는 [패킷 네트워크상의 지연을 고려하여 최대한 정확한 시간을 받아오는 것]과 [서버의 부담을 분산하는 것]인데, 정확한 시간을 받는 것은 클라이언트와 서버가 통신할 때 주고받는 데이터마다 타임스탬프를 추가하여 지연시간이 얼마인지를 알아내는 방법으로 달성하였고 서버의 부담을 분산하는 것은 시간 서버에 계층 구조를 두어 사용자가 상위 서버가 아닌 하위 서버에서 시간을 받아오게끔 하는 방식으로 달성하였습니다.
NTP에서 패킷 네트워크상의 시간 지연을 계산하는 방법
NTP 시간 서버의 계층 구조
근데 여기에는 보안 관련 목표는 전혀 없었기 때문에, 잊을 만하면 NTP 관련 보안 문제가 터지곤 합니다. 예를 들면 지난 2014년 2월 클라우드플레어는 400 Gbps 규모의 역대급 DDoS 공격을 받았는데, 이는 NTP 프로토콜의 잘 쓰이지 않는 기능을 악용하여 소량의 트래픽을 엄청나게 부풀리는 방식으로 이루어졌다고 합니다. 이를 NTP 증폭 공격이라고 합니다. 이외에도 해커가 악의적인 목적으로 시간을 엉터리로 변조할 수 있는 등의 문제점이 발견된 적이 있습니다.
NTP 증폭 공격의 모식도
해커에 의한 시간 변조 공격
이러한 문제점들 때문에 보안 기능을 강화한 시간 프로토콜들이 여럿 제안되어 있는데, 클라우드플레어에서는 그 중 NTS(Network Time Security)와 Roughtime이라는 것을 베타 버전으로 지원한다고 합니다. NTS는 NTP에 TLS를 추가한 것으로, HTTP에 TLS를 추가하여 HTTPS로 사용하는 것과 유사한 듯 합니다. 현재는 규격 초안이 나온 단계. Roughtime은 구글에서 제안한 시간 프로토콜로, 실제 사용자들의 컴퓨터에서 밀리초 단위의 시간 정확도가 굳이 필요한 것은 아니라는 점에 착안하여 시간 정확도를 조금 희생한 대신 구조적으로 훨씬 단순하고 보안상 믿을 수 있게 설계되어 있다고 합니다. 이 두 프로토콜은 현재로서는 운영체제 등에서 기본적으로 지원하지 않기 때문에, 사용하려면 별도의 클라이언트 프로그램이 필요합니다.
아, 물론 클라우드플레어의 시간 서버에서는 NTP 서비스도 제공합니다. 어쨌거나 지금은 이게 각 운영체제에 내장된 기본 시간 프로토콜이니까요. 각 운영체제의 시간 설정에서 시간 서버를 time.cloudflare.com
으로 바꾸기만 하면 전세계 180여곳에 있는 클라우드플레어의 서버 중 가장 가까운 시간 서버를 찾아 자동으로 시간을 맞춰줍니다. 윈도우에서는 제어판의 [날짜 및 시간] -> [인터넷 시간] -> [설정 변경]에서 시간 서버를 설정할 수 있고, macOS에서는 시스템 환경설정의 [날짜 및 시간]에서 좌하단의 자물쇠를 풀고 시간 서버를 설정해주면 됩니다. 물론 두 OS 모두 이 설정을 사용한다고 체크 표시를 해둬야겠지요. 기본값은 켜져 있는 것이니, 대개는 건드리지 않아도 되겠습니다만…