Aller au contenu

Analyse TTP : LOLBAS et Commandes de Reconnaissance Windows

1. La philosophie LOLBAS : se fondre dans le bruit

Section intitulée « 1. La philosophie LOLBAS : se fondre dans le bruit »

L’objectif principal d’un adversaire exploitant les utilitaires Living Off The Land (LOLBAS) est de se faire passer pour un administrateur système légitime.

Le trafic réseau généré par ces commandes est un trafic RPC/SMB Windows standard, et les exécutables (comme cmd.exe, powershell.exe ou certutil.exe) sont sur liste blanche par défaut dans tous les environnements d’entreprise. L’intention malveillante ne peut pas être déterminée par lequel binaire s’exécute, mais plutôt par le contexte de son exécution : qui l’a lancé, quels arguments ont été passés, et quel processus parent l’a généré.

2. Phase de reconnaissance de l’hôte : conscience situationnelle

Section intitulée « 2. Phase de reconnaissance de l’hôte : conscience situationnelle »

Immédiatement après avoir obtenu un point d’ancrage initial (ex: via une charge utile de phishing réussie ou une vulnérabilité web exploitée), un attaquant est effectivement aveugle. Il doit exécuter une série de questions fondamentales pour acquérir une conscience situationnelle sans déposer d’outils de découverte externes sur le disque.

Q : Qui suis-je ? (Vérification des privilèges)

Commande : whoami /all Valeur forensique : révèle le nom d’utilisateur actuel, l’identifiant de sécurité (SID) et, point crucial, toutes les appartenances aux groupes et les privilèges activés (ex: SeDebugPrivilege). C’est presque toujours la toute première commande exécutée pour déterminer si une élévation locale est nécessaire. Commande : quser ou query user Valeur forensique : énumère les autres utilisateurs actuellement connectés à la machine, aidant l’attaquant à éviter d’entrer en collision avec un administrateur informatique actif.

Q : Quelle est cette machine ? (Audit système)

Commande : hostname Commande : systeminfo Valeur forensique : systeminfo est une mine d’or. Il révèle la version de l’OS, l’architecture, l’appartenance au domaine et, plus important encore, la liste des correctifs de sécurité installés (Hotfixes). Les attaquants analysent cette sortie pour trouver des correctifs manquants exploitables pour une élévation locale des privilèges (LPE).

Q : Comment le réseau est-il structuré ?

Commande : ipconfig /all (Révèle les serveurs DNS et DHCP, dessinant la structure du domaine). Commande : netstat -anob Valeur forensique : liste toutes les connexions réseau actives (-an), les exécutables qui les ont initiées (-b) et les ports en écoute (-o). Les attaquants l’utilisent pour comprendre les règles de pare-feu sortantes (egress) et trouver des services locaux vers lesquels pivoter.

Q : Quelles sont les défenses actives ?

Commande : tasklist /svc Valeur forensique : mappe les processus en cours d’exécution à leurs services Windows sous-jacents. Ceci est utilisé pour identifier les agents de détection et réponse des terminaux (EDR) ou les moteurs antivirus actifs avant de tenter une injection en mémoire ou le dépôt de charges utiles.

3. Reconnaissance du domaine : cartographie Active Directory

Section intitulée « 3. Reconnaissance du domaine : cartographie Active Directory »

Une fois que l’attaquant comprend l’hôte local, il pivote pour interroger l’environnement Active Directory (AD) afin d’identifier les “joyaux de la couronne” (contrôleurs de domaine et administrateurs de domaine).

  • net user /domain : énumère tous les comptes d’utilisateurs au sein du domaine AD.
  • net group "Domain Admins" /domain : récupère la liste exacte des cibles hautement privilégiées que l’attaquant doit compromettre pour obtenir la domination totale du domaine.
  • net view /domain : liste les comptes d’ordinateurs actifs à travers le domaine.
  • net share \\[serveur-cible] : énumère les dossiers partagés sur un serveur distant, préparant le terrain pour un mouvement latéral ou l’exfiltration de données.

Puisque les LOLBAS utilisent des binaires de confiance, le contrôle d’intégrité des fichiers (FIM) traditionnel ou la mise sur liste noire des hashs échouera. Les analystes DFIR doivent s’appuyer entièrement sur la télémétrie comportementale.

A. Le prérequis : journalisation de la ligne de commande

Section intitulée « A. Le prérequis : journalisation de la ligne de commande »

Aucune des commandes listées ci-dessus ne peut être détectée de manière fiable à moins que l’organisation n’ait activé l’audit de la ligne de commande via l’Événement 4688 ou déployé Sysmon (Événement 1). Sans les arguments spécifiques de la ligne de commande, une exécution bénigne de net.exe est indiscernable d’une énumération de domaine malveillante.

Comme détaillé dans nos Fondations de la filiation des processus, la relation parent-enfant est l’ultime trahison des attaques LOLBAS.

  • Un whoami.exe exécuté par explorer.exe est inhabituel mais potentiellement bénin.
  • Un whoami.exe exécuté par winword.exe, w3wp.exe (IIS) ou sqlservr.exe est un indicateur définitif et de haute fidélité d’un exploit d’exécution de code à distance ou d’une macro malveillante.

Les administrateurs humains tapent des commandes lentement et lisent la sortie. Les malwares automatisés, les Web Shells ou les balises Cobalt Strike exécutent les commandes de reconnaissance initiales de manière programmatique. Les analystes doivent rechercher une cascade de reconnaissance : l’exécution de whoami, systeminfo, ipconfig et netstat se produisant à quelques millisecondes d’intervalle à partir du même processus parent.

hunt_recon_cascade.kql
// Détecte une succession rapide de commandes de découverte natives (Recon Cascade)
// exécutées par le même processus parent dans une fenêtre d'une minute.
let ReconCommands = dynamic(["whoami.exe", "systeminfo.exe", "ipconfig.exe", "netstat.exe", "tasklist.exe", "quser.exe"]);
DeviceProcessEvents
| where FileName in~ (ReconCommands)
// Regrouper les exécutions par Processus Parent spécifique et par tranches d'1 minute
| summarize ReconCount = dcount(FileName), CommandsExecuted = make_set(ProcessCommandLine)
by InitiatingProcessIdentifier, InitiatingProcessFileName, DeviceName, bin(TimeGenerated, 1m)
// Seuil d'alerte : Au moins 3 outils de reco distincts utilisés en moins d'une minute
| where ReconCount >= 3
| project TimeGenerated, DeviceName, InitiatingProcessFileName, ReconCount, CommandsExecuted
| sort by TimeGenerated desc