405. 지속성·재침투 — 지속성 메커니즘 분류와 MITRE ATT&CK 매핑

changseop lee·3일 전

시스템 보안 · 취약점

목록 보기
405/450

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

선행 학습

1. 개념

지속성 기법은 종류가 많아 보이지만 "언제 다시 실행되는가(트리거)"와 "어디에 심는가(위치)" 두 축으로 정리하면 대부분 분류할 수 있습니다. 이 분류를 MITRE ATT&CK의 Persistence(TA0003) 기법에 매핑하면 탐지 커버리지를 점검할 수 있습니다.

트리거 × 위치 분류
 로그인 시     : authorized_keys, PAM, .bashrc, profile.d
 시간·주기     : cron, at, systemd timer
 부팅 시       : systemd service, rc.local, init.d, 커널 모듈
 이벤트 시     : udev 규칙, 서비스 재시작(Restart=always)
 모든 실행 시  : ld.so.preload, 바이너리 교체
 외부 접속 시  : 웹셸, 백도어 리스너, 백도어 계정

핵심: 트리거를 알면 "언제 다시 나타날지"를 예측 가능

분류의 목적은 암기가 아니라 탐지 공백 찾기입니다. 각 칸마다 "어떤 로그로 보이는가"를 채워 보면 감시하지 않는 위치가 드러납니다.

2. 왜 중요한가

  • 같은 공격자도 여러 트리거에 중복으로 지속성을 심으므로 분류별 전수 점검이 필요합니다.
  • MITRE 매핑으로 탐지 규칙의 커버리지와 공백을 객관적으로 설명할 수 있습니다.
  • 보고서·인시던트 티켓에서 기법 ID를 쓰면 조직 간 의사소통이 정확해집니다.

3. 핵심 명령어 / 설정

분류대표 위치MITRE 기법
계정 생성/etc/passwdT1136.001
SSH 키authorized_keysT1098.004
인증 모듈/etc/pam.d, pam_*.soT1556.003
cron·at/etc/cron*, /var/spoolT1053.003 / T1053.002
systemd/etc/systemd/systemT1543.002 / T1053.006
RC 스크립트/etc/rc.localT1037.004
셸 설정.bashrc, profile.dT1546.004
동적 링커/etc/ld.so.preloadT1574.006
커널 모듈/lib/modulesT1547.006
웹셸웹 루트T1505.003

4. 실습 (실습 예시)

# 분류별 탐지 커버리지 점검표 만들기 (분석 방법)
# 1) 현재 auditd에 걸린 지속성 관련 watch 키 확인
sudo auditctl -l | grep -oE -- '-k [a-z_]+' | sort | uniq -c
# 2) Wazuh 로컬 룰에 매핑된 MITRE ID 추출
sudo grep -oE 'T1[0-9]{3}(\.[0-9]{3})?' /var/ossec/etc/rules/local_rules.xml 2>/dev/null | sort -u
# 3) 분류표와 비교해 비어 있는 기법을 공백으로 기록

5. 정상 상태

분류        감시 수단            MITRE
cron        watch persist_cron   T1053.003  ✔
systemd     watch persist_svc    T1543.002  ✔
ssh key     watch account_persist T1098.004 ✔

주요 분류마다 최소 하나의 감시 수단(auditd watch·FIM·로그)과 탐지 규칙이 연결된 상태가 정상입니다.

6. 이상 상태

분류        감시 수단            MITRE
udev        (없음)               T1546.017  ✘
ld.so.preload (없음)             T1574.006  ✘
pam_*.so    (없음)               T1556.003  ✘
→ 공격자가 선택할 수 있는 "보이지 않는 칸" 존재
  • 감시 수단이 없는 분류 → 해당 기법으로 심은 지속성은 탐지 불가
  • 자주 쓰이는 cron·SSH 키만 감시 → 덜 흔한 udev·preload가 사각지대
  • 매핑표 공백은 탐지 결함으로 보고하고 보강 계획 수립

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

분류 기반 커버리지 분석 흐름입니다(가상의 예시).

[분류표] 트리거 × 위치 × MITRE
   ↓
[매핑] 분류별 감시 수단·룰 ID 연결
   ↓
[공백] 매핑 안 된 칸 = 탐지 사각
   ↓
[보강] watch·FIM·룰 추가 → 재검증(테스트 이벤트)
상태의미
감시+룰탐지 가능
감시만기록은 있으나 경보 없음
없음탐지 불가(사각)

"감시만" 상태도 사고 후 조사에는 쓸 수 있지만 실시간 탐지는 되지 않으므로 룰까지 연결해야 합니다.

8. SOC 관제 포인트

  • Alert에 MITRE 기법 ID를 붙여 분류별 발생 추이를 대시보드로 봅니다.
  • 한 호스트에서 서로 다른 분류의 지속성이 동시에 보이면 위험도를 높입니다.
  • 분류표는 I영역 전체 탐지 규칙의 목차 역할을 합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108040" level="3">
    <if_sid>108000</if_sid>
    <field name="audit.key" type="pcre2">^persist_</field>
    <description>지속성 위치 감시 이벤트 분류(MITRE 매핑 기반)</description>
    <mitre><id>TA0003</id></mitre>
  </rule>
</group>

persist_ 접두어로 감사 키를 통일하면 하나의 상위 룰로 모든 지속성 위치 이벤트를 묶고, 하위 룰에서 분류별 MITRE ID를 붙일 수 있습니다.

10. 대응 방법

  1. 초기 확인 — 탐지된 지속성의 분류(트리거·위치)와 MITRE ID를 확정합니다.
  2. 범위 확인 — 같은 공격자가 다른 분류에도 지속성을 심었는지 분류표 순서대로 점검합니다.
  3. 증거 확보 — 분류별 발견 항목과 근거 로그를 보존합니다.
  4. 차단/조치 — 발견된 모든 분류의 지속성을 함께 제거해야 재침투를 막을 수 있습니다.
  5. 재발 방지 — 커버리지 공백 칸을 감시·룰로 보강합니다.

11. 핵심 정리

축내용
트리거로그인·시간·부팅·이벤트·실행·외부 접속
위치계정·인증·스케줄·서비스·부팅·셸
매핑MITRE TA0003 하위 기법
활용커버리지 공백 점검
면접 포인트"지속성은 트리거와 위치로 분류 — 매핑표의 빈칸이 탐지 사각"

12. 다음 편 예고

다음 편 406. 지속성·재침투 — 재침투(re-entry) 경로의 유형과 분석 축 에서는 공격자가 다시 들어오는 경로(유효 계정·원격 서비스·백도어·역방향 연결)를 유형화하고 각 경로의 분석 축을 다룹니다.


이전 편: 404. 지속성·재침투 — 지속성 정상 기준선 만들기
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글