BIOS Update und Microsoft Bitlocker

By | 3. Dezember 2019

Nachdem ich, wie hier beschrieben, die ersten Probleme mit dem BIOS Updates bei Lenovo umgangen hatte, gab es – nachdem ein Update der Rechner im Feld nötig wurde – eine weitere Hürde zu überwinden: Microsoft Bitlocker. Dieser mag BIOS Updates gar nicht und möchte diese durch einen Recoverykey legitimiert haben. Bei inzwischen 700 Windows 10 Clients im Feld keine sehr prickelnde Vorstellung. Die Lösung gibt Microsoft selbst vor, auch wenn diese aus Sicht der Sicherheit nicht unbedingt schön ist – Bitlocker während des Updates deaktivieren (und nicht vergessen, danach wieder zu aktivieren!).

Ich möchte hier kurz meine Lösungsvariante in DSM zeigen, ohne auf das BIOS Update an sich einzugehen (das ist ja hier ausführlich erklärt).

Da ich sowohl Aktivieren als auch Deaktivieren in ein Skript unterbringen möchte und ein Neustart für das Update zwingend notwendig ist, muss man hier mit Registrykeys arbeiten:

 

Zuerst wird überprüft, ob es den Schlüssel „BitlockerSuspended“ gibt. Man kann das natürlich auch per Skript testen, jedoch weiß das Skript nicht, wer Bitlocker deaktiviert hat. Über den Key kann man von DSM aus gehen (möglicherweise wird es ja aus einem anderem Grund deaktiviert, da will ich nicht reinpfuschen). Danach wird ein Befehl ausgeführt, der Bitlocker wieder aktiviert und der Registrykey wird gelöscht. Das Skript wird hier eigentlich von hinten aufgerollt, weil dies erst nach dem Neustart zum Tragen kommt.

If RegValueExists(‚HKEY_LOCAL_MACHINE\SOFTWARE\_DSM‘,’BitlockerSuspended‘)
RunAsEx(‚%WINSYSDIR%\manage-bde.exe ‚,‘-protectors -enable C:‘,“,“,’2′,“,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/x64
RegDeleteKey(‚HKEY_LOCAL_MACHINE\SOFTWARE\_DSM‘,’BitlockerSuspended‘,)

 

Nun kommt die eigentliche Installation:

!Variablen initialisieren
WMIGetIndexData(‚\\.\root\cimv2′,’WIN32_BIOS‘,’0′,’WMI_‘)
SMBIOSBIOSVersion
EndProc
!
If %InstallationParameters.BIOSVersion%=’%WMI_SMBIOSBIOSVersion%‘
ExitProcEx(Done,’BIOS Aktuell.‘)
!
If RegValueExists(‚HKEY_LOCAL_MACHINE\SOFTWARE\_DSM‘,’BIOSErstinstallation‘)
MsgBoxEx(‚— Achtung! —<cr>Ein wichtiges Update für Ihren Rechner ist verfügbar. Bitte schliessen Sie alle Programme. Nach dem klick auf „OK“ startet der Rechner automatisch neu, nicht gespeicherte Daten gehen verloren.‘,’var_abfrage‘,“,mbOKCancel,’3600′,’1′)
If %var_abfrage%=’CANCEL‘
ExitProcEx(Undone,’Abbruch durch den Benutzer, Installation wird später fortgesetzt.‘)
!
RegModifyDWord(‚HKEY_LOCAL_MACHINE\SOFTWARE\_DSM‘,’BIOSErstinstallation‘,’1′,mrdwSet)
!
RunAsEx(‚%WINSYSDIR%\manage-bde.exe ‚,‘-protectors -disable C:‘,“,“,’2′,“,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/x64
RegModifyDWord(‚HKEY_LOCAL_MACHINE\SOFTWARE\_DSM‘,’BitlockerSuspended‘,’1′,mrdwSet)
!
RunAsEx(‚.\extern$\WinFlash64.exe‘,’/silent /file „.\extern$\N23ET68W\$0AN2300.FL1″‚,“,“,’10‘,’returncode‘,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)
ExitProcEx(Undone,’Neustart ausstehend.‘)
Sleep(‚5‘)
System_Reset
EndInstallerSession

 

Ich möchte hier nur auf den Bitlocker Teil eingehen:

 

Da das BIOS Update direkt nach der Ausführung ungefragt neu startet, wird vorher noch der Bitlocker angehalten:

RunAsEx(‚%WINSYSDIR%\manage-bde.exe ‚,‘-protectors -disable C:‘,“,“,’2′,“,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/x64

Und ein Registrykey gesetzt, dass es DSM war, das Bitlocker angehalten hat:

RegModifyDWord(‚HKEY_LOCAL_MACHINE\SOFTWARE\_DSM‘,’BitlockerSuspended‘,’1′,mrdwSet)

 

Das Update wird im Anschluss direkt gestartet und (wichtig!) das Paket auf „nicht ausgeführt“ gesetzt. Falls das BIOS Update erfolgreich war, wird er den Registrykey nach dem Neustart finden, Bitlocker wieder aktivieren und nach dem Vergleich der BIOS Version das Paket als „erfolgreich ausgeführt“ markieren.

ExitProcEx(Undone,’Neustart ausstehend.‘)

 

Das komplette Skript sieht dann so aus und funktioniert bei uns wie gewünscht:

If RegValueExists(‚HKEY_LOCAL_MACHINE\SOFTWARE\_DSM‘,’BitlockerSuspended‘)
RunAsEx(‚%WINSYSDIR%\manage-bde.exe ‚,‘-protectors -enable C:‘,“,“,’2′,“,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/x64
RegDeleteKey(‚HKEY_LOCAL_MACHINE\SOFTWARE\_DSM‘,’BitlockerSuspended‘,)
!
!Variablen initialisieren
WMIGetIndexData(‚\\.\root\cimv2′,’WIN32_BIOS‘,’0′,’WMI_‘)
SMBIOSBIOSVersion
EndProc
!
If %InstallationParameters.BIOSVersion%=’%WMI_SMBIOSBIOSVersion%‘
ExitProcEx(Done,’BIOS Aktuell.‘)
!
If RegValueExists(‚HKEY_LOCAL_MACHINE\SOFTWARE\_DSM‘,’BIOSErstinstallation‘)
MsgBoxEx(‚— Achtung! —<cr>Ein wichtiges Update für Ihren Rechner ist verfügbar. Bitte schliessen Sie alle Programme. Nach dem klick auf „OK“ startet der Rechner automatisch neu, nicht gespeicherte Daten gehen verloren.‘,’var_abfrage‘,“,mbOKCancel,’3600′,’1′)
If %var_abfrage%=’CANCEL‘
ExitProcEx(Undone,’Abbruch durch den Benutzer, Installation wird später fortgesetzt.‘)
!
RegModifyDWord(‚HKEY_LOCAL_MACHINE\SOFTWARE\_DSM‘,’BIOSErstinstallation‘,’1′,mrdwSet)
!
RunAsEx(‚%WINSYSDIR%\manage-bde.exe ‚,‘-protectors -disable C:‘,“,“,’2′,“,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/x64
RegModifyDWord(‚HKEY_LOCAL_MACHINE\SOFTWARE\_DSM‘,’BitlockerSuspended‘,’1′,mrdwSet)
!
RunAsEx(‚.\extern$\WinFlash64.exe‘,’/silent /file „.\extern$\N23ET68W\$0AN2300.FL1″‚,“,“,’10‘,’returncode‘,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)
ExitProcEx(Undone,’Neustart ausstehend.‘)
Sleep(‚5‘)
System_Reset
EndInstallerSession

Schreibe einen Kommentar