시스템 보안 · 취약점 › A. Linux 서버 보안 설정 · 32/50편 (전체 032/450)
학습 단계: 2단계 · 설정 및 점검
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
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일 수 있으므로 어떤 동기화 서비스가 실제로 동작 중인지 먼저 확인합니다.
allow 설정으로 NTP 서버 역할까지 하면 불필요한 UDP 123 포트가 열립니다.| 명령 | 용도 |
|---|---|
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편 규칙) |
# 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은 비정상 이벤트입니다.
$ 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
내부 시간 서버를 기준으로 수 밀리초 이내 오차를 유지하는 상태가 정상입니다.
$ 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
시간 조작 흔적은 시간 변경 직전·직후의 로그 시각 역전으로도 보입니다(가상의 예시 로그).
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=227 | clock_settime |
System clock synchronized: no 서버를 정기 점검으로 찾아냅니다.date -s, timedatectl set-time 실행은 하드닝 해제로 분류합니다.<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 시각)의 차이를 계산해 일정 값 이상 벌어진 호스트를 찾는 방식으로 시간 조작·동기화 장애를 함께 탐지할 수 있습니다.
| 구분 | 핵심 내용 |
|---|---|
| 중요성 | 다중 로그 타임라인·correlation의 전제 |
| 점검 명령 | timedatectl, chronyc tracking/sources |
| 정상 | synchronized: yes, 밀리초 단위 오차 |
| 조작 흔적 | 동기화 중지 + date -s, 로그 시각 역전, time_change 키 |
| 면접 포인트 | "이벤트 시각과 수신 시각을 비교해 시간 조작을 드러낸다" |
다음 편 033. Linux 서버 보안 — DNS 리졸버·hosts 파일 보안 에서는 이름 해석을 조작할 수 있는 DNS 리졸버·hosts 파일 보안을 점검합니다.
이전 편: 031. Linux 서버 보안 — auditd 규칙 점검과 불변 모드
📚 시리즈 전체 보기: 시스템 보안 · 취약점