Trusted Computing am Beispiel Windows Vista

Ordnungsmerkmale

erschienen in: <kes> 2007#5, Seite 47

Rubrik: BSI Forum

Schlagwort: Trusted Computing

Zusammenfassung: Der Begriff Trusted Computing umschreibt eine Reihe neuer Ansätze zur Verbesserung der Computersicherheit durch den Aufbau von Computersystemen aus vertrauenswürdigen Hardware- und Softwarekomponenten. Auch Microsoft hat in der jüngsten Generation ihrer Betriebssysteme einen Teil dieser Konzepte aufgegriffen.

Autor: Von Thomas Müller, Stuttgarter Hochschule der Medien

Für die Untersuchung der neuen Sicherheitsfunktionen in Windows Vista muss zunächst der Begriff des Trusted-Computing-Systems definiert werden. Die beiden bedeutendsten Bestandteile eines Trusted-Computing-Systems sind die sichere Rechnerplattform (Trusted Computing Platform) und das darauf aufbauende vertrauenswürdige Betriebssystem (Trusted Operating System).

Der Begriff der Trusted Computing Platform ist definiert durch die Spezifikationen der Trusted Computing Group (TCG) [1]. Sie beschreiben die Maßnahmen zur Überprüfung der Integrität von Hard- und Software durch Einsatz eines Trusted-Platform-Moduls (TPM). Das TPM ist eine zusätzliche Hardwarekomponente, die fest mit der Hauptplatine des Computers verbunden ist.

Die Funktionen des TPM entsprechen in etwa denen einer Smartcard, mit dem Unterschied, dass das TPM an die eigene Computerhardware gebunden ist und diese Hardwareplattform dadurch eindeutig identifiziert werden kann. Smartcards hingegen sind nicht an eine bestimmte Hardware gebunden und werden typischerweise zur Identifikation einer natürlichen Person verwendet.

Ein weiteres Alleinstellungsmerkmal des TPM sind die Platform Configuration Register (PCR), die der sicheren Speicherung von Prüfsummen über den aktuellen Zustand des Systems dienen. Neben dem TPM benötigt eine Trusted Computing Platform eine weitere Komponente: die Core Root Of Trust For Measurement (CRTM), die in der Regel als Erweiterung des BIOS implementiert ist. Die CRTM enthält die ersten Instruktionen, die beim Start des Systems ausgeführt werden und erstellt Prüfsummen (SHA-1-Hashes) von sich selbst und dem BIOS und legt diese im ersten PCR des TPM ab (PCR-0). Erst nach dieser Messung übernimmt das BIOS die Kontrolle. Es hinterlegt ebenfalls Prüfsummen über seine Konfiguration, weitere System-ROMs und schließlich über den Master Boot Record (MBR) der ersten Festplatte in den Registern PCR-1 bis PCR-7. Dieser Prozess dient dem Aufbau einer Vertrauenskette (Chain of Trust) durch alle am Bootvorgang des Systems beteiligten Betriebsstufen und deren Komponenten.

Eine Trusted Computing Platform ist also ein Computersystem, das um ein TPM und eine CRTM erweitert wurde, und bildet dadurch den Vertrauensanker (Root of Trust) für darauf aufsetzende Trusted-Computing-Anwendungen. Durch das Erzeugen der beschriebenen Prüfsummen initiiert die Trusted Computing Platform die Vertrauenskette vom BIOS POST bis zum MBR und stellt damit sicher, dass alle bisher ausgeführten Komponenten auf ihre Vertrauenswürdigkeit überprüft werden können.

Die Trusted Computing Platform besteht nur aus Hardware und Firmware und arbeitet dadurch unabhängig von installierten Betriebssystemen. Systeme, die konform zu den Spezifikationen der TCG sind, bieten die Möglichkeit, die TPM-Funktionen im BIOS zu aktivieren beziehungsweise zu deaktivieren.

Trusted Operating System

Die Definition des Trusted Operating System (Trusted OS) ist dagegen weitaus komplexer und umfasst zahlreiche Sicherheitsfunktionen und Konzepte. Eine eindeutige Definition des Begriffs oder gar Spezifikationen, wie für die Trusted Computing Platform, sind zum aktuellen Zeitpunkt nicht verfügbar. Dennoch lassen sich die grundlegenden Aufgaben eines Trusted OS auf einer abstrakten Ebene beschreiben:

Weiterführung der Vertrauenskette

Wie schon erwähnt erzeugt die Trusted Computing Platform Prüfsummen aller am Systemstart beteiligten Komponenten bis zum MBR. Der ausführbare Teil des MBR ist in der Regel bereits Teil des Betriebssystems und enthält Instruktionen zum Start der nächsten Betriebssystem-Komponente. Häufig ist dies ein Bootmanager, der eine Auswahl der zu startenden Betriebssysteme anbietet. Der Bootmanager ruft das Startprogramm des ausgewählten Betriebssystems (OS-Loader) auf, welches die nötigen Boot-Treiber und schließlich den Kern des Betriebssystems (OS-Kernel) startet. Der OS-Kernel lädt dann die zur Laufzeit verwendeten Treiber und startet die Systemdienste.

Um die Chain of Trust fortsetzen zu können, muss ein Trusted OS jeden der beschriebenen Schritte um die Erzeugung entsprechender Prüfsummen ergänzen. Deswegen benötigt bereits der MBR zusätzliche Routinen, die eine Messung des nachfolgenden Bootmanagers ermöglichen, bevor dessen Instruktionen ausgeführt werden. Der Bootmanager wiederum muss eine Möglichkeit vorsehen, eine Prüfsumme über den OS-Loader zu erzeugen. Dieses Prüfsummenkonzept muss bis zum vollständigen Start des Betriebssystems fortgesetzt werden, erst dann kann der Systemstart als "Trusted Boot" oder "Authenticated Boot" bezeichnet werden.

Die zentrale Funktion der Vertrauenskette ist die Erfassung des aktuellen Zustands einer Komponente als Grundlage für die Überprüfung der Vertrauenswürdigkeit der Folgekomponente. Eine Protokollierung des Startvorgangs alleine wäre unzureichend, da jede zu einem späteren Zeitpunkt auf dem System ausgeführte Applikation Auswirkungen auf diesen Zustand hat. Die Weiterführung der Vertrauenskette zur Laufzeit des Betriebssystems ist unter anderem aufgrund der nun parallel ausgeführten Prozesse deutlich komplexer. Dieses vom Autor als Tree of Trust bezeichnete Verfahren wurde bisher nur im Rahmen eines IBM Forschungsprojekts adressiert [2].

Bewertung der Systemintegrität

Entgegen der häufig zu lesenden Aussage, die Trusted Computing Platform stelle die Integrität eines Computersystems sicher, bietet sie lediglich die Möglichkeit zur Protokollierung der ersten Instanzen des Startvorgangs und zur Identifikation der daran beteiligten Komponenten. Eine Bewertung der Integrität dieser Komponenten basiert zwar auf den dabei erzeugten Prüfsummen, ist jedoch Aufgabe des Trusted OS und erfordert die Implementierung entsprechender Metriken.

Hierfür sollte ein Trusted OS zumindest einen Teil der durch die Trusted Computing Platform im TPM hinterlegten und sämtliche während des restlichen Bootvorgangs (Chain of Trust) erzeugten Prüfsummen mit entsprechenden Referenzwerten vergleichen. Wichtig hierbei ist, dass die prüfende Komponente selbst Teil der Vertrauenskette ist und somit über eine Prüfsumme verfügt. Der Mechanismus, mit dem sichergestellt wird, dass ein Systemstart nur im Falle einer positiven Integritätsprüfung stattfindet, heißt Secure Boot. Da die korrekte Bewertung der Vertrauenswürdigkeit eines Systems auf dem System selbst ein nicht triviales Problem darstellt, sollte die Auswertung der gesammelten Prüfsummen auf einem separaten System durchgeführt werden. Für diesen als Remote Attestation bezeichneten Vorgang muss das Trusted OS eine entsprechende Schnittstelle zur Abfrage der Prüfsummen bereitstellen.

TPM-Schnittstelle für Anwendungen

Neben dem Trusted OS sollten die durch das TPM bereitgestellten Funktionen auch den Anwendungen zur Verfügung stehen. In der Regel wird dies durch eine Implementierung der TCG-Spezifikation für einen Trusted Software Stack (TSS) erreicht. Durch den Einsatz eines TSS können die kryptographischen Funktionen des TPM beispielsweise von einer E-Mail-Anwendung zur Signatur von Nachrichten verwendet werden.

Windows Vista und das TPM

Das TPM kann unter Vista mithilfe eines Assistenten verwaltet werden. Er bietet die Möglichkeit das TPM zu aktivieren, was dem Betriebszustand "activated" entspricht. Dies gelingt jedoch nur, wenn das TPM zuvor im BIOS eingeschaltet (enabled) wurde. Ist das TPM aktiviert, konfiguriert der Assistent das TPM für die spätere Verwendung durch die BitLocker-Festplattenverschlüsselung, indem der Assistent den Besitz des TPM übernimmt (TPM_TakeOwnership). Hierbei wird ein RSA-Schlüsselpaar im TPM erzeugt, mit dem beliebige Daten durch das TPM verschlüsselt werden können. Diese verschlüsselten Daten werden nicht innerhalb des TPM gespeichert, sondern auf einem der regulären Datenträger.

Um das TPM vor unberechtigtem Zugriff zu schützen, erfordert der Zugriff auf sicherheitskritische Funktionen des TPM die Angabe des TPM-Eigentümer-Passworts, welches automatisch durch den Assistenten erzeugt werden kann. Dieses Kennwort wird bei entsprechender Konfiguration der Gruppenrichtlinien im Active Directory der Windows-Domäne abgelegt. Die Möglichkeit, den Zugriff auf das im TPM erzeugte RSA-Schlüsselpaar ebenfalls durch ein Passwort zu schützen, hat Microsoft jedoch nicht wahrgenommen, was in erster Linie ein Zugeständnis an die Benutzerfreundlichkeit ist. Wäre dieses Passwort gesetzt, müsste der Benutzer bei jeder Verwendung des Schlüsselpaares das Passwort angeben, im Falle einer aktivierten BitLocker-Festplattenverschlüsselung somit bei jedem Systemstart.

[Illustration]
Abbildung 1: Trusted Software Stack in Vista

Bei der Implementierung eines TSS für den Zugriff auf das TPM hat sich Microsoft für eine von der TCG-Spezifikation abweichende Umsetzung entschieden. Der Zugriff auf die Funktionen des TPM erfolgt hierbei entweder über eine WMI-Schnittstelle oder über die neue Microsoft Krypto-API "Cryptography Next Generation" (CNG). Diese beiden Schnittstellen bilden jedoch nur eine Teilmenge der verfügbaren Funktionen ab.

Der TPM Base Service regelt den simultanen Zugriff auf das TPM und bietet eine Schnittstelle an, auf die vollständige TSS-Implementierungen aufsetzen können [3]. Der TPM Base Service bietet zusätzlich die Möglichkeit, die Verwendung bestimmter TPM-Befehle unter Zuhilfenahme einer Sperrliste zu blockieren. Diese Sperrliste kann sowohl über die lokale Windows-Sicherheitsrichtlinie als auch zentral über Gruppenrichtlinien erstellt werden. Es können lokal keine Kommandos freigegeben werden, die per Gruppenrichtlinie gesperrt sind. Es ist jedoch möglich, zusätzliche Kommandos über die lokale Sicherheitsrichtlinie zu sperren. Interessanterweise hat Microsoft eine zusätzliche Option in den Gruppenrichtlinien vorgesehen, mit der auch die Erweiterung der Sperrliste verhindert wird. Dadurch können keine Kommandos gesperrt werden, die in den Gruppenrichtlinien als aktiv markiert sind.

Windows Vista als Trusted OS

Aus der Menge der neuen Sicherheitsfunktionen im Windows Vista lassen sich lediglich zwei Funktionen mit den beschriebenen Anforderungen an ein Trusted OS in Verbindung bringen.

Secure Startup und Full Volume Encryption (FVE) – BitLocker

Die BitLocker-Festplattenverschlüsselung in Windows Vista besteht aus zwei Komponenten: dem Secure Startup und der Full Volume Encryption (FVE). Notwendige Voraussetzung für die Nutzung aller Funktionen dieser Komponenten ist die Verfügbarkeit eines TPM. Auf einem System mit aktiviertem TPM dient der Secure Startup der Fortsetzung der Vertrauenskette: Hierfür erweitert Microsoft den MBR, die letzte von der Trusted Computing Platform protokollierte Komponente, um die Funktion, die nächste Stufe des Startvorgangs, den NTFS-Bootsektor (VBR), zu protokollieren und im Platform Configuration Register (PCR-8) zu hinterlegen. Der NTFS-Bootsektor wiederum hinterlegt die Prüfsumme über den NTFS-Boot-Block (BPB) im PCR-9. Zuletzt misst der NTFS-Boot-Block den Bootmanager und speichert dessen Wert im PCR-10. Dieser Vorgang wird bei jedem Startvorgang wiederholt.

[Illustration]
Abbildung 2: Secure Startup

Die Full Volume Encryption bietet zusätzlich zur bereits vorhandenen Verschlüsselung auf Dateiebene (Encrypted File System – EFS) die Möglichkeit, die komplette Systempartition zu verschlüsseln. Hierdurch werden neben Daten der Benutzer auch sämtliche System-Dateien, temporäre Dateien, die Auslagerungsdatei und die Dateien des Ruhezustands verschlüsselt.

Um die Partition beim Startvorgang entschlüsseln zu können, muss eine weitere NTFS-Partition angelegt werden. Sie enthält neben dem MBR den Bootmanager, der die Entschlüsselung startet und danach den OS-Loader (%Windows%\system32\WINLOAD.EXE) aufruft. Als Verschlüsselungsalgorithmus kommt eine abgewandelte Version von AES zum Einsatz, wahlweise mit 128 Bit oder 256 Bit Schlüssellänge. Der Schlüssel wird als Full Volume Encryption Key (FVEK) bezeichnet und ist nochmals mittels AES-256 durch den Volume Master Key (VMK) gesichert.

Dieses zweistufige Konzept hat den Vorteil, dass bei einer notwendigen Änderung des Schlüssels nicht die komplette Partition entschlüsselt und anschließend wieder verschlüsselt werden muss. Sowohl der FVEK also auch der VMK werden in einem Bereich der Partition hinterlegt, auf die der Bootmanager Zugriff hat. Die genaue Lage der Schlüssel wird von Microsoft nicht dokumentiert, ein möglicher Speicherort wäre der NTFS-Header der Systempartition.

Zur Sicherung des Volume Master Key kommt die Sealing-Funktion des TPM zum Einsatz, die es ermöglicht, beliebige Daten an die aktuelle Konfiguration des Systems zu binden. Dabei fließen die Inhalte der Platform Configuration Register in den Verschlüsselungsvorgang mit ein. Die aktuelle Konfiguration wird durch die von der Trusted Computing Platform und der Secure-Startup-Komponente hinterlegten Prüfsummen in den Registern PCR-0 bis PCR-11 repräsentiert. Zusätzlich lässt sich der Volume Master Key durch ein numerisches Kennwort (PIN) oder einen zusätzlichen externen Schlüssel schützen. In der Standardkonfiguration verwendet die Full Volume Encryption nur ein Subset dieser Prüfsummen PCR-(0,2,4,8-11) und verzichtet auf den zusätzlichen Schutz durch eine PIN oder weitere Schlüssel auf einem USB-Stick.

Beim Systemstart verwendet der Bootmanager die Unseal-Funktion des TPM, um den Volume Master Key zu entschlüsseln. Dies gelingt jedoch nur dann, wenn die verwendeten PCR denselben Zustand wie zum Zeitpunkt der Aktivierung von BitLocker aufweisen. Modifikationen an Systemkomponenten wie zum Beispiel dem MBR oder dem BIOS führen somit zu einer Unterbrechung des Startvorgangs, welche nur durch die Eingabe des Kennworts für die Wiederherstellung, das bei der Aktivierung von BitLocker erzeugt wird, fortgesetzt werden kann.

Die Secure-Startup-Komponente setzt die durch die Trusted Computing Platform begonnene Vertrauenskette sinnvoll fort. Jedoch lassen sich einige Kritikpunkte an der Implementierung finden: So werden zwar Modifikationen an den am Systemstart beteiligten Komponenten erkannt, es gibt jedoch keine Möglichkeit, die geänderte Komponente zu identifizieren, und somit fällt es schwer, geeignete Maßnahmen zu ergreifen. Das entscheidende Problem besteht jedoch in der Tatsache, dass auch eine erfolgreiche Entschlüsselung des Volume Master Key keinen integeren Systemzustand garantiert, da hierbei lediglich sichergestellt wird, dass sich das System in demselben Zustand wie bei der Aktivierung von BitLocker befindet. War das System jedoch bereits zu diesem Zeitpunkt kompromittiert, gibt es keine Möglichkeit dies zu erkennen.

Außerdem wird die Vertrauenskette nur bis zum Bootmanager erweitert, die beiden nächsten Stufen, der OS-Loader (%SystemRoot%\system32\WINLOAD.EXE) und der Betriebssystemkern (%SystemRoot%\system32\NTOSKRNL.EXE), werden hierbei nicht mehr berücksichtigt. Zwar unterliegen diese beiden Komponenten weiteren Integritätsprüfungen, jedoch hätte dadurch eine Schwachstelle, die am Ende des Artikels beschrieben wird, verhindert werden können.

Kernel Integrity Checks und Driver Signing

Eine weitere Maßnahme zur Sicherung der Systemintegrität ist die Überprüfung von Treiber-Signaturen. Hierfür müssen in den 64-Bit-Versionen der Betriebssysteme alle Treiber mit einem gültigen Zertifikat signiert sein [4]. In den 32-Bit-Versionen ist eine Signatur nur für die am Startvorgang beteiligten Treiber zwingend vorgeschrieben. Die Überprüfung der Treiber-Signaturen findet zu mehreren Zeitpunkten im Lade- und Ablaufzyklus des Betriebssystems statt.

[Illustration]
Abbildung 3: Überprüfung der Treiber-Signaturen

Für die erste Überprüfung ist der OS-Loader zuständig. Dieser überprüft zunächst die korrekte Funktionsweise der für die Überprüfung eingesetzten Crypto-Library (MinCrypt) durch den Aufruf eines Selbsttests. Danach lädt er eine signierte Liste von gültigen Prüfsummen (%SystemRoot%\System32\...\nt5.cat). Anschließend überprüft der OS-Loader durch den Vergleich der errechneten Prüfsumme mit der im Header der Datei hinterlegten Signatur seine eigene Integrität. Zusätzlich stellt er sicher, dass die Prüfsumme auch in der Liste der gültigen Prüfsummen enthalten ist.

Genau dasselbe Verfahren wird im Folgenden auf sämtliche Boot-Treiber angewandt, also auf alle Treiber, die zum Laden des eigentlichen Betriebssystemkerns nötig sind. Dies gilt ebenso für die nächste Instanz des Startvorgangs, den Betriebssystemkern. Wurden alle Überprüfungen positiv abgeschlossen, kommen der Betriebssystemkern und die verifizierten Boot-Treiber zur Ausführung.

Der Betriebssystemkern ist verantwortlich für die Überprüfung der System-Dateien, hierzu zählen die einzelnen Komponenten des Betriebssystems sowie die Treiber für systemspezifische Hardware. Der Betriebssystemkern überprüft nun nach demselben Verfahren wie zuvor bereits der OS-Loader sämtliche Treiber, bevor er sie in den Speicherbereich des Betriebssystems lädt.

Dadurch werden zwei Anforderungen erfüllt: Zum einen kann durch die Verifizierung der Signaturen sichergestellt werden, dass die Treiber aus einer vertrauenswürdigen Quelle stammen und seit der Signierung nicht verändert wurden. Zusätzlich stellt der Vergleich mit der Liste der gültigen Prüfsummen sicher, dass nur vom Betriebssystemhersteller für dieses Stadium des Systemstarts vorgesehene Treiber geladen werden. Zur Laufzeit des Systems nachgeladene Treiber werden ebenfalls anhand ihrer Signatur überprüft.

Eine weitere interessante Funktion des Betriebssystemkerns ist die Überprüfung der Signatur einer Applikation, die mit administrativen Rechten gestartet wird: Verfügt eine Applikation nicht über ein gültiges Zertifikat, wird der Benutzer über dieses Defizit informiert. Zusätzlich kann mittels Gruppenrichtlinie die Ausführung solcher Applikationen verhindert werden.

Fazit

Sowohl BitLocker als auch die Überprüfung von Treiber-Signaturen tragen zu einer Verbesserung der Sicherheitsniveaus bei, jedoch hat Microsoft die Chance nicht genutzt, die im Falle eines vorhandenen TPM durch die Trusted Computing Platform und den Secure Startup aufgebaute Vertrauenskette (Chain of Trust) fortzusetzen. So werden zwar sämtliche am Startvorgang beteiligten Komponenten, beginnend mit dem OS-Loader, anhand ihrer Signatur überprüft und nur im Falle eines positiven Ergebnisses in die nächste Betriebsstufe gewechselt, jedoch beginnt die Überprüfung mit einem Selbsttest des OS-Loaders. Das Konzept einer echten Vertrauenskette sieht jedoch vor, dass jede Komponente vor ihrer Ausführung durch ihren Vorgänger geprüft beziehungsweise zumindest protokolliert werden muss.

[Illustration]
Abbildung 4: Lücke in der Chain of Trust

Dieses Versäumnis ermöglicht durch eine einfache Modifikation des Betriebssystemkerns (%SystemRoot%\system32\NTOSKRNL.EXE) einen Angriff auf die Driver-Signing-Funktion. Dies führt zwar zu einer ungültigen Signatur dieser Datei, weshalb vom Angreifer zusätzlich auch die Datei des OS-Loaders (%SystemRoot%\system32\WINLOAD.EXE) modifiziert werden muss. Dadurch kann jedoch neben der Überprüfung der Treiber-Signaturen auch der Selbsttest des OS-Loaders deaktiviert werden und somit eine Erkennung des Angriffs verhindert werden [5]. Würde der Bootmanager vor der Ausführung des OS-Loaders eine Prüfsumme über diesen in einem weiteren PCR hinterlegen und somit die Vertrauenskette erweitern, gäbe es die Möglichkeit, diesen Angriff anhand der abweichenden Prüfsumme zu erkennen.

Trotz der Schwächen ist Windows Vista der Vorreiter für Trusted Computing im Bereich der kommerziellen Betriebssysteme. Es setzt momentan zwar nur eine Teilmenge der notwendigen Konzepte um, begründet damit aber einen ersten Fortschritt in der Vertrauenswürdigkeit von Betriebssystem und Anwendungen.

Literatur

[1]
Trusted Computing Group, [externer Link] www.trustedcomputinggroup.org
[2]
IBM Integrity Measurement Architecture, [externer Link] http://sourceforge.net/projects/linux-ima
[3]
Xnos Labs, TPM/J für Vista, [externer Link] www.xnos.org/security/trusted-computing/tpmj.html
[4]
Microsoft, Digital Signatures for Kernel Modules on x64-based Systems Running Windows Vista, 2007-07, [externer Link] www.microsoft.com/whdc/winlogo/drvsign/kmsigning.mspx
[5]
Matthew Conover, Symantec, Assessment of Windows Vista Kernel-Mode Security, 2006-08, [externer Link] www.symantec.com/avcenter/reference/Windows_Vista_Kernel_Mode_Security.pdf