시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 32/50편 (전체 432/450)
학습 단계: 백도어·재침투 경로 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
C2 비컨은 악성코드가 "지시할 것이 있는가"를 주기적으로 묻는 짧은 통신입니다(T1071). 지속성으로 살아남은 악성코드는 재부팅 후에도 같은 C2로 다시 비컨을 보내므로, 비컨은 남은 지속성을 알려 주는 신호가 됩니다.
비컨 통신 지표
간격 : 60s ± 지터(jitter 10~20%) 로 규칙적
크기 : 요청·응답 크기가 거의 일정 (명령 없을 때)
목적지 : 같은 도메인·IP, 낮은 평판·최근 등록 도메인
시간대 : 사람의 업무 시간과 무관하게 24시간
프로세스: 정상 브라우저가 아닌 서버 프로세스
핵심: 개별 연결은 평범 — "반복의 규칙성"이 지표
예) 간격 분포
연결 간격(초): 58 61 60 63 57 60 59 62 ... → 표준편차 작음 = 비컨
F영역 31편이 비컨 패턴 자체를 다뤘다면, 이번 편은 근절 전후 비컨 비교로 지속성 잔존 여부를 판단하는 데 초점을 둡니다.
| 지표 | 데이터 | 비컨 신호 |
|---|---|---|
| 간격 | 연결 시각 차이 | 표준편차 작음 |
| 크기 | 바이트 수 | 거의 일정 |
| 목적지 | DNS·IP | 단일 목적지 반복 |
| 지속 | 24시간 분포 | 시간대 무관 |
| 프로세스 | connect 감사 exe | 비표준 경로 |
# 비컨 간격 분석 (분석 방법, conntrack/방화벽 로그 기반 예시)
# 1) 특정 호스트의 외부 연결 시각을 목적지별로 추출 (zeek conn.log 예시)
awk -F'\t' '$3=="10.10.2.15"{print $5, int($1)}' conn.log | sort -k1,1 -k2,2n > /tmp/conn.txt
# 2) 목적지별 연결 간격의 평균·표준편차·횟수
awk '{if($1==p){d=$2-t; n[$1]++; s[$1]+=d; ss[$1]+=d*d} p=$1; t=$2}
END{for(k in n){m=s[k]/n[k]; sd=sqrt(ss[k]/n[k]-m*m); if(n[k]>50) printf "%s n=%d avg=%.0f sd=%.1f\n",k,n[k],m,sd}}' /tmp/conn.txt | sort -t= -k4 -n | head
203.0.113.10 n=72 avg=1200 sd=380.4 (업데이트 서버, 불규칙)
목적지 다양, 업무 시간대 집중
외부 연결의 간격이 불규칙하고 목적지가 다양하며, 승인된 업데이트·모니터링 목적지로 설명되는 상태가 정상입니다.
198.51.100.7 n=1438 avg=60 sd=3.1
요청 크기 412B·응답 크기 128B 고정, 24시간 균등 분포
connect 감사: exe=/usr/lib/.x/agent
비컨 기반 지속성 잔존 판단 흐름입니다(가상의 예시).
[연결 데이터] conn.log·방화벽·프록시 로그
↓
[통계] 목적지별 간격 평균·표준편차·횟수·크기
↓
[주체] 호스트 connect 감사로 프로세스·실행 파일 특정
↓
[근절 검증] 근절 전후 같은 목적지 비컨 유무 비교
| 결과 | 판단 |
|---|---|
| 근절 후 비컨 지속 | 지속성 잔존 |
| 근절 후 소멸 | 해당 채널 근절 |
| 목적지만 변경 | 백업 C2 존재 |
근절 후 목적지만 바뀐 비컨이 나타나면 악성코드가 예비 C2 목록을 가진 것이므로, 바이너리 분석으로 C2 목록 전체를 확보해 차단해야 합니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
<rule id="108310" level="12">
<if_sid>108000</if_sid>
<field name="audit.key">reentry_net</field>
<field name="audit.exe" type="pcre2">^/(tmp|var/tmp|dev/shm)/|/\.[^/]+/</field>
<description>숨김·임시 경로 실행 파일의 외부 연결(C2 비컨 주체 의심)</description>
<mitre><id>T1071</id></mitre>
</rule>
<rule id="108311" level="14" frequency="30" timeframe="1800">
<if_matched_sid>108310</if_matched_sid>
<same_field>audit.exe</same_field>
<description>동일 숨김 경로 실행 파일의 30분 내 반복 외부 연결(비컨 패턴)</description>
<mitre><id>T1071</id></mitre>
</rule>
</group>
호스트 측에서는 연결 주체를, 반복 빈도 룰(108311)로는 규칙적 반복을 잡습니다. 정확한 간격 통계는 SIEM 집계로 보완합니다.
| 지표 | 기준 |
|---|---|
| 간격 | 표준편차 작음 |
| 크기 | 일정 |
| 시간 | 24시간 균등 |
| 활용 | 근절 검증 |
| 면접 포인트 | "비컨은 남은 지속성의 맥박 — 근절 후에도 뛰면 아직 안에 있다" |
다음 편 433. 지속성·재침투 — SSH 터널·포트 포워딩 재침투 경로 탐지 에서는 ssh -R 역방향 터널·autossh·SOCKS 프록시로 만든 재침투 통로를 sshd 로그·프로세스 인자·연결 정보로 탐지하는 방법을 다룹니다.
이전 편: 431. 지속성·재침투 — 웹셸 재침투 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점