2013-03-06 25 views
12

ho una domanda veloce:Come funziona la protezione dei dati iOS

Ho scaricato un'applicazione iOS che utilizza la classe NSFileProtectionComplete per proteggere un file SQLite che contiene informazioni sensibili.

In base alla documentazione di sicurezza iOS (http://images.apple.com/ipad/business/docs/iOS_Security_May12.pdf), quando un dispositivo (iPhone/iPad) è accoppiato con il portatile, il laptop ottiene la borsa per chiavi escrow dal dispositivo mobile. La keybag contiene tutte le chiavi di classe necessarie per decrittografare le informazioni sul dispositivo.

Tuttavia, ho notato che quando accedo il dispositivo al laptop e utilizzo di iExplorer per esplorare il file system, il file sqlite è disponibile solo quando il dispositivo è sbloccato. Quando il telefono è bloccato (ancora associato) il file non è leggibile. I file che non utilizzano NSFileProtectionComplete possono essere visualizzati mentre il dispositivo è bloccato.

Se la keybag di escrow contiene tutte le chiavi di classe per decrittografare le informazioni, perché devo sbloccare il dispositivo per accedervi tramite iExplorer?

Sto utilizzando iOS 6.0 su un iPad3 e ho utilizzato lo strumento ios-dataprotection (https://github.com/ciso/ios-dataprotection) per determinare la classe di protezione dei dati utilizzata dai file.

iOS Application: AccountVault
File: PointMinder.sqlite

Qualsiasi aiuto sarà apprezzato.

Grazie.

+1

dimenticato di menzionare che l'iPad è protetto da password. – Sec

+0

iExplorer sa dove trovare la keybag di escrow e la passphrase di backup? –

+0

iExplorer non può accedere al file system se il dispositivo non è accoppiato. L'unica cosa che cambia dopo l'associazione del dispositivo è che la keybag viene trasferita. Quindi immagino che usi la keybag di escrow come iTunes per decifrare e leggere le informazioni. – Sec

risposta

6

Da file di documentazione aver collegato:

Protezione completa (NSFileProtectionComplete): La chiave di classe è protetta con una chiave derivata dalla password utente e il dispositivo UID . Poco dopo l'utente blocca un dispositivo (10 secondi, se l'impostazione Richiedi password è Immediatamente), la chiave di classe decrittografata è scartata, rendendo tutti i dati in questa classe inaccessibili fino a quando l'utente immette nuovamente il codice di accesso.

Quindi il dispositivo deve essere sbloccato se si desidera accedere a tali file. È così che è stata fatta Apple.

Edit: Trovato in "Applicazioni hacking e Protezione iOS": le chiavi di classe

protezione sono maestri chiavi di crittografia utilizzate per sbloccare i file in base alla loro politica di accesso. Le classi di protezione sono il meccanismo di crittografia utilizzato per applicare le politiche di accesso dei file.

Alcuni file sono così importanti che il sistema operativo dovrebbe essere in grado di decrittografarli solo quando l'interfaccia utente del dispositivo è sbloccata. Le chiavi di crittografia di questi file sono avvolte con una chiave di classe che è disponibile solo dopo che l'utente ha inserito il suo passcode. Quando il dispositivo si blocca di nuovo, la chiave viene cancellata dalla memoria, rendendo di nuovo i file non disponibili.

Le chiavi di protezione della classe di protezione sono memorizzate in un deposito di garanzia noto come un portachiavi. La keybag contiene le chiavi master della classe di protezione codificate e altre chiavi dei file di sistema sul dispositivo.La keybag del sistema viene crittografata utilizzando un'altra chiave di crittografia denominata BAGI, che viene anche memorizzata nella memoria salvabile della NAND. Ogni volta che l'utente autentica per soddisfare una specifica politica di protezione della sicurezza, le chiavi crittografate nella keybag possono essere decodificate.

Quindi le chiavi per i file vengono trasferite, ma sono crittografate. Quando inserisci il tuo passcode, il sistema operativo decrittografa quella chiave e può quindi essere utilizzata per decodificare i file protetti con esso.

+0

Grazie per la risposta. Ho provato un altro test dopo il tuo commento: Dopo aver collegato il dispositivo con iTunes e aver sbloccato il dispositivo, ho aperto iExplorer. In questa fase, il file sqlite era accessibile, come era in origine. Dopo averlo eseguito, ho bloccato il dispositivo e ho aspettato ben più di 5 minuti e ho notato che il file sqlite era ancora accessibile. Questo esperimento non è andato come previsto. Dovrei sottolineare che il dispositivo è impostato per lo sblocco immediato e che il file sqlite sta utilizzando NSFileProtectionComplete. L'ho duplicato. – Sec

+1

In base al documento che ho rinviato a: " Quando un dispositivo con codice con passcode viene prima collegato a iTunes, all'utente viene richiesto di immettere un codice di accesso, che quindi crea una keybag Escrow e lo passa all'host. esattamente le stesse chiavi di classe utilizzate sul dispositivo. " Si afferma che tutte le chiavi di classe sono presenti nella keybag di deposito. Se ho già tutte le chiavi di classe, perché richiederebbe il passcode per sbloccare la chiave di classe? In altre parole, è necessaria la combinazione di UID e passcode per ottenere la chiave di classe, ma tutte le chiavi di classe esistono già nella keybag di escrow. – Sec

+2

Strano che dopo 5 minuti il ​​file fosse ancora accessibile. Forse era qualcosa di simile alla versione cache in iExplorer (non l'ho mai usato io stesso)? Inoltre: la chiave per-file è racchiusa da una delle diverse chiavi di classe, a seconda delle circostanze in cui il file deve essere accessibile. Il che probabilmente significa che non tutte le chiavi di classe sono decodificate sull'accoppiamento. –

0

Questo funziona per me solo per i database SQLite nella mia app, non per le altre mie risorse come speravo. MA, stavo avendo gli stessi problemi di poter accedere ai database dopo aver bloccato il dispositivo e aver atteso alcuni minuti con iExplore ancora aperto e il dispositivo ancora connesso. Se disconnetto l'iPad e mi collego di nuovo, iExplore è forzato ad aggiornare suppongo e quindi NON potrei accedere ai database. Quindi non sono sicuro se ha solo le vecchie informazioni del database "non crittografate" in memoria o cosa.

Problemi correlati