430. 지속성·재침투 — 바인드 셸·백도어 리스너 탐지

changseop lee·2026년 10월 9일

시스템 보안 · 취약점

목록 보기
430/450

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

선행 학습

1. 개념

바인드 셸은 리버스 셸과 반대로 서버가 포트를 열고 기다리는 방식입니다. 공격자는 언제든 그 포트로 접속해 다시 들어옵니다. 매직 패킷을 받을 때만 포트를 여는 은밀한 변형도 있습니다(T1205).

백도어 리스너 유형
 ① 단순 바인드 셸   : 0.0.0.0:31337 LISTEN (nc -l 류)
 ② 정상 포트 위장   : 8443·2222 등 그럴듯한 포트
 ③ 포트 노킹·매직 패킷 : 평소 닫혀 있다가 특정 패킷 수신 시 열림
                       (raw socket 감시 → ss 목록에 LISTEN 없음)
 흔적: bind/listen 시스템 콜, 기준선 외 LISTEN, raw socket 프로세스

핵심: LISTEN 기준선 + raw socket 사용 프로세스까지 본다

③ 유형은 리스닝 포트가 보이지 않으므로 ss -lntp만으로는 놓칩니다. raw/packet 소켓을 연 프로세스를 따로 확인해야 합니다.

2. 왜 중요한가

  • 리스너가 남아 있으면 계정·키를 모두 정리해도 바로 재침투가 가능합니다.
  • 정상 포트 번호로 위장하면 포트 번호만 보는 점검을 통과합니다.
  • 매직 패킷형은 네트워크 스캔으로도 발견되지 않습니다.

3. 핵심 명령어 / 설정

확인명령포인트
리스닝ss -lntup기준선 diff
프로세스ls -l /proc/<pid>/exe실행 파일 경로
raw 소켓ss -0 -p / cat /proc/net/packet패킷 감시 프로세스
bind 감사auditctl -a always,exit -S bind -k reentry_listen포트·exe

4. 실습 (실습 예시)

# 백도어 리스너 점검 (분석 방법)
sudo ss -lntup | awk 'NR>1{print $5,$7}' | sort > /tmp/listen_now
diff /root/baseline/listen.txt /tmp/listen_now
# raw/packet 소켓을 연 프로세스 (매직 패킷형 확인)
sudo ss -0 -p 2>/dev/null; sudo ss -w -p 2>/dev/null
# 리스너 실행 파일 확인
for p in $(sudo ss -lntp | grep -oE 'pid=[0-9]+' | cut -d= -f2 | sort -u); do echo "$p $(sudo readlink /proc/$p/exe)"; done

5. 정상 상태

0.0.0.0:22 sshd · 0.0.0.0:443 httpd · 127.0.0.1:25 master (기준선 일치)
packet 소켓: NetworkManager(dhcp) 만

리스닝 포트와 프로세스가 기준선과 같고, raw/packet 소켓을 쓰는 프로세스가 알려진 시스템 서비스뿐인 상태가 정상입니다.

6. 이상 상태

> 0.0.0.0:8443 users:(("httpd-worker",pid=6021))  exe=/var/tmp/.w/httpd-worker
packet 소켓: pid=6107 comm=kworker/0:2 exe=/usr/lib/.x/agent
  • 기준선 외 8443 리스너 + 임시 경로 바이너리 → 정상 포트 위장 백도어
  • 커널 스레드 이름의 사용자 프로세스가 packet 소켓 사용 → 매직 패킷형 의심
  • LISTEN이 없어도 원격 활성화 가능 → 네트워크 스캔으로 발견 불가

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

백도어 리스너 분석 흐름입니다(가상의 예시).

[LISTEN 비교] 기준선 diff → 신규 리스너
   ↓
[raw 소켓] packet/raw 소켓 사용 프로세스 확인
   ↓
[실행 파일] /proc/<pid>/exe 경로·삭제 여부·해시
   ↓
[접속 기록] 해당 포트 인바운드 연결(방화벽·conntrack·accept 감사)
유형탐지 수단
바인드 셸LISTEN 기준선
포트 위장실행 파일 경로
매직 패킷raw/packet 소켓

커널 스레드는 /proc/<pid>/exe가 비어 있어야 정상입니다. kworker 이름인데 실행 파일 경로가 있다면 사용자 공간 프로세스의 위장입니다.

8. SOC 관제 포인트

  • 리스닝 포트 기준선을 정기 비교하고 신규 리스너를 경보합니다.
  • raw/packet 소켓 사용 프로세스를 별도 점검 항목으로 둡니다.
  • 인바운드 기본 차단으로 승인 외 포트 접속을 막아 리스너의 효과를 줄입니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108290" level="13">
    <if_sid>108000</if_sid>
    <field name="audit.key">reentry_listen</field>
    <field name="audit.exe" type="pcre2">^/(tmp|var/tmp|dev/shm|usr/lib/\.|home/)|/\.[^/]+/</field>
    <description>임시·숨김 경로 실행 파일의 소켓 bind(백도어 리스너 의심)</description>
    <mitre><id>T1205</id></mitre>
  </rule>
</group>

bind 시스템 콜을 감사하고, 실행 파일이 임시·숨김 경로인 경우를 경보합니다. 정상 서비스의 bind는 패키지 경로이므로 오탐이 적습니다.

10. 대응 방법

  1. 초기 확인 — 신규 리스너·raw 소켓 프로세스와 실행 파일을 확인합니다.
  2. 범위 확인 — 해당 포트로 들어온 연결과 같은 바이너리의 다른 지속성을 확인합니다.
  3. 증거 확보 — 프로세스 메모리·실행 파일·연결 기록을 보존합니다.
  4. 차단/조치 — 포트를 차단하고 프로세스를 종료·격리하며 기동 트리거를 제거합니다.
  5. 재발 방지 — 리스닝 기준선·raw 소켓 점검·인바운드 기본 차단을 운영합니다.

11. 핵심 정리

유형확인
바인드 셸ss -lntup
위장 포트exe 경로
매직 패킷ss -0 / packet 소켓
근거bind 감사
면접 포인트"보이는 LISTEN만이 리스너가 아니다 — packet 소켓을 연 프로세스까지 본다"

12. 다음 편 예고

다음 편 431. 지속성·재침투 — 웹셸 재침투 탐지 에서는 웹 루트에 남긴 웹셸을 통한 재침투를 웹 로그 패턴·웹서버 자식 프로세스·파일 생성 감시를 결합해 탐지하는 방법을 다룹니다.


이전 편: 429. 지속성·재침투 — 리버스 셸 재접속 시도 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글