002. Linux 서버 보안 — 보안 설정 기준선(Baseline) 만들기

changseop lee·6일 전

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

선행 학습

1. 개념

기준선(Baseline) 은 "이 서버의 정상 상태는 이것이다"라고 합의해 둔 스냅샷입니다. 계정 목록, 활성 서비스, 리스닝 포트, 중요 설정 파일의 해시, 커널 파라미터 등을 같은 형식으로 반복 수집해 두면 이후 상태와 비교(diff)할 수 있습니다.

[ 최초 점검 ] → [ 검토·승인 ] → [ 기준선 저장(읽기 전용 + 해시) ]
                                          ↓
[ 정기 재수집 ] ──────── diff ────────→ [ 차이 발생 ]
                                          ↓
                         변경관리 티켓 있음? ── 예 → 기준선 갱신
                                          └─ 아니오 → 이상 징후로 분석

2. 왜 중요한가

  • SOC에서 가장 어려운 질문은 "이게 원래 그랬나?"입니다. 기준선이 없으면 정상과 비정상을 판단할 근거가 없습니다.
  • 침해 분석 시 "언제부터 바뀌었는가"를 좁히는 데 기준선의 수집 시각이 그대로 증거가 됩니다.
  • 기준선 자체가 변조되면 의미가 없으므로 저장 위치 권한과 해시 보관까지 설계해야 합니다.

3. 핵심 명령어 / 설정

수집 항목명령어비교 시 주의
계정getent passwd | cut -d: -f1,3,7서비스 계정 추가는 패키지 설치와 연결
활성 유닛systemctl list-unit-files --state=enabled --no-legend업데이트 후 이름 변경 가능
리스닝 포트ss -tulpnH | awk '{print $1,$5}'임시 포트(ephemeral) 제외
설정 해시sha256sum /etc/ssh/sshd_config /etc/sudoers정상 변경 시 갱신
커널 파라미터sysctl -a 2>/dev/null | sort값이 자주 변하는 항목 제외

4. 실습 (실습 예시)

# 기준선 수집 (날짜별 디렉터리)
D=/root/baseline/$(date +%F)
sudo install -d -m 700 "$D"
sudo sh -c "getent passwd | cut -d: -f1,3,7 | sort > $D/accounts.txt"
sudo sh -c "systemctl list-unit-files --state=enabled --no-legend | awk '{print \$1}' | sort > $D/units.txt"
sudo sh -c "ss -tulpnH | awk '{print \$1, \$5}' | sort -u > $D/listen.txt"
sudo sh -c "sha256sum /etc/passwd /etc/group /etc/sudoers /etc/ssh/sshd_config > $D/conf.sha256"
# 기준선 자체의 무결성 기록
sudo sh -c "cd $D && sha256sum *.txt conf.sha256 > MANIFEST.sha256 && chmod 400 *"

# 일주일 뒤 재수집한 결과와 비교
sudo diff /root/baseline/2026-10-01/listen.txt /root/baseline/2026-10-08/listen.txt

5. 정상 상태

$ sudo diff 2026-10-01/listen.txt 2026-10-08/listen.txt
$ echo $?
0
$ sudo sha256sum -c 2026-10-01/conf.sha256
/etc/passwd: OK
/etc/group: OK
/etc/sudoers: OK
/etc/ssh/sshd_config: OK

차이가 없거나, 차이가 있더라도 변경관리 티켓으로 설명 가능한 상태가 정상입니다.

6. 이상 상태

$ sudo diff 2026-10-01/listen.txt 2026-10-08/listen.txt
> tcp 0.0.0.0:8081
$ sudo sha256sum -c 2026-10-01/conf.sha256
/etc/passwd: FAILED
/etc/ssh/sshd_config: FAILED
  • 승인 없이 8081 리스너가 추가됨 → 비인가 서비스 가능성
  • /etc/passwd와 sshd_config가 같은 기간에 변경됨 → 계정 추가 + 접속 정책 완화를 함께 의심
  • MANIFEST.sha256 검증이 실패하면 기준선 자체가 변조된 것이므로 서버 외부 사본으로 비교해야 합니다.

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

기준선 diff는 "무엇이 바뀌었는지"만 알려줍니다. "누가 언제" 바꿨는지는 로그로 확인합니다(가상의 예시 로그).

type=SYSCALL msg=audit(1759712400.112:812): arch=c000003e syscall=257 success=yes exit=3 ppid=2420 pid=2433 auid=1001 uid=0 comm="vi" exe="/usr/bin/vi" key="sshd_config"
type=PATH msg=audit(1759712400.112:812): item=0 name="/etc/ssh/sshd_config" inode=67144821 nametype=NORMAL
필드의미
auid=1001최초 로그인 사용자(sudo 후에도 유지)
uid=0실행 시점 권한(root)
comm/exe수정에 사용된 프로그램
keyauditd 규칙에 붙인 태그

audit(1759712400.112:812)의 앞부분은 Unix epoch 시간이며 ausearch -i로 사람이 읽는 시간으로 변환됩니다.

8. SOC 관제 포인트

  • 기준선 diff 결과를 일일 리포트로 받고, 차이 항목마다 변경관리 티켓 번호를 매칭합니다.
  • 차이가 여러 축(계정 + 포트 + 설정)에서 같은 시간대에 발생하면 우선순위를 올립니다.
  • 기준선은 서버 내부뿐 아니라 SIEM/별도 저장소에도 사본을 둬야 공격자가 함께 지울 수 없습니다.

9. 탐지 규칙

Wazuh의 command 모니터링으로 리스닝 포트 목록을 주기적으로 수집하고, 출력이 바뀌면 Alert를 받을 수 있습니다.

<!-- agent ossec.conf (예시): 6분마다 리스닝 포트 수집 -->
<localfile>
  <log_format>full_command</log_format>
  <command>ss -tulpnH | awk '{print $1, $5}' | sort -u</command>
  <alias>listen-baseline</alias>
  <frequency>360</frequency>
</localfile>

Wazuh 기본 룰셋의 533(netstat listening ports changed)은 같은 원리로 netstat 출력 변화를 탐지합니다. 명령 출력 비교 룰은 출력 형식이 동일해야 하므로 정렬(sort)·필드 고정이 중요합니다.

10. 대응 방법

  1. 초기 확인 — diff 결과의 차이 항목을 목록화하고 변경관리 티켓과 대조합니다.
  2. 범위 확인 — 같은 기간 다른 축(계정·설정·서비스)의 변화가 있는지 함께 확인합니다.
  3. 증거 확보 — 당시 기준선 파일과 현재 상태 파일, 관련 audit 로그를 해시와 함께 보존합니다.
  4. 차단/조치 — 비인가 변경은 원복하되, 원복 전에 증거 사본을 먼저 확보합니다.
  5. 재발 방지 — 기준선 저장소를 서버 외부로 분리하고 수집을 자동화합니다.

11. 핵심 정리

구분핵심 내용
기준선합의된 정상 상태의 스냅샷
수집 원칙같은 명령·같은 형식·정렬된 출력
보호읽기 전용 + MANIFEST 해시 + 외부 사본
분석diff로 "무엇", 로그로 "누가·언제"
면접 포인트"정상을 정의해야 비정상을 탐지할 수 있다"

12. 다음 편 예고

다음 편 003. Linux 서버 보안 — 사용자·그룹 설정 점검 — UID 0과 빈 패스워드 에서는 기준선의 첫 축인 계정 설정을 점검하며 UID 0 중복과 빈 패스워드 계정을 찾는 방법을 다룹니다.


이전 편: 001. Linux 서버 보안 — 기본 보안 점검 항목과 하드닝 로드맵
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글