Problema

Los dispositivos Windows que dependen solo de TPM para desbloquear BitLocker son vulnerables a ataques de acceso físico que alteran la partición de recuperación (WinRE). Un atacante puede inyectar un ejecutable en la clave BootExecute y ejecutar código antes de que cualquier solución de EDR se active, anulando la autenticación pre‑boot. En entornos con miles de equipos, aplicar la mitigación manual de WinRE y pasar de “TPM‑only” a “TPM+PIN” se vuelve una tarea costosa y propensa a errores. Además, los equipos de soporte deben poder resetear PINs sin romper la política de seguridad.

Causa

  1. Configuración predeterminada TPM‑only – La política de BitLocker en la mayoría de los dominios permite desbloquear automáticamente cuando el TPM está presente y sin PIN.
  2. WinRE sin protección – La imagen de recuperación se monta con permisos que permiten modificar el valor BootExecute. Cualquier proceso con privilegios de sistema puede inyectar binarios.
  3. Ausencia de automatización – La guía de Microsoft para eliminar autofstx.exe requiere montar la partición, editar el hive y volver a habilitar WinRE. Sin scripting, el proceso falla en hardware que usa firmware UEFI con Secure Boot o discos BitLocker‑on‑Boot.
  4. Gestión de PINs fragmentada – Cuando la política de PIN se aplica mediante GPO, los usuarios que olvidan su PIN generan tickets de ayuda. Si el proceso de reset se realiza manualmente, se pierden auditorías y se pueden crear excepciones que debilitan la postura de seguridad.

Solución

Una estrategia reutilizable combina tres pilares:

  1. Política centralizada de TPM+PIN – Usa Intune o GPO para obligar el uso de PIN en todos los dispositivos que soporten TPM.
  2. Script de mitigación WinRE – Automatiza el montaje, la eliminación del archivo malicioso y la re‑activación de WinRE. El script debe registrar cada paso en el log de eventos para auditoría.
  3. Flujo de reset de PIN autoservicio – Implementa Azure AD Self‑Service Password Reset (SSPR) con extensión para PIN, o crea un run‑book de PowerShell que el equipo de helpdesk ejecute bajo privilegios de administrador de dominio.

1. Aplicar TPM+PIN con Intune

  • Crea un perfil de configuración de Endpoint Protection → BitLocker.
  • En la sección Require additional authentication at startup, habilita Require PIN y define la longitud mínima (por ejemplo, 6 dígitos).
  • Asigna el perfil a grupos dinámicos que incluyan todos los equipos con TPM 2.0.
  • En la misma política, marca Allow TPM only como No para evitar retrocesos.

2. Script de mitigación WinRE

El script siguiente cubre los casos más habituales:

  • Detecta si reagentc /info muestra que WinRE está habilitado.
  • Monta la partición de recuperación (mountvol) y carga el hive de registro.
  • Elimina autofstx.exe si está presente y limpia la clave BootExecute.
  • Desmonta el hive y vuelve a habilitar WinRE.
  • Registra el resultado en el Event Log bajo la fuente WinREMitigation.
# PowerShell script (ejecutar como Administrador)
$logSource = "WinREMitigation"
if (-not [System.Diagnostics.EventLog]::SourceExists($logSource)) {
    New-EventLog -LogName Application -Source $logSource
}
function Log($msg, $type="Information") {
    Write-EventLog -LogName Application -Source $logSource -EntryType $type -EventId 1000 -Message $msg
}
# Verificar estado de WinRE
$info = reagentc /info
if ($info -notmatch "Enabled") {
    Log "WinRE no está habilitado, abortando." "Warning"
    exit 1
}
# Obtener la letra de la partición de WinRE
$winrePath = (reagentc /info | Select-String "Winre location").ToString().Split(":")[1].Trim()
$drive = $winrePath.Substring(0,2)
# Montar la partición
mountvol $drive /S
if ($LASTEXITCODE -ne 0) { Log "Error al montar $drive" "Error"; exit 1 }
# Cargar hive
reg load HKLM\WinRE $drive\Recovery\WindowsRE\mount\system
if ($LASTEXITCODE -ne 0) { Log "Error al cargar hive" "Error"; exit 1 }
# Eliminar autofstx.exe y limpiar BootExecute
$exePath = "$drive\Windows\System32\autofstx.exe"
if (Test-Path $exePath) { Remove-Item $exePath -Force; Log "autofstx.exe eliminado" }
$bootKey = "HKLM:\WinRE\ControlSet001\Control\Session Manager\BootExecute"
Set-ItemProperty -Path $bootKey -Name "(Default)" -Value "*\autocheck autochk *"
Log "BootExecute restaurado"
# Descargar hive
reg unload HKLM\WinRE
mountvol $drive /D
# Re‑habilitar WinRE
reagentc /enable
if ($LASTEXITCODE -eq 0) { Log "WinRE re‑habilitado correctamente" } else { Log "Fallo al habilitar WinRE" "Error" }

3. Reset de PIN autoservicio

  • Azure AD SSPR: habilita la opción Require multi‑factor authentication to reset y añade la extensión BitLocker PIN reset disponible en el Marketplace.
  • Run‑book PowerShell (para entornos sin Azure AD): crea un script que reciba el DeviceId, genere un PIN temporal y lo aplique mediante Enable-BitLocker -MountPoint C: -Pin <pin> -TpmProtector. El script escribe la operación en un registro de auditoría y envía una notificación por correo al usuario.

Cuándo aplicar esta solución

  • Entornos con más de 100 dispositivos Windows que usan BitLocker y TPM.
  • Política de cumplimiento que exige autenticación de pre‑boot (PCI‑DSS, NIST 800‑53).
  • Incidentes de WinRE comprometido o detección de archivos sospechosos en la partición de recuperación.
  • Helpdesk con alta carga de tickets de PIN donde el tiempo de resolución supera 30 minutos por caso.

No es necesario aplicar el script de mitigación si la organización ya utiliza WinRE cifrado con BitLocker‑on‑Boot y ha deshabilitado la edición de BootExecute mediante políticas de firmware (Secure Boot + Configuración de arranque protegido). En esos casos, la única medida requerida es la política TPM+PIN.

Código

# Ejemplo de despliegue de política Intune vía PowerShell Graph
Connect-MgGraph -Scopes "DeviceManagementConfiguration.ReadWrite.All"
$profile = @{
    displayName = "TPM+PIN Enforcement"
    description = "Obliga PIN en dispositivos con TPM"
    platform = "windows10"
    settings = @(
        @{
            "@odata.type" = "#microsoft.graph.deviceManagementConfigurationSetting"
            settingInstance = @{
                "@odata.type" = "#microsoft.graph.deviceManagementConfigurationSimpleSettingInstance"
                simpleSettingValue = @{
                    "@odata.type" = "#microsoft.graph.deviceManagementConfigurationStringValue"
                    value = "Require"
                }
                settingDefinitionId = "bitlockerRequirePin"
            }
        }
    )
}
New-MgDeviceManagementConfigurationPolicy -BodyParameter $profile

Verificación

  1. Comprobar política: Get-MpPreference | Select-Object -ExpandProperty BitLockerPolicy debe mostrar RequirePin = True.
  2. Validar WinRE: reagentc /info debe devolver WinRE status: Enabled y la ruta de la partición sin autofstx.exe.
  3. Test de PIN: Reinicia una máquina de prueba, verifica que el prompt de PIN aparece antes de cargar el sistema.
  4. Auditoría: Busca en el Event Log entradas con la fuente WinREMitigation y confirma que no hay errores críticos.

Notas adicionales

  • En hardware con firmware UEFI que desactiva la partición de recuperación, el script fallará al montar la unidad. En esos casos, habilita la opción Create a recovery partition en la política de BitLocker antes de ejecutar la mitigación.
  • Algunos fabricantes bloquean la escritura en la partición de WinRE a través de una política de BIOS. Verifica la configuración de Secure Boot y, si es necesario, agrega la excepción en la lista de arranque seguro.
  • Cuando uses GPO, la opción Require additional authentication at startup se encuentra bajo Computer Configuration → Policies → Administrative Templates → Windows Components → BitLocker Drive Encryption → Operating System Drives.
  • Mantén un inventario de versiones de firmware; los fallos silenciosos de reagentc suelen aparecer en laptops con controladores de disco RAID antiguos. Actualizar el driver del controlador SATA/RAID suele resolver el problema.