FDE-with-TPM-support

Aus LaborWiki
Wechseln zu: Navigation, Suche
         
FDE with tpm support

Release status: obsolete [box doku]

Logo tpm.png
Description Tutorial zu FDE with TPM support
Author(s)  Philipp
Last Version  1.5
Platform  Linux
Download  https://www.das-labor.org/trac/browser/trusted_computing

Einleitung[Bearbeiten]

Trusted Computing ist ein sehr bekannter Begriff in der IT Welt. Immer mehr wird das TPM ("Trusted Platform Module") als Standard in Laptops, Netbooks und PCs verbaut. Doch kaum einer nutzt das TPM privat. Vielmehr nutzen Firmen den Chip um sichere Datenübertragungen per SSL zu Firmenrechnern und -servern zu garantieren. Dies ist aber nicht die einzige Möglichkeit den TPM sinnvoll zu nutzen. Datenverschlüsselung und Hashen von Hard- und Software sind weitere Einsatzgebiete. In diesem Tutorial wird der Aufbau und die Eigenschaften, sowie Komplettverschlüsselung mithilfe des TPM erläutert.

Warum Komplettsystemverschlüsselung mit TPM ?[Bearbeiten]

Festplattenverschlüsselungen sind heutzutage schon fast Standard in der Linuxwelt. Programme wie Cryptsetup, Truecrypt, Dm-crypt, LoopAES und Dateisysteme wie eCryptFS werden für diesen Zweck genutzt und erfreuen sich großer Popularität. Dennoch verschlüsseln nicht alle User ihre Rechner, Notebooks usw... Private Daten zu schützen ist ein wichtiger Prozess in der Digitalisierung. Immer mehr User haben ihr halbes Leben auf Festplatten gespeichert doch nur wenige kümmerts was mit Ihren Daten passiert. Deswegen müssen private Daten geschützt werden. Keiner würde sich freuen, wenn Daten von seinem gestohlenen Notebook im Netz zu finden wären. Sehr wichtige Firmendaten, Tagebucheinträge , Bilder und Videos von Verwandten, all dies sollte nicht in fremde Hände geraten.

In diesem Tutorial stelle ich zwei Lösungen vor, mit denen man die Integrität und Authentizität seiner Daten, bis zu einem bestimmten Grad gewährleisten kann. Dies ist nur dann möglich, wenn man eines der Verschlüsselungsprogramme und das TPM nuzt.

Die erste Lösung ist Cryptsetup (Opensource). Dieses Programm ist fast schon Standard in jeder Distribution und gilt als sicher. In diesem Tutorial nutze ich cryptsetup-1.1.0.0. Es hat einige Verbesserungen erhalten und besitzt nun auch endlich die Möglichkeit den Hash Algorithmus auszuwählen.

Die zweite Lösung ist Keyrona (Opensource) von der Sirrix AG in Bochum. Dieses Programm kann verschiedene Softwareimplementierungen und Dateisysteme die Kryptographie integrieren, nutzen. Es stellt den Kern des ganzen Verschlüsselungssystems da. Das TPM stellt dank trousers Schnittstelle, Keyrona alle wichtigen TPM Funktionen zur Verfügung.

Bekannte Sicherheitsprobleme[Bearbeiten]

Intel Advanced Management Technology:

Nach der Hackerin Joana Rutkowska lässt sich ein Rootkit über DMA in den Intel AMT Speicher laden. Dieses wird trotz augeschalteter Intel AMT Funktion, durch einen gehookte AMT Funktion ausgeführt. Bisher ist mir noch nicht bekannt ob der TPM den Speicher der Intel AMT hasht. Allerdings ist ein erfolgreicher Angriff nur bei dem Q35 Chipsatz bekannt.

Hardware Keylogger und Cold Boot Attacks:

Es ist möglich, mittels Hardware Keylogger, die nötigen Schlüssel zum entschlüsseln des System zu bekommen. Es gibt keine Maßnahmen gegen diesen Angriff, außer man versiegelt den Laptop irreversibel. Cold Boot Attacks haben nur auf die Root Partition Effekt, da ihr Schlüssel ständig sich im Speicher befindet. (Siehe Partitionschemata und Grsecurity) Eine extra Datenpartition schafft abhilfe, wenn man noch zusätzlich grsecurity nutzt. Dort kann man die Einstellung 'Sanitize all free memory' aktivieren um Schlüssel (sowie Speicher) die nicht mehr gebraucht werden zu überschreiben. Nebenbei, Cold Boot Attacks sind nur dann effektiv wenn man relativ schnell an das Innere des Notebooks (Arbeitsspeicher) kommt, was sich bei manchen Notebooks relativ kompliziert erweisst (Thinkpad und Dell).

SHA-1 Collision Attack

Wie seit der Eurocrypt 2009 bekannt geworden ist, lassen sich Kollisionen in dem Hashalgorithmus SHA-1 schon bei 2^52 Operationen finden. Der TPM nutzt den SHA-1 Algorithmus nicht nur zur Verschlüsselung sondern auch zum Sealing. Damit ist das Sealing des TPM theoretisch knackbar, abhilfe würde hier eine implementierte SHA-256 oder SHA-512 FUnktion schaffen. Hoffentlich ist dies in der nächsten TCG Spezifikation vorhanden.

Memory Image Attack

Man kann mittels Firewire Schnittstelle und entsprechenden geladenen Kerneltreiber, Speicherabbilder erzeugen. Um dies ganz einfach zu verhindern, baut ihr euren Firewiretreiber als Modul und lädt ihn nur wenn nötig. Es ist auch möglich nach dem Neustart, vorhandenen Speicher mit USB-stick und Software auszulesen. Um dies zu preventieren wünscht man sich coreboot mit TPM funktionen oder einfach genug Zeit.

Reverse Engeneering des TPM:

Vor kurzen ist es einem Hardware Hacker gelungen, den EK der SmartCard TPM auszulesen. Video Da in unserem Verschlüsselungssystem ein ESD 'External Storage Device' als Speicherort für den crypto blob genommen wird, bringt es dem Angreifer nichts den Schlüssel auszulesen. Des weiteren ist der Angriff nicht Praxis relevant, vorher könnte man das ESD vernichten.

Reset Attack:

Bei TPM Chip v.1.1b lässt sich eine reset Attacke durchführen die im laufenden Betrieb die PCR auf NULL zurück setzt und so sich einfach beliebig Werte in die PCR schreiben lassen. Dieser Angriff ist seit der TPM Spezifikation 1.2 nicht mehr möglich.

BIOS:

Es ist bekannt das in Intel BIOS Möglichkeiten für Exploits vorhanden sind, die es ermöglichen das BIOS zu updaten und somit die 'Chain of Trust' zerstören. Dadurch könnte man einen Keylogger in das BIOS implementieren oder bösere Dinge tun. Das TrustedCore BIOS welches in Thinkpads verbaut worden ist, soll dies verhindern. Es wird signiert und kann nicht durch ein unsigniertes BIOS ersetzt werden. Andere Exploits wie z.B. der Bootbild Bug lassen auch evtl. Code Ausführung zu. Mit neurer Technology 'Intel TXT' soll dieses Problem gelöst werden.

Not hashed Hardware Attack:

Eine wirklicher Angriff ist es nicht, jedoch kann man Code, z.B. über SD-Karten Lesegeräte die intern verbaut sind, ausführen. Warum? Der TPM hasht vom BIOS den SD-Kartenschlot nicht mit, also könnte man darüber versuchen Code auszuführen wenn evtl. Bugs im Code vorhanden sind!

DMA, Netzwerkkarte, Graphikkarte, Prozessor und alles andere was Speicher besitzt:

Es ist möglich in diesen Geräten Rootkits auszuführen oder sie zu manipulieren. Ich zitiere mal Joanna Rutkowska: "Wenn ich nicht auf der Liste der 10 gefährlichsten Attentäter stehe, braucht ihr euch darum keine Sorgen machen". Natürlich kann dies auch ein weiteres großes Angriffsgebiet sein, wo Intel schon versucht mit seiner TXT Technology schaden zu begrenzen. Jedoch fragt sich, ob sowas überhaupt praxisnahe Angriffe sind. Das Risiko ist da, aber in wie weit vertraut man TPM und allgemein Hardware? Meiner Meinung: ÜBERHAUPT NICHT!!!

Vorteile und Nachteile von FDE mit TPM gegenüber normaler FDE[Bearbeiten]

1. Ihr werdet nicht gefoltert wenn ihr die ESD oder eure Hardware zerstört

2. Für Rootkits oder Keylogger wird es fast oder gar unmöglich schon beim Bootvorgang geladen zu werden.

3. PKI-Struktur und somit nettes Schlüsselmanagement. Verwendung von asymmetrischen und symmetrischen Algorithmen.

4. Nette Möglichkeiten für FIrmen, interne Hardware auf Sicherheit zu prüfen, Remote Attestination oder DAA.

Das Trusted Platform Module[Bearbeiten]

Das TPM ist ein kleiner Chip, der sich auf dem Mainboard oder auf einer extra Platine befindet. Er startet vor dem BIOS und ist somit eine der ersten Softwarekomponenten, die beim Rechnerstart geladen werden. Wird das TPM manipuliert oder entfernt, kann es sein, das der Rechner nicht mehr startet. TPM's werden von verschiedenen Herstellern wie Atmel, Infineon und vielen Anderen hergestellt. Die Hersteller halten sich je nach TPM an bestimmte Spezifikationen. Diese Spezifikationen werden von der Trusted Computing Group vorgeschrieben.

Das TPM auf Hardware Ebene[Bearbeiten]

In diesem Bild ist die spezifizierte TPM Hardware dargestellt. Diese wurde wieder durch die Trusted Computing Group vorgeschrieben. Hier ein Beispiel von Atmel:

Tpm hardware.png

TPM Architektur[Bearbeiten]

Das TPM besteht aus einem Low Pin Count Datenbus, der die einzelnen Komponenten miteinander verbindet. Diese Komponenten besitzen interne Sicherheitsabfragen um Manipulationen über den Datenbus auschließen zu können. Dies gilt aber leider nicht für alle Komponenten.

Lpc bus.png

I/O Bus[Bearbeiten]

Protokoll De- und Enkodierung für interne und externe Bussysteme.

Crypto Coprocessor[Bearbeiten]

Ist zur Verschlüsselung und Signierung da.

Asymmetrische Kryptographie:

- Schlüssel Generierung.

- Ver- und Entschlüsselung

- Hashen

RSA Engine[Bearbeiten]

RSA wird zum Verschlüsseln und Signieren genutzt.

Signatur Operations[Bearbeiten]

Macht interne und externe Signierung.

Symmetric Engine[Bearbeiten]

Das TPM nutzt symmetrische Verschlüsselung für Authentifizierungs- oder Transportsitzungen.

-> One Time Pad (standard MGF1)

-> AES , wenn es implementiert ist.

Der TPM nutzt keine symmetrische Verschlüsselung für Nachrichtenverschlüsselung!

Vergleich zwischen FDE Software[Bearbeiten]

Features Cryptsetup Bitlocker Keyrona File Vault Truecrypt
Version 1.1.0.0  ? 1.x  ? 6.3a
Preis Opensource Closed Source Opensource Closed Source Opensource
Betriebssystem Linux >=Windows Vista Linux Mac OSX Windows 2000 - 7, Linux
Algorithmen Alle* AES-128,256 Alle* AES-128,256 AES, Twofish, Serpent
Mode of Operation Alle* CBC + Elephant Diffuser Alle* CBC XTS
Hash Alle* SHA-256 Alle* 3DES-EDE (wrapping) RIPEMD-160, Whirlpool, SHA-512
Cascading No No Yes No Yes
Recovery Key No, only Keyslots Yes Yes, Storage Key 1024Bit RSA Key  ?
Header Key Derivation PBKDF2 PBKDF2 PBKDF2 PBKDF2 PBKDF2
RNG /dev/urandom  ? TPM RNG /dev/random /dev/random, keyboard, mouse ...
Multi Factor Auth. No Yes Yes No No
Token support(keyfile) Yes Yes Yes  ? Yes
Secure Hibernate Yes Yes Yes No Yes
Secure Swaping Yes Yes Yes Yes Yes
TPM support No Yes Yes No No
Subject Management Yes Yes Yes Yes Yes
Group Management No  ? Yes No No
Platform Management No  ? Yes No No

Alle* = Im Linux Kernel enthaltene Algorithmen und das sind wirklich ne ganze Menge.

Trusted Boot Scheme[Bearbeiten]

Sealing[Bearbeiten]

Tpm decrypt scheme.png

Unsealing[Bearbeiten]

Tpm encrypt scheme.png

Keyrona[Bearbeiten]

Der aktuelle Status zu Keyrona lässt sich seit neustem im Labor SVN [1] downloaden. Dort liegt eine TODO dabei worin der momentane Bearbeitungsstatus beschrieben ist. Ich habe mitlerweile so gut wie alle wichtigen TPM Funktionen implementiert und somit auch das Key Management umgeworfen. Ich denke das ich einigen Monaten die Stabile Version 2.0 veröffentlichen kann.

TODO_V2.0

+ Real Enterprise and Personal Mode -- Not Done
+ New Key Management (Wallet Mode) -- working in progress
+ Improve old Key Management -- Done
+ Add TPM Migration feature -- Not Done
+ Add TPM DAA feature -- Not Done
+ Add TPM Binding and Unbinding -- Done
+ Add TPM Sealing and Unsealing with PCR's -- Done
+ Add TPM Key Management -- Done
+ Bug fixes and other Improvements -- Not Done
+ Improve All Managements -- working in progress
+ Add ESD Management -- working in progress
+ Add Migration Management -- Not Done
+ Add DAA Management -- Not Done
+ Add Security fixes -- working in progress

Aufsetzen eines TPM und cryptsetup geschützten Systems[Bearbeiten]

Verschlüsselungsalgorithmus, Mode of Operation und Hash[Bearbeiten]

Partitionschemata und Grsecurity[Bearbeiten]

Allgemein empfiehlt sich Full Disc Encryption des eigenen System volgendes Partitionschemata.

Beispiel /dev/sda:

/dev/sda1 /boot 100MB ext2

/dev/sda2 swap 2GB swap

/dev/sda3 / 60GB ex4

/dev/sda4 /home oder *Datenpartition

Ihr könnt natürlich auch LVM verwenden. Die /boot Partition wird für den Kernel, Trusted Grub etc benötigt. Die swap Partition könnt ihr eigentlich weglassen wenn ihr mehr als 3GB Arbeitsspeicher habt. Die /home oder Datenpartition bietet sich an nur mit Cryptsetup oder Keyrona zu verschlüsseln. Zudem sollte man das Security Framework Grsecurity verwenden welches sich im Kernel mit kompillieren lässt. Es bietet mit PaX welches im Patch enthalten ist, die Option CONFIG_PAX_MEMORY_SANITIZE an. Dies ermöglicht es, dass der Kernel so schnel wie möglich nicht mehr benötigte Speichertabellen löscht, z.B. cryptsetup blob der Datenpartition.

Seal- and Unsealing[Bearbeiten]

In diesem Teil wird die Einrichtung des versiegelten Systems beschrieben.

!!! Vorsicht beiḿ aufsetzen des versiegelten Systems, man kann sich sehr leicht aussperren!!!

Voraussetzungen[Bearbeiten]

1. Ein TPM der im BIOS aktiviert ist.

2. Eine weitere externe oder interne Festplatte auf der das neue System aufgesetzt werden soll.

3. Ein bereits vorhandenes Betriebssystem (besser ist das) oder eine live CD.

Installation von Programmen und Kernelkonfiguration[Bearbeiten]

Die Installation von Cryptsetup ist durch einen Paketmanager oder per Source Code installation durchzuführen.

Ubuntu:

apt-get install cryptsetup

Gentoo:

emerge -av cryptsetup

Die Installtion von Keyrona kann einfach durch fertige Pakete oder per Source Code geschehen. Momentan wird noch an Patches gearbeitet, die Keyrona patchen, damit es das wirkliche versiegeln der Hardware unterstützt. Keyrona siegelt momentan nur Zufallsdaten an den cryptsetup blob. Dazu später weiteres.

Download Quelle

Danach muss die TPM-Software Umgebung installiert werden die Trousers heisst. Dann kann man noch Tools installieren um mit dem TPM arbeiten zu können. Wichtig ist es für eine graphische Oberfläche den TPM-Manager von der Sirrix zu installieren. Diesen benutzt man dazu, um TPM Owner also Besitzer zu werden. Dann muss man auch noch den SRK auf das "WELL_KNOWN_SECRET" setzen.

Trousers:

apt-get install trousers

Tools:

apt-get install tpm-tools

TPM-Manager:

Download Quelle
Downloaden und *.deb installieren.

Der Kernel muss, wie folgt konfiguriert und neu kompilliert werden:

Device Drivers ->
   Character Devices ->
      <*> TPM Hardware Support ->
         <*> TPM Interface Spezifikation 1.2
         <*> "name" TPM Interface

Am besten alle Treiber "name" als Modul aktivieren, weil man evtl. der Hersteller seines eigenen TPM's nicht bekannt ist. Für Cryptsetup müssen noch der Cryptoloop support, Kryptographische Algorithmen usw. im Kernel aktiviert werden. Danach macht man ein reboot, startet folgende Programme und lädt das Modul:

modprobe tpm_name
tcsd
tpmmanager

Dort nimmt man den TPM in Besitz indem man ein Password vergibt "Take Ownership" Dann wechselt man noch mit "Change SRK" zum "WELL_KNOWN_SECRET" damit Keyrona damit arbeiten kann.

Nun ist alles eingerichtet um mit dem TPM und Keyrona io Operationen durchzuführen.

Verschlüsseln der Festplatte und kopieren der Daten[Bearbeiten]

Als erstes starten wir den Service:

keyrona_keyproviderd -p

Nun ändern wir noch schnell die Script Einträge für die cryptsetup Verschlüsselung in:

/etc/keyrona/scripts/create_cryptsetup_luks.sh

Danach legt man einen Administrator in Keyrona an:

keyrona_manager -i ca

Anlegen von einem Benutzer an den wir an die Verschlüsselung binden:

keyrona_manager -u cu

Ein verschlüsseltes Volume erstellen und den Benutzer an das Volume binden:

keyrona_manager -v cv
keyrona_manager -v astv

Neue Root Partition mounten und altes System kopieren:

keyrona_mount -m -u username -v volumename -p /pfad/to/mount
rsync -a bin dev etc home lib media opt root sbin selinux srv usr var /pfad/to/mount/
cd /pfad/to/mount/
mkdir proc sys mnt boot tmp
chmod a+rwx tmp
chmod a+t tmp

Andere Partitionen wie /boot /home etc. auf die neue Festplatte clonen.

Danach noch /etc/keyrona/* auf das ESD kopieren, ausführen:

mount -t proc proc /pfad/to/mount/proc
mount -o bind /dev /pfad/to/mount/dev
chroot /pfad/to/mount

um im neuen System weiter arbeiten zu können.

Initramfs erzeugen und Trusted Grub installieren[Bearbeiten]

Die Initramfs muss alle nötigen Programme, Blibliotheken und Konfigurationsdateien enthalten, um das Unsealing durzuführen. Diese könnt ihr euch runterladen: Datei:Initramfs.tar.gz . Demnächst gibt es ein skript dazu welches die Initramfs direkt von eurem System zusammenstellt.

Struktur der Initramfs[Bearbeiten]

1. keymap_check

Checkt ob im /boot/grub/menu.lst eine keymap=name angegeben ist sonst wählt es das standard keyboard layout.

2. lvm_check

Checkt ob lvm genutzt wird un erstellt die passenden einträge.

3. cryptsetup_check

Checkt ob das crypt_root Volume einen Cryptsetup header hat oder nicht, sonst Error.

4. tpm_initialize

Initialisiert den Trousers daemon.

5. keyrona_login

Erfragt nach Logindaten und Binding oder Sealing.

6. keyrona_mount_esd

Mountet das External Storage Deviceunter /etc/keyrona

7. verify

Verifiziert die Integrität vor Passwort Eingabe. Momentan nicht implementiert!

8. keyrona_initialize

Initialisiert keyrona_keyproviderd.

9. keyrona_mount

Mountet das crypt_volume nach Passwort Eingabe.

10. cleaning_up

Macht ein killall -9 auf keyrona und trousers und unmountet /etc/keyrona

Erzeugen der Initramfs[Bearbeiten]

Eine Initramfs könnt ihr einfach je nach Kompressionsmehtode packen:

cd initramfs
find . -print0 | cpio -ov -0 --format=newc | gzip -9 > /boot/keyrona.cpio.gz

Dies ist die standard pack Methode wenn ihr was anderes als gzip nutzt, einfach gzip ersetzen.

Trusted Grub[Bearbeiten]

Der Trusted Grub ist ein Bootloader der so modifiziert wurde, den Grub, MBR und weitere Softwareteile wie z.B. Initramfs, menu.lst, kernel mithilfe des TPM zu hashen. Installieren könnt ihr ihn, indem ihr in bei sourceforge downloaded. Weitere Installationsanweisungen entnehmt ihr bitte der README und INSTALL.

Abschluss[Bearbeiten]

Nachdem wir ein verschlüsseltes Volume mit Keyrona erzeugt , die Daten von unserem Altsystem rüberkopiert , die Initramfs auf das neue System mit passenden Grub Eintrag versehen sowie Trusted Grub installiert haben. Können wir nun versuchen das neue System zu starten, um dann mit dem eigentlichen Sealing anzufangen. Denn die PCR werte ändern sich die ganze zeit und wir müssen uns erst einmal in das neue System einloggen.

Wenn dies erfolgreich gelungen ist, fangen wir mit dem Sealing an dies geht wie folgt:

keyrona_manager  -p cp
keyrona_manager -v assstv
keyrona_manager -v dsfv
cp -ar /etc/keyrona/* /pfad/to/ESD

Nun hätten wir theoretisch unsere Platform and die Cryptsetup Passphrase gebunden und diesen blob mit EK und RSA verschlüsselt. Jedoch unterstützt Keyrona nicht Sealing, es siegelt nur NULL and den cryptsetup blob. Ich bin dabei einen Patch zu schreiben um wirkliches Siegeln nutzen zu können, momentan ist dies nur in der Variante Binding mit Keyfile möglich.

Folien zum Vortrag[Bearbeiten]

Hier sind die Folien zum Vortrag Datei:Tpm.pdf