Slide 1

Slide 1 text

Secure software development: from rookie to hardcore in 90 minutes iOS data security workshop @vixentael

Slide 2

Slide 2 text

Secure software development: from rookie to hardcore in 90 minutes iOS data security workshop @vixentael

Slide 3

Slide 3 text

@vixentael product engineer in security and cryptography started from iOS 3 OSS maintainer: Themis, Acra conduct workshops & training about secure apps development training.cossacklabs.com

Slide 4

Slide 4 text

https://medium.com/@vixentael/popular-note-taking-apps-share- these-security-flaws-security-tips-for-developers-326180e41329 @vixentael

Slide 5

Slide 5 text

https://github.com/vixentael/ ios-datasec-basics @vixentael

Slide 6

Slide 6 text

Plan for next 85 mins: 1. Intro (Apple, OWASP, jailbreaks) @vixentael 2. Secure software development lifecycle 3. Stored data mistakes: key management and encryption 4. Practice time 5. Other data security things (network, logging, screenshots) 6. Reading list

Slide 7

Slide 7 text

Secure software development Apple (guidelines, rejection guides) users (upset, angry) money (breaches, legal actions, fines) why care anyway? @vixentael

Slide 8

Slide 8 text

http://headway.io/blog/apple-app-store-new- privacy-policy-what-you-need-to-know/ New App Store privacy policy - minimize the data you collect - be transparent on how you use the data - protect stored and transit data - remove data fully and quickly @vixentael

Slide 9

Slide 9 text

GDPR @vixentael Article 32/35: responsibly store and process data according to risks
 
 Article 33/34: detecting data leakage and alert users & controller https://gdpr-info.eu/

Slide 10

Slide 10 text

@vixentael https://gdpr-info.eu/ Article 32

Slide 11

Slide 11 text

OWASP Top-10 mobile risks www.owasp.org/index.php/OWASP_Mobile_Security_Project @vixentael • M1: Improper Platform Usage • M2: Insecure Data Storage • M3: Insecure Communication • M4: Insecure Authentication • M5: Insufficient Cryptography • M6: Insecure Authorization • M7: Client Code Quality • M8: Code Tampering • M9: Reverse Engineering • M10: Extraneous Functionality

Slide 12

Slide 12 text

OWASP Top-10 mobile risks • M1: Improper Platform Usage • M2: Insecure Data Storage • M3: Insecure Communication • M4: Insecure Authentication • M5: Insufficient Cryptography • M6: Insecure Authorization • M7: Client Code Quality • M8: Code Tampering • M9: Reverse Engineering • M10: Extraneous Functionality www.owasp.org/index.php/OWASP_Mobile_Security_Project @vixentael

Slide 13

Slide 13 text

Remote jailbreak iOS11 (patched in iOS12) https://twitter.com/kevin_backhouse/status/1057352656560287746 @vixentael

Slide 14

Slide 14 text

www.apple.com/business/site/docs/iOS_Security_Guide.pdf @vixentael 95 pages PDF

Slide 15

Slide 15 text

Most users trust sensitive data to your app regardless of how well you protect it.

Slide 16

Slide 16 text

Secure development lifecycle methodology MS SDL OWASP S-SDLC microsoft.com/en-us/sdl owasp.org/index.php/ OWASP_Secure_Software_Develop ment_Lifecycle_Project @vixentael

Slide 17

Slide 17 text

Define sensitive data Design & implement security controls Verify security controls
 (testing, monitoring) SSDLC in a simple words @vixentael @vixentael during planning during planning & implementation acceptance testing / QA, unit testing during planning during planning & implementation acceptance testing / QA, unit testing

Slide 18

Slide 18 text

@vixentael @vixentael SSDLC in a simple words Define sensitive data Design & implement security controls Verify security controls
 (testing, monitoring) during planning during planning & implementation acceptance testing / QA, unit testing repeat

Slide 19

Slide 19 text

So, one by one

Slide 20

Slide 20 text

Sensitive data @vixentael @vixentael

Slide 21

Slide 21 text

Sensitive data @vixentael @vixentael geo-locations health data financial data kids locations cars remote control credentials logs PII

Slide 22

Slide 22 text

– any kind of data, that will break business objectives or prosperity of those who use data, if leaked. Sensitive data @vixentael @vixentael geo-locations health data financial data kids locations cars remote control credentials logs PII

Slide 23

Slide 23 text

Defining sensitive data: sensitive user data (PII, password) regulations (GDPR / HIPAA / PCI DSS) tech data (keys, logs, accesses) https://www.cossacklabs.com/blog/what-we-need-to-encrypt- cheatsheet.html @vixentael @vixentael

Slide 24

Slide 24 text

@vixentael @vixentael Security controls

Slide 25

Slide 25 text

Data security Application security Infrastructure security Monitoring Intrusion detection Vulnerability management @vixentael Security controls proactive and reactive

Slide 26

Slide 26 text

Proactive controls Data security encryption Access security authentication, firewalls, OS Node security firewalls, compartmentalization, isolation, OS @vixentael

Slide 27

Slide 27 text

Data security key management, integrity checks, authenticated crypto Access security credential management, access logging, jailbans Node security code security, monitoring, SIEM Reactive controls @vixentael

Slide 28

Slide 28 text

Verification, testing @vixentael @vixentael https://github.com/OWASP/owasp-mstg OWASP Mobile Security Testing Guide https://github.com/OWASP/owasp-masvs OWASP Mobile Application Security Verification Standard

Slide 29

Slide 29 text

MASVS @vixentael @vixentael

Slide 30

Slide 30 text

@vixentael @vixentael SSDLC again Define sensitive data Design & implement security controls Verify security controls
 (testing, monitoring) during planning during planning & implementation acceptance testing / QA, unit testing repeat

Slide 31

Slide 31 text

Storage encryption and key management

Slide 32

Slide 32 text

File and CoreData encryption https://developer.apple.com/documentation/uikit/core_app/ protecting_the_user_s_privacy/encrypting_your_app_s_files NSPersistentStoreFileProtectionKey @vixentael @vixentael

Slide 33

Slide 33 text

Store encrypted data: Encrypt stored data UserDefaults Files Database cells Backups @vixentael @vixentael

Slide 34

Slide 34 text

Symmetric encryption with integrity checks and long key AES-256-GCM Encrypt stored data @vixentael Use strong encryption

Slide 35

Slide 35 text

Symmetric encryption, mistakes @vixentael @vixentael wrong data scope poor encryption flow design bad key management bad cryptography encryption lib mis-use

Slide 36

Slide 36 text

Hashing: md5 vs sha256 @vixentael @vixentael https://passwordsgenerator.net/sha256-hash-generator/

Slide 37

Slide 37 text

☠ md5 ☠ sha1 bcrypt https://dusted.codes/sha-256-is-not-a-secure- password-hashing-algorithm PBKDF2 sha256 sha512 HKDF @vixentael Wanna hash password? Use KDF

Slide 38

Slide 38 text

https://www.raywenderlich.com/129-basic-ios-security-keychain- and-hashing @vixentael Use KDF

Slide 39

Slide 39 text

https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/ Password_Storage_Cheat_Sheet.md @vixentael should be random should be > 10k Use KDF correctly

Slide 40

Slide 40 text

https://pdos.csail.mit.edu/papers/cryptobugs:apsys14.pdf 269 CVEs from 2011-2014 17% 83% bugs inside crypto libs misuses of crypto libs by individual apps @vixentael

Slide 41

Slide 41 text

@vixentael @vixentael Even more mistakes XORing != encrypting using password as encryption key (without KDF) storing keys elsewhere use single encryption key for all data/users

Slide 42

Slide 42 text

@vixentael @vixentael Use encryption

Slide 43

Slide 43 text

@vixentael @vixentael should be random should use KDF(key) uses AES CBC, not AES GCM padding? salt? Use encryption correctly

Slide 44

Slide 44 text

Use “boring” crypto libraries ★ use strong & audited crypto ★ work everywhere ★ hide cryptographic details ★ hard to mis-use ★ have integration with key storage @vixentael https://speakerdeck.com/vixentael/dont-waste-time-on-learning- cryptography-better-use-it-properly

Slide 45

Slide 45 text

Encryption that hard to mis-use @vixentael @vixentael Themis

Slide 46

Slide 46 text

Encryption that hard to mis-use @vixentael @vixentael hides cryptographic details: salt, IV, KDF, padding built-in KDF, safe to use passphrase uses AES-256-GCM Themis

Slide 47

Slide 47 text

Storage Transport Multi- platform themis libsodium tink TLS
 themis libsodium OTRKit
 libsignal Made for one platform, some ports available RNCryptor CryptoSwift CommonCrypto https://www.cossacklabs.com/choose-your-ios-crypto.html @vixentael @vixentael

Slide 48

Slide 48 text

Key management APP TOKENS USER PASSWORDS PUBLIC CERTS let apiToken = “63ufHs2E82-cJgsm!djr7-Ks1TTYC4TV” let appId = "VK1TTYC4TV" let poolId = “us-east-1:r0s3s4r3-r3d-13375p34k" var userPass = "qwertyqwerty" @vixentael

Slide 49

Slide 49 text

APP FLOW BUILT-IN Keychain - KDF - encrypt @vixentael plist/files - encrypt - obfuscate - calculate

Slide 50

Slide 50 text

Practice time

Slide 51

Slide 51 text

https://github.com/vixentael/ ios-datasec-basics @vixentael

Slide 52

Slide 52 text

Built-in keys store as hardcode variable store obfuscated in plist, de-obfuscate on start store encrypted in plist, decrypt on start @vixentael

Slide 53

Slide 53 text

App flow keys store as memory variable store obfuscated/encrypted in User Defaults store in Keychain, protect by Biometrics @vixentael

Slide 54

Slide 54 text

https://github.com/vixentael/ ios-datasec-basics @vixentael

Slide 55

Slide 55 text

Other data security things

Slide 56

Slide 56 text

Transport encryption github.com/ssllabs/research/wiki/SSL-and-TLS- Deployment-Best-Practices private keys RSA-2048, ECDSA-256 obtain certificate from reliable CA TLS v1.3-v1.2 use secure cipher suites TLS_ECDHE_ECDSA_WITH_AES_ 256_GCM_SHA384 ✅ enable Forward Secrecy ✅ enable HSTS (web) . rotate certificates often @vixentael

Slide 57

Slide 57 text

SSL pinning Moya owasp.org/index.php/Pinning_Cheat_Sheet @vixentael

Slide 58

Slide 58 text

Update certificate Update app with hardcoded certificate Built-in several certificates Update from server: build trusted channel @vixentael SSL pinning

Slide 59

Slide 59 text

transport = Transport() transport?.setupKeys(serverId, serverPublicKey: serverPublicKey) session = TSSession(userId: clientIdData, privateKey: clientPrivateKeyData, callbacks: transport!) startSession(clientId: clientId, message: connectionMessage) Encrypt over SSL Themis @vixentael

Slide 60

Slide 60 text

Themis axolotl noise @vixentael Encrypt over SSL

Slide 61

Slide 61 text

medium.com/@AyunasCode/how-to-hide-your-api-keys-367ef6589949 shanirivers.me/posts/hiding-your-api-keys-for-ios-projects orta/cocoapods-keys awslabs/git-secrets keys.plist → .gitignore Do not commit secrets @vixentael

Slide 62

Slide 62 text

Do not log secrets cfpb/clouseau Automate checking code for forgotten secrets. @vixentael

Slide 63

Slide 63 text

@vixentael https://speakerdeck.com/vixentael/x-things-you- need-to-know-before-implementing-cryptography

Slide 64

Slide 64 text

Do’s and Don’ts
 of secure development

Slide 65

Slide 65 text

DON’T - Do things just because “they make security better” - Copy-paste from StackOverflow - Implement your own security controls where 
 solutions are available @vixentael

Slide 66

Slide 66 text

DO - Only things that address real valid risks - Use industry’s best practices, standards and tools - Explain why spending effort is necessary - Plan, implement, test, formalize - Watch the trends, follow experts @vixentael

Slide 67

Slide 67 text

Reading, watching

Slide 68

Slide 68 text

General theory http://mashable.com/2016/04/16/apple-security-explained/ How Apple Security works https://medium.com/@vixentael/popular-note-taking-apps-share-these-security-flaws-security- tips-for-developers-326180e41329 Popular note-taking apps share these security flaws https://medium.com/@cossacklabs/apple-export-regulations-on-crypto-6306380682e1 Apple Export Regulations on Cryptography https://howhttps.works/ How HTTPS works: cats

Slide 69

Slide 69 text

Cryptography https://www.owasp.org/index.php/Cryptographic_Storage_Cheat_Sheet Cryptographic Storage Cheat Sheet https://www.owasp.org/index.php/Key_Management_Cheat_Sheet Key Management Cheat Sheet https://developer.apple.com/library/content/documentation/Security/Conceptual/ cryptoservices/KeyManagementAPIs/KeyManagementAPIs.html Managing Keys, Certificates, and Passwords https://cossacklabs.com/choose-your-ios-crypto.html Crypto in iOS: choose your destiny

Slide 70

Slide 70 text

Testing http://iphonedevwiki.net/index.php/Crack_prevention Crack prevention https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06a- platform-overview Mobile Security Testing Guide https://github.com/OWASP/owasp-masvs OWASP Mobile Application Security Verification Standard

Slide 71

Slide 71 text

Talks & training github.com/vixentael/ my-talks training.cossacklabs.com

Slide 72

Slide 72 text

@vixentael product engineer in security and cryptography conduct workshops & training about secure apps development