È sicuro archiviare le password nella memoria propria dell'app Android / iOS?

5

Sto creando un'app che accede a un'API remota che non implementa oauth2 o un altro meccanismo simile e voglio sapere se è ragionevolmente sicuro che la password sia sicura se è memorizzato nell'archivio privato dell'app come Preferenze condivise o SQLite?

    
posta IAmJulianAcosta 01.08.2016 - 15:48
fonte

2 risposte

4

OWASP, un'organizzazione che fornisce assistenza agli sviluppatori di app, ha alcuni materiali di riferimento:

  1. Il riferimento di Mobile Insecure Data Storage originale Top Ten 2012 - link
  2. Il riferimento aggiornato di Top Ten 2014 Insecure Data Storage aggiornato - link
  3. 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

    
risposta data 02.08.2016 - 06:53
fonte
1

La risposta fornita è errata, secondo la documentazione nativa di Android

In general, we recommend minimizing the frequency of asking for user credentials -- to make phishing attacks more conspicuous, and less likely to be successful. Instead use an authorization token and refresh it.

Where possible, username and password should not be stored on the device. Instead, perform initial authentication using the username and password supplied by the user, and then use a short-lived, service-specific authorization token.

È nei documenti di formazione qui:

link

    
risposta data 31.12.2018 - 18:41
fonte

Leggi altre domande sui tag