Bene, diamo un'occhiata ai quattro componenti chiave di un'applicazione Android.
Cioè, metà della vulnerabilità si basa sul traffico di rete relativo a HTTPS o ad altre connessioni TCP, e l'altra metà
si trova all'interno di questi quattro componenti.
Iniziamo quindi con le attività.
E ora la domanda: cos'è un'attività se avviamo la nostra applicazione?
Se facciamo clic sull'icona del nostro smartphone, come questa, appare una schermata sul nostro schermo.
Come in questo caso, la schermata mostra un nome utente e una password e il blocco in questa schermata è
un'attività.
Si tratta quindi di una sorta di contenuto dello schermo.
Nel nostro caso, si tratta di un'attività di registrazione se ora eseguiamo il login.
Se si inseriscono le credenziali corrette e si fa clic su Accedi, viene visualizzata un'altra schermata.
In questo caso, il suo profilo.
Il profilo è ancora una volta un'altra attività.
Si tratta quindi di un altro contenuto dello schermo.
Se ora si fa clic sulle impostazioni del modello, si avvia un'altra attività, che è l'attività "Impostazioni assolutamente
corrette".
Quindi le impostazioni o l'attività di impostazione sono solo un altro contenuto della schermata.
Infine, abbiamo questo pulsante di codice che avvia la nostra ultima attività, ovvero l'attività
di decodifica della nostra applicazione.
Va bene.
Ok.
Quindi ora abbiamo tutte le nostre attività, ma devono essere in un unico modo.
Ad esempio, l'attività codice potrebbe lanciare anche altre attività, come già visto in precedenza.
In questo caso, si tratta di un'attività di profilo.
Se facciamo clic sull'attività del codice, il pulsante del profilo, appare la schermata del profilo, che è semplicemente
un'attività del profilo.
Va bene.
Quindi, in un modo o nell'altro, possiamo anche interagire tra queste attività.
Va bene.
Per riassumere, in questo momento le attività sono semplicemente degli schermi.
Ecco cos'è un'attività.
Quindi abbiamo un layout di schermo strutturato in un XML.
E sì, questa struttura viene aperta quando apriamo un'attività di questo tipo.
Quindi, semplicemente, apriamo un'altra schermata di apertura.
Alcuni schermi possono essere pericolosi.
Cioè, sono stati protetti da un nome utente e da una password, ad esempio, per aprire il profilo o l'attività
di impostazione.
Dobbiamo inserire queste credenziali per accedere all'applicazione.
Naturalmente.
Sì, questo è il motivo per cui abbiamo questa protezione con password e quindi abbiamo il quadrato intorno
a tutte, il che significa che queste attività sono all'interno o sono protette dal contesto dell'applicazione, il che significa
che solo l'utente corrente, l'ID utente, che abbiamo visto in queste autorizzazioni o alcune applicazioni di sistema davvero
elevate possono interagire con questo.
Ad esempio, se abbiamo della frutta, sì, possiamo semplicemente iniziare quello che vogliamo.
Ma un'altra applicazione dannosa, come questa qui, non può accedervi.
Quindi possiamo avviare l'attività di registrazione con la nostra applicazione dannosa.
Sì, è corretto.
Perché questa è l'attività che è stata definita come attività di lancio.
Ma tutte le altre attività sono protette.
Quindi non possiamo semplicemente accedervi, il che sarebbe.
Sì, il che sarebbe un enorme rischio per la sicurezza, ovviamente.
Va bene.
Quindi la domanda è: dov'è il problema?
Giusto.
Quindi tutto sembra a posto.
Abbiamo ottenuto nome utente e password.
È necessario inserirli per accedere alle altre attività o per entrare nel contesto di questa applicazione.
Quindi va tutto bene, giusto?
Sì.
Fino a quando non abbiamo ottenuto un certo caso in questo caso potrebbe essere il seguente.
Supponiamo che il nostro codice di attività sia qualcosa come un codice QR o un altro codice segreto che può essere scansionato
da un'applicazione con fotocamera come questa qui.
Quindi, se l'applicazione della fotocamera esegue la scansione del codice segreto e vogliamo aprire la nostra applicazione,
non funziona perché se la fotocamera esegue la scansione del codice, cerca di aprire questa attività.
Ma questo è stato protetto con il contesto dell'applicazione.
Quindi l'applicazione della fotocamera non può semplicemente avviare questa attività in questo momento e quindi non si apre.
E qui la nostra applicazione non funzionerebbe.
Ora, come sviluppatore, abbiamo questo caso d'uso.
Abbiamo ottenuto un codice segreto e vogliamo scansionarlo con un'applicazione fotocamera per poi
aprire la nostra app.
Quindi è un caso d'uso assolutamente valido, giusto?
Assolutamente sì.
E quindi abbiamo la soluzione per questo problema.
E la soluzione è esportata, quindi possiamo esportare determinate attività, il che significa che ora sono raggiungibili
dal mondo esterno, il che significa che l'applicazione della telecamera può avviare questa attività, ma solo questa,
non l'altra, ad esempio il profilo o le impostazioni, perché sarebbe pericoloso.
Al momento, il modo in cui funziona è basato sugli intenti.
Nei prossimi video daremo uno sguardo intenso.
Si tratta quindi di un sistema piuttosto sorprendente.
Va bene.
Ma finora, a prima vista, direi che tutto sembra buono.
Cioè, possiamo interagire con la nostra applicazione scansionando un codice segreto e gli altri sono ancora
protetti.
Ad esempio, possiamo raggiungere solo l'attività di impostazione che può modificare la nostra password.
Se accediamo a questa applicazione, facciamo clic sul pulsante delle impostazioni nell'attività del profilo e poi possiamo
interagire con questa, giusto?
E fortunatamente non perché nell'attività di codice c'era qualcosa che non era un certo pulsante.
Oh sì.
All'interno del codice.
Attività.
Siamo in grado di avviare l'attività del profilo ed è così che le vulnerabilità possono essere create come sviluppatori
in questo momento.
Quindi abbiamo ottenuto un determinato caso d'uso.
Vogliamo iniziare questa attività di codice che è assolutamente valida, ma dobbiamo pensarla
fino in fondo.
Se questa attività può avviare anche altre attività, ad esempio quella del profilo,
allora il problema è enorme.
L'attività del profilo si svolge nel contesto dell'applicazione sicura.
Sì, questa attività non è stata esportata nel mondo esterno.
Sì.
Ma una volta raggiunto questo contesto di sicurezza interno tramite l'attività di decodifica, e se abbiamo la possibilità di avviarlo
all'interno della nostra attività di codice, allora possiamo di nuovo interagire con tutto il resto del contesto sicuro,
il che significa che possiamo avviare questa attività di profilo da questa attività di codice che è stata esportata
nel mondo esterno.
E questo significa che tutti noi possiamo avviare queste attività di impostazione, perché una volta raggiunto questo contesto
interno, siamo all'interno del contesto utente di questa applicazione.
Quindi abbiamo i permessi o i diritti di interagire con tutti gli altri componenti presenti, il che
significa che se queste attività sono interconnesse, possiamo anche avviare altre attività da una che è stata
esportata nel mondo esterno.
Va bene.
Sì, ora sembra un po' confuso, ma non preoccupatevi, faremo alcuni esercizi relativi a questo aspetto
e poi sarà tutto chiarissimo.
Va bene.
Come possiamo sfruttarlo subito.
Lo sfruttamento potrebbe essere effettuato, ad esempio, da un'applicazione dannosa.
Possiamo utilizzare un'applicazione dannosa per avviare l'attività del codice.
Una volta avviata l'attività di decodifica, perché questa è stata esportata, possiamo raggiungere l'attività del profilo e poi
passare all'attività delle impostazioni per modificare, ad esempio, la password dell'utente.
A volte questi approcci funzionano e a volte no.
Il motivo per cui non funzionano potrebbe essere il seguente.
Supponiamo che le nostre credenziali utente siano criptate e che, se ci agganciamo a questa applicazione,
tali credenziali vengano decriptate.
Ora, se stiamo utilizzando alcune funzionalità, l'applicazione presume che tutto sia stato decriptato,
perché questo è il caso quando ci colleghiamo a questa applicazione, se ora cerchiamo di interagire con alcune
cose, per esempio, e cambiare la password o cose del genere, l'applicazione potrebbe bloccarsi
perché abbiamo sì, abbiamo barato un po'.
Abbiamo imbrogliato molto per arrivare a un certo stato e questa applicazione potrebbe dover impostare alcuni stati
prima.
Quindi non è detto che se riusciamo a lanciare un'attività di modifica della password, questa funzioni correttamente, è qualcosa
che dobbiamo verificare.
Tuttavia, se possiamo interagire con tutte queste attività, c'è almeno una funzione che potrebbe causare
problemi in un'applicazione il più delle volte.
Ok, questo è un aspetto che dobbiamo cercare.
Ora, la domanda è: come possiamo identificare questa vulnerabilità?
Quindi, dove dobbiamo cercare per ottenere queste informazioni se un'attività è stata esportata o meno?
La risposta è nel manifest di Android.
Quindi questo file di configurazione contiene tutte queste informazioni sulle nostre attività o meno.
Se stiamo creando un'attività, ci sarà una voce per questa attività nel manifest XML di Android.
Ok, ora sappiamo dove cercare, ma qual è il termine che dobbiamo cercare?
Ci sono due opzioni.
Abbiamo l'ID di esportazione esplicito e l'ID di esportazione implicito e l'ID di esportazione esplicito è facilissimo, in quanto è sufficiente
ottenere questo tech esportato uguale a.
Se si trova questo dato nella nostra tecnologia applicativa, sappiamo che l'attività è stata esportata.
Va bene.
L'altro è implicitamente esportato.
E abbiamo già visto questa esportazione implicita.
Significa semplicemente che tutto ciò che ha un filtro intent viene esportato automaticamente in true.
Si tratta quindi di qualcosa che potrebbe non essere così evidente in questo momento, ma è così.
Quindi, se sappiamo questo, siamo pronti a partire.
Queste sono le uniche cose che dobbiamo cercare.
Se si vuole sapere se un'attività o un altro componente è stato impostato come esportato su true o no.
Abbiamo già visto questo filtro intent nel nostro manifest XML di Android nell'attività di lancio e ora possiamo
mettere insieme il nostro pacco.
L'attività di lancio ha questo filtro di intento, il che significa che l'attività di lancio è impostata per esportarlo.
Quindi questa attività è disponibile dal mondo esterno.
E naturalmente, se ci pensate, deve essere così.
Supponiamo che le nostre attività si svolgano in un contesto applicativo non sicuro.
Se si fa clic sull'icona di un'applicazione, è necessario avviare almeno un'attività.
Pertanto, questa attività deve essere raggiungibile dal mondo esterno.
Altrimenti non potremmo nemmeno avviare la nostra applicazione perché anche il servizio di sistema che sta
avviando queste attività non ha il permesso di interagire nel contesto sicuro, ovviamente.
Altrimenti sarebbe assolutamente pericoloso perché questo servizio potrebbe essere avviato anche nel profilo o nell'attività
delle impostazioni, in questo caso proprio adesso.
Il funzionamento del sistema è piuttosto sorprendente.
Abbiamo un'attività, l'attività di lancio, che viene esportata nel mondo esterno, il che significa che ogni
applicazione potrebbe avviarsi a vicenda, quindi potremmo creare un'applicazione dannosa che avvia costantemente
altre applicazioni.
Ma questo non è un caso d'uso reale, giusto?
È molto fastidioso, ma non è pericoloso.
Semplicemente fastidioso.
Ok, torniamo a questo qui.
Ora abbiamo il nostro contesto sicuro e un'attività, quella di lancio, che viene
esportata all'esterno.
Una volta avviata questa attività, possiamo interagire con gli altri componenti.
In questo modo ci troviamo in un contesto sicuro e possiamo, ad esempio, avviare o aprire l'attività del profilo
se abbiamo fornito le credenziali corrette.
Ecco come stanno le cose.
L'intero sistema funziona e questo è il motivo per cui abbiamo sempre questa cartella di intenti con
la nostra attività di lancio.
Va bene.
Ok.
Nel nostro caso, se vogliamo esportare questa attività di codice, possiamo semplicemente usare exported uguale
a true.
E poi questo è disponibile dal mondo esterno e può essere avviato dall'applicazione della telecamera
o da altro.
Va bene.
Ok.
Ora vi ho già svelato tutto, ma questo schema di esportazione non riguarda solo le attività, ma tutti i nostri
componenti chiave, quindi anche i servizi di ricezione radiotelevisiva e i fornitori di contenuti.
E dobbiamo esaminare ogni singolo componente per verificare se ci sono vulnerabilità relative
a questo.
Ok.
Quindi, per il momento, si è trattato di molta teoria e quindi suggerirei nel prossimo video
di esaminare un esempio pratico su come identificare le attività esportate e come interagire con esse.
Come possiamo avviare un altro contenuto dello schermo e cercare anche qualche tipo di vulnerabilità al suo interno?
Va bene.
Ok.
Non vedo l'ora di vedervi nella parte pratica.