Bitlocker deployment and reporting.
… the Altiris way, however, the concept would be pretty much the same for any other CMS systems. I’m currently working on such project so I decided to write down the entire process here onto my notepad (who knows, maybe there’s someone out there in the intertubes that is now sitting and scratching his head thinking where to start with Altiris Bitlocker depoloyment?)
First things first, what do we need ?
1. We need to make sure our machines have TPM chip as what we’re going to do is to enable and activate it using simple script, then take ownership of it by securing it with the password. This will allow us to start encryption.
I am aware there are ways to enable Bitlocker without TPM, but its not the case here. If you want to find out more about it, google it.
2. You need to have a GPO configured to use Bitlocker and applied to computers prior to do any of the bellow tasks.
3. Once the GPO is configured and applied, the following command sequence must be run on the destination computers:
– manage-bde.exe -tpm -turnon – this command enables and activates TPM chip
– Reboot – you need to restart PC and confirm configuration change by pressing F1 at boot.
– manage-bde -tpm -o yourtpmpasswordhere – this command takes TPM ownership
– manage-bde -on c: -rp -em aes256 – assuming we’re encrypting C: with aes256
4. Now, as a side note, whats the easiest way to check if the first command worked and the TPM is enabled and activated (assuming you want to check this remotely) . Use WMI. You can do so directly from WMI console or by command prompt by addming wmic.exe before the command.
– To check if TPM is enabled: /namespace:\\root\cimv2\security\microsofttpm path win32_tpm get IsEnabled_InitialValue
– To check if TPM is activated: /namespace:\\root\cimv2\security\microsofttpm path win32_tpm get IsActivated_InitialValue
5. Creating Software Packages with simple .bat scripts that will execute above commands. Software Packages must be set within the Managed Software Delivery Policy in the exact order listed above (3.)
TPM enable and activate – also creates “Bitlocker” folder on systemdrive and the .txt files, that you can use for detection rules. If you prefer more fancy way, you can play with vbs detection rules, but honestly, there’s no need to do so.
md "C:\Windows\System32\Bitlocker" echo.>"C:\Windows\System32\Bitlocker\TPMenabled.txt" Manage-bde.exe -tpm -turnon
REBOOT! – You must reboot PC at this point and get user to press F1!
echo.>"C:\Windows\System32\Bitlocker\TPMownershipset.txt" manage-bde -tpm -o yourpasswordhere
echo.>"C:\Windows\System32\Bitlocker\encryptionstarted.txt" manage-bde -on c: -rp -em aes256
Bellow notification popup will appear on user’s screen :
6. Reporting:
6.1 – Creating Custom Data Classes in Altiris.
Altiris Console: Settings\All settings\Discovery and Inventory\Inventory Solution\Manage Custom Data Classes
Add new Data Classes:
– Expanded Bitlocker Status – this will collect encryption status info such as conversion status, percentage encrypted, encryption method etc.
– Bitlocker Recovery info – encrypted drive letter and your recovery ID
– TPM Status – TPM status.
Add bellow attributes for each:
Altiris Console: \Manage\Jobs / Tasks\Samples\Discovery and Inventory\Inventory Samples\Custom
Clone Custom Inventory – Processor and create the following:
– Custom Inventory – Bitlocker Status
Script type: VBScript – copy and paste bellow script then Save changes
NOTE: Altiris 7.6 likes data class name more than GUID as the previours Altiris versions so its recommended to use data class name in the script!
'Following is a sample custom inventory script gathering information about processor of a machine and posting data
'to NS using Altiris NSE Component
'===================================================================================================================
' On Error Resume Next
'Create instance of Wbem service object and connect to namespace
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root/CIMv2/Security/MicrosoftVolumeEncryption")
'Fire WMI Query
Set objCIMObj = objWMIService.ExecQuery("select * from Win32_EncryptableVolume",,48)
'Set objCIMObj = objWMIService.ExecQuery("Select * from Win32_EncryptableVolume " & "Where DriveLetter = 'C:'")
'===================================================================================================================
'Create instance of Altiris NSE component
dim nse
set nse = WScript.CreateObject ("Altiris.AeXNSEvent")
' Set the header data of the NSE
' Please don't modify this GUID
nse.To = "{1592B913-72F3-4C36-91D2-D4EDA21D2F96}"
nse.Priority = 1
'Create Inventory data block. Here assumption is that the data class with below guid is already configured on server
dim objDCInstance
set objDCInstance = nse.AddDataClass ("Expanded Bitlocker Status")
dim objDataClass
set objDataClass = nse.AddDataBlock (objDCInstance)
Dim arEncryptionMethod
arEncryptionMethod = Array("None", "AES 128 With Diffuser", "AES 256 With Diffuser", "AES 128", "AES 256")
Dim arProtectionStatus
arProtectionStatus = Array("Protection Off", "Protection On", "Protection Unknown")
Dim arConversionStatus
arConversionStatus = Array("Fully Decrypted", "Fully Encrypted", "Encryption In Progress", "Decryption In Progress", "Encryption Paused", "Decryption Paused")
Dim arLockStatus
arLockStatus = Array("Unlocked", "Locked")
'For each objInfo in objCIMObj
For Each objItem in objCIMObj
Dim EncryptionMethod
Dim ProtectionStatus
Dim ConversionStatus
Dim EncryptionPercentage 'Percentage of the volume that is encrypted
Dim VolumeKeyProtectorID
Dim LockStatus
objItem.GetEncryptionMethod EncryptionMethod
objItem.GetProtectionStatus ProtectionStatus
objItem.GetConversionStatus ConversionStatus, EncryptionPercentage
objItem.GetKeyProtectors 0,VolumeKeyProtectorID
objItem.GetLockStatus LockStatus
'Add a new row
dim objDataRow
set objDataRow = objDataClass.AddRow
'Set columns
objDataRow.SetField 0, objItem.DeviceID
objDataRow.SetField 1, objItem.DriveLetter
objDataRow.SetField 2, arEncryptionMethod(EncryptionMethod)
objDataRow.SetField 3, arProtectionStatus(ProtectionStatus)
objDataRow.SetField 4, arConversionStatus(ConversionStatus)
objDataRow.SetField 5, EncryptionPercentage & "%"
objDataRow.SetField 6, arLockStatus(LockStatus)
Next
nse.SendQueued
– Custom Inventory – Bitlocker Recovery Info
Script type: VBScript – copy and paste bellow
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root/CIMv2/Security/MicrosoftVolumeEncryption")
Set objCIMObj = objWMIService.ExecQuery("select * from Win32_EncryptableVolume",,48)
'Set objCIMObj = objWMIService.ExecQuery("Select * from Win32_EncryptableVolume " & "Where DriveLetter = C:'")
dim nse
set nse = WScript.CreateObject ("Altiris.AeXNSEvent")
nse.To = "{1592B913-72F3-4C36-91D2-D4EDA21D2F96}"
nse.Priority = 1
dim objDCInstance
set objDCInstance = nse.AddDataClass ("Bitlocker Recovery Info")
dim objDataClass
set objDataClass = nse.AddDataBlock (objDCInstance)
For Each objItem in objCIMObj
Set oShell = WScript.CreateObject("WSCript.shell")
oShell.run"cmd /K manage-bde -protectors -get """ &objitem.driveletter& """ >C:\keys.txt & exit",0,True
'Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\keys.txt", 1)
Do Until objFile.AtEndOfStream
strNextLine = objFile.ReadLine
If Len(strNextLine) > 0 Then
strLine = strNextLine
End If
Loop
objFile.Close
'Wscript.Echo strLine
dim objDataRow
set objDataRow = objDataClass.AddRow
objDataRow.SetField 0, objItem.DriveLetter
objDataRow.SetField 1, strLine
Next
oShell.run"cmd /K del c:\keys.txt & exit",0,True
nse.SendQueued
– Custom Inventory – TPM Status
Script type: VBScript – copy and paste bellow script then Save changes
'------------------------------------------------------------------------------------
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2\Security\MicrosoftTpm")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Tpm", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)
'============================================
'Create instance of Altiris NSE component
dim nse
set nse = WScript.CreateObject ("Altiris.AeXNSEvent")
nse.To = "{1592B913-72F3-4C36-91D2-D4EDA21D2F96}"
nse.Priority = 1
dim objDCInstance
'my custom data class
set objDCInstance = nse.AddDataClass ("TPM Status")
dim objDataClass
set objDataClass = nse.AddDataBlock (objDCInstance)
For each objInfo in colItems 'script crash here because invalid data
dim objDataRow
set objDataRow = objDataClass.AddRow
objDataRow.SetField 0, objInfo.IsActivated_InitialValue
objDataRow.SetField 1, objInfo.IsEnabled_InitialValue
objDataRow.SetField 2, objInfo.IsOwned_InitialValue
objDataRow.SetField 3, objInfo.ManufacturerId
objDataRow.SetField 4, objInfo.ManufacturerVersion
objDataRow.SetField 5, objInfo.ManufacturerVersionInfo
objDataRow.SetField 6, objInfo.PhysicalPresenceVersionInfo
objDataRow.SetField 7, objInfo.SpecVersion
Next
nse.SendQueued
'---------------------------------------------------------------------------
Now, you can “Quick run” the task on any machine you want, or you can specify a filter then apply the task to it – this will create new custom inventory for each computer with all the data you’re collecting:
Altiris console: \Computers\All Computers\ – search for computer you’d like to check, right click and select Resource Manager. Go to “View”, “Inventory” then expand “Data Classes”\”Inventory”\”Custom” and tour class is there with all the info.
6.3 Create Bitlocker report
Altiris Console: \Reports\All Reports\ – New Report\Computer report
Yo need to show Altiris where to look at. Go to “Fields” and add the following:
Save Changes and run report.
7. Creating Dynamic Deployment filter that will include all laptops
Lets say we want to deploy it to all laptops as well as any new build laptop will also receive the policy. We need dynamic filter for this that will identify machines by chassis type (here are all values listed – you can compose an SQL query based on that). The one bellow searches for machines thata 9 – Are laptop, 10 – are notebook, 12 – has docking station
Create new filter and select Filter definition: Query Mode: Raw SQL
SELECT DISTINCT ch._ResourceGuid FROM Inv_HW_Chassis ch WHERE ch.[Chassis Package Type] = '8' OR ch.[Chassis Package Type] = '9' OR ch.[Chassis Package Type] = '10' OR ch.[Chassis Package Type] = '12'





