BitLocker w AD DS: wymuszenie escrow kluczy i dosyłka dla już zaszyfrowanych stacji (GPO + Harmonogram)

Cel: zapewnić, że klucze odzyskiwania BitLocker trafią do Active Directory Domain Services (AD DS), a szyfrowanie nie uruchomi się, jeśli zapis do AD się nie powiedzie. Dodatkowo — dosłać klucze z już zaszyfrowanych komputerów przez zadanie Harmonogramu (GPP).

Architektura rozwiązania

  1. Polityki BitLocker w GPO (Computer Configuration)
    • Wymuszają zapis recovery key do AD DS i blokują start szyfrowania, gdy escrow się nie uda.
  2. Zadanie Harmonogramu (Group Policy Preferences)
    • Na starcie systemu uruchamia skrypt PowerShell jako SYSTEM, który dosyła (backupuje) istniejące klucze do AD DS.
  3. Przegląd kluczy w AD
    • ADUC z funkcją BitLocker Recovery Password Viewer (RSAT) — karta BitLocker Recovery na obiekcie komputera.

1) Wymuszenie escrow do AD DS (nowe szyfrowania)

W GPO powiązanym z OU komputerów:

Operating System Drives
Computer Configuration → Administrative Templates → Windows Components → BitLocker Drive Encryption → Operating System Drives

  • Choose how BitLocker-protected operating system drives can be recoveredEnabled
    • Save BitLocker recovery information to AD DS…
    • Do not enable BitLocker until recovery information is stored to AD DS…
    • (opcjonalnie) ✅ Store recovery passwords and key packages

Fixed Data Drives / Removable Data Drives – analogicznie jak wyżej.

TPM:
Computer Configuration → Administrative Templates → System → Trusted Platform Module Services

  • Turn on TPM backup to Active Directory Domain ServicesEnabled

Dzięki temu nowe wdrożenia BitLockera zawsze zapiszą klucze w AD, albo w ogóle nie wystartują.


2) Dosyłka kluczy z już zaszyfrowanych stacji (Harmonogram)

2.1. Skrypt w SYSVOL

Umieść plik PS1 (na bazie Twoich ustaleń) w:
\\serwer2022.plcall.local\SYSVOL\plcall.local\scripts\kopiakluczybitlocker.ps1

Proponowana, odporna wersja z logowaniem i obsługą wielu wolumenów:

# kopiakluczybitlocker.ps1
$ErrorActionPreference = 'Stop'
$LogRoot = "$env:ProgramData\BitLockerEscrow"
New-Item -ItemType Directory -Path $LogRoot -Force | Out-Null
$LogFile = Join-Path $LogRoot "escrow-$(Get-Date -Format yyyyMMdd).log"

function Write-Log($msg) {
  Add-Content -Path $LogFile -Value "$(Get-Date -Format s) $msg"
}

try {
  $vols = Get-BitLockerVolume
  foreach ($v in $vols) {
    if ($v.ProtectionStatus -ne 'On') { continue }

    # Upewnij się, że istnieje RecoveryPassword
    $rps = @($v.KeyProtector | Where-Object { $_.KeyProtectorType -eq 'RecoveryPassword' })
    if ($rps.Count -eq 0) {
      $rp = Add-BitLockerKeyProtector -MountPoint $v.MountPoint -RecoveryPasswordProtector
      Write-Log "Dodano RecoveryPassword dla $($v.MountPoint): $($rp.RecoveryPassword)"
      $rps = @($rp.KeyProtector)
    }

    foreach ($kp in $rps) {
      try {
        Backup-BitLockerKeyProtector -MountPoint $v.MountPoint -KeyProtectorId $kp.KeyProtectorId -ErrorAction Stop
        Write-Log "OK: $($v.MountPoint) → $($kp.KeyProtectorId)"
      } catch {
        Write-Log "ERROR: $($v.MountPoint) → $($kp.KeyProtectorId) : $($_.Exception.Message)"
      }
    }
  }
} catch {
  Write-Log "FATAL: $($_.Exception.Message)"
  exit 1
}

2.2. Zadanie Harmonogramu przez GPP

W tym samym GPO:
Computer Configuration → Preferences → Control Panel Settings → Scheduled Tasks → New → Scheduled Task (Windows 7 or later)

  • Name: BitLocker Escrow to AD
  • Security options:Run whether user is logged on or not
    • Run with highest privileges
    • User: SYSTEM
  • Triggers: At startup (opcjonalnie Delay task: 2 minutes)
  • Actions:Start a program
    • Program/script: powershell.exe
    • Arguments: -NoProfile -ExecutionPolicy Bypass -File "\\serwer2022.plcall.local\SYSVOL\plcall.local\scripts\kopiakluczybitlocker.ps1"
  • Common → (opcjonalnie) Item-level targeting (wybrane grupy/OU, pilotaż).

Nie musisz zmieniać polityki ExecutionPolicy w domenie — przekazujemy Bypass tylko temu zadaniu.


3) Testy i walidacja

  1. Na kilku stacjach pilotażowych: gpupdate /forcerestart.
  2. Po starcie sprawdź log lokalny: C:\ProgramData\BitLockerEscrow\escrow-YYYYMMDD.log.
  3. W Active Directory Users and Computers włącz View → Advanced Features, otwórz obiekt komputera → karta BitLocker Recovery (powinna pojawić się 48-cyfrowa fraza).
  4. (Opcja) PowerShell z serwera: $dn = (Get-ADComputer NAZWA-KOMPUTERA).DistinguishedName Get-ADObject -LDAPFilter "(objectClass=msFVE-RecoveryInformation)" -SearchBase $dn -Properties msFVE-RecoveryPassword | Select-Object msFVE-RecoveryPassword

4) Najczęstsze problemy (checklista)

  • Brak karty BitLocker Recovery w ADUC → doinstaluj BitLocker Recovery Password Viewer (RSAT).
  • Maszyny nie dosyłają kluczy → sprawdź łączność do DC, replikację, czas systemowy, prawa konta komputera (domyślnie ma).
  • Brak RecoveryPassword → skrypt sam doda protektor i wykona backup.
  • Konflikt z polityką → upewnij się, że polityki BitLocker są na poziomie Computer i efektywnie obowiązują (RSOP).

Dodaj komentarz