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)
Dieses Kommando kann silent ablaufen.
Aktivieren der Verschlüsselung mit TPM (mit Beispiel-PIN 471123) und used-space-only und 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:
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
...
oder Variante 2: PIN setzen und danach erst Textdatei befüllen:
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:
Diese braucht ein unter \\server\appshare plaziertes psexec.exe (von Microsoft runterladbar) und referenziert eine \\server\appshare\message.ps1, die da lauten würde
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 - 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:
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:
Dies ist ein weiterer Zusatz zum Hauptartikel Meine Wissenssammlung zu Bitlocker
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
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
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
[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
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)
Please also mark the comments that contributed to the solution of the article
Content-ID: 392414
Url: https://administrator.de/contentid/392414
Printed on: August 31, 2024 at 23:08 o'clock
4 Comments
Latest comment
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.