Dynamic Port Forwarding
Dynamic Port Forwarding은 일반적으로 1:1 매핑인 Local Port Forwarding, Remote Port Forwaridng 와는 다른
1:N 매핑의 포트포워딩 방식이다.
즉, 점프 호스트 역할인 베스천 호스트(SSH 클라이언트)하나로 모든 포트로의 트래픽을 보낼 수 있게 된다.
이 때 SSH 클라이언트 로컬 호스트를 SOCKS 프록시 서버로 설정하게 된다.
대신, Dynamic 의 경우 SSH 클라이언트 호스트 내부에서 돌아가고 있는 로컬호스트 서비스는 접속할 수 없다.
(Local, Remote 의 경우는 SSH 클라이언트의 로컬 호스트 에서 동작중인 서비스에 접근할 수 있음.)
위 사진과 같이 로컬 머신에서 베스천 호스트로 SSH 접속을 수행하면서 -D 옵션으로 SOCKS5 동적 포트포워딩을 활성화 한다.
이렇게 하면 로컬 127.0.0.1:1080에 SOCKS5 프록시가 생성된다. 이를 통해 웹 브라우저 혹은 툴들이 내부망의 다양한 서비스(HTTP, SSH, SMB 등)에 자유롭게 접근할 수 있다.
(참고로 윈도우에서는 PuTTY의 -D 옵션이나 OpenSSH-Client(Win10/11)를 이용해 동일하게 SOCKS 프록시를 만들 수 있으며, 트래픽 라우팅은 Proxifier나 FoxyProxy 같은 프로그램으로 설정한다.)
SOCKS (Socket Secure) 프로토콜은 클라이언트와 서버 사이에 있는 프록시 계층을 말한다.
즉, 애플리케이션이 직접 목적지 서버에 접속하지 않고, SOCKS5 서버를 통해 트래픽을 전달한다.
여기서 SOCKS 프로토콜이 클라이언트와 서버 사이에 프록시 계층이며, 클라이언트의 트래픽이 SOCKS5 서버를 통해 트래픽이 전달된다고 하는데 그럼 로컬이 아닌 베스천호스트(점프 호스트)가 서버가 되야하는 것이 아니냐라는 의문이 생길 수 있다.
이는 구조적으로 SOCKS5 서버는 로컬에서 뜨며, ssh -D 1080 user@bastion을 할 경우 로컬 127.0.0.1:1080에 SOCKS5 리스너가 생기고 브라우저 혹은 Tool 들이 로컬 SOCKS로 접속하게 된다. 이 때 SOCKS가 받은 각 연결은 SSH 터널을 타고 베스천에 전달되며, 전달받은 데이,터를 베스천이 다시 내부망에 실제 TCP 연결을 하는 구조이기 때문이다.
ProxyChains 설정 및 활용
로컬에 SOCKS5 프록시가 열리게 되면, 웹 브라우저나 애플리케이션이 이를 사용하도록 별도의 설정이 필요하다.
동적 포워딩을 통한 SOCKS 프록시를 CLI 도구에 적용하려면 ProxyChains 등을 사용한다. /etc/proxychains.conf (또는 ~/.proxychains/proxychains.conf) 파일을 열어 [ProxyList] 섹션에 SOCKS 정보를 추가한다. 예를 들어 아래와 같이 설정할 수 있다
strict_chain
proxy_dns
[ProxyList]
socks5 127.0.0.1 1080
- strict_chain 또는 dynamic_chain 등을 선택해 프록시 체인을 정의한다.
- proxy_dns 옵션을 활성화하면 DNS 쿼리도 터널을 통해 전달하여 누수를 방지한다.
- [ProxyList]에 socks5 127.0.0.1 1080과 같이 로컬 SOCKS5 주소를 넣는다.
설정 후에는 각종 툴을 proxychains 명령으로 실행할 수 있다. 예를 들어 로컬에서 nmap 스캔을 수행할 때는 proxychains nmap -sT -p 22,80 10.10.0.5 와 같이 하면, 모든 트래픽이 SSH 터널을 통해 베스천 호스트로 전달된다.
이 외에도 proxychains curl http://internal.service 또는 proxychains apt update 등으로 내부망 리소스에 접근할 수 있다. ProxyChains를 사용하면 SOCKS 미지원 도구라도 자동으로 프록시를 적용하여 내부망 접근이 가능해진다
/etc/proxychains4.conf(또는 ~/.proxychains/proxychains.conf) 설정을 마쳤다면 아래와 같이 사용할 수 있다.
# 베스천에 SSH 접속하며 로컬 SOCKS5(127.0.0.1:1080) 개설
ssh -fN -D 127.0.0.1:1080 user@bastion.example.com
# 다단 점프가 필요하면 ssh -J user@edge user@bastion -fN -D 127.0.0.1:1080
```
#FreeRDP (xfreerdp) for windows
proxychains -q xfreerdp /v:10.10.20.55 /u:<username ex)ACME\\alice> /p:'P@ssw0rd!' /cert:ignore
#구버전
proxychains -q rdesktop 10.10.20.55:3389 -u alice -p 'P@ssw0rd!'
# evil-winrm
proxychains -q evil-winrm -i 10.10.30.77 -u 'ACME\alice' -p 'P@ssw0rd!'
# 여러 포트 신속 확인(TCP connect)
for p in 80 135 139 445 3389 5985 5986; do
proxychains -q bash -c "echo | nc -nv -w2 10.10.20.55 $p" 2>&1 | grep -E 'open|succeeded'
done
구조적 단점
- 모든 통신이 SSH 터널을 경유하기 때문에 네트워크 지연(latency)과 CPU 부하가 증가할 수 있다.
- SOCKS5는 TCP 위주 프로토콜이므로, UDP 패킷이나 SYN 스캔 등 일부 기능은 지원하지 않는다
- 예를 들어 nmap 스캔 시 -sT (TCP connect 스캔) 만 가능하고, UDP/ICMP 스캔은 터널 밖에선 수행할 수 없다
- ProxyChains를 사용하면 DNS 도메인으로 스캔할 때 이름 해석에 제한이 생길 수 있으므로, 내부 IP를 직접 지정해야 한다.
'Pentest > Pentest' 카테고리의 다른 글
Reverse Dynamic Port Forwarding (0) | 2025.09.25 |
---|---|
Remote Port Forwarding (0) | 2025.09.23 |
Local Port Forwarding (0) | 2025.09.22 |
[모의 해킹] - Metasploitable2 - FTP 취약점 (CVE-2011-2523) (0) | 2023.10.31 |
[모의해킹] Kioptrix Level1.2 침투 테스트 (1) | 2023.10.09 |