406. 지속성·재침투 — 재침투(re-entry) 경로의 유형과 분석 축

changseop lee·4일 전

시스템 보안 · 취약점

목록 보기
406/450

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

선행 학습

1. 개념

지속성이 "안에 남겨 둔 장치"라면 재침투(re-entry)는 "밖에서 다시 들어오는 길"입니다. 재침투 경로는 방향(내→외, 외→내)과 수단(계정, 서비스, 백도어)으로 나눌 수 있습니다.

재침투 경로 유형
 외 → 내 (인바운드)
  · 유효 계정 재사용 (탈취 비밀번호·키)      T1078
  · 원격 서비스 (SSH·VPN·RDP)                T1133 / T1021.004
  · 백도어 리스너·웹셸                        T1505.003
 내 → 외 (아웃바운드)
  · 리버스 셸·C2 비컨이 공격자에게 연결      T1071
  · 터널(SSH -R, 프록시)                      T1572

핵심: 인바운드는 "접속 기록", 아웃바운드는 "연결 시작 프로세스"로 본다

분석 축은 누가(계정·키), 어디서(출발지·목적지), 무엇으로(프로세스·서비스), 언제(주기·시간대) 네 가지입니다.

2. 왜 중요한가

  • 사고 복구 후 비밀번호만 바꾸면 키·백도어·리버스 연결로 다시 들어올 수 있습니다.
  • 재침투 경로마다 남는 로그가 달라 경로 유형을 알아야 올바른 로그를 찾습니다.
  • 제거 후 재침투 시도 여부가 "근절 성공"을 판단하는 핵심 지표입니다.

3. 핵심 명령어 / 설정

경로주 로그핵심 필드
유효 계정/var/log/secure, auth.log계정·출발지 IP·인증 방식
SSH 키sshd(LogLevel VERBOSE)키 지문
웹셸access_log + execveURI·웹서버 자식 프로세스
리스너ss -lntp, auditd bind포트·프로세스
리버스 연결auditd connect, 방화벽목적지 IP·포트·exe

4. 실습 (실습 예시)

# 재침투 경로별 현황 확인 (분석 방법)
# 인바운드: 최근 SSH 성공 로그인의 출발지·방식
sudo grep -E 'Accepted (password|publickey)' /var/log/secure | awk '{print $9,$11,$7}' | sort | uniq -c
# 리스너: 기준선에 없는 리스닝 포트
sudo ss -lntup
# 아웃바운드: 셸·인터프리터가 맺은 외부 연결
sudo ss -tnp state established | grep -E 'bash|sh|python|perl|nc'

5. 정상 상태

$ grep Accepted /var/log/secure (출발지 = 관리망 10.10.1.0/24)
$ ss -lntup (sshd:22, httpd:443 — 기준선과 동일)

접속 출발지가 관리망·승인 대역이고, 리스닝 포트와 외부 연결이 기준선 범위 안에 있는 상태가 정상입니다.

6. 이상 상태

Accepted publickey for root from 203.0.113.50 (신규 출발지)
ss: LISTEN 0.0.0.0:31337 users:(("kworkerd",pid=2211))
ss: ESTAB 10.10.2.15:41922 → 198.51.100.7:443 users:(("bash",pid=3010))
  • 처음 보는 외부 IP의 root 키 인증 → 유효 계정·키 재사용 의심
  • 비표준 포트 리스너와 커널 스레드 위장 이름 → 백도어 리스너 의심
  • bash가 직접 외부 443에 연결 → 리버스 셸 의심

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

재침투 경로 분석 축입니다(가상의 예시).

[인바운드] 접속 로그 → 누가(계정·키 지문) · 어디서(IP)
[리스너]   ss·auditd bind → 무엇이(프로세스) 포트를 열었나
[아웃바운드] auditd connect → 무엇이 · 어디로 · 얼마나 자주
   ↓
[결합] 같은 호스트·같은 시간대의 경로를 묶어 재침투 체인 확인
축질문
누가어떤 계정·키인가
어디서출발지·목적지는 승인 대역인가
무엇으로어떤 프로세스·서비스인가
언제주기적인가, 업무 시간 외인가

경로 하나만 막으면 다른 경로로 돌아오므로, 네 축을 모든 경로에 똑같이 적용해 전수 확인합니다.

8. SOC 관제 포인트

  • 근절 직후 일정 기간은 재침투 경로별 감시 레벨을 올려 운영합니다.
  • 신규 출발지 + 키 인증 + root는 즉시 확인 대상입니다.
  • 셸 프로세스의 외부 연결은 정상 업무에서 드물어 고가치 신호입니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108050" level="10">
    <if_sid>108000</if_sid>
    <field name="audit.key">reentry_net</field>
    <field name="audit.exe" type="pcre2">/(ba)?sh$|/python[0-9.]*$|/perl$|/nc$|/ncat$</field>
    <description>셸·인터프리터의 외부 연결 시도(재침투 채널 의심)</description>
    <mitre><id>T1071</id></mitre>
  </rule>
</group>

connect 시스템 콜을 reentry_net 키로 감사하고, 연결을 시작한 실행 파일이 셸·인터프리터인 경우를 높은 레벨로 경보합니다.

10. 대응 방법

  1. 초기 확인 — 재침투 경로 유형(인바운드·리스너·아웃바운드)을 먼저 분류합니다.
  2. 범위 확인 — 같은 호스트의 다른 경로도 네 축으로 함께 확인합니다.
  3. 증거 확보 — 접속 로그·연결 목록·프로세스 정보를 보존합니다.
  4. 차단/조치 — 해당 계정·키 폐기, 리스너 프로세스 격리, 목적지 IP 차단을 수행합니다.
  5. 재발 방지 — 근절 후 재침투 감시 기간을 정해 경로별 경보를 강화합니다.

11. 핵심 정리

방향경로
외→내유효 계정·원격 서비스·리스너·웹셸
내→외리버스 셸·C2·터널
분석 축누가·어디서·무엇으로·언제
면접 포인트"재침투는 방향과 수단으로 분류 — 비밀번호 변경만으로는 키·백도어 경로가 남는다"

12. 다음 편 예고

다음 편 407. 지속성·재침투 — 정상 자동화와 악성 지속성의 구분 에서는 백업·모니터링·배포 도구가 만드는 정상 자동 실행과 공격자의 지속성을 작성 주체·경로·내용·이력으로 구분하는 방법을 다룹니다.


이전 편: 405. 지속성·재침투 — 지속성 메커니즘 분류와 MITRE ATT&CK 매핑
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글