Trusted Boot mit TPM auf IBM Notebook: Difference between revisions
(80 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
=Überblick= |
|||
===Motivation=== |
|||
Im heutigen Informationszeitalter ist es von großer Bedeutung, Daten sicher zu übermitteln. Für dieses Problem gibt es vielfältige Lösungen. Ist das System, mit dem gearbeitet wird, bereits kompromitiert, dann nützt die Sicherheit allein auch nichts mehr. Wie der Endanwender nun die Möglichkeit hat, sich von der Vertrauenswürdigkeit des benutzten Systems zu überzeugen, wird im Folgenden beschrieben. Zwei Dinge werden genauer betrachtet, zum einen die zugrunde liegende Hardware, zum anderen die angepasste Software, wobei der gesamte Bootvorgang untersucht wird und eine sogenannte Vertrauenskette aufgebaut wird. Dem Benutzer soll es möglich sein, jegliche Veränderungen am System zu bemerken. |
|||
= Trusted Platform Module = |
|||
Aufbau einer vertrauenswürdigen Plattform. |
|||
Es folgt eine technische Beschreibung des Trusted Platform Module (TPM). Weiterhin wird ein Überblick über die Funktionen und die Realisierung des Trusted Boot und das Erstellen von Schlüsseln sowie Zertifikaten gegeben. |
|||
Endlich klappts mit dem Login :) |
|||
== Allgemein == |
|||
Der Hauptbestandteil des TPM ist ein Chip, der als Teil einer Spezifikation zur Verifizierung der Vertrauenswürdigkeit von IT-Systemen dient. Am ehesten kann man ihn mit einer Smart-Card vergleichen, mit dem Unterschied, dass er nicht an einen Benutzer, sondern an ein System gebunden ist. Dadurch ist eine hardwareseitige Modifizierung nutzlos, da alle Daten, die mit Hilfe des Chips geändert/verschlüsselt wurden, nur auf dem entsprechenden System gelesen/entschlüsselt werden können, selbst wenn dieser auf einer anderen Plattform installiert wird. Standardmäßig ist er auf dem entsprechenden System deaktiviert und ist auch nur ein passives Bauelement. Der Chip bietet zwar eine Vielzahl von Sicherheitsfunktionen an, die jedoch alle von außen angestoßen werden müssen. Somit kann der Chip keinen direkten Einfluss auf den Bootvorgang oder das laufende System nehmen. |
|||
Die zwei Hauptfunktionen des Chips sind das Auslesen und das Verarbeiten systemspezifischer Referenzwerte. |
|||
== Funktionen == |
|||
Neben den beiden Hauptfunktionen (Auslesen, Speichern/Verarbeiten der systemspezifischen Werte) bietet der TPM-Chip noch eine Reihe zusätzlicher und nützlicher Funktionen. |
|||
=== Schlüsselerstellung === |
|||
Der TPM-Chip verfügt über einen RSA-Schlüsselgenerator. Alle Schlüssel, die mit ihm erstellt werden, können (bzw. müssen) auf dem Chip selbst gespeichert werden. Hierzu dienen 10 RSA-Key-Slots. |
|||
==== Endorsement-Key (EK) ==== |
|||
* 2048 bit RSA-Schlüssel |
|||
* eindeutiges private/public - Schlüsselpaar |
|||
* Geschützt durch Endorsement-Zertifikat vom Hersteller des TPM, der die Einhaltung der TCG-Spezifizierungen bestätigt |
|||
* in den neueren Spezifikationen kann dieser Schlüssel vom Owner des Systems neu gesetzt werden |
|||
==== Attestation-Identity-Key (AIK) ==== |
|||
* 2048 bit RSA-Schlüssel |
|||
* wird mit Hilfe des EK erstellt |
|||
* ist anonyme Identität des Systems |
|||
* dient zur Authentifizierung und gewährleistet Vertrauenswürdigkeit des Systems |
|||
==== Storage-Root-Key (SRK) ==== |
|||
* 2048 bit RSA-Schlüssel |
|||
* wird bei Inbesitznahme durch den Owner erzeugt (TPM_TakeOwnership) |
|||
* dient zur Verschlüsselung eigener Schlüssel |
|||
* ist Wurzel der Schlüsselstruktur des TPM |
|||
== Zertifikate == |
|||
Damit die Echtheit eines Systems und dessen Vertrauenswürdigkeit bereits vor der Inbetriebnahme des Chips durch den Eigentümer garantiert werden kann, existieren die folgenden Zertifikate. |
|||
* '''Endorsement-Zertifikat''' (garantiert die Echtheit des TPM durch den TPM-Hersteller) |
|||
* '''Platform-Zertifikat''' (garantiert den Einbau eines echten TPM in die Plattform durch Plattform-Hersteller) |
|||
* '''Conformance-Zertifikat''' (bestätigt das TPM-Design nach den TCG-Spezifikationen und die korrekte Implementierung durch ein Labor) |
|||
== PCR == |
|||
Zum Speichern der Zustandswerte von Hard- und Software des Systems dienen die Platform Configuration Register (PCR). Dies sind mindestens 16 flüchtige Hash-Speicher, von denen die ersten 8 (0 - 7) für das TPM selbst reserviert sind (z.B. für Informationen zum BIOS und der aktuellen Hardware). Die restlichen PCRs kann von anderen Applikationen genutzt werden, z.B. für die Realisierung des Trusted Boot. Die Informationen in den PCRs können jederzeit ausgelesen werden, insofern der im folgenden beschriebene TSS dies erlaubt. |
|||
== Struktur == |
|||
Eine Plattform, die mit Hilfe des TPM als vertrauenswürdig klassifiziert werden kann, besteht im wesentlichen aus drei Komponenten: |
|||
* Core Root of Trust Measurement (CRTM) |
|||
* Trusted Platform Module (hier ist der Chip gemeint) |
|||
* Trusted Software Stack (TSS) |
|||
=== CRTM === |
|||
Das Core Root of Trust Measurement ist die Grundlage eines vertrauenswürdigen Systems. Durch das CRTM wird ab dem Bootvorgang die Vertrauenswürdigkeit des Systems gewährleistet. Im Prinzip handelt es sich hierbei um auführbaren Code, der die Systemkonfiguration misst und die Werte in den PCRs des TPM hinterlegt. Diese Daten sind somit plattformspezifisch und bilden den Grundstein für die sichere Schlüsselherstellung/Verschlüsselung. Das CRTM ist eng mit dem BIOS verknüpft, damit das Messen so früh wie möglich stattfinden kann. |
|||
=== TSS === |
|||
Zum Ansteuern der TPM-Funktionen dient der Trusted Software Stack, ein komplexes Softwarepaket mit Modulen und Komponenten. Er ist sozusagen die Schnittstelle zwischen TPM und Applikation des Andwenders und besteht aus zwei Hauptkomponenten: |
|||
* ''' Kernel-Modus ''' (direkter Zugriff auf den TPM-Chip, allerdings nur über User-Modus erreichbar) |
|||
* ''' User-Modus ''' (Schnittstellen und Dienste/Deamons zum Nutzen der TPM-Funktionen) |
|||
[[Image:Tpm_tss.gif]] |
|||
= Trusted Boot = |
|||
Ziel ist es dem Benutzer die Möglichkeit zu geben, sich von der Vertrauenswürdigkeit eines laufenden Betriebssystems zu überzeugen. Das beginnt mit dem Einschalten des Computers. |
|||
== Bootvorgang == |
|||
Nach dem Einschalten des Rechners übernimmt das BIOS die Kontrolle und führt einen '''P'''ower'''O'''n'''S'''elf'''T'''est durch. Sind keine Fehler zu verzeichnen führt das BIOS den Code des ersten auffindbaren '''M'''aster'''B'''oot'''R'''ecord eines bootbaren Laufwerks aus. Der MBR kann jeglichen Code der Größe 446 Byte enthalten. In den meisten Fällen ist dort der erste Teil eines Bootloaders zu finden, an den dann die Steuerung übergeben wird. |
|||
== TrustedGRUB == |
|||
===GRUB in Verbindung mit dem TPM=== |
|||
TrustedGRUB (kurz TGRUB) ist eine Erweiterung des klassischen GRUB um Funktionen des TPM. Jede Komponente des Bootvorgangs misst die Integrität der nachfolgenden Komponente. Somit kann eine s.g. '''Chain of Trust''' aufgebaut werden. Die letzte Komponente, GRUB Stage2, hat die Möglichkeit Dateien zu messen. |
|||
In der GRUB-Konfigurationsdatei menu.lst wird mit dem Eintrag <nowiki>CHECKFILE (hdX,Y)</nowiki> eine Datei angegeben, die SHA1-Hashwerte von Dateien enthält. Es sollte eine Datei mit Hashwerten der wichtigsten Systemdateien erstellt werden und für diese Datei anschließend der SHA1-Hashwert in der CHECKFILE-Datei hinterlegt werden. Wird ein Eintrag im Menü von Grub ausgewählt, werden vor dem Start des gewünschten Betriebssystems die Hashwerte, der in der Datei hinterlegten Dateien geprüft - bei vielen Einträgen dauert das. Treten dabei Abweichungen auf, wird der Benutzer darüber informiert und kann nun selbst bestimmen, ob er in das System booten möchte. |
|||
Die Konfiguration könnte folgendermaßen aussehen: |
|||
/boot/grub/menu.lst |
|||
default 0 |
|||
timeout 5 |
|||
#0 |
|||
title kernel 2.6.23-9 |
|||
root (hd0,1) |
|||
kernel /boot/kernel2.6.23-9 root=/dev/hda2 ro vga=791 |
|||
initrd /boot/initrd_2.6.23.9 |
|||
savedefault |
|||
#1 |
|||
title kernel 2.6.23-2 initrd chkfi |
|||
root (hd0,1) |
|||
kernel /boot/kernel2.6.23.9-2 root=/dev/hda2 ro vga=791 |
|||
initrd /boot/initrd_2.6.23.9-2.neu |
|||
checkfile /boot/grub/checkfiles |
|||
savedefault |
|||
/boot/grub/checkfiles |
|||
44efbdc75ee6d785b7eb04778f5565ccc910be97 (hd0,1)/boot/kernel2.6.23.9-2 |
|||
f534b8ef0ced43d9de021cc4e04b02956e4a2b5e (hd0,1)/boot/initrd_2.6.23.9-2 |
|||
99041760277232df550674c2a0e5e99df225c52b (hd0,1)/boot/grub/menu.lst |
|||
!!!Achtung!!! Zeilenumbruch nach letztem Eintrag und genau ein Leerzeichen zwischen Hashwert und Dateinamen. |
|||
TGRUB erzeugt während dem Laden Messwerte (SHA1), die in den PCRs wie folgt gespeichert werden: |
|||
* PCR 4 - Informationen des MBR und Stage1 |
|||
* PCR 8 - ersten 512 Bytes der Stage2 |
|||
* PCR 9 - Rest von Stage2 |
|||
* PCR 13 - Einträge aus <nowiki>CHECKFILE (hdX,Y)</nowiki> |
|||
* PCR 14 - Linux-Kernel und initrd-Dateien |
|||
Anmerkung: nicht nur der Hashwert des zu messenden Objektes wird gespeichert, sondern die Konkatenation mit dem Wert aus dem vorherigen PCR der Chain of Trust. |
|||
'''!!!Achtung!!!''' Befindet sich der Bootloader auf einem externen Gerät, werden die PCRs '''nicht''' gefüllt. |
|||
===Installation=== |
|||
!!! Vor der Installation der neuen Grub-Version im MBR wird empfohlen, einen bootbaren Datenträger zu erstellen. Somit kann das System in jedem Fall gestartet werden. |
|||
Dazu einen Datenträger mit mindestens einer Partition, auf der sich ein Dateisystem befindet, vorbereiten. Anschließend GRUB (alte Version starten) |
|||
grub // Kommandozeile von GRUB starten |
|||
root (hdX,Y) // Bootpartition des bootbaren Datenträgers; X und Y sind Zahlen |
|||
setup (hdX) // Datenträger, auf der die alte Version von GRUB installiert werden soll |
|||
quit |
|||
Die [http://sourceforge.net/projects/trustedgrub aktuelle Version 1.1.3] herunterladen, kompilieren und installieren. |
|||
tar xzvf TrustedGRUB-1.1.3.tgz |
|||
cd TrustedGRUB-1.1.3/TrustedGRUB-1.1.3 |
|||
./configure |
|||
make install |
|||
Nach der Installation von TGRUB muss nun noch der MBR aktualisiert werden, damit beim Booten der TGRUB als Bootloader verwendet wird. |
|||
rm /boot/grub/stage* |
|||
rm /boot/grub *1_5 |
|||
cp stage1/stage1 /boot/grub |
|||
cp stage2/stage2 /boot/grub |
|||
./grub/grub // Kommandozeile von GRUB starten |
|||
root (hdX,Y) //eigene Bootpartition angeben; X und Y sind Zahlen |
|||
setup (hdX) // Festplatte, auf der GRUB installiert werden soll |
|||
quit |
|||
Anschließend neustarten. Wenn die neue GRUB-Version erfolgreich installiert worden ist, hat man nach dem Laden von GRUB zwei neue Befehle zur Verfügung: |
|||
* SHA1 - Hashwert einer Datei bilden |
|||
* CHECKFILE (hdX,Y)file- Prüfen der Hashwerte, der in der Datei hinterlegten Dateien |
|||
===Möglichkeiten des Anwenders=== |
|||
Im laufenden System kann der Benutzer die Hashwerte in der PCRs mit dem Befehl |
|||
verify_pcr |
|||
prüfen. Dabei ist das PCR, das geprüft werden soll und die zu prüfenden Dateien anzugeben. Nachteilig an dieser Stelle zu erwähnen sei der Aspekt, dass der Anwender die Dateien kennen muss, die zur Berechnung des PCR-Hashes benutzt werden. |
|||
Die aktellen Werte der PCRs lassen sich mit folgendem Befehl anzeigen: |
|||
cat /sys/class/misc/tpm0/device/pcrs |
|||
Beispielausgabe |
|||
PCR-00: 21 AB F9 04 1E 9F 15 96 49 AA 1B 94 9E 46 23 61 5D 93 CA ED |
|||
PCR-01: 8E E5 5A 0D 67 45 AA 22 DF 33 5C 80 96 F2 01 8E 0B 19 1E DA |
|||
PCR-02: EB B3 BA AE E7 57 4B B6 37 AA AB 67 0F 9A C1 BC EB 6F 80 F3 |
|||
PCR-03: 04 FD EC DD 50 1D AF 0F 62 4C 1F 99 60 12 CF 30 44 FF 46 10 |
|||
PCR-04: F3 39 54 2E 87 14 E2 BD 1A B8 80 97 00 84 06 88 75 0A 1C 64 |
|||
PCR-05: 04 FD EC DD 50 1D AF 0F 62 4C 1F 99 60 12 CF 30 44 FF 46 10 |
|||
PCR-06: 04 FD EC DD 50 1D AF 0F 62 4C 1F 99 60 12 CF 30 44 FF 46 10 |
|||
PCR-07: 04 FD EC DD 50 1D AF 0F 62 4C 1F 99 60 12 CF 30 44 FF 46 10 |
|||
PCR-08: AF 23 F1 A6 47 99 DF 56 3B 60 C8 C8 00 9B 30 FB 2F EC 70 48 |
|||
PCR-09: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
|||
PCR-10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
|||
PCR-11: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
|||
PCR-12: A6 C4 65 C8 B9 C3 3B D0 38 1B AE 4A E1 F5 10 BB 45 B3 FF 01 |
|||
PCR-13: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
|||
PCR-14: F3 DB 54 FA BD 6D 8C 9A 63 BC 87 30 58 6A F2 25 6D 7D E3 46 |
|||
PCR-15: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
|||
==Fazit== |
|||
Da selbst ein Hashwert des Bootloader in einem der PCRs gespeichert wird, ist jede Änderung an GRUB sofort zu sehen. Dem Benutzer ist es nun möglich sich von der Vertrauenswürdigkeit des Betriebssystems zu vergewissern. Leider existieren dafür noch keine einfachen Anwendungsprogramme, die für jedermann verständlich sind. |
Latest revision as of 19:09, 22 October 2008
Überblick
Im heutigen Informationszeitalter ist es von großer Bedeutung, Daten sicher zu übermitteln. Für dieses Problem gibt es vielfältige Lösungen. Ist das System, mit dem gearbeitet wird, bereits kompromitiert, dann nützt die Sicherheit allein auch nichts mehr. Wie der Endanwender nun die Möglichkeit hat, sich von der Vertrauenswürdigkeit des benutzten Systems zu überzeugen, wird im Folgenden beschrieben. Zwei Dinge werden genauer betrachtet, zum einen die zugrunde liegende Hardware, zum anderen die angepasste Software, wobei der gesamte Bootvorgang untersucht wird und eine sogenannte Vertrauenskette aufgebaut wird. Dem Benutzer soll es möglich sein, jegliche Veränderungen am System zu bemerken.
Trusted Platform Module
Es folgt eine technische Beschreibung des Trusted Platform Module (TPM). Weiterhin wird ein Überblick über die Funktionen und die Realisierung des Trusted Boot und das Erstellen von Schlüsseln sowie Zertifikaten gegeben.
Allgemein
Der Hauptbestandteil des TPM ist ein Chip, der als Teil einer Spezifikation zur Verifizierung der Vertrauenswürdigkeit von IT-Systemen dient. Am ehesten kann man ihn mit einer Smart-Card vergleichen, mit dem Unterschied, dass er nicht an einen Benutzer, sondern an ein System gebunden ist. Dadurch ist eine hardwareseitige Modifizierung nutzlos, da alle Daten, die mit Hilfe des Chips geändert/verschlüsselt wurden, nur auf dem entsprechenden System gelesen/entschlüsselt werden können, selbst wenn dieser auf einer anderen Plattform installiert wird. Standardmäßig ist er auf dem entsprechenden System deaktiviert und ist auch nur ein passives Bauelement. Der Chip bietet zwar eine Vielzahl von Sicherheitsfunktionen an, die jedoch alle von außen angestoßen werden müssen. Somit kann der Chip keinen direkten Einfluss auf den Bootvorgang oder das laufende System nehmen. Die zwei Hauptfunktionen des Chips sind das Auslesen und das Verarbeiten systemspezifischer Referenzwerte.
Funktionen
Neben den beiden Hauptfunktionen (Auslesen, Speichern/Verarbeiten der systemspezifischen Werte) bietet der TPM-Chip noch eine Reihe zusätzlicher und nützlicher Funktionen.
Schlüsselerstellung
Der TPM-Chip verfügt über einen RSA-Schlüsselgenerator. Alle Schlüssel, die mit ihm erstellt werden, können (bzw. müssen) auf dem Chip selbst gespeichert werden. Hierzu dienen 10 RSA-Key-Slots.
Endorsement-Key (EK)
- 2048 bit RSA-Schlüssel
- eindeutiges private/public - Schlüsselpaar
- Geschützt durch Endorsement-Zertifikat vom Hersteller des TPM, der die Einhaltung der TCG-Spezifizierungen bestätigt
- in den neueren Spezifikationen kann dieser Schlüssel vom Owner des Systems neu gesetzt werden
Attestation-Identity-Key (AIK)
- 2048 bit RSA-Schlüssel
- wird mit Hilfe des EK erstellt
- ist anonyme Identität des Systems
- dient zur Authentifizierung und gewährleistet Vertrauenswürdigkeit des Systems
Storage-Root-Key (SRK)
- 2048 bit RSA-Schlüssel
- wird bei Inbesitznahme durch den Owner erzeugt (TPM_TakeOwnership)
- dient zur Verschlüsselung eigener Schlüssel
- ist Wurzel der Schlüsselstruktur des TPM
Zertifikate
Damit die Echtheit eines Systems und dessen Vertrauenswürdigkeit bereits vor der Inbetriebnahme des Chips durch den Eigentümer garantiert werden kann, existieren die folgenden Zertifikate.
- Endorsement-Zertifikat (garantiert die Echtheit des TPM durch den TPM-Hersteller)
- Platform-Zertifikat (garantiert den Einbau eines echten TPM in die Plattform durch Plattform-Hersteller)
- Conformance-Zertifikat (bestätigt das TPM-Design nach den TCG-Spezifikationen und die korrekte Implementierung durch ein Labor)
PCR
Zum Speichern der Zustandswerte von Hard- und Software des Systems dienen die Platform Configuration Register (PCR). Dies sind mindestens 16 flüchtige Hash-Speicher, von denen die ersten 8 (0 - 7) für das TPM selbst reserviert sind (z.B. für Informationen zum BIOS und der aktuellen Hardware). Die restlichen PCRs kann von anderen Applikationen genutzt werden, z.B. für die Realisierung des Trusted Boot. Die Informationen in den PCRs können jederzeit ausgelesen werden, insofern der im folgenden beschriebene TSS dies erlaubt.
Struktur
Eine Plattform, die mit Hilfe des TPM als vertrauenswürdig klassifiziert werden kann, besteht im wesentlichen aus drei Komponenten:
- Core Root of Trust Measurement (CRTM)
- Trusted Platform Module (hier ist der Chip gemeint)
- Trusted Software Stack (TSS)
CRTM
Das Core Root of Trust Measurement ist die Grundlage eines vertrauenswürdigen Systems. Durch das CRTM wird ab dem Bootvorgang die Vertrauenswürdigkeit des Systems gewährleistet. Im Prinzip handelt es sich hierbei um auführbaren Code, der die Systemkonfiguration misst und die Werte in den PCRs des TPM hinterlegt. Diese Daten sind somit plattformspezifisch und bilden den Grundstein für die sichere Schlüsselherstellung/Verschlüsselung. Das CRTM ist eng mit dem BIOS verknüpft, damit das Messen so früh wie möglich stattfinden kann.
TSS
Zum Ansteuern der TPM-Funktionen dient der Trusted Software Stack, ein komplexes Softwarepaket mit Modulen und Komponenten. Er ist sozusagen die Schnittstelle zwischen TPM und Applikation des Andwenders und besteht aus zwei Hauptkomponenten:
- Kernel-Modus (direkter Zugriff auf den TPM-Chip, allerdings nur über User-Modus erreichbar)
- User-Modus (Schnittstellen und Dienste/Deamons zum Nutzen der TPM-Funktionen)
Trusted Boot
Ziel ist es dem Benutzer die Möglichkeit zu geben, sich von der Vertrauenswürdigkeit eines laufenden Betriebssystems zu überzeugen. Das beginnt mit dem Einschalten des Computers.
Bootvorgang
Nach dem Einschalten des Rechners übernimmt das BIOS die Kontrolle und führt einen PowerOnSelfTest durch. Sind keine Fehler zu verzeichnen führt das BIOS den Code des ersten auffindbaren MasterBootRecord eines bootbaren Laufwerks aus. Der MBR kann jeglichen Code der Größe 446 Byte enthalten. In den meisten Fällen ist dort der erste Teil eines Bootloaders zu finden, an den dann die Steuerung übergeben wird.
TrustedGRUB
GRUB in Verbindung mit dem TPM
TrustedGRUB (kurz TGRUB) ist eine Erweiterung des klassischen GRUB um Funktionen des TPM. Jede Komponente des Bootvorgangs misst die Integrität der nachfolgenden Komponente. Somit kann eine s.g. Chain of Trust aufgebaut werden. Die letzte Komponente, GRUB Stage2, hat die Möglichkeit Dateien zu messen.
In der GRUB-Konfigurationsdatei menu.lst wird mit dem Eintrag CHECKFILE (hdX,Y) eine Datei angegeben, die SHA1-Hashwerte von Dateien enthält. Es sollte eine Datei mit Hashwerten der wichtigsten Systemdateien erstellt werden und für diese Datei anschließend der SHA1-Hashwert in der CHECKFILE-Datei hinterlegt werden. Wird ein Eintrag im Menü von Grub ausgewählt, werden vor dem Start des gewünschten Betriebssystems die Hashwerte, der in der Datei hinterlegten Dateien geprüft - bei vielen Einträgen dauert das. Treten dabei Abweichungen auf, wird der Benutzer darüber informiert und kann nun selbst bestimmen, ob er in das System booten möchte. Die Konfiguration könnte folgendermaßen aussehen:
/boot/grub/menu.lst
default 0 timeout 5 #0 title kernel 2.6.23-9 root (hd0,1) kernel /boot/kernel2.6.23-9 root=/dev/hda2 ro vga=791 initrd /boot/initrd_2.6.23.9 savedefault #1 title kernel 2.6.23-2 initrd chkfi root (hd0,1) kernel /boot/kernel2.6.23.9-2 root=/dev/hda2 ro vga=791 initrd /boot/initrd_2.6.23.9-2.neu checkfile /boot/grub/checkfiles savedefault
/boot/grub/checkfiles
44efbdc75ee6d785b7eb04778f5565ccc910be97 (hd0,1)/boot/kernel2.6.23.9-2 f534b8ef0ced43d9de021cc4e04b02956e4a2b5e (hd0,1)/boot/initrd_2.6.23.9-2 99041760277232df550674c2a0e5e99df225c52b (hd0,1)/boot/grub/menu.lst
!!!Achtung!!! Zeilenumbruch nach letztem Eintrag und genau ein Leerzeichen zwischen Hashwert und Dateinamen.
TGRUB erzeugt während dem Laden Messwerte (SHA1), die in den PCRs wie folgt gespeichert werden:
- PCR 4 - Informationen des MBR und Stage1
- PCR 8 - ersten 512 Bytes der Stage2
- PCR 9 - Rest von Stage2
- PCR 13 - Einträge aus CHECKFILE (hdX,Y)
- PCR 14 - Linux-Kernel und initrd-Dateien
Anmerkung: nicht nur der Hashwert des zu messenden Objektes wird gespeichert, sondern die Konkatenation mit dem Wert aus dem vorherigen PCR der Chain of Trust.
!!!Achtung!!! Befindet sich der Bootloader auf einem externen Gerät, werden die PCRs nicht gefüllt.
Installation
!!! Vor der Installation der neuen Grub-Version im MBR wird empfohlen, einen bootbaren Datenträger zu erstellen. Somit kann das System in jedem Fall gestartet werden. Dazu einen Datenträger mit mindestens einer Partition, auf der sich ein Dateisystem befindet, vorbereiten. Anschließend GRUB (alte Version starten)
grub // Kommandozeile von GRUB starten
root (hdX,Y) // Bootpartition des bootbaren Datenträgers; X und Y sind Zahlen setup (hdX) // Datenträger, auf der die alte Version von GRUB installiert werden soll quit
Die aktuelle Version 1.1.3 herunterladen, kompilieren und installieren.
tar xzvf TrustedGRUB-1.1.3.tgz cd TrustedGRUB-1.1.3/TrustedGRUB-1.1.3 ./configure make install
Nach der Installation von TGRUB muss nun noch der MBR aktualisiert werden, damit beim Booten der TGRUB als Bootloader verwendet wird.
rm /boot/grub/stage* rm /boot/grub *1_5 cp stage1/stage1 /boot/grub cp stage2/stage2 /boot/grub ./grub/grub // Kommandozeile von GRUB starten
root (hdX,Y) //eigene Bootpartition angeben; X und Y sind Zahlen setup (hdX) // Festplatte, auf der GRUB installiert werden soll quit
Anschließend neustarten. Wenn die neue GRUB-Version erfolgreich installiert worden ist, hat man nach dem Laden von GRUB zwei neue Befehle zur Verfügung:
- SHA1 - Hashwert einer Datei bilden
- CHECKFILE (hdX,Y)file- Prüfen der Hashwerte, der in der Datei hinterlegten Dateien
Möglichkeiten des Anwenders
Im laufenden System kann der Benutzer die Hashwerte in der PCRs mit dem Befehl
verify_pcr
prüfen. Dabei ist das PCR, das geprüft werden soll und die zu prüfenden Dateien anzugeben. Nachteilig an dieser Stelle zu erwähnen sei der Aspekt, dass der Anwender die Dateien kennen muss, die zur Berechnung des PCR-Hashes benutzt werden.
Die aktellen Werte der PCRs lassen sich mit folgendem Befehl anzeigen:
cat /sys/class/misc/tpm0/device/pcrs
Beispielausgabe
PCR-00: 21 AB F9 04 1E 9F 15 96 49 AA 1B 94 9E 46 23 61 5D 93 CA ED PCR-01: 8E E5 5A 0D 67 45 AA 22 DF 33 5C 80 96 F2 01 8E 0B 19 1E DA PCR-02: EB B3 BA AE E7 57 4B B6 37 AA AB 67 0F 9A C1 BC EB 6F 80 F3 PCR-03: 04 FD EC DD 50 1D AF 0F 62 4C 1F 99 60 12 CF 30 44 FF 46 10 PCR-04: F3 39 54 2E 87 14 E2 BD 1A B8 80 97 00 84 06 88 75 0A 1C 64 PCR-05: 04 FD EC DD 50 1D AF 0F 62 4C 1F 99 60 12 CF 30 44 FF 46 10 PCR-06: 04 FD EC DD 50 1D AF 0F 62 4C 1F 99 60 12 CF 30 44 FF 46 10 PCR-07: 04 FD EC DD 50 1D AF 0F 62 4C 1F 99 60 12 CF 30 44 FF 46 10 PCR-08: AF 23 F1 A6 47 99 DF 56 3B 60 C8 C8 00 9B 30 FB 2F EC 70 48 PCR-09: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 PCR-10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 PCR-11: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 PCR-12: A6 C4 65 C8 B9 C3 3B D0 38 1B AE 4A E1 F5 10 BB 45 B3 FF 01 PCR-13: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 PCR-14: F3 DB 54 FA BD 6D 8C 9A 63 BC 87 30 58 6A F2 25 6D 7D E3 46 PCR-15: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Fazit
Da selbst ein Hashwert des Bootloader in einem der PCRs gespeichert wird, ist jede Änderung an GRUB sofort zu sehen. Dem Benutzer ist es nun möglich sich von der Vertrauenswürdigkeit des Betriebssystems zu vergewissern. Leider existieren dafür noch keine einfachen Anwendungsprogramme, die für jedermann verständlich sind.