네트워크 터널링 개념비유
Home ⭤ Store : 데이터를 주고받는 출발지와 목적지 (클라이언트-서버)
Underground tunnel : 터널링된 연결 (보안 적용)
Cargo train : 터널을 통해 실제로 전송되는 데이터
City dwellers / Neighborhood : 일반 사용자, 인터넷 상 다양한 네트워크 구성원
Bad actor : 패킷 도청 / 조작하려는 공격자
1. 네트워크 터널링?
1.1. 정의
인터넷을 통해 데이터를 비공개 채널처럼 암호화해서 주고받는 기술
1.2. 목적
1. 보안성 : 외부에서 내용을 볼 수 없게 한다
2. 우회 : 방화벽이나 NAT을 우회해 통신이 가능하다
3. 익명성 : 출발지와 목적지를 숨길 수 있다
1.3. 종류
- SSH 터널링
- VPN
- Chisel
- TLS/SSL
- Tor
2. SSH 터널링
2.1. 정의
- 암호화 된 SSH 연결을 통해 데이터를 전송하는 방식
- 비신뢰 구간(공용 네트워크)에서 민감한 트래픽을 보안 채널로 감싸 우회 전송하는 기술이다
2.2. 종류
1. 로컬 포트 포워딩
- 내 컴퓨터의 포트를 원격 서버의 특정 포트에 연결한다
예시) 로컬 ⭢ 내부 DB 접속
2. 리모트 포트 포워딩
- 원격 서버의 포트를 내 컴퓨터, 혹 제 3자의 서버에 연결한다
예시) 원격 서버에 연결해서 내 PC에 전달
3. 다이내믹 포트 포워딩
- SOCKS 프록시처럼 동작한다
- 목적지 지정 없이 다중 포트 중계
포트 포워딩 : 네트워크의 특정 포트로 들어온 트래픽을 다른 주소나 포트로 전달하는 것
터널링 안에 포트 포워딩이 존재!
3. SSH 터널링 간단한 실습
3.1. 로컬 포트 포워딩
환경설정
1. WSL2 Ubuntu
OpenSSH 서버 설치
sudo apt update
sudo apt install openssh-server -y
2. 포트 설정
sudo vim /etc/ssh/sshd_config
보통 # 로 주석처리 되어있기때문에 다음 항목의 주석들을 제거 해준다
- Port 2222 (기본포트 22만 아니라면 1024이상 숫자 상관x)
- ListenAddress 0.0.0.0
- PasswordAuthentication yes
과정
Windows Powershell = 외부 컴퓨터
WSL2 Ubuntu = 내부 리눅스 서버
SSH 터널을 열고 들어가는 것
1. SSH 서비스 재시작
sudo service ssh restart
sudo /usr/sbin/sshd -d (로그 보이게)
sudo /usr/sbin/sshd (백그라운드로 조용히)
2. Windows Powershell 에서 ssh 접속 테스트
ssh [wsl2ubuntu사용자이름]@localhost -p 2222
wsl2 ubuntu 화면
Powershell 화면
완료!
3.2. 리모트 포트 포워딩
환경설정
WSL2는 로컬호스트 간 네트워크가 완전한 가상화가 아니기 때문에, 정상 동작하지 않는 케이스가 존재한다 따라서 VMware 를 활용하여 실습해보겠다
- Kali Bridged (Automatic)
- Replicate physical network connection state 옵션 체크
ssh 서버 설치
sudo apt update
sudo apt install openssh-server -y
과정
Windows = 웹서버 = 포워딩 대상
Kali Linux = SSH 클라이언트 = 리모트 포워딩 요청자
eth0 : 실제 외부와 통신하는 인터페이스
kali ip 주소 : inet 192.168.1.144
Windows ip 주소 :
1. Windows에서 웹서버 열기
python -m http.server 8000
다음과 같이 열리면 성공
2. kali에서 ssh서버 실행
sudo service ssh start
sudo service ssh status
3. SSH 포워딩 후 확인
ssh -R 9000:WINDOWS_IP:8000 kali@localhost
curl localhost:9000
Windows에서 열어둔 Python HTTP 서버의 디렉토리 listing HTML이 출력
Kali에서 웹서버 응답 HTML을 받아내는 것으로 성공
→ Kali에서 SSH를 이용해 Windows의 웹 서버를 Kali의 9000번 포트로 끌어와서 볼 수 있게 만든 것
다이나믹 포트 포워딩은 Network Tunneling (2)에서 이어서...
4. 참고 문헌
https://www.cloudflare.com/learning/network-layer/what-is-tunneling/
https://www.ssh.com/academy/ssh/tunneling
https://www.ssh.com/academy/ssh/tunneling-example
https://phoenixnap.com/kb/ssh-port-forwarding