derwowusste
Goto Top

Bitlocker-Verschlüsselung und -Monitoring ohne MBAM

Der Folgende Tipp beschreibt, wie man ohne MBAM die Verschlüsselung erzwingt und monitort.
MBAM ist ein Enterprise-Benefit und somit nicht für jedermann verfügbar.
MBAM sollten die von Euch, die Enterpriseverträge (SA) haben, zumindest einmal ansehen, bevor sie das Folgende umsetzen.

Ich setze als bekannt voraus, dass man für alle Aktionen inklusive der Statusanzeige der Verschlüsselung Adminrechte (oder Systemrechte) benötigt. Ich benutze sowohl Batch als auch Powershellbefehle. Wer eine PIN mit Batch setzen möchte und nicht in Powershell, muss schauen, wie er denn die PIN vergibt – in Batch geht das mit %random% nicht so schön wie mit get-random in Powershell, da %random% unter dem Minimum von 6 Zeichen liegt.
Weitere Voraussetzung sind aktivierte und einsatzbereite TPMs.
->Man sollte immer per GPO erzwingen, dass die Verschlüsselung nicht starten darf, bevor der Recoverykey im AD gespeichert wurde.
->Für die Powershellskripte muss per GPO die Powershell Executionpolicy auf remote-signed gesetzt werden. Ob man nach den Vorkommnissen der letzten Woche Hardwareverschlüsselung zuvor per GPO verbietet, sei jedem selbst überlassen.
->will man PBA PINs setzen, muss dies zuvor per GPO erlaubt werden:
Computer Configuration > Administrative Templates > Windows Komponenten > BitLocker-Laufwerksverschlüsselung > Betriebssystemlaufwerke >Zusätzliche Authentifizierung beim Start anfordern (Achtung, diese Policy gibt es 2x. Nehmt die für "mindestens Windows Server 2008 R2 oder Windows 7")
->auf aktiviert setzen. Man sollte, wenn man keine Kennwörter zulassen möchte, den ersten Haken entfernen bei "Bitlocker ohne kompatibles TPM zulassen...")

Aktivieren der Verschlüsselung mit TPM (ohne PIN) und used-space-only und XTS_AES256 (man kann den Encryption mode und used-space-Verwendung natürlich auch per GPO erzwingen)
manage-bde -on c: -s -used -rp -em XTS_AES256
Dieses Kommando kann silent ablaufen.

Aktivieren der Verschlüsselung mit TPM (mit Beispiel-PIN 471123) und used-space-only und XTS_AES256
Add-BitLockerKeyProtector -MountPoint "c:" -pin ("471123" | ConvertTo-SecureString -AsPlainText -Force) -TpmAndPinProtector  
manage-bde -on c: -s -used -rp -em XTS_AES256

Abfragen, ob komplett verschlüsselt wurde
–> Erstelle eine nach dem Rechner benannte Textdatei mit Status, wenn nicht komplett auf allen Laufwerken wie folgt:
manage-bde -status | findstr /c:"Percentage Encrypted" | findstr /v 100 && manage-bde -status>\\server\share\%computername%.txt  
Achtung: diese Syntax passt auf englischen Systemen – bitte anpassen für Eure Sprachen (auf deutsch heißt es nicht "percentage" sondern Prozent!) Man kann diesen Check täglich machen (Startskript oder zu festen Zeiten getriggerter geplanter Task)

Zuordnen einer PIN zu einem Rechner
Man kann einen geplanten Task deployen, der mit Systemrechten läuft.

Ausführendes Konto: system
Taskname (hier im Beispiel): BL (bei anderem Namen bitte Zeile mit schtasks /delete dementsprechend anpassen)
Trigger: bei Logon irgendeines Nutzer („any user“)
Aktion: powershell.exe mit dem Argument \\server\share\BL.ps1 (der Skriptinhalt folgt in 2 Varianten)
Task selbst nur einmal erzeugen („apply once and do not reapply“).
Freigabe \\server\share sollte für Rechnerkonten nicht lesbar, sondern nur exklusiv beschreibbar sein - lesbar nur für Admins! *

Variante 1. Nutzen einer Liste pcs_pins.txt mit Rechnernamen und zugeordneten, zufälligen PINs im Format
PC1 PIN1
PC2 PIN2
...

$array = @(gc \\server\share\pcs_pins.txt | sls \b$env:COMPUTERNAME\b ) -split " "  
$pin = $array[1]
$SecureString = ConvertTo-SecureString "$pin" -AsPlainText -Force  
Add-BitLockerKeyProtector -MountPoint "C:" -Pin $SecureString -TPMandPinProtector   
msg /time:0 * Ihre Festplatte wird nun verschluesselt. Ihre Bitlocker-PIN zum Starten des Rechners ist $pin
manage-bde -on c: -s -used -rp -em XTS_AES256
schtasks /delete /tn BL /f 

oder Variante 2: PIN setzen und danach erst Textdatei befüllen:

$pin=(Get-Random -Minimum 0 -Maximum 999999).ToString('000000')  
echo "$pin" | out-file \\server\share\$env:COMPUTERNAME.txt  
$SecureString = ConvertTo-SecureString "$pin" -AsPlainText -Force  
Add-BitLockerKeyProtector -MountPoint "C:" -Pin $SecureString -TPMandPinProtector   
msg /time:0 * Ihre Festplatte wird nun verschluesselt. Ihre Bitlocker-PIN zum Starten des Rechners ist $pin
manage-bde -on c: -s -used -rp -em XTS_AES256
schtasks /delete /tn BL /f 

Achtung: in beiden Varianten wird der Inhalt des Popups und somit auch die PIN mitgeloggt ins Systemeventlog! Wer das nicht will, sollte das Log danach leeren mittels Clear-EventLog system
Will man das Log jedoch nicht löschen, sondern gar nicht erst die PIN dort auftauchen lassen, kann man statt der msg-Zeile (5) folgende Codezeilen einfügen:
for /f "tokens=3" %%a in ('qwinsta ^|findstr /i console') do \\server\appshare\psexec -s -i %%a \\server\appshare\message.ps1  
Diese braucht ein unter \\server\appshare plaziertes psexec.exe (von Microsoft runterladbar) und referenziert eine \\server\appshare\message.ps1, die da lauten würde

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")  
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")  
$objForm = New-Object System.Windows.Forms.Form
$objForm.Backcolor="blue"  
$objForm.StartPosition = "CenterScreen"  
$objForm.autosize = $True
$objForm.Text = "                   Wegen Ihrer Bitlocker-PIN..."  
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.autosize = $True
$objLabel.BackColor = "Transparent"  
$objLabel.Font = New-Object System.Drawing.Font("Calibri",15,[System.Drawing.FontStyle]::Bold)  
$objLabel.ForeColor = [Drawing.Color]::Black
$objLabel.Text = "Ihre Festplatte wird nun verschluesselt.`n`n  
Ihre Bitlocker-PIN zum Starten des Rechners ist`n
                           $pin"   
$objForm.Controls.Add($objLabel)
[void] $objForm.ShowDialog() 

Variante 2 ist in dem Fall zu bevorzugen, wenn man den Rechnerkonten keine Leserechte auf die Datei mit allen PINs einräumen möchte. Die PIN ist jeweils 6-stellig.
Der Task löscht sich nach Ausführung selbst. Ob ihr da noch Errorhandling einbauen wollt, sei Euch überlassen - es funktioniert normalerweise problemlos.
Der Nutzer erhält nach Logon ein Popup mit der PIN.

Variante 3
Kollege @shopdawhop teilte mir mit, wie er sich die PIN-Erzeugung vorstellt und ich will diesen interessanten Ansatz hier aufnehmen.
Seine Idee ist, dass es doch schön wäre, die PIN direkt vom Recoverykey ableiten zu können, so dass wenn der Nutzer die PIN vergisst, der Admin nicht etwa das 48-stellige Recoverypasswort einsetzen muss, sondern einfach die PIN vom numerischen Recoverypasswortes ableitet (Beispiel: PIN ist 8-stellig und besteht aus der jeweilig letzten Ziffer jedes der 8 Blöcke des Recoverypasswortes). Das lässt sich auch per Skript erreichen und ich denke, das bekommt jeder Interessierte hin... wenn nicht, fragt @shopdawhop face-wink face-wink - es bleibt jedoch zu bedenken, dass Nutzer besser nichts von dieser Erzeugungsmethode wissen sollten, da man somit die Möglichkeit zum Brute-Forcing des eigenen Recoverypasswortes natürlich deutlich (in diesem Beispiel um ca. Faktor 10^8) erhöht. Als schönen Nebeneffekt spart man sich jedoch ggf. die gesicherte Ablage eines Startupkeys oder das notieren der PINs. Ich hoffe, es ist jedem klar, dass bei dieser Variante die PIN fix ist und nicht vom User änderbar sein darf.

Hat man weitere Partitionen und will man auch noch d:, e: usw. verschlüsseln, kann man so vorgehen:
manage-bde -on d: -used -rp -em XTS_AES256 & manage-bde -autounlock -enable d:

Um abzufragen, ob Bitlocker irgendwo suspendiert ist
->man kann dafür einen geplanten Task deployen, der getriggert ist an:
Logname Microsoft-Windows-BitLocker-API/Management
Event 773,
Source: Bitlocker-Api

und dann Alarm schlägt (Mails senden, Logdateien erstellen). Suspendieren können jedoch nur lokale Admins und Inplace-Upgradeprozesse.
* zur ACL:
icacls \\server\share\
\\server\share\ yourdom\domain computers:(OI)(CI)(W)
                   NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
                   BUILTIN\Administrators:(I)(OI)(CI)(F)
Dies ist ein weiterer Zusatz zum Hauptartikel Meine Wissenssammlung zu Bitlocker

Content-Key: 392414

Url: https://administrator.de/contentid/392414

Printed on: June 19, 2024 at 00:06 o'clock

Member: kgborn
kgborn May 11, 2019 updated at 02:57:24 (UTC)
Goto Top
FYI: Ich habe mir aus aktuellem Anlass erlaubt, im Heise-Beitrag Microsoft erweitert BitLocker-Verwaltungsoptionen für Unternehmen auf deinen Ansatz hier hinzuweisen und zu verlinken.
Member: DerWoWusste
DerWoWusste Oct 08, 2020 at 09:10:55 (UTC)
Goto Top
Edit1, 08.10.2020: Hinweis hinzugefügt, dass die PIN ins Systemlog kommt und man dieses leeren sollte über "Clear-EventLog system".
Member: DerWoWusste
DerWoWusste Oct 09, 2020 at 13:19:26 (UTC)
Goto Top
Edit2: 09.10.2020: Code hinzugefügt, der die PIN auf andere Weise mitteilt, so dass diese nicht in einem Log aufläuft.
Member: DerWoWusste
DerWoWusste Dec 24, 2021 at 07:21:24 (UTC)
Goto Top
Edit3, 23.12.21
Variante 3 zur Erzeugung einer PIN hinzugefügt