Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Best practice sulla sicurezza delle app

Questa sezione contiene raccomandazioni per garantire la sicurezza delle app sui dispositivi Android.

Revisione del codice sorgente

La revisione del codice sorgente è in grado di rilevare un'ampia gamma di problemi di sicurezza, compresi quelli identificati in questo documento. Android incoraggia fortemente la revisione manuale e automatica del codice sorgente.

  • Seguire le linee guida di sicurezza complete quando si effettuano le revisioni per garantire la copertura. Utilizzare standard interni o esterni pertinenti per garantire revisioni coerenti e complete.
  • Esegui una linter, come la linter di Android Studio , su tutto il codice dell'app utilizzando Android SDK e correggi eventuali problemi identificati.
  • Analizza il codice nativo utilizzando uno strumento automatizzato in grado di rilevare problemi di gestione della memoria, come overflow del buffer ed errori off-by-one.
  • Il sistema di build Android supporta molti dei disinfettanti LLVM, come AddressSanitizer e UndefinedBehaviorSanitizer , che possono essere utilizzati per l'analisi di runtime di problemi relativi alla memoria. In combinazione con il fuzzing, supportato in Android tramite libFuzzer , i disinfettanti possono scoprire casi limite insoliti che richiedono ulteriori indagini.
  • Un esperto valutatore della sicurezza dovrebbe rivedere il codice di rischio più elevato, come la crittografia, l'elaborazione dei pagamenti e l'elaborazione delle informazioni personali.

Test automatizzati

I test automatizzati possono aiutare a rilevare un'ampia gamma di problemi di sicurezza e dovrebbero essere eseguiti regolarmente.

  • Esegui regolarmente l'ultima versione di CTS durante tutto il processo di sviluppo per rilevare tempestivamente i problemi e ridurre i tempi di correzione. Android utilizza CTS come parte della continua integrazione nel nostro processo di compilazione automatizzato, che si sviluppa più volte al giorno.
  • Automatizza i test di sicurezza delle interfacce, inclusi i test con input non validi (test fuzz). Il sistema di build di Android supporta libFuzzer per la scrittura di test fuzz.

Scansione vulnerabilità

La scansione delle vulnerabilità può aiutare a garantire che le app preinstallate siano prive di vulnerabilità di sicurezza note. Il rilevamento avanzato può ridurre i tempi e i costi necessari per affrontare queste vulnerabilità e prevenire i rischi per utenti e dispositivi.

  • Effettua la scansione di tutte le app preinstallate utilizzando uno strumento di scansione delle vulnerabilità delle app riconosciuto nel settore e risolvi le vulnerabilità rilevate.

Applicazioni potenzialmente dannose

È importante assicurarsi che le app preinstallate sul dispositivo non siano applicazioni potenzialmente dannose (PHA). Sei responsabile del comportamento di tutte le app incluse nei tuoi dispositivi. Prima del lancio del dispositivo, scansiona tutte le app precaricate alla ricerca di vulnerabilità.

Per ulteriori informazioni sui PHA e su come Google li combatte nel Play Store, consultare la documentazione per sviluppatori di Google Play Protect .

Installazione e autorizzazioni dell'app

Autorizzazioni eccessive per le app preinstallate possono creare un rischio per la sicurezza. Limitare le app preinstallate alle autorizzazioni minime necessarie e assicurarsi che non abbiano accesso a autorizzazioni o privilegi non necessari. Le autorizzazioni per le app sono descritte in AndroidManifest.xml .

  • Non concedere autorizzazioni o privilegi non necessari alle app preinstallate. Esamina attentamente le app con privilegi di sistema in quanto potrebbero avere autorizzazioni molto sensibili.
  • Assicurati che tutte le autorizzazioni richieste siano pertinenti e necessarie per la funzionalità di quella specifica app.
  • Assicurarsi che sia disponibile la divulgazione dell'utente per tutte le app preinstallate che utilizzano l'autorizzazione INSTALL_PACKAGES .
  • Assicurati che lo sviluppatore sia contrattualmente obbligato a non installare alcuna app come UID 0.
  • Valuta le autorizzazioni dichiarate nel manifest di tutte le app da installare attraverso la rete dello sviluppatore.
  • Assicurati che lo sviluppatore sia obbligato per contratto a scansionare tutti gli URL di download delle app di aggiornamento automatico e di installazione con l' API di navigazione sicura di Google prima di pubblicare app sul dispositivo.

Firma dell'app

Le firme delle app svolgono un ruolo importante nella sicurezza dei dispositivi e vengono utilizzate per i controlli delle autorizzazioni e gli aggiornamenti del software. Quando si seleziona una chiave da utilizzare per la firma delle app, è importante considerare se un'app sarà disponibile solo su un singolo dispositivo o comune su più dispositivi.

  • Assicurati che le app non siano firmate con una chiave nota pubblicamente, come la chiave sviluppatore AOSP.
  • Assicurati che le chiavi utilizzate per firmare le app siano gestite in modo coerente con le pratiche standard del settore per la gestione delle chiavi sensibili, incluso un modulo di sicurezza hardware (HSM) che fornisce un accesso limitato e verificabile.
  • Assicurarsi che le app non siano firmate con la chiave della piattaforma. In questo modo, un'app può accedere alle autorizzazioni di firma della piattaforma, che sono molto potenti e intese solo per essere utilizzate dai componenti del sistema operativo. Le app di sistema dovrebbero usare autorizzazioni privilegiate.
  • Assicurati che le app con lo stesso nome del pacchetto non siano firmate con chiavi diverse. Ciò si verifica spesso durante la creazione di un'app per dispositivi diversi, in particolare quando si utilizza la chiave della piattaforma. Se l'app è indipendente dal dispositivo, utilizzare la stessa chiave su tutti i dispositivi. Se l'app è specifica del dispositivo, creare nomi di pacchetto univoci per dispositivo e chiave.

Isolamento di app e processi

Il modello di sandboxing per Android offre una maggiore sicurezza per app e processi se usato correttamente.

Isolamento dei processi di root

I processi di root sono il bersaglio più frequente di attacchi di escalation di privilegi; ridurre il numero di processi di root riduce il rischio di escalation di privilegi.

  • Assicurarsi che i dispositivi eseguano il codice minimo necessario come root. Ove possibile, utilizzare un normale processo Android anziché un processo principale. Se un processo deve essere eseguito come root su un dispositivo, documentare il processo in una richiesta di funzionalità AOSP in modo che possa essere esaminato pubblicamente.
  • Ove possibile, il codice root dovrebbe essere isolato da dati non attendibili e vi si dovrebbe accedere tramite comunicazione tra processi (IPC). Ad esempio, ridurre la funzionalità di root a un piccolo servizio accessibile tramite Binder ed esporre il servizio con l'autorizzazione della firma a un'app con privilegi bassi o assenti per gestire il traffico di rete.
  • I processi di root non devono essere in ascolto su un socket di rete.
  • I processi di root non devono includere un runtime per scopi generici, come una VM Java).

Isolamento delle app di sistema

In generale, le app preinstallate non devono essere eseguite con l'identificatore univoco del sistema condiviso (UID). Se è necessario che un'app utilizzi l'UID condiviso del sistema o un altro servizio privilegiato (ad es. Telefono), l'app non dovrebbe esportare alcun servizio, destinatario di trasmissione o provider di contenuti a cui possano accedere le app di terze parti installate dagli utenti .

  • Assicurarsi che i dispositivi eseguano il codice minimo necessario come sistema. Ove possibile, utilizzare un processo Android con il proprio UID anziché riutilizzare l'UID di sistema.
  • Ove possibile, il codice di sistema dovrebbe essere isolato da dati non attendibili ed esporre IPC solo ad altri processi affidabili.
  • I processi di sistema non devono essere in ascolto su un socket di rete. Questo è un requisito CTS.

Processi di isolamento

Sandbox di applicazioni Android offre alle app un'aspettativa di isolamento da altri processi sul sistema, inclusi processi di root e debugger. A meno che il debug non sia specificamente abilitato dall'app e dall'utente, nessuna app dovrebbe violare tale aspettativa.

  • Assicurati che i processi di root non accedano ai dati all'interno delle cartelle dei dati delle singole app, a meno che non utilizzi un metodo di debug Android documentato.
  • Assicurati che i processi di root non accedano alla memoria delle app, a meno che non utilizzi un metodo di debug Android documentato.
  • Assicurarsi che i dispositivi non includano alcuna app che accede ai dati o alla memoria di altre app o processi.