Per le app che utilizzano solo traffico sicuro, Android 6.0 Marshmallow (API Level 23) ha introdotto due meccanismi per affrontare il tema delle regressioni al traffico cleartext: (1) in fase di produzione/base di prodotti installata, blocco del traffico cleartext e (2) in fase di sviluppo/QA, registrazione o arresto quando viene riscontrato traffico non TLS/SSL. Le seguenti sezioni riportano ulteriori informazioni su questi meccanismi.
Per proteggere la base di prodotti installata della tua app dalle regressioni al traffico cleartext, dichiara l’attributo
android:usesCleartextTraffic=”false” nell’elemento
application nel file AndroidManifest.xml dell’app. Questo dichiara che l’app non deve utilizzare il traffico di rete cleartext e richiede agli stack di rete della piattaforma di Android Marshmallow di bloccare il traffico cleartext nell’app. Ad esempio, se la tua app tenta accidentalmente di registrare l’utente tramite una richiesta HTTP cleartext, la richiesta sarà bloccata e l’identità e la password dell’utente non trapeleranno in rete.
Non sei obbligato a impostare i valori di minSdkVersion o targetSdkVersion della tua app su 23 (Android Marshmallow) per usare android:usesCleartextTraffic. Sulle piattaforme precedenti, questo attributo viene semplicemente ignorato e pertanto non ha alcun effetto.
Ricorda che WebView non si conforma ancora a questa funzione.
Inoltre, in alcune circostanze il traffico cleartext potrebbe continuare a passare attraverso l’app o a introdurvisi. Ad esempio, l’API Socket ignora il criterio cleartext in quanto non capisce se i dati trasmessi o ricevuti possono essere classificati come cleartext. Gli stack HTTP della piattaforma Android, al contrario, rispettano il criterio in quanto capiscono se il traffico è di tipo cleartext.
Anche Google AdMob è progettato per rispettare questo criterio. Quando la tua app dichiara di non usare il traffico cleartext, all’app devono essere forniti annunci solo HTTPS.
Invitiamo le reti, gli annunci e le librerie degli strumenti di analisi di terzi ad aggiungere il supporto per questo criterio. La query relativa al criterio del traffico cleartext può essere inviata tramite la classe
NetworkSecurityPolicy.
Individuazione del traffico cleartext in fase di sviluppo
Per individuare il traffico cleartext in fase di sviluppo o QA, l’
API StrictMode ti consente di modificare la tua app per rilevare il traffico non TLS/SSL e quindi di registrare le violazioni nel registro di sistema o di eseguire l’arresto dell’app (vedi
StrictMode.VmPolicy.Builder.detectCleartextNetwork()). Si tratta di uno strumento utile per identificare le parti dell’app che stanno utilizzando traffico non TLS/SSL (e DLTS). Contrariamente all’attributo android:usesCleartextTraffic, l’abilitazione di questa funzione non è prevista nelle build delle app distribuite agli utenti.
Innanzitutto questa funzione dovrebbe segnalare il traffico sicuro non TLS/SSL. Soprattutto, potrebbe essere segnalato anche il traffico TLS/SSL tramite proxy HTTP. Questo costituisce un problema perché in quanto sviluppatore non hai alcun controllo se un determinato utente della tua app ha configurato il proprio dispositivo Android per l’uso di un proxy HTTP. Infine, l’implementazione della funzione non offre garanzie per il futuro, perciò potrebbe rifiutare versioni di protocollo TLS/SSL future. Pertanto l’uso di questa funzione è previsto unicamente durante la fase di sviluppo e QA.
Dichiarazione del criterio cleartext a granularità ancora più elevata nella configurazione della sicurezza di rete
Android N offre un controllo a granularità ancora più elevata sul criterio del traffico cleartext. Contrariamente all’attributoandroid:usesCleartextTraffic, che si applica a tutte le destinazioni con le quali comunica un’app, la
configurazione della sicurezza di rete di Android N consente all’app di specificare il criterio cleartext per destinazioni specifiche. Ad esempio, per facilitare una transizione più graduale verso un criterio che non consenta il traffico cleartext, un’app può inizialmente bloccare il traffico cleartext accidentale solo per le comunicazioni con i sistemi di backend più importanti e consentire l’uso di cleartext per altre destinazioni.
FASI SUCCESSIVE
Una delle best practice in materia di sicurezza è quella di utilizzare solamente traffico di rete sicuro per le comunicazioni tra la tua app e i relativi server. Android Marshmallow ti consente di mettere in atto questa prassi, perché allora non provarla?
Come sempre, il tuo feedback ci è sempre utile e gradito e apprezziamo qualsiasi suggerimento per il miglioramento di Android. Contattaci all’indirizzo
security@android.com. HTTPS, Android-Sicurezza