037. Linux 서버 보안 — 설정 드리프트(Drift)와 취약 설정 탐지

changseop lee·6일 전

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

선행 학습

1. 개념

설정 드리프트(configuration drift) 는 서버가 정해 둔 기대 상태에서 조금씩 멀어지는 현상입니다. 001~036편에서 만든 하드닝도 시간이 지나면 다양한 이유로 무너집니다.

기대 상태 (하드닝 완료, 기준선 저장)
    │
    ├─ ① 운영 변경   : 장애 대응 중 임시 완화 후 원복 누락 (예: setenforce 0)
    ├─ ② 패키지 변경 : 업데이트가 설정 파일을 덮어쓰거나 .rpmnew 생성
    ├─ ③ 신규 배포   : 표준 이미지가 아닌 수동 설치 서버
    └─ ④ 침해        : 공격자가 의도적으로 설정 완화
    ↓
현재 상태  ── 차이(drift) ──→ "어떤 원인인가?" 를 분류하는 것이 분석의 핵심

이 단계(3단계 · 이상 징후)부터는 "설정이 맞는가"가 아니라 "설정이 왜 바뀌었는가" 를 판단합니다.

2. 왜 중요한가

  • 대부분의 드리프트는 ①~③의 운영 원인이지만, ④ 침해에 의한 드리프트도 겉모습은 똑같습니다. 원인 분류 없이 모두 "원복"만 하면 침해를 놓칩니다.
  • 드리프트가 쌓인 서버는 점검 결과가 매번 달라 관제 신뢰도가 떨어집니다. 원인별로 처리 절차를 나누면 오탐을 줄일 수 있습니다.
  • 정보보안 진단(취약점 점검) 결과의 "양호 → 취약" 변화도 드리프트의 한 형태입니다.

3. 핵심 명령어 / 설정

드리프트 원인판별 단서처리
① 운영 변경변경관리 티켓, 관리자 세션, 업무 시간원복 일정 확인
② 패키지 변경같은 시각 dnf/apt 로그, .rpmnew/.dpkg-dist 파일설정 병합
③ 비표준 배포서버 생성 시점부터 차이, 여러 항목 동시 불일치표준 이미지로 정비
④ 침해티켓 없음, 업무 외 시간, 여러 축 동시 완화, 서비스 계정 관여사고 분석 절차
점검 명령용도
find /etc -name '*.rpmnew' -o -name '*.rpmsave' -o -name '*.dpkg-dist' -o -name '*.dpkg-old'패키지 업데이트로 생긴 설정 사본
diff -r 기준선 현재수집 항목별 차이
ansible-playbook site.yml --check --diff구성 관리 도구의 "적용 시 바뀔 내용"(드리프트) 미리보기

4. 실습 (실습 예시)

# 1) 기준선 재수집 후 차이 요약 (002편 수집 스크립트 재사용 가정)
B=/root/baseline/2026-10-01; N=/root/baseline/$(date +%F)
for f in accounts.txt units.txt listen.txt; do
  echo "== $f"; diff "$B/$f" "$N/$f" | grep '^[<>]'
done
sha256sum -c "$B/conf.sha256" 2>/dev/null | grep -v ': OK$'

# 2) 패키지 원인 드리프트 단서
sudo find /etc \( -name '*.rpmnew' -o -name '*.rpmsave' -o -name '*.dpkg-dist' \) -printf '%TY-%Tm-%Td %p\n'

# 3) 변경 시각을 패키지 이력과 비교
stat -c '%y %n' /etc/ssh/sshd_config
sudo dnf history list | head -5         # Ubuntu: grep Start-Date /var/log/apt/history.log | tail

5. 정상 상태

== listen.txt
> tcp 0.0.0.0:443 httpd
/etc/httpd/conf/httpd.conf: FAILED
$ sudo find /etc -name '*.rpmnew' ...
$ sudo dnf history list | head -3
25 | install mod_ssl | 2026-10-02 14:00 | Install | 3

443 포트 추가와 httpd 설정 변경이 mod_ssl 설치(변경관리 CHG-2026-1002) 시각과 일치 → ① 운영 변경으로 분류, 기준선 갱신 대상입니다.

6. 이상 상태

== accounts.txt
> sysbak:0:/bin/bash
== listen.txt
> tcp 0.0.0.0:8081 python3
/etc/ssh/sshd_config.d (신규 00-tmp.conf)
SELinux: Enforcing → Permissive
$ sudo dnf history list | head -2
22 | install nmap gcc socat | 2026-10-01 02:40 | Install | 9
  • 계정·네트워크·인증·MAC 네 축이 같은 새벽 시간대에 동시 완화
  • 해당 시각 변경관리 기록 없음, 설치 패키지도 역할과 무관 → ④ 침해 드리프트로 분류

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

드리프트 원인 분류에는 "변경 시각"을 축으로 여러 로그를 나란히 놓는 방식이 효과적입니다(가상의 예시 정리).

시각       출처                  이벤트
02:13:05   audit(sshd_config)    00-tmp.conf 생성 (auid=1002)
02:14:09   secure(useradd)       sysbak UID=0 생성
02:16:00   audit(priv_conf)      sudoers.d/99-sysupdate 생성
02:40:15   dnf.rpm.log           nmap, socat 설치
03:20:05   journal               재부팅 (journal volatile 전환 후)
──────────────────────────────────────────────────────────
공통점: 같은 auid(1002 = devops), 업무 외 시간, 변경관리 기록 없음

드리프트 항목 하나하나는 Low 레벨이라도, 같은 사용자·같은 시간대로 묶이면 하나의 사고(Incident)로 격상됩니다. 이 묶는 작업이 5단계(SOC 연계)의 correlation으로 이어집니다.

8. SOC 관제 포인트

  • 드리프트를 발견하면 즉시 원복하기 전에 원인 분류(①~④) 를 먼저 기록합니다.
  • 패키지 원인 드리프트는 .rpmnew/.dpkg-dist와 패키지 로그로 빠르게 정상 처리합니다.
  • 여러 축의 동시 드리프트는 단일 항목보다 우선순위를 높입니다.

9. 탐지 규칙

<!-- 같은 에이전트에서 10분 내 서로 다른 하드닝 관련 룰이 3건 이상 → 상향 -->
<rule id="100430" level="13" frequency="3" timeframe="600">
  <if_matched_group>hardening_drift</if_matched_group>
  <same_location />
  <description>짧은 시간 내 다수 하드닝 설정 완화(설정 드리프트 집중)</description>
</rule>

이 룰이 동작하려면 앞선 편의 개별 룰(SELinux 해제, sshd drop-in, UID 0 생성 등)에 공통 그룹 hardening_drift를 추가해야 합니다. 047편에서 룰 모음을 정리하며 그룹 체계를 맞춥니다.

10. 대응 방법

  1. 초기 확인 — 드리프트 항목별로 변경 시각·주체·변경관리 기록을 확인해 원인(①~④)을 분류합니다.
  2. 범위 확인 — 같은 원인·같은 시각대의 다른 서버 드리프트를 확인합니다.
  3. 증거 확보 — 분류 결과와 근거(로그, 기준선 diff, 패키지 이력)를 함께 기록합니다.
  4. 차단/조치 — ①~③은 원복 또는 기준선 갱신, ④는 사고 대응 절차로 전환합니다.
  5. 재발 방지 — 드리프트 원인 분류표를 운영 절차에 넣고 다중 축 동시 변경 룰을 운영합니다.

11. 핵심 정리

원인판별 단서
운영 변경변경관리 티켓, 업무 시간, 관리자 세션
패키지 변경dnf/apt 로그 시각 일치, .rpmnew/.dpkg-dist
비표준 배포생성 시점부터 다수 항목 불일치
침해티켓 없음, 업무 외 시간, 여러 축 동시 완화
면접 포인트"원복 전에 원인 분류 — 침해 드리프트는 겉모습이 같다"

12. 다음 편 예고

다음 편 038. Linux 서버 보안 — 설정 변경 추적 — auditd와 기준선 diff 에서는 드리프트의 "누가·언제"를 확정하는 설정 변경 추적(auditd + 기준선 diff) 을 다룹니다.


이전 편: 036. Linux 서버 보안 — 커널 모듈·USB 저장장치 제한
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글