SOC Prime Bias: Élevé

13 Jan 2026 13:41 UTC

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.

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