Die mehr als 20 Megabyte Binärcode eines modernen UEFI-BIOS enthalten mehrere Hundert ausführbare (EFI-)Programme. Viele davon haben Sicherheitslücken, von denen einige schon seit Jahren bekannt sind. Das belegen Experten der Firma Binarly am Beispiel eines aktuellen BIOS-Updates für ein Business-Notebook aus der Baureihe Lenovo ThinkPad. Die Binarly-Gründer Alex Matrosov und Claudiu Teodorescu haben den BIOS-Binärcode gezielt nach Varianten des Open-Source-Tools OpenSSL durchforstet. OpenSSL dient im offengelegten EFI Design Kit II (EDK 2), welches die Quellcode-Basis vieler UEFI-BIOS-Implementierungen bildet, als Allzweck-Werkzeug für kryptrografische Sicherheitsfunktionen. Denn das UEFI-Codemodul Crypto Package (CryptoPkg) dient unter anderem als Wrapper für OpenSSL-Funktionen. Ein real existierendes UEFI-BIOS enthält allerdings UEFI-Code und BLOBs von unterschiedlichen Firmen und Zulieferern. Und solche BLOBs sind teilweise schon älter oder basieren auf älterem Quellcode. Der Online-Dienst Virustotal.com kann bestimmte BIOS-Images „zerlegen“ und zeigte in einem kurzen Versuch mit einem Lenovo-BIOS-Image über 600 einzelne Module an. Die Binarly-Experten fanden jedenfalls in dem untersuchten BIOS-Image, das Lenovo auch über den Linux Vendor Firmware Service (LVFS) bereitstellt, 27 Funktionen mit drei verschiedenen OpenSSL-Versionen. In den meisten steckte OpenSSL 1.0.2j aus dem Jahr 2018, aber es fanden sich auch OpenSSL 1.0.0a und 0.9.8zb aus dem Jahr 2014. In OpenSSL 0.9.8zb stecken laut Binarly seit acht Jahren bekannte Sicherheitslücken. Pikanterweise dient das Codemodul „InfineonTpmUpdateDxe“ mit dieser OpenSSL-Version wohl dazu, Firmware-Updates für das Trusted Platform Module (TPM) einzuspielen, also für den Sicherheitschip, der als Hardware-Anker (Root of Trust) für wichtige Sicherheitsfunktionen dient.
UEFI-Code-Module mit OpenSSL-Versionen laut Binarly | |
UEFI-Code-Module | OpenSSL-Version |
DxeCore, Tcg2Dxe, TcgDxe, VariableSmm, SecurityStubDxe, IpSecDxe, IScsiDxe, Setup, PlatformMilestoneHookDxe, PlatformMilestoneHookSmm, LenovoTpmConfigDxe, PlatformInit, PeimBoardInit, Tcg2Pei, TcgPei, PlatformInitPreMem, LenovoPcdInit, LenovoVerifiedBootPei | OpenSSL 1.0.2j (2018) |
FlashUtilitySmm, LenovoCryptService, LenovoCryptServiceSmm, LenovoSvpManagerSmm, LenovoSetupAutomationSmm, LenovoSetupUnderOsSmm, LenovoSecureKeySmm, LenovoDriveEraseSmm | OpenSSL 1.0.0a (2014) |
InfineonTpmUpdateDxe | OpenSSL 0.9.8zb (2014) |
DXE = Driver Execution Environment, SMM = System Management Mode | |
PEI = Pre-EFI Initialization, PEIM = Pre-EFI Initialization Module |
Laut Binarly ist das OpenSSL-Versionsgewirr in einem real existierenden BIOS-Update nur eines von zahlreichen Beispielen dafür, dass das gängige Konzept zur Pflege von (UEFI-)Firmware nicht funktioniert: „The Firmware Supply-Chain Security Is Broken“. Dadurch werden bekannte Sicherheitslücken zum Teil jahrelang nicht geschlossen.