SOC Prime Bias: Alto

13 Jan 2026 13:41 UTC

EDRStartupHinder: Bloqueador de Procesos de Inicio de EDR

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Seguir
EDRStartupHinder: Bloqueador de Procesos de Inicio de EDR
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

El artículo describe una herramienta de investigación llamada EDRStartupHinder que abusa del mecanismo Bindlink de Windows para redirigir la carga de una DLL crítica de System32, provocando que un proceso EDR protegido se bloquee durante el inicio. Al instalar un servicio de mayor prioridad y proporcionar una DLL de reemplazo no firmada, el método impide que el componente EDR se inicie, despojando efectivamente al host de protección de endpoint al arrancar.

Investigación

El autor determinó que Microsoft Defender carga msvcp_win.dll durante el inicio y que un servicio asociado con el grupo TDI se inicia antes que Defender. La herramienta copia la DLL legítima, altera el encabezado PE para crear una variante manipulada, registra un servicio llamado DusmSVC-01 y monitorea el proceso Defender (MsMpEng.exe). Luego utiliza Bindlink para redirigir la resolución de la DLL de modo que Defender intente cargar la DLL no firmada. Debido a que el proceso se ejecuta bajo protección PPL, la carga del módulo no firmado provoca la terminación del proceso Defender.

Mitigación

Monitoree la creación de servicios sospechosos o inesperados y para la telemetría que indica el uso de bindlink.dll. Imponga la validación de integridad para las DLL de System32 y alerte sobre duplicados inesperados, mutaciones o redirecciones del camino de carga. Reduzca la viabilidad del ataque restringiendo los permisos de escritura que podrían permitir la redirección de DLL, ajustando controles en torno a KnownDLLs y aplicando políticas de firma de código donde sea operativamente viable.

Respuesta

Si se detecta un nuevo servicio llamado DusmSVC-01 o un comportamiento anómalo de Bindlink, aísle el terminal y valide la integridad de las DLL clave de System32. Restaure cualquier archivo alterado de fuentes confiables o copias de seguridad, luego elimine el servicio malicioso y cualquier artefacto relacionado. Realice una revisión forense para identificar persistencia adicional, escalada de privilegios o actividad posterior asociada con el bypass de protección en el tiempo de inicio.

Flujo de Ataque

Ejecución de Simulación

Prerrequisito: El Control de Telemetría y Línea Base de Prevuelo debe haber pasado.

Narrativa del Ataque y Comandos

El adversario apunta a incapacitar la plataforma de detección de endpoint al entregar una copia alterada de msvcp_win.dll. Los pasos son:

  1. Localizar la DLL de confianza in C:WindowsSystem32.
  2. Copiar a un directorio oculto controlado por el atacante cuyo nombre incluya “FakeLib” (por ej., C:ProgramDataFakeLib).
  3. Corromper la firma añadiendo bytes arbitrarios al final del archivo, asegurando que el hash binario cambie y la firma Authenticode se vuelva inválida.
  4. Activar la ruta de carga del EDR (no simulado aquí) – la presencia de la DLL malformada causará que el EDR falle durante su inicialización.

Script de Prueba de Regresión

# ---------------------------------------------------------------
# Simulación de EDRStartupHinder – copia y corrompe msvcp_win.dll
# ---------------------------------------------------------------

# 1. Definir fuente y destino malicioso
$src  = "$env:SystemRootSystem32msvcp_win.dll"
$dstDir = "C:ProgramDataFakeLib"
$dst  = Join-Path $dstDir "msvcp_win.dll"

# 2. Crear carpeta de destino (oculta)
if (-not (Test-Path $dstDir)) {
    New-Item -Path $dstDir -ItemType Directory | Out-Null
    # Ocultar la carpeta para imitar el sigilo
    (Get-Item $dstDir).Attributes += 'Hidden'
}

# 3. Copiar la DLL legítima
Copy-Item -Path $src -Destination $dst -Force

# 4. Corromper la DLL – añadir 4 bytes aleatorios
$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 "Simulación de EDRStartupHinder completada. DLL copiada a $dst y corrompida."

Comandos de Limpieza

# Eliminar la copia maliciosa y opcionalmente la carpeta oculta
$dstDir = "C:ProgramDataFakeLib"
if (Test-Path $dstDir) {
    Remove-Item -Path $dstDir -Recurse -Force
    Write-Host "Directorio de FakeLib limpiado."

Fin del Informe