TpmCrypt

Aus LaborWiki
Wechseln zu: Navigation, Suche
         
TpmCrypt

Release status: experimental [box doku]

Logo tpm.png
Description Tutorial zu TpmCrypt
Author(s)  Philipp
Last Version  0.1_rc1
Platform  Linux
Download  https://www.tpmcrypt.org

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.

Um dieses Ziel zu erreichen nutzen wir "TpmCrypt" welches extra für diesen Zweck entwickelt worden ist.


Bekannte Sicherheitsprobleme[Bearbeiten]

Intel Southbridge

Die Soutbridge firmware ist zum Teil von Intel signiert und bietet jede Menge Angriffsmöglichkeiten. Sie wird momentan für Intel AMT, TXT und IPT genutzt. Möglichkeiten für Digital Rights Management sind auch enthalten.

Embedded Controller

Ralf-Philipp Weihmann zeigte auf dem 27c3 das es möglich ist, über das Betriebssystem unsignierte Firmware auf die Embedded Controller von "Thinkpad's" zu flashen. Um dies zu entdecken wird demnächst der Trusted Grub gepatcht. Damit erreicht man, dass die Firmware der EC in die PCR mit eingehen.

Evil Maid Attack:

Die Evil Maid Attack von Joanna Rutkowska nutzt die Schwachstelle aus, dass jede unsealing Operation mit einer Passworteingabe statt findet. Somit kommt man vorher an das Passwort ohne das man weiss, dass der Rechner schon vorher kompromitiert wurde. Um dies zu umgehen, wurden Authentication Secrets in TpmCrypt eingebaut.

Intel Advanced Management Technology:

Nach der Hackerin Joanna 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!

Unsignierte Firmware und Exploits auf Hardware mit persistenten Speicher:

Diese Angriffe sind möglich jedoch schwer zu bewältigen. Die Hardware unterscheidet sich von Hersteller zu Hersteller.

Das Trusted Platform Module[Bearbeiten]

Wir unterstützen nur TPM v1.2 !

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.

Nach neuen Informationen soll der TPM v2.0 demnächst veröffentlicht werden. Leider enthält dieser sehr viele Veränderungen die auf gewolltes DRM schließen lassen.

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 mit TPM Unterstützung Software[Bearbeiten]

Features eCrypFS Bitlocker TpmCrypt SecureDoc
Version 86  ? 0.1_rc1  ?
Preis Opensource Closed Source Opensource Closed Source
Betriebssystem Linux >=Windows Vista Linux Linux, Windows, Mac OSX
Type of Encryption Filesystem Block Alle* Block
Algorithmen AES AES-128,256 Alle* AES-256
Mode of Operation CBC-ESSIV CBC + Elephant Diffuser Alle*  ?
Hash SHA-1 SHA-256 Alle* SHA-1
Cascading No No Yes No
Recovery Key  ? Yes Yes, Migration Yes
Header Key Derivation PBKDF2 PBKDF2 PBKDF2 PBKDF2
RNG /dev/urandom  ? TPM RNG  ?
Preboot Auth. Yes Yes Yes Yes
Multi Factor Auth. Yes Yes Yes Yes
Token support(keyfile) Yes Yes Yes Yes
Secure Hibernate No Yes Yes Yes
Secure Swaping No Yes Yes Yes
TPM support Yes Yes Yes Yes
Authentication Secret No No Yes No
Advanced Hybrid Enc.  ?  ? Yes  ?
Treshold Scheme  ?  ? Yes, SSS  ?

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

Trusted Boot Scheme[Bearbeiten]

Sealing[Bearbeiten]

Tpm decrypt scheme.png

Unsealing in TpmCrypt with AHE und Authentication Secrets[Bearbeiten]

Unseal.png

TpmCrypt[Bearbeiten]

TpmCrypt befindet sich momentan noch stark in Entwicklung jedoch wird es demnächst als Alpha Release zur Verfügung stehen.

Aufsetzen eines TpmCrypt geschützten Systems[Bearbeiten]

Kryptoalgorithmus, Mode of Operation und Hash[Bearbeiten]

Kryptoalgorithmen[Bearbeiten]

Bis heute als sicher geltene Algorithmen:

Algo AES Serpent Twofish MARS CAST-256
Block Size 128 128 128 128b 128
Key Sizes 128-256 128-256 128-256 128-256 128-256
Structure Sub*,Pmu* Sub*,Pmu* Feistel Feistel Feistel
Rounds 10,12,14 32 16 32 48
S-Box Yes Yes Yes  ?  ?
Linear Transf. No Yes No  ?  ?
GF Multi Yes No No  ?  ?
Shift Yes Yes Yes  ?  ?
Addition Modulo No No Yes  ?  ?
Xor Yes Yes Yes  ?  ?
Performance Software Hardware  ?  ?  ?
  • Sub = Substituion
  • Pmu = Permutation

Dabei ist zu sagen das AES extrem schnell ist und Serpent der sicherste Algorithmus ist. Die Schlüsselgröße sollte mindestens 256bit sein.

Da der TPM 0 - 1.2 nur RSA nutzt sollte demnach eine Schlüsselstärke von min. 2048bit genutzt werden.

Empfehlung: AES,Serpent

Mode of Operation[Bearbeiten]

Bei symmetrische Verschlüsselung sollte immer ein sicher Mode of Operation genutzt werden. Es gibt 4 meist genutzte Modi:

Modi CBC-ESSIV LRW XTS EME
Primitive CBC ECB ECB  ?
ESSIV Yes No Yes  ?
Key Whitening No Yes Yes  ?
GF Multi. No Yes Yes  ?
Chaining Yes No No
Parallelization No No No Yes

Heutzutage gilt CBC-ESSIV und der XTS Modi als sicher. Jedoch soll XTS beim Einsatz für Datenmengen >1TB sicherer sein als CBC-ESSIV.

Empfehlung: XTS

Hash[Bearbeiten]

Aktuell sichere Hashfunktionen:

Hash SHA-2 Whirlpool RipeMD
Structure Merkle–Damgård Miyaguchi-Preneel  ?
Digest Sizes 224-512 512 160-320
Rounds 64,80 10 5

Empfehlung: SHA-512

LVM-Crypto-LVM[Bearbeiten]

Allgemein empfiehlt sich LVM für die Systemverschlüsselung. Folgendes Schemata hat viele Vorteile und lässt sich leicht nutzen:

Device Name Path Group Size Type
/dev/sda - /dev/sda - 320GB RAW
/dev/sda1 boot /boot - 1GB ext2
/dev/sda2 outervolume /dev/mapper/outervolume - 319GB RAW
/dev/mapper/outervolume outervolume /dev/mapper/outervolume outervolume 319GB VG
/dev/mapper/outervolume root /dev/mapper/outervolume-root outervolume 319GB LV
/dev/mapper/outervolume-root crypted-root /dev/mapper/crypted-root outervolume 319GB RAW
/dev/mapper/crypted-root innervolume /dev/mapper/innervolume - 319GB RAW
/dev/mapper/innervolume innervolume /dev/mapper/innervolume innervolume 319GB VG
/dev/mapper/innervolume swap /dev/mapper/innervolume-swap innervolume 2GB LV,swap
/dev/mapper/innervolume root /dev/mapper/innervolume-root innervolume 60GB LV,ext4
/dev/mapper/innervolume home /dev/mapper/innervolume-home innervolume 258GB LV,ext4

Wie aus dieser Tabelle ersichtlich ist benötigt man 2 Partitionen, 2 LVM Volume Groups, 1 Cryptsetup Volume und 4 LVM Logical Volumes. Dadurch ist es zum einen möglich, die gesammten Volumes mit PVmove zu verschieben und zum anderen liegen alle sicherheitskritischen Volumes in den verschlüsselten RAW Daten.

Initramfs[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 gibt es Folien zum Vortrag:

Vortrag_1