Sicherheit von Schlüsselbunddaten
Viele Apps müssen Passwörter und andere kurze, aber vertrauliche Datenfragmente (z. B. Schlüssel und Anmelde-Token) verarbeiten. Der Schlüsselbund stellt eine sichere Methode zum Speichern dieser Elemente zur Verfügung. Die verschiedenen Apple-Betriebssysteme verwenden unterschiedliche Mechanismen, um die Sicherheitsgarantien zu erzwingen, die den unterschiedlichen Sicherheitsklassen des Schlüsselbunds zugeordnet sind. In macOS (einschließlich Mac-Computer mit Apple Chips) wird Datensicherheit nicht direkt verwendet, um diese Sicherheitsgarantien zu erzwingen.
Übersicht
Schlüsselbundobjekte werden mithilfe zweier AES-256-GCM-Schlüssel verschlüsselt: eines Tabellenschlüssels (Metadaten) und eines pro Zeile erzeugten Schlüssels (SecretKey). Die Metadaten des Schlüsselbunds (alle Attribute außer kSecValue) werden zum schnellen Suchen mit dem Metadatenschlüssel verschlüsselt, um Suchen zu beschleunigen, während der geheime Wert (kSecValueData) mit dem geheimen Schlüssel (secretkey) verschlüsselt wird. Der Metadatenschlüssel wird von der Secure Enclave geschützt, aber im Anwendungsprozessor zwischengespeichert, um schnelle Anfragen an den Schlüsselbund zuzulassen. Der Geheimschlüssel erfordert immer einen Durchlauf durch die Secure Enclave.
Der Schlüsselbund ist als SQLite-Datenbank implementiert, die im Dateisystem gespeichert wird. Es gibt nur eine Datenbank, und der securityd
-Daemon legt fest, auf welche Schlüsselbundelemente ein Prozess oder eine App zugreifen kann. Zugriffe auf die APIs des Schlüsselbunds resultieren in Anfragen an den Daemon, der wiederum die Berechtigungen „keychain-access-groups“, „application-identifier“ und „application-group“ abfragt. Anstatt den Zugriff auf einen einzelnen Prozess einzuschränken, ermöglichen es Zugriffsgruppen, Schlüsselbundeinträge zwischen Apps zu teilen.
Schlüsselbundeinträge können nur zwischen Apps desselben Entwicklers gemeinsam genutzt werden. Für die gemeinsame Nutzung von Schlüsselbundeinträgen werden Apps anderer Anbieter angewiesen, Zugriffsgruppen mit einem Präfix verwenden, das ihnen durch das Apple-Entwicklerprogramm über Anwendungsgruppen zugewiesen wurde. Das Präfix als Erfordernis und die Einzigartigkeit der Anwendungsgruppe werden über die Codesignierung, die Bereitstellungsprofile und das Apple-Entwicklerprogramm sichergestellt.
Die Schlüsselbunddaten werden mit einer Klassenstruktur geschützt, die der Klassenstruktur ähnelt, die für die Datensicherheit bei Dateien zum Einsatz kommt. Diese Klassen weisen ähnliche Verhaltensweisen wie die Datensicherheitsklassen für Dateien auf, verwenden aber separate Schlüssel und Funktionen.
Verfügbarkeit | Sicherheit von Dateidaten | Sicherheit von Schlüsselbunddaten | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Wenn entsperrt | NSFileProtectionComplete | kSecAttrAccessibleWhenUnlocked | |||||||||
Wenn gesperrt | NSFileProtectionComplete UnlessOpen | ||||||||||
Nach erstem Entsperren | NSFileProtectionComplete UntilFirstUserAuthentication | kSecAttrAccessibleAfterFirstUnlock | |||||||||
Immer | NSFileProtectionNone | kSecAttrAccessibleAlways | |||||||||
Code aktiviert | kSecAttrAccessibleWhen PasscodeSetThisDeviceOnly |
Apps, die Dienste für die Hintergrundaktualisierung verwenden, können kSecAttrAccessibleAfterFirstUnlock für Schlüsselbundobjekte nutzen, auf die bei Hintergrundaktualisierungen zugegriffen werden muss.
Die Klasse kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly verhält sich ähnlich wie die Klasse kSecAttrAccessibleWhenUnlocked, ist aber nur verfügbar, wenn das Gerät mit einem Gerätecode konfiguriert wurde. Diese Klasse existiert nur im systemeigenen Keybag. Sie:
wird nicht mit dem iCloud-Schlüsselbund synchronisiert,
wird nicht gesichert,
wird nicht in Escrow-Keybags integriert.
Wenn der Gerätecode entfernt oder zurückgesetzt wird, werden diese Objekte unbrauchbar, da die Klassenschlüssel verworfen werden.
Andere Schlüsselbundklassen besitzen ein „Nur dieses Gerät“-Gegenstück, das immer mit der UID geschützt wird, wenn eine Kopie bei der Sicherung des Geräts erstellt wird. Dadurch wird es bei der Wiederherstellung auf einem anderen Gerät nutzlos. Apple hat Sicherheit und Benutzerfreundlichkeit sorgfältig abgewogen und Schlüsselbundklassen gewählt, die von der Art der zu sichernden Informationen und davon abhängen, zu welchem Zeitpunkt iOS und iPadOS darauf zugreifen müssen.
Sicherheit von Schlüsselbunddatenklassen
Die unten aufgeführten Sicherheitsklassen werden für Schlüsselbundobjekte erzwungen.
Objekt | Zugänglich |
---|---|
WLAN-Passwörter | Nach erstem Entsperren |
Mail-Accounts | Nach erstem Entsperren |
Microsoft Exchange ActiveSync-Accounts | Nach erstem Entsperren |
VPN-Passwörter | Nach erstem Entsperren |
LDAP, CalDAV, CardDAV | Nach erstem Entsperren |
Account-Token für soziale Netzwerke | Nach erstem Entsperren |
Schlüssel für Handoff-Ankündigungen | Nach erstem Entsperren |
iCloud-Token | Nach erstem Entsperren |
iMessage-Schlüssel | Nach erstem Entsperren |
Homeshare-Passwörter | Wenn entsperrt |
Safari-Passwörter | Wenn entsperrt |
Safari-Lesezeichen | Wenn entsperrt |
Finder-/iTunes-Backup | Wenn entsperrt, nicht-migrierend |
VPN-Zertifikate | Nach erstem Entsperren; nicht-migrierend |
Bluetooth®-Schlüssel | Immer, nicht-migrierend |
Apple Push-Benachrichtigungsdienst-Token (APNS) | Immer, nicht-migrierend |
iCloud-Zertifikate und privater Schlüssel | Immer, nicht-migrierend |
SIM-PIN | Immer, nicht-migrierend |
Token für „Wo ist?“ | Immer |
Voicemail | Immer |
In macOS sind alle Schlüsselbundobjekte, die von Konfigurationsprofilen installiert wurden, immer verfügbar. In iOS und iPadOS hängt die Verfügbarkeit von Schlüsselbundobjekten, die von einem Konfigurationsprofil installiert wurden, davon ab, um welche Art es sich beim jeweiligen Schlüsselbundobjekt handelt, wie auf es verwiesen wird und wann es installiert wurde. Schlüsselbundobjekte, die über ein Konfigurationsprofil installiert wurden, sind standardmäßig nach dem ersten Entsperren verfügbar und nicht-migrierend. In den folgenden Fällen ist ein über ein Konfigurationsprofil installiertes Schlüsselbundobjekt jedoch immer verfügbar:
Es wurde vor einem Upgrade auf iOS 15 oder iPadOS 15 (oder eine neuere Version) installiert
Es ist ein Zertifikat (und keine Identität)
Es ist eine Identität, auf die von
IdentityCertificateUUID
in einercom.apple.mdm
-Payload verweisen wird
Schlüsselbundzugriffssteuerung
Schlüsselbunde können Zugriffssteuerungslisten (ACLs) verwenden, um Richtlinien für Zugriffs- und Authentifizierungsanforderungen festzulegen. Objekte können mittels Bedingungen die Anwesenheit des Benutzers für den Zugriff auf sie zur Voraussetzung machen, indem sie festlegen, dass der Zugriff nur möglich ist, wenn sich der Benutzer per Face ID, Touch ID oder durch die Eingabe des Gerätecodes oder -passworts authentifiziert. Der Zugriff auf Objekte kann auch eingeschränkt werden, indem festgelegt wird, dass die Face ID- oder Touch ID-Registrierung seit dem Hinzufügen des Objekts nicht geändert wurde. Mit dieser Einschränkung lässt sich verhindern, dass ein Angreifer seinen eigenen Fingerabdruck hinzufügt, um so auf ein Objekt im Schlüsselbund zuzugreifen. ACLs werden in der Secure Enclave evaluiert und nur dann an den Kernel weitergegeben, wenn die angegebenen Einschränkungen erfüllt sind.
Schlüsselbundarchitektur in macOS
macOS bietet außerdem Zugriff auf den Schlüsselbund, in dem Benutzernamen und die zugehörigen Passwörter sowie digitale Identitäten, Verschlüsselungsschlüssel und geschützte Notizen sicher und bequem gespeichert werden können. Der Zugriff auf den Schlüsselbund erfolgt durch das Öffnen der App „Schlüsselbundzugriff“ im Pfad /Applications/Utilities/. Mit dem Schlüsselbund entfällt für Benutzer die Notwendigkeit, die Anmeldeinformationen für jede Ressource eingeben – oder sie sich überhaupt merken – zu müssen. Für jeden Mac-Benutzer wird ein anfänglicher Standardschlüsselbund erstellt. Benutzer haben aber die Möglichkeit, für spezifische Zwecke andere Schlüsselbunde zu erstellen.
Ergänzend zu den benutzerspezifischen Schlüsselbunden nutzt macOS weitere, auf Systemebene angelegte Schlüsselbunde, um Authentifizierungswerte zu speichern, die nicht benutzerspezifisch sind. Dazu gehören zum Beispiel Anmeldeinformationen für Netzwerke und PKI-Identitäten (Public Key Infrastructure). Einer dieser Schlüsselbunde – System Roots – ist unveränderlich. Darin werden für die Internet-PKI genutzte Root-Zertifikate von Zertifizierungsstellen (CA) gespeichert, die die Grundlage für gängige Tätigkeiten wie Online-Banking und E-Commerce bilden. Auf verwalteten Mac-Computern können Benutzer in ganz ähnlicher Weise von einer internen Zertifizierungsstelle bereitgestellte Zertifikate implementieren, um interne Sites und Dienste zu validieren.