시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 40/50편 (전체 440/450)
학습 단계: SOC 탐지 연계
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
기준선과 인벤토리는 한 번 만들 때보다 매일 자동으로 비교될 때 가치가 큽니다. 실시간 감사 룰이 놓친 지속성도 정기 diff에서는 "결과"로 드러나기 때문입니다.
정기 diff 자동화 구조
[timer: 매일 04:10] 인벤토리 수집(읽기 전용)
↓
[diff] 승인 기준선 vs 오늘 인벤토리
↓
[출력] 추가/변경/삭제 항목 → logger -t persist-diff
↓
[Wazuh] 수집 → 룰 매칭 → Alert
↓
[승인 반영] 티켓 확인된 항목만 기준선 갱신
핵심: 실시간 감사(행위) + 정기 diff(결과) = 이중 안전망
실시간 감사는 감사 규칙이 꺼졌거나 감시 경로에 없던 위치의 변경을 놓칠 수 있습니다. 정기 diff는 결과 상태를 비교하므로 그런 공백을 메웁니다.
| 구성 | 방법 | 주의 |
|---|---|---|
| 실행 | systemd timer / Wazuh command | 읽기 전용 |
| 비교 | diff / comm | 정렬·정규화 |
| 출력 | logger -t persist-diff | 한 줄 한 항목 |
| 기준선 | 승인 시에만 갱신 | 갱신 이력 보관 |
| 무결성 | 기준선 파일 해시 별도 보관 | 기준선 변조 대비 |
# 정기 diff 스크립트 핵심부 (분석 방법)
BASE=/var/lib/persist/baseline.tsv; NOW=/var/lib/persist/today.tsv
/usr/local/sbin/persist-inventory > "$NOW" # I39 인벤토리(위치·소유·해시)
comm -13 <(cut -f1-5 "$BASE" | sort) <(cut -f1-5 "$NOW" | sort) | while IFS= read -r l; do
logger -t persist-diff "ADD $l"; done
comm -23 <(cut -f1-5 "$BASE" | sort) <(cut -f1-5 "$NOW" | sort) | while IFS= read -r l; do
logger -t persist-diff "DEL $l"; done
# systemd timer 예: OnCalendar=*-*-* 04:10:00, Persistent=true
persist-diff: (출력 없음)
기준선 갱신 이력: 10-02 dnf update(CHG-1090) 반영
정기 diff에서 차이가 없거나, 차이가 승인된 변경으로 확인되어 기준선에 반영된 이력이 남는 상태가 정상입니다.
persist-diff: ADD 부팅 boot /etc/udev/rules.d/75-net-tune.rules 미소유 9e1f..
(같은 시간대 실시간 감사 Alert 없음 — udev 경로가 감사 규칙에 없었음)
정기 diff 운영 흐름입니다(가상의 예시).
[매일 diff] ADD / DEL / CHANGE
↓
[실시간 Alert 대조] 같은 항목의 감사 Alert 있음?
├─ 있음 → 기존 인시던트에 병합
└─ 없음 → 감사 공백 → 감사 규칙 보강 티켓
↓
[판정] 승인 → 기준선 갱신 / 미승인 → 조사
| diff | 의미 |
|---|---|
| ADD | 신규 지속성 후보 |
| DEL | 정리 또는 흔적 제거 |
| CHANGE(해시) | 내용 변조 |
정기 diff의 ADD 중 실시간 Alert가 없던 항목은 "탐지 공백"의 증거이므로, 판정과 별개로 감사·룰 개선 항목으로 관리합니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
<rule id="108390" level="11">
<decoded_as>syslog</decoded_as>
<program_name>persist-diff</program_name>
<match type="pcre2">^(ADD|CHANGE) </match>
<description>지속성 정기 diff에서 신규·변경 항목 발견</description>
<mitre><id>TA0003</id></mitre>
</rule>
</group>
정기 diff 결과를 syslog로 받는 룰입니다. auditd 상위 룰과 무관한 독립 룰이며, 스크립트 미실행 감지는 Wazuh 에이전트의 명령 모니터링 결과 부재로 별도 구성합니다.
| 요소 | 기준 |
|---|---|
| 주기 | 매일(Persistent=true) |
| 출력 | logger 한 줄 한 항목 |
| 갱신 | 승인 시에만 |
| 효과 | 감사 공백 보완 |
| 면접 포인트 | "실시간 감사는 행위를, 정기 diff는 결과를 본다 — 둘이 서로의 공백을 메운다" |
다음 편 441. 지속성·재침투 — 지속성·재침투 타임라인 작성 에서는 침투→권한 상승→지속성 설치→재침투까지의 이벤트를 하나의 타임라인으로 엮어 설치 순서·재생성 관계·재침투 시점을 재구성하는 방법을 다룹니다.
이전 편: 439. 지속성·재침투 — 지속성 인벤토리(전수 점검) 작성
📚 시리즈 전체 보기: 시스템 보안 · 취약점