Enable TPM on VM #
I’m using VMware Workstation 16 Pro as hypervisor, here are the steps to enable TPM for an VM.
- Open the VM settings
- Go to the Options / Access Control, open the Encrypt panel and define a PW
- Add TPM to VM
Check TPM #
Start the VM and check if TPM is available:
Open Run Prompt: win
+ r
Run: tpm.msc
Or use the following PowerShell command:
# Check if TPM is available
Get-TPM
# Shell Output:
TpmPresent : True
TpmReady : True
TpmEnabled : True
TpmActivated : True
TpmOwned : True
RestartPending : False
ManufacturerId : 1447909120
ManufacturerIdTxt : VMW
ManufacturerVersion : 2.101.0.1
ManufacturerVersionFull20 : 2.101.0.1
ManagedAuthLevel : Full
OwnerAuth : 6Pk1jQE0RDJ+LefE/mzh7XB6/UY=
OwnerClearDisabled : False
AutoProvisioning : Enabled
LockedOut : False
LockoutHealTime : 10 minutes
LockoutCount : 0
LockoutMax : 31
SelfTest : {}
# List TPM details
Get-WmiObject -Namespace "Root\CIMv2\Security\MicrosoftTpm" -Class Win32_Tpm
# Shell Output:
__GENUS : 2
__CLASS : Win32_Tpm
__SUPERCLASS :
__DYNASTY : Win32_Tpm
__RELPATH : Win32_Tpm=@
__PROPERTY_COUNT : 10
__DERIVATION : {}
__SERVER : JKW-W10-02
__NAMESPACE : Root\CIMv2\Security\MicrosoftTpm
__PATH : \\JKW-W10-02\Root\CIMv2\Security\MicrosoftTpm:Win32_Tpm=@
IsActivated_InitialValue : True
IsEnabled_InitialValue : True
IsOwned_InitialValue : True
ManufacturerId : 1447909120
ManufacturerIdTxt : VMW
ManufacturerVersion : 2.101.0.1
ManufacturerVersionFull20 : 2.101.0.1
ManufacturerVersionInfo : VMware TPM2
PhysicalPresenceVersionInfo : 1.3
SpecVersion : 2.0, 0, 1.16
PSComputerName : JKW-W10-02
Windows Server #
Add Roles and Features #
Add the following feature: Bitlocker Drive Encryption Administration Utility
Or install it with PowerShell
# Install the BitLocker management tools on Windows Server
Install-WindowsFeature BitLocker -IncludeAllSubFeature -IncludeManagementTools
Active Directory Requirements to Use BitLocker #
# Verify if AD schema version has attributes required to store BitLocker recovery keys in Active Directory
Get-ADObject -SearchBase ((GET-ADRootDSE).SchemaNamingContext) -Filter {Name -like 'ms-FVE-*'}v| Format-List
# Shell Output:
DistinguishedName : CN=ms-FVE-KeyPackage,CN=Schema,CN=Configuration,DC=jklug,DC=work
Name : ms-FVE-KeyPackage
ObjectClass : attributeSchema
ObjectGUID : 7a92eb24-60cf-4f95-a866-258a168b0838
DistinguishedName : CN=ms-FVE-RecoveryGuid,CN=Schema,CN=Configuration,DC=jklug,DC=work
Name : ms-FVE-RecoveryGuid
ObjectClass : attributeSchema
ObjectGUID : b2d19580-61fc-4eb6-80f9-bd61fa396371
DistinguishedName : CN=ms-FVE-RecoveryInformation,CN=Schema,CN=Configuration,DC=jklug,DC=work
Name : ms-FVE-RecoveryInformation
ObjectClass : classSchema
ObjectGUID : 00746808-a932-4464-89c8-0842ea6b61f0
DistinguishedName : CN=ms-FVE-RecoveryPassword,CN=Schema,CN=Configuration,DC=jklug,DC=work
Name : ms-FVE-RecoveryPassword
ObjectClass : attributeSchema
ObjectGUID : bba33f00-4cb4-4f19-b00f-ec54e5f360b8
DistinguishedName : CN=ms-FVE-VolumeGuid,CN=Schema,CN=Configuration,DC=jklug,DC=work
Name : ms-FVE-VolumeGuid
ObjectClass : attributeSchema
ObjectGUID : 9f89a9ec-6290-471a-81c4-bd42f35453dd
Active Directory & GPO #
Open Active Directory Users and Computers and create a new Organizational Unit for the Bitlocker-Devices, in my case the OU is just called “Bitlocker-Devices”.
Open Group Policy Management and create a new Group Policy Object for the Bitlocker settings, in my case it’s called “Bitlocker”.
Right click the Organizational Unit and link the GPO to the unit:
GPO Settings #
Edit the GPO as follows:
# Expand the GPO sections:
Computer Configuration > Policies > Administrative Templates > Windows Components > BitLocker Drive Encryption:
# Enable this policy and configure it as follows:
Store BitLocker Recovery information in Active Directory Domain Services
Require BitLocker backup to AD DS: Enable
Select BitLocker recovery information to store: Recovery passwords and key packages
Depending on the drives you want to encrypt, select one of the sections that are present under: BitLocker Drive Encryption
- Fixed Data Drives
- Operating System Drives
- Removable Data Drives
Fixed Data Drives #
Configure use of password for fixed data drvies
Configure use of password for fixed data drvies: Enabled
Minimum password length for fixed data drive: 12
Choose how Bitlocker-protected fixed data drives can be recovered
Choose how Bitlocker-protected fixed data drives can be recovered: Enabled
Allow data recovery agent: Checked
Allow 48-digit recovery password
Allow 256-bit recovery key
Omit recovery options from the BitLocker setup wizzard: Checked
Save BitLocker recovery information to AD DS for removeable data drives: Checked
Configure storage of BitLocker recovery information to AD DS: Backup recovery passwordsand key packages
Do not enable BitLocker until recovery information is stroed to AD DS for removable data drives: Checked
Operating System Drives #
Require additional authentication at startup
Require additional authentication at startup: Enabled
# Settings for computer with a TPM
Configure TPM startup: Allow TPM
Configure TPM startup PIN: Allow startup PIN with TPM
Configure TPM startup key: Allow startup key with TPM
Configure TPM startup key and PIN: Allow startup key and PIN with TPM
Configure minimum PIN length for startup
Configure minimum PIN length for startup: Enabled
Minimum characters: 6
Choose how BitLocker-protected operating system drives can be recovered
Choose how BitLocker-protected operating system drives can be recovered: Enabled
Allow data recovery agent: CHecked
Configure user storage of BitLocker recovery information:
Allow 48-digit recovery password
Allow 256-bit recovery key
Omit recovery options from the BitLocker setup wizard: Checked
Save BitLocker recovery information to AD DS for operating system drives: Checked
Configure storage of BitLocker recovery information to AD DS: Store recovery passwords and key packages
Do not enable BitLocker unit recovery information is stored to AD DS for operating system drives: Checked
Removable Data Drives #
Control use of BitLocker on removable drive
Control use of BitLocker on removable drives: Enabled
Allow users to apply BitLocker protection on removable data drives: Checked
Choose how BitLocker-protected removable drives can be recovered
Choose how BitLocker-protected removable drives can be recovered: Enabled
Allow data recovery agent: Checked
Allow 48-digit recovery password
Allow 256-bit recovery key
Omit recovery options from the BitLocker setup wizzard: Checked
Save BitLocker recovery information to AD DS for removeable data drives: Checked
Configure storage of BitLocker recovery information to AD DS: Backup recovery passwordsand key packages
Do not enable BitLocker until recovery information is stroed to AD DS for removable data drives: Checked
Enfore the Policy #
Right click on the GPO and click “Enforced”.
Client #
Check if the Group Policy does already apply to the VM, run PowerShell as Administrator
# List policy for computer
gpresult /r /scope computer
# Shell Output
RSOP data for on JKW-W10-01 : Logging Mode
--------------------------------------------
OS Configuration: Member Workstation
OS Version: 10.0.19044
Site Name: Default-First-Site-Name
Roaming Profile:
Local Profile:
Connected over a slow link?: No
COMPUTER SETTINGS
------------------
CN=JKW-W10-01,OU=Bitlocker-Devices,DC=jklug,DC=work
Last time Group Policy was applied: 7/25/2023 at 4:14:01 PM
Group Policy was applied from: WindowsServer2022-primary.jklug.work
Group Policy slow link threshold: 500 kbps
Domain Name: JKLUG
Domain Type: Windows 2008 or later
Applied Group Policy Objects
-----------------------------
Bitlocker # Your GPO should be listed here
Default Domain Policy
The following GPOs were not applied because they were filtered out
-------------------------------------------------------------------
Richtlinien der lokalen Gruppe
Filtering: Not Applied (Empty)
The computer is a part of the following security groups
-------------------------------------------------------
Administratoren
Jeder
Benutzer
NETZWERK
Authentifizierte Benutzer
Diese Organisation
JKW-W10-01$
Domain Computers
Von der Authentifizierungsstelle best„tigte ID
Systemverbindlichkeitsstufe
If not reboot the VM or update the policy
#Update GPO:
gpupdate /force
Enable Bitlocker #
Note: The Enable-BitLocker cmdlet lets you specify only one combination from the key protectors.
Use the Add-BitLockerKeyProtector
cmdlet to add more key protectors later on.
RecoveryPasswordProtector #
TPM automatically unlocks the drive during system startup. A random 48-digit recovery password will be generated automatically.
# Encrypt Drive:
Enable-Bitlocker -MountPoint "C:" -UsedSpaceOnly -RecoveryPasswordProtector
# Shell Output:
WARNING: ACTIONS REQUIRED:
1. Save this numerical recovery password in a secure location away from your computer:
279653-693902-360833-167409-711271-507925-273581-126060
To prevent data loss, save this password immediately. This password helps ensure that you can unlock the encryp
ted volume.
ComputerName: JKW-W10-01
VolumeType Mount CapacityGB VolumeStatus Encryption KeyProtector AutoUnlock Protec
Point Percentage Enabled tionSt
atus
---------- ----- ---------- ------------ ---------- ------------ ---------- ------
OperatingSystem C: 59.38 EncryptionInProgress 65 {Tpm, RecoveryPassword} Off
# Follow Encryption Progress
Get-BitLockerVolume -MountPoint "C:" | Format-List
# Shell Output:
ComputerName : JKW-W10-01
MountPoint : C:
EncryptionMethod : XtsAes128
AutoUnlockEnabled :
AutoUnlockKeyStored : False
MetadataVersion : 2
VolumeStatus : EncryptionInProgress
ProtectionStatus : Off
LockStatus : Unlocked
EncryptionPercentage : 92 # Wait till it's completed
WipePercentage : 0
VolumeType : OperatingSystem
CapacityGB : 59.38076
KeyProtector : {Tpm, RecoveryPassword}
Add Bitlocker KeyProtector #
To add another KeyProtector proceed as follows:
# Add a PIN KeyProtector
$SecureString = ConvertTo-SecureString "654321" -AsPlainText -Force
Add-BitLockerKeyProtector -MountPoint "C:" -Pin $SecureString -TpmAndPinProtector
List Recovery Key in AD #
Open Active Directory Users and Computers, open the Organizational Unit “Bitlocker-Devices” and open the properties of your client:
Or use PowerShell
# Define Computer Name
$ComputerName = "JKW-W10-01"
# List Bitlocker Recovery Key
Get-ADObject -Filter 'objectClass -eq "msFVE-RecoveryInformation"' -SearchBase (Get-ADComputer $ComputerName).DistinguishedName -Property msFVE-RecoveryPassword | Format-Table msFVE-RecoveryPassword
#Shell Output:
279653-693902-360833-167409-711271-507925-273581-126060
List Recovery Key on Client #
# List Bitlocker KeyProtector Password
manage-bde -protectors -get c:
# shell Output:
BitLocker-Laufwerkverschlsselung: Konfigurationstool, Version 10.0.19041
Copyright (C) 2013 Microsoft Corporation. Alle Rechte vorbehalten.
Volume "C:" []
Alle Schluesselschutzvorrichtungen
Numerisches Kennwort:
ID: {7760E06A-8CAE-476D-B776-2B18793A69E0} # Nummerical Password ID
Kennwort:
605869-464398-324753-556105-437536-027181-309430-570614
TPM und PIN:
ID: {56E6792D-EE6C-4349-8D2F-C97DBB195150}
PCR-Validierungsprofil:
0, 2, 4, 11
Manaully save Recovery Key to AD #
If the Domain Controller was not reachable during the creation of the recovery password, you can manually save it to Active Directory.
# Save Recovery Key to Active Directory: Use the Nummerical Password ID
manage-bde -protectors -adbackup c: -id {7760E06A-8CAE-476D-B776-2B18793A69E0}
# Shell Output
Recovery information was successfully backed up to Active Directory.
Suspend and Disable Bitlocker #
Suspend Bitlocker Encryption #
# Suspend Bitlocker: Till manually resumed
Suspend-BitLocker -MountPoint "C:" -RebootCount 0
# Resume Bitlocker
Resume-BitLocker -MountPoint "C:"
While suspended, BitLocker does not validate system integrity at start up. You might suspend BitLocker protection for firmware upgrades or system updates. You can specify the number of times that a computer restarts before the BitLocker suspension ends by using the RebootCount parameter.
RebootCount
Specify a value between 0 to 15
Disable Bitlocker Enryption #
# Disable BitLocker protection
Disable-BitLocker -MountPoint "C:"
# Check Decryption Status: List Output
Get-BitLockerVolume -MountPoint "C:" | Format-List
# Shell Output:
ComputerName : JKW-W10-01
MountPoint : C:
EncryptionMethod : None
AutoUnlockEnabled :
AutoUnlockKeyStored :
MetadataVersion : 0
VolumeStatus : FullyDecrypted # Wait till complete
ProtectionStatus : Off
LockStatus : Unlocked
EncryptionPercentage : 0
WipePercentage : 0
VolumeType : OperatingSystem
CapacityGB : 59.38076
KeyProtector : {}
Remove Bitlocker protector #
Note: If you remove all Bitlocker KeyProtectors before you disable Bitlocker, there is no way to unlock Bitlocker!
List KeyProtectorId #
# Display all KeyProtectors for the volume
$BitLockerVolume = Get-BitLockerVolume -MountPoint "C:"
$BitLockerVolume.KeyProtector | Format-Table
Shell Output:
KeyProtectorId AutoUnlockProtector KeyProtectorType KeyFileName RecoveryPassword
-------------- ------------------- ---------------- ----------- ----------------
{7760E06A-8CAE-476D-B776-2B18793A69E0} RecoveryPassword 605869-464398-32475...
{EAE9721D-FB58-4B19-83D4-648E6580AC0A} TpmPin
Remove KeyProtector: Interactive #
Use the following command to remove a Bitlocker protector, you are asked to provide the “KeyProtectorId”:
# Remove existing PIN protector
Remove-BitLockerKeyProtector -MountPoint "C:"
# Shell Output:
cmdlet Remove-BitLockerKeyProtector at command pipeline position 1
Supply values for the following parameters:
KeyProtectorId: {4D776F3E-910C-48A0-8A3D-E8A6F1E43CEB} # Enter your KeyProtector Id
ComputerName: JKW-W10-01
VolumeType Mount CapacityGB VolumeStatus Encryption KeyProtector AutoUnlock Protection
Point Percentage Enabled Status
---------- ----- ---------- ------------ ---------- ------------ ---------- ----------
OperatingSystem C: 59.38 FullyDecrypted 0 {} Off
Remove KeyProtector: Command #
Use the following command the remove a Bitlocker protector and provide the “KeyProtectorId” with the command:
# Remove the RecoveryPassword protector
Remove-BitLockerKeyProtector -MountPoint "C:" -KeyProtectorId "{EAE9721D-FB58-4B19-83D4-648E6580AC0A}"