SOC Prime Bias: Élevé

13 Jan 2026 16:41

EDRStartupHinder : Bloqueur de Processus de Démarrage EDR

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Suivre
EDRStartupHinder : Bloqueur de Processus de Démarrage EDR
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

L’article décrit un outil de recherche appelé EDRStartupHinder qui abuse du mécanisme Bindlink de Windows pour rediriger le chargement d’une DLL critique de System32, provoquant le crash d’un processus EDR protégé lors du démarrage. En installant un service de priorité supérieure et en fournissant une DLL de remplacement non signée, la méthode empêche le composant EDR de s’initialiser, dépouillant efficacement l’hôte de protection de point final au démarrage.

Enquête

L’auteur a déterminé que Microsoft Defender charge msvcp_win.dll au démarrage et qu’un service associé au groupe TDI se lance plus tôt que Defender. L’outil copie la DLL légitime, altère l’en-tête PE pour créer une variante modifiée, enregistre un service nommé DusmSVC-01, et surveille le processus Defender (MsMpEng.exe). Il utilise ensuite Bindlink pour rediriger la résolution de la DLL afin que Defender tente de charger la DLL non signée. Comme le processus s’exécute sous protection PPL, le chargement d’un module non signé déclenche la terminaison du processus Defender.

Atténuation

Surveiller les événements de création de service suspects ou inattendus et les télémetries indiquant l’utilisation de bindlink.dll. Appliquer une validation d’intégrité pour les DLL de System32 et alerter sur les duplicatas, mutations ou redirections de chemin de chargement inattendus. Réduire la faisabilité des attaques en restreignant les permissions d’écriture qui pourraient permettre la redirection de DLL, en renforçant les contrôles autour de KnownDLLs, et en appliquant des politiques de signature de code là où cela est faisable.

Réponse

Si un nouveau service nommé DusmSVC-01 ou un comportement anormal de Bindlink est détecté, isoler le point final et valider l’intégrité des DLL clés de System32. Restaurer les fichiers altérés depuis des sources ou des sauvegardes de confiance, puis supprimer le service malveillant et tout artefact lié. Achever un examen forensique pour identifier toute persistance additionnelle, escalade de privilèges, ou activité de suivi associée au contournement de protection au démarrage.

« graph TB %% Class Definitions classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef operator fill:#ff9900 %% Nodes step_create_service[« <b>Action</b> – <b>T1542 Pré-démarrage OS</b><br/>Créer un service Windows malveillant (EDRStartupHinder) configuré pour démarrer avant le service cible de l’EDR. »] class step_create_service action step_modify_registry[« <b>Action</b> – <b>T1484 Modification de politique de domaine ou de locataire</b><br/>Modifier l’ordre du groupe de services et la configuration de Bindlink dans le registre pour prioriser le service malveillant et permettre la redirection de DLL. »] class step_modify_registry action step_hijack_dll[« <b>Action</b> – <b>T1574.001 Détournement de l’ordre de recherche DLL</b> & <b>T1055.001 Injection de bibliothèque dynamique -link</b><br/>Rediriger une DLL centrale (par ex., msvcp_win.dll) via Bindlink pour que le processus EDR charge une copie malveillante. »] class step_hijack_dll action step_corrupt_dll[« <b>Action</b> – <b>T1574.001 Redirection DLL – Corruption de l’en-tête PE</b><br/>Altérer l’en-tête PE de la DLL copiée pour invalider sa signature, garantissant que le processus EDR protégé rejette la bibliothèque. »] class step_corrupt_dll action step_dos[« <b>Action</b> – <b>T1499.004 Déni de service sur le point final</b><br/>Le service EDR échoue à charger la DLL requise et se termine, réalisant un déni de service sur le composant de sécurité. »] class step_dos action %% Edges step_create_service u002du002d>|conduit à| step_modify_registry step_modify_registry u002du002d>|permet| step_hijack_dll step_hijack_dll u002du002d>|cause| step_corrupt_dll step_corrupt_dll u002du002d>|résulte en| step_dos « 

Flux d’attaque

Exécution de simulation

Prérequis : La vérification préliminaire de la télémetrie et de la base de référence doit être réussie.

Narrative d’attaque & Commandes

L’adversaire vise à paralyser la plateforme de détection du point final en livrant une copie falsifiée de msvcp_win.dll. Les étapes sont :

  1. Localiser la DLL de confiance in C:WindowsSystem32.
  2. Copier la vers un répertoire contrôlé par l’attaquant caché dont le nom inclut « FakeLib » (par ex., C:ProgramDataFakeLib).
  3. Corrompre la signature en ajoutant des octets arbitraires à la fin du fichier, garantissant que le hachage binaire change et que la signature Authenticode devienne invalide.
  4. Déclencher le chemin de chargement de l’EDR (non simulé ici) – la présence de la DLL mal formée fera échouer l’EDR lors de son initialisation.

Script de test de régression

# ---------------------------------------------------------------
# Simulation EDRStartupHinder – copie et corrompt msvcp_win.dll
# ---------------------------------------------------------------

# 1. Définir la source et la destination malveillante
$src  = "$env:SystemRootSystem32msvcp_win.dll"
$dstDir = "C:ProgramDataFakeLib"
$dst  = Join-Path $dstDir "msvcp_win.dll"

# 2. Créer le dossier de destination (caché)
if (-not (Test-Path $dstDir)) {
    New-Item -Path $dstDir -ItemType Directory | Out-Null
    # Cacher le dossier pour simuler la furtivité
    (Get-Item $dstDir).Attributes += 'Hidden'
}

# 3. Copier la DLL légitime
Copy-Item -Path $src -Destination $dst -Force

# 4. Corrompre la DLL – ajouter 4 octets aléatoires
$rand = -join ((65..90) + (97..122) | Get-Random -Count 4 | % {[char]$_})
[IO.File]::OpenWrite($dst).Seek(0, [IO.SeekOrigin]::End) | Out-Null
[IO.File]::WriteAllBytes($dst, [byte[]]($rand.ToCharArray() | ForEach-Object {[byte][char]$_}))

Write-Host "Simulation EDRStartupHinder complétée. DLL copiée sur $dst et corrompue."

Commandes de nettoyage

# Supprimer la copie malveillante et éventuellement le dossier caché
$dstDir = "C:ProgramDataFakeLib"
if (Test-Path $dstDir) {
    Remove-Item -Path $dstDir -Recurse -Force
    Write-Host "Dossier FakeLib nettoyé."

Fin du rapport