Problema
Muchas organizaciones que migraron recientemente a Windows 11 todavía gestionan los equipos de forma manual. Cuando el número de estaciones supera el centenar, habilitar BitLocker de forma individual se vuelve inviable. El reto típico es:
- Automatizar la activación y el cifrado de los discos del sistema.
- Garantizar que la clave de recuperación y el TPM se almacenen en Active Directory (AD).
- Evitar bloqueos de BitLocker provocados por actualizaciones de firmware o por la pérdida de la configuración del BIOS/CMOS.
- Mantener visibilidad de errores sin depender de herramientas de gestión de terceros.
El problema no es exclusivo de un caso concreto; cualquier entorno híbrido (on‑prem AD + equipos sin MDM) que necesite escalar la protección de datos se enfrenta a los mismos obstáculos.
Causa
-
Falta de automatización centralizada – Sin una política de grupo que invoque scripts, cada máquina requiere intervención manual para iniciar BitLocker y registrar la clave en AD.
-
Inconsistencias de TPM/Firmware – Actualizaciones de BIOS/UEFI pueden cambiar el estado del TPM (por ejemplo, desactivar la protección del arranque) y provocar que BitLocker se quede “bloqueado” al reiniciar.
-
CMOS agotada – Cuando la batería del CMOS falla, la BIOS puede resetear la configuración del TPM y del arranque seguro, lo que también genera un lockout.
-
Equipos fuera del dominio – Los dispositivos que no pueden contactar a AD no pueden publicar la clave de recuperación, lo que obliga a usar soluciones externas o a excluirlos del despliegue.
-
Políticas de cifrado incompletas – Si la política no obliga a usar TPM + PIN o a crear una clave de recuperación, el proceso puede quedar a medio camino y generar alertas en el visor de eventos.
Solución
Una estrategia reutilizable combina Group Policy, PowerShell y AD backup. Los pasos clave son:
-
Crear una GPO de arranque que ejecute dos scripts: uno que verifique el estado del cifrado y, si es necesario, inicie BitLocker; otro que compruebe que la clave está en AD y, de no ser así, la publique.
-
Configurar la política de BitLocker en la GPO:
- Requerir TPM y, opcionalmente, PIN.
- Habilitar el respaldo automático a AD (
EnableBDE). - Definir el método de cifrado (XTS‑AES 256) y el porcentaje de cifrado inicial (por ejemplo, 50 % para minimizar el impacto de la primera fase).
-
Implementar scripts idempotentes. Cada script debe registrar su ejecución en el Event Viewer (ID de evento propio) y salir sin error si el estado ya está correcto. De esta forma, la GPO puede ejecutarse en cada arranque sin generar bucles.
-
Gestionar actualizaciones de firmware:
- Desactivar temporalmente la política que fuerza el arranque seguro antes de aplicar una actualización de BIOS.
- Reiniciar el equipo, aplicar la actualización y volver a habilitar la política.
- Registrar el proceso en el mismo log para auditoría.
-
Monitorear la batería del CMOS:
- Añadir una comprobación de
Get-WmiObject -Class Win32_Battery(aunque la mayoría de PCs de escritorio no exponen la batería, el comandoGet-WmiObject -Class Win32_BIOSpermite leer el estado del CMOS). - Si la batería está por debajo de un umbral, crear un ticket automático o marcar el equipo para mantenimiento físico.
- Añadir una comprobación de
-
Manejar equipos fuera del dominio:
- Usar Action1 (u otra herramienta RMM) para ejecutar el mismo script, pero almacenar la clave en un vault interno y notificar al equipo de seguridad.
- Alternativamente, crear una OU “No‑Domain” y aplicar una GPO que solo active BitLocker sin intentar publicar en AD; la clave se exporta a un archivo cifrado y se envía por correo seguro al administrador.
Flujo de trabajo recomendado
| Paso | Acción | Resultado |
|---|---|---|
| 1 | GPO → CheckDrivesEncrypted.ps1 |
Detecta discos sin cifrar y lanza Enable-BitLocker. |
| 2 | GPO → CheckKeys.ps1 |
Verifica que la clave de recuperación está en AD; si falta, la publica. |
| 3 | Event Viewer → Log personalizado (ID 6000‑6002) | Historial de intentos y éxitos. |
| 4 | Firmware update script (opcional) | Desactiva Secure Boot, actualiza BIOS, vuelve a activar. |
| 5 | Reporte semanal con Action1 | Lista de equipos con errores, claves no respaldadas, CMOS críticos. |
Cuándo aplicar esta solución
Aplica cuando:
- Tienes ≥ 100 equipos con Windows 11 y AD on‑prem.
- No dispones de un MDM (Intune, Jamf, etc.) o no quieres migrar inmediatamente.
- Necesitas cumplir con normas de cifrado (PCI‑DSS, GDPR, etc.) y el backup de claves es obligatorio.
- Los equipos están bajo control de arranque (TPM presente y habilitado).
No aplica si:
- Todos los dispositivos están gestionados por un MDM que ya incluye BitLocker como política.
- La infraestructura es totalmente cloud‑only y no hay AD local para almacenar claves.
- Los equipos son laptops con BitLocker ya activado por políticas de empresa y solo requieren monitoreo.
Código
# CheckDrivesEncrypted.ps1
$logSource = "BitLockerDeploy"
if (-not (Get-EventLog -LogName Application -Source $logSource -ErrorAction SilentlyContinue)) {
New-EventLog -LogName Application -Source $logSource
}
$drives = Get-BitLockerVolume -MountPoint C:
if ($drives.ProtectionStatus -eq 'Off') {
Write-EventLog -LogName Application -Source $logSource -EventId 6000 -EntryType Information -Message "Iniciando BitLocker en C:"
Enable-BitLocker -MountPoint C: -EncryptionMethod XtsAes256 -UsedSpaceOnly -TpmProtector
# Esperar a que el cifrado alcance al menos 10%
while ((Get-BitLockerVolume -MountPoint C:).EncryptionPercentage -lt 10) { Start-Sleep -Seconds 30 }
Write-EventLog -LogName Application -Source $logSource -EventId 6001 -EntryType Information -Message "BitLocker iniciado, % cifrado: $((Get-BitLockerVolume -MountPoint C:).EncryptionPercentage)"
} else {
Write-EventLog -LogName Application -Source $logSource -EventId 6002 -EntryType Information -Message "C: ya está cifrado"
}
# CheckKeys.ps1
$logSource = "BitLockerDeploy"
$adKey = Get-ADObject -Filter {ObjectClass -eq "msFVE-RecoveryInformation"} -SearchBase "CN=Computers,DC=contoso,DC=local" -Properties msFVE-RecoveryPassword | Where-Object {$_.Name -eq $env:COMPUTERNAME}
if (-not $adKey) {
Write-EventLog -LogName Application -Source $logSource -EventId 6100 -EntryType Warning -Message "Clave de recuperación no encontrada en AD, intentando backup."
$tpm = Get-BitLockerVolume -MountPoint C:
$tpm | Add-BitLockerKeyProtector -RecoveryPasswordProtector
$tpm | Backup-BitLockerKeyProtector -KeyProtectorId $tpm.KeyProtector[0].KeyProtectorId -MountPoint C: -Directory "C:\Temp\Recovery"
# Aquí se podría invocar un script de Action1 para subir el archivo a un vault
Write-EventLog -LogName Application -Source $logSource -EventId 6101 -EntryType Information -Message "Clave de recuperación respaldada localmente."
} else {
Write-EventLog -LogName Application -Source $logSource -EventId 6102 -EntryType Information -Message "Clave de recuperación ya presente en AD."
}
Verificación
-
Evento de arranque – Abre el Visor de eventos →
Aplicación→ Filtra porFuente: BitLockerDeploy. Deberías ver IDs 6000‑6002 y 6100‑6102 sin errores críticos. -
Estado de cifrado – Ejecuta
manage-bde -status C:en varios equipos aleatorios.Protection Status: Protection OnyPercentage Encrypted≥ 90 % indican que la fase de cifrado está completa. -
Clave en AD – En un controlador de dominio, corre:
dsquery * "CN=Computers,DC=contoso,DC=local" -filter "(objectClass=msFVE-RecoveryInformation)" -attr msFVE-RecoveryPasswordCada equipo debe aparecer con su clave de recuperación.
-
Firmware – Después de una actualización de BIOS, verifica que
Secure BootyTPMsiguen habilitados en la BIOS y que el equipo arranca sin solicitar la clave de recuperación. -
CMOS – Si el script de monitoreo genera alertas, revisa físicamente la batería del CMOS y reemplázala.
Notas adicionales
-
Rollback de firmware – Algunas placas permiten crear una “snapshot” de la configuración del TPM antes de la actualización. Si el vendor lo soporta, úsalo para volver a un estado conocido en caso de lockout.
-
Tiempo de cifrado – En redes con ancho de banda limitado, usa la opción
-UsedSpaceOnlypara cifrar solo el espacio ocupado inicialmente. Posteriormente, ejecutamanage-bde -resumepara completar el proceso fuera de horario. -
Política de recuperación – Establece una política de retención de claves en AD (por ejemplo, 90 días) y programa una limpieza automática con
Remove-ADObject. -
Auditoría – Añade una tarea programada que exporte los eventos de
BitLockerDeploya un archivo CSV y lo envíe a un SIEM. Así tendrás trazabilidad completa. -
Equipos con discos híbridos (SSD+HDD) – Ejecuta el script por separado para cada volumen (
C:,D:) y verifica que el TPM solo protege el volumen del sistema; los datos en discos secundarios pueden usar-EncryptionMethod XtsAes128para reducir tiempo.
Con este enfoque, puedes escalar la protección de datos mediante BitLocker sin depender de una solución MDM completa, manteniendo control total sobre el proceso, la visibilidad y la resiliencia frente a actualizaciones de firmware o fallos de CMOS.