Ich suche entweder nach so etwas wie diesem Sicherheits-Whitepaper für iOS außer OS X oder noch besser nach einer Art Sicherheits-Audit-Bericht von einem unabhängigen Experten. Nachdem ich Dokumentationen wie den Programmierleitfaden für Schlüsselbunddienste durchgelesen habe, bin ich noch verwirrter darüber, was für einen gegnerischen Angriff auf ein unverschlüsseltes Backup eines OS X-Systems anfällig ist.
Als ich das letzte Mal nachgesehen habe, war der Login-Schlüsselbund des Benutzers unter OS X ungefähr so sicher wie das Passwort. Ich erinnere mich an ein Problem, das die tatsächliche Geheimhaltung des Schlüssels auf etwa 111 Bits schrumpfte (schwieriger Speicher, bitte zögern Sie nicht, mich zu korrigieren) aufgrund eines Problems mit der Umwandlung des Passworts in einen Schlüssel, aber das ist lange her und hoffentlich ist das behoben.
Andererseits wurde mir gesagt, dass der System -Schlüsselbund von Natur aus weniger sicher ist, da jeder Administrator darauf zugreifen kann und ein Eindringling neben dem Erraten des Passworts eines einzelnen Benutzers viele Möglichkeiten hat, Administrator zu werden.
Insbesondere mache ich mir Sorgen über das Speichern von Passwörtern, die in automatisierten Skripten im System-Schlüsselbund verwendet werden, da die Systemdateien gesichert und ohne weitere Verschlüsselung extern gespeichert werden. Dokumente und andere Benutzerdaten werden verschlüsselt, bevor sie ausgelagert werden, aber ich habe den quälenden Verdacht, dass es einen Pfad gibt, den ich übersehe, der diese Schlüssel wiederherstellt, sobald der System-Schlüsselbund kompromittiert ist (aufgrund unserer Verfahren, nicht unbedingt kryptografischer Fehler). . Daher möchte ich ein gründliches Verständnis dafür haben, wie der System-Schlüsselbund gleichzeitig gesichert und dennoch für jeden Administrator zugänglich ist.
Wie sind die Schlüssel so aufgebaut, dass jeder Benutzer mit Administratorrechten den System-Schlüsselbund entsperren kann?
Gibt es kryptografische Einschränkungen, die einschränken, was ein administrativer Benutzer mit Informationen im System-Schlüsselbund machen kann?
Wie würden Sie bei einem unverschlüsselten System-Backup ohne /Users
Zugriff auf die Schlüssel im System-Schlüsselbund erhalten?
Ich interessiere mich für OS X 10.5 Leopard und spätere Versionen, aber speziell beschränkt auf Desktop- oder Laptop-Macs ohne T2-Chip oder sichere Enklave. Apples Spring 2020 Platform Security Whitepaper erklärt ziemlich gut, dass die kritischen Schlüssel, die Schlüsselbunddaten verschlüsseln, auf dem T2-Chip gespeichert sind und der T2-Chip selbst ACLs verwaltet und anwendet, die den Zugriff auf die Entschlüsselungsfunktion einschränken. Auf diesen Computern ist die Schlüsselbunddatenbank also, wie bei allen iOS-Geräten, an die Hardware gebunden und kann nicht auf einem anderen Gerät verwendet werden.
Der System-Schlüsselbund wird darin gespeichert /Library/Keychains/System.keychain
und der Schlüssel zum Entsperren wird darin gespeichert /var/db/SystemKey
(seine Standard-Dateiberechtigungen sind nur für Root lesbar). Auf den Speicherort dieser Dateien wird im Skript security-checksystem (aus der Quelle security_systemkeychain ) verwiesen. Es ist sogar möglich, das automatische Sperren/Entsperren des Systemschlüsselbunds mit zu testen
systemkeychain -vt
Das Schlüsselbund-Sicherheits-Framework erlaubt es nicht-privilegierten Programmen, Informationsanfragen zu stellen, vorausgesetzt, sie befinden sich in der ACL, die im Schlüsselbund-Eintrag gespeichert ist. Wenn ein Benutzer root ist, kann er auf einem System natürlich direkt auf die Datei zugreifen, in der der Systemschlüsselbund gespeichert ist, und auf den Schlüssel, um ihn zu entsperren, sodass er keine Anforderungen über das Sicherheitsframework stellen muss und nicht an die im Schlüsselbund gespeicherten ACLs gebunden ist selbst.
(Ich habe die ursprünglichen Fragen nicht wirklich beantwortet, also versuchen wir es noch einmal.)
Wie sind die Schlüssel so aufgebaut, dass jeder Benutzer mit Administratorrechten den System-Schlüsselbund entsperren kann?
Das Schlüsselbund- Framework libsecurity ermöglicht regulären Prozessen die authentifizierte Interaktion mit dem Schlüsselbund des Systems unter Verwendung von Apples XPC Interprocess Communication Framework (IPC).
Programm A sendet eine Anforderung zum Zugriff auf die Schlüsselbundinformationen des Systems unter Verwendung von IPC. Es wird geprüft, ob der anfragende Benutzer bereits in der Radgruppe ist und auch das Passwort eines Benutzers in der Radgruppe kennt. Sobald die Autorisierung bestätigt ist, kann der privilegierte kcproxy
Daemon verwendet werden, um auf Material in zuzugreifen /var/db/SystemKey
, den Schlüsselbund des Systems zu entsperren und die angeforderten Informationen zurückzugeben.
Gibt es kryptografische Einschränkungen, die einschränken, was ein administrativer Benutzer mit Informationen im System-Schlüsselbund machen kann?
Nein - ein administrativer Benutzer darf auf alles im Systemschlüsselbund zugreifen/ändern. Selbst wenn dies nicht möglich wäre, könnten sie die zugrunde liegenden Dateien auf einen anderen Computer kopieren, auf dem sie die vollständige Kontrolle haben, und sie dort einfach entsperren/auf sie zugreifen.
Wie würden Sie bei einem unverschlüsselten System-Backup ohne /Users Zugriff auf die Schlüssel im System-Schlüsselbund erhalten?
Wenn das Backup Kopien von /Library/Keychains/System.keychain
und enthalten /var/db/SystemKey
würde, würde ich sie an ihre jeweiligen Speicherorte auf einem neuen OS X-System kopieren und verwenden systemkeychain
, um das spätere Entsperren des ersteren zu machen und die Schlüsselbunddatenbank mit security dump-keychain
.
Der System-Schlüsselbund hat einige einzigartige Fähigkeiten. Diese sind auf der Handbuchseite systemkeychain dokumentiert . Die Erwähnungen des Master-Passworts werden wahrscheinlich Ihr Fokus sein. Der System-Schlüsselbund-spezifische Quellcode ist klein und verfügbar.
Der Systemschlüsselbund, /System/Library/Keychains/System.keychain
, ist ein spezieller Schlüsselbund für Apple und Daemons. Sie sollten es im Allgemeinen vermeiden, es für Skripte auf Benutzerebene zu verwenden.
Apple hat den Quellcode für den Schlüsselbund und das Sicherheits-Framework für Mac OS X 10.5 veröffentlicht; Sie können diesen Code überprüfen, um herauszufinden, wie er funktioniert.
Sie können einen separaten Schlüsselbund erstellen, um die Anmeldeinformationen Ihres Skripts zu speichern. Wir empfehlen diese Praxis unseren Kunden. Sie können die Sicherheit des Befehlszeilentools verwenden , um auf Ihre Schlüsselbunde zuzugreifen, sie zu extrahieren und zu verwalten, ohne auf eine grafische Oberfläche zurückgreifen zu müssen.
Erwägen Sie, die Passwörter für Ihre automatisierten Skripte in einem separaten Schlüsselbund zu speichern – und schließen Sie diesen Schlüsselbund von Ihrer Offsite-Sicherung aus.
Ich weiß, dass das Entfernen des Schlüsselbunds aus Ihrem Backup nicht ideal ist, aber es würde Ihre Bedenken ausräumen. Beim Wiederherstellen des Mac müssten Sie den Schlüsselbund von einer anderen Quelle zurückbekommen; kann eine vertrauenswürdigere Quelle oder ein Seitenkanal sein.
Sie können das Passwort des separaten Schlüsselbunds immer im System-Schlüsselbund speichern. Sie könnten dann den separaten Schlüsselbund über ein Skript entsperren. Wenn das Backup angegriffen wird, würden Sie das Passwort nur dem separaten Schlüsselbund und nicht dem Schlüsselbund selbst preisgeben, da diese Datei nicht im Offsite-Backup enthalten ist.
Apple hat kürzlich ein Dokument veröffentlicht, in dem seine Sicherheitspraktiken beschrieben werden . Möglicherweise finden Sie dort einige Antworten. Das Dokument ist spezifisch für iOS, aber viele der Sicherheitsfunktionen haben viel mit OS X gemeinsam.
Ich habe keine besonderen Kenntnisse über Schlüsselbund*, aber dies ist eine ziemlich standardisierte Vorgehensweise.
Sobald dies erledigt ist, können Sie das "Passwort" ändern, indem Sie die aktuelle Passphrase eingeben, den symmetrischen Schlüssel entschlüsseln und ihn dann mit der neuen Passphrase verschlüsseln. Dies vermeidet langwierige Entschlüsselungs-/Verschlüsselungsprozesse für den Fall, dass "foo" sehr groß ist.
Wie funktioniert das also für mehrere Benutzer, die auf den Klartext von foo zugreifen müssen? Eigentlich ganz einfach, Sie erstellen einfach einmal für jeden Benutzer eine verschlüsselte Kopie des symmetrischen Schlüssels. Mit anderen Worten, führen Sie Schritt drei für jeden Benutzer aus.
In der Praxis wird all dies aus dem Blickfeld abstrahiert und der Endbenutzer muss sich nur mit seinem eigenen Passwort auseinandersetzen.
In Bezug auf Teil 3 Ihrer Fragen werden die Schlüssel der Benutzer nicht in ihrer Wohnung aufbewahrt. Sie würden höchstwahrscheinlich /private/var
irgendwo gelagert werden. Also auch ohne dass /Users
jemand, der vorher Zugriff hatte, das System entsperren könnte.
*Es ist möglich, dass der Schlüsselbund anders funktioniert.
Alexwlchan
Alter Profi
Jay Thompson
Alter Profi