Wie ist der Systemschlüsselbund in OS X gesichert?

22

Ich suche nach etwas wie diesem Sicherheits-Whitepaper für iOS mit Ausnahme von OS X oder noch besser nach einer Art Sicherheitsüberprüfungsbericht von einem unabhängigen Experten. Nach dem Lesen von Dokumentationen wie dem Keychain Services Programming Guide bin ich noch verwirrter darüber, was für ein Angriff auf ein unverschlüsseltes Backup eines OS X-Systems anfällig ist.

Bei der letzten Überprüfung war der Anmeldeschlüsselbund des Benutzers unter OS X ungefähr so ​​sicher wie das Kennwort. Ich erinnere mich an ein Problem, bei dem die tatsächliche Geheimhaltung des Schlüssels auf 111 Bit (nebliges Gedächtnis, bitte zögern Sie nicht, mich zu korrigieren) geschrumpft ist, weil das Kennwort in einen Schlüssel konvertiert wurde, aber das ist schon lange her und hoffentlich wurde das behoben.

Auf der anderen Seite, ich habe das gesagt, System - Schlüsselanhänger ist von Natur aus weniger sicher , da jeder Administrator darauf zugreifen kann und ein Eindringling viele Optionen für immer ein Administrator hat neben einem einzelnen Benutzer-Passwort zu erraten.

Insbesondere mache ich mir Sorgen um das Speichern von Kennwörtern, die in automatisierten Skripten verwendet werden, im Systemschlüsselbund, da die Systemdateien ohne weitere Verschlüsselung außerhalb des Standorts gesichert und gespeichert werden. Dokumente und andere Benutzerdaten werden verschlüsselt, bevor sie vom Standort entfernt werden. Ich habe jedoch den Verdacht, dass ein von mir übersehener Pfad diese Schlüssel wiederherstellt, sobald der Systemschlüsselbund kompromittiert ist (aufgrund unserer Verfahren, die nicht unbedingt kryptografische Mängel aufweisen). . Daher möchte ich ein umfassendes Verständnis dafür haben, wie der Systemschlüsselbund gleichzeitig gesichert und dennoch für jeden Administrator zugänglich ist.

  1. Wie sind die Schlüssel so aufgebaut, dass jeder Administrator den Systemschlüsselbund entsperren kann?

  2. Gibt es kryptografische Einschränkungen, die in irgendeiner Weise die Möglichkeiten eines Administrators einschränken, mit Informationen im Systemschlüsselbund umzugehen?

  3. Wie würden Sie bei einer unverschlüsselten Systemsicherung ohne /Users Zugriff auf die Schlüssel im Systemschlüsselbund zugreifen?

Ich interessiere mich für OS X 10.5 Leopard und spätere Versionen.

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

Antworten:

11

Der Systemschlüsselbund ist in /Library/Keychains/System.keychainund der Schlüssel zum Entsperren in gespeichert /var/db/SystemKey(seine Standarddateiberechtigungen können nur von root gelesen werden). Der Speicherort dieser Dateien wird im Skript security-checksystem (aus der Quelle security_systemkeychain ) angegeben. Es ist sogar möglich, das automatische Sperren / Entsperren des Systemschlüsselbunds mit zu testen

systemkeychain -vt

Das Schlüsselbund-Sicherheitsframework ermöglicht es nicht privilegierten Programmen, Informationen anzufordern, sofern diese in der im Schlüsselbundeintrag gespeicherten ACL enthalten sind. Wenn ein Benutzer Root auf einem System hat, kann er direkt auf die Datei zugreifen, in der der Systemschlüsselbund gespeichert ist, und auf den Schlüssel, um ihn zu entsperren. Daher müssen er keine Anforderungen über das Sicherheitsframework stellen und sind nicht den im Schlüsselbund gespeicherten ACLs verpflichtet selbst.

(Ich habe die ursprünglichen Fragen nicht beantwortet. Lassen Sie uns dies noch einmal versuchen.)

Wie sind die Schlüssel so aufgebaut, dass jeder Administrator den Systemschlüsselbund entsperren kann?

Das libsecurity-Schlüsselbund-Framework ermöglicht regulären Prozessen die authentifizierte Interaktion mit dem Systemschlüsselbund mithilfe von Apples XPC Interprocess Communication Framework (IPC).

Programm A sendet eine Anfrage, um über IPC auf die Systemschlüsselbundinformationen zuzugreifen. Es wird geprüft, ob sich der anfragende Benutzer bereits in der Radgruppe befindet und auch das Passwort eines Benutzers in der Radgruppe kennt. Sobald die Autorisierung bestätigt wurde, kann der privilegierte kcproxyDaemon verwendet werden, um auf Material zuzugreifen /var/db/SystemKey, den Systemschlüsselbund zu entsperren und die angeforderten Informationen zurückzugeben.

Gibt es kryptografische Einschränkungen, die in irgendeiner Weise die Möglichkeiten eines Administrators einschränken, mit Informationen im Systemschlüsselbund umzugehen?

Nein - Ein Administrator kann auf alle Elemente im Systemschlüsselbund zugreifen bzw. diese ändern. Selbst wenn sie dies nicht könnten, 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 / darauf zugreifen.

Wie würden Sie bei einer unverschlüsselten Systemsicherung ohne / Users Zugriff auf die Schlüssel im Systemschlüsselbund erhalten?

Wenn das Backup Kopien von /Library/Keychains/System.keychainund /var/db/SystemKeydann enthalten würde, würde ich sie an ihre jeweiligen Speicherorte auf einem neuen OS X-System kopieren und verwenden systemkeychain, um das frühere zu entsperren und die Schlüsselbunddatenbank mit zu sichern security dump-keychain.

Anon
quelle
1
Es gibt ein Hilfsprogramm namens dumpkeychain von GuidanceSoftware / EnCase, mit dem ein direkter Speicherauszug eines Systemschlüsselbunds (mit dem SystemKey) in Windows möglich ist (dies ist möglicherweise einfacher als das Einrichten einer neuen OS X-Installation, um einen Speicherauszug zu erstellen).
Drfrogsplat
1
@Anon, wie kann ich mithilfe der oben genannten Informationen von einer Time Machine-Sicherung eines anderen Computers auf eine System.keychain zugreifen / diese entsperren / sichern? Das heißt, ich habe die Datei "System.keychain" und "SystemKey" auf einem externen Datenträger gespeichert. Ich denke, ich muss die Pfade zu beiden Dateien angeben, um zu vermeiden, dass die Dateien am Standardspeicherort verwendet werden.
db
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 der systemkeychain cli eine Möglichkeit gibt, eine wiederhergestellte System.keychain (dh von einer alten abgestürzten Festplatte) mit dem entsprechenden SystemKey aus derselben Installation zu entsperren. Mein Ziel ist es, Anmeldungen für die neue Installation zu entsperren und in den neuen Systemschlüsselbund zu migrieren.
Mattpr
5

System-Schlüsselbund

Der Systemschlüsselbund verfügt über einige einzigartige Funktionen. Diese werden auf der Manualpage zum Systemkeychain dokumentiert . Die Erwähnungen des Master-Passworts sind wahrscheinlich Ihr Fokus. Der systemschlüsselbundspezifische Quellcode ist klein und verfügbar.

Der System-Schlüsselbund /System/Library/Keychains/System.keychainist ein spezieller Schlüsselbund, den Apple und Daemons verwenden können. Sie sollten es generell nicht für Skripte auf Benutzerebene verwenden.

Code Review: Schlüsselbund

Apple hat den Quellcode für das Schlüsselbund- und 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. Mit der Sicherheit des Befehlszeilentools können Sie auf Ihre Schlüssel zugreifen, diese extrahieren und verwalten, ohne auf eine grafische Oberfläche zurückgreifen zu müssen.

Speichern Sie die Kennwörter für Ihre automatisierten Skripts in einem separaten Schlüsselbund - und schließen Sie diesen Schlüsselbund von Ihrer Offsite-Sicherung aus.

Ich weiß es zu schätzen, dass das Entfernen des Schlüsselbunds von Ihrem Backup nicht ideal ist, aber es würde Ihre Bedenken ansprechen. Wenn Sie den Mac wiederherstellen, müssen Sie den Schlüsselbund von einer anderen Quelle zurückholen. ist möglicherweise eine vertrauenswürdigere Quelle oder ein vertrauenswürdigerer Seitenkanal.

Sie können das Kennwort des separaten Schlüsselbunds immer im Systemschlüsselbund speichern. Sie können dann den separaten Schlüsselbund aus einem Skript entsperren. Wenn die Sicherung angegriffen wird, legen Sie das Kennwort nur für den separaten Schlüsselbund und nicht für den Schlüsselbund selbst offen, da diese Datei nicht für die Sicherung außerhalb des Standorts vorgesehen ist.

Graham Miln
quelle
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 Systemschlüsselbund verwenden, da die Skripte automatisch im Hintergrund mit Root-Rechten ausgeführt werden müssen, unabhängig davon, wer angemeldet ist.
Old Pro
1
Ich empfehle, entweder in der Apple CDSA-Mailingliste ( lists.apple.com/mailman/listinfo/apple-cdsa ) nachzufragen oder einen Vorfall des technischen Supports von Apple zu verwenden. Nur so können Sie sicherstellen, dass Sie die entsprechenden Apple-Ingenieure erreichen.
Graham Miln
Skripte als root im Hintergrund laufen zu lassen, ist Aufgabe von launchd. Was genau versuchst du zu tun?
Jay Thompson
1
Kleinere Tippfehler in "/System/Library/Keychains/System.keychain" (Sie haben "Library" vergessen). Tatsächlich können Sie eine Liste der Schlüsselbundspeicherorte in Keychain Access abrufen, indem Sie "Bearbeiten> Schlüsselbundliste"
Benutzername
1
@OldPro Verwenden Sie aus Sicherheitsgründen die vollständige Festplattenverschlüsselung.
Graham Miln
2

Apple hat kürzlich ein Dokument veröffentlicht, in dem die Sicherheitsmaßnahmen beschrieben werden . Möglicherweise finden Sie dort einige Antworten. Das Dokument ist iOS-spezifisch, aber viele Sicherheitsfunktionen haben viel mit OS X gemeinsam.

demianturner
quelle
Dies ist auf dem richtigen Weg und ein gutes Beispiel für die Art von Dokumentation, die ich hilfreich finden würde, aber iOS hat nicht das Konzept des System-Schlüsselbunds, sodass es meine Frage nicht beantwortet.
Old Pro
Freue
0

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

  1. Sie möchten die Klartextdatei "foo" schützen. Foo kann von beliebiger Größe 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.

Danach können Sie das "Passwort" ändern, indem Sie die aktuelle Passphrase eingeben, den symmetrischen Schlüssel entschlüsseln und anschließend 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 für mehrere Benutzer, die auf den Klartext von foo zugreifen müssen? Ganz einfach, Sie erstellen einfach eine verschlüsselte Kopie des symmetrischen Schlüssels für jeden Benutzer. Mit anderen Worten, machen Sie Schritt drei für jeden Benutzer.

In der Praxis ist dies alles nicht sichtbar und der Endbenutzer muss nur mit seinem eigenen Passwort umgehen.

In Bezug auf Teil 3 Ihrer Fragen werden die Schlüssel der Benutzer nicht in ihrem Haus gespeichert. Sie würden höchstwahrscheinlich /private/varirgendwo aufbewahrt. So wäre auch ohne /Usersjemanden, der zuvor Zugriff hatte, die Möglichkeit gegeben, das System freizuschalten.


* Möglicherweise funktioniert der Schlüsselbund anders.

Bahamat
quelle
Das Besondere am Systemschlüsselbund ist, dass das System unabhängig von der Anmeldung auf die Schlüsselbunde zugreifen kann. Time Machine kann beispielsweise auf den Systemschlüsselbund zugreifen, um eine Remote-Dateifreigabe bereitzustellen, auch wenn der einzige angemeldete Benutzer kein Benutzer ist Administrator und kann daher nicht auf den Systemschlüsselbund zugreifen. Also ist noch etwas los und ich würde gerne genau wissen, was das ist.
Old Pro
Auch hier kann ich nur vermuten, aber IMO ist es eigentlich nicht so anders. Das System selbst kann natürlich an den Schlüssel gelangen, das ist selbstverständlich. Ich würde annehmen, 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?
Bahamat