Strumenti e rendimento

Sicurezza delle app nell'era agentica

Altoparlanti

  • Kristen O'Leary

    Senior Developer Relations Engineer

  • SAB

    Developer Relations Engineer

Informazioni

Informazioni sulla presentazione

Questa presentazione esplora il passaggio strategico dal considerare l'AI come un assistente al coding generico allo sfruttarla come un revisore peer di sicurezza automatizzato e sensibile al contesto, integrato direttamente nel ciclo di vita dello sviluppo Android. Discutiamo di come gli agenti AI specializzati, collegati alla toolchain Android tramite skill, possono contribuire a migliorare la sicurezza delle app. Colmando il divario tra le funzionalità degli LLM non elaborati e il contesto approfondito del progetto, questo approccio consente ai team di sviluppo di mantenere una distribuzione delle funzionalità ad alta velocità senza compromettere i rigorosi standard di sicurezza e policy.

Riepilogo

  • Gli agenti AI generici non dispongono del contesto chiave durante gli audit, ma le competenze di sicurezza di Android forniscono indicazioni supportate dai ricercatori. Controllano la sicurezza degli intent e applicano le autorizzazioni utilizzando configurazioni di compilazione specifiche del progetto.
  • La skill relativa alle norme di Google Play esegue un'analisi statica per rilevare i problemi di conformità prima dell'invio. Può fare un controllo incrociato dell'analisi del codice con le dichiarazioni esistenti del Play Store.
  • L'API Play Integrity valuta l'integrità di app e dispositivi in fase di esecuzione. La dashboard Protetto con Play unisce il monitoraggio dell'integrità e della distribuzione in un unico posto.
  • Le API mirate consentono alle app di proteggere la privacy degli utenti senza richiedere autorizzazioni ampie. Alcuni esempi sono l'API SMS Retriever e la libreria alpha del pulsante posizione.

Skill

Risorse

Gemini Notebook

Argomenti

  • sicurezza-delle-app
  • ai-agents
  • play-integrity-api
  • autorizzazioni
  • pulsante posizione
  • advanced-protection-mode

Trascrizione

Scarica la trascrizione

Introduzione

  • Ciao, sono Kristen.

  • Ciao, io sono Sabs.

  • Oggi siamo qui per parlarvi della sicurezza nell'era agentica.

  • Nell'ultimo anno, abbiamo assegnato oltre 2 milioni di dollari in premi per il programma Android Bug Hunters e oltre 200.000 $per i dispositivi mobili.

  • Nell'era agentica di oggi, la sicurezza delle app è in continua evoluzione.

  • Parliamo quindi degli strumenti che ci aiutano a risolvere questi problemi in modo rapido ed efficace.

  • Per migliorare le prestazioni degli agenti per la sicurezza di Android, la risposta non è un prompt migliore.

  • Si tratta di strumenti e workflow per aiutare gli agenti a comprendere le nostre toolchain e API per contribuire a proteggere la tua app.

  • Sono le 16:30.

  • Di giovedì.

  • Stai creando una release e l'integrazione continua diventa rossa, con un solo errore: un broadcast receiver registrato senza un flag di esportazione.

  • Quindi, che tu faccia parte di un team di piccole dimensioni, in cui ti occupi di tutto, o di un team di grandi dimensioni, in cui i controlli di sicurezza vengono eseguiti mentre stai preparando la release, la realtà è la stessa.

  • Siamo ingegneri di prodotto, spediamo rapidamente funzionalità di alta qualità e non siamo necessariamente ricercatori di sicurezza.

  • Quindi, qual è l'istinto naturale?

  • Quindi, passiamo l'avviso a uno strumento agentico e chiediamo all'agente di correggere l'errore.

Limitazioni di contesto degli audit di sicurezza degli agenti AI

  • Tuttavia, lo strumento agentico, che opera senza il contesto del tuo progetto, ha tre punti ciechi.

  • Potrebbe non sapere che la tua app è creata da moduli della funzionalità dinamiche o bundle di APK multipli.

  • Vede un file, non un artefatto spedito.

  • Potrebbe non sapere o non essere in grado di tracciare il flusso di dati dalla UI Kotlin alla logica condivisa KMP nelle chiamate JNI C++ native.

  • Vede un solo livello.

  • Infine, potrebbe non essere a conoscenza dell'SDK minimo o delle versioni di build di Gradle.

  • Abbiamo quindi indirizzato un agente all'app e chiesto un audit della sicurezza.

  • Sono stati restituiti sei risultati.

  • E qui sta il punto.

  • Nessuno di questi è sbagliato.

  • Sono tutte difendibili, ma solo una è il bug da cui siamo partiti.

  • Il resto è un mix di best practice, aspetti da approfondire, speculazioni e cose che potrebbero non essere applicabili.

  • Quindi, ora che hai scalato questo approccio in una codebase reale, con più avvisi e in ogni richiesta di pull, sarai tentato di utilizzare l'annotazione suppress lint.

  • Dovrai apportare una modifica per unire la modifica o potresti persino perdere del tutto una vulnerabilità.

  • È così che le vulnerabilità reali passano inosservate.

  • Lo strumento non è stato negligente, è stato attento, ma attento non è la stessa cosa di utile.

  • Facciamo un esempio concreto.

  • Ad esempio, chiedi all'agente: "Controlla ogni componente esportato in questa app per il reindirizzamento degli intent dell'app".

  • Si tratta di un'attività di sicurezza autentica e, in un'app multimodulo, è un'attività di grandi dimensioni.

  • Questo è il tipo di richiesta in cui viene effettivamente mostrato il costo.

  • Senza indicazioni specifiche per Android, l'agente non ha una strategia per questa domanda.

  • Quindi, utilizza la forza bruta.

  • Potrebbe leggere moduli che non esportano nulla.

  • Potrebbe derivare nuovamente dal primo principio ciò che rende sfruttabile un reindirizzamento di intent.

  • Potrebbe seguire percorsi che non erano mai stati raggiungibili.

  • Stai pagando per l'esplorazione, non per l'analisi.

  • Una skill è ciò che fornisce la strategia mancante.

  • Ad esempio, le competenze di sicurezza di Android forniscono all'agente istruzioni che seguono le indicazioni attuali, la stessa sequenza di passaggi che un ricercatore di sicurezza seguirebbe effettivamente, e l'agente smette di fare supposizioni.

  • Non rileva nuovamente le regole perché sono state fornite dalla skill.

Skill di sicurezza di Android per gli agenti

  • Al momento, abbiamo lanciato due competenze di sicurezza: Intent Security e Permissions.

  • La sicurezza degli intent riguarda ciò che altre app possono far fare alla tua app.

  • La tua app dispone di autorizzazioni e di una sessione di accesso che non sono disponibili per l'utente.

  • Pertanto, ogni componente esportato e ogni pending intent che distribuisci è un potenziale modo per consentire a qualcuno di agire tramite te.

  • La skill aiuta a evitare che questo succeda.

  • La skill Permissions aiuta a colmare il divario tra un'autorizzazione dichiarata e una effettivamente applicata.

  • Può aiutarti a scrivere il controllo delle autorizzazioni appropriato.

  • Aiuta a identificare se un provider con un percorso con caratteri jolly concede l'intero database anziché una directory.

  • Inoltre, rileva le richieste di autorizzazioni eccessive.

  • Ad esempio, richiedere un accesso ampio quando sarebbe sufficiente il selettore di foto.

  • Utilizzalo con la CLI Android, quindi chiedi "Controlla la sicurezza degli intent".

  • Nessuna configurazione.

  • Nessuna ottimizzazione delle regole.

  • In questo modo, l'output non è un muro di avvisi.

  • È una recensione.

  • Ecco un bug, ecco perché è importante per la tua app ed ecco la correzione.

  • Ecco un consiglio da pro.

  • Utilizza la CLI Android per trovare e installare facilmente l'app.

    android skills list
    android skills add android-intent-security
    android skills add android-permissions-security
  • Inoltre, poiché la skill sa esattamente cosa cercare nel tuo progetto, vede la tua app così come viene effettivamente distribuita.

  • Rispetta l'SDK minimo in modo che la correzione venga compilata, i percorsi dei file reali e i numeri di riga reali.

  • Ecco la recensione che ricevi.

  • Indica il file e la riga esatti, spiega la minaccia reale e il motivo della modifica, non si limita a dire che lo dice Lint.

  • Cita la skill utilizzata.

  • Ha letto la configurazione di build, ha visto l'SDK minimo 26 e ha scelto ContextCompat in modo che la correzione funzioni, quindi ti fornisce un diff per applicarla.

  • Questo è l'avviso con cui abbiamo iniziato, ma ora con una correzione suggerita e un ragionamento aggiuntivo.

Competenza sugli insight sulle norme di Google Play

  • Quindi, le competenze precedenti rilevano i bug di sicurezza.

  • Ora parliamo di un altro aspetto: la conformità alle norme relative alle app.

  • Ad esempio, immaginiamo che tu sia un nuovo sviluppatore di app che vuole lanciare un'app sul Play Store.

  • La compilazione del modulo Sicurezza dei dati è un passaggio importante per il lancio della tua app, quindi utilizziamo tutti gli strumenti possibili per assicurarci di farlo correttamente prima dell'invio dell'app.

  • La skill relativa alle norme di Google Play esegue un'analisi statica del tuo codebase.

  • Se pubblichi un'app del Play Store esistente, può anche fare un controllo incrociato dell'analisi del codice statico con le dichiarazioni del Play Store.

  • L'esecuzione di questa skill può aiutarti a individuare potenziali problemi relativi alle norme di Google Play prima, non dopo, l'invio dell'app e contribuisce ad accelerare la procedura di invio.

  • Il flusso di lavoro è simile a quello delle altre skill di cui abbiamo parlato: importala e poi chiedi "Controlla la conformità di questa app alle norme di Google Play prima che la invii".

  • A destra vedrai uno screenshot di un report di esempio e di seguito i comandi della CLI Android per installarlo.

    android skills list
    android skills add play-policy-insights

Difesa in fase di esecuzione con l'API Play Integrity

  • Quindi, tutto ciò di cui abbiamo parlato finora avviene prima della pubblicazione: controllo degli intent, verifica delle autorizzazioni, convalida della conformità.

  • Questa è la sicurezza in fase di build, ed è essenziale.

  • Tuttavia, esiste un'intera classe di minacce che si manifesta solo quando l'APK è disponibile pubblicamente e viene eseguito su dispositivi che potresti non controllare.

  • L'API Play Integrity risponde in fase di runtime a tre domande a cui il tuo codice non può rispondere: si tratta di una build originale e non modificata della tua app?

  • L'app è in esecuzione su un dispositivo Android originale?

  • Si tratta di un account utente Play?

  • Puoi quindi utilizzare l'API Play Integrity per restituire esiti sull'integrità dell'app, del dispositivo e altro ancora.

  • Oltre a rendere più rapida e semplice la pubblicazione della tua app in modo più sicuro, stiamo anche semplificando la protezione delle entrate e della reputazione della tua app.

  • Quindi, proteggi la tua attività da attività fraudolente e illecite.

  • La nuova dashboard Protetto con Play, che puoi vedere qui, ti aiuta a monitorare e configurare le difese di integrità, distribuzione e monetizzazione in un unico posto.

  • Stiamo anche riducendo la latenza di preparazione per l'API Play Integrity, in modo che tu possa utilizzare questi controlli durante i percorsi utente in cui la velocità è fondamentale per bloccare più rapidamente le minacce e i dispositivi rischiosi.

  • Abbiamo appena parlato delle funzionalità e degli strumenti di Android per contribuire a mantenere le app al sicuro, ma che dire degli utenti?

API di protezione OTP via SMS

  • Diamo innanzitutto un'occhiata alla protezione OTP via SMS.

  • Supponiamo che tu voglia implementare la verifica utente basata su SMS per la tua app e inviare codici di verifica.

  • L'autorizzazione SMS consente all'app di accedere ai dati dei messaggi, inclusi i dati sensibili come le OTP.

  • Per questo motivo, abbiamo introdotto alcune API nella tua app per consentirti di implementare questa funzionalità, in modo da non dover richiedere autorizzazioni SMS generiche, ma di poter comunque ricevere i codici OTP via SMS per la verifica.

  • L'API SMS Retriever consente alla tua app di verificare automaticamente le OTP senza autorizzazioni SMS estese.

  • Aggiungi al messaggio un hash di 11 caratteri che identifica la tua app e il sistema ti consegna solo quel messaggio.

  • Se non puoi controllare il formato del messaggio, utilizza l'API per il consenso dell'utente SMS.

  • Il sistema mostra un singolo prompt una tantum.

  • L'utente tocca Consenti o Nega e, se consente, ricevi il singolo messaggio.

  • Non è ancora necessaria un'autorizzazione generica per gli SMS.

Accesso una tantum con il pulsante posizione

  • Alcune app potrebbero richiedere la posizione esatta una sola volta per completare le attività.

  • L'autorizzazione esistente Solo questa volta ha un attrito elevato per gli utenti, quindi a volte gli sviluppatori chiedono un'autorizzazione più ampia e precisa.

  • Il pulsante posizione è uno strumento che offre un modo semplice per concedere all'app l'accesso una tantum alla posizione esatta.

  • Si tratta di un elemento UI di Android che può essere personalizzato e incorporato dagli sviluppatori di app.

  • A giugno abbiamo lanciato la prima versione della libreria Jetpack alpha del pulsante posizione.

  • Qui puoi vedere le autorizzazioni necessarie per attivare il pulsante posizione nel file manifest di Android.

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
        android:usesPermissionFlags="onlyForLocationButton"/>
    
    <uses-permission android:name="android.permission.USE_LOCATION_BUTTON" />
    
        <application
            android:icon="@mipmap/ic_launcher"
            android:label="LocationButtonSample"
            android:theme="@style/Theme.PinPoint">
            <activity
                android:name=".MainActivity"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
  • Devi dichiarare l'autorizzazione di accesso alla posizione standard aggiungendo il flag di autorizzazione onlyForLocationButton, insieme all'autorizzazione USE_LOCATION_BUTTON dedicata richiesta dal servizio di rendering remoto del sistema.

  • A destra, il codice Jetpack per implementarlo.

    ...
    import androidx.core.locationbutton.compose.LocationButton
    
    @Composable
    fun LocationPermissionScreen(onPermissionGranted: () -> Unit, onPermissionDenied: () -> Unit) {
        // Renders the secure system-trusted Location Button composable
        LocationButton(
            // Callback triggered when the user taps the secure button and makes a decision on the permission dialog
            onPermissionResult = { isGranted ->
                if (isGranted) {
                    onPermissionGranted()
                } else {
                    onPermissionDenied()
                }
            },
    ...
  • Come puoi vedere, stiamo creando un pulsante posizione e inizializzando un callback.

  • Questo callback viene attivato quando l'utente tocca il pulsante posizione per decidere se concedere o negare l'autorizzazione.

Integrazione della modalità di protezione avanzata

  • La modalità di protezione avanzata è una funzionalità rivolta agli utenti a rischio o attenti alla sicurezza, ma chiunque può attivarla.

  • Ad esempio, se hai un'app bancaria, non forzi l'autenticazione a più fattori aggiuntiva per ogni trasferimento perché gli utenti comuni non amano questo attrito aggiuntivo.

  • Tuttavia, quando la modalità di protezione avanzata è attiva, l'app sa che l'utente vuole il massimo livello di protezione, quindi puoi richiedere automaticamente l'autenticazione biometrica per ogni trasferimento.

  • La modalità di protezione avanzata implementa un insieme di configurazioni predefinite progettate per rafforzare la protezione del dispositivo.

  • Qui ti mostriamo come eseguire l'integrazione nella tua app.

  • Devi richiedere l'autorizzazione, eseguire una query sulla modalità di protezione avanzata e verificare se l'utente ha attivato la modalità di protezione avanzata utilizzando il servizio di sistema Advanced Protection Mode Manager sul dispositivo.

    class AdvancedProtectionManager() {
      // Check the current status
      fun isAdvancedProtectionEnabled(): Boolean
    
      // Be alerted when status changes
      fun registerAdvancedProtectionCallback(executor: Executor,
                                             callback: Callback)
    
      fun unregisterAdvancedProtectionCallback(callback: Callback)
    }
    
    interface Callback() {
      // Called when advanced protection state changes
      fun onAdvancedProtectionChanged(enabled: Boolean)
    }
  • Poi, puoi ascoltare le modifiche di runtime registrando il callback.

Link e risorse utili

  • Oggi abbiamo trattato molti argomenti.

  • Ecco alcuni link rapidi per saperne di più.

  • Facciamo una breve pausa per darti il tempo di annotare gli URL che ti servono.

  • Grazie.

  • Grazie.

Codice

Snippet di codice

Snippet di shell al minuto 05:09 in "Android security skills for agents"
android skills list
android skills add android-intent-security
android skills add android-permissions-security
Snippet di shell al minuto 06:41 in "Google Play policy insights skill"
android skills list
android skills add play-policy-insights
Snippet XML al minuto 09:36 in "Accesso una tantum con il pulsante posizione"
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
    android:usesPermissionFlags="onlyForLocationButton"/>

<uses-permission android:name="android.permission.USE_LOCATION_BUTTON" />

    <application
        android:icon="@mipmap/ic_launcher"
        android:label="LocationButtonSample"
        android:theme="@style/Theme.PinPoint">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
Snippet Kotlin al minuto 09:54 in "Accesso una tantum con il pulsante posizione"
...
import androidx.core.locationbutton.compose.LocationButton

@Composable
fun LocationPermissionScreen(onPermissionGranted: () -> Unit, onPermissionDenied: () -> Unit) {
    // Renders the secure system-trusted Location Button composable
    LocationButton(
        // Callback triggered when the user taps the secure button and makes a decision on the permission dialog
        onPermissionResult = { isGranted ->
            if (isGranted) {
                onPermissionGranted()
            } else {
                onPermissionDenied()
            }
        },
...
Snippet Kotlin al minuto 10:53 in "Advanced protection mode integration"
class AdvancedProtectionManager() {
  // Check the current status
  fun isAdvancedProtectionEnabled(): Boolean

  // Be alerted when status changes
  fun registerAdvancedProtectionCallback(executor: Executor,
                                         callback: Callback)

  fun unregisterAdvancedProtectionCallback(callback: Callback)
}

interface Callback() {
  // Called when advanced protection state changes
  fun onAdvancedProtectionChanged(enabled: Boolean)
}