SSH Port Forwarding 이해하기 ( 해커의 관점에서의 이론 )

2017. 8. 2. 18:51NetworkHacking/Network




포트 포워딩은 " 리스닝 포트 "를 SSH Server, SSH Client 중 어느 곳에 여는 지에 따라서 두가지 방식으로 나뉘어 진다


[1] Local Port Forwarding 로컬 포트 포워딩    - SSH Client에 리스닝 포트를 연다

로컬 포트 포워딩을 사용하는 환경

: 웹 서버의 방화벽이 22/tcp 포트에 접속하는 연결만 허용하고 그 이외의 접속하려는 연결은 차단하는 경우 웹 서버에 접속하기 위해 사용

  22/tcp: SSH Service Port

  [ 방화벽 조건 ]

  Inbound 22/tcp  ACCEPT

  Inbound ANY DROP

  Outbound ANY ACCEPT

[ Local Port Forwarding ]


[ 로컬 포트 포워딩 과정 ]

Host-A == Application Client, SSH Client    /    Host-B == Application Server, SSH Server 

1> 명령을 입력하는 사용자는 Application Client(웹 브라우저) 이다

2> 사용자가 Application Server ( 웹서버 80/tcp )에 접근하려고 하지만 방화벽에 막혀 접근할 수 없다

3> 따라서 SSH Server의 22/tcp포트의 연결 터널을 이용하려고 한다 ( 방화벽에서 22/tcp로의 외부 접속을 허용한다 )

4> SSH Client리스닝 포트8585/tcp )를 열어 놓는다

5> SSH Client의 8585/tcp포트와 SSH Server의 22/tcp포트의 SSH터널을 생성한다

6> Application Client는 8585/tcp포트로 접속하고 SSH터널을 통해 SSH Server의 22/tcp 포트로 연결해 SSH Server 내부로 접속

7> 현재 사용자는 Host-B내부에 위치하므로 Application Server의 방화벽에 차단되지 않고 80/tcp포트로 접속해 웹 서버에 접근한다


[ 명령어 구조 ]

#ssh -L [ 로컬 리스닝 포트 ] : [ 포워딩 할 주소( IP:Port ) ] [ SSL 서버 주소 ]

#ssh -L 8585:10.10.10.10:80 10.10.10.10    =>    SSH Client의 8585포트를 통해서 10.10.10.10의 80번 포트로 포트 포워딩하여 접근하겠다



[2] Remote Port Forwarding 원격 포트 포워딩    - SSH Server에 리스닝 포트를 연다

원격 포트 포워딩을 사용하는 환경

웹 서버의 방화벽이 로컬 포트 포워딩을 사용했던 22/tcp 포트에 접속하는 연결을 포함하는 모든 내부 연결들을 차단하고 내부에서 외부로 나가는 패킷만 허용하는 방화벽을 우회할 때 사용 

  [ 방화벽 조건 ]

  Inbound  ANY DROP

  Outbound ANY ACCEPT

[ Remote Port Forwarding ]


[ 원격 포트 포워딩 과정 ]

Host-A == Application Client, SSH Server    /    Host-B == Application Server, SSH Client

1> 명령을 입력하는 사용자는 Application Client(웹 브라우저) 이다

2> 사용자가 Application Server의 웹서버 80/tcp에 접근하려하지만 방화벽에 의해 차단당했다

3> 로컬 포트 포워딩을 통해서 방화벽을 우회하려 했지만 외부에서 내부로 접속하는 모든 패킷들을 방화벽이 차단하고 있다

4> 하지만 내부에서 외부로 나가는 패킷들을 허용하고 있는 취약점을 이용해서 포트 포워딩을 실행하려한다

5> Host-A에서 SSH Server가 되고 Host-B가 SSH Client가 되어 SSH 터널링을 수행한다 ( 로컬 포트 포워딩과 반대 )

6> SSH Server리스닝 포트 ( 8585/tcp ) 를 열어 놓는다

7> 사용자는 SSH Server의 8585/tcp로 접속하고 SSH터널을 통해 SSH Client의 내부로 접속하게 된다

8> 현재 사용자는 Host-B내부에 위치하므로 Application Server의 방화벽에 차단되지 않고 80/tcp포트로 접속해 웹 서버에 접근한다


[ 명령어 구조 ]

#ssh -R [ 원격 리스닝 포트 ] : [ 포워딩할 서버( IP:Port ) ] [ SSL 서버 주소 ]

#ssh -R 8585:10.10.10.10:80 10.10.10.20    =>    SSH Server의 8585포트를 통해서 10.10.10.10의 80번포트로 포트 포워딩하여 접근하겠다