In che modo il portachiavi di sistema è protetto in OS X?


22

Sto cercando qualcosa come questo white paper sulla sicurezza per iOS tranne OS X o, meglio ancora, una sorta di rapporto di audit di sicurezza da un esperto indipendente. Dopo aver letto documentazione come la Guida alla programmazione dei servizi portachiavi, sono ancora più confuso su ciò che è vulnerabile a un attacco contraddittorio su un backup non crittografato di un sistema OS X.

L'ultima volta che ho controllato, il portachiavi di accesso dell'utente in OS X era sicuro quanto la password. Ricordo qualche problema che ha ridotto l'effettiva segretezza della chiave a qualcosa come 111 bit (memoria nebbiosa, non esitate a correggermi) a causa di un problema con il modo in cui la password viene convertita in chiave, ma molto tempo fa e speriamo che sia stato corretto.

D'altra parte, mi è stato detto che il portachiavi di sistema è intrinsecamente meno sicuro perché qualsiasi amministratore può accedervi e un intruso ha molte opzioni per diventare un amministratore oltre a indovinare la password di un singolo utente.

In particolare, sono preoccupato per l'archiviazione delle password utilizzate negli script automatizzati nel Portachiavi di sistema poiché i file di sistema vengono sottoposti a backup e archiviati fuori sede senza ulteriore crittografia. I documenti e altri dati dell'utente vengono crittografati prima di essere portati fuori sede, ma ho il sospetto fastidioso che ci sia un percorso che sto trascurando che recupera quelle chiavi una volta che il Portachiavi di sistema è stato compromesso (a causa delle nostre procedure, non necessariamente di eventuali difetti crittografici) . Quindi voglio avere una conoscenza approfondita di come il portachiavi di sistema è contemporaneamente protetto ma accessibile a qualsiasi amministratore.

  1. In che modo le chiavi sono progettate in modo tale che qualsiasi utente amministrativo possa sbloccare il portachiavi di sistema?

  2. Esistono restrizioni crittografiche che limitano in qualche modo ciò che un utente amministrativo può fare con le informazioni nel portachiavi di sistema?

  3. Dato un backup di sistema non crittografato senza /Users , come otterresti l'accesso alle chiavi nel portachiavi di sistema?

Sono interessato a OS X 10.5 Leopard e versioni successive.


Non ho una risposta, ma un aneddoto: come utente standard senza privilegi di amministratore, una volta sono stato in grado di estrarre le password dal portachiavi di sistema con relativa facilità. Non ricordo i passaggi esatti, ma era certamente possibile. A parte questo, potrebbe essere meglio su security.stackexchange.com ?
alexwlchan,

@Alex, ho provato prima Security.SE, ma non ho ricevuto risposte lì.
Old Pro,

1
Perché non usare del tutto un portachiavi separato per quello che stai facendo? C'è una buona ragione per cui il tuo script ha bisogno di accedere al portachiavi di sistema?
Jay Thompson,

@eyemyth, sì, gli script devono essere eseguiti dal sistema in modo che possano accedere a tutti i file sul disco indipendentemente dalle autorizzazioni dell'utente.
Old Pro

Risposte:


11

Il portachiavi di sistema è archiviato /Library/Keychains/System.keychaine la chiave per sbloccarlo è archiviata /var/db/SystemKey(le autorizzazioni per i file predefiniti sono leggibili solo da root). Il percorso di questi file viene indicato nello script security-checksystem (dall'origine security_systemkeychain ). È anche possibile testare il blocco / sblocco automatico del portachiavi di sistema utilizzando

systemkeychain -vt

Il framework di sicurezza del portachiavi consente ai programmi non privilegiati di effettuare richieste di informazioni a condizione che si trovino nella LCA archiviata all'interno della voce del portachiavi. Ovviamente se un utente ha il root su un sistema, può accedere direttamente sia al file che memorizza il portachiavi di sistema sia alla chiave per sbloccarlo, quindi non ha fatto richieste tramite il framework di sicurezza e non è legato agli ACL memorizzati nel portachiavi si.

(In realtà non ho risposto alle domande originali, quindi proviamoci un'altra volta)

In che modo le chiavi sono progettate in modo tale che qualsiasi utente amministrativo possa sbloccare il portachiavi di sistema?

Il framework portachiavi libsecurity consente ai processi regolari di interagire con il portachiavi di sistema in modo autenticato utilizzando il framework di comunicazione interprocesso (IPC) di Apple.

Il programma A invia una richiesta per accedere alle informazioni del portachiavi di sistema tramite IPC. Viene verificato che l'utente richiedente sia già nel gruppo ruote e sia a conoscenza della password di un utente nel gruppo ruote. Una volta confermata l'autorizzazione, il kcproxydemone privilegiato può essere utilizzato per accedere al materiale /var/db/SystemKey, sbloccare il portachiavi di sistema e restituire le informazioni richieste.

Esistono restrizioni crittografiche che limitano in qualche modo ciò che un utente amministrativo può fare con le informazioni nel portachiavi di sistema?

No: a un utente amministratore è consentito accedere / modificare qualsiasi cosa nel portachiavi di sistema. Anche se non potevano, potevano copiare i file sottostanti su un altro computer su cui hanno il controllo completo e semplicemente sbloccarli / accedervi lì.

Dato un backup di sistema non crittografato senza / Users, come otterresti l'accesso alle chiavi nel portachiavi di sistema?

Se il backup contenesse copie di /Library/Keychains/System.keychaine /var/db/SystemKeypoi le copierei nelle rispettive posizioni su un nuovo sistema OS X e lo utilizzerei systemkeychainper sbloccare in seguito il primo e scaricare il database dei portachiavi usando security dump-keychain.


1
C'è un'utilità chiamata dumpkeychain da GuidanceSoftware / EnCase, che consente il dump diretto di un portachiavi di sistema (con SystemKey) in Windows (potrebbe essere più semplice che impostare una nuova installazione di OS X per scaricarlo).
drfrogsplat,

1
@Anon, come posso usare le informazioni di cui sopra per accedere / sbloccare / scaricare un System.keychain da un backup di Time Machine di un altro computer? Cioè, ho System.keychain e SystemKey memorizzati su un disco esterno, quindi suppongo di dover specificare rispettivamente i percorsi di entrambi i file per evitare che utilizzi i file nella posizione predefinita.
db

Questo post è correlato (come utilizzare SystemKey per decrittografare System.keychain da un vecchio sistema). apple.stackexchange.com/questions/307189/… Sono curioso di sapere se esiste un modo con Keychain Access o il systemkeychain cli per sbloccare un System.keychain recuperato (cioè da un vecchio HDD bloccato) con il corrispondente SystemKey dalla stessa installazione. Il mio obiettivo è quello di sbloccare e migrare gli accessi nel nuovo portachiavi di sistema sulla nuova installazione.
Mattpr

5

Portachiavi di sistema

Il portachiavi di sistema ha alcune capacità uniche. Questi sono documentati dalla pagina del manuale di systemkeychain . Le menzioni della password principale sono probabilmente al centro dell'attenzione. Il codice sorgente specifico del portachiavi di sistema è piccolo e disponibile.

Il portachiavi di sistema /System/Library/Keychains/System.keychain, è un portachiavi speciale per Apple e demoni da utilizzare. Dovresti generalmente evitare di usarlo per gli script a livello di utente.

Revisione del codice: portachiavi

Apple ha pubblicato il codice sorgente per Keychain e framework di sicurezza per Mac OS X 10.5; puoi rivedere questo codice per scoprire come funziona.

Approccio alternativo: portachiavi separato

Puoi creare un portachiavi separato per memorizzare le credenziali del tuo script. Raccomandiamo questa pratica ai nostri clienti. Puoi utilizzare la sicurezza dello strumento da riga di comando per accedere, estrarre e gestire i tuoi portachiavi senza ricorrere a un'interfaccia grafica.

Prendi in considerazione la possibilità di archiviare le password per i tuoi script automatizzati in un portachiavi separato - ed escludi questo portachiavi dal tuo backup fuori sede.

Apprezzo che rimuovere il portachiavi dal tuo backup non sia l'ideale ma risponderebbe alle tue preoccupazioni. Al ripristino del Mac, dovrai recuperare il portachiavi da una fonte diversa; potrebbe essere una fonte più affidabile o un canale laterale.

Puoi sempre memorizzare la password del Portachiavi separata nel Portachiavi di sistema. È quindi possibile sbloccare il portachiavi separato da uno script. Se il backup viene attaccato, esporresti la password solo al Portachiavi separato e non al Portachiavi stesso poiché questo file non è con il backup fuori sede.


Grazie, ma è troppo difficile per me capire da tutto quel codice come è protetto il portachiavi di sistema e cosa lo protegge. Dobbiamo usare il portachiavi di sistema perché abbiamo bisogno che gli script vengano eseguiti automaticamente in background con i privilegi di root indipendentemente da chi ha effettuato l'accesso.
Old Pro

1
Consiglio di fare una domanda sulla mailing list del CDSA di Apple ( lists.apple.com/mailman/listinfo/apple-cdsa ) o di utilizzare un incidente di supporto tecnico Apple. Solo attraverso questi mezzi puoi assicurarti di raggiungere gli ingegneri Apple appropriati.
Graham Miln,

Avere script eseguiti in background come root è il lavoro di launchd. Cosa stai cercando di fare esattamente?
Jay Thompson,

1
Errore di battitura minore in "/System/Library/Keychains/System.keychain" (Hai dimenticato "Libreria"). In realtà, puoi ottenere un elenco delle posizioni dei portachiavi in ​​Accesso portachiavi selezionando "Modifica> Elenco portachiavi"
nome utente

1
@OldPro Dati i tuoi problemi di sicurezza, perché non utilizzare la crittografia del disco completo?
Graham Miln,

2

Apple ha recentemente pubblicato un documento che delinea le sue pratiche di sicurezza , potresti trovare alcune risposte lì. Il documento è specifico di iOS ma molte funzionalità di sicurezza hanno molto in comune con OS X.


Questo è sulla strada giusta, e un buon esempio del tipo di documentazione che troverei utile, ma iOS non ha il concetto del portachiavi di sistema, quindi non risponde alla mia domanda.
Old Pro

Sono felice di accettare la tua grazia se questo ti porta nella giusta direzione ;-)
demianturner

0

Non ho una conoscenza specifica di Keychain * ma questa è una pratica abbastanza standardizzata.

  1. Si desidera proteggere il file di testo semplice "pippo". Foo può avere dimensioni arbitrarie.
  2. Crea una chiave simmetrica per crittografare foo.
  3. Crittografa la chiave simmetrica con una chiave seminata da una passphrase.

Una volta fatto, puoi cambiare la "password" inserendo la passphrase corrente, decodificando la chiave simmetrica e quindi crittografandola con la nuova passphrase. Questo evita i lunghi processi di decodifica / crittografia nel caso in cui "pippo" sia molto grande.

Quindi, come funziona per più utenti che devono accedere al testo in chiaro di pippo? Abbastanza facile davvero, basta creare una copia crittografata della chiave simmetrica una volta per ogni utente. In altre parole, eseguire il passaggio tre per ciascun utente.

In pratica, tutto ciò viene sottratto alla vista e l'utente finale deve solo gestire la propria password.

Per quanto riguarda la parte 3 delle tue domande, le chiavi degli utenti non vengono archiviate nella loro casa. Molto probabilmente verrebbero conservati in /private/varqualche luogo. Quindi, anche senza /Usersqualcuno che in precedenza aveva accesso sarebbe in grado di sbloccare il sistema.


* È possibile che Keychain funzioni in modo diverso.


Ciò che differisce nel portachiavi di sistema è che il sistema può accedere a ciò che si trova sul portachiavi indipendentemente da chi ha effettuato l'accesso. Ad esempio, Time Machine può accedere al portachiavi di sistema per montare una condivisione file remota, anche se l'unico utente registrato non è un utente amministrativo e pertanto non può accedere al portachiavi di sistema. Quindi sta succedendo qualcos'altro e mi piacerebbe sapere esattamente di cosa si tratta.
Old Pro,

Ancora una volta, posso solo supporre, ma IMO non è in realtà così diverso. Ovviamente il sistema stesso può ottenere la chiave, questo è garantito. Suppongo che esista una chiave di sistema trattata in modo simile alle chiavi utente. Ma ora siamo al centro della tua domanda ... cosa fornisce il primo accesso?
bahamat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.