Initial Access Simule: Macros, LNK et ISO dans un Lab Windows 11 Isole
Nous rejouons trois vecteurs classiques d'initial access dans un lab Windows 11 ferme pour voir ce que l'EDR enregistre vraiment et ou la detection lache.
Quiconque fait du red team sait que l'initial access reste le chapitre le plus tetu du playbook. Les macros Office ont ete declarees mortes en 2022 quand Microsoft a bloque VBA par defaut sur les fichiers venant d'internet, et pourtant, en 2025, Mandiant cartographiait encore les campagnes de Storm-0978 livrant des .docm via HTML smuggling. Nous avons monte un lab sur Windows 11 23H2, avec Defender for Endpoint en mode audit et Sysmon 15 utilisant la config SwiftOnSecurity, pour rejouer trois vecteurs: macro VBA classique, fichier LNK avec arguments obfusques, et ISO contenant un LNK plus une DLL side-loading. Tout hors ligne, VLAN isole, snapshot avant chaque execution. L'objectif n'a jamais ete de casser l'EDR, mais de comprendre ce qu'il loggue reellement.
Premier test, la macro. Nous avons forge un .docm avec AutoOpen appelant WScript.Shell pour recuperer un payload via certutil. Mark-of-the-Web intact, Defender bloque avant le prompt. En retirant MOTW via un Alternate Data Stream vide (powershell -Command "Clear-Content -Stream Zone.Identifier"), la macro s'execute. Dans Sysmon EventID 1, winword.exe lance cmd.exe avec la command line complete, et EventID 3 montre la sortie sur le port 80. Cela colle a la regle Sigma proc_creation_win_office_susp_child_processes que beaucoup d'equipes possedent deja. Pour comprendre le pipeline defensif de bout en bout, relire Threat Hunting avec Sigma et Elastic: De l'Indicateur a la Regle de Detection et croiser avec Hunting des Living-off-the-Land Binaries sous Windows avec KQL, car le probleme est rarement l'absence de regle, c'est qu'elle n'est pas activee en production.
Vecteur deux: LNK. Nous avons fabrique un raccourci dont la cible pointe vers powershell.exe -nop -w hidden -enc
Vecteur trois, le plus reussi cote camouflage: ISO contenant un LNK plus une DLL legitime vulnerable au side-loading. Nous attachons l'ISO via le mount automatique (comportement par defaut de l'Explorer Windows 11). L'utilisateur voit juste un "PDF" qui est en realite le LNK invoquant une copie renommee de OneDriveStandaloneUpdater.exe, qui charge notre version.dll depuis le meme dossier. Comme c'est un binaire signe Microsoft qui appelle LoadLibrary, la telemetrie EventID 7 (Image loaded) montre la DLL non signee, mais le parent reste legitime. Defender silencieux. Il a fallu activer la regle ASR Block untrusted unsigned processes that run from USB et l'etendre aux mounted images, ce que Adversary Emulation avec Caldera et MITRE ATT&CK en Lab d'Entreprise couvre aussi.
Ce qu'on retient en comparant les trois tests: la detection depend bien plus de la configuration que du produit. Sysmon sans schema curate, PowerShell sans ScriptBlockLogging, ASR eternellement en audit, MOTW supprime par d'anciennes versions de 7zip. Chacun de ces points transforme un vecteur visible en vecteur aveugle. A noter que rien de tout cela n'est neuf, ces trois comportements sont mappes sur T1566.001, T1204.002 et T1574.002 du MITRE ATT&CK depuis des annees. Les equipes qui n'ont pas encore construit la boucle decrite dans Purple Team en Pratique: Construire une Boucle de Feedback Red vs Blue vont continuer a redecouvrir les memes ecarts au lieu de les fermer une fois pour toutes.
Nous avons aussi joue la chaine complete en montant un C2 minimaliste pour valider le callback, sur une autre VLAN pour ne pas melanger le trafic de simulation avec celui de gestion. Les details operationnels de cette partie sont dans Construire une Infra C2 avec Sliver en Lab Isole pour la Recherche Defensive, deja documente. Le point cle: l'initial access ne se termine pas a l'execution, il se termine a un beacon stable; chaque hop suivant a sa propre fenetre de detection. Si vous ne regardez que l'EventID 1 de Sysmon sans correler avec DNS, TLS JA3 et flux sortants, vous ratez la moitie de l'histoire.
A retenir: ne gachez pas un sprint a reecrire de l'obfuscation de macros si votre equipe n'a pas encore active ScriptBlockLogging, deploye un Sysmon avec config curated et sorti ASR du mode audit. Rejouez les trois vecteurs de ce post dans un lab isole, snapshotte, sans lien avec la production, et produisez les preuves de quel EventID se declenche a quelle etape. Documentez l'ecart. Ensuite seulement, il devient pertinent d'aller vers des techniques plus bruyantes comme les direct syscalls, couvertes dans Evasion EDR pour la Recherche: Direct Syscalls Expliques sans Romance. Un outil cher sans configuration decente reste un joli dashboard pendant que l'adversaire traverse le terrain vague d'a cote.