Zum Inhalt springenZur Seitennavigation springen: vorherige Seite [Zugriffstaste p]/nächste Seite [Zugriffstaste n]
documentation.suse.com / Sichern von SLE Micro mit Keylime

Sichern von SLE Micro mit Keylime

Veröffentlicht: 12.12.2024
WAS?

Keylime ist eine TPM-basierte Remote-Boot-Attestierung und Laufzeit-Integritätsmessung.

WARUM?

In diesem Artikel wird beschrieben, wie Keylime unter SLE Micro konfiguriert und ausgeführt wird.

AUFWAND

Es dauert ungefähr 25 Minuten, um den Artikel zu lesen.

ZIEL

Sie erfahren mehr über Keylime – wie es funktioniert, wie Sie es konfigurieren sollten und wie es ausgeführt wird.

ANFORDERUNGEN
  • Eine ausgeführte Instanz von SLE Micro

1 Remote-Attestierung mit Keylime

Angesichts der wachsenden Nachfrage nach dem Schutz von Geräten vor nicht autorisierten Änderungen findet der Sicherheitsmechanismus der Remote-Attestierung (RA) zunehmende Verbreitung. Mit RA kann ein Host (Client) seinen Boot-Chain-Status und die laufende Software auf einem entfernten Host (Verifier) authentifizieren. RA wird oft mit einer Public-Key-Verschlüsselung (mit TPM2) kombiniert, so dass die gesendeten Informationen nur von den Diensten gelesen werden können, die die Attestierung angefordert haben, und die Gültigkeit der Daten überprüft werden kann.

Die Remote-Attestierung unter SLE Micro wird von Keylime implementiert.

1.1 Terminologie

Im Zusammenhang mit der Technologie der Remote-Attestierung werden folgende Begriffe verwendet:

Attestierungsschlüssel (Attestation Key, AK)

Ein Datensignaturschlüssel, der beweist, dass die Daten von einem echten TPM stammen und nicht manipuliert wurden.

Zentraler Vertrauensanker für Messungen (Core Root of Trust for Measurement)

Berechnet seinen eigenen Hash und den Hash des nächsten Schritts im Boot-Prozess und initiiert die Messkette.

Endorsement-Schlüssel (Endorsement Key, EK)

Ein Verschlüsselungsschlüssel, der bei der Herstellung des TPM dauerhaft darin eingebettet wird. Der öffentliche Teil des Schlüssels und die im TPM gespeicherte Zertifizierung werden verwendet, um ein echtes TPM zu erkennen.

Integritätsverwaltungsarchitektur (Integrity Management Architecture, IMA)

Ein Kernel-Integritäts-Untersystem, das eine Möglichkeit bietet, böswillige Veränderungen an Dateien zu erkennen.

Measured Boot

Eine Methode, bei der jede Komponente im Startvorgang einen Hash der jeweils nächsten Komponente berechnet, bevor die Ausführung der nächsten Komponente delegiert wird. Der Hash erweitert ein oder mehrere PCRs des TPM. Es wird ein Ereignis mit den Informationen darüber erstellt, wo die Messung stattgefunden hat und was gemessen wurde. Solche Ereignisse werden in einem Ereignisprotokoll gesammelt. Zusammen mit den erweiterten PCR-Werten können die Ereignisse mit den erwarteten Werten eines intakten Systems verglichen werden.

Plattformkonfigurationsregister (Platform Configuration Register, PCR)

Ein Speicherort im TPM, an dem beispielsweise Hashes der Start-Layer gespeichert werden. Das PCR kann nur mit der nicht umkehrbaren Aktion extend aktualisiert werden. Eine signierte Liste der aktuellen PCR-Werte kann über das Kommando quote auf TPM abgerufen werden, und dieses Zitat kann während der Attestierung von einer dritten Partei überprüft werden.

Secure Boot

Bei jedem Schritt im Startprozess wird eine kryptografische Signatur der ausführbaren Datei des jeweils nächsten Schritts geprüft, bevor sie gestartet wird.

Trusted-Platform-Modul (TPM)

Ein eigenständiger sicherheitskryptografischer Prozessor im System (entweder als Hardware oder in der Firmware implementiert), der als Vertrauensanker fungiert. TPM umfasst ein PCR, in dem die Hashes der Start-Layer gespeichert werden. Ein typisches TPM bietet mehrere Funktionen, z. B. einen Zufallszahlengenerator, verschiedene Zähler oder eine lokale Uhr. Außerdem werden hier 24 PCRs gespeichert, gruppiert nach Banken für jede unterstützte kryptografische Hash-Funktion (SHA1, SHA256, SHA384 oder SHA512).

Anmerkung
Anmerkung

Die TPM-Nutzung ist standardmäßig deaktiviert. Measured Boot wird daher nicht ausgeführt. Zum Aktivieren der Remote-Attestierung aktivieren Sie das TPM im EFI-/BIOS-Menü.

Sichere Nutzlast

Ein Mechanismus, mit dem verschlüsselte Daten an fehlerfreie Agenten geliefert werden. Mit den Nutzlasten werden Schlüssel, Passwörter, Zertifikate, Konfigurationen oder Skripte übermittelt, die vom Agenten weiter genutzt werden.

1.2 Was ist Keylime?

Keylime ist eine Remote-Attestierungslösung, mit der Sie den Zustand von Fernknoten über ein TPM als Vertrauensanker für die Messungen überwachen können. Mit Keylime können Sie mehrere Aufgaben ausführen, beispielsweise:

  • PCRs validieren, die beim Measured Boot erweitert wurden.

  • Erstellen Sie Analysen und machen Sie Aussagen über das Ereignisprotokoll.

  • Assertion des Werts für ein beliebiges PCR im Fernsystem vornehmen.

  • Gültigkeit offener oder ausgeführter Dateien überwachen.

  • Verschlüsselte Daten an verifizierte Knoten über Sichere Nutzlasten liefern.

  • Benutzerdefinierte Skripten ausführen, die ausgelöst werden, wenn die attestierten Messungen auf einem Computer fehlschlagen.

1.3 Architektur

Keylime besteht aus einem Agenten, einer Überprüfungsstelle, einer Registrierungsstelle und einem Kommandozeilenwerkzeug (Mandant). Die Agenten befinden sich auf den zu attestierenden Systemen. Die Überprüfungsstelle und die Registrierungsstelle befinden sich auf entfernten Systemen, die die Registrierung und Attestierung von Agenten durchführen. Beachten Sie, dass lediglich die Agentenrolle unter SLE Micro verfügbar ist. Detaillierte Informationen zu den einzelnen Komponenten finden Sie in den folgenden Abschnitten.

1.3.1 Keylime-Agent

Der Agent ist ein Dienst, der auf dem zu attestierenden System ausgeführt wird. Der Agent sendet das Ereignisprotokoll, IMA-Hashes und Informationen über den gemessenen Bootvorgang an die Überprüfungsstelle, wobei das lokale TPM als Zertifizierungsstelle für die Gültigkeit der Daten dient.

Wenn ein neuer Agent gestartet wird, muss er sich zunächst bei der Registrierungsstelle registrieren. Der Agent benötigt dabei ein TLS-Zertifikat, um die Verbindung herzustellen. Das TLS-Zertifikat wird von der Registrierungsstelle generiert, muss jedoch manuell auf dem Agenten installiert werden. Nach der Registrierung sendet der Agent seinen Schlüssel zur Attestierung und den öffentlichen Teil des Bestätigungsschlüssels an die Registrierungsstelle. Die Registrierungsstelle antwortet dem Agenten mit einer Herausforderung im Rahmen der sogenannten Anmeldedatenaktivierung, bei der der TPM des Agenten validiert wird. Sobald der Agent registriert wurde, kann er für die Attestierung eingeschrieben werden.

1.3.2 Keylime-Registrierungsstelle

Die Registrierungsstelle registriert die zu attestierenden Agenten. Die Registrierungsstelle sammelt den Attestierungsschlüssel des Agenten, den öffentlichen Teil des Endorsement-Schlüssels und die Zertifizierung des Endorsement-Schlüssels und überprüft, ob der Attestierungsschlüssel des Agenten zum Endorsement-Schlüssel gehört.

1.3.3 Keylime-Überprüfungsstelle

Die Überprüfungsstelle führt die eigentliche Attestierung der Agenten durch und zieht kontinuierlich die erforderlichen Attestierungsdaten von den Agenten ab (unter anderem die PCR-Werte, IMA-Protokolle und UEFI-Ereignisprotokolle).

2 Ausführen des Keylime-Workloads mit Podman

Keylime ist eine Lösung zur Remote-Attestierung, mit der Sie den Zustand von Remote-Knoten überwachen können. Die Überprüfungsstelle und die Registrierungsstelle sind wesentliche Komponenten von Keylime auf Remote-Systemen für die Registrierung und Attestierung von Keylime-Agenten.

Anmerkung
Anmerkung

Der in diesem Artikel beschriebene Container stellt die Überprüfungsstelle und die Registrierungsstelle für die Steuerungsebenendienste sowie ein Kommandozeilen-Tool (CLI) für den Mandanten bereit, die Teil des Keylime-Projekts sind.

Bevor Sie mit der Installation und Registrierung von Agenten beginnen, bereiten Sie die Überprüfungsstelle und die Registrierungsstelle auf entfernten Hosts vor, wie im folgenden Verfahren beschrieben.

  1. Ermitteln Sie das Keylime-Workload-Image.

    # podman search keylime
    [...]
    registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane
  2. Rufen Sie das Image aus der Registrierung ab.

    # podman pull\
      registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latest
  3. Erstellen Sie das Volume keylime-control-plane, um die Datenbank und die Zertifikate, die während der Attestierung benötigt werden, aufzubewahren.

    # podman container runlabel install \
      registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latest
  4. Starten Sie den Container und die zugehörigen Dienste.

    # podman container runlabel run \
      registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latest

    Der Container keylime-control-plane wird erstellt. Er enthält konfigurierte und laufende Dienste der Registrierungsstelle und der Überprüfungsstelle. Intern gibt der Container die Ports 8881, 8890 und 8891 mit den Standardwerten an den Host weiter. Validieren Sie die Firewall-Konfiguration, um den Zugriff auf die Ports und die Kommunikation zwischen den Containern zu ermöglichen, da die CLI des Mandanten dies erfordert.

Tipp
Tipp

Wenn Sie die Keylime-Dienste stoppen müssen, führen Sie folgendes Kommando aus:

# podman kill keylime-control-plane-container

2.1 Überwachen der Keylime-Dienste

Zum Abrufen des Status der ausgeführten Container auf dem Host führen Sie folgendes Kommando aus:

# podman ps

Zur Anzeige der Protokolle für die Keylime-Dienste führen Sie folgendes Kommando aus:

# podman logs keylime-control-plane-container

2.2 Ausführen der Mandanten-CLI

Das Mandant-CLI-Tool ist im Container enthalten. Wenn die Host-Firewall die von den Keylime-Diensten freigegebenen Ports nicht beeinträchtigt, können Sie es beispielsweise mit demselben Image ausführen:

# podman run --rm \
-v keylime-control-plane-volume:/var/lib/keylime/ \
keylime-control-plane:latest \
keylime_tenant -v 10.88.0.1 -r 10.88.0.1 --cert default -c reglist

2.3 Extrahieren des Keylime-Zertifikats

Bei der ersten Ausführung des Keylime-Containers erstellen seine Dienste ein Zertifikat, das von mehreren Agenten benötigt wird. Sie müssen das Zertifikat aus dem Container extrahieren und es in das Verzeichnis /var/lib/keylime/cv_ca/ des Agenten kopieren.

# podman cp \
keylime-control-plane-container:/var/lib/keylime/cv_ca/cacert.crt
.# scp cacert.crt
AGENT_HOST:/var/lib/keylime/cv_ca/
Tipp
Tipp

Weitere Informationen zum Installieren des Agenten finden Sie in Abschnitt 3, „Installation des Keylime-Agenten“.

3 Installation des Keylime-Agenten

Keylime ist eine Lösung zur Remote-Attestierung, mit der Sie den Zustand von Remote-Knoten überwachen können. Der Keylime-Agent ist ein Dienst, der auf dem zu attestierenden System läuft und das Ereignisprotokoll, IMA-Hashes und Informationen über den gemessenen Bootvorgang an die Überprüfungsstelle sendet.

Der Keylime-Agent ist unter SLE Micro nicht standardmäßig vorhanden. Sie müssen ihn manuell installieren. So installieren Sie den Agenten:

  1. Installieren Sie das Paket rust-keylime:

    # transactional-update pkg in rust-keylime

    Starten Sie das System dann neu.

  2. Passen Sie die Konfiguration des Standardagenten an.

    1. Erstellen Sie ein Verzeichnis für die neue Konfigurationsdatei mit Ihren Änderungen in /etc/keylime/agent.conf.d/. Die Standardkonfiguration ist in /usr/etc/keylime/agent.conf gespeichert. Es wird allerdings nicht empfohlen, diese Datei zu bearbeiten, da sie bei zukünftigen Systemaktualisierungen überschrieben werden könnte.

      # mkdir -p /etc/keylime/agent.conf.d
    2. Erstellen Sie eine neue Datei mit dem Namen /etc/keylime/agent.conf.d/agent.conf:

      # cat << EOF > /etc/keylime/agent.conf.d/agent.conf
       [agent]
       
       uuid = "d111ec46-34d8-41af-ad56-d560bc97b2e8"1
       registrar_ip = "<REMOTE_IP>"2
       revocation_notification_ip = "<REMOTE_IP>"3
       EOF

      1

      Die eindeutige Kennung wird bei jeder Ausführung des Agenten generiert. Sie können jedoch einen bestimmten Wert mit dieser Option definieren.

      2

      IP-Adresse der Registrierungsstelle.

      3

      IP-Adresse der Überprüfungsstelle.

    3. Ändern Sie den Eigentümer des Verzeichnisses /etc/keylime/ zu keylime:tss:

      # chown -R keylime:tss /etc/keylime
    4. Ändern Sie die Rechte für das Verzeichnis /etc/keylime/:

      # chmod -R 600 /etc/keylime
  3. Kopieren Sie die von der Zertifizierungsstelle generierten Zertifikate auf den Agentenknoten. Gehen Sie auf dem Agentenknoten wie folgt vor:

    1. Bereiten Sie ein Verzeichnis für das Zertifikat vor:

      # mkdir -p /var/lib/keylime/cv_ca
    2. Kopieren Sie das Zertifikat in den Agenten:

      # scp CERT_SERVER_ADDRESS:/var/lib/keylime/cv_ca/cacert.crt /var/lib/keylime/cv_ca
    3. Ändern Sie den Eigentümer des Zertifikats zu keylime:tss:

      # chown -R keylime:tss /var/lib/keylime/cv_ca
  4. Starten und aktivieren Sie den keylime_agent.service

    # systemctl enable --now keylime_agent.service

4 Registrieren des Keylime-Agenten

Keylime ist eine Lösung zur Remote-Attestierung, mit der Sie den Zustand von Remote-Knoten überwachen können. Der Keylime-Agent ist ein Dienst, der auf dem zu attestierenden System läuft und das Ereignisprotokoll, IMA-Hashes und Informationen über den gemessenen Bootvorgang an die Überprüfungsstelle sendet.

Sie können einen neuen Agenten entweder mit dem CLI-Mandanten oder durch Bearbeiten der Konfiguration für die Überprüfungsstelle registrieren. Führen Sie im Mandanten auf dem Überprüfungsstellen-Host folgendes Kommando aus:

# keylime_tenant -v 127.0.0.1 \
  -t AGENT \1
  -u UUID \2
  --cert default \
  -c add
  [--include PATH_TO_ZIP_FILE]3

1

AGENT ist eine IP-Adresse des zu registrierenden Agenten.

2

UUID ist die eindeutige Kennung des Agenten.

3

In der Datei, die mit der Option include übergeben wird, werden geheime Nutzlastdaten an den Agenten geliefert. Detaillierte Informationen finden Sie in Abschnitt 5, „Sichere Nutzlasten von Keylime“.

Zum Auflisten der registrierten Agenten können Sie das Kommando reglist wie folgt auf dem Überprüfungsstellen-Host ausführen:

# keylime_tenant -v 127.0.0.1 \
  --cert default \
  -c reglist

Wenn Sie einen registrierten Agenten entfernen möchten, geben Sie den Agenten mit den Optionen -t und -u und dem Kommando -c delete wie folgt an:

# keylime_tenant -v 127.0.0.1 \
  -t AGENT \
  -u UUID \
  -c delete

5 Sichere Nutzlasten von Keylime

Keylime ist eine Lösung zur Remote-Attestierung, mit der Sie den Zustand von Remote-Knoten überwachen können.

5.1 Was ist eine sichere Nutzlast?

Mit einer sicheren Keylime-Nutzlast können Sie verschlüsselte Daten an fehlerfreie Agenten liefern. Mit den Nutzlasten werden Schlüssel, Passwörter, Zertifikate, Konfigurationen oder Skripte übermittelt, die vom Keylime-Agenten zu einem späteren Zeitpunkt genutzt werden.

5.2 Wie funktioniert eine sichere Nutzlast?

Eine sichere Nutzlast wird dem Agenten in einer zip-Datei geliefert, die ein Shell-Skript mit dem Namen autorun.sh enthalten muss. Das Skript wird nur ausgeführt, wenn der Agent ordnungsgemäß registriert und überprüft wurde. Zum Liefern der zip-Datei verwenden Sie die Option --include des Kommandos keylime_tenant.

Das folgende Skript autorun.sh erstellt zum Beispiel eine Verzeichnisstruktur und kopiert SSH-Schlüssel dorthin. Das zugehörige zip-Archiv muss diese SSH-Schlüssel enthalten.

> cat autorun.sh
#!/bin/bash
 
 mkdir -p /root/.ssh/
 cp id_rsa* /root/.ssh/
 chmod 600 /root/.ssh/id_rsa*
 cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

6 Aktivieren des IMA-Trackings für Keylime

Keylime ist eine Lösung zur Remote-Attestierung, mit der Sie den Zustand von Remote-Knoten überwachen können. Die Integritätsverwaltungsarchitektur (Integrity Management Architecture, IMA) ist ein Kernel-Integritäts-Subsystem, das böswillige Änderungen an Dateien erkennen kann.

Wenn Sie mit IMA arbeiten, berechnet der Kernel einen Hash der aufgerufenen Dateien. Der Hash wird dann verwendet, um die PCR 10 im TPM zu erweitern und außerdem eine Liste der aufgerufenen Dateien zu protokollieren. Die Überprüfungsstelle kann eine signierte Angabe an den Agenten anfordern, damit PCR 10 die Protokolle aller abgerufenen Dateien mit den Datei-Hashes erhält. Die Überprüfungsstellen vergleichen dann die abgerufenen Dateien mit einer lokalen Positivliste der zugelassenen Dateien. Wenn einer der Hashes nicht erkannt wird, gilt das System als unsicher und es wird ein Sperrereignis ausgelöst.

Bevor Keylime in der Lage ist, Informationen zu erfassen, muss IMA/EVM aktiviert werden. Um den Prozess zu aktivieren, booten Sie einen Kernel des Agenten mit den Parametern ima_appraise=log und ima_policy=tcb:

  1. Aktualisieren Sie die Option GRUB_CMDLINE_LINUX_DEFAULT mit den Parametern in /etc/default/grub:

    GRUB_CMDLINE_LINUX_DEFAULT="ima_appraise=log ima_policy=tcb"
  2. Generieren Sie grub.cfg mit folgendem Kommando neu:

    # transactional-update grub.cfg
  3. Starten Sie das System neu.

Im obigen Verfahren wird die standardmäßige Kernel-IMA-Richtlinie verwendet. Erstellen Sie eine neue benutzerdefinierte Richtlinie, um zu vermeiden, dass zu viele Dateien überwacht werden und dadurch lange Protokolle entstehen. Weitere Informationen finden Sie unter Keylime documentation.

Zum Festlegen der erwarteten Hashes verwenden Sie die Option --allowlist des Kommandos keylime_tenant, wenn Sie den Agenten registrieren. Zum Anzeigen der ausgeschlossenen oder ignorierten Dateien verwenden Sie die Option --exclude des Kommandos keylime_tenant:

# keylime_tenant --allowlist
    -v 127.0.0.1 \
    -u UUID

7 Weitere Informationen