OWASP, un'organizzazione che fornisce assistenza agli sviluppatori di app, ha alcuni materiali di riferimento:
- Il riferimento di Mobile Insecure Data Storage originale Top Ten 2012 - link
- Il riferimento aggiornato di Top Ten 2014 Insecure Data Storage aggiornato - link
- Un Cheat Sheet di iOS Developers che fornisce suggerimenti specifici su dove archiviare quali tipi di dati, quando è necessario per le attività funzionali di un'app - link
Per Android, potrei suggerire di utilizzare secure-preferences invece delle preferenze condivise che hai suggerito, o forse CWAC-prefs . Guarda alcuni esempi di questi nel libro di ricette di sicurezza di Android.
Su iOS, assicurati di leggere il libro Sicurezza dell'applicazione iOS, che consiglia Lockbox per memorizzare i dati nel Portachiavi, nonché come metodi per aggiungere e rimuovere credenziali. Se stai costruendo un'app per dispositivi mobili iOS, questo libro è altamente raccomandato.
Se non ti piace o per qualche ragione non puoi usare Lockbox (o semplicemente vuoi provare diverse opzioni), quindi dai un'occhiata a questa idea dal libro, Mobile Application Penetration Testing:
Utilize the different options provided by Apple, as we learned in the
section Keychain data protection in Chapter 2, Snooping Around the
Architecture. You can also utilize one of the simple wrapper
PDKeyChainBindingController
(https://github.com/carlbrown/PDKeychainBindingsController) to secure
the keychain data. However, if the device is jailbroken then keychain
information is not secure. It is recommended to use custom encryption
techniques to encrypt the string that is stored in the keychain. Make
the best use of the keychain services API
(https://developer.apple.com/library/mac/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html).
Il libro copre anche un altro problema relativo alla memorizzazione delle credenziali nel Portachiavi:
On June 18, 2015, a password stealing vulnerability, also known as
XARA (Cross Application Resource Attack), outlined for iOS and OS X
cracked the Keychain services on jail broken and non-jail broken
devices. The vulnerability is similar to the cross-site request
forgery attack in web applications. In spite of Apple's isolation
protection and its App Store's security vetting, it was possible to
circumvent the security controls mechanism. It clearly provided the
need to protect the cross-app mechanism between the operating system
and the app developer. Apple rolled out a security update week after
the XARA research. More information can be found at
http://www.theregister.co.uk/2015/06/17/apple_hosed_boffins_drop_0day_mac_ios_research_blitzkrieg/
e fornisce dettagli sul portachiavi stesso, se si utilizza un dispositivo jailbroken per tentare di accedervi
Keychain in an iOS device is used to securely store sensitive
information such as credentials, such as usernames, passwords,
authentication tokens for different applications, and so on, along
with connectivity (Wi-Fi/VPN) credentials and so on. It is located on
iOS devices as an encrypted SQLite database file located at
/private/var/Keychains/keychain-2.db