Retour aux notes

Note technique

Threat hunting sur Stuxbot avec Elastic

Chasse guidée par un rapport de threat intelligence : reconstruction complète d'une chaîne de phishing jusqu'à la persistance, à partir des journaux Sysmon, Windows et Zeek.

  • DomaineThreat hunting

TL;DR#

Hunt guidé par un rapport de threat intel sur Stuxbot (cybercrime, phishing opportuniste "anyone, anytime", motivation espionnage, cible Windows, risque critique). Hypothèse de départ : un email de phishing a livré avec succès un fichier OneNote malveillant (invoice.one). L'hypothèse conditionne la séquence de recherche : partir d'un hash exécuté aurait donné une autre séquence. Chaîne d'attaque reconstruite via les logs Elastic (Sysmon + Windows audit + PowerShell + Zeek) : 1. Bob télécharge invoice.one depuis file.io via MSEdge (Sysmon EID 15, puis corrélation Zeek DNS/connexions car Sysmon ne logge pas les connexions navigateur). Machine WS001 / 192.168.28.130, le 26/03/2023 22:05:47 (Europe/Copenhagen). 2. Ouverture avec OneNote 6s plus tard (EID 1, process.command_line:*invoice.one*). 3. ONENOTE.EXEcmd.exe exécute invoice.bat depuis un dossier temp (EID 1, process.parent.name:"ONENOTE.EXE"). 4. invoice.batpowershell.exe qui télécharge et exécute un script depuis Pastebin (stage 0). process.parent.command_line:*invoice.bat*. 5. Le PowerShell (PID 9944) : création de fichiers, DNS pour ngrok.io (C2 masqué, trafic chiffré port 443), dépôt de default.exe (persistance), requêtes DNS et connexions vers DC1. 6. default.exe : hash SHA256 = IOC du rapport. Exécuté, lance des DNS ngrok, upload svchost.exe, SharpHound.exe, payload.exe, un VBS. SharpHound exécuté 2x (reconnaissance AD). 7. Recherche large sur le hash de default.exe → présent aussi sur PKI, lancé via PSEXESVC (PsExec, lateral movement) sous le compte svc-sql1 (compromis, backdoor sous son profil). 8. Compromission de svc-sql1 probablement via bruteforce du script PowerShell depuis WS001 → recherche 4624/4625 LogonType 3 depuis 192.168.28.130. Assets compromis identifiés : WS001 (Bob, patient zéro), PKI, compte svc-sql1, activité vers DC1.

Rapport de Threat Intel : Stuxbot#

ChampValeur
NatureCollectif cybercrime organisé, campagnes de phishing depuis début 2023
CiblageOpportuniste, aucune stratégie de ciblage ("anyone, anytime"), peu de spear-phishing
MotivationEspionnage (pas d'exfil de blueprints/infos business, pas de ransomware ni extorsion)
Plateforme viséeMicrosoft Windows
Impact potentielPrise de contrôle complète de la machine / escalade domaine
RisqueCritique
Accès initialPhishing opportuniste (emails issus de réseaux sociaux, breaches passés, sites corporate)

Séquence d'attaque (device initialement compromis)#

Capture d'écran
Capture d'écran
PhaseDétail
Initial BreachEmail de phishing basique, malware déguisé en facture. Lien vers un fichier OneNote hébergé sur un file hosting (Mega.io, file.io, transfer.sh...). Le OneNote se fait passer pour une facture avec un bouton "HIDDEN" déclenchant un batch embarqué, qui récupère des scripts PowerShell (stage 0).
RATModulaire, extensible. Fonctions observées : screen dumps, Mimikatz, shell CMD interactif.
PersistenceToujours via un fichier EXE déposé sur disque.
Lateral Movement2 méthodes : PsExec original signé Microsoft, ou WinRM.

IOCs#

TypeValeurs
Fichier OneNotetransfer.sh/get/kNxU7/invoice.one, mega.io/dl9o1Dz/invoice.one
Staging (PowerShell)pastebin.com/raw/AvHtdKb2, pastebin.com/raw/gj58DKz
C&C91.90.213.14:443, 103.248.70.64:443, 141.98.6.59:443
Hashes SHA256226A723FFB4A91D9950A8B266167C5B354AB0DB1DC225578494917FE53867EF2<br>C346077DAD0342592DB753FE2AB36D2F9F1C76E55CF8556FE5CDA92897E99C7E<br>018D37CBD3878258C29DB3BC3F2988B6AE688843801B9ABC28E6151141AB66D4 (= default.exe)

Setup de l'environnement de hunt#

Cible : Kibana sur http://[Target IP]:5601 → Discover. Time range : last 15 years. Timezone : Europe/Copenhagen (via http://[Target IP]:5601/app/management/kibana/settings). Threat intel datée de mars 2023, il faut donc scanner au moins jusque-là.

Capture d'écran
SourceIndex patternContenu
Windows audit logswindows*Événements de sécurité Windows (4624, 4625...)
Sysmonwindows*Process, réseau, fichiers, DNS (voir table EID ci-dessous)
PowerShell logswindows*Script block logging
Zeekzeek*Network security monitoring (DNS, connexions)

Volumétrie : ~118 975 logs windows, ~332 261 logs zeek.

Contexte org : ~200 employés, marketing en ligne, suite Office, Gmail via navigateur, Edge par défaut, support via TeamViewer, gestion par GPO AD (migration Intune + Win11 envisagée).

Déroulé du hunt#

Hypothèse : phishing réussi livrant un OneNote malveillant. Toujours chercher aussi les autres IOCs (les TTPs peuvent avoir évolué depuis le rapport).

Vue d'ensemble :

#ObjectifRequête KQL
1Téléchargement navigateur de invoice.one (Sysmon EID 15)event.code:15 AND file.name:*invoice.one*
2Confirmer via création de fichier (Sysmon EID 11)event.code:11 AND file.name:invoice.one*
3Confirmer l'IP de WS001 (Sysmon EID 3)event.code:3 AND host.hostname:WS001
4Connexions réseau autour du téléchargement (Sysmon EID 3)(même période)
5Requêtes DNS de WS001 pendant le téléchargement (Zeek)source.ip:192.168.28.130 AND dns.question.name:*
6Connexions vers les IPs de file.io(recherche des IPs résolues)
7Ouverture du OneNote (Sysmon EID 1)event.code:1 AND process.command_line:*invoice.one*
8Processus enfants de OneNoteevent.code:1 AND process.parent.name:"ONENOTE.EXE"
9Enfants du batchevent.code:1 AND process.parent.command_line:*invoice.bat*
10Activité du PowerShell stage 0process.pid:"9944" and process.name:"powershell.exe"
11Zeek sur l'IP C2(filtre sur destination.ip du C2)
12default.exe a-t-il été exécuté ?process.name:"default.exe"
13SharpHound exécuté ?process.name:"SharpHound.exe"
14Le hash de default.exe ailleurs ?process.hash.sha256:018d37cbd3878258c29db3bc3f2988b6ae688843801b9abc28e6151141ab66d4
15Comment default.exe a atterri sur PKI ?(expand 1re exécution sur PKI)
16Compromission de svc-sql1 (bruteforce depuis WS001)(event.code:4624 OR event.code:4625) AND winlog.event_data.LogonType:3 AND source.ip:192.168.28.130

1. Téléchargement du fichier OneNote (Sysmon EID 15)#

Sysmon Event ID 15 (FileCreateStreamHash) = événement de téléchargement de fichier via navigateur. On suppose que le OneNote a été téléchargé depuis Gmail.

Champs liés : winlog.event_id ou event.code, file.name.

text
event.code:15 AND file.name:*invoice.one
Capture d'écran

En dépliant le log : process.name / process.executable = MSEdge, fichier stocké dans le dossier Downloads d'un employé nommé Bob. Timestamp : March 26, 2023 @ 22:05:47. Pas encore confirmé qu'il s'agit du fichier du rapport, ni d'exécution.

2. Confirmation via création de fichier (Sysmon EID 11)#

Sysmon Event ID 11 (File create). Utile surtout quand le navigateur n'est pas impliqué. L'astérisque est en fin : le nom inclut le fichier + un Zone Identifier (le fichier vient d'internet).

text
event.code:11 AND file.name:invoice.one*
Capture d'écran

Machine = hostname WS001 (host.hostname / host.name), IP 192.168.28.130.

3. Confirmation de l'IP de WS001 (Sysmon EID 3)#

text
event.code:3 AND host.hostname:WS001
Capture d'écran

Le champ source.ip confirme 192.168.28.130.

4. Connexions réseau autour du téléchargement (Sysmon EID 3)#

En inspectant Sysmon Event ID 3 (Network connection) autour de l'heure du téléchargement : aucune entrée. Config courante pour éviter de capturer les connexions navigateur (volume énorme, notamment vers le provider mail). On bascule sur Zeek.

5. Requêtes DNS de WS001 pendant le téléchargement (Zeek)#

Fenêtre : March 26th 2023 @ 22:05:0022:05:48. Recherche d'une IP source = 192.168.28.130 avec quelque chose dans dns.question.name. Beaucoup de bruit (google.com...) à filtrer.

Champs liés : source.ip, dns.question.name.

text
source.ip:192.168.28.130 AND dns.question.name:*
Capture d'écran

Identifier le bruit via les "top values" Kibana (cliquer sur le champ) puis filtrer les valeurs bruyantes connues. Afficher uniquement la colonne dns.question.name.

Capture d'écran
Capture d'écran

Séquence observée : accès à Google Mail → interaction avec file.io (hébergeur connu) → scan Microsoft Defender SmartScreen (déclenché par un download via Edge).

6. Connexions vers les IPs de file.io#

En dépliant le log file.io, les IPs renvoyées (dns.answers.data / dns.resolved_ip / zeek.dns.answers) : 34.197.10.85, 3.213.216.16.

Capture d'écran

Recherche de connexions vers ces IPs sur la même fenêtre :

Capture d'écran

Confirme que Bob a bien téléchargé invoice.one depuis file.io. À ce stade : soit croiser avec le rapport de Threat Intel, soit mener une investigation type IR pour tracer la suite. On choisit la seconde.

7. Ouverture du fichier OneNote (Sysmon EID 1)#

Si invoice.one a été ouvert, ce serait avec l'application OneNote. Retirer le filtre temps (remettre 15 ans), retirer la colonne dns.question.name.

Champs liés : winlog.event_id ou event.code, process.command_line.

text
event.code:1 AND process.command_line:*invoice.one*
Capture d'écran

Fichier ouvert ~6 secondes après le téléchargement. OneNote.exe tourne avec le fichier ouvert → il contient probablement un lien ou une pièce jointe malveillante.

8. Processus enfants de OneNote (Sysmon EID 1)#

OneNote.exe va lancer soit un navigateur soit un fichier malveillant. On regarde les nouveaux processus dont OneNote.exe est le parent.

Champs liés : winlog.event_id ou event.code, process.parent.name.

text
event.code:1 AND process.parent.name:"ONENOTE.EXE"
Capture d'écran

3 hits, dont 1 hors période (écarté). Restent :

  • OneNoteM.exe : composant légitime de OneNote qui aide à lancer des fichiers.
  • cmd.exe exécutant un fichier invoice.bat.
Capture d'écran

Lien établi : OneNote.exeinvoice.one suspect → cmd.exe lançant invoice.bat depuis un emplacement temporaire (très probablement attaché dans le OneNote).

9. Enfants du batch (Sysmon EID 1)#

Est-ce que le batch a lancé autre chose ? On cherche un processus parent dont la ligne de commande pointe vers le batch.

Champs liés : winlog.event_id ou event.code, process.parent.command_line.

text
event.code:1 AND process.parent.command_line:*invoice.bat*
Capture d'écran

1 seul résultat : lancement de powershell.exe avec des arguments très suspects (colonnes ajoutées : process.name, process.args, process.pid) : commande de download + exécution de contenu depuis Pastebin.

Capture d'écran

Le contenu Pastemin est encore accessible (pas d'expiration par défaut) : c'est bien le script PowerShell mentionné dans le rapport de Threat Intel.

10. Activité du PowerShell stage 0 (PID 9944)#

Filtrer sur le PID et le nom du processus pour avoir une vue d'ensemble des activités (colonne event.code ajoutée).

Champs liés : process.pid, process.name.

text
process.pid:"9944" and process.name:"powershell.exe"
Capture d'écran

Création de fichiers, tentatives de connexions réseau, résolutions DNS via Sysmon Event ID 22 (DNSEvent). En ajoutant file.path, dns.question.name, destination.ip comme colonnes :

Capture d'écran
  • ngrok.io probablement utilisé comme C2 (masque le trafic malveillant derrière un domaine connu). Connexions vers port 443 → trafic chiffré.
  • EXE déposé (default.exe) probablement pour la persistance ; nom distinctif = facile à pister.
  • Écarts de temps entre les actions → probable interaction humaine réelle (sauf sleep aléatoire).
  • Actions finales : requête DNS pour DC1 et connexions vers celui-ci.

11. Zeek sur l'IP C2 (18.158.249.75)#

Colonnes ajoutées : source.ip, destination.ip, destination.port.

Capture d'écran

L'activité s'étend au jour suivant. En inspectant les requêtes DNS pour ngrok.io, l'IP renvoyée (dns.answers.data) a changé, et les connexions continuent les jours suivants.

Capture d'écran

Activité réseau soutenue → C2 accédé en continu.

12. default.exe a-t-il été exécuté ?#

Champ lié : process.name. Colonnes : process.name, process.args, event.code, file.path, destination.ip, dns.question.name.

text
process.name:"default.exe"
Capture d'écran

Oui. L'exécutable lance des requêtes DNS ngrok et se connecte aux IPs C2. Il uploade svchost.exe (mimique le binaire Windows légitime) et SharpHound.exe (outil de cartographie AD / attack paths). Plus haut : upload de payload.exe, d'un VBS, et uploads répétés de svchost.exe.

Capture d'écran

13. SharpHound a-t-il été exécuté ?#

text
process.name:"SharpHound.exe"
Capture d'écran

Exécuté 2 fois, à ~2 min d'intervalle → reconnaissance Active Directory effectuée.

14. Le hash de default.exe ailleurs dans l'environnement ?#

Sysmon a flagué default.exe avec un process.hash.sha256 qui correspond à un hash du rapport de Threat Intel. Recherche large (colonne host.hostname ajoutée).

Champ lié : process.hash.sha256.

text
process.hash.sha256:018d37cbd3878258c29db3bc3f2988b6ae688843801b9abc28e6151141ab66d4
Capture d'écran

Présent sur WS001 et PKI → l'attaquant a compromis au moins le serveur PKI. Un fichier backdoor est déposé sous le profil de l'utilisateur svc-sql1 → compte probablement compromis.

Capture d'écran

15. Comment default.exe a atterri sur PKI ?#

En dépliant la 1re exécution de default.exe sur PKI : le processus parent est PSEXESVC, composant de PsExec (SysInternals) souvent utilisé pour l'exécution de commandes à distance et le lateral movement en AD.

Capture d'écran

Plus bas dans le même log, svc-sql1 dans le champ user.name → confirme la compromission de ce compte.

16. Comment le mot de passe de svc-sql1 a-t-il été compromis ?#

Hypothèse la plus plausible : le script PowerShell uploadé plus tôt (semble conçu pour le bruteforce de mots de passe), présent sur WS001. On cherche les tentatives réussies/échouées depuis cette machine, en excluant Bob (utilisateur légitime) et la machine elle-même.

Champs liés : winlog.event_id ou event.code, winlog.event_data.LogonType, source.ip.

text
(event.code:4624 OR event.code:4625) AND winlog.event_data.LogonType:3 AND source.ip:192.168.28.130
Capture d'écran

LogonType 3 = network logon.

Sysmon Event IDs utilisés#

EIDNomUsage dans le hunt
1Process creationChaîne parent/enfant, process.command_line, process.parent.command_line, process.args, process.hash.sha256
3Network connectionConfirmer IP d'un hôte ; souvent PAS de connexions navigateur (config volontaire)
11File createCréation de fichier sur disque (utile hors navigateur), Zone.Identifier
15FileCreateStreamHashTéléchargement de fichier via navigateur
22DNSEventRésolutions DNS par processus

Quand Sysmon EID 3 est muet (connexions navigateur non loggées), les logs Zeek (DNS, connexions) prennent le relais pour la corrélation temporelle.

Bilan#

AssetÉtat
WS001 (Bob)Patient zéro : download + exécution du OneNote, script PS bruteforce, SharpHound
Compte svc-sql1Compromis (probable bruteforce depuis WS001), backdoor sous son profil
PKICompromis via PsExec avec svc-sql1
DC1Ciblé (DNS + connexions depuis le stage PowerShell)
C2ngrok.io (IP rotative), trafic chiffré port 443

Voir Cyber Threat Intelligence (CTI) pour la méthode d'exploitation d'un rapport tactique, et Elastic Stack pour la syntaxe KQL.

Retour aux notes