439. 지속성·재침투 — 지속성 인벤토리(전수 점검) 작성

changseop lee·4일 전

시스템 보안 · 취약점

목록 보기
439/450

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

선행 학습

1. 개념

지속성 탐지의 결론은 결국 "이 서버에 자동 실행·접근 장치가 몇 개, 무엇이 있는가"라는 목록입니다. 이 목록을 지속성 인벤토리라고 하며, 사고 대응 초기에 반드시 만들어야 하는 산출물입니다.

지속성 인벤토리 구조
 host | 분류 | 위치 | 항목 | 실행 대상 | 소유(패키지) | 해시 | 수정 시각
 ─────┼──────┼──────┼──────┼───────────┼─────────────┼──────┼─────────
 web01| 스케줄 | /var/spool/cron/apache | */5 curl|bash | - | 미소유 | ... | 10-08 03:00
 web01| 서비스 | dbus-helper.service | ExecStart | /usr/lib/.x/agent | 미소유 | ... | 10-08 03:02
   ↓
 정렬 기준: 미소유 → 수정 시각(침투 이후) → 실행 대상 경로

핵심: 인벤토리는 "근절 체크리스트"이자 "근절 검증 기준"

인벤토리를 근절 전후로 두 번 만들어 비교하면, 근절이 실제로 무엇을 지웠고 무엇이 남았는지 객관적으로 확인할 수 있습니다.

2. 왜 중요한가

  • 대응자마다 점검 위치가 달라지는 것을 막고 누락을 줄입니다.
  • 수정 시각으로 정렬하면 침투 이후 생긴 항목이 바로 드러납니다.
  • 근절 전후 비교로 근절 완료를 증명할 수 있습니다.

3. 핵심 명령어 / 설정

분류수집 대상
계정·인증passwd(UID 0·로그인 셸)·키 지문·sshd -T·PAM·sudoers
스케줄crontab·cron.d·atq·timer
서비스·부팅enabled 유닛·drop-in·rc.local·init.d·udev
실행 환경profile.d·bashrc·ld.so.preload·modules-load.d
통로LISTEN·외부 연결·웹 루트 신규 스크립트

4. 실습 (실습 예시)

# 지속성 인벤토리 스크립트 골격 (분석 방법, 읽기 전용)
OUT=/root/ir/persist-inventory-$(hostname)-$(date +%F_%H%M).tsv
row(){ f="$3"; own=$(rpm -qf "$f" 2>/dev/null || dpkg -S "$f" 2>/dev/null | cut -d: -f1 || echo "-")
       [ -z "$own" ] && own="미소유"; h=$(sha256sum "$f" 2>/dev/null | cut -c1-16)
       m=$(stat -c %y "$f" 2>/dev/null | cut -c1-16); printf "%s\t%s\t%s\t%s\t%s\t%s\n" "$1" "$2" "$f" "$own" "$h" "$m"; }
{ for f in /etc/cron.d/* /var/spool/cron/*; do row 스케줄 cron "$f"; done
  for f in /etc/systemd/system/*.service /etc/systemd/system/*.timer /etc/systemd/system/*.d/*.conf; do row 서비스 systemd "$f"; done
  for f in /etc/rc.d/rc.local /etc/udev/rules.d/* /etc/ld.so.preload /etc/modules-load.d/*; do [ -e "$f" ] && row 부팅 boot "$f"; done
  for f in /etc/profile.d/* /root/.bashrc /home/*/.bashrc; do row 셸 shell "$f"; done
  for f in /root/.ssh/authorized_keys /home/*/.ssh/authorized_keys; do [ -e "$f" ] && row 인증 sshkey "$f"; done
} | sort -t$'\t' -k6 -r | sudo tee "$OUT" >/dev/null
grep -P '\t미소유\t' "$OUT"

5. 정상 상태

미소유 항목: 0
수정 시각 상위: 패키지 업데이트 시각(10-02 10:12)과 일치

미소유 항목이 없거나 승인 기록이 있고, 최근 수정 항목이 패키지 업데이트·배포 시각으로 설명되는 상태가 정상입니다.

6. 이상 상태

스케줄 cron /var/spool/cron/apache            미소유 3f9a.. 2026-10-08 03:00
서비스 systemd /etc/systemd/system/dbus-helper.service 미소유 a12c.. 2026-10-08 03:02
부팅 boot /etc/ld.so.preload                  미소유 77be.. 2026-10-08 03:04
셸 shell /etc/profile.d/sys-locale.sh          미소유 c0d1.. 2026-10-08 03:01
  • 미소유 항목이 03:00~03:04 사이에 집중 → 한 번의 지속성 설치 작업
  • 분류가 스케줄·서비스·부팅·셸로 분산 → 다중 지속성
  • 이 목록이 그대로 근절 체크리스트가 됨

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

인벤토리 활용 흐름입니다(가상의 예시).

[수집] 인벤토리 스크립트(읽기 전용) 실행
   ↓
[정렬] 미소유 → 수정 시각 → 실행 대상
   ↓
[판정] 각 항목 I08 판정 기준 적용
   ↓
[근절] 판정된 항목 = 체크리스트
   ↓
[검증] 근절 후 재수집 → 전후 diff → 남은 항목 0 확인
시점목적
대응 초기범위 파악
근절 직후제거 확인
감시 기간 종료재생성 없음 확인

인벤토리 스크립트는 읽기 전용이어야 하며, 증거 훼손을 막기 위해 결과는 원격(SIEM·증거 서버)으로도 보내 보관합니다.

8. SOC 관제 포인트

  • 인벤토리 스크립트를 표준 IR 도구로 배포해 두고 Wazuh 명령 모니터링으로 정기 실행합니다.
  • 미소유 항목 수를 호스트별 지표로 대시보드화합니다.
  • 근절 보고서에 전후 인벤토리 diff를 첨부합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108380" level="10">
    <decoded_as>syslog</decoded_as>
    <program_name>persist-inventory</program_name>
    <match>미소유</match>
    <description>지속성 인벤토리 점검에서 패키지 미소유 지속성 항목 발견</description>
    <mitre><id>TA0003</id></mitre>
  </rule>
</group>

인벤토리 스크립트가 미소유 항목을 logger -t persist-inventory로 남기면 Wazuh가 수집해 경보합니다. 이 룰은 auditd가 아닌 syslog 기반이므로 상위 auditd 룰(108000)에 묶지 않고 독립 룰로 작성했습니다.

10. 대응 방법

  1. 초기 확인 — 인벤토리를 수집하고 미소유·최근 수정 항목을 확인합니다.
  2. 범위 확인 — 같은 시간대·같은 실행 대상 항목을 묶어 범위를 확정합니다.
  3. 증거 확보 — 인벤토리 결과를 원격 저장소에 보존합니다.
  4. 차단/조치 — 판정된 항목을 체크리스트로 근절합니다.
  5. 재발 방지 — 근절 후·감시 기간 종료 시 재수집해 전후를 비교합니다.

11. 핵심 정리

요소내용
형태호스트·분류·위치·소유·해시·시각
정렬미소유 → 수정 시각
용도범위 파악·체크리스트·검증
원칙읽기 전용·원격 보관
면접 포인트"지속성 대응의 산출물은 인벤토리 — 근절 전후 diff가 근절의 증명"

12. 다음 편 예고

다음 편 440. 지속성·재침투 — 지속성 기준선 diff 자동화와 정기 점검 에서는 I04 기준선과 I39 인벤토리를 systemd timer·Wazuh 명령 모니터링으로 자동 비교해 신규 지속성을 매일 찾아내는 운영 방법을 다룹니다.


이전 편: 438. 지속성·재침투 — 백도어·재침투 경로 종합 분석
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글