Nachdem Windows 11 am 05.10.2021 veröffentlicht wurde, wollte ich das ganze in einer virtuellen Maschine austesten.

Für gewöhnlich nutze ich dafür libvirt unter Linux, dort gab es allerdings einige Probleme durch die neuen Hardwareanforderung von Windows 11.

Die folgenden Punkte haben einer einfachen Installtion im Weg gestanden:

  • System Firmware “UEFI, Secure Boot capable.”
  • TPM “Trusted Platform Module (TPM) version 2.0”

System Firmware

Dieses Problem war relativ leicht zu lösen, allerdings muss man diese Einstellung beim Erstellen der Maschine setzten. Eine nachträgliche Änderung ist nicht mehr möglich.

Dazu muss im letzten Schritt des anlegens der VM vom VMM (Virtual Maschine Manager) “Konfiguration bearbeiten vor der Installation” gewählt werden. Danach kann im Punkt “Übersicht” als Firmware der Eintrag mit “UEFI” augewählt werden.

TPM

Ein sogenanntes “Trusted Platform Module” ist dafür da, die Sicherheit zu erhöhen. Er soll z.B. gegen Manipulation schützen. Ab Windows 11 ist der Einsatz in virtuellen Maschinen unumgänglich.

Es gibt die Möglichkeit das TPM des Wirts an die virtuelle Maschine weiterzugeben (passtrough). Dies ist allerdings in vielen Fällen nicht sehr verlässlich und auch nicht umbedingt portabel. Die Alternative ist der Einsatz einen Software TPM.

Zu diesem Zweck haben zwei IBM Mitarbeiter das Tool swtpm entwickelt. Die Möglichkeiten des Tools werden im folgenden kurz beschrieben:

The SWTPM package provides TPM emulators with different front-end interfaces to libtpms. TPM emulators provide socket interfaces (TCP/IP and Unix) and the Linux CUSE interface for the creation of multiple native /dev/vtpm devices.

Mithilfe dieses Tools lassen sich einfach “virtuelle” TPMs in virtuelle Maschinen einbinden. Innerhalb einer libvirt Konfiguration sieht es wie folgt aus:

<tpm model="tpm-crb">
  <backend type="emulator" version="2.0"/>
</tpm>

Im Anschluss erkennt Windows das TPM Modul in lässt sich installieren.

Probleme mit offiziellen Paketquellen

Für den Einsatz eines virtuellen TPMs wird das Binary swtpm benötigt, die Installation hat auf meinem System leider nicht geklappt. Ich habe als Wirt System ein Ubuntu 21.04 benutzt, es scheint das der Fehler allerdings auch auf Ubuntu 20.04 auftritt.

Die derzeitige Version in den offiziellen Ubuntu Paketquellen ist leider veraltet.

$ apt info libtpms0

Package: libtpms0
Version: 0.8.0~dev1-1.2ubuntu1
Priority: optional
Section: universe/libs
Source: libtpms
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Seunghun Han <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 976 kB
Depends: openssl, libc6 (>= 2.17), libssl1.1 (>= 1.1.1)
Homepage: https://github.com/stefanberger/libtpms
Download-Size: 317 kB
APT-Sources: http://de.archive.ubuntu.com/ubuntu hirsute/universe amd64 Packages
Description: TPM emulation library
 Libtpms is a library that provides TPM functionality. Libtpm is used
 by swtpm package.

Aktuell (Stand: 10.10.2021) liegen swtpm in der Version 0.6.1 und libtpms in der Version 0.9.0 vor. Die Installation ist in den GitHub Repos gut dokumentiert.

Kurz zusammengefasst kann man entweder lokal die libtpms Library und swtpm Binary kompilieren oder ein .deb Paket bauen. Ich habe mich für das lokale kompilieren entschieden.

Zunächst muss die Library mit den folgenden Befehlen kompiliert werden:

sudo apt install automake autoconf libtool make gcc libc-dev libssl-dev

wget https://github.com/stefanberger/libtpms/archive/refs/tags/v0.9.0.zip
unzip v0.9.0.zip

cd libtpms-0.9.0
./autogen.sh --with-tpm2 --with-openssl --prefix=/usr
make
make check
sudo make install

Im Anschluss dann noch das Binary kompilieren:

sudo apt install build-essential devscripts equivs

wget https://github.com/stefanberger/swtpm/archive/refs/tags/v0.6.1.zip
unzip v0.6.1.zip

cd swtpm-0.6.1

sudo mk-build-deps --install ./debian/control

./autogen.sh --prefix=/usr 
make
make check
sudo make install

Um kurz zu überprüfen, ob das Binary korrekt installiert ist bietet sich folgender Befehl an:

swtpm --version
TPM emulator version 0.6.1, Copyright (c) 2014-2021 IBM Corp.