438. 지속성·재침투 — 백도어·재침투 경로 종합 분석

changseop lee·4일 전

시스템 보안 · 취약점

목록 보기
438/450

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

선행 학습

1. 개념

백도어·재침투는 "어떤 통로로 다시 들어오는가"의 문제입니다. 지금까지 다룬 기법을 통로의 방향과 위치(네트워크·애플리케이션·호스트 내부)로 묶어 하나의 지도로 정리합니다.

재침투 경로 지도
 [내→외 통로]   리버스 셸(I29) · C2 비컨(I32) · SSH 역방향 터널(I33)
 [외→내 통로]   백도어 리스너(I30) · 웹셸(I31)
 [이웃 경유]    신뢰 관계·agent 하이재킹(I34)
 [깊은 거점]    커널 모듈(I35) · 바이너리 교체(I36)
 [검증]         근절 후 복귀 징후(I37)
   ↓
 네트워크 통제(아웃바운드 차단)로 내→외 통로를 한 번에 줄인다

핵심: 호스트 점검 + 네트워크 통제를 함께 써야 통로가 닫힌다

특히 내→외 통로는 아웃바운드 기본 차단 하나로 상당 부분을 무력화할 수 있어, 호스트별 제거와 함께 네트워크 정책을 점검합니다.

2. 왜 중요한가

  • 통로 하나만 닫으면 다른 통로로 복귀합니다.
  • 깊은 거점(커널·바이너리)은 호스트 내 점검을 신뢰할 수 없게 만듭니다.
  • 방향별로 정리하면 네트워크 팀과 협업할 통제 항목이 명확해집니다.

3. 핵심 명령어 / 설정

기법주 탐지룰 ID
리버스 셸connect 감사·DROP 주기108280
리스너LISTEN 기준선·packet 소켓108290
웹셸웹서버 → 셸 계보108300
C2 비컨간격 통계108310·108311
SSH 터널ssh -R/-D 인자108320
신뢰 관계rhosts·agent 접근108330
커널 모듈finit_module·taint108340
바이너리 교체rpm -Va·bin_change108350
복귀 징후IOC 감시 목록108360

4. 실습 (실습 예시)

# 재침투 통로 일괄 점검 (분석 방법)
echo "[내→외]"; sudo ss -tnp | grep -E '"(bash|sh|python[0-9.]*|perl|nc|ssh)"' ; ps -eo args | grep -E '[s]sh .*-[A-Za-z]*[RD]'
echo "[외→내]"; sudo ss -lntup | wc -l; sudo grep -rlE 'eval\(|base64_decode\(' /var/www 2>/dev/null | head -3
echo "[이웃]";  sudo find / -xdev \( -name '.rhosts' -o -name 'hosts.equiv' \) 2>/dev/null
echo "[거점]";  cat /proc/sys/kernel/tainted; sudo rpm -Va 2>/dev/null | grep -cE '^..5.* /(usr/)?s?bin/'

5. 정상 상태

[내→외] 셸·터널 연결 없음  [외→내] 리스너 기준선 일치, 웹셸 패턴 없음
[이웃] 신뢰 파일 없음      [거점] tainted 0, 바이너리 불일치 0

네 영역 모두에서 통로가 발견되지 않고, 아웃바운드가 승인 목적지로만 제한된 상태가 정상입니다.

6. 이상 상태

[내→외] bash → 198.51.100.7:443 (SYN 반복), ssh -N -R 2222:localhost:22
[외→내] /var/www/html/uploads/thumb.php
[거점] tainted 12288, sshd 해시 불일치
  • 내→외·외→내 통로가 동시에 존재 → 다중 재침투 경로
  • 커널 taint·sshd 교체 → 깊은 거점, 호스트 도구 불신
  • 호스트 정리만으로는 불충분 → 재설치 + 네트워크 차단 병행

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

재침투 통로 종합 판단 흐름입니다(가상의 예시).

[통로 점검] 내→외 · 외→내 · 이웃 · 거점
   ↓
[깊은 거점?] 커널·바이너리 변조 있음
   ├─ 예 → 호스트 신뢰 불가 → 이미지 확보 → 재설치
   └─ 아니오 → 통로별 제거
   ↓
[네트워크 통제] 아웃바운드 기본 차단 · C2·터널 목적지 차단
   ↓
[검증] 복귀 징후 감시 기간(I37)
통로1차 통제
내→외아웃바운드 차단
외→내인바운드 최소화·웹 실행 금지
이웃신뢰 해제·키 교체
거점재설치

깊은 거점이 확인되면 호스트 안에서 "깨끗해졌다"고 판단할 근거가 사라지므로, 재설치 여부를 가장 먼저 결정합니다.

8. SOC 관제 포인트

  • 재침투 통로 Alert를 방향별 태그로 분류해 대시보드화합니다.
  • 아웃바운드 정책 예외 목록을 정기 검토합니다.
  • 깊은 거점 의심 시 재설치 판단 기준을 사전에 합의해 둡니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108370" level="15">
    <if_matched_group>persistence</if_matched_group>
    <same_field>agent.id</same_field>
    <match type="pcre2">reentry_|module_load|bin_change</match>
    <timeframe>86400</timeframe>
    <description>동일 호스트 24시간 내 재침투 통로와 깊은 거점 이벤트 동시 발생</description>
    <mitre><id>TA0011</id></mitre>
  </rule>
</group>

재침투 통로 이벤트와 커널·바이너리 변조 이벤트가 같은 호스트에서 하루 안에 함께 발생하면 최고 수준으로 묶어 경보하는 상관 예시입니다.

10. 대응 방법

  1. 초기 확인 — 네 영역의 통로를 모두 목록화합니다.
  2. 범위 확인 — 깊은 거점 여부를 판단하고 영향 범위(이웃 서버)를 산정합니다.
  3. 증거 확보 — 통로별 증거와 이미지(필요 시)를 확보합니다.
  4. 차단/조치 — 재설치 또는 통로별 제거와 함께 네트워크 차단을 적용합니다.
  5. 재발 방지 — 복귀 징후 감시 기간을 운영하고 결과를 근절 보고에 반영합니다.

11. 핵심 정리

방향기법
내→외리버스 셸·C2·터널
외→내리스너·웹셸
이웃신뢰 관계
거점커널 모듈·바이너리 교체
면접 포인트"통로는 방향별로 닫는다 — 깊은 거점이 보이면 정리보다 재설치"

12. 다음 편 예고

다음 편 439. 지속성·재침투 — 지속성 인벤토리(전수 점검) 작성 에서는 I영역의 모든 지속성 위치를 하나의 인벤토리 스크립트로 수집해 호스트별 지속성 목록을 만들고 사고 대응·근절 검증에 쓰는 방법을 다룹니다.


이전 편: 437. 지속성·재침투 — 근절 후 재침투(복귀) 징후 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글