OSI 7 Layer과 Pivoting Tool

#계층프로토콜/단위주소 체계Tool
L7ApplicationHTTP, DNS, SSH, FTP, SMB-Chisel, SSH, Sshuttle
L6PresentationTLS/SSL, 암호화, 인코딩, 문자셋-
L5Session세션 수립,유지 (SOCKS5)-proxychains
L4TransportTCP(세그먼트), UDP(데이터그램)포트 번호chisel(data), SSH(data), sshuttle(TCP data)
L3NetworkIP, ICMP 라우팅 (단위 : 패킷)IP 주소VPN, Ligolo, sshuttle(가로채기)
L2Data이더넷, ARP, MAC, 스위치 (단위 : 프레임)MAC 주소
L1Physical케이블, 전기신호, 광신호-
  • Pivoting Tool이 낮은 계층에서 동작할 수록, 더 많은 종류의 트래픽을 넘길 수 있고, 높은 계층으로 갈수록 넘기는 트래픽 종류의 한계가 생김

Tool 계층별 매핑

ToolCarrier (캡슐화 프로토콜)가로채는 지점 - payloadICMPUDPproxychains
Ligolo자체 프로토콜L3 - IP 패킷가능가능불필요
SshuttleSSH (L7)L3 - TCP, DNSXX불필요
ChiselHTTP/WebSocket(L7)L4 (TCP 스트림)X제한적SOCKS모드만
SSHSSH (L7)L4/L5 - TCP스트림XX-D모드만
  • sshuttle은 --dns로 DNS(UDP 53)만 예외적으로 터널링
Tool장점단점
Ligolo1. TCP, UDP, ping 모두 가능
2. 호스트가 많아지거나, 멀티홉(더블 피벗)도 깔끔하게 관리 가능
1. kali tun 인터페이스 생성 및 라우팅 설정이 필요
2. agent 바이너리를 실행해야 하므로 탐지 위험성 증가
SSH1. SSH연결만 되면, 추가적인 바이너리 없이 포워딩 설정이 가능함
2. 탐지 가능성 낮음 (SSH 기본 기능)
1. ICMP, UDP 지원하지 않음
2. SSH 연결이 필요함(계정 크리덴셜 필요)
Chisel1. 방화벽(Outbound 트래픽) 우회에 강함1. ICMP, UDP 지원하지 않음 (UDP 제한적 지원)
2. chisel 바이너리 실행 필요
3. 멀티홉(더블 피벗) 복잡해짐
Sshuttle1. SSH 연결 및 대상에 파이썬만 있으면 동작
2. 탐지 가능성 낮음 (SSH 기본 기능 + 파이썬 스크립트)
3. TCP 통신의 경우 proxychains 없이도 완벽히 동작
1. ICMP, UDP 지원하지 않음
2. 대상에 Python 필요
3. 멀티홉(더블 피벗) 복잡해짐

#1. Ligolo (L3 Network)

  • 가상 네트워크 인터페이스(tun)을 만듦. IP 패킷을 통째로 잡아서 터널로 전송
  • IP 위에 얹힌건 뭐든 넘길 수 있음. TCP, UDP, ICMP 등..
  • 대상 호스트에서 agent를 실행하고, Kali에서 tun인터페이스 + 라우팅을 설정 해야함

#2. chisel (L7 - HTTP로 통신, L4 - TCP 스트림 전송)

  • chisel은 HTTP 레이어로 통신. 전달하는 데이터는 TCP
    • WinRM이 HTTP로 통신하는것과 동일한 원리
    • chisel server를 열고, nmap을 localhost로 돌리면 chisel 포트가 http로 노출되는 것을 알 수 있다.
  • chisel은 방화벽 우회에 장점이 있다 (chisel의 HTTP 핸드셰이크 방식)
    • Outbound 규칙은 포트 80/443으로 연결하며 허용
    • 실제 HTTP 트래픽인지 확인하는 DPI(Deep Packet Inspection) 방화벽은 chisel이 WebSocket(HTTP 기반) 으로 동작하기 때문에 통과

#3. SSH (L7 - ssh로 통신, L4 - TCP 스트림 전송)

  • SSH 기본 포트포워딩 기능을 활용
  • TCP 스트림으로 전송하므로, ICMP, UDP 패킷 전송 불가
  • 동적 포트포워딩시 L5 수준, connect()를 후킹하므로, proxychains와 결합이 필요함

#4. Sshuttle (L7 - ssh로 통신, L4 - TCP 스트림 전송)

  • sshuttle이 SSH로 접속한 뒤, 원격에 파이썬 코드를 실시간으로 밀어넣어 그쪽에서 프록시 역할을 하게 만듦.
  • Dynamic 포트포워딩에서도 proxychains가 필요없음
  • 하지만 페이로드 자체는 모두 TCP (+ DNS) 이므로, ICMP, UDP는 불가.