032. Linux 서버 보안 — NTP(chrony) 시간 동기화 보안

changseop lee·5일 전

시스템 보안 · 취약점 › A. Linux 서버 보안 설정 · 32/50편 (전체 032/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

SOC 분석은 결국 여러 서버·장비의 로그를 시간순으로 이어 붙이는 작업입니다. 서버 시간이 틀리면 방화벽 로그와 서버 로그의 순서가 뒤바뀌어 잘못된 결론을 내리게 됩니다.

방화벽 로그  10:00:05  192.168.56.77 → 서버:22 허용
서버 로그    09:57:40  Accepted password for admin1 from 192.168.56.77   ← 서버 시계가 2분 25초 느림
                         ↓
   시간 보정 없이 보면 "로그인이 접속보다 먼저 발생"하는 모순

chrony는 Rocky 9과 Ubuntu 22.04(설치 시)에서 쓰는 NTP 구현입니다. Ubuntu 기본은 systemd-timesyncd일 수 있으므로 어떤 동기화 서비스가 실제로 동작 중인지 먼저 확인합니다.

2. 왜 중요한가

  • 시간이 어긋난 서버의 로그는 SIEM correlation 룰(예: "실패 5회 후 성공")에서 순서가 틀어져 탐지 누락을 만들 수 있습니다.
  • 공격자가 시간을 과거로 되돌리면 이후 생성되는 로그·파일 시각이 조작되어 타임라인 분석을 방해합니다(G영역 「로그 변조 의심」의 timestamp 이상과 연결).
  • 서버가 allow 설정으로 NTP 서버 역할까지 하면 불필요한 UDP 123 포트가 열립니다.

3. 핵심 명령어 / 설정

명령용도
timedatectl동기화 여부(System clock synchronized), 시간대
chronyc tracking기준 소스, 오차(System time, Last offset)
chronyc sources -v시간 소스 목록과 상태(* 선택됨)
grep -E '^(server|pool|allow|makestep)' /etc/chrony.conf설정 확인(Ubuntu: /etc/chrony/chrony.conf)
ausearch -k time_change -i시간 변경 시스템 콜 기록(030편 규칙)

4. 실습 (실습 예시)

# 1) 동기화 상태
timedatectl
chronyc tracking | grep -E 'Reference ID|System time|Last offset|Leap status'
chronyc sources -v | tail -5

# 2) 설정 점검: 내부 NTP 서버 사용, 서버 역할(allow) 없음
sudo grep -E '^(server|pool|allow|makestep)' /etc/chrony.conf

# 3) 시간 변경 감사 규칙 확인 (030편 time_change)
sudo auditctl -l | grep time_change

makestep 1.0 3은 "시작 후 3회까지는 1초 이상 차이 나면 즉시 맞춤(step)"이라는 뜻입니다. 이후에는 천천히 보정(slew)하므로, 운영 중 큰 step은 비정상 이벤트입니다.

5. 정상 상태

$ timedatectl | grep -E 'synchronized|NTP service'
System clock synchronized: yes
              NTP service: active
$ chronyc tracking | grep -E 'Reference ID|System time'
Reference ID    : C0A83801 (192.168.56.1)
System time     : 0.000012345 seconds slow of NTP time

내부 시간 서버를 기준으로 수 밀리초 이내 오차를 유지하는 상태가 정상입니다.

6. 이상 상태

$ timedatectl | grep -E 'synchronized|NTP service'
System clock synchronized: no
              NTP service: inactive
$ date
Wed Sep 30 23:10:02 KST 2026        ← 실제 시각은 10월 1일 03:25
  • 동기화 서비스가 꺼지고 시스템 시간이 약 4시간 과거로 이동
  • 이후 생성된 로그·파일은 모두 과거 시각으로 기록되어 타임라인이 왜곡됩니다. 원격 수집 서버의 수신 시각과 비교하면 차이를 드러낼 수 있습니다.

7. 로그 분석 (분석 방법)

시간 조작 흔적은 시간 변경 직전·직후의 로그 시각 역전으로도 보입니다(가상의 예시 로그).

Oct  1 03:24:58 rocky9-web01 sudo[9301]:  admin1 : TTY=pts/1 ; PWD=/root ; USER=root ; COMMAND=/usr/bin/systemctl stop chronyd
Oct  1 03:25:03 rocky9-web01 sudo[9310]:  admin1 : TTY=pts/1 ; PWD=/root ; USER=root ; COMMAND=/usr/bin/date -s 2026-09-30 23:10:00
Sep 30 23:10:00 rocky9-web01 systemd[1]: Time has been changed
type=SYSCALL msg=audit(1759241400.002:2601): arch=c000003e syscall=227 success=yes auid=1002 uid=0 comm="date" exe="/usr/bin/date" key="time_change"
관찰해석
chronyd 중지 직후 date -s동기화를 끄고 수동으로 시간 변경
로그 시각 역전(10/01 03:25 → 09/30 23:10)파일 내 시간 순서가 뒤집힘 = 조작 신호
systemd: Time has been changed시스템 시간 점프 감지 메시지
syscall=227clock_settime

8. SOC 관제 포인트

  • System clock synchronized: no 서버를 정기 점검으로 찾아냅니다.
  • 로그 파일 안의 시간 역전과 SIEM의 수신 시각 vs 이벤트 시각 차이를 지표로 사용합니다.
  • chronyd/timesyncd 중지, date -s, timedatectl set-time 실행은 하드닝 해제로 분류합니다.

9. 탐지 규칙

<group name="local,time,">
  <rule id="100380" level="10">
    <if_group>audit</if_group>
    <field name="audit.key">time_change</field>
    <description>시스템 시간 변경 시스템 콜</description>
  </rule>
  <rule id="100381" level="8">
    <match>Time has been changed</match>
    <description>시스템 시간 점프 발생</description>
  </rule>
</group>

Elasticsearch에서는 이벤트 시각(timestamp)과 수집 시각(Wazuh의 @timestamp 또는 ingest 시각)의 차이를 계산해 일정 값 이상 벌어진 호스트를 찾는 방식으로 시간 조작·동기화 장애를 함께 탐지할 수 있습니다.

10. 대응 방법

  1. 초기 확인 — 현재 시간 오차, 동기화 서비스 상태, 시간 변경 명령 실행 기록을 확인합니다.
  2. 범위 확인 — 시간이 틀어진 구간에 기록된 로그·파일을 식별하고 다른 장비 로그와 시각 차이를 계산합니다.
  3. 증거 확보 — 로컬 로그와 원격 수집 서버의 수신 시각 기록을 함께 보존합니다.
  4. 차단/조치 — chronyd를 재기동해 시간을 복구하고, 왜곡 구간 분석 시 보정값을 문서화합니다.
  5. 재발 방지 — 동기화 상태 점검과 시간 변경 탐지 룰을 운영하고 내부 NTP 소스를 표준화합니다.

11. 핵심 정리

구분핵심 내용
중요성다중 로그 타임라인·correlation의 전제
점검 명령timedatectl, chronyc tracking/sources
정상synchronized: yes, 밀리초 단위 오차
조작 흔적동기화 중지 + date -s, 로그 시각 역전, time_change 키
면접 포인트"이벤트 시각과 수신 시각을 비교해 시간 조작을 드러낸다"

12. 다음 편 예고

다음 편 033. Linux 서버 보안 — DNS 리졸버·hosts 파일 보안 에서는 이름 해석을 조작할 수 있는 DNS 리졸버·hosts 파일 보안을 점검합니다.


이전 편: 031. Linux 서버 보안 — auditd 규칙 점검과 불변 모드
📚 시리즈 전체 보기: 시스템 보안 · 취약점

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글