Signieren / Prüfen des Kernels, um Manipulationen zu verhindern / zu erkennen

8

Alle meine Partitionen sind verschlüsselt ( /und /home), aber die /bootPartition muss unverschlüsselt bleiben und kann bearbeitet werden. Ich habe darüber nachgedacht, den Kernel beim Booten zu haschen und das Ergebnis mit einem gespeicherten Wert zu vergleichen (beim Kompilieren generiert, auf meinem verschlüsselten Laufwerk gespeichert), um festzustellen, ob jemand den Kernel seit dem letzten Start irgendwie manipuliert hat (vielleicht sogar physisch). Gibt es ein Problem beim Schreiben eines solchen Skripts? Gibt es Programme, die dies bereits tun?

SkaveRat
quelle

Antworten:

6

Was Sie suchen - um zu überprüfen, ob das auf dem Computer ausgeführte Betriebssystem eines ist, dem Sie vertrauen - wird als vertrauenswürdiger Start bezeichnet . (Dies ist eines von mehreren Dingen, die manchmal als vertrauenswürdiger Start bezeichnet werden.) Ihre vorgeschlagene Methode erreicht dieses Ziel nicht.

Die Verschlüsselung bietet keine Datenintegrität oder -authentizität . Mit anderen Worten, es hindert einen Angreifer nicht daran, den Inhalt Ihrer Festplatte zu ändern und durch ein bösartiges Betriebssystem zu ersetzen. Dieses schädliche Betriebssystem kann leicht so programmiert werden, dass die Prüfsumme angezeigt wird, die Sie für den geladenen Kernel erwarten.

Der einfachste Angriffspfad ist ein Man-in-the-Middle, bei dem der Angreifer Ihr normales Betriebssystem unter einer Art virtueller Maschine ausführt. Die Schicht der virtuellen Maschine überträgt Ihre Eingaben an Ihr gewünschtes Betriebssystem und überträgt die Ausgaben zurück. Es zeichnet aber auch Ihre Tastenanschläge (mmmm, Passwörter) auf der Seite auf, schnippt private Schlüssel aus dem Speicher des Betriebssystems und so weiter.

Um diese Form des Angriffs zu vermeiden, benötigen Sie eine Vertrauenswurzel : eine Komponente des Systems, der Sie aus einem anderen Grund vertrauen, als weil es eine andere Komponente des Systems sagt. Mit anderen Worten, Sie müssen irgendwo anfangen. Mit Hardware in Ihrem Besitz zu beginnen, ist ein guter Anfang. Sie können Ihr Betriebssystem auf einem USB-Stick halten, der Ihre Sicht nicht verlässt, und diesen nur an Hardware anschließen, auf die Sie ausreichend vertrauen ( Hardware kann Malware enthalten !). Wenn Sie dem Computer vertrauen möchten, können Sie auch seiner Festplatte vertrauen.

Es gibt eine technische Lösung, um die Lücke zwischen dem Vertrauen in einen kleinen Chip und dem Vertrauen in einen ganzen Desktop- oder Laptop-Computer zu schließen. Einige PCs verfügen über ein TPM (Trusted Platform Module) , mit dem unter anderem überprüft werden kann, ob nur ein bekanntes Betriebssystem gestartet werden kann. Trusted Grub unterstützt TPMs. Mit einem TPM plus Trusted Grub können Sie also sicher sein, dass der von Ihnen ausgeführte Kernel von Ihnen genehmigt wurde.

Beachten Sie, dass die Einführung des TPM für oder gegen Sie funktionieren kann. Es hängt alles davon ab, wer die Schlüssel hat. Wenn Sie den privaten Schlüssel für Ihr TPM haben, können Sie genau steuern, was auf Ihrem Computer ausgeführt wird. Wenn nur der Hersteller über den privaten Schlüssel verfügt, können Sie eine Allzweckplattform in eine gesperrte Appliance verwandeln.

Gilles 'SO - hör auf böse zu sein'
quelle
+1 für den Hinweis auf eine große potenzielle Gefahr von TPM (auch bekannt als Treacherous Computing)
Eli Heady
Sie geben keine tatsächlichen Lösungen an , sondern erwähnen nur beliebte sicherheitsrelevante Ausdrücke. Was Sie über einen MITM-Angriff sagen, ist eine Bedrohung, die die Hauptidee der OP-Frage ignoriert: Verwenden eines Skripts zur Überprüfung der Prüfsumme, mit dem das System nur gestartet werden kann, wenn bestimmte Bedingungen erfüllt sind. Zu diesem Zeitpunkt wäre es kein Problem zu überprüfen, ob die tatsächlich zugrunde liegende Hardware so ist, wie sie sein sollte, nicht eine VM.
Rozcietrzewiacz
-1

Der gebootete Kernel befindet sich im Speicher. Sie können ein Skript erstellen, in dem es gefunden wird, /dev/memund bei Kenntnis der Größe die Prüfsumme berechnen und überprüfen.

Sie können auch die gesamte Festplatte verschlüsseln lassen, ohne dass eine /bootPartition erforderlich ist und (fast) keine Möglichkeit besteht, den Kernel zu ändern. Wie? Ich kann mir zwei Möglichkeiten vorstellen:

  • Legen Sie Ihren Kernel auf eine CD, von der Ihr Computer startet. Das ist nicht so schwierig; Einige Leute haben vor einigen Jahren berichtet, dass sie ein solches Setup verwenden - siehe den zweiten Beitrag in diesem Forenthread .

  • Wenn Ihr Motherboard von Coreboot unterstützt wird und genügend Platz für einen minimalen Kernel bietet, befindet sich möglicherweise ein Kernel mit Verschlüsselungsfunktion auf Ihrem BIOS-Chip. (Ich hatte keine Gelegenheit zum Testen, aber ich sehe keinen Grund, warum dies möglicherweise nicht funktioniert.)

Bearbeiten: Beachten Sie, dass dies alles nur einzelne Schritte in Richtung "vertrauenswürdiger" oder "verifizierter" Start sind (worauf Gilles zu Recht hingewiesen hat). Der vollständige Mechanismus sollte auch berücksichtigen, was im Bootloader-Stadium geschieht und wie die zugrunde liegende Hardware identifiziert wird. Sehen Sie sich an, wie Google Chromium OS dies tut .

rozcietrzewiacz
quelle
Wird es funktionieren? Ich bin mir nicht sicher; Ich weiß nicht ohne weiteres, ob der Kernel seinen Code im Speicher nach dem Start ändert. Ich weiß, dass Sie ein Modul auf diese Weise nicht überprüfen können, da das Modul beim Laden mit dem Kernel verknüpft ist (einige Adressen hier und da ändern). Wird es die gewünschten Sicherheitseigenschaften bieten? Nein, siehe meine Antwort. Integrität ist schwierig!
Gilles 'SO - hör auf böse zu sein'
Es scheint, dass Sie meine ganze Antwort nicht gelesen haben. Der erste Absatz, auf den Sie sich beziehen, ist nur eine direkte Antwort auf das, was wirklich gefragt wurde. Der Rest meiner Antwort enthält Optionen, die der von Ihnen erwähnten Methode ähneln , jedoch besser sind , da sie gegen Kernelmodifikationen geschützt sind (im Gegensatz zu einem USB-Pendrive).
Rozcietrzewiacz
@ Gilles Ich habe vergessen, dich im vorherigen Kommentar mit '@' zu versehen. Außerdem habe ich gerade überprüft, bei was Sie sich nicht sicher waren: Haben Sie einen Speicherauszug des In-Memory-Kernel-Images erstellt, dann eine Reihe von Modulen hinzugefügt und einen zweiten Speicherauszug der Region erstellt. Sie können dies verwenden.
Rozcietrzewiacz