Comment le trousseau système est-il sécurisé sous OS X?

22

Je recherche quelque chose comme ce livre blanc sur la sécurité pour iOS, sauf pour OS X ou mieux encore, une sorte de rapport d'audit de sécurité d'un expert indépendant. Après avoir lu la documentation comme le Guide de programmation des services de trousseau, je suis encore plus confus quant à ce qui est vulnérable à une attaque contradictoire sur une sauvegarde non chiffrée d'un système OS X.

La dernière fois que j'ai vérifié, le trousseau de connexion de l'utilisateur sous OS X était à peu près aussi sécurisé que le mot de passe. Je me souviens d'un problème qui a réduit le secret réel de la clé à quelque chose comme 111 bits (mémoire brumeuse, n'hésitez pas à me corriger) en raison d'un problème avec la façon dont le mot de passe est converti en clé, mais c'était il y a longtemps et j'espère que cela a été corrigé.

D'un autre côté, on m'a dit que le trousseau système est intrinsèquement moins sécurisé car tout administrateur peut y accéder et un intrus a de nombreuses options pour devenir administrateur en plus de deviner le mot de passe d'un seul utilisateur.

En particulier, je crains de stocker des mots de passe utilisés dans des scripts automatisés dans le trousseau système car les fichiers système sont sauvegardés et stockés hors site sans chiffrement supplémentaire. Les documents et autres données utilisateur sont cryptés avant d'être retirés du site, mais j'ai une suspicion persistante qu'il y a un chemin que je néglige qui récupère ces clés une fois que le trousseau système est compromis (en raison de nos procédures, pas nécessairement de défauts cryptographiques) . Je veux donc avoir une compréhension approfondie de la façon dont le trousseau système est simultanément sécurisé mais accessible à tout administrateur.

  1. Comment les clés sont-elles architecturées de sorte que tout utilisateur administratif puisse déverrouiller le trousseau système?

  2. Existe-t-il des restrictions cryptographiques qui limitent de quelque manière que ce soit un utilisateur administratif avec les informations contenues dans le trousseau système?

  3. Étant donné une sauvegarde système non chiffrée sans /Users , comment pourriez-vous accéder aux clés du trousseau système?

Je suis intéressé par OS X 10.5 Leopard et les versions ultérieures.

Old Pro
la source
Je n'ai pas de réponse, mais une anecdote: en tant qu'utilisateur standard sans privilèges d'administrateur, j'ai pu extraire des mots de passe du trousseau système avec une relative facilité. Je ne me souviens pas des étapes exactes, mais c'était certainement possible. En passant, cela pourrait-il être mieux sur security.stackexchange.com ?
alexwlchan
@Alex, j'ai d'abord essayé Security.SE, mais je n'ai obtenu aucune réponse.
Old Pro
1
Pourquoi ne pas utiliser un trousseau distinct pour ce que vous faites? Y a-t-il une bonne raison pour laquelle votre script a besoin d'accéder au trousseau système?
Jay Thompson
@eyemyth, oui, les scripts doivent être exécutés par le système pour pouvoir accéder à tous les fichiers sur le disque indépendamment des autorisations des utilisateurs.
Old Pro

Réponses:

11

Le trousseau système est stocké dans /Library/Keychains/System.keychainet la clé pour le déverrouiller est stockée /var/db/SystemKey(ses autorisations de fichier par défaut sont lisibles uniquement par root). L'emplacement de ces fichiers est référencé dans le script security-checksystem (à partir de la source security_systemkeychain ). Il est même possible de tester le verrouillage / déverrouillage automatique du trousseau système en utilisant

systemkeychain -vt

Le cadre de sécurité du trousseau permet aux programmes non privilégiés de faire des demandes d'informations à condition qu'elles soient dans l'ACL stockées dans l'entrée du trousseau. De toute évidence, si un utilisateur a racine sur un système, il peut accéder directement au fichier stockant le trousseau du système et à la clé pour le déverrouiller, donc il n'a pas à faire de demande via le cadre de sécurité et n'est pas redevable aux ACL stockées dans le trousseau lui-même.

(Je n'ai pas vraiment répondu aux questions originales alors essayons encore une fois)

Comment les clés sont-elles architecturées de sorte que tout utilisateur administratif puisse déverrouiller le trousseau système?

Le cadre du trousseau de clés libsecurity permet aux processus réguliers d'interagir avec le trousseau du système de manière authentifiée à l'aide du cadre de communication interprocessus XC d'Apple (IPC).

Le programme A envoie une demande d'accès aux informations du trousseau système à l'aide d'IPC. On vérifie que l'utilisateur demandeur se trouve déjà dans le groupe de roues et connaît également le mot de passe d'un utilisateur du groupe de roues. Une fois l'autorisation confirmée, le kcproxydémon privilégié peut être utilisé pour accéder au contenu /var/db/SystemKey, déverrouiller le trousseau système et renvoyer les informations demandées.

Existe-t-il des restrictions cryptographiques qui limitent de quelque manière que ce soit un utilisateur administratif avec les informations contenues dans le trousseau système?

Non - un utilisateur administratif est autorisé à accéder à / modifier quoi que ce soit dans le trousseau système. Même s'ils ne le pouvaient pas, ils pouvaient copier les fichiers sous-jacents sur une autre machine sur laquelle ils avaient un contrôle total et simplement les déverrouiller / y accéder.

Étant donné une sauvegarde système non chiffrée sans / Users, comment pourriez-vous accéder aux clés du trousseau système?

Si la sauvegarde contenait des copies de /Library/Keychains/System.keychain, /var/db/SystemKeyje les copierais à leurs emplacements respectifs sur un nouveau système OS X et les utiliserais systemkeychainpour déverrouiller le premier et vider la base de données du trousseau à l'aide security dump-keychain.

Anon
la source
1
Il existe un utilitaire appelé dumpkeychain de GuidanceSoftware / EnCase, qui permet un vidage direct d'un trousseau système (avec la SystemKey) dans Windows (peut être plus facile que de configurer une nouvelle installation OS X pour le vider).
drfrogsplat
1
@Anon, comment puis-je utiliser les informations ci-dessus pour accéder / déverrouiller / vider un System.keychain à partir d'une sauvegarde Time Machine d'un autre ordinateur? Autrement dit, j'ai le System.keychain et SystemKey stockés sur un disque externe, donc je suppose que je dois spécifier les chemins d'accès aux deux fichiers respectivement pour éviter qu'il utilise les fichiers à l'emplacement par défaut.
db
Ce message est lié (comment utiliser SystemKey pour décrypter System.keychain d'un ancien système). apple.stackexchange.com/questions/307189/… Je suis curieux de savoir s'il existe un moyen avec Keychain Access ou le systemkeychain cli de déverrouiller un System.keychain récupéré (c'est-à-dire à partir d'un ancien disque dur en panne) avec la SystemKey correspondante de cette même installation. Mon objectif étant de déverrouiller et de migrer les connexions dans le nouveau trousseau système sur la nouvelle installation.
mattpr
5

Porte-clés système

Le trousseau système possède des capacités uniques. Ceux-ci sont documentés par la page de manuel systemkeychain . Les mentions du mot de passe principal sont susceptibles d'être votre objectif. Le code source spécifique du trousseau système est petit et disponible.

Le trousseau système,, /System/Library/Keychains/System.keychainest un trousseau spécial pour Apple et les démons à utiliser. Vous devez généralement éviter de l'utiliser pour les scripts de niveau utilisateur.

Révision du code: porte-clés

Apple a publié le code source du trousseau et du cadre de sécurité pour Mac OS X 10.5; vous pouvez consulter ce code pour découvrir comment il fonctionne.

Approche alternative: trousseau séparé

Vous pouvez créer un trousseau distinct pour stocker les informations d'identification de votre script. Nous recommandons cette pratique à nos clients. Vous pouvez utiliser la sécurité de l' outil de ligne de commande pour accéder, extraire et gérer vos trousseaux sans recourir à une interface graphique.

Pensez à stocker les mots de passe de vos scripts automatisés dans un trousseau distinct - et excluez ce trousseau de votre sauvegarde hors site.

J'apprécie que retirer le trousseau de votre sauvegarde n'est pas idéal, mais cela répondrait à vos préoccupations. Lors de la restauration du Mac, vous devrez récupérer le trousseau à partir d'une source différente; peut être une source ou un canal latéral plus fiable.

Vous pouvez toujours stocker le mot de passe du trousseau distinct dans le trousseau système. Vous pouvez ensuite déverrouiller le trousseau séparé d'un script. Si la sauvegarde est attaquée, vous exposeriez uniquement le mot de passe au trousseau distinct et non au trousseau lui-même, car ce fichier ne fait pas partie de la sauvegarde hors site.

Graham Miln
la source
Merci, mais il est beaucoup trop difficile pour moi de comprendre à partir de tout ce code comment le trousseau système est sécurisé et ce qui le sécurise. Nous devons utiliser le trousseau système, car nous avons besoin que les scripts soient exécutés automatiquement en arrière-plan avec les privilèges root, peu importe qui est connecté.
Old Pro
1
Je recommande de poser la question sur la liste de diffusion Apple CDSA ( lists.apple.com/mailman/listinfo/apple-cdsa ) ou d'utiliser un incident de support technique Apple. Ce n'est que par ces moyens que vous pouvez vous assurer que vous atteindrez les ingénieurs Apple appropriés.
Graham Miln
Lancer des scripts en arrière-plan en tant que root est le travail de launchd. Qu'est-ce que vous essayez de faire exactement?
Jay Thompson
1
Faute de frappe mineure dans "/System/Library/Keychains/System.keychain" (Vous avez oublié "Library"). En fait, vous pouvez obtenir une liste des emplacements des trousseaux dans Accès au trousseau en choisissant "Modifier> Liste des trousseaux"
nom d'utilisateur
1
@OldPro Compte tenu de vos problèmes de sécurité, pourquoi ne pas utiliser le chiffrement intégral du disque?
Graham Miln
2

Apple a récemment publié un document décrivant ses pratiques de sécurité , vous y trouverez peut-être des réponses. Le document est spécifique à iOS mais de nombreuses fonctionnalités de sécurité ont beaucoup en commun avec OS X.

demianturner
la source
C'est sur la bonne voie, et un bon exemple du type de documentation que je trouverais utile, mais iOS n'a pas le concept du trousseau système, donc il ne répond pas à ma question.
Old Pro
Je suis heureux d'accepter votre prime si cela vous met dans la bonne direction ;-)
demianturner
0

Je n'ai pas de connaissance spécifique du trousseau * mais c'est une pratique assez standardisée.

  1. Vous voulez protéger le fichier texte "foo". Foo peut être de taille arbitraire.
  2. Créez une clé symétrique pour crypter foo.
  3. Chiffrez la clé symétrique avec une clé issue d'une phrase secrète.

Une fois cela fait, vous pouvez changer le "mot de passe" en entrant la phrase secrète actuelle, en déchiffrant la clé symétrique puis en la chiffrant avec la nouvelle phrase secrète. Cela évite de longs processus de décryptage / cryptage dans le cas où "foo" est très grand.

Alors, comment cela fonctionne-t-il pour plusieurs utilisateurs qui ont besoin d'accéder au texte en clair de foo? Assez facile vraiment, vous créez simplement une copie cryptée de la clé symétrique une fois pour chaque utilisateur. En d'autres termes, effectuez la troisième étape pour chaque utilisateur.

En pratique, tout cela est soustrait à la vue et l'utilisateur final n'a besoin que de son propre mot de passe.

Concernant la partie 3 de vos questions, les clés des utilisateurs ne sont pas stockées chez eux. Ils seraient très probablement stockés /private/varquelque part. Ainsi, même sans /Usersquelqu'un qui avait auparavant accès serait en mesure de déverrouiller le système.


* Il est possible que le trousseau fonctionne différemment.

bahamat
la source
Ce qui est différent au sujet du trousseau système, c'est que le système peut accéder à ce qui se trouve sur le trousseau indépendamment de qui est connecté. Par exemple, Time Machine peut accéder au trousseau système pour monter un partage de fichiers distant, même si le seul utilisateur connecté n'est pas un utilisateur administratif et ne peut donc pas accéder au trousseau système. Il se passe donc autre chose et j'aimerais savoir exactement ce que c'est.
Old Pro
Encore une fois, je ne peux que supposer, mais l'OMI n'est en fait pas si différent. Le système lui-même peut évidemment obtenir la clé, c'est acquis. Je suppose qu'il existe une clé système traitée de manière similaire aux clés utilisateur. Mais maintenant, nous sommes au cœur de votre question… qu'est-ce qui offre un premier accès?
bahamat