Come proteggere un'app per iOS

La sicurezza è un aspetto chiave dello sviluppo del software. Quasi tutte le applicazioni mobili riguardano le informazioni dell'utente o comunicano con un server remoto. Anche se la sicurezza è migliorata drasticamente negli ultimi decenni, continua ad essere un argomento molto dibattuto.

In questo articolo, vorrei evidenziare una serie di argomenti relativi alla sicurezza e allo sviluppo mobile. Lungo la strada, toccherò una serie di best practice e suggerimenti che potresti trovare utili per proteggere le applicazioni che scrivi.

Sicurezza e privacy

La sicurezza è relativa. Gli exploit di sicurezza vengono scoperti e rattoppati regolarmente. Niente è perfetto. Detto questo, ci sono una serie di cose che puoi fare per migliorare la sicurezza delle tue applicazioni mobili. Un ladro è meno tentato di entrare in un edificio circondato da una recinzione elettrica rispetto a uno che non lo è.

Alcuni sviluppatori trascurano il fatto che gli utenti delle loro applicazioni si fidano di loro con le loro informazioni. Come sviluppatore, sei responsabile di mantenere tali informazioni al sicuro. Non importa quale sia quell'informazione. Sebbene le informazioni possano sembrare poco importanti per te, è importante per l'utente.

Apple prende molto seriamente sicurezza e privacy. HealthKit è un ottimo esempio dell'impegno di Apple a proteggere la privacy dell'utente. L'utente decide a quali dati sanitari ha accesso un'applicazione. Mentre l'applicazione può richiedere l'accesso ai dati sulla salute dell'utente, HealthKit non indica a quali dati ha accesso. In altre parole, Apple considera lo stato di autorizzazione di un'applicazione come informazioni sensibili di cui non dovrebbe essere a conoscenza.

1. Memorizzazione dei dati

Dovrebbe il tuo archivio memorizzare i dati

Prima di decidere come o dove memorizzare una particolare parte di dati, è necessario chiedersi se è necessario archiviare tali dati in primo luogo. È possibile, ad esempio, conservare i dati in memoria anziché scriverli su disco o inviarli a un server remoto? Ciò può semplificare notevolmente l'architettura della tua applicazione e migliorarne la sicurezza.

Dove conservare i dati

Se si decide che la memorizzazione locale dei dati è l'unica opzione, è necessario decidere dove si intende memorizzare tali dati. Per informazioni sensibili, come le credenziali, il portachiavi è la scelta migliore. Questo è possibile solo per piccole quantità di dati a cui la tua applicazione non ha bisogno di accedere frequentemente.

È necessario eseguire il backup dei dati su iCloud o iTunes? Se questo non è il caso, allora puoi prendere in considerazione la possibilità di memorizzare i dati nel file caches directory della sandbox dell'applicazione. Questa directory non viene salvata su iCloud e iTunes. Perché è così importante? I dati che non esistono non possono essere compromessi.

Portachiavi

Il sistema di default, accessibile attraverso il NSUserDefaults classe, è un modo rapido e conveniente per archiviare blocchi di dati. Sfortunatamente, il sistema di default è spesso abusato dagli sviluppatori. Succede troppo spesso che le informazioni sensibili, come credenziali e token di accesso, siano memorizzate nel sistema di default.

Una posizione molto migliore per archiviare piccoli pezzi di informazioni sensibili è il portachiavi del sistema. Come suggerisce il nome, è stato progettato pensando alla sicurezza ed è stato utilizzato per molti, molti anni. Anche se il portachiavi è gestito dal sistema operativo, per impostazione predefinita, altre applicazioni non hanno accesso agli elementi memorizzati dall'applicazione nel portachiavi.

È vero che l'interfaccia per accedere ai servizi portachiavi è arcaica. Fortunatamente, ci sono diverse librerie eccellenti che superano questo ostacolo. Lockbox, ad esempio, è una libreria leggera per l'interazione con i servizi portachiavi del sistema. L'interfaccia di Lockbox è facile da usare e da capire.

Chiavi, gettoni, credenziali

Si è tentati di memorizzare chiavi, token e persino credenziali in posizioni facilmente accessibili, come quelle del bersaglio Info.plist o un file JSON nel pacchetto dell'applicazione. La verità è che è un gioco da ragazzi estrarre le informazioni da un'applicazione scaricata dall'App Store. Memorizzando un token API per un servizio Web nelle applicazioni Info.plist, altri sviluppatori possono trovarlo e usarlo.

2. Networking

Sicurezza del trasporto delle app

La sicurezza e la privacy sono state all'ordine del giorno di Apple per molti anni e, insieme ad altri importanti attori, Apple ha deciso di dare l'esempio. Durante il WWDC dello scorso anno, la società ha introdotto Sicurezza del trasporto delle app.

Con App Transport Security, Apple punta a migliorare la sicurezza delle sue piattaforme e delle applicazioni in esecuzione su di esse. Indipendentemente da quanto Apple investe nel proteggere i suoi sistemi operativi, un sistema è sicuro quanto il suo componente più debole e include applicazioni di terze parti.

App Transport Security impone alle applicazioni l'invio di richieste di rete tramite una connessione sicura. Se App Transport Security è abilitata per un'applicazione, le richieste di rete vengono inviate su HTTPS per impostazione predefinita. Apple sottolinea il suo impegno per la sicurezza e la privacy abilitando automaticamente App Transport Security per le applicazioni create con Xcode 7.

Puoi leggere ulteriori informazioni su App Transport Security su Envato Tuts +. Benché sia ​​facile disabilitare App Transport Security, tieni presente che uno degli obiettivi di App Transport Security è quello di far sì che gli sviluppatori considerino il comportamento di rete delle loro applicazioni.

A chi sto parlando

Praticamente ogni applicazione mobile utilizza la rete. Ciò significa che le persone con cattive intenzioni si concentrano pesantemente su questo aspetto della sicurezza delle applicazioni. Il networking è una questione complessa e le applicazioni si basano su un gran numero di tecnologie per recuperare i dati a cui sono interessati.

Come sviluppatore, è fondamentale attenersi a una serie di best practice. Abbiamo già discusso di App Transport Security e delle regole applicate da questa nuova tecnologia. Tuttavia, non si ferma qui. Si consiglia inoltre di esaminare argomenti più avanzati, come il blocco dei certificati, per garantire che il server con cui l'applicazione sta comunicando non sia fraudolento. Le biblioteche moderne, come Alamofire, rendono tutto molto più semplice.

3. Informazioni sensibili

Dati utente

La maggior parte delle applicazioni utilizza o memorizza informazioni sensibili dell'utente. I dispositivi mobili hanno accesso a una vasta gamma di informazioni dell'utente che sono spesso di natura personale e sensibile, come la posizione, la rubrica e le informazioni sanitarie.

Come accennato in precedenza in questo articolo, la prima domanda da porsi è se è necessario accedere a queste informazioni e, cosa più importante, se è necessario archiviare tali informazioni.

Se è possibile accedere alle informazioni necessarie tramite un framework nativo, ad esempio HealthKit, non è necessario duplicare e archiviare tali informazioni. Ad esempio, Apple rifiuterà le applicazioni che memorizzano le informazioni sulla salute dell'utente in iCloud.

Keep It Local

Supponendo che sia necessario memorizzare alcune informazioni sensibili, considerare se tali informazioni debbano essere mantenute locali. È necessario inviare informazioni sensibili a un server remoto?

La memorizzazione delle informazioni sensibili viene accompagnata da un avviso. Se il server sul quale si stanno memorizzando informazioni sensibili è compromesso, si può essere ritenuti responsabili dell'esposizione di tali informazioni ad altre parti.

Credenziali

La sicurezza online si è evoluta moltissimo negli ultimi decenni. I protocolli di autenticazione, come OAuth, hanno reso la comunicazione con i servizi Web più sicura e trasparente.

Se la tua applicazione ha bisogno di parlare con un server sicuro, considera come la tua applicazione gestisce le credenziali. Li tiene in memoria o li memorizza su disco? Se chiedi nome utente e password dell'utente per recuperare un token di accesso, è corretto archiviare quel token di accesso. Ma dovresti anche memorizzare nome utente e password? La risposta è no nella maggior parte delle situazioni.

Per le applicazioni che trattano dati molto sensibili, come la salute o le informazioni finanziarie, potrebbe anche essere meglio conservare il token di accesso in memoria, non memorizzarlo su disco. Mantenerlo in memoria lo rende molto più sicuro, rendendo la tua applicazione molto meno di una responsabilità. È probabile che il token di accesso abbia comunque una vita breve.

Conclusione

La sicurezza di un'applicazione è un aspetto fondamentale dello sviluppo del software. Considera quali dati ha accesso alla tua applicazione e se deve memorizzare tali informazioni. Se decidi di archiviare informazioni riservate, tieni a mente i suggerimenti e le best practice sopra riportati. Assicurati di trattare le informazioni dell'utente con rispetto. Anche se le informazioni potrebbero non sembrare importanti per te, è importante per l'utente.