Top Banner
iOS Apps security Dušan Klinec , Faculty of Informatics, Masaryk University
97

iOS secure app development

Apr 14, 2017

Download

Software

Dusan Klinec
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: iOS secure app development

iOS Apps security

Dušan Klinec, Faculty of Informatics, Masaryk University

Page 2: iOS secure app development

About me

• Security enthusiast

• Mgr. in IT security, FI MU

• Senior Software Engineer & Consultant

@ EnigmaBridge.com

• Co-author of the PhoneX app.

2 I

Page 3: iOS secure app development

Outline

• File System security

– Encryption

– Secure data storage

• IPC

• Certificate Pinning

3 I

Page 4: iOS secure app development

Sandboxing recap.

4 I

Page 5: iOS secure app development

Sandboxing

• MAC, Historically Seatbelt

• Based on FreeBSD’s TrustedBSD framework

• Sandboxing profile what app can/cannot

– Files, OS services, network, memory

• Unlike Android’s UID-based segregation, apps run

as one user, “mobile”

• Application contained in own directory

5 I

Page 6: iOS secure app development

Anatomy of the AppDir

6 I

● /Documents – Persistent store for application data; this data will be synced and

backed up to iTunes. Can be shared via iTunes.

● /Library/Application Support – Additional app files (config files, purchased content)

● /Library/Caches – Caches, not in backup

● /Library/Caches/Snapshots – Application screenshots taken when the app is

backgrounded

● /Library/Cookies – Cookie plists

● /Library/Preferences – Preference plists, NSUserDefaults.

● /Library/WebKit – Webkit local storage

● /xxxxxx.app – App resources (binary, graphics, nibs, Info.plist, localisation resources

etc.)

● /tmp – temporary, can be erased between app starts

Page 7: iOS secure app development

Data Encryption

7 I

Page 8: iOS secure app development

Secure Enclave

• Cryptographic co-processor (not Secure Element)

– Apple 7+ processor (ARMv8, 64b, ARM + Apple design)

– iPhone 5S+ (Required for Touch ID)

• Implemented via TrustZone in Processor.

• Separate trusted boot, separate software updates

– Jailbreak does not compromise Secure Enclave

8 I

Page 9: iOS secure app development

Secure Enclave

9 I

Normal World Secure World

Normal WorldUser Mode

Normal WorldUser Mode

Normal WorldUser Mode

Normal WorldUser Mode

Monitor

Page 10: iOS secure app development

Secure Enclave

10 I

Oscillator based random number generator

AES-256 Engine

UID

AES-256 Engine

GID

Page 11: iOS secure app development

Secure Enclave

11 I

Oscillator based random number generator

AES-256 Engine

UID

AES-256 Engine

GID Memory Key

Page 12: iOS secure app development

Secure Enclave

12 I

http://arstechnica.com/apple/2014/09/chipworks-digs-up-more-information-on-apples-new-a8-chip/https://www.guru3d.com/articles-pages/core-i5-750-core-i7-860-870-processor-review-test,6.htmlhttp://www.wired.com/2015/10/x-ray-scans-expose-an-ingenious-chip-and-pin-card-hack/

Page 13: iOS secure app development

FileSystem encryption

• All files are encrypted

– w/ or w/o passcode set

– easy data wipe

• Data need to be decrypted on the device (SEnc)

– no Flash chip desoldering.

– no parallelization with cloud, FPGAs, ASICs, ...

– hard passcode bruteforcing, 80ms derivation delay

– 5 second delay on wrong passcode entry by SEnc

13 I

Page 14: iOS secure app development

NSFileProtectionComplete

14 I

File contents

AES-256 EncryptAES-256 Wrap

File key

Page 15: iOS secure app development

NSFileProtectionComplete

15 I

File contents

AES-256 EncryptAES-256 Wrap

File keyProtection class key

Page 16: iOS secure app development

NSFileProtectionComplete

16 I

File contents

AES-256 EncryptAES-256 Wrap

File keyProtection class key

UID

Passcodekey

Page 17: iOS secure app development

NSFileProtectionComplete

17 I

File contents

AES-256 EncryptAES-256 Wrap

File metadata

File keyProtection class key

UID

Passcodekey

Page 18: iOS secure app development

NSFileProtectionComplete

18 I

File contents

AES-256 EncryptAES-256 Wrap

File metadata

File System key

File keyProtection class key

UID

Passcodekey

Page 19: iOS secure app development

NSFileProtectionComplete

19 I

File contents

AES-256 EncryptAES-256 Wrap

File metadata

File System key

File keyProtection class key

UID

Passcodekey

Page 20: iOS secure app development

NSFileProtectionCompleteUntilFirstUserAuthentication

20 I

File contents

AES-256 EncryptAES-256 Wrap

File metadata

File System key

File keyProtection class key

UID

Passcodekey

Page 21: iOS secure app development

21 I

File contents

AES-256 EncryptAES-256 Wrap

File metadata

File System key

File keyProtection class key

UID

NSFileProtectionNone

Page 22: iOS secure app development

NSFileProtectionCompleteUnlessOpen

22 I

File contents

AES-256 EncryptAES-256 Wrap

File metadata

File key

fPubK, fPrvK

fPubK

fprvK

File Create File System

key

Page 23: iOS secure app development

NSFileProtectionCompleteUnlessOpen

23 I

File contents

AES-256 EncryptAES-256 Wrap

File metadata

File key

class ECC public key

fPubK, fPrvK

fPubK

fprvK

File Create UID

File System key

Page 24: iOS secure app development

NSFileProtectionCompleteUnlessOpen

24 I

File contents

AES-256 EncryptAES-256 Wrap

File metadata

File key

class ECC public key

fPubK, fPrvK

fPubK

fprvK

File Create

ECC key agreement

UIDFile System

key

Page 25: iOS secure app development

NSFileProtectionCompleteUnlessOpen

25 I

File contents

AES-256 EncryptAES-256 Wrap

File metadata

File key

fPubK

File Create File System

key

Page 26: iOS secure app development

NSFileProtectionCompleteUnlessOpen

26 I

File contents

AES-256 EncryptAES-256 Wrap

File metadata

File key

fPubK

File Open File System

key

Page 27: iOS secure app development

NSFileProtectionCompleteUnlessOpen

27 I

File contents

AES-256 EncryptAES-256 Wrap

File metadata

File key

class ECC private key

fPubK

File Open UID

File System key

Passcodekey

Page 28: iOS secure app development

NSFileProtectionCompleteUnlessOpen

28 I

File contents

AES-256 EncryptAES-256 Wrap

File metadata

File key

class ECC private key

fPubK

File Open

ECC key agreement

UIDFile System

key

Passcodekey

Page 29: iOS secure app development

Data protection classes

• NSFileProtectionComplete

– e.g., password manager data container

• NSFileProtectionCompleteUntilFirstUserAuthentication

– e.g., contacts database, notes, messages, photos,...

• NSFileProtectionCompleteUnlessOpen

– e.g., background downloads, healthKit journal

• NSFileProtectionNone

– device without passcode, do not use.

29 I

Page 30: iOS secure app development

Protected data availability

• App Delegates

– applicationProtectedDataWillBecomeUnavailable:

– applicationProtectedDataDidBecomeAvailable:

• NSNotificationCenter

– UIApplicationProtectedDataWillBecomeUnavailable

– UIApplicationProtectedDataDidBecomeAvailable

• On demand check

– [[UIApplication sharedApplication] protectedDataAvailable]

30 I

Page 31: iOS secure app development

KeyChain

31 I

https://materialdesignicons.com/

Page 32: iOS secure app development

KeyChain

• Place to store small sensitive data

– usernames, passwords, tokens, certificates,

– private keys, symmetric keys

• /var/Keychains/keychain-2.db

• All entries encrypted with entry-key

– Protection classes. Potential Passcode dependency

– *ThisDeviceOnly

32 I

Page 33: iOS secure app development

KeyChain Usage

• Original API ugly/complicated (C-style, ARC bridging)

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

NSData *passwordData = [@"mypassword" dataUsingEncoding:NSUTF8StringEncoding];

dict[(__bridge id) kSecClass] = (__bridge id) kSecClassGenericPassword;

dict[(__bridge id) kSecAttrLabel] = @"Conglomco login";

dict[(__bridge id) kSecAttrDescription] = @"This is your password for the x service.";

dict[(__bridge id) kSecAttrAccount] = @"dthiel";

dict[(__bridge id) kSecAttrService] = @"com.isecpartners.SampleKeychain";

dict[(__bridge id) kSecValueData] = passwordData;

dict[(__bridge id) kSecAttrAccessible] = (__bridge id) kSecAttrAccessibleWhenUnlocked;

OSStatus error = SecItemAdd((__bridge CFDictionaryRef)dict, NULL);

if (error == errSecSuccess) { NSLog(@"Yay"); }

33 I

Page 34: iOS secure app development

KeyChain Usage

• Wrappers

– github.com/carlbrown/PDKeychainBindingsController

– github.com/granoff/Lockbox

• NSUserDefaults-like API

Get:PDKeychainBindings *bindings = [PDKeychainBindings sharedKeychainBindings];[[[Model sharedModel] currentUser] setAuthToken:[bindings objectForKey:@"authToken"]];

Set:PDKeychainBindings *bindings = [PDKeychainBindings sharedKeychainBindings];[bindings setObject:@"XYZ" forKey:@"authToken"];

34 I

Page 35: iOS secure app development

KeyChain & Secure Enclave

• iOS 9.0+

• SecKeyGeneratePair()

– Elliptic Curve P256 KeyPair

– attribute kSecAttrTokenIDSecureEnclave

• Public key returned

• Private key stored in Keychain, protected by SEnc ACLs

• Can perform SIGN operation,

• Private key cannot be extracted35 I

Page 36: iOS secure app development

KeyChain & Backup

• Unencrypted backup

– Keychain items not re-encrypted

– Recoverable only on the source device

– Backup contains other files in plaintext

• Encrypted backup

– Keychain items re-encrypted (except *ThisDeviceOnly)

– Recoverable on different devices

– All files encrypted as well, protected backup36 I

Page 37: iOS secure app development

KeyChain & Jailbreak

• After Jailbreak, all KeyChain entries are readable

– Keychain Viewer by Sogeti, Keychain_Dumper

• Jailbreaking of lost/stolen pass code-protected phone:

– With Secure Enclave (Apple A7+ processor, iOS 7+) not

probable

– Exploit might require restart (recovery mode) →

NSFileProtectionCompleteUntilFirstUserAuthentication

• User can jailbreak his own phone - cannot be avoided37 I

Page 38: iOS secure app development

KeyChain & Jailbreak

• Non-standard, multilayer precautions

– Deter script kiddies, complicate automated attacks mnt.

• Ideas:

– Add another layer of encryption / Obfuscation

– Jailbreak detection, tamper detection

– User authentication (e.g., PIN lock screen, enc)

– Secret sharing, server assisted encryption

– Hardware security module - accessory, BT comm38 I

Page 39: iOS secure app development

Local storage

39 I

Page 40: iOS secure app development

Local storage methods

• Plists

• NSUserDefaults

• CoreData

• SQLite

40 I

Page 41: iOS secure app development

Local storage methods

• NSFileProtectionCompleteUntilFirstUserAuthentication

• Unencrypted backups → plaintext

41 I

Page 42: iOS secure app development

42 I

http://www.slideshare.net/xfempx/ios-app-security-common?qid=d11914b4-0a3e-4d1b-a005-3d404064eace&v=&b=&from_search=15

Page 43: iOS secure app development

43 Ihttp://www.slideshare.net/xfempx/ios-app-security-common?qid=d11914b4-0a3e-4d1b-a005-3d404064eace&v=&b=&from_search=15

Page 44: iOS secure app development

44 I

Page 45: iOS secure app development

• https://github.com/sqlcipher/sqlcipher

45 I

Page 46: iOS secure app development

Core data protection

• https://github.com/project-imas/encrypted-core-data/

46 I

Page 47: iOS secure app development

Wiping data from SQLite

• DELETE FROM … may not delete data physically

• Data still present in the DB file / Write Ahead Log

• → Rewrite record before removal (same length)

• → From time to time, call VACUUM (warning: VACUUM

rebuilds DB)

47 I

Page 48: iOS secure app development

Injection attacks - SQL

NSString *uid = [myHTTPConnection getUID];NSString *statement = [NSString stringWithFormat: @"SELECT username FROM users where uid = '%@'",uid];const char *sql = [statement UTF8String];

• Use prepared statements & parameter binding:

const char *sql = "SELECT username FROM users where uid = ?";sqlite3_prepare_v2(db, sql, -1, &selectUid, NULL);sqlite3_bind_int(selectUid, 1, uid);int status = sqlite3_step(selectUid);

48 I

Page 49: iOS secure app development

IPC

49 I

Page 50: iOS secure app development

IPC - URL

50 I

MyApp OtherApp

myApp:// NSString * url = @"myApp://user/passwd";[[UIApplication sharedApplication] openURL:url];

• Apps can register to custom URL Schemes

• Multiple registered apps to the same scheme? Undefined.

Page 51: iOS secure app development

IPC - URL

51 I

• Do not pass sensitive information via URLs

• Validate incoming URLs carefully (injections)

• Take URL Hijacking into account

Page 52: iOS secure app development

IPC - Universal links - iOS 9+

52 I

• App can register to listen to web links

– https://www.phone-x.net/contact-me/dusan

• Entitlement is required

Page 53: iOS secure app development

IPC - Universal links - iOS 9+

53 I

• https://www.phone-x.net/apple-app-site-association

{ "applinks": { "apps": [], "details": [ { "appID": "TBEJCS6FFP.com.domain.App", "paths":[ "*" ] } ] }}

Page 54: iOS secure app development

IPC - Universal links - iOS 9+

54 I

• App delegate method: application:continueUserActivity:

restorationHandler:

• Prons:

– Not subject to URL hijacking

– If app not installed, web page is shown

• Android knew it years ago… (as with copy-paste)

Page 55: iOS secure app development

Crypto

55 I

Page 56: iOS secure app development

Broken/weak algorithms

56 I

• Kind of broken:

– RC4, MD4

• Not suitable anymore:

– MD5, SHA1, DES

• Weak:

– RSA-1024, DH-1024, ECC 128

• Do not use:

– ECB mode, no padding, custom crypto!

Page 57: iOS secure app development

Broken/weak algorithms

57 Ihttp://www.slideshare.net/xfempx/ios-app-security-common?qid=d11914b4-0a3e-4d1b-a005-3d404064eace&v=&b=&from_search=15

Page 58: iOS secure app development

Minimal key lengths

58 I

• https://www.keylength.com/

Page 59: iOS secure app development

Generating random numbers

59 I

const int rndBuffSize = 32;NSMutableData * rnd = [NSMutableData dataWithLength:rndBuffSize];uint8_t * rndBuff = (uint8_t*) [rnd mutableBytes];int result = SecRandomCopyBytes(kSecRandomDefault, rndBuffSize, rndBuff);

• Simulator issues

• rand(), random(), arc4random() are not for crypto!

Page 60: iOS secure app development

rand() patterns

60 I

http://programmers.stackexchange.com/questions/121568/php-rand-function-or-not-so-randhttp://www.scsitoolbox.com/products/cpam.asp

Page 61: iOS secure app development

rand() patterns

61 I

Page 62: iOS secure app development

Generating random numbers

62 I

• Generate high-quality random numbers for:

– IV, nonces, salts

• Do not use user provided passwords as encryption keys

– PBKDF2(password, salt, iterations, keyLength), use

kCCPRFHmacAlgSHA256 derivation.

Page 63: iOS secure app development

Crypto in a good way

63 I

• AES-128, AES-256

– CBC, but with random IV + HMAC. ENC then MAC.

– or GCM = authenticated encryption (prefered)

• RSA-2048, OAEP padding

• ECDSA, ECDHE

• SHA-256

• PBKDF2

Page 64: iOS secure app development

Library

64 I

• https://github.com/RNCryptor/RNCryptor

NSString *password = @"Secret password";

RNEncryptor *encryptor = [[RNEncryptor alloc] initWithPassword:password];

NSMutableData *ciphertext = [NSMutableData new];

// ... Each time data comes in, update the encryptor and accumulate some ciphertext

...

[ciphertext appendData:[encryptor updateWithData:data]];

// ... When data is done, finish up ...

[ciphertext appendData:[encryptor finalData]];

Page 65: iOS secure app development

Memory considerations

65 I

• For sensitive data, use your own allocated memory

• iVars are easy to find & read in runtime analysis

• Wipe the memory after use, rewrite

• https://github.com/project-imas/memory-security

Page 66: iOS secure app development

Memory considerations

66 I

• For sensitive data, use your own allocated memory

• iVars are easy to find & read in runtime analysis

• Wipe the memory after use, rewrite

• https://github.com/project-imas/memory-security

http://www.slideshare.net/mgianarakis/yow-connected-developing-secure-i-os-applications?qid=6663e884-0bc0-4c89-92a1-e3ccbe1d2aa3&v=&b=&from_search=1

Page 67: iOS secure app development

Data leakage

67 I

Page 68: iOS secure app development

Screenshots cache

68 Ihttp://www.slideshare.net/mgianarakis/yow-connected-developing-secure-i-os-applications?qid=6663e884-0bc0-4c89-92a1-e3ccbe1d2aa3&v=&b=&from_search=1

Page 69: iOS secure app development

Screenshots cache

69 I

• When switching to background, for task manager

• /var/mobile/Applications/<app-

code>/Library/Caches/Snapshots

• Prevention:

– Clean form contents before transition

– Show window to hidden on transition

– Show splash screen before transition

Page 70: iOS secure app development

Screenshots cache

70 Ihttp://www.slideshare.net/mgianarakis/yow-connected-developing-secure-i-os-applications?qid=6663e884-0bc0-4c89-92a1-e3ccbe1d2aa3&v=&b=&from_search=1

Page 71: iOS secure app development

Keyboard cache

71 Ihttp://www.slideshare.net/mgianarakis/yow-connected-developing-secure-i-os-applications?qid=6663e884-0bc0-4c89-92a1-e3ccbe1d2aa3&v=&b=&from_search=1

Page 72: iOS secure app development

Keyboard cache

72 I

• Auto-correct caching

– /private/var/mobile/Library/Keyboard/dynamic-text.dat

• For sensitive fields, disable:

– textField.autocorrectionType =

UITextAutocorrectionTypeNo;

– textField.secureTextEntry = YES;

Page 73: iOS secure app development

Logging

73 I

• https://github.com/CocoaLumberjack/CocoaLumberjack

• Do not log sensitive data

• In production, disable logs in compile time

– Occupies less memory, logging messages not included

– Do not document apps behavior for an attacker

• If you have to log in production, log only Errors /

Warnings

Page 74: iOS secure app development

Jailbreak cont.

74 I

Page 75: iOS secure app development

Jailbreak detection

75 I

• https://github.com/project-imas/security-check

• Detection not 100% reliable

• Avoid simple logic: -(BOOL) isJailbroken;

• Check multiple times during execution.

• Use method inlining

– __attribute__((always_inline))

Page 76: iOS secure app development

Method inlining

76 I

Page 77: iOS secure app development

Transport Security

77 I

Page 78: iOS secure app development

Certificate pinning

78 I

http://sierraware.com/blog/wp-content/uploads/2015/04/certificate_pinning.pnghttps://www.cigital.com/wp-content/uploads/2016/03/Certificate-Chain-Visuals-1-1_750.png

Page 79: iOS secure app development

Certificate pinning - preface

79 I

• Use secure protocols (https, smtps, imaps, ssh, …)

• Never disable certificate verification, not even in debug

– setAllowsAnyHTTPSCertificate

– continueWithoutCredentialForAuthenticationChallenge

• Use https://letsencrypt.org/ - a free CA

• Some scenarios where cannot use CA

– Want intermediate signing certificate (e.g., server signs)

• Do pinning on self-signed certificate with true CA flag

Page 80: iOS secure app development

Certificate pinning - manual way

• Implemented by handling events in

NSURLConnectionDelegate (old API)

– connection:canAuthenticateAgainstProtectionSpace:

– connection:didReceiveAuthenticationChallenge:

• NSURLSessionTaskDelegate (new API)

– URLSession:task:didReceiveChallenge:completionHandler:

• Example app: https://www.owasp.org/index.

php/Pinning_Cheat_Sheet

80 I

Page 81: iOS secure app development

Certificate pinning - manual way

• Devel phase:

– Add trust anchors as DER encoded certificates to the

application (e.g., resources, binary, obfuscation, …)

• Verification phase:

– Load anchors, create NSArray<SecCertificateRef>

– Process challenge, get SecTrustRef

– Update trust, set anchors, allow only anchors

– Evaluate trust SecTrustEvaluate. OK? Return credential81 I

Page 82: iOS secure app development

Certificate pinning - manual way- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task

didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge

completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition

disposition, NSURLCredential *credential))completionHandler

{

if ([[challenge protectionSpace].authenticationMethod isEqualToString:

NSURLAuthenticationMethodServerTrust]){

// 1. verify trust

// 2. if OK, create valid credential

}

}

82 I

Page 83: iOS secure app development

Certificate pinning - manual wayconst SecTrustRef trust = [[challenge protectionSpace] serverTrust];

// Obtain trust root CA anchors.

NSArray * anchors = [PEXSecurityCenter getServerTrustAnchors];

SecTrustSetAnchorCertificates(trust, (__bridge CFArrayRef) anchors);

SecTrustSetAnchorCertificatesOnly(trust, YES);

// Validate certificate & trust zone against given trust anchors.

SecTrustResultType res = kSecTrustResultInvalid;

OSStatus sanityCheck = SecTrustEvaluate(trust, &res);

return sanityCheck == noErr && [self validateResult:res];

83 I

Page 84: iOS secure app development

Certificate pinning - manual wayNSURLCredential * const newCredential = [NSURLCredential

credentialForTrust:trust];

[[challenge sender] useCredential:newCredential forAuthenticationChallenge:

challenge];

84 I

Page 85: iOS secure app development

Certificate pinning - library

• https://github.com/iSECPartners/ssl-conservatory

– +(BOOL)setupSSLPinsUsingDictionnary:(NSDictionary*)

domainsAndCertificates;

– +(BOOL)verifyPinnedCertificateForTrust:(SecTrustRef)trust andDomain:

(NSString*)domain;

• Convenience delegates– ISPPinnedNSURLConnectionDelegate

– ISPPinnedNSURLSessionDelegate

85 I

Page 86: iOS secure app development

Certificate pinning - library

• https://github.com/AFNetworking

let securityPolicy = AFSecurityPolicy(pinningMode: AFSSLPinningMode.Certificate) let certificatePath = NSBundle.mainBundle().pathForResource("pinned-certificate", ofType: "cer")! let certificateData = NSData(contentsOfFile: certificatePath)!

securityPolicy.pinnedCertificates = [certificateData]; securityPolicy.validatesCertificateChain = false self.securityPolicy = securityPolicy

86 I

Page 87: iOS secure app development

Certificate pinning - system CA?

• Include or not to include system CA list.

• Trust OK ⇔ systemTrustOK && PinningOK

• Good if:

– your certificates are CA signed (not self-signed, $$$)

– can provide you a revocation (into some extent)

• Bad if:

– your root certificate is self signed

87 I

Page 88: iOS secure app development

Certificate pinning - defeating

• On Jailbroken devices, certificate verification can be

completely disabled

• https://github.com/iSECPartners/ios-ssl-kill-switch

– Hooks to verifications calls @ runtime,

– patches methods to always return YES;

88 I

Page 89: iOS secure app development

Certificate pinning - defeating

• On Jailbroken devices, certificate verification can be

completely disabled

• https://github.com/iSECPartners/ios-ssl-kill-switch

– Hooks to verifications calls @ runtime,

– patches methods to always return YES;

89 I

Page 90: iOS secure app development

TLS security - iOS 9.0+

• App Transport Security - default conn requirements

• NSURLConnection, CFURL, or NSURLSession APIs.

– min TLS 1.2

– forward secrecy cipher suites

– certificates must be valid and signed using SHA-256 +

– min 2048-bit RSA key or 256-bit elliptic curve key

• If req fail → connection fails. By default ON, can override

90 I

Page 91: iOS secure app development

Resources

91 I

Page 92: iOS secure app development

Resources

• http://damnvulnerableiosapp.com/

92 I

Page 93: iOS secure app development

Resources

• http://highaltitudehacks.com/2013/10/26/ios-application-

security-part-20-local-data-storage-nsuserdefaults/

93 I

Page 94: iOS secure app development

Resources

• https://www.owasp.org/index.

php/IOS_Application_Security_Testing_Cheat_Sheet

94 I

Page 95: iOS secure app development

Recommended reading

95 I

Page 96: iOS secure app development

Thank you for your attention!

Q & A

96 I

Page 97: iOS secure app development

References1. https://www.apple.com/business/docs/iOS_Security_Guide.pdf2. https://www.quora.com/What-is-Apple%E2%80%99s-new-Secure-Enclave-and-why-is-it-important3. http://www.wired.com/2015/10/x-ray-scans-expose-an-ingenious-chip-and-pin-card-hack/#slide-44. http://www.anandtech.com/show/8562/chipworks-a85. http://www.darthnull.org/2014/10/06/ios-encryption6. http://blog.cryptographyengineering.com/2014/10/why-cant-apple-decrypt-your-iphone.html7. http://highaltitudehacks.com/2013/09/17/ios-dev-storing-info-in-keychain-with-nsuserdefaults-like-

syntax/8. http://willowtreeapps.com/blog/enhanced-device-security-in-ios-9/9. https://dl.packetstormsecurity.net/papers/general/apple-sandbox.pdf

10.

97 I