Android Nougat (7.1+) ha una modalità di rilevamento del panico che rileva se l'utente sta premendo freneticamente il pulsante Indietro. Leggi di più per sapere cosa fa.
Mentre molti lettori di siti Web incentrati su Android come il nostro hanno meno probabilità di incontrarli situazioni in cui un'applicazione canaglia compromette il loro sistema, lo stesso potrebbe non essere vero per il generale popolazione. Quasi ogni settimana sentiamo da vari ricercatori di sicurezza parlare di nuovi malware che prendono di mira gli utenti Android. La maggior parte di questi attacchi dannosi può essere evitata controllando le autorizzazioni o evitando di installare applicazioni dall'aspetto losco anche se consigliamo ai nostri lettori di prendere in mano la sicurezza del proprio telefono, Google è responsabile della protezione di ogni Android telefono. A tal fine, l'azienda ha introdotto silenziosamente una nuova funzionalità di sicurezza in Android 7.1 Nougat chiamata "rilevamento del panico" che rileva la pressione ripetuta del pulsante Indietro in successione, quindi riporta l'utente alla schermata iniziale.
Molto semplicemente, se un'applicazione canaglia tenta di prendere il controllo dello schermo dell'utente e impedirgli di uscire (magari implementando un servizio di accessibilità per intercettare tutti gli eventi chiave), Android stesso sovrascriverà l'applicazione per ripristinare il file schermo di casa. L'utente può quindi presumibilmente disinstallare l'applicazione dannosa dal launcher.
Questa funzionalità è passata inosservata, comprensibilmente perché Google probabilmente non vorrebbe fare pubblicità al mondo in un modo in cui sta eliminando le applicazioni dannose. Ma un rapido sguardo al codice open source di Android rivela come funziona questa semplice funzionalità sui dispositivi che la supportano.
Esaminando il codice
Prima di tutto, solo perché sul tuo dispositivo è installato Android 7.1+ non significa che questo comportamento di rilevamento del panico sia effettivamente abilitato. Il valore che determina se la funzionalità è attiva può essere trovato nel file config.xml
file all'interno dell'APK SystemUI.
<integername="config_backPanicBehavior">0integer>
Per impostazione predefinita, la reazione di Android alla pressione del pulsante Indietro in caso di panico è quella di non fare nulla. Se il valore intero di config_backPanicBehavior
è impostato su 1, tuttavia, è qui che entra in gioco la nuova misura di protezione di Android.
Entro PhoneWindowManager.java
possiamo vedere la maggior parte di come viene implementata questa funzionalità. Prima di tutto, il file definisce due cose: quante pressioni del pulsante Indietro sono necessarie affinché il sistema determini che l'utente è "in preda al panico" e quindi quale azione intraprendere in base a quello stato.
// Number of presses needed before we induce panic press behavior on the back button
staticfinalint PANIC_PRESS_BACK_COUNT = 4;
staticfinalint PANIC_PRESS_BACK_NOTHING = 0;
staticfinalint PANIC_PRESS_BACK_HOME = 1;
Per impostazione predefinita, il sistema richiede 4 pressioni consecutive del pulsante Indietro per entrare in modalità panico. Se la funzione utilizza o meno il valore intero di PANIC_PRESS_BACK_NOTHING
O PANIC_PRESS_BACK_HOME
è determinato dal valore nel file di configurazione all'interno dell'APK SystemUI.
Indipendentemente da questo valore, ogni pressione multipla del pulsante Indietro viene controllata per vedere se verrà conteggiata come pressione di panico. Innanzitutto, il sistema intercetta la pressione verso il basso per il KEYCODE_BACK evento tasto e controlla se il sistema è impostato o meno per verificare la presenza di pressioni multiple o prolungate del tasto. Quindi, il sistema controlla se deve passare o meno la pressione su per lo stesso evento chiave KEYCODE_BACK all'app utente.
Nel interceptBackKeyDown()
metodo, se il contatore delle pressioni del tasto Indietro è compreso tra 1 e 3, il sistema salta il timeout del rilevamento di pressioni multiple poiché il rilevamento di panico richiede almeno 4 pressioni per eseguire qualsiasi azione.
Successivamente, una volta che l'utente rimuove il dito dal tasto Indietro che attiva un evento su, il file interceptBackKeyUp
aggiunge 1 al contatore della chiave posteriore. Quindi accoda un messaggio per 300 millisecondi nel futuro. Il motivo è che il sistema riserva un periodo di ritardo di 300 millisecondi quando decide se la pressione del pulsante Indietro fa parte di un evento di pressione multipla. Se lo è, l'utente potrebbe essere preso dal panico mentre preme il pulsante, quindi il sistema non dovrebbe inviare l'evento chiave all'applicazione utente.
Il valore di timeout della pressione multipla di 300 ms è memorizzato nell'impostazione sicura "multi_press_timeout
" come mostrato di seguito.
/**
* The duration in milliseconds between the first tap's up event and the second tap's
* down event for an interaction to be considered part of the same multi-press.
* @hide
*/
publicstaticfinal String MULTI_PRESS_TIMEOUT = "multi_press_timeout";
Per impostazione predefinita, questo valore è impostato su 300 ms.
/**
* Defines the default duration in milliseconds between the first tap's up event and the second
* tap's down event for an interaction to be considered part of the same multi-press.
*/
privatestaticfinalint DEFAULT_MULTI_PRESS_TIMEOUT = 300
Quindi, se viene effettivamente rilevata una pressione multipla (più di 1 pressione completa del pulsante Indietro su/giù entro 300 ms), il sistema chiama il backMultiPressAction
metodo per determinare quale azione intraprendere. Infine, il contatore del pulsante Indietro viene reimpostato su 0.
Sebbene si tratti di una funzionalità molto minore e non pubblicizzata, è comunque bello vedere su cosa sta lavorando Google dietro le quinte per rendere Android più sicuro per l'utente medio.