61
iCloud Keychain and iOS 7 Data Protection Andrey Belenko Sr. Security Engineer @ viaForensics Alexey Troshichev @hackappcom founder

Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Embed Size (px)

DESCRIPTION

Расскажу где и как iCloud Keychain хранит пароли, и какие потенциальные риски это несёт. Apple утверждает, что пароли надежно защищены, и даже её сотрудники не могут получить к ним доступ. Чтобы это подтвердить или опровергнуть, необходимо разобраться с внутренним устройством iCloud Keychain, чем мы и займемся.

Citation preview

Page 1: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

iCloud Keychain and

iOS 7 Data ProtectionAndrey Belenko

Sr. Security Engineer @ viaForensics !

Alexey Troshichev@hackappcom founder

Page 2: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

What is iCloud?

Page 3: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

What’s inside?

• Documents

• Photos

• Backups (SMS, application data, etc)

• Keychain

Page 4: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Hacker’s view

Page 5: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Bruteforce protection?

Page 6: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Bruteforce protection?

Page 7: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Bruteforce protection?

Page 8: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Find My iPhone

Page 9: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Brought to you by hackapp.com

!

github.com/hackappcom/ibrute

@hackappcom

Page 10: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

iCloud KeychainImage: Apple Inc.

Page 11: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Motivation

http://support.apple.com/kb/HT4865

Page 12: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Intercepting SSL

SSL Proxy (Burp, Charles, …)

Root CA cert Proxy settings

Page 13: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Authentication

GET /authenticateAppleID, Password

DsID, mmeAuthToken, fmipAuthToken

icloud.com

Page 14: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

/getAccountSettings

Page 15: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

/getAccountSettings

Page 16: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain
Page 17: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain
Page 18: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Setup Options

Page 19: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

The Big Picture

*.keyvalueservice.icloud.com

*.escrowproxy.icloud.com

Keychain items (encrypted) Keybag (encrypted)

Some Secret

Page 20: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Key-Value Store• Not new

• Used extensively by many apps e.g. to keep preferences in sync across devices

• iCloud Keychain utilises two stores:

• com.apple.security.cloudkeychainproxy3• Syncing between devices

• com.apple.sbd3 (securebackupd3)• Copy to restore if no other devices

Page 21: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Escrow Proxy• New; Designed to store precious secrets

• Need to know iCSC to recover escrowed data

• Need to receive SMS challenge

• Must successfully complete SRP auth

• User-Agent: com.apple.lakitu (iOS/OS X)

Image: mariowiki.com

Page 22: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Key-Value Store com.apple.security.cloudkeychainproxy3

S(usrPwd, D2_pub)

S(D2_priv, (D1_pub, D2_pub))

S(D1_priv, D1_pub)S(userPwd, D1_pub)

S(D1_priv, (D1_pub, D2_pub))S(userPwd, (D1_pub, D2_pub))

Page 23: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Key-Value Store com.apple.sbd3

Key Description

com.apple.securebackup.enabled Is Keychain data saved in KVS?

com.apple.securebackup.record Keychain records, encrypted

SecureBackupMetadata iCSC complexity, timestamp, country

BackupKeybag Keybag protecting Keychain records

BackupUsesEscrow Is keybag password escrowed?

BackupVersion Version, currently @“1”

BackupUUID UUID of the backup

Page 24: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

4-digit iCSC [Default]

Page 25: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

4-digit iCSC [Default]

Random PasswordBL7Z-EBTJ-UBKD-X7NM-4W6D-J2N4

Page 26: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

4-digit iCSC [Default]

Random PasswordBL7Z-EBTJ-UBKD-X7NM-4W6D-J2N4

Keychain PasswordsyMa9ohCJ

tzzcVhE7

sDVoCnb

Backup KeybagKey 1

Key 2

Key 3

AES-GCM 256 bit

Page 27: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

4-digit iCSC [Default]

Random PasswordBL7Z-EBTJ-UBKD-X7NM-4W6D-J2N4

Keychain PasswordsyMa9ohCJ

tzzcVhE7

sDVoCnb

Backup KeybagKey 1

Key 2

Key 3

AES-GCM 256 bit

AES-Wrap Keys RFC 3394

Page 28: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

4-digit iCSC [Default]

Random PasswordBL7Z-EBTJ-UBKD-X7NM-4W6D-J2N4

Keychain PasswordsyMa9ohCJ

tzzcVhE7

sDVoCnb

Backup KeybagKey 1

Key 2

Key 3

AES-GCM 256 bit

AES-Wrap Keys RFC 3394

*.keyvalueservice.icloud.com

Page 29: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

4-digit iCSC [Default]

Random PasswordBL7Z-EBTJ-UBKD-X7NM-4W6D-J2N4

iCloud Security Code1234 PBKDF2

SHA-256 x 10’000

Keychain PasswordsyMa9ohCJ

tzzcVhE7

sDVoCnb

Backup KeybagKey 1

Key 2

Key 3

AES-GCM 256 bit

AES-Wrap Keys RFC 3394

*.keyvalueservice.icloud.com

Page 30: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

4-digit iCSC [Default]

Random PasswordBL7Z-EBTJ-UBKD-X7NM-4W6D-J2N4

iCloud Security Code1234 PBKDF2

SHA-256 x 10’000

AES-CBC 256 bit

*.escrowproxy.icloud.com

Keychain PasswordsyMa9ohCJ

tzzcVhE7

sDVoCnb

Backup KeybagKey 1

Key 2

Key 3

AES-GCM 256 bit

AES-Wrap Keys RFC 3394

*.keyvalueservice.icloud.com

Page 31: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Secure Remote Password

• Zero-knowledge password proof scheme

• Combats sniffing/MITM

• One password guess per connection attempt

• Password verifier is not sufficient for impersonation

• Escrow Proxy uses SRP-6a

Page 32: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Key Negotiationa ← random, A ← g^a

b ← random, B ← kv + g^b

u ← H(A, B) u ← H(A, B)x ← H(SALT, Password)

S ← (B - kg^x) ^ (a + ux)K ← H(S)

S ← (Av^u) ^ bK ← H(S)

Key VerificationM ← H(H(N) ⊕ H(g), H(ID), SALT, A, B, K)

(Aborts if M is invalid)

ID, A

SALT, B

M

H(A, M, K)

Password verifier:!SALT ← randomx ← H(SALT,Password)v ← g^x

Agreed-upon parameters:!H – one-way hash functionN, g – group parametersk ← H(N, g)

Page 33: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Key Negotiationa ← random, A ← g^a

b ← random, B ← kv + g^b

u ← H(A, B) u ← H(A, B)x ← H(SALT, Password)

S ← (B - kg^x) ^ (a + ux)K ← H(S)

S ← (Av^u) ^ bK ← H(S)

Key VerificationM ← H(H(N) ⊕ H(g), H(ID), SALT, A, B, K)

(Aborts if M is invalid)

ID, A, SMS CODE

SALT, B

M, SMS CODE

H(A, M, K)

Password verifier:!SALT ← randomx ← H(SALT,Password)v ← g^x

Agreed-upon parameters:!H – SHA-256N, g – RFC 5054 w. 2048-bit groupk ← H(N, g)

Page 34: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Escrowed Data Recovery

*Dis

play

pur

pose

s on

ly

Page 35: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Escrowed Data Recovery/get_records

List of escrowed records

*Dis

play

pur

pose

s on

ly

Page 36: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Escrowed Data Recovery/get_records

List of escrowed records

/get_sms_targetsList of phone numbers*

*Dis

play

pur

pose

s on

ly

Page 37: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Escrowed Data Recovery/get_records

List of escrowed records

/get_sms_targetsList of phone numbers*

/generate_sms_challengeOK

*Dis

play

pur

pose

s on

ly

Page 38: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Escrowed Data Recovery/get_records

List of escrowed records

/get_sms_targetsList of phone numbers*

/generate_sms_challengeOK

/srp_init [DsID, A, SMS CODE][UUID, DsID, SALT, B]

*Dis

play

pur

pose

s on

ly

Page 39: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Escrowed Data Recovery/get_records

List of escrowed records

/get_sms_targetsList of phone numbers*

/generate_sms_challengeOK

/srp_init [DsID, A, SMS CODE][UUID, DsID, SALT, B]

/recover [UUID, DsID, M, SMS CODE][IV, AES-CBC(KSRP, Escrowed Record)]

*Dis

play

pur

pose

s on

ly

Page 40: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Escrow Proxy EndpointsEndpoint Description

get_club_cert [?] Obtain certificateenroll Submit escrow record

get_records List escrowed recordsget_sms_targets List SMS numbers for escrowed records

generate_sms_challenge Generate and send challenge codesrp_init First step of SRP protocolrecover Second step of SRP protocol

alter_sms_target Change SMS number

Page 41: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Escrow Record

Random PasswordBL7Z-EBTJ-UBKD-X7NM-4W6D-J2N4

iCloud Security Code1234 PBKDF2

SHA-256 x 10’000

AES-CBC 256 bit

*.escrowproxy.icloud.com

Keychain PasswordsyMa9ohCJ

tzzcVhE7

sDVoCnb

Backup KeybagKey 1

Key 2

Key 3

AES-Wrap Keys RFC 3394

AES-GCM 256 bit

*.keyvalueservice.icloud.com

Page 42: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Escrow Record

Random PasswordBL7Z-EBTJ-UBKD-X7NM-4W6D-J2N4

iCloud Security Code1234 PBKDF2

SHA-256 x 10’000

AES-CBC 256 bit

*.escrowproxy.icloud.com

Key ← PBKDF2-SHA256(iCSC, 10’000)

EscrowRecord ← AES-CBC(Key, RandomPassword)

Page 43: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Escrow RecordKey ← PBKDF2-SHA256(iCSC, 10’000)

EscrowRecord ← AES-CBC(Key, RandomPassword)

Page 44: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

• This is stored by Apple

Escrow RecordKey ← PBKDF2-SHA256(iCSC, 10’000)

EscrowRecord ← AES-CBC(Key, RandomPassword)

Page 45: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

• This is stored by Apple

• iCSC is 4 digits by default

Escrow RecordKey ← PBKDF2-SHA256(iCSC, 10’000)

EscrowRecord ← AES-CBC(Key, RandomPassword)

Page 46: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

• This is stored by Apple

• iCSC is 4 digits by default

Escrow RecordKey ← PBKDF2-SHA256(iCSC, 10’000)

EscrowRecord ← AES-CBC(Key, RandomPassword)

Page 47: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

• This is stored by Apple

• iCSC is 4 digits by default

Escrow RecordKey ← PBKDF2-SHA256(iCSC, 10’000)

EscrowRecord ← AES-CBC(Key, RandomPassword)

Can you spot the problem yet?

Page 48: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Escrow RecordKey ← PBKDF2-SHA256(iCSC, 10’000)

• Offline iCSC guessing is possible

• Almost instant recovery [for default settings]

• iCSC decrypts keybag password

• Keybag password unlocks keybag keys

• Keybag keys decrypt Keychain items

Page 49: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Apple, or other adversary with access to stored data, can near-

instantly decrypt “master” password and read synced iCloud

Keychain records !

(for default settings)

Page 50: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Setup Options

Page 51: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Complex iCSC

Keychain PasswordsyMa9ohCJ

tzzcVhE7

sDVoCnb

Random PasswordBL7Z-EBTJ-UBKD-X7NM-4W6D-J2N4

iCloud Security Codecorrect horse battery staple PBKDF2

SHA-256 x 10’000

AES-CBC 256 bit

Backup KeybagKey 1

Key 2

Key 3

*.escrowproxy.icloud.com

AES-Wrap Keys RFC 3394

AES-GCM 256 bit

*.keyvalueservice.icloud.com

Page 52: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Complex iCSC

• Mechanics are the same as with simple iCSC

• Offline password recovery attack is still possible, although pointless if password is complex enough

Page 53: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Setup Options

Page 54: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Random PasswordBL7Z-EBTJ-UBKD-X7NM-4W6D-J2N4

Keychain PasswordsyMa9ohCJ

tzzcVhE7

sDVoCnb

Backup KeybagKey 1

Key 2

Key 3

AES-Wrap Keys RFC 3394

AES-GCM 256 bit

*.keyvalueservice.icloud.com

iCloud Security Codecorrect horse battery staple PBKDF2

SHA-256 x 10’000

AES-CBC 256 bit

*.escrowproxy.icloud.com

Random iCSC

Page 55: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Random PasswordBL7Z-EBTJ-UBKD-X7NM-4W6D-J2N4

Keychain PasswordsyMa9ohCJ

tzzcVhE7

sDVoCnb

Backup KeybagKey 1

Key 2

Key 3

AES-Wrap Keys RFC 3394

AES-GCM 256 bit

*.keyvalueservice.icloud.com

iCloud Security Codecorrect horse battery staple PBKDF2

SHA-256 x 10’000

AES-CBC 256 bit

*.escrowproxy.icloud.com

Random iCSC

Page 56: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Random PasswordBL7Z-EBTJ-UBKD-X7NM-4W6D-J2N4

Keychain PasswordsyMa9ohCJ

tzzcVhE7

sDVoCnb

Backup KeybagKey 1

Key 2

Key 3

AES-Wrap Keys RFC 3394

AES-GCM 256 bit

*.keyvalueservice.icloud.com

Random iCSC

Page 57: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Random iCSC

• Escrow Proxy is not used

• Random iCSC (or derived key) stored on the device [haven’t verified]

Page 58: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Setup OptionsiCloud

Keychain

Keychain Sync

Keychain Backup

Master Password

EscrowNo iCloud Security Code

Random iCloud Security CodeComplex iCloud Security CodeSimple iCloud Security Code

Page 59: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Conclusions

Image: Apple Inc.

Page 60: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Conclusions

• Trust your vendor but verify his claims

• Never ever use simple iCloud Security Code

• Do not think that SMS Apple sends you is a 2FA

• Yet, iCK is reasonably well engineered although not without shortcomings

Page 61: Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iCloud Keychain

Thank You! Questions are welcome :-)

!

!@abelenko @hackappcom