Wie wird der System-Schlüsselbund in OS X gesichert?

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.

  1. Wie sind die Schlüssel so aufgebaut, dass jeder Benutzer mit Administratorrechten den System-Schlüsselbund entsperren kann?

  2. Gibt es kryptografische Einschränkungen, die einschränken, was ein administrativer Benutzer mit Informationen im System-Schlüsselbund machen kann?

  3. 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.

Ich habe keine Antwort, aber eine Anekdote: Als Standardbenutzer ohne Administratorrechte konnte ich einmal relativ einfach Passwörter aus dem System-Schlüsselbund extrahieren. Ich erinnere mich nicht an die genauen Schritte, aber es war sicherlich möglich. Nebenbei bemerkt, könnte dies auf security.stackexchange.com besser sein ?
@Alex, ich habe Security.SE zuerst ausprobiert, aber dort keine Antworten erhalten.
Warum nicht einen separaten Schlüsselbund für das, was Sie tun, verwenden? Gibt es einen guten Grund, warum Ihr Skript Zugriff auf den Systemschlüsselbund benötigt?
@eyemyth, ja, die Skripte müssen vom System ausgeführt werden, damit sie unabhängig von den Benutzerberechtigungen auf alle Dateien auf der Festplatte zugreifen können.

Antworten (4)

Der System-Schlüsselbund wird darin gespeichert /Library/Keychains/System.keychainund 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 kcproxyDaemon 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.keychainund enthalten /var/db/SystemKeywü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.

Es gibt ein Dienstprogramm namens dumpkeychain von GuidanceSoftware/EnCase, das einen direkten Dump eines Systemschlüsselbunds (mit dem SystemKey) in Windows ermöglicht (möglicherweise einfacher als das Einrichten einer neuen OS X-Installation, um ihn zu sichern).
@Anon, wie kann ich die obigen Informationen verwenden, um auf einen System.keychain von einer Time Machine-Sicherung eines anderen Computers zuzugreifen/zu entsperren/auszugeben? Das heißt, ich habe System.keychain und SystemKey auf einer externen Festplatte gespeichert, also muss ich wohl die Pfade zu beiden Dateien angeben, um zu vermeiden, dass die Dateien am Standardspeicherort verwendet werden.
Dieser Beitrag ist verwandt (wie man SystemKey verwendet, um System.keychain von einem alten System zu entschlüsseln). apple.stackexchange.com/questions/307189/… Ich bin gespannt, ob es mit Keychain Access oder dem systemkeychain cli eine Möglichkeit gibt, einen wiederhergestellten System.keychain (dh von einer alten abgestürzten Festplatte) mit dem entsprechenden SystemKey aus derselben Installation zu entsperren. Mein Ziel ist es, Anmeldungen bei der Neuinstallation in den neuen Systemschlüsselbund zu entsperren und zu migrieren.

System-Schlüsselbund

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.

Codeüberprüfung: Schlüsselbund

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.

Alternativer Ansatz: Separater Schlüsselbund

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.

Danke, aber es ist viel zu schwierig für mich, aus all dem Code herauszufinden, wie der Systemschlüsselbund gesichert ist und was ihn sicher hält. Wir müssen den System-Schlüsselbund verwenden, da die Skripte automatisch im Hintergrund mit Root-Rechten ausgeführt werden müssen, unabhängig davon, wer angemeldet ist.
Ich empfehle, entweder über die Apple CDSA-Mailingliste ( lists.apple.com/mailman/listinfo/apple-cdsa ) nachzufragen oder einen Apple Technical Support Incident zu verwenden. Nur so können Sie sicherstellen, dass Sie die richtigen Apple-Ingenieure erreichen.
Skripte als root im Hintergrund laufen zu lassen, ist die Aufgabe von launchd. Was genau versuchst du zu tun?
Kleiner Tippfehler in "/System/Library/Keychains/System.keychain" (Du hast "Library" vergessen). Tatsächlich können Sie eine Liste der Schlüsselbundpositionen in der Schlüsselbundverwaltung abrufen, indem Sie „Bearbeiten > Schlüsselbundliste“ wählen.
@Benutzername Vielen Dank. Ich habe den Pfad zum Standard-System-Schlüsselbund korrigiert.
Einen separaten Schlüsselbund zu haben, hilft der Situation nicht, weil ich immer noch das System brauche, um ihn entsperren zu können, und ich nicht weiß, wie ich das sicher machen soll. Außerdem ist das Ausschließen von Daten aus dem Backup extrem fehleranfällig, da Backups auf mehreren Ebenen stattfinden, einschließlich Klonen auf Blockebene der gesamten Festplatte.
@OldPro Warum verwenden Sie angesichts Ihrer Sicherheitsbedenken nicht die vollständige Festplattenverschlüsselung?

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.

Dies ist auf dem richtigen Weg und ein gutes Beispiel für die Art von Dokumentation, die ich hilfreich finden würde, aber iOS verfügt nicht über das Konzept des Systemschlüsselbunds, sodass meine Frage nicht beantwortet wird.
Gerne nehme ich dein Kopfgeld an, wenn es dich in die richtige Richtung bringt ;-)

Ich habe keine besonderen Kenntnisse über Schlüsselbund*, aber dies ist eine ziemlich standardisierte Vorgehensweise.

  1. Sie möchten die reine Textdatei "foo" schützen. Foo kann beliebig groß sein.
  2. Erstellen Sie einen symmetrischen Schlüssel zum Verschlüsseln von foo.
  3. Verschlüsseln Sie den symmetrischen Schlüssel mit einem Schlüssel, der aus einer Passphrase stammt.

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/varirgendwo gelagert werden. Also auch ohne dass /Usersjemand, der vorher Zugriff hatte, das System entsperren könnte.


*Es ist möglich, dass der Schlüsselbund anders funktioniert.

Der Unterschied zum System-Schlüsselbund besteht darin, dass das System auf den Schlüsselbund zugreifen kann, unabhängig davon, wer angemeldet ist. Zum Beispiel kann Time Machine auf den System-Schlüsselbund zugreifen, um eine Remote-Dateifreigabe einzuhängen, selbst wenn der einzige angemeldete Benutzer kein ist Benutzer mit Administratorrechten und kann daher nicht auf den Systemschlüsselbund zugreifen. Es geht also noch etwas anderes vor, und ich würde gerne genau wissen, was das ist.
Auch hier kann ich nur vermuten, aber meiner Meinung nach ist es eigentlich nicht so anders. Das System selbst kann offensichtlich an den Schlüssel kommen, das ist selbstverständlich. Ich würde davon ausgehen, dass es einen Systemschlüssel gibt, der ähnlich wie Benutzerschlüssel behandelt wird. Aber jetzt sind wir beim Kern Ihrer Frage … was bietet den ersten Zugang?