From: Susanne Date: Wed, 18 Jun 2025 06:04:13 +0000 (+0200) Subject: Final GPN-Version X-Git-Url: http://git.tuxteam.de/gitweb/?a=commitdiff_plain;h=1f9eeafa51010f00b19516f5d7038fdc560e3a12;p=susannes-git%2FTPM-LUKS.git Final GPN-Version --- diff --git a/beamerthemeBuecherrattenTheme.sty b/beamerthemeBuecherrattenTheme.sty index 84971e0..8079985 100644 --- a/beamerthemeBuecherrattenTheme.sty +++ b/beamerthemeBuecherrattenTheme.sty @@ -190,34 +190,26 @@ } \def\progressbar@progressbar{} % the progress bar -\newcount\progressbar@tmpcounta% auxiliary counter -\newcount\progressbar@tmpcountb% auxiliary counter -\newdimen\progressbar@pbht %progressbar height -\newdimen\progressbar@pbwd %progressbar width -\newdimen\progressbar@tmpdim % auxiliary dimension -\progressbar@pbwd=\linewidth -\progressbar@pbht=1.5ex +\newlength{\ratten@progressonsectionpage} +\newlength{\ratten@progressonsectionpage@linewidth} -% the progress bar -\def\progressbar@progressbar{% +\setlength{\ratten@progressonsectionpage@linewidth}{1.5ex} - \progressbar@tmpcounta=\insertframenumber - \progressbar@tmpcountb=\inserttotalframenumber - \progressbar@tmpdim=\progressbar@pbwd - \multiply\progressbar@tmpdim by \progressbar@tmpcounta - \divide\progressbar@tmpdim by \progressbar@tmpcountb +\def\progressbar@progressbar{% +\setlength{\ratten@progressonsectionpage}{% + \textwidth * \ratio{\insertframenumber pt}{\inserttotalframenumber pt}% + }% \begin{tikzpicture}[rounded corners=2pt,very thin] - + \shade[top color=pbgray!20,bottom color=pbgray!20,middle color=pbgray!50] - (0pt, 0pt) rectangle ++ (\progressbar@pbwd, \progressbar@pbht); - - \shade[draw=pbblue,top color=pbblue!50,bottom color=pbblue!50,middle color=pbblue] % - (0pt, 0pt) rectangle ++ (\progressbar@tmpdim, \progressbar@pbht); - + (0,0) rectangle (\textwidth, \ratten@progressonsectionpage@linewidth); + \shade[draw=pbblue,top color=pbblue!50,bottom color=pbblue!50,middle color=pbblue] + (0,0) rectangle (\ratten@progressonsectionpage, \ratten@progressonsectionpage@linewidth); + \draw[color=normal text.fg!50] - (0pt, 0pt) rectangle (\progressbar@pbwd, \progressbar@pbht) + (0pt, 0pt) rectangle (\textwidth, \ratten@progressonsectionpage@linewidth) node[pos=0.5,color=normal text.fg] {\textnormal{% \pgfmathparse{\insertframenumber*100/\inserttotalframenumber}% \pgfmathprintnumber[fixed,precision=2]{\pgfmathresult}\,\%% @@ -225,6 +217,7 @@ }; \end{tikzpicture}% } +\def\inserttotalframenumber{100} %notwendig damit es keine demension Error gibt \defbeamertemplate*{footline}{ratten theme} {% @@ -299,8 +292,8 @@ \setbeamercovered{transparent} % %um descripten links auszurichten -\defbeamertemplate{description item}{align left}{\insertdescriptionitem\hfill} -\setbeamertemplate{description item}[align left] +% \defbeamertemplate{description item}{align left}{\insertdescriptionitem\hfill} +% \setbeamertemplate{description item}[align left] \setbeamertemplate{itemize items}[triangle] diff --git a/tpm_and_luks-handout.pdf b/tpm_and_luks-handout.pdf index 03656cb..7ea941c 100644 Binary files a/tpm_and_luks-handout.pdf and b/tpm_and_luks-handout.pdf differ diff --git a/tpm_and_luks-presentation.pdf b/tpm_and_luks-presentation.pdf index c1691c7..9417f95 100644 Binary files a/tpm_and_luks-presentation.pdf and b/tpm_and_luks-presentation.pdf differ diff --git a/tpm_and_luks.tex b/tpm_and_luks.tex index 05f278c..a5299a0 100644 --- a/tpm_and_luks.tex +++ b/tpm_and_luks.tex @@ -23,15 +23,16 @@ \item{beschränkt sich auf Zusammenhang mit LUKS} \item{beschreibt den praktischen Einsatz} \item{alle Beispiel Commands brauchen root-Rechte} - \item{Annahme über Zuhörende Menschen:} - \begin{itemize} - \item{fortgeschrittene Linux User} - \item{schon ein paar mal mit der CLI die Festplatte verschlüsselt} - \item{Basis-Wissen IT-Security vorhanden} \end{itemize} + \pause + Wer von euch: + \begin{itemize} + \item{ist fortgeschrittene Linux User?} + \item{hat schon ein paar mal mit der CLI die Festplatte verschlüsselt?} + \item{hat Basis-Wissen IT-Security?} \end{itemize} \note{Begriff TPM meint TPM 2.0} - \end{frame} +\end{frame} \begin{frame}[plain] \frametitle{Inhaltsverzeichnis} @@ -74,9 +75,9 @@ \pause \item{kompliziert aufgebaut:} \begin{description} - \item[plattform] System Hersteller Bereich des TPMs - \item[endorsement] TPM Hersteller Bereich und Privacy OWNER (Organisations-Kontrolle), Default Policies - \item[\color<2>{amber-yellow}{storage}] Hier können User ihre Keys und Objekte ablegen + \item[platform] System Hersteller Bereich + \item[endorsement] TPM Hersteller Bereich und Privacy OWNER, Sicherheitsbereich + \item[\color<2>{amber-yellow}{storage}] User Bereich für Keys und Objekte \item[no hierachy / null] Überlebt keinen Boot, berechnet Zufall, nur für temporäre Keys \end{description} \end{itemize} @@ -112,11 +113,12 @@ \begin{frame} \frametitle{Vorteile des TPM unter Linux} \begin{itemize} +\item{der TPM kann nun auch unter Linux genutzt werden} \item{Festplatte kann mit dem TPM automatisch entschlüsselt werden} \item{TPM kann Passphrase für LUKS ersetzen} \item{Kernel, initrd und der Bootprozess können auf Änderungen überwacht werden} \item{Entschlüsselung kann gesperrt werden} -\item{der TPM kann nun auch unter Linux genutzt werden, weitere Features sind in aktiver Entwicklung} +\item{TPM ist unter Linux in aktiver Entwicklung} \end{itemize} \end{frame} @@ -179,7 +181,7 @@ echo 5 > /sys/class/tpm/tpm0/ppi/request \frametitle{Entschlüsselung an den TPM binden} \begin{listing} \begin{minted}[escapeinside=||]{console} -systemd-cryptenroll --tpm2-device=auto --unlock-tpm2-device=auto /dev/vda3 +systemd-cryptenroll --tpm2-device=auto /dev/vda3 |🔐| New TPM2 token enrolled as key slot 2. \end{minted} \caption{TPM in Keyslot des LUKS headers eintragen} @@ -238,7 +240,7 @@ Tokens: Keyslot: 3 \end{minted} \end{minipage} -\note[item]{\textbf{Vorsicht} hier ist nicht sichtbar die Entschlüsselung an den PCR 7 gebunden.} +\note[item]{\textbf{Vorsicht} hier ist per default nicht sichtbar die Entschlüsselung an den PCR 7 gebunden.} \end{frame} \begin{frame} @@ -277,6 +279,7 @@ NR NAME SHA256 |\dots| 23 application-support 0000000000000000000000000000000000000000000000000000000000000000 \end{minted} +\note[item]{PCR-Namen nicht besonders aussagekräftig} \note[item]{die Prüfsumme durch ein Update der Firmware verändern?} \note[item]{kommt nie vor: Update der Secure-Boot Zertifikate? shim-signed} \note[item]{\dots dann stimmt die Prüfsumme nicht mehr.} @@ -286,6 +289,7 @@ NR NAME SHA256 \frametitle{PCRs im UEFI Mapping} \centering \includegraphics[height=0.8\paperheight]{TCG-PCRs.png} + \note[item]{grüne und blaue Punkte ist jeweils ein PCR in den mehrere Werte vermischt gespeichert ist} \end{frame} @@ -441,7 +445,7 @@ CREDENTIALS Added in version 256. |\dots| \end{minted} -\note{Wunsch Idee des Kollegen, wir können prüfen ob User ihre TPM-Pin geändert haben} +\note{Frage des Kollegen gibt es die Möglichkeit zu prüfen ob die TPM-PIN auf \$ gesetzt ist?} \end{frame} \setbeamercovered{invisible} @@ -455,9 +459,10 @@ CREDENTIALS \item[D] \textcolor<2>{red}{systemd-Directive} \onslide<2->{\textcolor{red}{X}} \item[E] \textcolor<2>{red}{Eine Umgebungsvariable} \onslide<2->{\textcolor{red}{X}} \item[F] \textcolor<2>{red}{Eine Variable von systemd-creds} \onslide<2->{\textcolor{red}{X}} -\item[G] \textcolor<2>{gruen}{Ersatz für die Variable TPM2-PIN} \onslide<2->{\textcolor{gruen}{\checkmark}} +\item[G] \textcolor<2>{gruen}{Ersatz für die Umgebungsvariable TPM2-PIN} \onslide<2->{\textcolor{gruen}{\checkmark}} \item[H] \textcolor<2>{gruen}{Ein Credential das innerhalb einer Systemd-Unit verwendet werden kann} \onslide<2->{\textcolor{gruen}{\checkmark}} \end{description} +\note{Frage des Kollegen und was ist das jetzt eigentlich?} \end{frame} \setbeamercovered{transparent} @@ -507,6 +512,64 @@ Optionen sind list, cat, encrypt, decrypt, user, system \note{Note to my inner self: "Manpage lesen hilft gegen Frustration"} \end{frame} +\begin{frame} +\frametitle{Wie funktioniert systemd-creds mit systemd-cryptenroll?} +\framesubtitle{Dokumentation?} +\begin{itemize} +\item{es gibt keine Dokumentation zu finden} +\pause +\item{es gibt kein Beispiel zu finden} +\pause +\item{systemd-repo auf Github} +\begin{itemize} + \item{Tests durchgesehen} + \pause + \item{Pull-Request durchsucht} +\end{itemize} +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Eine vage Idee} +\begin{listing} +\begin{minted}[breaklines,fontsize=\small]{bash} +# Add PIN to TPM2 enrollment +NEWPIN=1234 systemd-cryptenroll --unlock-tpm2-device=auto --tpm2-device=auto --tpm2-with-pin=yes "$IMAGE" + +# Add PIN to TPM2 enrollment, through systemd-creds +systemd-run -p SetCredential=TPM2_PIN:4321 -p DynamicUser=1 -E PIN=1234 --unit=testsuite-70-cryptenroll-creds.service --wait systemd-cryptenroll --unlock-tpm2-device=auto --tpm2-device=auto --tpm2-with-pin=yes "$IMAGE" +\end{minted} +\caption{Test aus \#31370 PR (unvollständig)} +\end{listing} +\end{frame} + +\begin{frame} +\frametitle{Eine vage Idee, die nicht funktioniert} +\begin{itemize} +\item{Aber \dots} +\pause +\begin{itemize} +\item{PR wurde geschlossen, weil schon implementiert über systemd-ask-password-agent} +\pause +\item{im restlichen Code kein Test, der das Verhalten prüft} +\pause +\item{im Code von systemd-cryptenroll ist ersichtlich, dass systemd-ask-password genutzt wird (in C geschrieben)} +\end{itemize} +\end{itemize} +\note{In den Tests werden nicht dokumentierte Umgebungsvariabeln genutzt, um Passwörter und ähnliches an systemd-cryptenroll zu übergeben, aber das soll nicht produktiv genutzt werden} +\end{frame} + +\begin{frame}[fragile] +\begin{minted}[escapeinside=||,breaklines,fontsize=\small,breakanywhere]{output} +systemd-ask-password +--credential= + |\colorbox{inlineheighlight}{Configure a credential to read the password from} - | if it exists. This |\colorbox{inlineheighlight}{may be used in conjunction with the ImportCredential=,}\colorbox{inlineheighlight}{ LoadCredential= and SetCredential= settings}| in unit files. See systemd.exec(5) for details. If not specified, defaults to "password". This |\colorbox{inlineheighlight}{option has no effect if no credentials }\colorbox{inlineheighlight}{directory is passed to the program}| (i.e. $CREDENTIALS_DIRECTORY is not set) or if the no credential of the specified name exists. + Added in version 249. +\end{minted} +\pause +systemd-ask-password hilft das Credential beim User abzufragen, aber damit kann es nicht an systemd-cryptenroll übergeben werden +\end{frame} + \begin{frame}[fragile] \frametitle{systemd-cred in Zusammenhang mit TPM -- Fehler} \begin{listing} @@ -519,12 +582,7 @@ echo -n test | systemd-creds encrypt --name=cryptenroll.passphrase - luks.pass.c \vspace{-0.1cm} \begin{listing} \begin{minted}{console} -systemd-run -p LoadCredential=cryptenroll.passphrase:/root/cryptenroll.passphrase \ - -p SetCredential=cryptenroll.new-tpm2-pin:4321\ - --unit=systemd-cryptsetup@root.service \ - --wait systemd-cryptenroll \ - --tpm2-device=auto \ - --tpm2-with-pin=yes /dev/vda3 +systemd-run -p LoadCredential=cryptenroll.passphrase:/root/cryptenroll.passphrase -p SetCredential=cryptenroll.new-tpm2-pin:4321 --unit=systemd-cryptsetup@root.service --wait systemd-cryptenroll --tpm2-device=auto --tpm2-with-pin=yes /dev/vda3 systemd-cryptsetup@root.service: Failed to set up credentials: Protocol error \end{minted} \vspace{-0.2cm} @@ -543,16 +601,36 @@ systemd-creds decrypt --name=cryptsetup.tpm2-pin --system cryptsetup.tpm2-pin \caption{systemd-creds init und encrypt sowie decrypt} \end{listing} \begin{listing} +\pause \begin{minted}{bash} systemd-run -p SetCredential=cryptenroll.passphrase:test -p SetCredential=cryptenroll.new-tpm2-pin:4321 systemd-cryptenroll --tpm2-device=auto --tpm2-with-pin=yes /dev/vda3 \end{minted} \caption{Setzt mit systemd-creds definierte Passphrase} \end{listing} -\note{Mit verschlüsselten Passphrases noch nicht erfolgreich\\} -\note{Wir wissen etwas über den TPM im Bootprocess, wie wir damit die Festplatte ver/entschlüsseln können, was es mit PCRs auf sich hat \dots fehlt noch die restliche Konfiguration} +\note[item]{Mit verschlüsselten Passphrases noch nicht erfolgreich} +\note[item]{systemd-cryptenroll mit Credentials ist defninitiv nicht so gedacht, wie ich das hier versucht hab} +\note[item]{Wir wissen etwas über den TPM im Bootprocess, wie wir damit die Festplatte ver/entschlüsseln können, was es mit PCRs auf sich hat \dots fehlt noch die restliche Konfiguration} \end{frame} \section{Konfiguration in System} + +\begin{frame}[fragile] +\frametitle{Konfiguration in der Crypttab} +\texttt{/etc/crypttab} +\begin{itemize} + \item{systemd-Version $<$ 255} + \note[item]{systemd-Version $<$ 255: Zeile auskommentieren, damit systemd das LUKS nicht nochmal entschlüssen will} + \begin{minted}{linux-config} +#dm_crypt-0 UUID=ede52a15-f515-4fed-838d-5433999f3f24 none luks + \end{minted} + \item{systemd-Version $>$ 256} + \note[item]{systemd-Version $>$ 256: nicht auskommentieren, sondern erweitern:} + \begin{minted}{linux-config} +dm_crypt-0 UUID=ede52a15-f515-4fed-838d-5433999f3f24 none discard,tpm2-device=auto,tpm2-pin=yes + \end{minted} +\end{itemize} +\end{frame} + \begin{frame}[fragile] \frametitle{initramfs modifizieren} \begin{itemize} @@ -607,32 +685,15 @@ grub2-mkconfig -o /boot/grub2/grub.cfg # fedora \end{itemize} \end{frame} -\begin{frame}[fragile] -\frametitle{Konfiguration in der Crypttab} -\texttt{/etc/crypttab} -\begin{itemize} - \item{systemd-Version $<$ 255} - \note[item]{systemd-Version $<$ 255: Zeile auskommentieren, damit systemd das LUKS nicht nochmal entschlüssen will} - \begin{minted}{linux-config} -#dm_crypt-0 UUID=ede52a15-f515-4fed-838d-5433999f3f24 none luks - \end{minted} - \item{systemd-Version $>$ 256} - \note[item]{systemd-Version $>$ 256: nicht auskommentieren, sondern erweitern:} - \begin{minted}{linux-config} -dm_crypt-0 UUID=ede52a15-f515-4fed-838d-5433999f3f24 none discard,tpm2-device=auto,tpm2-pin=yes - \end{minted} -\end{itemize} -\end{frame} - \section{Unterschiede bei den Distributionen} \begin{frame} \frametitle{Welche Unterschiede bezüglich des TPMs gibt es bei Distributionen?} \begin{itemize} \item{unterschiedliche Tools für initramfs} \begin{itemize} - \item{Dracut} - \note[item]{Dracut: Fedora, OpenSuse} - \item{Initramfstools} + \item{dracut} + \note[item]{dracut: Fedora, OpenSuse} + \item{initramfstools} \note[item]{initramfstools: Debian, Ubuntu, Archlinux} \note[item]{Dracut ist einfacher zu konfigurieren, daher wechseln gerade viele von initramfstools zu dracut} \end{itemize} @@ -653,7 +714,7 @@ dm_crypt-0 UUID=ede52a15-f515-4fed-838d-5433999f3f24 none discard,tpm2-device=au \begin{frame}[fragile] \frametitle{Debugging mit dem TPM I} \framesubtitle{Rätselraten} -\textbf{Folgende journald Meldung ist durch einen Konfigurationsfehler verursacht} +\textbf{Wurde folgende journald Meldung durch einen Konfigurationsfehler verursacht?} \note[item]{Bitte um Handzeichen} \begin{minted}{linux-config} localhost kernel: Unknown kernel command line parameters "splash BOOT_IMAGE=/vmlinuz-6.8.0-49-generic tpm2-pin=yes", will be passed to user space. @@ -665,7 +726,7 @@ localhost kernel: Unknown kernel command line parameters "splash BOOT_IMAGE=/vml \begin{frame}[fragile] \frametitle{Debugging mit dem TPM II} \framesubtitle{Rätselraten} -\textbf{Folgende journald Meldung ist durch einen Konfigurationsfehler verursacht} +\textbf{Wurde folgende journald Meldung durch einen Konfigurationsfehler verursacht?} \note[item]{Bitte um Handzeichen} \begin{minted}{linux-config} localhost systemd-udevd[278]: /usr/lib/udev/rules.d/60-tpm-udev.rules:3 Unknown user 'tss', ignoring. @@ -677,7 +738,7 @@ localhost systemd-udevd[278]: /usr/lib/udev/rules.d/60-tpm-udev.rules:3 Unknown \begin{frame}[fragile] \frametitle{Debugging mit dem TPM III} \framesubtitle{Rätselraten} -\textbf{Folgende journald Meldung ist durch einen Konfigurationsfehler verursacht} +\textbf{Wurde folgende journald Meldung durch einen Konfigurationsfehler verursacht?} \note[item]{Bitte um Handzeichen} \begin{minted}{linux-config} systemd[1]: systemd-tpm2-setup-early.service - TPM2 SRK Setup (Early) was skipped because of an unmet condition check (ConditionSecurity=measured-uki). @@ -689,7 +750,7 @@ systemd[1]: systemd-tpm2-setup-early.service - TPM2 SRK Setup (Early) was skippe \begin{frame}[fragile] \frametitle{Debugging mit dem TPM IV} \framesubtitle{Rätselraten} -\textbf{Folgende journald Meldung ist durch einen Konfigurationsfehler verursacht} +\textbf{Wurde folgende journald Meldung durch einen Konfigurationsfehler verursacht?} \only<2>{\textcolor{green}{\textbf{\checkmark}}} \note[item]{Bitte um Handzeichen} \begin{minted}[breaklines,fontsize=\footnotesize,breakanywhere,escapeinside=||]{linux-config} @@ -736,13 +797,22 @@ tpm:session(1):the authorization HMAC check failed and DA counter incremented \begin{itemize} \item{automatischer Wechsel der Entschlüsselungs-Option von PIN zu Passphrase nicht sichtbar} \item{keine Updates der PCR Measurements (Ausnahme Archlinux und UKI)} -\item{systemd-cryptenroll mit TPM ausgelegt für Zusammenspiel mit UKI} +\item{\texttt{systemd-cryptenroll} mit TPM ausgelegt für Zusammenspiel mit UKI} \item{mehrere Versuche die TPM-PIN einzugeben, nur mit \texttt{tpm2-measure-pcr=yes} in \texttt{crypttab}} +\item{unklar wie die Credentials funktionieren ausserhalb von Units} +\item{wenn \texttt{SetCredential} nicht funktioniert (fehlerhaftes Passwort, DA-Lockout), sieht es so aus, als wäre das Command erfolgreich gewesen} +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Nachteile des TPM in Bezug auf \texttt{systemd-cryptenroll}} +\framesubtitle{Debuging} +\begin{itemize} \item{Debugging:} \begin{itemize} -\item{richtige Fehlermeldungen finden} -\item{verständliche TPM-Fehlercodes} -\item{fehlerhafte PIN-Eingabe erkennbar} +\item{richtige Fehlermeldungen finden?} +\item{verständliche TPM-Fehlercodes?} +\item{fehlerhafte PIN-Eingabe erkennbar?} \end{itemize} \item{nur TPM Entschlüsselung wiegt in falscher Sicherheit} \note[item]{bei Diebstahl des Rechners ist eine Festplatten-Verschlüsselung mit TPM ohne Pin so sicher wie keine Verschlüsselung} @@ -762,6 +832,7 @@ tpm:session(1):the authorization HMAC check failed and DA counter incremented jabber: buecherratten@jabber.in-berlin.de\\ fediverse: buecherratten@pirati.ca\\ git-repro: + \vspace{-0.5cm} \begin{columns} \only{\begin{column}{0.2\textwidth} \qrcode[hyperlink,height=2cm]{http://git.tuxteam.de/gitweb/?p=susannes-git/TPM-LUKS.git;a=shortlog;h=refs/heads/main} @@ -769,8 +840,7 @@ tpm:session(1):the authorization HMAC check failed and DA counter incremented \begin{column}{0.8\textwidth} \url{http://git.tuxteam.de/gitweb/?p=susannes-git/TPM-LUKS.git;a=shortlog;h=refs/heads/main} \end{column} - \end{columns} - } + \end{columns}} \end{frame} \end{document}